GraphQL 代码计划到 Zod 计划
这个项目的原因是维持一个单一的真理来源,介于图克勒和佐德之间. 这对表格的验证很有用。 灵感来自 代码- ql- yup
配置
- 仅使用 Validation: boolean( 默认虚假) 如果您想要为您所有输入对象定义生成一个包含或不包含指令的图案, 请将它写入真实中 .
- zodSchemasMap: 将您所显示的平面图到一个zod类型. 这对像电子邮件地址簿这样的平面画很有用
z.string().email()
简单使用
如果您只想要验证所需的字段, 您可以用以下方式使用插件
generates:
schemas.ts:
plugins:
- @anatine/graphql-codegen-zod
充分利用
如果需要比仅仅需要的字段更多的验证,则必须遵循这个步骤.
这是因为在图克l 透视中,我们没有获得指令
- 在您的计划中添加指令 .
- 在 Codegen.yml 配置中,使用文件像 schema.
指令Schema
directive @validation(
pattern: String
min: Int
max: Int
requiredMessage: String
typeOf: String
) on INPUT_FIELD_DEFINITION | ARGUMENT_DEFINITION
示例
结果. graphql
directive @validation(
pattern: String
min: Int
max: Int
requiredMessage: String
typeOf: String
) on INPUT_FIELD_DEFINITION | ARGUMENT_DEFINITION
enum TestEnum {
ENUM1
ENUM2
}
type TestSampleType {
id: ID!
name: String!
email: String
}
input TestInput {
string: String
stringRequired: String!
enum: TestEnum
enumRequired: TestEnum!
scalar: EmailAddress
scalarRequired: EmailAddress!
enumArray: [TestEnum]
enumArrayRequired: [TestEnum]!
emailArray: [EmailAddress]
emailArrayRequired: [EmailAddress]!
emailRequiredArray: [EmailAddress!]
emailRequiredArrayRequired: [EmailAddress!]!
stringArray: [String]
stringArrayRequired: [String]!
stringRequiredArray: [String!]
stringRequiredArrayRequired: [String!]!
}
input RegisterAddressInput {
postalCode: TestInput!
state: [String]!
city: String!
someNumber: Int @validation(min: 10, max: 20)
someNumberFloat: Float @validation(min: 10.50, max: 20.50)
someBoolean: Boolean
ipAddress: IPAddress
line2: String @validation(min: 10, max: 20)
}
scalar EmailAddress
scalar IPAddress
代码( yml)
schema: './apps/codegen-e2e/src/*.graphql'
generates:
'./apps/codegen-e2e/generated/output.ts':
plugins:
- @anatine/graphql-codegen-zod
config:
allowEnumStringTypes: true
onlyWithValidation: false
lazy: true
zodSchemasMap:
EmailAddress: z.string().email()
IPAddress: z.string()
DateTime: z.string()
JSON: z.object()
Date: z.string()
zodTypesMap:
EmailAddress: string