1
- import { FormDataConvertible } from './types'
1
+ import { FormDataConvertible , SerializationArrayFormat } from './types'
2
2
3
3
export function objectToFormData (
4
4
source : Record < string , FormDataConvertible > ,
5
- form : FormData = new FormData ( ) ,
6
- parentKey : string | null = null ,
5
+ form : FormData ,
6
+ parentKey : string | null ,
7
+ formDataArrayFormat : SerializationArrayFormat ,
7
8
) : FormData {
8
9
source = source || { }
9
10
10
11
for ( const key in source ) {
11
12
if ( Object . prototype . hasOwnProperty . call ( source , key ) ) {
12
- append ( form , composeKey ( parentKey , key ) , source [ key ] )
13
+ append ( form , composeObjectKey ( parentKey , key ) , source [ key ] , formDataArrayFormat )
13
14
}
14
15
}
15
16
16
17
return form
17
18
}
18
19
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' )
21
33
}
22
34
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 {
24
41
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
+ )
26
45
} else if ( value instanceof Date ) {
27
46
return form . append ( key , value . toISOString ( ) )
28
47
} else if ( value instanceof File ) {
@@ -39,5 +58,5 @@ function append(form: FormData, key: string, value: FormDataConvertible): void {
39
58
return form . append ( key , '' )
40
59
}
41
60
42
- objectToFormData ( value , form , key )
61
+ objectToFormData ( value , form , key , formDataArrayFormat )
43
62
}
0 commit comments