@@ -153,7 +153,8 @@ export function setError<T extends ZodValidation<AnyZodObject>>(
153153
154154function formDataToValidation < T extends AnyZodObject > (
155155 data : FormData ,
156- schemaData : SchemaData < T >
156+ schemaData : SchemaData < T > ,
157+ preprocessed ?: string [ ]
157158) {
158159 const output : Record < string , unknown > = { } ;
159160 const { schemaKeys, entityInfo } = schemaData ;
@@ -166,8 +167,10 @@ function formDataToValidation<T extends AnyZodObject>(
166167 if ( entry && typeof entry !== 'string' ) {
167168 // File object, not supported
168169 return undefined ;
169- } else {
170+ } else if ( ! preprocessed || ! preprocessed . includes ( key ) ) {
170171 return parseFormDataEntry ( key , entry , typeInfo ) ;
172+ } else {
173+ return entry ;
171174 }
172175 }
173176
@@ -307,7 +310,8 @@ function dataToValidate<T extends AnyZodObject>(
307310
308311function parseFormData < T extends AnyZodObject > (
309312 formData : FormData ,
310- schemaData : SchemaData < T >
313+ schemaData : SchemaData < T > ,
314+ options ?: SuperValidateOptions
311315) : ParsedData {
312316 function tryParseSuperJson ( ) {
313317 if ( formData . has ( '__superform_json' ) ) {
@@ -332,14 +336,19 @@ function parseFormData<T extends AnyZodObject>(
332336 ? { id, data, posted : true }
333337 : {
334338 id,
335- data : formDataToValidation ( formData , schemaData ) ,
339+ data : formDataToValidation (
340+ formData ,
341+ schemaData ,
342+ options ?. preprocessed
343+ ) ,
336344 posted : true
337345 } ;
338346}
339347
340348function parseSearchParams < T extends AnyZodObject > (
341349 data : URL | URLSearchParams ,
342- schemaData : SchemaData < T >
350+ schemaData : SchemaData < T > ,
351+ options ?: SuperValidateOptions
343352) : ParsedData {
344353 if ( data instanceof URL ) data = data . searchParams ;
345354
@@ -349,7 +358,7 @@ function parseSearchParams<T extends AnyZodObject>(
349358 }
350359
351360 // Only FormData can be posted.
352- const output = parseFormData ( convert , schemaData ) ;
361+ const output = parseFormData ( convert , schemaData , options ) ;
353362 output . posted = false ;
354363 return output ;
355364}
@@ -489,14 +498,15 @@ function getSchemaData<T extends AnyZodObject>(
489498
490499/////////////////////////////////////////////////////////////////////
491500
492- export type SuperValidateOptions = {
493- errors ? : boolean ;
494- id ? : string ;
495- warnings ? : {
501+ export type SuperValidateOptions = Partial < {
502+ errors : boolean ;
503+ id : string ;
504+ warnings : {
496505 multipleRegexps ?: boolean ;
497506 multipleSteps ?: boolean ;
498507 } ;
499- } ;
508+ preprocessed : string [ ] ;
509+ } > ;
500510
501511export async function superValidate <
502512 T extends ZodValidation < AnyZodObject > ,
@@ -563,16 +573,16 @@ export async function superValidate<
563573 // No data found, return an empty form
564574 return { id : undefined , data : undefined , posted : false } ;
565575 }
566- return parseFormData ( formData , schemaData ) ;
576+ return parseFormData ( formData , schemaData , options ) ;
567577 }
568578
569579 async function parseRequest ( ) {
570580 let parsed : ParsedData ;
571581
572582 if ( data instanceof FormData ) {
573- parsed = parseFormData ( data , schemaData ) ;
583+ parsed = parseFormData ( data , schemaData , options ) ;
574584 } else if ( data instanceof URL || data instanceof URLSearchParams ) {
575- parsed = parseSearchParams ( data , schemaData ) ;
585+ parsed = parseSearchParams ( data , schemaData , options ) ;
576586 } else if ( data instanceof Request ) {
577587 parsed = await tryParseFormData ( data ) ;
578588 } else if (
@@ -656,7 +666,7 @@ export function superValidateSync<
656666
657667 const parsed =
658668 data instanceof FormData
659- ? parseFormData ( data , schemaData )
669+ ? parseFormData ( data , schemaData , options )
660670 : data instanceof URL || data instanceof URLSearchParams
661671 ? parseSearchParams ( data , schemaData )
662672 : {
0 commit comments