Skip to content

Commit fb5dcba

Browse files
committed
fix(typescript-axios-slim): fix observe overloads
1 parent 2996fc9 commit fb5dcba

2 files changed

Lines changed: 15 additions & 3 deletions

File tree

modules/openapi-generator/src/main/resources/typescript-axios-slim/apiInner.mustache

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -60,7 +60,7 @@ export interface {{classname}}Interface {
6060
* @deprecated{{/isDeprecated}}
6161
* @throws {RequiredError}
6262
*/
63-
{{nickname}}({{#allParams.0}}requestParameters{{^hasRequiredParams}}?{{/hasRequiredParams}}: {{classname}}{{operationIdCamelCase}}Request, {{/allParams.0}}options: ResponseObserveOptions): Promise<AxiosResponse<{{{returnType}}}{{^returnType}}void{{/returnType}}>>;
63+
{{nickname}}({{#allParams.0}}{{#hasRequiredParams}}requestParameters: {{classname}}{{operationIdCamelCase}}Request, {{/hasRequiredParams}}{{^hasRequiredParams}}requestParameters: {{classname}}{{operationIdCamelCase}}Request | undefined, {{/hasRequiredParams}}{{/allParams.0}}options: ResponseObserveOptions): Promise<AxiosResponse<{{{returnType}}}{{^returnType}}void{{/returnType}}>>;
6464
{{nickname}}({{#allParams.0}}requestParameters{{^hasRequiredParams}}?{{/hasRequiredParams}}: {{classname}}{{operationIdCamelCase}}Request, {{/allParams.0}}options?: ObserveOptions): Promise<{{{returnType}}}{{^returnType}}void{{/returnType}}>;
6565

6666
{{/operation}}
@@ -107,12 +107,13 @@ export class {{classname}} extends BaseAPI {
107107
* @deprecated{{/isDeprecated}}
108108
* @throws {RequiredError}
109109
*/
110-
public async {{nickname}}({{#allParams.0}}requestParameters: {{classname}}{{operationIdCamelCase}}Request{{^hasRequiredParams}} = {}{{/hasRequiredParams}}, {{/allParams.0}}options: ResponseObserveOptions): Promise<AxiosResponse<{{{returnType}}}{{^returnType}}void{{/returnType}}>>;
110+
public async {{nickname}}({{#allParams.0}}{{#hasRequiredParams}}requestParameters: {{classname}}{{operationIdCamelCase}}Request, {{/hasRequiredParams}}{{^hasRequiredParams}}requestParameters: {{classname}}{{operationIdCamelCase}}Request | undefined, {{/hasRequiredParams}}{{/allParams.0}}options: ResponseObserveOptions): Promise<AxiosResponse<{{{returnType}}}{{^returnType}}void{{/returnType}}>>;
111+
public async {{nickname}}({{#allParams.0}}requestParameters{{^hasRequiredParams}}?{{/hasRequiredParams}}: {{classname}}{{operationIdCamelCase}}Request, {{/allParams.0}}options?: ObserveOptions): Promise<{{{returnType}}}{{^returnType}}void{{/returnType}}>;
111112
public async {{nickname}}<TObserve extends ObserveOptions = ObserveOptions>({{#allParams.0}}requestParameters: {{classname}}{{operationIdCamelCase}}Request{{^hasRequiredParams}} = {}{{/hasRequiredParams}}, {{/allParams.0}}options: TObserve = {} as TObserve): Promise<TObserve extends ResponseObserveOptions ? AxiosResponse<{{{returnType}}}{{^returnType}}void{{/returnType}}> : {{{returnType}}}{{^returnType}}void{{/returnType}}> {
112113
{{#allParams.0}}
113114
validateRequestParameters('{{nickname}}', {{nickname}}RequestSchema, requestParameters);
114115
{{/allParams.0}}
115-
const localVarPath = {{#pathParams}}withParams(`{{{path}}}`, { {{#pathParams}}"{{baseName}}": requestParameters.{{paramName}}, {{/pathParams}} }){{/pathParams}}{{^pathParams}}`{{{path}}}`{{/pathParams}};
116+
const localVarPath = {{#pathParams.0}}withParams(`{{{path}}}`, { {{#pathParams}}"{{baseName}}": requestParameters.{{paramName}}, {{/pathParams}} }){{/pathParams.0}}{{^pathParams.0}}`{{{path}}}`{{/pathParams.0}};
116117
const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL);
117118
const baseOptions = this.configuration ? this.configuration.baseOptions : undefined;
118119
const localVarObserve = options.observe ?? 'body';

modules/openapi-generator/src/test/java/org/openapitools/codegen/typescript/axios/TypeScriptAxiosSlimParityTest.java

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -134,6 +134,17 @@ public void shouldReturnPayloadDataFromObjectOrientedMethods() throws Exception
134134
assertTrue(apiSource.contains("return localVarResponse.data as TObserve extends ResponseObserveOptions ? AxiosResponse<"), "Slim API class should resolve axios response data directly");
135135
}
136136

137+
@Test(description = "slim: response overload keeps optional request object typescript-safe")
138+
public void shouldUseUndefinedRequestParameterForOptionalRequestObjectResponseOverloads() throws Exception {
139+
IdentitySurface slimSurface = generateIdentity("typescript-axios-slim", EDGE_CASE_SPEC, NO_CUSTOMIZER);
140+
String apiSource = String.join(" ", slimSurface.apiFiles.values());
141+
142+
assertTrue(apiSource.contains("requestParameters: AnalyticsApiListReportsRequest | undefined, options: ResponseObserveOptions"),
143+
"Slim API response overloads should avoid optional request parameters before required options");
144+
assertTrue(apiSource.contains("public async listReports(requestParameters: AnalyticsApiListReportsRequest | undefined, options: ResponseObserveOptions): Promise<AxiosResponse<ReportList>>;"),
145+
"Slim API class response overload should remain TypeScript-valid for optional request objects");
146+
}
147+
137148
@Test(description = "slim: observe options are exported for typed response access")
138149
public void shouldExportObserveOptionsForTypedResponseAccess() throws Exception {
139150
IdentitySurface slimSurface = generateIdentity("typescript-axios-slim", EDGE_CASE_SPEC, NO_CUSTOMIZER);

0 commit comments

Comments
 (0)