@@ -107,10 +107,12 @@ export type FormOptions<
107107 validators : ( validators : Exclude < ValidatorsOption < T > , 'clear' > ) => void ;
108108 /**
109109 * Use a custom fetch or XMLHttpRequest implementation for this form submission. It must return an ActionResult in the response body.
110- * If the request is using a XMLHttprequest , the promise must be resolved when the request is complete .
110+ * If the request is using a XMLHttpRequest , the promise must be resolved when the request has been completed, not before .
111111 */
112112 customRequest : (
113- validators : ( input : Parameters < SubmitFunction > [ 0 ] ) => Promise < Response | XMLHttpRequest >
113+ validators : (
114+ input : Parameters < SubmitFunction > [ 0 ]
115+ ) => Promise < Response | XMLHttpRequest | ActionResult >
114116 ) => void ;
115117 }
116118 ) => MaybePromise < unknown | void > ;
@@ -1599,7 +1601,9 @@ export function superForm<
15991601
16001602 let currentRequest : AbortController | null ;
16011603 let customRequest :
1602- | ( ( input : Parameters < SubmitFunction > [ 0 ] ) => Promise < Response | XMLHttpRequest > )
1604+ | ( (
1605+ input : Parameters < SubmitFunction > [ 0 ]
1606+ ) => Promise < Response | XMLHttpRequest | ActionResult > )
16031607 | undefined = undefined ;
16041608
16051609 const enhanced = kitEnhance ( FormElement , async ( submitParams ) => {
@@ -1979,10 +1983,16 @@ export function superForm<
19791983 if ( customRequest ) {
19801984 if ( ! cancelled ) _submitCancel ( ) ;
19811985 const response = await customRequest ( submitParams ) ;
1982- const result : ActionResult =
1983- response instanceof Response
1984- ? deserialize ( await response . text ( ) )
1985- : deserialize ( response . responseText ) ;
1986+
1987+ let result : ActionResult ;
1988+
1989+ if ( response instanceof Response ) {
1990+ result = deserialize ( await response . text ( ) ) ;
1991+ } else if ( response instanceof XMLHttpRequest ) {
1992+ result = deserialize ( response . responseText ) ;
1993+ } else {
1994+ result = response ;
1995+ }
19861996
19871997 if ( result . type === 'error' ) result . status = response . status ;
19881998 validationResponse ( { result } ) ;
0 commit comments