1- import { FormDataConvertible } from './types'
1+ import type { FormDataConvertible , QueryStringArrayFormatOption } from './types'
22
33export const isFormData = ( value : any ) : value is FormData => value instanceof FormData
44
55export function objectToFormData (
66 source : Record < string , FormDataConvertible > ,
77 form : FormData = new FormData ( ) ,
88 parentKey : string | null = null ,
9+ queryStringArrayFormat : QueryStringArrayFormatOption = 'brackets' ,
910) : FormData {
1011 source = source || { }
1112
1213 for ( const key in source ) {
1314 if ( Object . prototype . hasOwnProperty . call ( source , key ) ) {
14- append ( form , composeKey ( parentKey , key ) , source [ key ] )
15+ append ( form , composeKey ( parentKey , key , 'indices' ) , source [ key ] , queryStringArrayFormat )
1516 }
1617 }
1718
1819 return form
1920}
2021
21- function composeKey ( parent : string | null , key : string ) : string {
22- return parent ? parent + '[' + key + ']' : key
22+ function composeKey ( parent : string | null , key : string , format : QueryStringArrayFormatOption ) : string {
23+ if ( ! parent ) {
24+ return key
25+ }
26+
27+ return format === 'brackets' ? `${ parent } []` : `${ parent } [${ key } ]`
2328}
2429
25- function append ( form : FormData , key : string , value : FormDataConvertible ) : void {
30+ function append ( form : FormData , key : string , value : FormDataConvertible , format : QueryStringArrayFormatOption ) : void {
2631 if ( Array . isArray ( value ) ) {
27- return Array . from ( value . keys ( ) ) . forEach ( ( index ) => append ( form , composeKey ( key , index . toString ( ) ) , value [ index ] ) )
32+ return Array . from ( value . keys ( ) ) . forEach ( ( index ) =>
33+ append ( form , composeKey ( key , index . toString ( ) , format ) , value [ index ] , format ) ,
34+ )
2835 } else if ( value instanceof Date ) {
2936 return form . append ( key , value . toISOString ( ) )
3037 } else if ( value instanceof File ) {
@@ -41,5 +48,5 @@ function append(form: FormData, key: string, value: FormDataConvertible): void {
4148 return form . append ( key , '' )
4249 }
4350
44- objectToFormData ( value , form , key )
51+ objectToFormData ( value , form , key , format )
4552}
0 commit comments