Skip to content
This repository was archived by the owner on Oct 17, 2022. It is now read-only.

Commit 9680e9c

Browse files
committed
Allow FormData as body argument
1 parent 1508588 commit 9680e9c

10 files changed

+26
-10
lines changed

src/templates/core/fetch/getHeaders.hbs

+1-1
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,7 @@ async function getHeaders(options: ApiRequestOptions): Promise<Headers> {
3333
headers.append('Content-Type', options.body.type || 'application/octet-stream');
3434
} else if (isString(options.body)) {
3535
headers.append('Content-Type', 'text/plain');
36-
} else {
36+
} else if (!isFormData(options.body)) {
3737
headers.append('Content-Type', 'application/json');
3838
}
3939
}

src/templates/core/fetch/getRequestBody.hbs

+1-1
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@ function getRequestBody(options: ApiRequestOptions): BodyInit | undefined {
22
if (options.body) {
33
if (options.mediaType?.includes('/json')) {
44
return JSON.stringify(options.body)
5-
} else if (isString(options.body) || isBlob(options.body)) {
5+
} else if (isString(options.body) || isBlob(options.body) || isFormData(options.body)) {
66
return options.body;
77
} else {
88
return JSON.stringify(options.body);

src/templates/core/fetch/request.hbs

+3
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,9 @@ import { OpenAPI } from './OpenAPI';
1919
{{>functions/isBlob}}
2020

2121

22+
{{>functions/isFormData}}
23+
24+
2225
{{>functions/base64}}
2326

2427

Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
function isFormData(value: any): value is FormData {
2+
return value instanceof FormData;
3+
}

src/templates/core/node/getHeaders.hbs

+1-1
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,7 @@ async function getHeaders(options: ApiRequestOptions): Promise<Headers> {
3333
headers.append('Content-Type', 'application/octet-stream');
3434
} else if (isString(options.body)) {
3535
headers.append('Content-Type', 'text/plain');
36-
} else {
36+
} else if (!isFormData(options.body)) {
3737
headers.append('Content-Type', 'application/json');
3838
}
3939
}

src/templates/core/node/getRequestBody.hbs

+1-1
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@ function getRequestBody(options: ApiRequestOptions): BodyInit | undefined {
22
if (options.body) {
33
if (options.mediaType?.includes('/json')) {
44
return JSON.stringify(options.body)
5-
} else if (isString(options.body) || isBlob(options.body)) {
5+
} else if (isString(options.body) || isBlob(options.body) || isFormData(options.body)) {
66
return options.body as any;
77
} else {
88
return JSON.stringify(options.body);

src/templates/core/xhr/getHeaders.hbs

+1-1
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,7 @@ async function getHeaders(options: ApiRequestOptions): Promise<Headers> {
3333
headers.append('Content-Type', options.body.type || 'application/octet-stream');
3434
} else if (isString(options.body)) {
3535
headers.append('Content-Type', 'text/plain');
36-
} else {
36+
} else if (!isFormData(options.body)) {
3737
headers.append('Content-Type', 'application/json');
3838
}
3939
}

src/templates/core/xhr/getRequestBody.hbs

+1-1
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@ function getRequestBody(options: ApiRequestOptions): any {
22
if (options.body) {
33
if (options.mediaType?.includes('/json')) {
44
return JSON.stringify(options.body)
5-
} else if (isString(options.body) || isBlob(options.body)) {
5+
} else if (isString(options.body) || isBlob(options.body) || isFormData(options.body)) {
66
return options.body;
77
} else {
88
return JSON.stringify(options.body);

src/utils/registerHandlebarTemplates.ts

+2
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@ import functionGetQueryString from '../templates/core/functions/getQueryString.h
2424
import functionGetUrl from '../templates/core/functions/getUrl.hbs';
2525
import functionIsBlob from '../templates/core/functions/isBlob.hbs';
2626
import functionIsDefined from '../templates/core/functions/isDefined.hbs';
27+
import functionIsFormData from '../templates/core/functions/isFormData.hbs';
2728
import functionIsString from '../templates/core/functions/isString.hbs';
2829
import functionIsStringWithValue from '../templates/core/functions/isStringWithValue.hbs';
2930
import functionIsSuccess from '../templates/core/functions/isSuccess.hbs';
@@ -157,6 +158,7 @@ export function registerHandlebarTemplates(root: {
157158
Handlebars.registerPartial('functions/getUrl', Handlebars.template(functionGetUrl));
158159
Handlebars.registerPartial('functions/isBlob', Handlebars.template(functionIsBlob));
159160
Handlebars.registerPartial('functions/isDefined', Handlebars.template(functionIsDefined));
161+
Handlebars.registerPartial('functions/isFormData', Handlebars.template(functionIsFormData));
160162
Handlebars.registerPartial('functions/isString', Handlebars.template(functionIsString));
161163
Handlebars.registerPartial('functions/isStringWithValue', Handlebars.template(functionIsStringWithValue));
162164
Handlebars.registerPartial('functions/isSuccess', Handlebars.template(functionIsSuccess));

test/__snapshots__/index.spec.js.snap

+12-4
Original file line numberDiff line numberDiff line change
@@ -233,6 +233,10 @@ function isBlob(value: any): value is Blob {
233233
return value instanceof Blob;
234234
}
235235

236+
function isFormData(value: any): value is FormData {
237+
return value instanceof FormData;
238+
}
239+
236240
function base64(str: string): string {
237241
try {
238242
return btoa(str);
@@ -347,7 +351,7 @@ async function getHeaders(options: ApiRequestOptions): Promise<Headers> {
347351
headers.append('Content-Type', options.body.type || 'application/octet-stream');
348352
} else if (isString(options.body)) {
349353
headers.append('Content-Type', 'text/plain');
350-
} else {
354+
} else if (!isFormData(options.body)) {
351355
headers.append('Content-Type', 'application/json');
352356
}
353357
}
@@ -359,7 +363,7 @@ function getRequestBody(options: ApiRequestOptions): BodyInit | undefined {
359363
if (options.body) {
360364
if (options.mediaType?.includes('/json')) {
361365
return JSON.stringify(options.body)
362-
} else if (isString(options.body) || isBlob(options.body)) {
366+
} else if (isString(options.body) || isBlob(options.body) || isFormData(options.body)) {
363367
return options.body;
364368
} else {
365369
return JSON.stringify(options.body);
@@ -2896,6 +2900,10 @@ function isBlob(value: any): value is Blob {
28962900
return value instanceof Blob;
28972901
}
28982902

2903+
function isFormData(value: any): value is FormData {
2904+
return value instanceof FormData;
2905+
}
2906+
28992907
function base64(str: string): string {
29002908
try {
29012909
return btoa(str);
@@ -3010,7 +3018,7 @@ async function getHeaders(options: ApiRequestOptions): Promise<Headers> {
30103018
headers.append('Content-Type', options.body.type || 'application/octet-stream');
30113019
} else if (isString(options.body)) {
30123020
headers.append('Content-Type', 'text/plain');
3013-
} else {
3021+
} else if (!isFormData(options.body)) {
30143022
headers.append('Content-Type', 'application/json');
30153023
}
30163024
}
@@ -3022,7 +3030,7 @@ function getRequestBody(options: ApiRequestOptions): BodyInit | undefined {
30223030
if (options.body) {
30233031
if (options.mediaType?.includes('/json')) {
30243032
return JSON.stringify(options.body)
3025-
} else if (isString(options.body) || isBlob(options.body)) {
3033+
} else if (isString(options.body) || isBlob(options.body) || isFormData(options.body)) {
30263034
return options.body;
30273035
} else {
30283036
return JSON.stringify(options.body);

0 commit comments

Comments
 (0)