Open wamujlb opened 3 years ago
👍 Thanks for opening this issue! 🏷 I have applied any labels matching special text in your issue.
The team will review the labels and make any necessary changes.
@wamujlb do you have a snippet to work around this?
i did this on the generated file
sed -i "s/localVarQueryParameter\['filter'\] \= filter/localVarQueryParameter\['filter'\] \= JSON.stringify(filter)/g" api.ts
@tsraza this will not work in my case. API expects something like this:
{date: 'desc'}
=> ?sort[date]=desc
.
I have made a workaround but I think that it will be good to add it to the generator.
export const setSearchParams = function (url: URL, ...objects: any[]) {
const searchParams = new URLSearchParams(url.search);
for (const object of objects) {
for (const key in object) {
/**
* @workaround
* Convert object value to the string
* {sort: {date: 'desc', order: 'asc'}} => 'sort[date]=desc&sort[order]=asc'
*/
const value = object[key];
if(typeof value === 'object'){
Object.entries(value).forEach(([entryKey, entryValue]) => {
searchParams.set(`${key}[${entryKey}]`, String(entryValue));
})
} else {
searchParams.set(key, value);
}
}
}
url.search = searchParams.toString();
}
Any update on this?
Any update on this?
++, nothing changed
I've just had a similar problem. Loopback 4 expects filter parameters as serialised JSON.
It can be solved in a 'nice' way using template overrides.
openapi-templates
apiInner.mustache
into openapi-templates
from https://github.com/OpenAPITools/openapi-generator/blob/7ffd0711c3c3e7e08110a3e8d63e324daa1773d8/modules/openapi-generator/src/main/resources/typescript-axios/apiInner.mustachelocalVarQueryParameter
. My example is below.-t /path/to/openapi-templates
to openapi-generator-cli
I modified the template to serialise any object passed as a parameter to JSON:
if(typeof {{paramName}} === 'object' && {{paramName}} !== null)
localVarQueryParameter['{{baseName}}'] = JSON.stringify({{paramName}});
else
localVarQueryParameter['{{baseName}}'] = {{paramName}};
@wamujlb - In your case, you could probably add your code to the template.
In my case I updated the common.mustache
template with @wamujlb's answer. Its working as expected.
But it really would be great to add this to the default templates.
FYI since array is not being handled well, i updated based on @wamujlb answer
export const setSearchParams = function (url: URL, ...objects: any[]) {
const searchParams = new URLSearchParams(url.search);
for (const object of objects) {
for (const key in object) {
/**
* @workaround for deep object
* Convert object value to the string
* {sort: {date: 'desc', order: 'asc', multiple: ['1','2']}} => 'sort[date]=desc&sort[order]=asc&multiple[]=1&multiple[]=2'
*/
const value = object[key];
if(typeof value === 'object'){
Object.entries(value).forEach(([entryKey, entryValue]) => {
if(Array.isArray(entryValue)){
entryValue.forEach((item) => {
searchParams.append(`${key}[${entryKey}][]`, String(item));
})
}
else {
searchParams.set(`${key}[${entryKey}]`, String(entryValue));
}
})
} else {
searchParams.set(key, value);
}
}
}
url.search = searchParams.toString();
}
Bug Report Checklist
{day: 20, year: {min: 1990, max: 2000}}
actual output:?day=20&year
expected output:?day=20&year[min]=1990&year[max]=2000
Description
I'm using [typescript-axios] api client generator. Some of the properties I pass to it specified as
deepObject
. It looks that it doesn't support this type of args at all. Is there any possible ways to fix it?openapi-generator version
v4.3.1 v5.0.0-beta
OpenAPI declaration file content or url
Generation Details
[typescript-axios] generator
Steps to reproduce
Related issues/PRs
https://github.com/OpenAPITools/openapi-generator/pull/6075
Suggest a fix
Replace old deprecated url API with URLSearchParams.