@@ -81,11 +81,26 @@ function parseErrorSchema(
8181 * resolver: zodResolver(schema)
8282 * });
8383 */
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 > (
89104 schema : z . ZodSchema < Output , any , Input > ,
90105 schemaOptions ?: Partial < z . ParseParams > ,
91106 resolverOptions : {
@@ -95,7 +110,7 @@ export function zodResolver<
95110) : Resolver <
96111 Input ,
97112 Context ,
98- Output
113+ Output | Input // consumers never see this type; they only see types from overload signatures
99114> {
100115 return async ( values : Input , _ , options ) => {
101116 try {
@@ -107,8 +122,8 @@ export function zodResolver<
107122
108123 return {
109124 errors : { } ,
110- values : data ,
111- } satisfies ResolverSuccess < Output > ;
125+ values : resolverOptions . raw ? Object . assign ( { } , values ) : data ,
126+ } satisfies ResolverSuccess < Input | Output > ;
112127 } catch ( error ) {
113128 if ( isZodError ( error ) ) {
114129 return {
0 commit comments