@@ -90,23 +90,23 @@ export const getFormDataFromSearchParams = <T extends FieldValues>(
9090export const isGet = ( request : Pick < Request , "method" > ) =>
9191 request . method === "GET" || request . method === "get" ;
9292
93- type ReturnData < T extends FieldValues > =
94- | { data : T ; errors : undefined ; receivedValues : Partial < T > }
95- | { data : undefined ; errors : FieldErrors < T > ; receivedValues : Partial < T > } ;
93+ type ReturnData < TFieldValues extends FieldValues , TTransformedValues = TFieldValues > =
94+ | { data : TTransformedValues ; errors : undefined ; receivedValues : Partial < TFieldValues > }
95+ | { data : undefined ; errors : FieldErrors < TFieldValues > ; receivedValues : Partial < TFieldValues > } ;
9696/**
9797 * Parses the data from an HTTP request and validates it against a schema. Works in both loaders and actions, in loaders it extracts the data from the search params.
9898 * In actions it extracts it from request formData.
9999 *
100100 * @returns A Promise that resolves to an object containing the validated data or any errors that occurred during validation.
101101 */
102- export const getValidatedFormData = async < T extends FieldValues > (
102+ export const getValidatedFormData = async < TFieldValues extends FieldValues , TContext = any , TTransformedValues = TFieldValues > (
103103 request : Request | FormData ,
104- resolver : Resolver < T > ,
104+ resolver : Resolver < TFieldValues , TContext , TTransformedValues > ,
105105 preserveStringified = false ,
106- ) : Promise < ReturnData < T > > => {
107- const { receivedValues } = await getFormData < T > ( request , preserveStringified ) ;
106+ ) : Promise < ReturnData < TFieldValues , TTransformedValues > > => {
107+ const { receivedValues } = await getFormData < TFieldValues > ( request , preserveStringified ) ;
108108
109- const data = await validateFormData < T > ( receivedValues , resolver ) ;
109+ const data = await validateFormData ( receivedValues , resolver ) ;
110110
111111 return { ...data , receivedValues } ;
112112} ;
@@ -134,24 +134,24 @@ export const getFormData = async <T extends FieldValues>(
134134 * @param resolver Schema to validate and cast the data with
135135 * @returns Returns the validated data if successful, otherwise returns the error object
136136 */
137- export const validateFormData = async < T extends FieldValues > (
137+ export const validateFormData = async < TFieldValues extends FieldValues , TContext extends any , TTransformedValues = TFieldValues > (
138138 // biome-ignore lint/suspicious/noExplicitAny: <explanation>
139139 data : any ,
140- resolver : Resolver < T > ,
140+ resolver : Resolver < TFieldValues , TContext , TTransformedValues > ,
141141) => {
142142 const dataToValidate =
143143 data instanceof FormData ? Object . fromEntries ( data ) : data ;
144144 const { errors, values } = await resolver (
145145 dataToValidate ,
146- { } ,
146+ { } as TContext ,
147147 { shouldUseNativeValidation : false , fields : { } } ,
148148 ) ;
149149
150150 if ( Object . keys ( errors ) . length > 0 ) {
151- return { errors : errors as FieldErrors < T > , data : undefined } ;
151+ return { errors : errors as FieldErrors < TFieldValues > , data : undefined } ;
152152 }
153153
154- return { errors : undefined , data : values as T } ;
154+ return { errors : undefined , data : values as TTransformedValues } ;
155155} ;
156156/**
157157 Creates a new instance of FormData with the specified data and key.
0 commit comments