0
0
Lập trình
Sơn Tùng Lê
Sơn Tùng Lê103931498422911686980

DRZL — Công cụ tạo mã dựa trên Adapter cho Drizzle ORM

Đăng vào 5 ngày trước

• 4 phút đọc

Giới thiệu về DRZL

DRZL là một công cụ tạo mã hoàn toàn dựa trên adapter cho Drizzle ORM. Nó phân tích schema của bạn và tạo ra mã router, dịch vụ có kiểu và các trình kiểm tra thời gian chạy (Zod/Valibot/ArkType). DRZL hoạt động dựa trên mẫu, cho phép bạn thay thế adapter (hiện tại là oRPC) và mở rộng vào các stack như tRPC/Express/Nest/Next.js với các mẫu tùy chỉnh.

Cấu trúc của DRZL

DRZL bao gồm các phần chính:

  • Analyzer: Chuẩn hóa schema Drizzle của bạn thành một Analysis mà các trình tạo mã có thể sử dụng.
  • Generators: Tạo mã có thể tái sử dụng từ Analysis:
    • Routers (dựa trên adapter): Hiện tại bao gồm oRPC, với các mẫu cho các kiểu khác nhau.
    • Validation: Schema cho Zod, Valibot, và ArkType (chèn/cập nhật/chọn) + index barrel.
    • Service: Dịch vụ có kiểu có thể nhận thức Drizzle hoặc là stub.
  • Templates: Thay thế hoặc tùy chỉnh việc triển khai router (chuẩn/tối thiểu, oRPC + Service, hoặc của riêng bạn).

👉 Tài liệu & ví dụ: DRZL Docs


Bắt đầu nhanh

1) Cài đặt CLI

bash Copy
pnpm add -D @drzl/cli
# npm i -D @drzl/cli
# yarn add -D @drzl/cli
# bun add -d @drzl/cli

2) Thêm cấu hình đơn giản (oRPC + Zod + Service)

typescript Copy
// drzl.config.ts
import { defineConfig } from '@drzl/cli/config';

export default defineConfig({
  schema: 'src/db/schemas/index.ts',
  outDir: 'src/api',
  generators: [
    // 1) Zod validators
    { kind: 'zod', path: 'src/validators/zod', schemaSuffix: 'Schema' },

    // 2) Routers (adapter oRPC), tái sử dụng Zod schemas
    {
      kind: 'orpc',
      template: '@drzl/template-orpc-service',
      includeRelations: true,
      outputHeader: { enabled: true },
      validation: {
        useShared: true,
        library: 'zod',
        importPath: 'src/validators/zod',
        schemaSuffix: 'Schema',
      },
    },

    // 3) Dịch vụ có kiểu (nhận thức Drizzle hoặc stub)
    {
      kind: 'service',
      path: 'src/services',
      dataAccess: 'drizzle', // hoặc 'stub'
      dbImportPath: 'src/db/connection',
      schemaImportPath: 'src/db/schemas',
    },
  ],
});

3) Cài đặt các trình tạo/mẫu mà bạn đã tham chiếu

bash Copy
pnpm add -D @drzl/generator-zod @drzl/generator-service @drzl/template-orpc-service
# Nếu bạn thích Valibot hoặc ArkType:
# pnpm add -D @drzl/generator-valibot @drzl/generator-service @drzl/template-orpc-service
# pnpm add -D @drzl/generator-arktype @drzl/generator-service @drzl/template-orpc-service

Trình tạo oRPC đi kèm với CLI. Các trình tạo Validation + Service là các gói riêng biệt, do đó bạn chỉ cài đặt những gì bạn sử dụng.

4) Tạo mã

bash Copy
pnpm drzl generate -c drzl.config.ts
# npx drzl generate -c drzl.config.ts
# yarn drzl generate -c drzl.config.ts
# bunx drzl generate -c drzl.config.ts

Điều này sẽ viết các trình kiểm tra vào src/validators/*, routers vào src/api, và dịch vụ vào src/services.

(Tùy chọn) Chế độ theo dõi

bash Copy
pnpm drzl watch -c drzl.config.ts --pipeline all --debounce 200

(Tùy chọn) Bắt đầu nhanh oRPC không cần cấu hình

bash Copy
pnpm dlx drzl generate:orpc src/db/schemas/index.ts -o src/api --template standard --includeRelations

Thiết kế dựa trên Adapter

DRZL là adapter-agnostic: việc tạo router được điều khiển bởi các templates nhỏ, có thể kết hợp. Hiện tại, nó nhắm đến oRPC. Bạn có thể viết các mẫu của riêng mình để nhắm đến các stack khác (tRPC, Express, NestJS, Next.js, Prisma, v.v.) hoặc sử dụng các mẫu cộng đồng/ cao cấp khi chúng có sẵn.

Các ý tưởng chính:

  • Templates xác định đường dẫn tệp, tên xuất khẩu, imports/prelude, và mã cho mỗi thủ tục.
  • Tái sử dụng kiểm tra: các trình tạo có thể kết nối các schema Zod/Valibot/ArkType chia sẻ vào các handler (đầu vào/đầu ra).
  • Đầu ra có kiểu: trình tạo thêm typing .output(...) khi có thể.

Ví dụ

  • Ví dụ về quan hệ — các mẫu tạo mã nhận thức quan hệ.
  • Trộn kiểm tra — tái sử dụng các trình kiểm tra chia sẻ trên các routers/dịch vụ.

(Xem trang web để có ví dụ trực tiếp và mã nguồn.)


Giấy phép & quyền sở hữu

  • Bạn sở hữu đầu ra được tạo ra — sử dụng/chỉnh sửa/phân phối theo giấy phép của dự án của bạn.
  • Một tiêu đề đầu ra ngắn được thêm vào mặc định; bạn có thể vô hiệu hóa (outputHeader.enabled = false) hoặc tùy chỉnh nó.

Lộ trình & hỗ trợ

  • Thêm mẫu adapter (cộng đồng + cao cấp) cho các tích hợp sâu hơn.
  • Mẫu tùy chỉnh có sẵn như một dịch vụ trả phí nếu bạn cần một stack/mẫu cụ thể.
  • DRZL là mã nguồn mở; các đóng góp, vấn đề và sao là được hoan nghênh.

Hỏi đáp

DRZL có thể tích hợp với các framework nào?

DRZL hiện tại hỗ trợ tích hợp với oRPC và có thể mở rộng sang tRPC, Express, NestJS, Next.js, và Prisma.

Tôi có thể tạo mã cho các dịch vụ khác nhau không?

Có, bạn có thể tạo mã cho các dịch vụ khác nhau bằng cách sử dụng các mẫu tùy chỉnh hoặc mẫu có sẵn.

Làm thế nào để tôi có thể đóng góp vào DRZL?

Bạn có thể đóng góp vào DRZL qua GitHub, nơi bạn có thể báo cáo lỗi, yêu cầu tính năng hoặc gửi pull request.


Tài nguyên tham khảo

  • Tài liệu: DRZL Docs
  • Bắt đầu: Getting Started
  • Tổng quan CLI: CLI Overview
  • Generators: oRPC, Service, Zod, Valibot, ArkType
  • Templates: Standard, oRPC + Service, Tùy chỉnh
  • Adapters: Tổng quan & Router Adapters

Nếu bạn hoàn thành một sản phẩm nào đó với DRZL, tôi rất muốn thấy nó!

Gợi ý câu hỏi phỏng vấn
Không có dữ liệu

Không có dữ liệu

Bài viết được đề xuất
Bài viết cùng tác giả

Bình luận

Chưa có bình luận nào

Chưa có bình luận nào