Back to results
withshepherd/graphql-codegen-zod(opens in a new tab)
Language: TypeScript
- stars
- 59
- watchers
- 0
- forks
- 5
- open issues
- 9
- Last updated
- 02/27/2024
Language: TypeScript
The reason for this project is to maintain a single source of truth, between graphql and zod. This is useful for validation on forms. Inspired by codegen-graphql-yup
z.string().email()If you only want to validate the required fields, what you can do is use the plugin in the following way
generates: schemas.ts: plugins: - graphql-codegen-zod
If you need more validations than only required fields, you have to follow this steps.
this is because in graphql instrospection we dont have access to directives
directive @validation( pattern: String min: Int max: Int requiredMessage: String typeOf: String ) on INPUT_FIELD_DEFINITION | ARGUMENT_DEFINITION
result.graphql
directive @validation( pattern: String min: Int max: Int requiredMessage: String typeOf: String ) on INPUT_FIELD_DEFINITION | ARGUMENT_DEFINITION input TestInput { something: String! } input RegisterAddressInput { postalCode: TestInput! @validation(requiredMessage: "It field have custom message.") state: [String]! city: String! someNumber: Int @validation(min: 10, max: 20) someNumberFloat: Float @validation(min: 10.50, max: 20.50) someBoolean: Boolean line2: String @validation(min: 10, max: 20) }
codegen.yml
overwrite: true schema: "./result.graphql" generates: schemas.ts: plugins: - graphql-codegen-zod: onlyWithValidation: false