Experimental zod support for param types #446
Merged
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Description
Since zod is a popular typescript schema validation library I wanted to see if we could support zod schemas as param types without any special public utilities or api. I believe this PR adds support for most zod schemas to be used as param types out of the box. Now any
ZodSchema
is a valid param type and the correct param type will be inferred from theZodSchema
and used for the param itself.There are some schemas we cannot functionally support though. Most of which don't even make sense in a param context.
Specifically:
ZodPromise
ZodFunction
ZodIntersection
I believe we could support
ZodIntersection
but its a bit more complex then the others so I want to see if there's some demand for it first.These schemas are supported:
ZodString
ZodBoolean
ZodDate
ZodNumber
ZodLiteral
ZodObject
ZodEnum
ZodNativeEnum
ZodArray
ZodTuple
ZodUnion
ZodDiscriminatedUnion
ZodRecord
ZodMap
ZodSet
This means you can do things like this
And more complex params like
All support is experimental and subject to change or removal. And there are likely many bugs and edge cases (though I'm optimistic there are not many).