@@ -81,11 +81,26 @@ function parseErrorSchema(
81
81
* resolver: zodResolver(schema)
82
82
* });
83
83
*/
84
- export function zodResolver <
85
- Input extends FieldValues ,
86
- Context ,
87
- Output ,
88
- > (
84
+ // passing `resolverOptions.raw: false` (or omitting) you get the transformed output type
85
+ export function zodResolver < Input extends FieldValues , Context , Output > (
86
+ schema : z . ZodSchema < Output , any , Input > ,
87
+ schemaOptions ?: Partial < z . ParseParams > ,
88
+ resolverOptions ?: {
89
+ mode ?: 'async' | 'sync' ;
90
+ raw ?: false ;
91
+ } ,
92
+ ) : Resolver < Input , Context , Output >
93
+ // passing `resolverOptions.raw: true` you get back the input type
94
+ export function zodResolver < Input extends FieldValues , Context , Output > (
95
+ schema : z . ZodSchema < Output , any , Input > ,
96
+ schemaOptions : Partial < z . ParseParams > | undefined ,
97
+ resolverOptions : {
98
+ mode ?: 'async' | 'sync' ;
99
+ raw : true ;
100
+ } ,
101
+ ) : Resolver < Input , Context , Input >
102
+ // implementation
103
+ export function zodResolver < Input extends FieldValues , Context , Output > (
89
104
schema : z . ZodSchema < Output , any , Input > ,
90
105
schemaOptions ?: Partial < z . ParseParams > ,
91
106
resolverOptions : {
@@ -95,7 +110,7 @@ export function zodResolver<
95
110
) : Resolver <
96
111
Input ,
97
112
Context ,
98
- Output
113
+ Output | Input // consumers never see this type; they only see types from overload signatures
99
114
> {
100
115
return async ( values : Input , _ , options ) => {
101
116
try {
@@ -107,8 +122,8 @@ export function zodResolver<
107
122
108
123
return {
109
124
errors : { } ,
110
- values : data ,
111
- } satisfies ResolverSuccess < Output > ;
125
+ values : resolverOptions . raw ? Object . assign ( { } , values ) : data ,
126
+ } satisfies ResolverSuccess < Input | Output > ;
112
127
} catch ( error ) {
113
128
if ( isZodError ( error ) ) {
114
129
return {
0 commit comments