1- import { FormDataConvertible } from './types'
1+ import { FormDataConvertible , SerializationArrayFormat } from './types'
22
33export function objectToFormData (
44 source : Record < string , FormDataConvertible > ,
5- form : FormData = new FormData ( ) ,
6- parentKey : string | null = null ,
5+ form : FormData ,
6+ parentKey : string | null ,
7+ formDataArrayFormat : SerializationArrayFormat ,
78) : FormData {
89 source = source || { }
910
1011 for ( const key in source ) {
1112 if ( Object . prototype . hasOwnProperty . call ( source , key ) ) {
12- append ( form , composeKey ( parentKey , key ) , source [ key ] )
13+ append ( form , composeObjectKey ( parentKey , key ) , source [ key ] , formDataArrayFormat )
1314 }
1415 }
1516
1617 return form
1718}
1819
19- function composeKey ( parent : string | null , key : string ) : string {
20- return parent ? parent + '[' + key + ']' : key
20+ function composeKey ( parent : string | null , key : string , format : SerializationArrayFormat ) : string {
21+ if ( ! parent ) return key
22+
23+ switch ( format ) {
24+ case 'indices' :
25+ return `${ parent } [${ key } ]`
26+ case 'brackets' :
27+ return `${ parent } []`
28+ }
29+ }
30+
31+ function composeObjectKey ( parent : string | null , key : string ) : string {
32+ return composeKey ( parent , key , 'indices' )
2133}
2234
23- function append ( form : FormData , key : string , value : FormDataConvertible ) : void {
35+ function append (
36+ form : FormData ,
37+ key : string ,
38+ value : FormDataConvertible ,
39+ formDataArrayFormat : SerializationArrayFormat ,
40+ ) : void {
2441 if ( Array . isArray ( value ) ) {
25- return Array . from ( value . keys ( ) ) . forEach ( ( index ) => append ( form , composeKey ( key , index . toString ( ) ) , value [ index ] ) )
42+ return Array . from ( value . keys ( ) ) . forEach ( ( index ) =>
43+ append ( form , composeKey ( key , index . toString ( ) , formDataArrayFormat ) , value [ index ] , formDataArrayFormat ) ,
44+ )
2645 } else if ( value instanceof Date ) {
2746 return form . append ( key , value . toISOString ( ) )
2847 } else if ( value instanceof File ) {
@@ -39,5 +58,5 @@ function append(form: FormData, key: string, value: FormDataConvertible): void {
3958 return form . append ( key , '' )
4059 }
4160
42- objectToFormData ( value , form , key )
61+ objectToFormData ( value , form , key , formDataArrayFormat )
4362}
0 commit comments