@@ -81,6 +81,28 @@ function parseErrorSchema(
81
81
* resolver: zodResolver(schema)
82
82
* });
83
83
*/
84
+ // passing raw: false or omitting resolverOptions.raw 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 <
93
+ Input ,
94
+ Context ,
95
+ Output
96
+ >
97
+ // passing raw: true you get back the input type
98
+ export function zodResolver < Input extends FieldValues , Context , Output > (
99
+ schema : z . ZodSchema < Output , any , Input > ,
100
+ schemaOptions : Partial < z . ParseParams > | undefined ,
101
+ resolverOptions : {
102
+ mode ?: 'async' | 'sync' ;
103
+ raw : true ;
104
+ } ,
105
+ ) : Resolver < Input , Context , Input >
84
106
export function zodResolver <
85
107
Input extends FieldValues ,
86
108
Context ,
@@ -95,7 +117,7 @@ export function zodResolver<
95
117
) : Resolver <
96
118
Input ,
97
119
Context ,
98
- Output
120
+ Output | Input // implementation signature might return either; this is hidden from consumers
99
121
> {
100
122
return async ( values : Input , _ , options ) => {
101
123
try {
@@ -107,8 +129,8 @@ export function zodResolver<
107
129
108
130
return {
109
131
errors : { } ,
110
- values : data ,
111
- } satisfies ResolverSuccess < Output > ;
132
+ values : resolverOptions . raw ? Object . assign ( { } , values ) : data ,
133
+ } satisfies ResolverSuccess < Input | Output > ;
112
134
} catch ( error ) {
113
135
if ( isZodError ( error ) ) {
114
136
return {
0 commit comments