zodipus
Compare original and translation side by side
🇺🇸
Original
English🇨🇳
Translation
ChineseZodipus
Zodipus
Type-safe Zod schema generator for Prisma with composable Query Engine.
为Prisma打造的支持可组合查询引擎的类型安全Zod Schema生成器。
When to Apply
适用场景
- User mentions "zodipus" anywhere in conversation
- User wants Zod schemas generated from Prisma
- User needs runtime validation for Prisma queries
- User asks about type-safe query builders
- User has Prisma + Zod integration questions
- User mentions "prisma-zod" or similar terms
- 用户在对话中任何位置提及"zodipus"
- 用户需要从Prisma生成Zod Schema
- 用户需要为Prisma查询提供运行时验证
- 用户询问类型安全的查询构建器相关内容
- 用户有Prisma + Zod集成相关问题
- 用户提及"prisma-zod"或类似术语
Quick Routing
快速路由指引
| User Intent | Skill |
|---|---|
| Install, setup, configure generator | |
| Query engine, createRegistry, type-safe queries | |
| JSON fields, @zodSchema, custom schemas | |
| Errors, validation failed, not working | |
| Migrate from other generators | |
| 用户意图 | 对应技能 |
|---|---|
| 安装、设置、配置生成器 | |
| 查询引擎、createRegistry、类型安全查询 | |
| JSON字段、@zodSchema、自定义Schema | |
| 错误、验证失败、功能异常 | |
| 从其他生成器迁移 | |
Core Concepts
核心概念
1. Generator
1. 生成器
Zodipus is a Prisma generator that outputs Zod schemas:
prisma
generator zodipus {
provider = "zodipus"
output = "./generated"
}Zodipus是一款Prisma生成器,可输出Zod Schema:
prisma
generator zodipus {
provider = "zodipus"
output = "./generated"
}2. Clean Schemas
2. 精简Schema
Generated schemas contain scalar fields only (no relations). This keeps validation fast and focused:
typescript
// Generated UserSchema validates: id, email, name, role, createdAt, updatedAt
// Does NOT include: posts, comments, profile (relations)
const user = UserSchema.parse(data);生成的Schema仅包含标量字段(不包含关联关系)。这能让验证更快速、更聚焦:
typescript
// 生成的UserSchema会验证:id、email、name、role、createdAt、updatedAt
// 不包含:posts、comments、profile(关联关系)
const user = UserSchema.parse(data);3. Query Engine
3. 查询引擎
Build composable queries with automatic validation:
typescript
import { createRegistry } from 'zodipus/queryEngine';
import { models, modelRelations } from './generated/generated-index';
const registry = createRegistry({ models, relations: modelRelations });
const userQuery = registry.createQuery('user');
const query = userQuery({
select: { id: true, email: true },
posts: { select: { title: true } }
});
const result = query.parse(await prisma.user.findFirst(query.query));
// Fully typed: { id: string; email: string; posts: { title: string }[] }通过自动验证构建可组合查询:
typescript
import { createRegistry } from 'zodipus/queryEngine';
import { models, modelRelations } from './generated/generated-index';
const registry = createRegistry({ models, relations: modelRelations });
const userQuery = registry.createQuery('user');
const query = userQuery({
select: { id: true, email: true },
posts: { select: { title: true } }
});
const result = query.parse(await prisma.user.findFirst(query.query));
// 完全类型化:{ id: string; email: string; posts: { title: string }[] }4. Custom JSON Schemas
4. 自定义JSON Schema
Type Prisma JSON fields with :
@zodSchemaprisma
model Post {
/// @zodSchema PostMetadataSchema
metadata Json?
}使用为Prisma JSON字段定义类型:
@zodSchemaprisma
model Post {
/// @zodSchema PostMetadataSchema
metadata Json?
}Minimal Working Example
最小可用示例
Step 1: Install
步骤1:安装
bash
npm install zodipus zodbash
npm install zodipus zodStep 2: Configure
步骤2:配置
prisma
generator client {
provider = "prisma-client-js"
}
generator zodipus {
provider = "zodipus"
output = "./generated"
}
model User {
id String @id @default(cuid())
email String @unique
name String?
posts Post[]
}
model Post {
id String @id @default(cuid())
title String
author User @relation(fields: [authorId], references: [id])
authorId String
}prisma
generator client {
provider = "prisma-client-js"
}
generator zodipus {
provider = "zodipus"
output = "./generated"
}
model User {
id String @id @default(cuid())
email String @unique
name String?
posts Post[]
}
model Post {
id String @id @default(cuid())
title String
author User @relation(fields: [authorId], references: [id])
authorId String
}Step 3: Generate
步骤3:生成
bash
npx prisma generatebash
npx prisma generateStep 4: Use
步骤4:使用
typescript
import { UserSchema, PostSchema } from './generated';
import { createRegistry } from 'zodipus/queryEngine';
import { models, modelRelations } from './generated/generated-index';
// Direct validation
const user = UserSchema.parse(userData);
// Query with validation
const registry = createRegistry({ models, relations: modelRelations });
const query = registry.createQuery('user')({
select: { id: true, email: true, name: true }
});
const users = await prisma.user.findMany(query.query);
const validated = query.array().parse(users);typescript
import { UserSchema, PostSchema } from './generated';
import { createRegistry } from 'zodipus/queryEngine';
import { models, modelRelations } from './generated/generated-index';
// 直接验证
const user = UserSchema.parse(userData);
// 带验证的查询
const registry = createRegistry({ models, relations: modelRelations });
const query = registry.createQuery('user')({
select: { id: true, email: true, name: true }
});
const users = await prisma.user.findMany(query.query);
const validated = query.array().parse(users);Generated Files
生成的文件
After running , Zodipus creates:
prisma generate| File | Contents |
|---|---|
| Prisma enums as Zod schemas |
| Clean model schemas (no relations) |
| Placeholder for @zodSchema definitions |
| Relation metadata for Query Engine |
| Re-exports and convenience exports |
运行后,Zodipus会创建以下文件:
prisma generate| 文件 | 内容 |
|---|---|
| 以Zod Schema形式呈现的Prisma枚举 |
| 精简的模型Schema(无关联关系) |
| @zodSchema定义的占位文件 |
| 供查询引擎使用的关联关系元数据 |
| 重导出及便捷导出内容 |
Priority Reference
优先级参考
| Priority | Feature | When to Use |
|---|---|---|
| Critical | | Validate any model data |
| Critical | | Set up Query Engine |
| High | | Validate findMany results |
| High | | Handle errors without throwing |
| Medium | | Type JSON fields |
| Medium | | Deep nested queries |
| Low | CLI inspect command | Debug schema issues |
| 优先级 | 功能 | 适用场景 |
|---|---|---|
| 关键 | | 验证任意模型数据 |
| 关键 | | 配置查询引擎 |
| 高 | | 验证findMany查询结果 |
| 高 | | 处理错误但不抛出异常 |
| 中 | | 为JSON字段定义类型 |
| 中 | | 深度嵌套查询 |
| 低 | CLI inspect命令 | 调试Schema问题 |
Quick Reference
快速参考
See references/QUICK-REFERENCE.md for a complete cheat sheet.
完整速查表请查看references/QUICK-REFERENCE.md。