11import { traversePath } from './traversal.js' ;
2- import { type ActionFailure , fail , type RequestEvent } from '@sveltejs/kit' ;
2+ import { type ActionFailure , fail as kitFail , type RequestEvent } from '@sveltejs/kit' ;
33import { type ValidationAdapter , type ValidationResult } from './adapters/adapters.js' ;
44import { parseRequest } from './formData.js' ;
55import type { ErrorStatus } from './utils.js' ;
@@ -198,7 +198,7 @@ export function message<
198198 const remove = options ?. removeFiles !== false ;
199199 const output = remove ? withFiles ( { form } ) : { form } ;
200200
201- return form . valid ? output : fail ( options ?. status ?? 400 , output ) ;
201+ return form . valid ? output : kitFail ( options ?. status ?? 400 , output ) ;
202202}
203203
204204export const setMessage = message ;
@@ -290,7 +290,7 @@ export function setError<
290290 form . valid = false ;
291291
292292 const output = options . removeFiles === false ? { form } : withFiles ( { form } ) ;
293- return fail ( options . status ?? 400 , output ) ;
293+ return kitFail ( options . status ?? 400 , output ) ;
294294}
295295
296296export function withFiles < T extends object > ( obj : T ) {
@@ -304,3 +304,29 @@ export function withFiles<T extends object>(obj: T) {
304304}
305305
306306export const removeFiles = withFiles ;
307+
308+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
309+ export function fail < T extends Record < string , unknown > | undefined > ( status : number , data ?: T ) {
310+ function checkForm (
311+ data : unknown
312+ ) : data is SuperValidated < Record < string , unknown > , unknown , Record < string , unknown > > {
313+ return ! ! data && typeof data === 'object' && 'valid' in data && 'data' in data && 'id' in data ;
314+ }
315+
316+ function checkObj < T extends object > ( data : T | undefined ) {
317+ if ( data && typeof data === 'object' ) {
318+ for ( const key in data ) {
319+ const v = data [ key ] ;
320+ if ( checkForm ( v ) ) {
321+ v . valid = false ;
322+ removeFiles ( v ) ;
323+ } else if ( v && typeof v === 'object' ) {
324+ checkObj ( v ) ;
325+ }
326+ }
327+ }
328+ return data ;
329+ }
330+
331+ return kitFail < T > ( status , checkObj ( data ) as T ) ;
332+ }
0 commit comments