diff --git a/src/templates/core/functions/getFormData.hbs b/src/templates/core/functions/getFormData.hbs index 6a4ed281..7e6e5b9f 100644 --- a/src/templates/core/functions/getFormData.hbs +++ b/src/templates/core/functions/getFormData.hbs @@ -2,7 +2,7 @@ function getFormData(options: ApiRequestOptions): FormData | undefined { if (options.formData) { const formData = new FormData(); - const append = (key: string, value: any) => { + const process = (key: string, value: any) => { if (isString(value) || isBlob(value)) { formData.append(key, value); } else { @@ -14,9 +14,9 @@ function getFormData(options: ApiRequestOptions): FormData | undefined { .filter(([_, value]) => isDefined(value)) .forEach(([key, value]) => { if (Array.isArray(value)) { - value.forEach(v => append(key, v)); + value.forEach(v => process(key, v)); } else { - append(key, value); + process(key, value); } }); diff --git a/src/templates/core/functions/getQueryString.hbs b/src/templates/core/functions/getQueryString.hbs index 4794dcff..a1416123 100644 --- a/src/templates/core/functions/getQueryString.hbs +++ b/src/templates/core/functions/getQueryString.hbs @@ -1,22 +1,29 @@ function getQueryString(params: Record): string { - const qs: string[] = []; + const searchParams = new URLSearchParams(); - const append = (key: string, value: any) => { - qs.push(`${encodeURIComponent(key)}=${encodeURIComponent(String(value))}`); + const process = (key: string, value: any) => { + if (isDefined(value)) { + if (Array.isArray(value)) { + value.forEach(v => { + process(key, v); + }); + } else if (typeof value === 'object') { + Object.entries(value).forEach(([k, v]) => { + process(`${key}[${k}]`, v); + }); + } else { + searchParams.append(key, value); + } + } }; - Object.entries(params) - .filter(([_, value]) => isDefined(value)) - .forEach(([key, value]) => { - if (Array.isArray(value)) { - value.forEach(v => append(key, v)); - } else { - append(key, value); - } - }); + Object.entries(params).forEach(([key, value]) => { + process(key, value); + }); - if (qs.length > 0) { - return `?${qs.join('&')}`; + const query = searchParams.toString(); + if (query.length) { + return `?${query}`; } return ''; diff --git a/test/__snapshots__/index.spec.ts.snap b/test/__snapshots__/index.spec.ts.snap index 2804feb0..5feac141 100644 --- a/test/__snapshots__/index.spec.ts.snap +++ b/test/__snapshots__/index.spec.ts.snap @@ -270,24 +270,31 @@ function base64(str: string): string { } function getQueryString(params: Record): string { - const qs: string[] = []; + const searchParams = new URLSearchParams(); - const append = (key: string, value: any) => { - qs.push(\`\${encodeURIComponent(key)}=\${encodeURIComponent(String(value))}\`); + const process = (key:string, value: any) => { + if (isDefined(value)) { + if (Array.isArray(value)) { + value.forEach(v => { + process(key, v); + }); + } else if (typeof value === 'object') { + Object.entries(value).forEach(([k, v]) => { + process(\`\${key}[\${k}]\`, v); + }); + } else { + searchParams.append(key, value); + } + } }; - Object.entries(params) - .filter(([_, value]) => isDefined(value)) - .forEach(([key, value]) => { - if (Array.isArray(value)) { - value.forEach(v => append(key, v)); - } else { - append(key, value); - } - }); + Object.entries(params).forEach(([key, value]) => { + process(key, value); + }); - if (qs.length > 0) { - return \`?\${qs.join('&')}\`; + const query = searchParams.toString(); + if (query.length) { + return \`?\${query}\`; } return ''; @@ -307,7 +314,7 @@ function getFormData(options: ApiRequestOptions): FormData | undefined { if (options.formData) { const formData = new FormData(); - const append = (key: string, value: any) => { + const process = (key: string, value: any) => { if (isString(value) || isBlob(value)) { formData.append(key, value); } else { @@ -321,7 +328,7 @@ function getFormData(options: ApiRequestOptions): FormData | undefined { if (Array.isArray(value)) { value.forEach(v => append(key, v)); } else { - append(key, value); + process(key, value); } }); @@ -3112,24 +3119,31 @@ function base64(str: string): string { } function getQueryString(params: Record): string { - const qs: string[] = []; + const searchParams = new URLSearchParams(); - const append = (key: string, value: any) => { - qs.push(\`\${encodeURIComponent(key)}=\${encodeURIComponent(String(value))}\`); + const process = (key:string, value: any) => { + if (isDefined(value)) { + if (Array.isArray(value)) { + value.forEach(v => { + process(key, v); + }); + } else if (typeof value === 'object') { + Object.entries(value).forEach(([k, v]) => { + process(\`\${key}[\${k}]\`, v); + }); + } else { + searchParams.append(key, value); + } + } }; - Object.entries(params) - .filter(([_, value]) => isDefined(value)) - .forEach(([key, value]) => { - if (Array.isArray(value)) { - value.forEach(v => append(key, v)); - } else { - append(key, value); - } - }); + Object.entries(params).forEach(([key, value]) => { + process(key, value); + }); - if (qs.length > 0) { - return \`?\${qs.join('&')}\`; + const query = searchParams.toString(); + if (query.length) { + return \`?\${query}\`; } return ''; @@ -3149,7 +3163,7 @@ function getFormData(options: ApiRequestOptions): FormData | undefined { if (options.formData) { const formData = new FormData(); - const append = (key: string, value: any) => { + const process = (key: string, value: any) => { if (isString(value) || isBlob(value)) { formData.append(key, value); } else { @@ -3163,7 +3177,7 @@ function getFormData(options: ApiRequestOptions): FormData | undefined { if (Array.isArray(value)) { value.forEach(v => append(key, v)); } else { - append(key, value); + process(key, value); } });