From fa9b0536bff65842308b18d4ef53435fbb0c3376 Mon Sep 17 00:00:00 2001 From: Ferdi Koomen Date: Mon, 29 Nov 2021 16:05:37 -0500 Subject: [PATCH] - Fixed #891 added support for multiple files in form data --- package.json | 2 +- src/templates/core/functions/getFormData.hbs | 14 +++- .../core/functions/getQueryString.hbs | 19 +++--- test/__snapshots__/index.spec.js.snap | 66 ++++++++++++------- 4 files changed, 64 insertions(+), 37 deletions(-) diff --git a/package.json b/package.json index c2c42fc1..9bec508b 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "openapi-typescript-codegen", - "version": "0.12.3", + "version": "0.12.4", "description": "Library that generates Typescript clients based on the OpenAPI specification.", "author": "Ferdi Koomen", "homepage": "https://github.com/ferdikoomen/openapi-typescript-codegen", diff --git a/src/templates/core/functions/getFormData.hbs b/src/templates/core/functions/getFormData.hbs index d9111e74..6a4ed281 100644 --- a/src/templates/core/functions/getFormData.hbs +++ b/src/templates/core/functions/getFormData.hbs @@ -2,13 +2,21 @@ function getFormData(options: ApiRequestOptions): FormData | undefined { if (options.formData) { const formData = new FormData(); + const append = (key: string, value: any) => { + if (isString(value) || isBlob(value)) { + formData.append(key, value); + } else { + formData.append(key, JSON.stringify(value)); + } + }; + Object.entries(options.formData) .filter(([_, value]) => isDefined(value)) .forEach(([key, value]) => { - if (isString(value) || isBlob(value)) { - formData.append(key, value); + if (Array.isArray(value)) { + value.forEach(v => append(key, v)); } else { - formData.append(key, JSON.stringify(value)); + append(key, value); } }); diff --git a/src/templates/core/functions/getQueryString.hbs b/src/templates/core/functions/getQueryString.hbs index bd160e32..4794dcff 100644 --- a/src/templates/core/functions/getQueryString.hbs +++ b/src/templates/core/functions/getQueryString.hbs @@ -1,18 +1,19 @@ function getQueryString(params: Record): string { const qs: string[] = []; - Object.keys(params).forEach(key => { - const value = params[key]; - if (isDefined(value)) { + const append = (key: string, value: any) => { + qs.push(`${encodeURIComponent(key)}=${encodeURIComponent(String(value))}`); + }; + + Object.entries(params) + .filter(([_, value]) => isDefined(value)) + .forEach(([key, value]) => { if (Array.isArray(value)) { - value.forEach(value => { - qs.push(`${encodeURIComponent(key)}=${encodeURIComponent(String(value))}`); - }); + value.forEach(v => append(key, v)); } else { - qs.push(`${encodeURIComponent(key)}=${encodeURIComponent(String(value))}`); + append(key, value); } - } - }); + }); if (qs.length > 0) { return `?${qs.join('&')}`; diff --git a/test/__snapshots__/index.spec.js.snap b/test/__snapshots__/index.spec.js.snap index c5354d43..3f0f1f84 100644 --- a/test/__snapshots__/index.spec.js.snap +++ b/test/__snapshots__/index.spec.js.snap @@ -244,18 +244,19 @@ function base64(str: string): string { function getQueryString(params: Record): string { const qs: string[] = []; - Object.keys(params).forEach(key => { - const value = params[key]; - if (isDefined(value)) { + const append = (key: string, value: any) => { + qs.push(\`\${encodeURIComponent(key)}=\${encodeURIComponent(String(value))}\`); + }; + + Object.entries(params) + .filter(([_, value]) => isDefined(value)) + .forEach(([key, value]) => { if (Array.isArray(value)) { - value.forEach(value => { - qs.push(\`\${encodeURIComponent(key)}=\${encodeURIComponent(String(value))}\`); - }); + value.forEach(v => append(key, v)); } else { - qs.push(\`\${encodeURIComponent(key)}=\${encodeURIComponent(String(value))}\`); + append(key, value); } - } - }); + }); if (qs.length > 0) { return \`?\${qs.join('&')}\`; @@ -278,13 +279,21 @@ function getFormData(options: ApiRequestOptions): FormData | undefined { if (options.formData) { const formData = new FormData(); + const append = (key: string, value: any) => { + if (isString(value) || isBlob(value)) { + formData.append(key, value); + } else { + formData.append(key, JSON.stringify(value)); + } + }; + Object.entries(options.formData) .filter(([_, value]) => isDefined(value)) .forEach(([key, value]) => { - if (isString(value) || isBlob(value)) { - formData.append(key, value); + if (Array.isArray(value)) { + value.forEach(v => append(key, v)); } else { - formData.append(key, JSON.stringify(value)); + append(key, value); } }); @@ -2897,18 +2906,19 @@ function base64(str: string): string { function getQueryString(params: Record): string { const qs: string[] = []; - Object.keys(params).forEach(key => { - const value = params[key]; - if (isDefined(value)) { + const append = (key: string, value: any) => { + qs.push(\`\${encodeURIComponent(key)}=\${encodeURIComponent(String(value))}\`); + }; + + Object.entries(params) + .filter(([_, value]) => isDefined(value)) + .forEach(([key, value]) => { if (Array.isArray(value)) { - value.forEach(value => { - qs.push(\`\${encodeURIComponent(key)}=\${encodeURIComponent(String(value))}\`); - }); + value.forEach(v => append(key, v)); } else { - qs.push(\`\${encodeURIComponent(key)}=\${encodeURIComponent(String(value))}\`); + append(key, value); } - } - }); + }); if (qs.length > 0) { return \`?\${qs.join('&')}\`; @@ -2931,13 +2941,21 @@ function getFormData(options: ApiRequestOptions): FormData | undefined { if (options.formData) { const formData = new FormData(); + const append = (key: string, value: any) => { + if (isString(value) || isBlob(value)) { + formData.append(key, value); + } else { + formData.append(key, JSON.stringify(value)); + } + }; + Object.entries(options.formData) .filter(([_, value]) => isDefined(value)) .forEach(([key, value]) => { - if (isString(value) || isBlob(value)) { - formData.append(key, value); + if (Array.isArray(value)) { + value.forEach(v => append(key, v)); } else { - formData.append(key, JSON.stringify(value)); + append(key, value); } });