@@ -41,6 +41,14 @@ export function to_fetch_request(request) {
41
41
return new globalThis . Request ( url , options ) ;
42
42
}
43
43
44
+ export function form_data_to_fetch_request ( request ) {
45
+ let [ url , options ] = request_common ( request )
46
+ if ( options . method !== "GET" && options . method !== "HEAD" ) options . body = request . body ;
47
+ // Remove `content-type`, because the browser will add the correct header by itself.
48
+ delete options . headers [ 'content-type' ]
49
+ return new globalThis . Request ( url , options ) ;
50
+ }
51
+
44
52
export function bitarray_request_to_fetch_request ( request ) {
45
53
let [ url , options ] = request_common ( request )
46
54
if ( options . method !== "GET" && options . method !== "HEAD" ) options . body = request . body . buffer ;
@@ -81,3 +89,37 @@ export async function read_json_body(response) {
81
89
return new Error ( new InvalidJsonBody ( ) ) ;
82
90
}
83
91
}
92
+
93
+ export function newFormData ( ) {
94
+ return new FormData ( )
95
+ }
96
+
97
+ function cloneFormData ( formData ) {
98
+ const f = new FormData ( )
99
+ for ( const [ key , value ] of formData . entries ( ) ) f . append ( key , value )
100
+ return f
101
+ }
102
+
103
+ export function appendFormData ( formData , key , value ) {
104
+ const f = cloneFormData ( formData )
105
+ f . append ( key , value )
106
+ return f
107
+ }
108
+
109
+ export function setFormData ( formData , key , value ) {
110
+ const f = cloneFormData ( formData )
111
+ f . set ( key , value )
112
+ return f
113
+ }
114
+
115
+ export function appendBitsFormData ( formData , key , value ) {
116
+ const f = cloneFormData ( formData )
117
+ f . append ( key , new Blob ( [ value . buffer ] ) )
118
+ return f
119
+ }
120
+
121
+ export function setBitsFormData ( formData , key , value ) {
122
+ const f = cloneFormData ( formData )
123
+ f . set ( key , new Blob ( [ value . buffer ] ) )
124
+ return f
125
+ }
0 commit comments