diff --git a/modules/openapi-generator/src/main/resources/typescript-angular/api.base.service.mustache b/modules/openapi-generator/src/main/resources/typescript-angular/api.base.service.mustache index ed7a92be8bd2..1e47467264a8 100644 --- a/modules/openapi-generator/src/main/resources/typescript-angular/api.base.service.mustache +++ b/modules/openapi-generator/src/main/resources/typescript-angular/api.base.service.mustache @@ -41,7 +41,7 @@ export class BaseService { } return Object.keys(value as Record).reduce( - (hp, k) => hp.append(`${key}[${k}]`, value[k]), + (hp, k) => this.addToHttpParamsDeepObject(hp, `${key}[${k}]`, value[k]), httpParams, ); } else if (paramStyle === QueryParamStyle.Json) { @@ -69,8 +69,8 @@ export class BaseService { // Otherwise, if it's an object, add each field. if (paramStyle === QueryParamStyle.Form) { if (explode) { - Object.keys(value).forEach(k => { - httpParams = this.addToHttpParams(httpParams, k, value[k], paramStyle, explode); + Object.entries(value).forEach(([k, v]) => { + httpParams = this.addToHttpParams(httpParams, `${key}.${k}`, v, paramStyle, explode); }); return httpParams; } else { @@ -85,4 +85,25 @@ export class BaseService { } } } + + private addToHttpParamsDeepObject(httpParams: OpenApiHttpParams, key: string, value: any | null | undefined): OpenApiHttpParams { + if (value == null) { + return httpParams; + } else if (value instanceof Date) { + return httpParams.append(key, value.toISOString()); + } else if (Object(value) !== value) { + return httpParams.append(key, value.toString()); + } else if (Array.isArray(value) || value instanceof Set) { + const array = Array.isArray(value) ? value : Array.from(value); + array.forEach((item, index) => { + httpParams = this.addToHttpParamsDeepObject(httpParams, `${key}[${index}]`, item); + }); + return httpParams; + } else { + return Object.entries(value).reduce( + (hp, [k, v]) => this.addToHttpParamsDeepObject(hp, `${key}[${k}]`, v), + httpParams, + ); + } + } } diff --git a/modules/openapi-generator/src/test/java/org/openapitools/codegen/typescript/typescriptangular/TypeScriptAngularClientCodegenTest.java b/modules/openapi-generator/src/test/java/org/openapitools/codegen/typescript/typescriptangular/TypeScriptAngularClientCodegenTest.java index e3acfc556211..1d1aaeb6dd35 100644 --- a/modules/openapi-generator/src/test/java/org/openapitools/codegen/typescript/typescriptangular/TypeScriptAngularClientCodegenTest.java +++ b/modules/openapi-generator/src/test/java/org/openapitools/codegen/typescript/typescriptangular/TypeScriptAngularClientCodegenTest.java @@ -488,6 +488,10 @@ public void testDeepObject() throws IOException { final String fileContents = Files.readString(Paths.get(output + "/api/default.service.ts")); assertThat(fileContents).containsSubsequence("'options',\n", "options,\n", "QueryParamStyle.DeepObject,\n", "true,\n"); assertThat(fileContents).containsSubsequence("'inputOptions',\n", "inputOptions,\n", "QueryParamStyle.DeepObject,\n", "true,\n"); + + final String baseServiceContents = Files.readString(Paths.get(output + "/api.base.service.ts")); + assertThat(baseServiceContents).contains("this.addToHttpParamsDeepObject(hp, `${key}[${k}]`, value[k])"); + assertThat(baseServiceContents).contains("this.addToHttpParamsDeepObject(httpParams, `${key}[${index}]`, item)"); } @Test diff --git a/modules/openapi-generator/src/test/resources/integrationtests/typescript/additional-properties-expected/api.base.service.ts b/modules/openapi-generator/src/test/resources/integrationtests/typescript/additional-properties-expected/api.base.service.ts index 7e447ce347e4..5c7a2d2f3fd8 100644 --- a/modules/openapi-generator/src/test/resources/integrationtests/typescript/additional-properties-expected/api.base.service.ts +++ b/modules/openapi-generator/src/test/resources/integrationtests/typescript/additional-properties-expected/api.base.service.ts @@ -49,7 +49,7 @@ export class BaseService { } return Object.keys(value as Record).reduce( - (hp, k) => hp.append(`${key}[${k}]`, value[k]), + (hp, k) => this.addToHttpParamsDeepObject(hp, `${key}[${k}]`, value[k]), httpParams, ); } else if (paramStyle === QueryParamStyle.Json) { @@ -76,8 +76,8 @@ export class BaseService { // Otherwise, if it's an object, add each field. if (paramStyle === QueryParamStyle.Form) { if (explode) { - Object.keys(value).forEach(k => { - httpParams = this.addToHttpParams(httpParams, k, value[k], paramStyle, explode); + Object.entries(value).forEach(([k, v]) => { + httpParams = this.addToHttpParams(httpParams, `${key}.${k}`, v, paramStyle, explode); }); return httpParams; } else { @@ -92,4 +92,25 @@ export class BaseService { } } } + + private addToHttpParamsDeepObject(httpParams: OpenApiHttpParams, key: string, value: any | null | undefined): OpenApiHttpParams { + if (value == null) { + return httpParams; + } else if (value instanceof Date) { + return httpParams.append(key, value.toISOString()); + } else if (Object(value) !== value) { + return httpParams.append(key, value.toString()); + } else if (Array.isArray(value) || value instanceof Set) { + const array = Array.isArray(value) ? value : Array.from(value); + array.forEach((item, index) => { + httpParams = this.addToHttpParamsDeepObject(httpParams, `${key}[${index}]`, item); + }); + return httpParams; + } else { + return Object.entries(value).reduce( + (hp, [k, v]) => this.addToHttpParamsDeepObject(hp, `${key}[${k}]`, v), + httpParams, + ); + } + } } diff --git a/modules/openapi-generator/src/test/resources/integrationtests/typescript/array-and-object-expected/api.base.service.ts b/modules/openapi-generator/src/test/resources/integrationtests/typescript/array-and-object-expected/api.base.service.ts index 8868df446b43..d23e57dd76ad 100644 --- a/modules/openapi-generator/src/test/resources/integrationtests/typescript/array-and-object-expected/api.base.service.ts +++ b/modules/openapi-generator/src/test/resources/integrationtests/typescript/array-and-object-expected/api.base.service.ts @@ -49,7 +49,7 @@ export class BaseService { } return Object.keys(value as Record).reduce( - (hp, k) => hp.append(`${key}[${k}]`, value[k]), + (hp, k) => this.addToHttpParamsDeepObject(hp, `${key}[${k}]`, value[k]), httpParams, ); } else if (paramStyle === QueryParamStyle.Json) { @@ -76,8 +76,8 @@ export class BaseService { // Otherwise, if it's an object, add each field. if (paramStyle === QueryParamStyle.Form) { if (explode) { - Object.keys(value).forEach(k => { - httpParams = this.addToHttpParams(httpParams, k, value[k], paramStyle, explode); + Object.entries(value).forEach(([k, v]) => { + httpParams = this.addToHttpParams(httpParams, `${key}.${k}`, v, paramStyle, explode); }); return httpParams; } else { @@ -92,4 +92,25 @@ export class BaseService { } } } + + private addToHttpParamsDeepObject(httpParams: OpenApiHttpParams, key: string, value: any | null | undefined): OpenApiHttpParams { + if (value == null) { + return httpParams; + } else if (value instanceof Date) { + return httpParams.append(key, value.toISOString()); + } else if (Object(value) !== value) { + return httpParams.append(key, value.toString()); + } else if (Array.isArray(value) || value instanceof Set) { + const array = Array.isArray(value) ? value : Array.from(value); + array.forEach((item, index) => { + httpParams = this.addToHttpParamsDeepObject(httpParams, `${key}[${index}]`, item); + }); + return httpParams; + } else { + return Object.entries(value).reduce( + (hp, [k, v]) => this.addToHttpParamsDeepObject(hp, `${key}[${k}]`, v), + httpParams, + ); + } + } } diff --git a/modules/openapi-generator/src/test/resources/integrationtests/typescript/custom-path-params-expected/api.base.service.ts b/modules/openapi-generator/src/test/resources/integrationtests/typescript/custom-path-params-expected/api.base.service.ts index 7d64e8080b4b..0254fc849265 100644 --- a/modules/openapi-generator/src/test/resources/integrationtests/typescript/custom-path-params-expected/api.base.service.ts +++ b/modules/openapi-generator/src/test/resources/integrationtests/typescript/custom-path-params-expected/api.base.service.ts @@ -49,7 +49,7 @@ export class BaseService { } return Object.keys(value as Record).reduce( - (hp, k) => hp.append(`${key}[${k}]`, value[k]), + (hp, k) => this.addToHttpParamsDeepObject(hp, `${key}[${k}]`, value[k]), httpParams, ); } else if (paramStyle === QueryParamStyle.Json) { @@ -76,8 +76,8 @@ export class BaseService { // Otherwise, if it's an object, add each field. if (paramStyle === QueryParamStyle.Form) { if (explode) { - Object.keys(value).forEach(k => { - httpParams = this.addToHttpParams(httpParams, k, value[k], paramStyle, explode); + Object.entries(value).forEach(([k, v]) => { + httpParams = this.addToHttpParams(httpParams, `${key}.${k}`, v, paramStyle, explode); }); return httpParams; } else { @@ -92,4 +92,25 @@ export class BaseService { } } } + + private addToHttpParamsDeepObject(httpParams: OpenApiHttpParams, key: string, value: any | null | undefined): OpenApiHttpParams { + if (value == null) { + return httpParams; + } else if (value instanceof Date) { + return httpParams.append(key, value.toISOString()); + } else if (Object(value) !== value) { + return httpParams.append(key, value.toString()); + } else if (Array.isArray(value) || value instanceof Set) { + const array = Array.isArray(value) ? value : Array.from(value); + array.forEach((item, index) => { + httpParams = this.addToHttpParamsDeepObject(httpParams, `${key}[${index}]`, item); + }); + return httpParams; + } else { + return Object.entries(value).reduce( + (hp, [k, v]) => this.addToHttpParamsDeepObject(hp, `${key}[${k}]`, v), + httpParams, + ); + } + } } diff --git a/modules/openapi-generator/src/test/resources/integrationtests/typescript/petstore-expected/api.base.service.ts b/modules/openapi-generator/src/test/resources/integrationtests/typescript/petstore-expected/api.base.service.ts index 225e5863dcf2..197732757638 100644 --- a/modules/openapi-generator/src/test/resources/integrationtests/typescript/petstore-expected/api.base.service.ts +++ b/modules/openapi-generator/src/test/resources/integrationtests/typescript/petstore-expected/api.base.service.ts @@ -49,7 +49,7 @@ export class BaseService { } return Object.keys(value as Record).reduce( - (hp, k) => hp.append(`${key}[${k}]`, value[k]), + (hp, k) => this.addToHttpParamsDeepObject(hp, `${key}[${k}]`, value[k]), httpParams, ); } else if (paramStyle === QueryParamStyle.Json) { @@ -76,8 +76,8 @@ export class BaseService { // Otherwise, if it's an object, add each field. if (paramStyle === QueryParamStyle.Form) { if (explode) { - Object.keys(value).forEach(k => { - httpParams = this.addToHttpParams(httpParams, k, value[k], paramStyle, explode); + Object.entries(value).forEach(([k, v]) => { + httpParams = this.addToHttpParams(httpParams, `${key}.${k}`, v, paramStyle, explode); }); return httpParams; } else { @@ -92,4 +92,25 @@ export class BaseService { } } } + + private addToHttpParamsDeepObject(httpParams: OpenApiHttpParams, key: string, value: any | null | undefined): OpenApiHttpParams { + if (value == null) { + return httpParams; + } else if (value instanceof Date) { + return httpParams.append(key, value.toISOString()); + } else if (Object(value) !== value) { + return httpParams.append(key, value.toString()); + } else if (Array.isArray(value) || value instanceof Set) { + const array = Array.isArray(value) ? value : Array.from(value); + array.forEach((item, index) => { + httpParams = this.addToHttpParamsDeepObject(httpParams, `${key}[${index}]`, item); + }); + return httpParams; + } else { + return Object.entries(value).reduce( + (hp, [k, v]) => this.addToHttpParamsDeepObject(hp, `${key}[${k}]`, v), + httpParams, + ); + } + } } diff --git a/samples/client/others/typescript-angular-v20/builds/query-param-deep-object/api.base.service.ts b/samples/client/others/typescript-angular-v20/builds/query-param-deep-object/api.base.service.ts index 1b63f4457d9c..80dad923cfd0 100644 --- a/samples/client/others/typescript-angular-v20/builds/query-param-deep-object/api.base.service.ts +++ b/samples/client/others/typescript-angular-v20/builds/query-param-deep-object/api.base.service.ts @@ -49,7 +49,7 @@ export class BaseService { } return Object.keys(value as Record).reduce( - (hp, k) => hp.append(`${key}[${k}]`, value[k]), + (hp, k) => this.addToHttpParamsDeepObject(hp, `${key}[${k}]`, value[k]), httpParams, ); } else if (paramStyle === QueryParamStyle.Json) { @@ -77,8 +77,8 @@ export class BaseService { // Otherwise, if it's an object, add each field. if (paramStyle === QueryParamStyle.Form) { if (explode) { - Object.keys(value).forEach(k => { - httpParams = this.addToHttpParams(httpParams, k, value[k], paramStyle, explode); + Object.entries(value).forEach(([k, v]) => { + httpParams = this.addToHttpParams(httpParams, `${key}.${k}`, v, paramStyle, explode); }); return httpParams; } else { @@ -93,4 +93,25 @@ export class BaseService { } } } + + private addToHttpParamsDeepObject(httpParams: OpenApiHttpParams, key: string, value: any | null | undefined): OpenApiHttpParams { + if (value == null) { + return httpParams; + } else if (value instanceof Date) { + return httpParams.append(key, value.toISOString()); + } else if (Object(value) !== value) { + return httpParams.append(key, value.toString()); + } else if (Array.isArray(value) || value instanceof Set) { + const array = Array.isArray(value) ? value : Array.from(value); + array.forEach((item, index) => { + httpParams = this.addToHttpParamsDeepObject(httpParams, `${key}[${index}]`, item); + }); + return httpParams; + } else { + return Object.entries(value).reduce( + (hp, [k, v]) => this.addToHttpParamsDeepObject(hp, `${key}[${k}]`, v), + httpParams, + ); + } + } } diff --git a/samples/client/others/typescript-angular-v20/builds/query-param-form/api.base.service.ts b/samples/client/others/typescript-angular-v20/builds/query-param-form/api.base.service.ts index 7801405134b7..2112168a125a 100644 --- a/samples/client/others/typescript-angular-v20/builds/query-param-form/api.base.service.ts +++ b/samples/client/others/typescript-angular-v20/builds/query-param-form/api.base.service.ts @@ -49,7 +49,7 @@ export class BaseService { } return Object.keys(value as Record).reduce( - (hp, k) => hp.append(`${key}[${k}]`, value[k]), + (hp, k) => this.addToHttpParamsDeepObject(hp, `${key}[${k}]`, value[k]), httpParams, ); } else if (paramStyle === QueryParamStyle.Json) { @@ -77,8 +77,8 @@ export class BaseService { // Otherwise, if it's an object, add each field. if (paramStyle === QueryParamStyle.Form) { if (explode) { - Object.keys(value).forEach(k => { - httpParams = this.addToHttpParams(httpParams, k, value[k], paramStyle, explode); + Object.entries(value).forEach(([k, v]) => { + httpParams = this.addToHttpParams(httpParams, `${key}.${k}`, v, paramStyle, explode); }); return httpParams; } else { @@ -93,4 +93,25 @@ export class BaseService { } } } + + private addToHttpParamsDeepObject(httpParams: OpenApiHttpParams, key: string, value: any | null | undefined): OpenApiHttpParams { + if (value == null) { + return httpParams; + } else if (value instanceof Date) { + return httpParams.append(key, value.toISOString()); + } else if (Object(value) !== value) { + return httpParams.append(key, value.toString()); + } else if (Array.isArray(value) || value instanceof Set) { + const array = Array.isArray(value) ? value : Array.from(value); + array.forEach((item, index) => { + httpParams = this.addToHttpParamsDeepObject(httpParams, `${key}[${index}]`, item); + }); + return httpParams; + } else { + return Object.entries(value).reduce( + (hp, [k, v]) => this.addToHttpParamsDeepObject(hp, `${key}[${k}]`, v), + httpParams, + ); + } + } } diff --git a/samples/client/others/typescript-angular-v20/builds/query-param-json/api.base.service.ts b/samples/client/others/typescript-angular-v20/builds/query-param-json/api.base.service.ts index 56df5e8f84b6..f50a0881a0fa 100644 --- a/samples/client/others/typescript-angular-v20/builds/query-param-json/api.base.service.ts +++ b/samples/client/others/typescript-angular-v20/builds/query-param-json/api.base.service.ts @@ -49,7 +49,7 @@ export class BaseService { } return Object.keys(value as Record).reduce( - (hp, k) => hp.append(`${key}[${k}]`, value[k]), + (hp, k) => this.addToHttpParamsDeepObject(hp, `${key}[${k}]`, value[k]), httpParams, ); } else if (paramStyle === QueryParamStyle.Json) { @@ -77,8 +77,8 @@ export class BaseService { // Otherwise, if it's an object, add each field. if (paramStyle === QueryParamStyle.Form) { if (explode) { - Object.keys(value).forEach(k => { - httpParams = this.addToHttpParams(httpParams, k, value[k], paramStyle, explode); + Object.entries(value).forEach(([k, v]) => { + httpParams = this.addToHttpParams(httpParams, `${key}.${k}`, v, paramStyle, explode); }); return httpParams; } else { @@ -93,4 +93,25 @@ export class BaseService { } } } + + private addToHttpParamsDeepObject(httpParams: OpenApiHttpParams, key: string, value: any | null | undefined): OpenApiHttpParams { + if (value == null) { + return httpParams; + } else if (value instanceof Date) { + return httpParams.append(key, value.toISOString()); + } else if (Object(value) !== value) { + return httpParams.append(key, value.toString()); + } else if (Array.isArray(value) || value instanceof Set) { + const array = Array.isArray(value) ? value : Array.from(value); + array.forEach((item, index) => { + httpParams = this.addToHttpParamsDeepObject(httpParams, `${key}[${index}]`, item); + }); + return httpParams; + } else { + return Object.entries(value).reduce( + (hp, [k, v]) => this.addToHttpParamsDeepObject(hp, `${key}[${k}]`, v), + httpParams, + ); + } + } } diff --git a/samples/client/others/typescript-angular/builds/composed-schemas-tagged-unions/api.base.service.ts b/samples/client/others/typescript-angular/builds/composed-schemas-tagged-unions/api.base.service.ts index da9512f79726..5f25c2a67f46 100644 --- a/samples/client/others/typescript-angular/builds/composed-schemas-tagged-unions/api.base.service.ts +++ b/samples/client/others/typescript-angular/builds/composed-schemas-tagged-unions/api.base.service.ts @@ -49,7 +49,7 @@ export class BaseService { } return Object.keys(value as Record).reduce( - (hp, k) => hp.append(`${key}[${k}]`, value[k]), + (hp, k) => this.addToHttpParamsDeepObject(hp, `${key}[${k}]`, value[k]), httpParams, ); } else if (paramStyle === QueryParamStyle.Json) { @@ -77,8 +77,8 @@ export class BaseService { // Otherwise, if it's an object, add each field. if (paramStyle === QueryParamStyle.Form) { if (explode) { - Object.keys(value).forEach(k => { - httpParams = this.addToHttpParams(httpParams, k, value[k], paramStyle, explode); + Object.entries(value).forEach(([k, v]) => { + httpParams = this.addToHttpParams(httpParams, `${key}.${k}`, v, paramStyle, explode); }); return httpParams; } else { @@ -93,4 +93,25 @@ export class BaseService { } } } + + private addToHttpParamsDeepObject(httpParams: OpenApiHttpParams, key: string, value: any | null | undefined): OpenApiHttpParams { + if (value == null) { + return httpParams; + } else if (value instanceof Date) { + return httpParams.append(key, value.toISOString()); + } else if (Object(value) !== value) { + return httpParams.append(key, value.toString()); + } else if (Array.isArray(value) || value instanceof Set) { + const array = Array.isArray(value) ? value : Array.from(value); + array.forEach((item, index) => { + httpParams = this.addToHttpParamsDeepObject(httpParams, `${key}[${index}]`, item); + }); + return httpParams; + } else { + return Object.entries(value).reduce( + (hp, [k, v]) => this.addToHttpParamsDeepObject(hp, `${key}[${k}]`, v), + httpParams, + ); + } + } } diff --git a/samples/client/others/typescript-angular/builds/composed-schemas/api.base.service.ts b/samples/client/others/typescript-angular/builds/composed-schemas/api.base.service.ts index da9512f79726..5f25c2a67f46 100644 --- a/samples/client/others/typescript-angular/builds/composed-schemas/api.base.service.ts +++ b/samples/client/others/typescript-angular/builds/composed-schemas/api.base.service.ts @@ -49,7 +49,7 @@ export class BaseService { } return Object.keys(value as Record).reduce( - (hp, k) => hp.append(`${key}[${k}]`, value[k]), + (hp, k) => this.addToHttpParamsDeepObject(hp, `${key}[${k}]`, value[k]), httpParams, ); } else if (paramStyle === QueryParamStyle.Json) { @@ -77,8 +77,8 @@ export class BaseService { // Otherwise, if it's an object, add each field. if (paramStyle === QueryParamStyle.Form) { if (explode) { - Object.keys(value).forEach(k => { - httpParams = this.addToHttpParams(httpParams, k, value[k], paramStyle, explode); + Object.entries(value).forEach(([k, v]) => { + httpParams = this.addToHttpParams(httpParams, `${key}.${k}`, v, paramStyle, explode); }); return httpParams; } else { @@ -93,4 +93,25 @@ export class BaseService { } } } + + private addToHttpParamsDeepObject(httpParams: OpenApiHttpParams, key: string, value: any | null | undefined): OpenApiHttpParams { + if (value == null) { + return httpParams; + } else if (value instanceof Date) { + return httpParams.append(key, value.toISOString()); + } else if (Object(value) !== value) { + return httpParams.append(key, value.toString()); + } else if (Array.isArray(value) || value instanceof Set) { + const array = Array.isArray(value) ? value : Array.from(value); + array.forEach((item, index) => { + httpParams = this.addToHttpParamsDeepObject(httpParams, `${key}[${index}]`, item); + }); + return httpParams; + } else { + return Object.entries(value).reduce( + (hp, [k, v]) => this.addToHttpParamsDeepObject(hp, `${key}[${k}]`, v), + httpParams, + ); + } + } } diff --git a/samples/client/petstore/typescript-angular-v16-provided-in-root/builds/default/api.base.service.ts b/samples/client/petstore/typescript-angular-v16-provided-in-root/builds/default/api.base.service.ts index 8a8b8bc6b6f5..c68bef04a771 100644 --- a/samples/client/petstore/typescript-angular-v16-provided-in-root/builds/default/api.base.service.ts +++ b/samples/client/petstore/typescript-angular-v16-provided-in-root/builds/default/api.base.service.ts @@ -49,7 +49,7 @@ export class BaseService { } return Object.keys(value as Record).reduce( - (hp, k) => hp.append(`${key}[${k}]`, value[k]), + (hp, k) => this.addToHttpParamsDeepObject(hp, `${key}[${k}]`, value[k]), httpParams, ); } else if (paramStyle === QueryParamStyle.Json) { @@ -78,7 +78,7 @@ export class BaseService { if (paramStyle === QueryParamStyle.Form) { if (explode) { Object.keys(value).forEach(k => { - httpParams = this.addToHttpParams(httpParams, k, value[k], paramStyle, explode); + httpParams = this.addToHttpParams(httpParams, `${key}.${k}`, value[k], paramStyle, explode); }); return httpParams; } else { @@ -93,4 +93,25 @@ export class BaseService { } } } + + private addToHttpParamsDeepObject(httpParams: OpenApiHttpParams, key: string, value: any | null | undefined): OpenApiHttpParams { + if (value == null) { + return httpParams; + } else if (value instanceof Date) { + return httpParams.append(key, value.toISOString()); + } else if (Object(value) !== value) { + return httpParams.append(key, value.toString()); + } else if (Array.isArray(value) || value instanceof Set) { + const array = Array.isArray(value) ? value : Array.from(value); + array.forEach((item, index) => { + httpParams = this.addToHttpParamsDeepObject(httpParams, `${key}[${index}]`, item); + }); + return httpParams; + } else { + return Object.entries(value).reduce( + (hp, [k, v]) => this.addToHttpParamsDeepObject(hp, `${key}[${k}]`, v), + httpParams, + ); + } + } } diff --git a/samples/client/petstore/typescript-angular-v17-provided-in-root/builds/default/api.base.service.ts b/samples/client/petstore/typescript-angular-v17-provided-in-root/builds/default/api.base.service.ts index 8a8b8bc6b6f5..d0eadc84ae8e 100644 --- a/samples/client/petstore/typescript-angular-v17-provided-in-root/builds/default/api.base.service.ts +++ b/samples/client/petstore/typescript-angular-v17-provided-in-root/builds/default/api.base.service.ts @@ -49,7 +49,7 @@ export class BaseService { } return Object.keys(value as Record).reduce( - (hp, k) => hp.append(`${key}[${k}]`, value[k]), + (hp, k) => this.addToHttpParamsDeepObject(hp, `${key}[${k}]`, value[k]), httpParams, ); } else if (paramStyle === QueryParamStyle.Json) { @@ -77,8 +77,8 @@ export class BaseService { // Otherwise, if it's an object, add each field. if (paramStyle === QueryParamStyle.Form) { if (explode) { - Object.keys(value).forEach(k => { - httpParams = this.addToHttpParams(httpParams, k, value[k], paramStyle, explode); + Object.entries(value).forEach(([k, v]) => { + httpParams = this.addToHttpParams(httpParams, `${key}.${k}`, v, paramStyle, explode); }); return httpParams; } else { @@ -93,4 +93,25 @@ export class BaseService { } } } + + private addToHttpParamsDeepObject(httpParams: OpenApiHttpParams, key: string, value: any | null | undefined): OpenApiHttpParams { + if (value == null) { + return httpParams; + } else if (value instanceof Date) { + return httpParams.append(key, value.toISOString()); + } else if (Object(value) !== value) { + return httpParams.append(key, value.toString()); + } else if (Array.isArray(value) || value instanceof Set) { + const array = Array.isArray(value) ? value : Array.from(value); + array.forEach((item, index) => { + httpParams = this.addToHttpParamsDeepObject(httpParams, `${key}[${index}]`, item); + }); + return httpParams; + } else { + return Object.entries(value).reduce( + (hp, [k, v]) => this.addToHttpParamsDeepObject(hp, `${key}[${k}]`, v), + httpParams, + ); + } + } } diff --git a/samples/client/petstore/typescript-angular-v18-provided-in-root/builds/default/api.base.service.ts b/samples/client/petstore/typescript-angular-v18-provided-in-root/builds/default/api.base.service.ts index 8a8b8bc6b6f5..d0eadc84ae8e 100644 --- a/samples/client/petstore/typescript-angular-v18-provided-in-root/builds/default/api.base.service.ts +++ b/samples/client/petstore/typescript-angular-v18-provided-in-root/builds/default/api.base.service.ts @@ -49,7 +49,7 @@ export class BaseService { } return Object.keys(value as Record).reduce( - (hp, k) => hp.append(`${key}[${k}]`, value[k]), + (hp, k) => this.addToHttpParamsDeepObject(hp, `${key}[${k}]`, value[k]), httpParams, ); } else if (paramStyle === QueryParamStyle.Json) { @@ -77,8 +77,8 @@ export class BaseService { // Otherwise, if it's an object, add each field. if (paramStyle === QueryParamStyle.Form) { if (explode) { - Object.keys(value).forEach(k => { - httpParams = this.addToHttpParams(httpParams, k, value[k], paramStyle, explode); + Object.entries(value).forEach(([k, v]) => { + httpParams = this.addToHttpParams(httpParams, `${key}.${k}`, v, paramStyle, explode); }); return httpParams; } else { @@ -93,4 +93,25 @@ export class BaseService { } } } + + private addToHttpParamsDeepObject(httpParams: OpenApiHttpParams, key: string, value: any | null | undefined): OpenApiHttpParams { + if (value == null) { + return httpParams; + } else if (value instanceof Date) { + return httpParams.append(key, value.toISOString()); + } else if (Object(value) !== value) { + return httpParams.append(key, value.toString()); + } else if (Array.isArray(value) || value instanceof Set) { + const array = Array.isArray(value) ? value : Array.from(value); + array.forEach((item, index) => { + httpParams = this.addToHttpParamsDeepObject(httpParams, `${key}[${index}]`, item); + }); + return httpParams; + } else { + return Object.entries(value).reduce( + (hp, [k, v]) => this.addToHttpParamsDeepObject(hp, `${key}[${k}]`, v), + httpParams, + ); + } + } } diff --git a/samples/client/petstore/typescript-angular-v19-provided-in-root/builds/default/api.base.service.ts b/samples/client/petstore/typescript-angular-v19-provided-in-root/builds/default/api.base.service.ts index 8a8b8bc6b6f5..d0eadc84ae8e 100644 --- a/samples/client/petstore/typescript-angular-v19-provided-in-root/builds/default/api.base.service.ts +++ b/samples/client/petstore/typescript-angular-v19-provided-in-root/builds/default/api.base.service.ts @@ -49,7 +49,7 @@ export class BaseService { } return Object.keys(value as Record).reduce( - (hp, k) => hp.append(`${key}[${k}]`, value[k]), + (hp, k) => this.addToHttpParamsDeepObject(hp, `${key}[${k}]`, value[k]), httpParams, ); } else if (paramStyle === QueryParamStyle.Json) { @@ -77,8 +77,8 @@ export class BaseService { // Otherwise, if it's an object, add each field. if (paramStyle === QueryParamStyle.Form) { if (explode) { - Object.keys(value).forEach(k => { - httpParams = this.addToHttpParams(httpParams, k, value[k], paramStyle, explode); + Object.entries(value).forEach(([k, v]) => { + httpParams = this.addToHttpParams(httpParams, `${key}.${k}`, v, paramStyle, explode); }); return httpParams; } else { @@ -93,4 +93,25 @@ export class BaseService { } } } + + private addToHttpParamsDeepObject(httpParams: OpenApiHttpParams, key: string, value: any | null | undefined): OpenApiHttpParams { + if (value == null) { + return httpParams; + } else if (value instanceof Date) { + return httpParams.append(key, value.toISOString()); + } else if (Object(value) !== value) { + return httpParams.append(key, value.toString()); + } else if (Array.isArray(value) || value instanceof Set) { + const array = Array.isArray(value) ? value : Array.from(value); + array.forEach((item, index) => { + httpParams = this.addToHttpParamsDeepObject(httpParams, `${key}[${index}]`, item); + }); + return httpParams; + } else { + return Object.entries(value).reduce( + (hp, [k, v]) => this.addToHttpParamsDeepObject(hp, `${key}[${k}]`, v), + httpParams, + ); + } + } } diff --git a/samples/client/petstore/typescript-angular-v19-with-angular-dependency-params/builds/default/api.base.service.ts b/samples/client/petstore/typescript-angular-v19-with-angular-dependency-params/builds/default/api.base.service.ts index 8a8b8bc6b6f5..d0eadc84ae8e 100644 --- a/samples/client/petstore/typescript-angular-v19-with-angular-dependency-params/builds/default/api.base.service.ts +++ b/samples/client/petstore/typescript-angular-v19-with-angular-dependency-params/builds/default/api.base.service.ts @@ -49,7 +49,7 @@ export class BaseService { } return Object.keys(value as Record).reduce( - (hp, k) => hp.append(`${key}[${k}]`, value[k]), + (hp, k) => this.addToHttpParamsDeepObject(hp, `${key}[${k}]`, value[k]), httpParams, ); } else if (paramStyle === QueryParamStyle.Json) { @@ -77,8 +77,8 @@ export class BaseService { // Otherwise, if it's an object, add each field. if (paramStyle === QueryParamStyle.Form) { if (explode) { - Object.keys(value).forEach(k => { - httpParams = this.addToHttpParams(httpParams, k, value[k], paramStyle, explode); + Object.entries(value).forEach(([k, v]) => { + httpParams = this.addToHttpParams(httpParams, `${key}.${k}`, v, paramStyle, explode); }); return httpParams; } else { @@ -93,4 +93,25 @@ export class BaseService { } } } + + private addToHttpParamsDeepObject(httpParams: OpenApiHttpParams, key: string, value: any | null | undefined): OpenApiHttpParams { + if (value == null) { + return httpParams; + } else if (value instanceof Date) { + return httpParams.append(key, value.toISOString()); + } else if (Object(value) !== value) { + return httpParams.append(key, value.toString()); + } else if (Array.isArray(value) || value instanceof Set) { + const array = Array.isArray(value) ? value : Array.from(value); + array.forEach((item, index) => { + httpParams = this.addToHttpParamsDeepObject(httpParams, `${key}[${index}]`, item); + }); + return httpParams; + } else { + return Object.entries(value).reduce( + (hp, [k, v]) => this.addToHttpParamsDeepObject(hp, `${key}[${k}]`, v), + httpParams, + ); + } + } } diff --git a/samples/client/petstore/typescript-angular-v19/builds/default/api.base.service.ts b/samples/client/petstore/typescript-angular-v19/builds/default/api.base.service.ts index 8a8b8bc6b6f5..d0eadc84ae8e 100644 --- a/samples/client/petstore/typescript-angular-v19/builds/default/api.base.service.ts +++ b/samples/client/petstore/typescript-angular-v19/builds/default/api.base.service.ts @@ -49,7 +49,7 @@ export class BaseService { } return Object.keys(value as Record).reduce( - (hp, k) => hp.append(`${key}[${k}]`, value[k]), + (hp, k) => this.addToHttpParamsDeepObject(hp, `${key}[${k}]`, value[k]), httpParams, ); } else if (paramStyle === QueryParamStyle.Json) { @@ -77,8 +77,8 @@ export class BaseService { // Otherwise, if it's an object, add each field. if (paramStyle === QueryParamStyle.Form) { if (explode) { - Object.keys(value).forEach(k => { - httpParams = this.addToHttpParams(httpParams, k, value[k], paramStyle, explode); + Object.entries(value).forEach(([k, v]) => { + httpParams = this.addToHttpParams(httpParams, `${key}.${k}`, v, paramStyle, explode); }); return httpParams; } else { @@ -93,4 +93,25 @@ export class BaseService { } } } + + private addToHttpParamsDeepObject(httpParams: OpenApiHttpParams, key: string, value: any | null | undefined): OpenApiHttpParams { + if (value == null) { + return httpParams; + } else if (value instanceof Date) { + return httpParams.append(key, value.toISOString()); + } else if (Object(value) !== value) { + return httpParams.append(key, value.toString()); + } else if (Array.isArray(value) || value instanceof Set) { + const array = Array.isArray(value) ? value : Array.from(value); + array.forEach((item, index) => { + httpParams = this.addToHttpParamsDeepObject(httpParams, `${key}[${index}]`, item); + }); + return httpParams; + } else { + return Object.entries(value).reduce( + (hp, [k, v]) => this.addToHttpParamsDeepObject(hp, `${key}[${k}]`, v), + httpParams, + ); + } + } } diff --git a/samples/client/petstore/typescript-angular-v20-provided-in-root/builds/default/api.base.service.ts b/samples/client/petstore/typescript-angular-v20-provided-in-root/builds/default/api.base.service.ts index 8a8b8bc6b6f5..d0eadc84ae8e 100644 --- a/samples/client/petstore/typescript-angular-v20-provided-in-root/builds/default/api.base.service.ts +++ b/samples/client/petstore/typescript-angular-v20-provided-in-root/builds/default/api.base.service.ts @@ -49,7 +49,7 @@ export class BaseService { } return Object.keys(value as Record).reduce( - (hp, k) => hp.append(`${key}[${k}]`, value[k]), + (hp, k) => this.addToHttpParamsDeepObject(hp, `${key}[${k}]`, value[k]), httpParams, ); } else if (paramStyle === QueryParamStyle.Json) { @@ -77,8 +77,8 @@ export class BaseService { // Otherwise, if it's an object, add each field. if (paramStyle === QueryParamStyle.Form) { if (explode) { - Object.keys(value).forEach(k => { - httpParams = this.addToHttpParams(httpParams, k, value[k], paramStyle, explode); + Object.entries(value).forEach(([k, v]) => { + httpParams = this.addToHttpParams(httpParams, `${key}.${k}`, v, paramStyle, explode); }); return httpParams; } else { @@ -93,4 +93,25 @@ export class BaseService { } } } + + private addToHttpParamsDeepObject(httpParams: OpenApiHttpParams, key: string, value: any | null | undefined): OpenApiHttpParams { + if (value == null) { + return httpParams; + } else if (value instanceof Date) { + return httpParams.append(key, value.toISOString()); + } else if (Object(value) !== value) { + return httpParams.append(key, value.toString()); + } else if (Array.isArray(value) || value instanceof Set) { + const array = Array.isArray(value) ? value : Array.from(value); + array.forEach((item, index) => { + httpParams = this.addToHttpParamsDeepObject(httpParams, `${key}[${index}]`, item); + }); + return httpParams; + } else { + return Object.entries(value).reduce( + (hp, [k, v]) => this.addToHttpParamsDeepObject(hp, `${key}[${k}]`, v), + httpParams, + ); + } + } } diff --git a/samples/client/petstore/typescript-angular-v20/builds/default/api.base.service.ts b/samples/client/petstore/typescript-angular-v20/builds/default/api.base.service.ts index 8a8b8bc6b6f5..d0eadc84ae8e 100644 --- a/samples/client/petstore/typescript-angular-v20/builds/default/api.base.service.ts +++ b/samples/client/petstore/typescript-angular-v20/builds/default/api.base.service.ts @@ -49,7 +49,7 @@ export class BaseService { } return Object.keys(value as Record).reduce( - (hp, k) => hp.append(`${key}[${k}]`, value[k]), + (hp, k) => this.addToHttpParamsDeepObject(hp, `${key}[${k}]`, value[k]), httpParams, ); } else if (paramStyle === QueryParamStyle.Json) { @@ -77,8 +77,8 @@ export class BaseService { // Otherwise, if it's an object, add each field. if (paramStyle === QueryParamStyle.Form) { if (explode) { - Object.keys(value).forEach(k => { - httpParams = this.addToHttpParams(httpParams, k, value[k], paramStyle, explode); + Object.entries(value).forEach(([k, v]) => { + httpParams = this.addToHttpParams(httpParams, `${key}.${k}`, v, paramStyle, explode); }); return httpParams; } else { @@ -93,4 +93,25 @@ export class BaseService { } } } + + private addToHttpParamsDeepObject(httpParams: OpenApiHttpParams, key: string, value: any | null | undefined): OpenApiHttpParams { + if (value == null) { + return httpParams; + } else if (value instanceof Date) { + return httpParams.append(key, value.toISOString()); + } else if (Object(value) !== value) { + return httpParams.append(key, value.toString()); + } else if (Array.isArray(value) || value instanceof Set) { + const array = Array.isArray(value) ? value : Array.from(value); + array.forEach((item, index) => { + httpParams = this.addToHttpParamsDeepObject(httpParams, `${key}[${index}]`, item); + }); + return httpParams; + } else { + return Object.entries(value).reduce( + (hp, [k, v]) => this.addToHttpParamsDeepObject(hp, `${key}[${k}]`, v), + httpParams, + ); + } + } } diff --git a/samples/client/petstore/typescript-angular-v21-provided-in-root/builds/default/api.base.service.ts b/samples/client/petstore/typescript-angular-v21-provided-in-root/builds/default/api.base.service.ts index 8a8b8bc6b6f5..d0eadc84ae8e 100644 --- a/samples/client/petstore/typescript-angular-v21-provided-in-root/builds/default/api.base.service.ts +++ b/samples/client/petstore/typescript-angular-v21-provided-in-root/builds/default/api.base.service.ts @@ -49,7 +49,7 @@ export class BaseService { } return Object.keys(value as Record).reduce( - (hp, k) => hp.append(`${key}[${k}]`, value[k]), + (hp, k) => this.addToHttpParamsDeepObject(hp, `${key}[${k}]`, value[k]), httpParams, ); } else if (paramStyle === QueryParamStyle.Json) { @@ -77,8 +77,8 @@ export class BaseService { // Otherwise, if it's an object, add each field. if (paramStyle === QueryParamStyle.Form) { if (explode) { - Object.keys(value).forEach(k => { - httpParams = this.addToHttpParams(httpParams, k, value[k], paramStyle, explode); + Object.entries(value).forEach(([k, v]) => { + httpParams = this.addToHttpParams(httpParams, `${key}.${k}`, v, paramStyle, explode); }); return httpParams; } else { @@ -93,4 +93,25 @@ export class BaseService { } } } + + private addToHttpParamsDeepObject(httpParams: OpenApiHttpParams, key: string, value: any | null | undefined): OpenApiHttpParams { + if (value == null) { + return httpParams; + } else if (value instanceof Date) { + return httpParams.append(key, value.toISOString()); + } else if (Object(value) !== value) { + return httpParams.append(key, value.toString()); + } else if (Array.isArray(value) || value instanceof Set) { + const array = Array.isArray(value) ? value : Array.from(value); + array.forEach((item, index) => { + httpParams = this.addToHttpParamsDeepObject(httpParams, `${key}[${index}]`, item); + }); + return httpParams; + } else { + return Object.entries(value).reduce( + (hp, [k, v]) => this.addToHttpParamsDeepObject(hp, `${key}[${k}]`, v), + httpParams, + ); + } + } } diff --git a/samples/client/petstore/typescript-angular-v21/builds/default/api.base.service.ts b/samples/client/petstore/typescript-angular-v21/builds/default/api.base.service.ts index 8a8b8bc6b6f5..d0eadc84ae8e 100644 --- a/samples/client/petstore/typescript-angular-v21/builds/default/api.base.service.ts +++ b/samples/client/petstore/typescript-angular-v21/builds/default/api.base.service.ts @@ -49,7 +49,7 @@ export class BaseService { } return Object.keys(value as Record).reduce( - (hp, k) => hp.append(`${key}[${k}]`, value[k]), + (hp, k) => this.addToHttpParamsDeepObject(hp, `${key}[${k}]`, value[k]), httpParams, ); } else if (paramStyle === QueryParamStyle.Json) { @@ -77,8 +77,8 @@ export class BaseService { // Otherwise, if it's an object, add each field. if (paramStyle === QueryParamStyle.Form) { if (explode) { - Object.keys(value).forEach(k => { - httpParams = this.addToHttpParams(httpParams, k, value[k], paramStyle, explode); + Object.entries(value).forEach(([k, v]) => { + httpParams = this.addToHttpParams(httpParams, `${key}.${k}`, v, paramStyle, explode); }); return httpParams; } else { @@ -93,4 +93,25 @@ export class BaseService { } } } + + private addToHttpParamsDeepObject(httpParams: OpenApiHttpParams, key: string, value: any | null | undefined): OpenApiHttpParams { + if (value == null) { + return httpParams; + } else if (value instanceof Date) { + return httpParams.append(key, value.toISOString()); + } else if (Object(value) !== value) { + return httpParams.append(key, value.toString()); + } else if (Array.isArray(value) || value instanceof Set) { + const array = Array.isArray(value) ? value : Array.from(value); + array.forEach((item, index) => { + httpParams = this.addToHttpParamsDeepObject(httpParams, `${key}[${index}]`, item); + }); + return httpParams; + } else { + return Object.entries(value).reduce( + (hp, [k, v]) => this.addToHttpParamsDeepObject(hp, `${key}[${k}]`, v), + httpParams, + ); + } + } }