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
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
// 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
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
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
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
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ó!