From bf9ad063911bf0b1797c846be65d160d878aabca Mon Sep 17 00:00:00 2001 From: Bernd Hacker Date: Wed, 23 Oct 2019 16:16:38 +0200 Subject: [PATCH 01/18] perf(typescript-rxjs): remove redundant check when building auth header --- .../src/main/resources/typescript-rxjs/apis.mustache | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/modules/openapi-generator/src/main/resources/typescript-rxjs/apis.mustache b/modules/openapi-generator/src/main/resources/typescript-rxjs/apis.mustache index 3c548d7b547d..2c8722f00c14 100644 --- a/modules/openapi-generator/src/main/resources/typescript-rxjs/apis.mustache +++ b/modules/openapi-generator/src/main/resources/typescript-rxjs/apis.mustache @@ -76,9 +76,9 @@ export class {{classname}} extends BaseAPI { {{#isOAuth}} // oauth required ...(this.configuration.accessToken && { - Authorization: this.configuration.accessToken && (typeof this.configuration.accessToken === 'function' + Authorization: typeof this.configuration.accessToken === 'function' ? this.configuration.accessToken('{{name}}', [{{#scopes}}'{{{scope}}}'{{^-last}}, {{/-last}}{{/scopes}}]) - : this.configuration.accessToken) + : this.configuration.accessToken }), {{/isOAuth}} {{/authMethods}} From 9608c808695c552f35cf61561615e8b7b01defb5 Mon Sep 17 00:00:00 2001 From: Bernd Hacker Date: Wed, 23 Oct 2019 16:33:28 +0200 Subject: [PATCH 02/18] feat(typescript-rxjs): destructure request parameters, add throwIfNullOrUndefined helper, build query object more efficently --- .../resources/typescript-rxjs/apis.mustache | 102 +++++++++++------- .../typescript-rxjs/runtime.mustache | 16 ++- 2 files changed, 80 insertions(+), 38 deletions(-) diff --git a/modules/openapi-generator/src/main/resources/typescript-rxjs/apis.mustache b/modules/openapi-generator/src/main/resources/typescript-rxjs/apis.mustache index 2c8722f00c14..ce1e89e0ecce 100644 --- a/modules/openapi-generator/src/main/resources/typescript-rxjs/apis.mustache +++ b/modules/openapi-generator/src/main/resources/typescript-rxjs/apis.mustache @@ -1,7 +1,7 @@ // tslint:disable {{>licenseInfo}} import { Observable } from 'rxjs'; -import { BaseAPI{{#hasHttpHeaders}}, HttpHeaders{{/hasHttpHeaders}}{{#hasQueryParams}}, HttpQuery{{/hasQueryParams}}{{#hasRequiredParameters}}, throwIfRequired{{/hasRequiredParameters}}{{#hasPathParams}}, encodeURI{{/hasPathParams}}{{#hasListContainers}}, COLLECTION_FORMATS{{/hasListContainers}} } from '../runtime'; +import { BaseAPI{{#hasHttpHeaders}}, HttpHeaders{{/hasHttpHeaders}}{{#hasQueryParams}}, HttpQuery{{/hasQueryParams}}{{#hasRequiredParameters}}, throwIfNullOrUndefined{{/hasRequiredParameters}}{{#hasPathParams}}, encodeURI{{/hasPathParams}}{{#hasListContainers}}, COLLECTION_FORMATS{{/hasListContainers}} } from '../runtime'; {{#imports.0}} import { {{#imports}} @@ -37,11 +37,11 @@ export class {{classname}} extends BaseAPI { * {{&summary}} {{/summary}} */ - {{nickname}} = ({{#allParams.0}}requestParameters: {{operationIdCamelCase}}Request{{/allParams.0}}): Observable<{{#returnType}}{{{returnType}}}{{/returnType}}{{^returnType}}void{{/returnType}}> => { + {{nickname}} = ({{#allParams.0}}{ {{#allParams}}{{paramName}}, {{/allParams}}}: {{operationIdCamelCase}}Request{{/allParams.0}}): Observable<{{#returnType}}{{{returnType}}}{{/returnType}}{{^returnType}}void{{/returnType}}> => { {{#hasParams}} {{#allParams}} {{#required}} - throwIfRequired(requestParameters, '{{paramName}}', '{{nickname}}'); + throwIfNullOrUndefined({{paramName}}, '{{nickname}}'); {{/required}} {{/allParams}} @@ -58,15 +58,15 @@ export class {{classname}} extends BaseAPI { {{/bodyParam}} {{#headerParams}} {{#isListContainer}} - ...(requestParameters.{{paramName}} && { '{{baseName}}': requestParameters.{{paramName}}.join(COLLECTION_FORMATS['{{collectionFormat}}'])) }), + ...({{paramName}} != null ? { '{{baseName}}': {{paramName}}.join(COLLECTION_FORMATS['{{collectionFormat}}'])) } : undefined), {{/isListContainer}} {{^isListContainer}} - ...(requestParameters.{{paramName}} && { '{{baseName}}': String(requestParameters.{{paramName}}) }), + ...({{paramName}} != null ? { '{{baseName}}': String({{paramName}}) } : undefined), {{/isListContainer}} {{/headerParams}} {{#authMethods}} {{#isBasic}} - ...(this.configuration.username && this.configuration.password && { Authorization: `Basic ${btoa(this.configuration.username + ':' + this.configuration.password)}` }), + ...(this.configuration.username != null && this.configuration.password != null ? { Authorization: `Basic ${btoa(this.configuration.username + ':' + this.configuration.password)}` } : undefined), {{/isBasic}} {{#isApiKey}} {{#isKeyInHeader}} @@ -75,77 +75,107 @@ export class {{classname}} extends BaseAPI { {{/isApiKey}} {{#isOAuth}} // oauth required - ...(this.configuration.accessToken && { - Authorization: typeof this.configuration.accessToken === 'function' + ...(this.configuration.accessToken != null + ? { Authorization: typeof this.configuration.accessToken === 'function' ? this.configuration.accessToken('{{name}}', [{{#scopes}}'{{{scope}}}'{{^-last}}, {{/-last}}{{/scopes}}]) - : this.configuration.accessToken - }), + : this.configuration.accessToken } + : undefined + ), {{/isOAuth}} {{/authMethods}} }; {{/hasHttpHeaders}} {{#hasQueryParams}} + {{^hasRequiredParameters}} + const query: HttpQuery = {}; + + {{/hasRequiredParameters}} + {{#hasRequiredParameters}} const query: HttpQuery = { {{#queryParams}} + {{#required}} {{#isListContainer}} {{#isCollectionFormatMulti}} - ...(requestParameters.{{paramName}} && { '{{baseName}}': requestParameters.{{paramName}} }), + '{{baseName}}': {{paramName}}, {{/isCollectionFormatMulti}} {{^isCollectionFormatMulti}} - ...(requestParameters.{{paramName}} && { '{{baseName}}': requestParameters.{{paramName}}.join(COLLECTION_FORMATS['{{collectionFormat}}']) }), + '{{baseName}}': {{paramName}}.join(COLLECTION_FORMATS['{{collectionFormat}}']), {{/isCollectionFormatMulti}} {{/isListContainer}} {{^isListContainer}} {{#isDateTime}} - ...(requestParameters.{{paramName}} && { '{{baseName}}': (requestParameters.{{paramName}} as any).toISOString() }), + '{{baseName}}': ({{paramName}} as any).toISOString(), {{/isDateTime}} {{^isDateTime}} {{#isDate}} - ...(requestParameters.{{paramName}} && { '{{baseName}}': (requestParameters.{{paramName}} as any).toISOString() }), + '{{baseName}}': ({{paramName}} as any).toISOString(), {{/isDate}} {{^isDate}} - ...(requestParameters.{{paramName}} && { '{{baseName}}': requestParameters.{{paramName}} }), + '{{baseName}}': {{paramName}}, {{/isDate}} {{/isDateTime}} {{/isListContainer}} + {{/required}} {{/queryParams}} - {{#authMethods}} - {{#isApiKey}} - {{#isKeyInQuery}} - ...(this.configuration.apiKey && { '{{keyParamName}}': this.configuration.apiKey && this.configuration.apiKey('{{keyParamName}}') }), // {{name}} authentication - {{/isKeyInQuery}} - {{/isApiKey}} - {{/authMethods}} }; + {{/hasRequiredParameters}} + {{#queryParams}} + {{^required}} + {{#isListContainer}} + {{#isCollectionFormatMulti}} + if ({{paramName}} != null) { query['{{baseName}}'] = {{paramName}}; } + {{/isCollectionFormatMulti}} + {{^isCollectionFormatMulti}} + if ({{paramName}} != null) { query['{{baseName}}'] = {{paramName}}.join(COLLECTION_FORMATS['{{collectionFormat}}']); } + {{/isCollectionFormatMulti}} + {{/isListContainer}} + {{^isListContainer}} + {{#isDateTime}} + if ({{paramName}} != null) { query['{{baseName}}'] = ({{paramName}} as any).toISOString(); } + {{/isDateTime}} + {{^isDateTime}} + {{#isDate}} + if ({{paramName}} != null) { query['{{baseName}}'] = ({{paramName}} as any).toISOString(); } + {{/isDate}} + {{^isDate}} + if ({{paramName}} != null) { query['{{baseName}}'] = {{paramName}}; } + {{/isDate}} + {{/isDateTime}} + {{/isListContainer}} + {{/required}} + {{/queryParams}} + {{#authMethods}} + {{#isApiKey}} + {{#isKeyInQuery}} + if (this.configuration.apiKey != null) { query['{{keyParamName}}'] = this.configuration.apiKey('{{keyParamName}}'); } // {{name}} authentication + {{/isKeyInQuery}} + {{/isApiKey}} + {{/authMethods}} {{/hasQueryParams}} {{#hasFormParams}} const formData = new FormData(); - {{/hasFormParams}} {{#formParams}} {{#isListContainer}} - if (requestParameters.{{paramName}}) { + if ({{paramName}} != null) { {{#isCollectionFormatMulti}} - requestParameters.{{paramName}}.forEach((element) => { - formData.append('{{baseName}}', element as any); - }) + {{paramName}}.forEach((element) => formData.append('{{baseName}}', element as any)) {{/isCollectionFormatMulti}} {{^isCollectionFormatMulti}} - formData.append('{{baseName}}', requestParameters.{{paramName}}.join(COLLECTION_FORMATS['{{collectionFormat}}'])); + formData.append('{{baseName}}', {{paramName}}.join(COLLECTION_FORMATS['{{collectionFormat}}'])); {{/isCollectionFormatMulti}} } {{/isListContainer}} {{^isListContainer}} - if (requestParameters.{{paramName}} !== undefined) { - formData.append('{{baseName}}', requestParameters.{{paramName}} as any); - } - + if ({{paramName}} != null) { formData.append('{{baseName}}', {{paramName}} as any); } {{/isListContainer}} {{/formParams}} + + {{/hasFormParams}} return this.request<{{#returnType}}{{{returnType}}}{{/returnType}}{{^returnType}}void{{/returnType}}>({ - path: '{{{path}}}'{{#pathParams}}.replace({{=<% %>=}}'{<%baseName%>}'<%={{ }}=%>, encodeURI(requestParameters.{{paramName}})){{/pathParams}}, + path: '{{{path}}}'{{#pathParams}}.replace({{=<% %>=}}'{<%baseName%>}'<%={{ }}=%>, encodeURI({{paramName}})){{/pathParams}}, method: '{{httpMethod}}', {{#hasHttpHeaders}} headers, @@ -156,14 +186,14 @@ export class {{classname}} extends BaseAPI { {{#hasBodyParam}} {{#bodyParam}} {{#isContainer}} - body: requestParameters.{{paramName}}, + body: {{paramName}}, {{/isContainer}} {{^isContainer}} {{^isPrimitiveType}} - body: requestParameters.{{paramName}}, + body: {{paramName}}, {{/isPrimitiveType}} {{#isPrimitiveType}} - body: requestParameters.{{paramName}} as any, + body: {{paramName}} as any, {{/isPrimitiveType}} {{/isContainer}} {{/bodyParam}} diff --git a/modules/openapi-generator/src/main/resources/typescript-rxjs/runtime.mustache b/modules/openapi-generator/src/main/resources/typescript-rxjs/runtime.mustache index 7c58be70a52b..297a78755eea 100644 --- a/modules/openapi-generator/src/main/resources/typescript-rxjs/runtime.mustache +++ b/modules/openapi-generator/src/main/resources/typescript-rxjs/runtime.mustache @@ -125,7 +125,10 @@ export class BaseAPI { Object.assign(Object.create(Object.getPrototypeOf(this)), this); } -// export for not being a breaking change +/** + * @deprecated + * export for not being a breaking change + */ export class RequiredError extends Error { name: 'RequiredError' = 'RequiredError'; } @@ -167,12 +170,21 @@ const queryString = (params: HttpQuery): string => Object.keys(params) // alias fallback for not being a breaking change export const querystring = queryString; +/** + * @deprecated + */ export const throwIfRequired = (params: {[key: string]: any}, key: string, nickname: string) => { - if (!params || params[key] === null || params[key] === undefined) { + if (!params || params[key] == null) { throw new RequiredError(`Required parameter ${key} was null or undefined when calling ${nickname}.`); } }; +export const throwIfNullOrUndefined = (value: any, nickname?: string) => { + if (value == null) { + throw new Error(`Parameter "${value}" was null or undefined when calling "${nickname}".`); + } +}; + // alias for easier importing export interface RequestArgs extends AjaxRequest {} export interface ResponseArgs extends AjaxResponse {} From 80e22d1483b21ddbfaf341ca971847d6a4b32058 Mon Sep 17 00:00:00 2001 From: Bernd Hacker Date: Wed, 23 Oct 2019 16:37:08 +0200 Subject: [PATCH 03/18] fix(typescript-rxjs): change form checks back from null to undefined --- .../src/main/resources/typescript-rxjs/apis.mustache | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/modules/openapi-generator/src/main/resources/typescript-rxjs/apis.mustache b/modules/openapi-generator/src/main/resources/typescript-rxjs/apis.mustache index ce1e89e0ecce..6be5b47d2ffc 100644 --- a/modules/openapi-generator/src/main/resources/typescript-rxjs/apis.mustache +++ b/modules/openapi-generator/src/main/resources/typescript-rxjs/apis.mustache @@ -158,7 +158,7 @@ export class {{classname}} extends BaseAPI { const formData = new FormData(); {{#formParams}} {{#isListContainer}} - if ({{paramName}} != null) { + if ({{paramName}} !== undefined) { {{#isCollectionFormatMulti}} {{paramName}}.forEach((element) => formData.append('{{baseName}}', element as any)) {{/isCollectionFormatMulti}} @@ -169,7 +169,7 @@ export class {{classname}} extends BaseAPI { {{/isListContainer}} {{^isListContainer}} - if ({{paramName}} != null) { formData.append('{{baseName}}', {{paramName}} as any); } + if ({{paramName}} !== undefined) { formData.append('{{baseName}}', {{paramName}} as any); } {{/isListContainer}} {{/formParams}} From 908a22793f4f10541714489be1fc27f12e5a6ec2 Mon Sep 17 00:00:00 2001 From: Bernd Hacker Date: Wed, 23 Oct 2019 16:38:22 +0200 Subject: [PATCH 04/18] feat(typescript-rxjs): regenerate samples --- .../builds/default/apis/PetApi.ts | 133 +++++++++--------- .../builds/default/apis/StoreApi.ts | 20 +-- .../builds/default/apis/UserApi.ts | 52 +++---- .../typescript-rxjs/builds/default/runtime.ts | 16 ++- .../builds/es6-target/apis/PetApi.ts | 133 +++++++++--------- .../builds/es6-target/apis/StoreApi.ts | 20 +-- .../builds/es6-target/apis/UserApi.ts | 52 +++---- .../builds/es6-target/runtime.ts | 16 ++- .../builds/with-interfaces/apis/PetApi.ts | 133 +++++++++--------- .../builds/with-interfaces/apis/StoreApi.ts | 20 +-- .../builds/with-interfaces/apis/UserApi.ts | 52 +++---- .../builds/with-interfaces/runtime.ts | 16 ++- .../builds/with-npm-version/apis/PetApi.ts | 133 +++++++++--------- .../builds/with-npm-version/apis/StoreApi.ts | 20 +-- .../builds/with-npm-version/apis/UserApi.ts | 52 +++---- .../builds/with-npm-version/runtime.ts | 16 ++- 16 files changed, 460 insertions(+), 424 deletions(-) diff --git a/samples/client/petstore/typescript-rxjs/builds/default/apis/PetApi.ts b/samples/client/petstore/typescript-rxjs/builds/default/apis/PetApi.ts index a5328a8c7285..290d250b18f7 100644 --- a/samples/client/petstore/typescript-rxjs/builds/default/apis/PetApi.ts +++ b/samples/client/petstore/typescript-rxjs/builds/default/apis/PetApi.ts @@ -12,7 +12,7 @@ */ import { Observable } from 'rxjs'; -import { BaseAPI, HttpHeaders, HttpQuery, throwIfRequired, encodeURI, COLLECTION_FORMATS } from '../runtime'; +import { BaseAPI, HttpHeaders, HttpQuery, throwIfNullOrUndefined, encodeURI, COLLECTION_FORMATS } from '../runtime'; import { ApiResponse, Pet, @@ -63,45 +63,47 @@ export class PetApi extends BaseAPI { /** * Add a new pet to the store */ - addPet = (requestParameters: AddPetRequest): Observable => { - throwIfRequired(requestParameters, 'body', 'addPet'); + addPet = ({ body, }: AddPetRequest): Observable => { + throwIfNullOrUndefined(body, 'addPet'); const headers: HttpHeaders = { 'Content-Type': 'application/json', // oauth required - ...(this.configuration.accessToken && { - Authorization: this.configuration.accessToken && (typeof this.configuration.accessToken === 'function' + ...(this.configuration.accessToken != null + ? { Authorization: typeof this.configuration.accessToken === 'function' ? this.configuration.accessToken('petstore_auth', ['write:pets', 'read:pets']) - : this.configuration.accessToken) - }), + : this.configuration.accessToken } + : undefined + ), }; return this.request({ path: '/pet', method: 'POST', headers, - body: requestParameters.body, + body: body, }); }; /** * Deletes a pet */ - deletePet = (requestParameters: DeletePetRequest): Observable => { - throwIfRequired(requestParameters, 'petId', 'deletePet'); + deletePet = ({ petId, apiKey, }: DeletePetRequest): Observable => { + throwIfNullOrUndefined(petId, 'deletePet'); const headers: HttpHeaders = { - ...(requestParameters.apiKey && { 'api_key': String(requestParameters.apiKey) }), + ...(apiKey != null ? { 'api_key': String(apiKey) } : undefined), // oauth required - ...(this.configuration.accessToken && { - Authorization: this.configuration.accessToken && (typeof this.configuration.accessToken === 'function' + ...(this.configuration.accessToken != null + ? { Authorization: typeof this.configuration.accessToken === 'function' ? this.configuration.accessToken('petstore_auth', ['write:pets', 'read:pets']) - : this.configuration.accessToken) - }), + : this.configuration.accessToken } + : undefined + ), }; return this.request({ - path: '/pet/{petId}'.replace('{petId}', encodeURI(requestParameters.petId)), + path: '/pet/{petId}'.replace('{petId}', encodeURI(petId)), method: 'DELETE', headers, }); @@ -111,20 +113,21 @@ export class PetApi extends BaseAPI { * Multiple status values can be provided with comma separated strings * Finds Pets by status */ - findPetsByStatus = (requestParameters: FindPetsByStatusRequest): Observable> => { - throwIfRequired(requestParameters, 'status', 'findPetsByStatus'); + findPetsByStatus = ({ status, }: FindPetsByStatusRequest): Observable> => { + throwIfNullOrUndefined(status, 'findPetsByStatus'); const headers: HttpHeaders = { // oauth required - ...(this.configuration.accessToken && { - Authorization: this.configuration.accessToken && (typeof this.configuration.accessToken === 'function' + ...(this.configuration.accessToken != null + ? { Authorization: typeof this.configuration.accessToken === 'function' ? this.configuration.accessToken('petstore_auth', ['write:pets', 'read:pets']) - : this.configuration.accessToken) - }), + : this.configuration.accessToken } + : undefined + ), }; const query: HttpQuery = { - ...(requestParameters.status && { 'status': requestParameters.status.join(COLLECTION_FORMATS['csv']) }), + 'status': status.join(COLLECTION_FORMATS['csv']), }; return this.request>({ @@ -139,20 +142,21 @@ export class PetApi extends BaseAPI { * Multiple tags can be provided with comma separated strings. Use tag1, tag2, tag3 for testing. * Finds Pets by tags */ - findPetsByTags = (requestParameters: FindPetsByTagsRequest): Observable> => { - throwIfRequired(requestParameters, 'tags', 'findPetsByTags'); + findPetsByTags = ({ tags, }: FindPetsByTagsRequest): Observable> => { + throwIfNullOrUndefined(tags, 'findPetsByTags'); const headers: HttpHeaders = { // oauth required - ...(this.configuration.accessToken && { - Authorization: this.configuration.accessToken && (typeof this.configuration.accessToken === 'function' + ...(this.configuration.accessToken != null + ? { Authorization: typeof this.configuration.accessToken === 'function' ? this.configuration.accessToken('petstore_auth', ['write:pets', 'read:pets']) - : this.configuration.accessToken) - }), + : this.configuration.accessToken } + : undefined + ), }; const query: HttpQuery = { - ...(requestParameters.tags && { 'tags': requestParameters.tags.join(COLLECTION_FORMATS['csv']) }), + 'tags': tags.join(COLLECTION_FORMATS['csv']), }; return this.request>({ @@ -167,15 +171,15 @@ export class PetApi extends BaseAPI { * Returns a single pet * Find pet by ID */ - getPetById = (requestParameters: GetPetByIdRequest): Observable => { - throwIfRequired(requestParameters, 'petId', 'getPetById'); + getPetById = ({ petId, }: GetPetByIdRequest): Observable => { + throwIfNullOrUndefined(petId, 'getPetById'); const headers: HttpHeaders = { ...(this.configuration.apiKey && { 'api_key': this.configuration.apiKey('api_key') }), // api_key authentication }; return this.request({ - path: '/pet/{petId}'.replace('{petId}', encodeURI(requestParameters.petId)), + path: '/pet/{petId}'.replace('{petId}', encodeURI(petId)), method: 'GET', headers, }); @@ -184,53 +188,50 @@ export class PetApi extends BaseAPI { /** * Update an existing pet */ - updatePet = (requestParameters: UpdatePetRequest): Observable => { - throwIfRequired(requestParameters, 'body', 'updatePet'); + updatePet = ({ body, }: UpdatePetRequest): Observable => { + throwIfNullOrUndefined(body, 'updatePet'); const headers: HttpHeaders = { 'Content-Type': 'application/json', // oauth required - ...(this.configuration.accessToken && { - Authorization: this.configuration.accessToken && (typeof this.configuration.accessToken === 'function' + ...(this.configuration.accessToken != null + ? { Authorization: typeof this.configuration.accessToken === 'function' ? this.configuration.accessToken('petstore_auth', ['write:pets', 'read:pets']) - : this.configuration.accessToken) - }), + : this.configuration.accessToken } + : undefined + ), }; return this.request({ path: '/pet', method: 'PUT', headers, - body: requestParameters.body, + body: body, }); }; /** * Updates a pet in the store with form data */ - updatePetWithForm = (requestParameters: UpdatePetWithFormRequest): Observable => { - throwIfRequired(requestParameters, 'petId', 'updatePetWithForm'); + updatePetWithForm = ({ petId, name, status, }: UpdatePetWithFormRequest): Observable => { + throwIfNullOrUndefined(petId, 'updatePetWithForm'); const headers: HttpHeaders = { // oauth required - ...(this.configuration.accessToken && { - Authorization: this.configuration.accessToken && (typeof this.configuration.accessToken === 'function' + ...(this.configuration.accessToken != null + ? { Authorization: typeof this.configuration.accessToken === 'function' ? this.configuration.accessToken('petstore_auth', ['write:pets', 'read:pets']) - : this.configuration.accessToken) - }), + : this.configuration.accessToken } + : undefined + ), }; const formData = new FormData(); - if (requestParameters.name !== undefined) { - formData.append('name', requestParameters.name as any); - } - - if (requestParameters.status !== undefined) { - formData.append('status', requestParameters.status as any); - } + if (name !== undefined) { formData.append('name', name as any); } + if (status !== undefined) { formData.append('status', status as any); } return this.request({ - path: '/pet/{petId}'.replace('{petId}', encodeURI(requestParameters.petId)), + path: '/pet/{petId}'.replace('{petId}', encodeURI(petId)), method: 'POST', headers, body: formData, @@ -240,29 +241,25 @@ export class PetApi extends BaseAPI { /** * uploads an image */ - uploadFile = (requestParameters: UploadFileRequest): Observable => { - throwIfRequired(requestParameters, 'petId', 'uploadFile'); + uploadFile = ({ petId, additionalMetadata, file, }: UploadFileRequest): Observable => { + throwIfNullOrUndefined(petId, 'uploadFile'); const headers: HttpHeaders = { // oauth required - ...(this.configuration.accessToken && { - Authorization: this.configuration.accessToken && (typeof this.configuration.accessToken === 'function' + ...(this.configuration.accessToken != null + ? { Authorization: typeof this.configuration.accessToken === 'function' ? this.configuration.accessToken('petstore_auth', ['write:pets', 'read:pets']) - : this.configuration.accessToken) - }), + : this.configuration.accessToken } + : undefined + ), }; const formData = new FormData(); - if (requestParameters.additionalMetadata !== undefined) { - formData.append('additionalMetadata', requestParameters.additionalMetadata as any); - } - - if (requestParameters.file !== undefined) { - formData.append('file', requestParameters.file as any); - } + if (additionalMetadata !== undefined) { formData.append('additionalMetadata', additionalMetadata as any); } + if (file !== undefined) { formData.append('file', file as any); } return this.request({ - path: '/pet/{petId}/uploadImage'.replace('{petId}', encodeURI(requestParameters.petId)), + path: '/pet/{petId}/uploadImage'.replace('{petId}', encodeURI(petId)), method: 'POST', headers, body: formData, diff --git a/samples/client/petstore/typescript-rxjs/builds/default/apis/StoreApi.ts b/samples/client/petstore/typescript-rxjs/builds/default/apis/StoreApi.ts index 623b48bdede8..9fbda2c243de 100644 --- a/samples/client/petstore/typescript-rxjs/builds/default/apis/StoreApi.ts +++ b/samples/client/petstore/typescript-rxjs/builds/default/apis/StoreApi.ts @@ -12,7 +12,7 @@ */ import { Observable } from 'rxjs'; -import { BaseAPI, HttpHeaders, throwIfRequired, encodeURI } from '../runtime'; +import { BaseAPI, HttpHeaders, throwIfNullOrUndefined, encodeURI } from '../runtime'; import { Order, } from '../models'; @@ -38,11 +38,11 @@ export class StoreApi extends BaseAPI { * For valid response try integer IDs with value < 1000. Anything above 1000 or nonintegers will generate API errors * Delete purchase order by ID */ - deleteOrder = (requestParameters: DeleteOrderRequest): Observable => { - throwIfRequired(requestParameters, 'orderId', 'deleteOrder'); + deleteOrder = ({ orderId, }: DeleteOrderRequest): Observable => { + throwIfNullOrUndefined(orderId, 'deleteOrder'); return this.request({ - path: '/store/order/{orderId}'.replace('{orderId}', encodeURI(requestParameters.orderId)), + path: '/store/order/{orderId}'.replace('{orderId}', encodeURI(orderId)), method: 'DELETE', }); }; @@ -67,11 +67,11 @@ export class StoreApi extends BaseAPI { * For valid response try integer IDs with value <= 5 or > 10. Other values will generated exceptions * Find purchase order by ID */ - getOrderById = (requestParameters: GetOrderByIdRequest): Observable => { - throwIfRequired(requestParameters, 'orderId', 'getOrderById'); + getOrderById = ({ orderId, }: GetOrderByIdRequest): Observable => { + throwIfNullOrUndefined(orderId, 'getOrderById'); return this.request({ - path: '/store/order/{orderId}'.replace('{orderId}', encodeURI(requestParameters.orderId)), + path: '/store/order/{orderId}'.replace('{orderId}', encodeURI(orderId)), method: 'GET', }); }; @@ -79,8 +79,8 @@ export class StoreApi extends BaseAPI { /** * Place an order for a pet */ - placeOrder = (requestParameters: PlaceOrderRequest): Observable => { - throwIfRequired(requestParameters, 'body', 'placeOrder'); + placeOrder = ({ body, }: PlaceOrderRequest): Observable => { + throwIfNullOrUndefined(body, 'placeOrder'); const headers: HttpHeaders = { 'Content-Type': 'application/json', @@ -90,7 +90,7 @@ export class StoreApi extends BaseAPI { path: '/store/order', method: 'POST', headers, - body: requestParameters.body, + body: body, }); }; diff --git a/samples/client/petstore/typescript-rxjs/builds/default/apis/UserApi.ts b/samples/client/petstore/typescript-rxjs/builds/default/apis/UserApi.ts index 2194fdfe9f68..9d9a988d95ec 100644 --- a/samples/client/petstore/typescript-rxjs/builds/default/apis/UserApi.ts +++ b/samples/client/petstore/typescript-rxjs/builds/default/apis/UserApi.ts @@ -12,7 +12,7 @@ */ import { Observable } from 'rxjs'; -import { BaseAPI, HttpHeaders, HttpQuery, throwIfRequired, encodeURI } from '../runtime'; +import { BaseAPI, HttpHeaders, HttpQuery, throwIfNullOrUndefined, encodeURI } from '../runtime'; import { User, } from '../models'; @@ -56,8 +56,8 @@ export class UserApi extends BaseAPI { * This can only be done by the logged in user. * Create user */ - createUser = (requestParameters: CreateUserRequest): Observable => { - throwIfRequired(requestParameters, 'body', 'createUser'); + createUser = ({ body, }: CreateUserRequest): Observable => { + throwIfNullOrUndefined(body, 'createUser'); const headers: HttpHeaders = { 'Content-Type': 'application/json', @@ -67,15 +67,15 @@ export class UserApi extends BaseAPI { path: '/user', method: 'POST', headers, - body: requestParameters.body, + body: body, }); }; /** * Creates list of users with given input array */ - createUsersWithArrayInput = (requestParameters: CreateUsersWithArrayInputRequest): Observable => { - throwIfRequired(requestParameters, 'body', 'createUsersWithArrayInput'); + createUsersWithArrayInput = ({ body, }: CreateUsersWithArrayInputRequest): Observable => { + throwIfNullOrUndefined(body, 'createUsersWithArrayInput'); const headers: HttpHeaders = { 'Content-Type': 'application/json', @@ -85,15 +85,15 @@ export class UserApi extends BaseAPI { path: '/user/createWithArray', method: 'POST', headers, - body: requestParameters.body, + body: body, }); }; /** * Creates list of users with given input array */ - createUsersWithListInput = (requestParameters: CreateUsersWithListInputRequest): Observable => { - throwIfRequired(requestParameters, 'body', 'createUsersWithListInput'); + createUsersWithListInput = ({ body, }: CreateUsersWithListInputRequest): Observable => { + throwIfNullOrUndefined(body, 'createUsersWithListInput'); const headers: HttpHeaders = { 'Content-Type': 'application/json', @@ -103,7 +103,7 @@ export class UserApi extends BaseAPI { path: '/user/createWithList', method: 'POST', headers, - body: requestParameters.body, + body: body, }); }; @@ -111,11 +111,11 @@ export class UserApi extends BaseAPI { * This can only be done by the logged in user. * Delete user */ - deleteUser = (requestParameters: DeleteUserRequest): Observable => { - throwIfRequired(requestParameters, 'username', 'deleteUser'); + deleteUser = ({ username, }: DeleteUserRequest): Observable => { + throwIfNullOrUndefined(username, 'deleteUser'); return this.request({ - path: '/user/{username}'.replace('{username}', encodeURI(requestParameters.username)), + path: '/user/{username}'.replace('{username}', encodeURI(username)), method: 'DELETE', }); }; @@ -123,11 +123,11 @@ export class UserApi extends BaseAPI { /** * Get user by user name */ - getUserByName = (requestParameters: GetUserByNameRequest): Observable => { - throwIfRequired(requestParameters, 'username', 'getUserByName'); + getUserByName = ({ username, }: GetUserByNameRequest): Observable => { + throwIfNullOrUndefined(username, 'getUserByName'); return this.request({ - path: '/user/{username}'.replace('{username}', encodeURI(requestParameters.username)), + path: '/user/{username}'.replace('{username}', encodeURI(username)), method: 'GET', }); }; @@ -135,13 +135,13 @@ export class UserApi extends BaseAPI { /** * Logs user into the system */ - loginUser = (requestParameters: LoginUserRequest): Observable => { - throwIfRequired(requestParameters, 'username', 'loginUser'); - throwIfRequired(requestParameters, 'password', 'loginUser'); + loginUser = ({ username, password, }: LoginUserRequest): Observable => { + throwIfNullOrUndefined(username, 'loginUser'); + throwIfNullOrUndefined(password, 'loginUser'); const query: HttpQuery = { - ...(requestParameters.username && { 'username': requestParameters.username }), - ...(requestParameters.password && { 'password': requestParameters.password }), + 'username': username, + 'password': password, }; return this.request({ @@ -165,19 +165,19 @@ export class UserApi extends BaseAPI { * This can only be done by the logged in user. * Updated user */ - updateUser = (requestParameters: UpdateUserRequest): Observable => { - throwIfRequired(requestParameters, 'username', 'updateUser'); - throwIfRequired(requestParameters, 'body', 'updateUser'); + updateUser = ({ username, body, }: UpdateUserRequest): Observable => { + throwIfNullOrUndefined(username, 'updateUser'); + throwIfNullOrUndefined(body, 'updateUser'); const headers: HttpHeaders = { 'Content-Type': 'application/json', }; return this.request({ - path: '/user/{username}'.replace('{username}', encodeURI(requestParameters.username)), + path: '/user/{username}'.replace('{username}', encodeURI(username)), method: 'PUT', headers, - body: requestParameters.body, + body: body, }); }; diff --git a/samples/client/petstore/typescript-rxjs/builds/default/runtime.ts b/samples/client/petstore/typescript-rxjs/builds/default/runtime.ts index e71a012b04bd..60ce06be6073 100644 --- a/samples/client/petstore/typescript-rxjs/builds/default/runtime.ts +++ b/samples/client/petstore/typescript-rxjs/builds/default/runtime.ts @@ -136,7 +136,10 @@ export class BaseAPI { Object.assign(Object.create(Object.getPrototypeOf(this)), this); } -// export for not being a breaking change +/** + * @deprecated + * export for not being a breaking change + */ export class RequiredError extends Error { name: 'RequiredError' = 'RequiredError'; } @@ -178,12 +181,21 @@ const queryString = (params: HttpQuery): string => Object.keys(params) // alias fallback for not being a breaking change export const querystring = queryString; +/** + * @deprecated + */ export const throwIfRequired = (params: {[key: string]: any}, key: string, nickname: string) => { - if (!params || params[key] === null || params[key] === undefined) { + if (!params || params[key] == null) { throw new RequiredError(`Required parameter ${key} was null or undefined when calling ${nickname}.`); } }; +export const throwIfNullOrUndefined = (value: any, nickname?: string) => { + if (value == null) { + throw new Error(`Parameter "${value}" was null or undefined when calling "${nickname}".`); + } +}; + // alias for easier importing export interface RequestArgs extends AjaxRequest {} export interface ResponseArgs extends AjaxResponse {} diff --git a/samples/client/petstore/typescript-rxjs/builds/es6-target/apis/PetApi.ts b/samples/client/petstore/typescript-rxjs/builds/es6-target/apis/PetApi.ts index a5328a8c7285..290d250b18f7 100644 --- a/samples/client/petstore/typescript-rxjs/builds/es6-target/apis/PetApi.ts +++ b/samples/client/petstore/typescript-rxjs/builds/es6-target/apis/PetApi.ts @@ -12,7 +12,7 @@ */ import { Observable } from 'rxjs'; -import { BaseAPI, HttpHeaders, HttpQuery, throwIfRequired, encodeURI, COLLECTION_FORMATS } from '../runtime'; +import { BaseAPI, HttpHeaders, HttpQuery, throwIfNullOrUndefined, encodeURI, COLLECTION_FORMATS } from '../runtime'; import { ApiResponse, Pet, @@ -63,45 +63,47 @@ export class PetApi extends BaseAPI { /** * Add a new pet to the store */ - addPet = (requestParameters: AddPetRequest): Observable => { - throwIfRequired(requestParameters, 'body', 'addPet'); + addPet = ({ body, }: AddPetRequest): Observable => { + throwIfNullOrUndefined(body, 'addPet'); const headers: HttpHeaders = { 'Content-Type': 'application/json', // oauth required - ...(this.configuration.accessToken && { - Authorization: this.configuration.accessToken && (typeof this.configuration.accessToken === 'function' + ...(this.configuration.accessToken != null + ? { Authorization: typeof this.configuration.accessToken === 'function' ? this.configuration.accessToken('petstore_auth', ['write:pets', 'read:pets']) - : this.configuration.accessToken) - }), + : this.configuration.accessToken } + : undefined + ), }; return this.request({ path: '/pet', method: 'POST', headers, - body: requestParameters.body, + body: body, }); }; /** * Deletes a pet */ - deletePet = (requestParameters: DeletePetRequest): Observable => { - throwIfRequired(requestParameters, 'petId', 'deletePet'); + deletePet = ({ petId, apiKey, }: DeletePetRequest): Observable => { + throwIfNullOrUndefined(petId, 'deletePet'); const headers: HttpHeaders = { - ...(requestParameters.apiKey && { 'api_key': String(requestParameters.apiKey) }), + ...(apiKey != null ? { 'api_key': String(apiKey) } : undefined), // oauth required - ...(this.configuration.accessToken && { - Authorization: this.configuration.accessToken && (typeof this.configuration.accessToken === 'function' + ...(this.configuration.accessToken != null + ? { Authorization: typeof this.configuration.accessToken === 'function' ? this.configuration.accessToken('petstore_auth', ['write:pets', 'read:pets']) - : this.configuration.accessToken) - }), + : this.configuration.accessToken } + : undefined + ), }; return this.request({ - path: '/pet/{petId}'.replace('{petId}', encodeURI(requestParameters.petId)), + path: '/pet/{petId}'.replace('{petId}', encodeURI(petId)), method: 'DELETE', headers, }); @@ -111,20 +113,21 @@ export class PetApi extends BaseAPI { * Multiple status values can be provided with comma separated strings * Finds Pets by status */ - findPetsByStatus = (requestParameters: FindPetsByStatusRequest): Observable> => { - throwIfRequired(requestParameters, 'status', 'findPetsByStatus'); + findPetsByStatus = ({ status, }: FindPetsByStatusRequest): Observable> => { + throwIfNullOrUndefined(status, 'findPetsByStatus'); const headers: HttpHeaders = { // oauth required - ...(this.configuration.accessToken && { - Authorization: this.configuration.accessToken && (typeof this.configuration.accessToken === 'function' + ...(this.configuration.accessToken != null + ? { Authorization: typeof this.configuration.accessToken === 'function' ? this.configuration.accessToken('petstore_auth', ['write:pets', 'read:pets']) - : this.configuration.accessToken) - }), + : this.configuration.accessToken } + : undefined + ), }; const query: HttpQuery = { - ...(requestParameters.status && { 'status': requestParameters.status.join(COLLECTION_FORMATS['csv']) }), + 'status': status.join(COLLECTION_FORMATS['csv']), }; return this.request>({ @@ -139,20 +142,21 @@ export class PetApi extends BaseAPI { * Multiple tags can be provided with comma separated strings. Use tag1, tag2, tag3 for testing. * Finds Pets by tags */ - findPetsByTags = (requestParameters: FindPetsByTagsRequest): Observable> => { - throwIfRequired(requestParameters, 'tags', 'findPetsByTags'); + findPetsByTags = ({ tags, }: FindPetsByTagsRequest): Observable> => { + throwIfNullOrUndefined(tags, 'findPetsByTags'); const headers: HttpHeaders = { // oauth required - ...(this.configuration.accessToken && { - Authorization: this.configuration.accessToken && (typeof this.configuration.accessToken === 'function' + ...(this.configuration.accessToken != null + ? { Authorization: typeof this.configuration.accessToken === 'function' ? this.configuration.accessToken('petstore_auth', ['write:pets', 'read:pets']) - : this.configuration.accessToken) - }), + : this.configuration.accessToken } + : undefined + ), }; const query: HttpQuery = { - ...(requestParameters.tags && { 'tags': requestParameters.tags.join(COLLECTION_FORMATS['csv']) }), + 'tags': tags.join(COLLECTION_FORMATS['csv']), }; return this.request>({ @@ -167,15 +171,15 @@ export class PetApi extends BaseAPI { * Returns a single pet * Find pet by ID */ - getPetById = (requestParameters: GetPetByIdRequest): Observable => { - throwIfRequired(requestParameters, 'petId', 'getPetById'); + getPetById = ({ petId, }: GetPetByIdRequest): Observable => { + throwIfNullOrUndefined(petId, 'getPetById'); const headers: HttpHeaders = { ...(this.configuration.apiKey && { 'api_key': this.configuration.apiKey('api_key') }), // api_key authentication }; return this.request({ - path: '/pet/{petId}'.replace('{petId}', encodeURI(requestParameters.petId)), + path: '/pet/{petId}'.replace('{petId}', encodeURI(petId)), method: 'GET', headers, }); @@ -184,53 +188,50 @@ export class PetApi extends BaseAPI { /** * Update an existing pet */ - updatePet = (requestParameters: UpdatePetRequest): Observable => { - throwIfRequired(requestParameters, 'body', 'updatePet'); + updatePet = ({ body, }: UpdatePetRequest): Observable => { + throwIfNullOrUndefined(body, 'updatePet'); const headers: HttpHeaders = { 'Content-Type': 'application/json', // oauth required - ...(this.configuration.accessToken && { - Authorization: this.configuration.accessToken && (typeof this.configuration.accessToken === 'function' + ...(this.configuration.accessToken != null + ? { Authorization: typeof this.configuration.accessToken === 'function' ? this.configuration.accessToken('petstore_auth', ['write:pets', 'read:pets']) - : this.configuration.accessToken) - }), + : this.configuration.accessToken } + : undefined + ), }; return this.request({ path: '/pet', method: 'PUT', headers, - body: requestParameters.body, + body: body, }); }; /** * Updates a pet in the store with form data */ - updatePetWithForm = (requestParameters: UpdatePetWithFormRequest): Observable => { - throwIfRequired(requestParameters, 'petId', 'updatePetWithForm'); + updatePetWithForm = ({ petId, name, status, }: UpdatePetWithFormRequest): Observable => { + throwIfNullOrUndefined(petId, 'updatePetWithForm'); const headers: HttpHeaders = { // oauth required - ...(this.configuration.accessToken && { - Authorization: this.configuration.accessToken && (typeof this.configuration.accessToken === 'function' + ...(this.configuration.accessToken != null + ? { Authorization: typeof this.configuration.accessToken === 'function' ? this.configuration.accessToken('petstore_auth', ['write:pets', 'read:pets']) - : this.configuration.accessToken) - }), + : this.configuration.accessToken } + : undefined + ), }; const formData = new FormData(); - if (requestParameters.name !== undefined) { - formData.append('name', requestParameters.name as any); - } - - if (requestParameters.status !== undefined) { - formData.append('status', requestParameters.status as any); - } + if (name !== undefined) { formData.append('name', name as any); } + if (status !== undefined) { formData.append('status', status as any); } return this.request({ - path: '/pet/{petId}'.replace('{petId}', encodeURI(requestParameters.petId)), + path: '/pet/{petId}'.replace('{petId}', encodeURI(petId)), method: 'POST', headers, body: formData, @@ -240,29 +241,25 @@ export class PetApi extends BaseAPI { /** * uploads an image */ - uploadFile = (requestParameters: UploadFileRequest): Observable => { - throwIfRequired(requestParameters, 'petId', 'uploadFile'); + uploadFile = ({ petId, additionalMetadata, file, }: UploadFileRequest): Observable => { + throwIfNullOrUndefined(petId, 'uploadFile'); const headers: HttpHeaders = { // oauth required - ...(this.configuration.accessToken && { - Authorization: this.configuration.accessToken && (typeof this.configuration.accessToken === 'function' + ...(this.configuration.accessToken != null + ? { Authorization: typeof this.configuration.accessToken === 'function' ? this.configuration.accessToken('petstore_auth', ['write:pets', 'read:pets']) - : this.configuration.accessToken) - }), + : this.configuration.accessToken } + : undefined + ), }; const formData = new FormData(); - if (requestParameters.additionalMetadata !== undefined) { - formData.append('additionalMetadata', requestParameters.additionalMetadata as any); - } - - if (requestParameters.file !== undefined) { - formData.append('file', requestParameters.file as any); - } + if (additionalMetadata !== undefined) { formData.append('additionalMetadata', additionalMetadata as any); } + if (file !== undefined) { formData.append('file', file as any); } return this.request({ - path: '/pet/{petId}/uploadImage'.replace('{petId}', encodeURI(requestParameters.petId)), + path: '/pet/{petId}/uploadImage'.replace('{petId}', encodeURI(petId)), method: 'POST', headers, body: formData, diff --git a/samples/client/petstore/typescript-rxjs/builds/es6-target/apis/StoreApi.ts b/samples/client/petstore/typescript-rxjs/builds/es6-target/apis/StoreApi.ts index 623b48bdede8..9fbda2c243de 100644 --- a/samples/client/petstore/typescript-rxjs/builds/es6-target/apis/StoreApi.ts +++ b/samples/client/petstore/typescript-rxjs/builds/es6-target/apis/StoreApi.ts @@ -12,7 +12,7 @@ */ import { Observable } from 'rxjs'; -import { BaseAPI, HttpHeaders, throwIfRequired, encodeURI } from '../runtime'; +import { BaseAPI, HttpHeaders, throwIfNullOrUndefined, encodeURI } from '../runtime'; import { Order, } from '../models'; @@ -38,11 +38,11 @@ export class StoreApi extends BaseAPI { * For valid response try integer IDs with value < 1000. Anything above 1000 or nonintegers will generate API errors * Delete purchase order by ID */ - deleteOrder = (requestParameters: DeleteOrderRequest): Observable => { - throwIfRequired(requestParameters, 'orderId', 'deleteOrder'); + deleteOrder = ({ orderId, }: DeleteOrderRequest): Observable => { + throwIfNullOrUndefined(orderId, 'deleteOrder'); return this.request({ - path: '/store/order/{orderId}'.replace('{orderId}', encodeURI(requestParameters.orderId)), + path: '/store/order/{orderId}'.replace('{orderId}', encodeURI(orderId)), method: 'DELETE', }); }; @@ -67,11 +67,11 @@ export class StoreApi extends BaseAPI { * For valid response try integer IDs with value <= 5 or > 10. Other values will generated exceptions * Find purchase order by ID */ - getOrderById = (requestParameters: GetOrderByIdRequest): Observable => { - throwIfRequired(requestParameters, 'orderId', 'getOrderById'); + getOrderById = ({ orderId, }: GetOrderByIdRequest): Observable => { + throwIfNullOrUndefined(orderId, 'getOrderById'); return this.request({ - path: '/store/order/{orderId}'.replace('{orderId}', encodeURI(requestParameters.orderId)), + path: '/store/order/{orderId}'.replace('{orderId}', encodeURI(orderId)), method: 'GET', }); }; @@ -79,8 +79,8 @@ export class StoreApi extends BaseAPI { /** * Place an order for a pet */ - placeOrder = (requestParameters: PlaceOrderRequest): Observable => { - throwIfRequired(requestParameters, 'body', 'placeOrder'); + placeOrder = ({ body, }: PlaceOrderRequest): Observable => { + throwIfNullOrUndefined(body, 'placeOrder'); const headers: HttpHeaders = { 'Content-Type': 'application/json', @@ -90,7 +90,7 @@ export class StoreApi extends BaseAPI { path: '/store/order', method: 'POST', headers, - body: requestParameters.body, + body: body, }); }; diff --git a/samples/client/petstore/typescript-rxjs/builds/es6-target/apis/UserApi.ts b/samples/client/petstore/typescript-rxjs/builds/es6-target/apis/UserApi.ts index 2194fdfe9f68..9d9a988d95ec 100644 --- a/samples/client/petstore/typescript-rxjs/builds/es6-target/apis/UserApi.ts +++ b/samples/client/petstore/typescript-rxjs/builds/es6-target/apis/UserApi.ts @@ -12,7 +12,7 @@ */ import { Observable } from 'rxjs'; -import { BaseAPI, HttpHeaders, HttpQuery, throwIfRequired, encodeURI } from '../runtime'; +import { BaseAPI, HttpHeaders, HttpQuery, throwIfNullOrUndefined, encodeURI } from '../runtime'; import { User, } from '../models'; @@ -56,8 +56,8 @@ export class UserApi extends BaseAPI { * This can only be done by the logged in user. * Create user */ - createUser = (requestParameters: CreateUserRequest): Observable => { - throwIfRequired(requestParameters, 'body', 'createUser'); + createUser = ({ body, }: CreateUserRequest): Observable => { + throwIfNullOrUndefined(body, 'createUser'); const headers: HttpHeaders = { 'Content-Type': 'application/json', @@ -67,15 +67,15 @@ export class UserApi extends BaseAPI { path: '/user', method: 'POST', headers, - body: requestParameters.body, + body: body, }); }; /** * Creates list of users with given input array */ - createUsersWithArrayInput = (requestParameters: CreateUsersWithArrayInputRequest): Observable => { - throwIfRequired(requestParameters, 'body', 'createUsersWithArrayInput'); + createUsersWithArrayInput = ({ body, }: CreateUsersWithArrayInputRequest): Observable => { + throwIfNullOrUndefined(body, 'createUsersWithArrayInput'); const headers: HttpHeaders = { 'Content-Type': 'application/json', @@ -85,15 +85,15 @@ export class UserApi extends BaseAPI { path: '/user/createWithArray', method: 'POST', headers, - body: requestParameters.body, + body: body, }); }; /** * Creates list of users with given input array */ - createUsersWithListInput = (requestParameters: CreateUsersWithListInputRequest): Observable => { - throwIfRequired(requestParameters, 'body', 'createUsersWithListInput'); + createUsersWithListInput = ({ body, }: CreateUsersWithListInputRequest): Observable => { + throwIfNullOrUndefined(body, 'createUsersWithListInput'); const headers: HttpHeaders = { 'Content-Type': 'application/json', @@ -103,7 +103,7 @@ export class UserApi extends BaseAPI { path: '/user/createWithList', method: 'POST', headers, - body: requestParameters.body, + body: body, }); }; @@ -111,11 +111,11 @@ export class UserApi extends BaseAPI { * This can only be done by the logged in user. * Delete user */ - deleteUser = (requestParameters: DeleteUserRequest): Observable => { - throwIfRequired(requestParameters, 'username', 'deleteUser'); + deleteUser = ({ username, }: DeleteUserRequest): Observable => { + throwIfNullOrUndefined(username, 'deleteUser'); return this.request({ - path: '/user/{username}'.replace('{username}', encodeURI(requestParameters.username)), + path: '/user/{username}'.replace('{username}', encodeURI(username)), method: 'DELETE', }); }; @@ -123,11 +123,11 @@ export class UserApi extends BaseAPI { /** * Get user by user name */ - getUserByName = (requestParameters: GetUserByNameRequest): Observable => { - throwIfRequired(requestParameters, 'username', 'getUserByName'); + getUserByName = ({ username, }: GetUserByNameRequest): Observable => { + throwIfNullOrUndefined(username, 'getUserByName'); return this.request({ - path: '/user/{username}'.replace('{username}', encodeURI(requestParameters.username)), + path: '/user/{username}'.replace('{username}', encodeURI(username)), method: 'GET', }); }; @@ -135,13 +135,13 @@ export class UserApi extends BaseAPI { /** * Logs user into the system */ - loginUser = (requestParameters: LoginUserRequest): Observable => { - throwIfRequired(requestParameters, 'username', 'loginUser'); - throwIfRequired(requestParameters, 'password', 'loginUser'); + loginUser = ({ username, password, }: LoginUserRequest): Observable => { + throwIfNullOrUndefined(username, 'loginUser'); + throwIfNullOrUndefined(password, 'loginUser'); const query: HttpQuery = { - ...(requestParameters.username && { 'username': requestParameters.username }), - ...(requestParameters.password && { 'password': requestParameters.password }), + 'username': username, + 'password': password, }; return this.request({ @@ -165,19 +165,19 @@ export class UserApi extends BaseAPI { * This can only be done by the logged in user. * Updated user */ - updateUser = (requestParameters: UpdateUserRequest): Observable => { - throwIfRequired(requestParameters, 'username', 'updateUser'); - throwIfRequired(requestParameters, 'body', 'updateUser'); + updateUser = ({ username, body, }: UpdateUserRequest): Observable => { + throwIfNullOrUndefined(username, 'updateUser'); + throwIfNullOrUndefined(body, 'updateUser'); const headers: HttpHeaders = { 'Content-Type': 'application/json', }; return this.request({ - path: '/user/{username}'.replace('{username}', encodeURI(requestParameters.username)), + path: '/user/{username}'.replace('{username}', encodeURI(username)), method: 'PUT', headers, - body: requestParameters.body, + body: body, }); }; diff --git a/samples/client/petstore/typescript-rxjs/builds/es6-target/runtime.ts b/samples/client/petstore/typescript-rxjs/builds/es6-target/runtime.ts index e71a012b04bd..60ce06be6073 100644 --- a/samples/client/petstore/typescript-rxjs/builds/es6-target/runtime.ts +++ b/samples/client/petstore/typescript-rxjs/builds/es6-target/runtime.ts @@ -136,7 +136,10 @@ export class BaseAPI { Object.assign(Object.create(Object.getPrototypeOf(this)), this); } -// export for not being a breaking change +/** + * @deprecated + * export for not being a breaking change + */ export class RequiredError extends Error { name: 'RequiredError' = 'RequiredError'; } @@ -178,12 +181,21 @@ const queryString = (params: HttpQuery): string => Object.keys(params) // alias fallback for not being a breaking change export const querystring = queryString; +/** + * @deprecated + */ export const throwIfRequired = (params: {[key: string]: any}, key: string, nickname: string) => { - if (!params || params[key] === null || params[key] === undefined) { + if (!params || params[key] == null) { throw new RequiredError(`Required parameter ${key} was null or undefined when calling ${nickname}.`); } }; +export const throwIfNullOrUndefined = (value: any, nickname?: string) => { + if (value == null) { + throw new Error(`Parameter "${value}" was null or undefined when calling "${nickname}".`); + } +}; + // alias for easier importing export interface RequestArgs extends AjaxRequest {} export interface ResponseArgs extends AjaxResponse {} diff --git a/samples/client/petstore/typescript-rxjs/builds/with-interfaces/apis/PetApi.ts b/samples/client/petstore/typescript-rxjs/builds/with-interfaces/apis/PetApi.ts index a5328a8c7285..290d250b18f7 100644 --- a/samples/client/petstore/typescript-rxjs/builds/with-interfaces/apis/PetApi.ts +++ b/samples/client/petstore/typescript-rxjs/builds/with-interfaces/apis/PetApi.ts @@ -12,7 +12,7 @@ */ import { Observable } from 'rxjs'; -import { BaseAPI, HttpHeaders, HttpQuery, throwIfRequired, encodeURI, COLLECTION_FORMATS } from '../runtime'; +import { BaseAPI, HttpHeaders, HttpQuery, throwIfNullOrUndefined, encodeURI, COLLECTION_FORMATS } from '../runtime'; import { ApiResponse, Pet, @@ -63,45 +63,47 @@ export class PetApi extends BaseAPI { /** * Add a new pet to the store */ - addPet = (requestParameters: AddPetRequest): Observable => { - throwIfRequired(requestParameters, 'body', 'addPet'); + addPet = ({ body, }: AddPetRequest): Observable => { + throwIfNullOrUndefined(body, 'addPet'); const headers: HttpHeaders = { 'Content-Type': 'application/json', // oauth required - ...(this.configuration.accessToken && { - Authorization: this.configuration.accessToken && (typeof this.configuration.accessToken === 'function' + ...(this.configuration.accessToken != null + ? { Authorization: typeof this.configuration.accessToken === 'function' ? this.configuration.accessToken('petstore_auth', ['write:pets', 'read:pets']) - : this.configuration.accessToken) - }), + : this.configuration.accessToken } + : undefined + ), }; return this.request({ path: '/pet', method: 'POST', headers, - body: requestParameters.body, + body: body, }); }; /** * Deletes a pet */ - deletePet = (requestParameters: DeletePetRequest): Observable => { - throwIfRequired(requestParameters, 'petId', 'deletePet'); + deletePet = ({ petId, apiKey, }: DeletePetRequest): Observable => { + throwIfNullOrUndefined(petId, 'deletePet'); const headers: HttpHeaders = { - ...(requestParameters.apiKey && { 'api_key': String(requestParameters.apiKey) }), + ...(apiKey != null ? { 'api_key': String(apiKey) } : undefined), // oauth required - ...(this.configuration.accessToken && { - Authorization: this.configuration.accessToken && (typeof this.configuration.accessToken === 'function' + ...(this.configuration.accessToken != null + ? { Authorization: typeof this.configuration.accessToken === 'function' ? this.configuration.accessToken('petstore_auth', ['write:pets', 'read:pets']) - : this.configuration.accessToken) - }), + : this.configuration.accessToken } + : undefined + ), }; return this.request({ - path: '/pet/{petId}'.replace('{petId}', encodeURI(requestParameters.petId)), + path: '/pet/{petId}'.replace('{petId}', encodeURI(petId)), method: 'DELETE', headers, }); @@ -111,20 +113,21 @@ export class PetApi extends BaseAPI { * Multiple status values can be provided with comma separated strings * Finds Pets by status */ - findPetsByStatus = (requestParameters: FindPetsByStatusRequest): Observable> => { - throwIfRequired(requestParameters, 'status', 'findPetsByStatus'); + findPetsByStatus = ({ status, }: FindPetsByStatusRequest): Observable> => { + throwIfNullOrUndefined(status, 'findPetsByStatus'); const headers: HttpHeaders = { // oauth required - ...(this.configuration.accessToken && { - Authorization: this.configuration.accessToken && (typeof this.configuration.accessToken === 'function' + ...(this.configuration.accessToken != null + ? { Authorization: typeof this.configuration.accessToken === 'function' ? this.configuration.accessToken('petstore_auth', ['write:pets', 'read:pets']) - : this.configuration.accessToken) - }), + : this.configuration.accessToken } + : undefined + ), }; const query: HttpQuery = { - ...(requestParameters.status && { 'status': requestParameters.status.join(COLLECTION_FORMATS['csv']) }), + 'status': status.join(COLLECTION_FORMATS['csv']), }; return this.request>({ @@ -139,20 +142,21 @@ export class PetApi extends BaseAPI { * Multiple tags can be provided with comma separated strings. Use tag1, tag2, tag3 for testing. * Finds Pets by tags */ - findPetsByTags = (requestParameters: FindPetsByTagsRequest): Observable> => { - throwIfRequired(requestParameters, 'tags', 'findPetsByTags'); + findPetsByTags = ({ tags, }: FindPetsByTagsRequest): Observable> => { + throwIfNullOrUndefined(tags, 'findPetsByTags'); const headers: HttpHeaders = { // oauth required - ...(this.configuration.accessToken && { - Authorization: this.configuration.accessToken && (typeof this.configuration.accessToken === 'function' + ...(this.configuration.accessToken != null + ? { Authorization: typeof this.configuration.accessToken === 'function' ? this.configuration.accessToken('petstore_auth', ['write:pets', 'read:pets']) - : this.configuration.accessToken) - }), + : this.configuration.accessToken } + : undefined + ), }; const query: HttpQuery = { - ...(requestParameters.tags && { 'tags': requestParameters.tags.join(COLLECTION_FORMATS['csv']) }), + 'tags': tags.join(COLLECTION_FORMATS['csv']), }; return this.request>({ @@ -167,15 +171,15 @@ export class PetApi extends BaseAPI { * Returns a single pet * Find pet by ID */ - getPetById = (requestParameters: GetPetByIdRequest): Observable => { - throwIfRequired(requestParameters, 'petId', 'getPetById'); + getPetById = ({ petId, }: GetPetByIdRequest): Observable => { + throwIfNullOrUndefined(petId, 'getPetById'); const headers: HttpHeaders = { ...(this.configuration.apiKey && { 'api_key': this.configuration.apiKey('api_key') }), // api_key authentication }; return this.request({ - path: '/pet/{petId}'.replace('{petId}', encodeURI(requestParameters.petId)), + path: '/pet/{petId}'.replace('{petId}', encodeURI(petId)), method: 'GET', headers, }); @@ -184,53 +188,50 @@ export class PetApi extends BaseAPI { /** * Update an existing pet */ - updatePet = (requestParameters: UpdatePetRequest): Observable => { - throwIfRequired(requestParameters, 'body', 'updatePet'); + updatePet = ({ body, }: UpdatePetRequest): Observable => { + throwIfNullOrUndefined(body, 'updatePet'); const headers: HttpHeaders = { 'Content-Type': 'application/json', // oauth required - ...(this.configuration.accessToken && { - Authorization: this.configuration.accessToken && (typeof this.configuration.accessToken === 'function' + ...(this.configuration.accessToken != null + ? { Authorization: typeof this.configuration.accessToken === 'function' ? this.configuration.accessToken('petstore_auth', ['write:pets', 'read:pets']) - : this.configuration.accessToken) - }), + : this.configuration.accessToken } + : undefined + ), }; return this.request({ path: '/pet', method: 'PUT', headers, - body: requestParameters.body, + body: body, }); }; /** * Updates a pet in the store with form data */ - updatePetWithForm = (requestParameters: UpdatePetWithFormRequest): Observable => { - throwIfRequired(requestParameters, 'petId', 'updatePetWithForm'); + updatePetWithForm = ({ petId, name, status, }: UpdatePetWithFormRequest): Observable => { + throwIfNullOrUndefined(petId, 'updatePetWithForm'); const headers: HttpHeaders = { // oauth required - ...(this.configuration.accessToken && { - Authorization: this.configuration.accessToken && (typeof this.configuration.accessToken === 'function' + ...(this.configuration.accessToken != null + ? { Authorization: typeof this.configuration.accessToken === 'function' ? this.configuration.accessToken('petstore_auth', ['write:pets', 'read:pets']) - : this.configuration.accessToken) - }), + : this.configuration.accessToken } + : undefined + ), }; const formData = new FormData(); - if (requestParameters.name !== undefined) { - formData.append('name', requestParameters.name as any); - } - - if (requestParameters.status !== undefined) { - formData.append('status', requestParameters.status as any); - } + if (name !== undefined) { formData.append('name', name as any); } + if (status !== undefined) { formData.append('status', status as any); } return this.request({ - path: '/pet/{petId}'.replace('{petId}', encodeURI(requestParameters.petId)), + path: '/pet/{petId}'.replace('{petId}', encodeURI(petId)), method: 'POST', headers, body: formData, @@ -240,29 +241,25 @@ export class PetApi extends BaseAPI { /** * uploads an image */ - uploadFile = (requestParameters: UploadFileRequest): Observable => { - throwIfRequired(requestParameters, 'petId', 'uploadFile'); + uploadFile = ({ petId, additionalMetadata, file, }: UploadFileRequest): Observable => { + throwIfNullOrUndefined(petId, 'uploadFile'); const headers: HttpHeaders = { // oauth required - ...(this.configuration.accessToken && { - Authorization: this.configuration.accessToken && (typeof this.configuration.accessToken === 'function' + ...(this.configuration.accessToken != null + ? { Authorization: typeof this.configuration.accessToken === 'function' ? this.configuration.accessToken('petstore_auth', ['write:pets', 'read:pets']) - : this.configuration.accessToken) - }), + : this.configuration.accessToken } + : undefined + ), }; const formData = new FormData(); - if (requestParameters.additionalMetadata !== undefined) { - formData.append('additionalMetadata', requestParameters.additionalMetadata as any); - } - - if (requestParameters.file !== undefined) { - formData.append('file', requestParameters.file as any); - } + if (additionalMetadata !== undefined) { formData.append('additionalMetadata', additionalMetadata as any); } + if (file !== undefined) { formData.append('file', file as any); } return this.request({ - path: '/pet/{petId}/uploadImage'.replace('{petId}', encodeURI(requestParameters.petId)), + path: '/pet/{petId}/uploadImage'.replace('{petId}', encodeURI(petId)), method: 'POST', headers, body: formData, diff --git a/samples/client/petstore/typescript-rxjs/builds/with-interfaces/apis/StoreApi.ts b/samples/client/petstore/typescript-rxjs/builds/with-interfaces/apis/StoreApi.ts index 623b48bdede8..9fbda2c243de 100644 --- a/samples/client/petstore/typescript-rxjs/builds/with-interfaces/apis/StoreApi.ts +++ b/samples/client/petstore/typescript-rxjs/builds/with-interfaces/apis/StoreApi.ts @@ -12,7 +12,7 @@ */ import { Observable } from 'rxjs'; -import { BaseAPI, HttpHeaders, throwIfRequired, encodeURI } from '../runtime'; +import { BaseAPI, HttpHeaders, throwIfNullOrUndefined, encodeURI } from '../runtime'; import { Order, } from '../models'; @@ -38,11 +38,11 @@ export class StoreApi extends BaseAPI { * For valid response try integer IDs with value < 1000. Anything above 1000 or nonintegers will generate API errors * Delete purchase order by ID */ - deleteOrder = (requestParameters: DeleteOrderRequest): Observable => { - throwIfRequired(requestParameters, 'orderId', 'deleteOrder'); + deleteOrder = ({ orderId, }: DeleteOrderRequest): Observable => { + throwIfNullOrUndefined(orderId, 'deleteOrder'); return this.request({ - path: '/store/order/{orderId}'.replace('{orderId}', encodeURI(requestParameters.orderId)), + path: '/store/order/{orderId}'.replace('{orderId}', encodeURI(orderId)), method: 'DELETE', }); }; @@ -67,11 +67,11 @@ export class StoreApi extends BaseAPI { * For valid response try integer IDs with value <= 5 or > 10. Other values will generated exceptions * Find purchase order by ID */ - getOrderById = (requestParameters: GetOrderByIdRequest): Observable => { - throwIfRequired(requestParameters, 'orderId', 'getOrderById'); + getOrderById = ({ orderId, }: GetOrderByIdRequest): Observable => { + throwIfNullOrUndefined(orderId, 'getOrderById'); return this.request({ - path: '/store/order/{orderId}'.replace('{orderId}', encodeURI(requestParameters.orderId)), + path: '/store/order/{orderId}'.replace('{orderId}', encodeURI(orderId)), method: 'GET', }); }; @@ -79,8 +79,8 @@ export class StoreApi extends BaseAPI { /** * Place an order for a pet */ - placeOrder = (requestParameters: PlaceOrderRequest): Observable => { - throwIfRequired(requestParameters, 'body', 'placeOrder'); + placeOrder = ({ body, }: PlaceOrderRequest): Observable => { + throwIfNullOrUndefined(body, 'placeOrder'); const headers: HttpHeaders = { 'Content-Type': 'application/json', @@ -90,7 +90,7 @@ export class StoreApi extends BaseAPI { path: '/store/order', method: 'POST', headers, - body: requestParameters.body, + body: body, }); }; diff --git a/samples/client/petstore/typescript-rxjs/builds/with-interfaces/apis/UserApi.ts b/samples/client/petstore/typescript-rxjs/builds/with-interfaces/apis/UserApi.ts index 2194fdfe9f68..9d9a988d95ec 100644 --- a/samples/client/petstore/typescript-rxjs/builds/with-interfaces/apis/UserApi.ts +++ b/samples/client/petstore/typescript-rxjs/builds/with-interfaces/apis/UserApi.ts @@ -12,7 +12,7 @@ */ import { Observable } from 'rxjs'; -import { BaseAPI, HttpHeaders, HttpQuery, throwIfRequired, encodeURI } from '../runtime'; +import { BaseAPI, HttpHeaders, HttpQuery, throwIfNullOrUndefined, encodeURI } from '../runtime'; import { User, } from '../models'; @@ -56,8 +56,8 @@ export class UserApi extends BaseAPI { * This can only be done by the logged in user. * Create user */ - createUser = (requestParameters: CreateUserRequest): Observable => { - throwIfRequired(requestParameters, 'body', 'createUser'); + createUser = ({ body, }: CreateUserRequest): Observable => { + throwIfNullOrUndefined(body, 'createUser'); const headers: HttpHeaders = { 'Content-Type': 'application/json', @@ -67,15 +67,15 @@ export class UserApi extends BaseAPI { path: '/user', method: 'POST', headers, - body: requestParameters.body, + body: body, }); }; /** * Creates list of users with given input array */ - createUsersWithArrayInput = (requestParameters: CreateUsersWithArrayInputRequest): Observable => { - throwIfRequired(requestParameters, 'body', 'createUsersWithArrayInput'); + createUsersWithArrayInput = ({ body, }: CreateUsersWithArrayInputRequest): Observable => { + throwIfNullOrUndefined(body, 'createUsersWithArrayInput'); const headers: HttpHeaders = { 'Content-Type': 'application/json', @@ -85,15 +85,15 @@ export class UserApi extends BaseAPI { path: '/user/createWithArray', method: 'POST', headers, - body: requestParameters.body, + body: body, }); }; /** * Creates list of users with given input array */ - createUsersWithListInput = (requestParameters: CreateUsersWithListInputRequest): Observable => { - throwIfRequired(requestParameters, 'body', 'createUsersWithListInput'); + createUsersWithListInput = ({ body, }: CreateUsersWithListInputRequest): Observable => { + throwIfNullOrUndefined(body, 'createUsersWithListInput'); const headers: HttpHeaders = { 'Content-Type': 'application/json', @@ -103,7 +103,7 @@ export class UserApi extends BaseAPI { path: '/user/createWithList', method: 'POST', headers, - body: requestParameters.body, + body: body, }); }; @@ -111,11 +111,11 @@ export class UserApi extends BaseAPI { * This can only be done by the logged in user. * Delete user */ - deleteUser = (requestParameters: DeleteUserRequest): Observable => { - throwIfRequired(requestParameters, 'username', 'deleteUser'); + deleteUser = ({ username, }: DeleteUserRequest): Observable => { + throwIfNullOrUndefined(username, 'deleteUser'); return this.request({ - path: '/user/{username}'.replace('{username}', encodeURI(requestParameters.username)), + path: '/user/{username}'.replace('{username}', encodeURI(username)), method: 'DELETE', }); }; @@ -123,11 +123,11 @@ export class UserApi extends BaseAPI { /** * Get user by user name */ - getUserByName = (requestParameters: GetUserByNameRequest): Observable => { - throwIfRequired(requestParameters, 'username', 'getUserByName'); + getUserByName = ({ username, }: GetUserByNameRequest): Observable => { + throwIfNullOrUndefined(username, 'getUserByName'); return this.request({ - path: '/user/{username}'.replace('{username}', encodeURI(requestParameters.username)), + path: '/user/{username}'.replace('{username}', encodeURI(username)), method: 'GET', }); }; @@ -135,13 +135,13 @@ export class UserApi extends BaseAPI { /** * Logs user into the system */ - loginUser = (requestParameters: LoginUserRequest): Observable => { - throwIfRequired(requestParameters, 'username', 'loginUser'); - throwIfRequired(requestParameters, 'password', 'loginUser'); + loginUser = ({ username, password, }: LoginUserRequest): Observable => { + throwIfNullOrUndefined(username, 'loginUser'); + throwIfNullOrUndefined(password, 'loginUser'); const query: HttpQuery = { - ...(requestParameters.username && { 'username': requestParameters.username }), - ...(requestParameters.password && { 'password': requestParameters.password }), + 'username': username, + 'password': password, }; return this.request({ @@ -165,19 +165,19 @@ export class UserApi extends BaseAPI { * This can only be done by the logged in user. * Updated user */ - updateUser = (requestParameters: UpdateUserRequest): Observable => { - throwIfRequired(requestParameters, 'username', 'updateUser'); - throwIfRequired(requestParameters, 'body', 'updateUser'); + updateUser = ({ username, body, }: UpdateUserRequest): Observable => { + throwIfNullOrUndefined(username, 'updateUser'); + throwIfNullOrUndefined(body, 'updateUser'); const headers: HttpHeaders = { 'Content-Type': 'application/json', }; return this.request({ - path: '/user/{username}'.replace('{username}', encodeURI(requestParameters.username)), + path: '/user/{username}'.replace('{username}', encodeURI(username)), method: 'PUT', headers, - body: requestParameters.body, + body: body, }); }; diff --git a/samples/client/petstore/typescript-rxjs/builds/with-interfaces/runtime.ts b/samples/client/petstore/typescript-rxjs/builds/with-interfaces/runtime.ts index e71a012b04bd..60ce06be6073 100644 --- a/samples/client/petstore/typescript-rxjs/builds/with-interfaces/runtime.ts +++ b/samples/client/petstore/typescript-rxjs/builds/with-interfaces/runtime.ts @@ -136,7 +136,10 @@ export class BaseAPI { Object.assign(Object.create(Object.getPrototypeOf(this)), this); } -// export for not being a breaking change +/** + * @deprecated + * export for not being a breaking change + */ export class RequiredError extends Error { name: 'RequiredError' = 'RequiredError'; } @@ -178,12 +181,21 @@ const queryString = (params: HttpQuery): string => Object.keys(params) // alias fallback for not being a breaking change export const querystring = queryString; +/** + * @deprecated + */ export const throwIfRequired = (params: {[key: string]: any}, key: string, nickname: string) => { - if (!params || params[key] === null || params[key] === undefined) { + if (!params || params[key] == null) { throw new RequiredError(`Required parameter ${key} was null or undefined when calling ${nickname}.`); } }; +export const throwIfNullOrUndefined = (value: any, nickname?: string) => { + if (value == null) { + throw new Error(`Parameter "${value}" was null or undefined when calling "${nickname}".`); + } +}; + // alias for easier importing export interface RequestArgs extends AjaxRequest {} export interface ResponseArgs extends AjaxResponse {} diff --git a/samples/client/petstore/typescript-rxjs/builds/with-npm-version/apis/PetApi.ts b/samples/client/petstore/typescript-rxjs/builds/with-npm-version/apis/PetApi.ts index a5328a8c7285..290d250b18f7 100644 --- a/samples/client/petstore/typescript-rxjs/builds/with-npm-version/apis/PetApi.ts +++ b/samples/client/petstore/typescript-rxjs/builds/with-npm-version/apis/PetApi.ts @@ -12,7 +12,7 @@ */ import { Observable } from 'rxjs'; -import { BaseAPI, HttpHeaders, HttpQuery, throwIfRequired, encodeURI, COLLECTION_FORMATS } from '../runtime'; +import { BaseAPI, HttpHeaders, HttpQuery, throwIfNullOrUndefined, encodeURI, COLLECTION_FORMATS } from '../runtime'; import { ApiResponse, Pet, @@ -63,45 +63,47 @@ export class PetApi extends BaseAPI { /** * Add a new pet to the store */ - addPet = (requestParameters: AddPetRequest): Observable => { - throwIfRequired(requestParameters, 'body', 'addPet'); + addPet = ({ body, }: AddPetRequest): Observable => { + throwIfNullOrUndefined(body, 'addPet'); const headers: HttpHeaders = { 'Content-Type': 'application/json', // oauth required - ...(this.configuration.accessToken && { - Authorization: this.configuration.accessToken && (typeof this.configuration.accessToken === 'function' + ...(this.configuration.accessToken != null + ? { Authorization: typeof this.configuration.accessToken === 'function' ? this.configuration.accessToken('petstore_auth', ['write:pets', 'read:pets']) - : this.configuration.accessToken) - }), + : this.configuration.accessToken } + : undefined + ), }; return this.request({ path: '/pet', method: 'POST', headers, - body: requestParameters.body, + body: body, }); }; /** * Deletes a pet */ - deletePet = (requestParameters: DeletePetRequest): Observable => { - throwIfRequired(requestParameters, 'petId', 'deletePet'); + deletePet = ({ petId, apiKey, }: DeletePetRequest): Observable => { + throwIfNullOrUndefined(petId, 'deletePet'); const headers: HttpHeaders = { - ...(requestParameters.apiKey && { 'api_key': String(requestParameters.apiKey) }), + ...(apiKey != null ? { 'api_key': String(apiKey) } : undefined), // oauth required - ...(this.configuration.accessToken && { - Authorization: this.configuration.accessToken && (typeof this.configuration.accessToken === 'function' + ...(this.configuration.accessToken != null + ? { Authorization: typeof this.configuration.accessToken === 'function' ? this.configuration.accessToken('petstore_auth', ['write:pets', 'read:pets']) - : this.configuration.accessToken) - }), + : this.configuration.accessToken } + : undefined + ), }; return this.request({ - path: '/pet/{petId}'.replace('{petId}', encodeURI(requestParameters.petId)), + path: '/pet/{petId}'.replace('{petId}', encodeURI(petId)), method: 'DELETE', headers, }); @@ -111,20 +113,21 @@ export class PetApi extends BaseAPI { * Multiple status values can be provided with comma separated strings * Finds Pets by status */ - findPetsByStatus = (requestParameters: FindPetsByStatusRequest): Observable> => { - throwIfRequired(requestParameters, 'status', 'findPetsByStatus'); + findPetsByStatus = ({ status, }: FindPetsByStatusRequest): Observable> => { + throwIfNullOrUndefined(status, 'findPetsByStatus'); const headers: HttpHeaders = { // oauth required - ...(this.configuration.accessToken && { - Authorization: this.configuration.accessToken && (typeof this.configuration.accessToken === 'function' + ...(this.configuration.accessToken != null + ? { Authorization: typeof this.configuration.accessToken === 'function' ? this.configuration.accessToken('petstore_auth', ['write:pets', 'read:pets']) - : this.configuration.accessToken) - }), + : this.configuration.accessToken } + : undefined + ), }; const query: HttpQuery = { - ...(requestParameters.status && { 'status': requestParameters.status.join(COLLECTION_FORMATS['csv']) }), + 'status': status.join(COLLECTION_FORMATS['csv']), }; return this.request>({ @@ -139,20 +142,21 @@ export class PetApi extends BaseAPI { * Multiple tags can be provided with comma separated strings. Use tag1, tag2, tag3 for testing. * Finds Pets by tags */ - findPetsByTags = (requestParameters: FindPetsByTagsRequest): Observable> => { - throwIfRequired(requestParameters, 'tags', 'findPetsByTags'); + findPetsByTags = ({ tags, }: FindPetsByTagsRequest): Observable> => { + throwIfNullOrUndefined(tags, 'findPetsByTags'); const headers: HttpHeaders = { // oauth required - ...(this.configuration.accessToken && { - Authorization: this.configuration.accessToken && (typeof this.configuration.accessToken === 'function' + ...(this.configuration.accessToken != null + ? { Authorization: typeof this.configuration.accessToken === 'function' ? this.configuration.accessToken('petstore_auth', ['write:pets', 'read:pets']) - : this.configuration.accessToken) - }), + : this.configuration.accessToken } + : undefined + ), }; const query: HttpQuery = { - ...(requestParameters.tags && { 'tags': requestParameters.tags.join(COLLECTION_FORMATS['csv']) }), + 'tags': tags.join(COLLECTION_FORMATS['csv']), }; return this.request>({ @@ -167,15 +171,15 @@ export class PetApi extends BaseAPI { * Returns a single pet * Find pet by ID */ - getPetById = (requestParameters: GetPetByIdRequest): Observable => { - throwIfRequired(requestParameters, 'petId', 'getPetById'); + getPetById = ({ petId, }: GetPetByIdRequest): Observable => { + throwIfNullOrUndefined(petId, 'getPetById'); const headers: HttpHeaders = { ...(this.configuration.apiKey && { 'api_key': this.configuration.apiKey('api_key') }), // api_key authentication }; return this.request({ - path: '/pet/{petId}'.replace('{petId}', encodeURI(requestParameters.petId)), + path: '/pet/{petId}'.replace('{petId}', encodeURI(petId)), method: 'GET', headers, }); @@ -184,53 +188,50 @@ export class PetApi extends BaseAPI { /** * Update an existing pet */ - updatePet = (requestParameters: UpdatePetRequest): Observable => { - throwIfRequired(requestParameters, 'body', 'updatePet'); + updatePet = ({ body, }: UpdatePetRequest): Observable => { + throwIfNullOrUndefined(body, 'updatePet'); const headers: HttpHeaders = { 'Content-Type': 'application/json', // oauth required - ...(this.configuration.accessToken && { - Authorization: this.configuration.accessToken && (typeof this.configuration.accessToken === 'function' + ...(this.configuration.accessToken != null + ? { Authorization: typeof this.configuration.accessToken === 'function' ? this.configuration.accessToken('petstore_auth', ['write:pets', 'read:pets']) - : this.configuration.accessToken) - }), + : this.configuration.accessToken } + : undefined + ), }; return this.request({ path: '/pet', method: 'PUT', headers, - body: requestParameters.body, + body: body, }); }; /** * Updates a pet in the store with form data */ - updatePetWithForm = (requestParameters: UpdatePetWithFormRequest): Observable => { - throwIfRequired(requestParameters, 'petId', 'updatePetWithForm'); + updatePetWithForm = ({ petId, name, status, }: UpdatePetWithFormRequest): Observable => { + throwIfNullOrUndefined(petId, 'updatePetWithForm'); const headers: HttpHeaders = { // oauth required - ...(this.configuration.accessToken && { - Authorization: this.configuration.accessToken && (typeof this.configuration.accessToken === 'function' + ...(this.configuration.accessToken != null + ? { Authorization: typeof this.configuration.accessToken === 'function' ? this.configuration.accessToken('petstore_auth', ['write:pets', 'read:pets']) - : this.configuration.accessToken) - }), + : this.configuration.accessToken } + : undefined + ), }; const formData = new FormData(); - if (requestParameters.name !== undefined) { - formData.append('name', requestParameters.name as any); - } - - if (requestParameters.status !== undefined) { - formData.append('status', requestParameters.status as any); - } + if (name !== undefined) { formData.append('name', name as any); } + if (status !== undefined) { formData.append('status', status as any); } return this.request({ - path: '/pet/{petId}'.replace('{petId}', encodeURI(requestParameters.petId)), + path: '/pet/{petId}'.replace('{petId}', encodeURI(petId)), method: 'POST', headers, body: formData, @@ -240,29 +241,25 @@ export class PetApi extends BaseAPI { /** * uploads an image */ - uploadFile = (requestParameters: UploadFileRequest): Observable => { - throwIfRequired(requestParameters, 'petId', 'uploadFile'); + uploadFile = ({ petId, additionalMetadata, file, }: UploadFileRequest): Observable => { + throwIfNullOrUndefined(petId, 'uploadFile'); const headers: HttpHeaders = { // oauth required - ...(this.configuration.accessToken && { - Authorization: this.configuration.accessToken && (typeof this.configuration.accessToken === 'function' + ...(this.configuration.accessToken != null + ? { Authorization: typeof this.configuration.accessToken === 'function' ? this.configuration.accessToken('petstore_auth', ['write:pets', 'read:pets']) - : this.configuration.accessToken) - }), + : this.configuration.accessToken } + : undefined + ), }; const formData = new FormData(); - if (requestParameters.additionalMetadata !== undefined) { - formData.append('additionalMetadata', requestParameters.additionalMetadata as any); - } - - if (requestParameters.file !== undefined) { - formData.append('file', requestParameters.file as any); - } + if (additionalMetadata !== undefined) { formData.append('additionalMetadata', additionalMetadata as any); } + if (file !== undefined) { formData.append('file', file as any); } return this.request({ - path: '/pet/{petId}/uploadImage'.replace('{petId}', encodeURI(requestParameters.petId)), + path: '/pet/{petId}/uploadImage'.replace('{petId}', encodeURI(petId)), method: 'POST', headers, body: formData, diff --git a/samples/client/petstore/typescript-rxjs/builds/with-npm-version/apis/StoreApi.ts b/samples/client/petstore/typescript-rxjs/builds/with-npm-version/apis/StoreApi.ts index 623b48bdede8..9fbda2c243de 100644 --- a/samples/client/petstore/typescript-rxjs/builds/with-npm-version/apis/StoreApi.ts +++ b/samples/client/petstore/typescript-rxjs/builds/with-npm-version/apis/StoreApi.ts @@ -12,7 +12,7 @@ */ import { Observable } from 'rxjs'; -import { BaseAPI, HttpHeaders, throwIfRequired, encodeURI } from '../runtime'; +import { BaseAPI, HttpHeaders, throwIfNullOrUndefined, encodeURI } from '../runtime'; import { Order, } from '../models'; @@ -38,11 +38,11 @@ export class StoreApi extends BaseAPI { * For valid response try integer IDs with value < 1000. Anything above 1000 or nonintegers will generate API errors * Delete purchase order by ID */ - deleteOrder = (requestParameters: DeleteOrderRequest): Observable => { - throwIfRequired(requestParameters, 'orderId', 'deleteOrder'); + deleteOrder = ({ orderId, }: DeleteOrderRequest): Observable => { + throwIfNullOrUndefined(orderId, 'deleteOrder'); return this.request({ - path: '/store/order/{orderId}'.replace('{orderId}', encodeURI(requestParameters.orderId)), + path: '/store/order/{orderId}'.replace('{orderId}', encodeURI(orderId)), method: 'DELETE', }); }; @@ -67,11 +67,11 @@ export class StoreApi extends BaseAPI { * For valid response try integer IDs with value <= 5 or > 10. Other values will generated exceptions * Find purchase order by ID */ - getOrderById = (requestParameters: GetOrderByIdRequest): Observable => { - throwIfRequired(requestParameters, 'orderId', 'getOrderById'); + getOrderById = ({ orderId, }: GetOrderByIdRequest): Observable => { + throwIfNullOrUndefined(orderId, 'getOrderById'); return this.request({ - path: '/store/order/{orderId}'.replace('{orderId}', encodeURI(requestParameters.orderId)), + path: '/store/order/{orderId}'.replace('{orderId}', encodeURI(orderId)), method: 'GET', }); }; @@ -79,8 +79,8 @@ export class StoreApi extends BaseAPI { /** * Place an order for a pet */ - placeOrder = (requestParameters: PlaceOrderRequest): Observable => { - throwIfRequired(requestParameters, 'body', 'placeOrder'); + placeOrder = ({ body, }: PlaceOrderRequest): Observable => { + throwIfNullOrUndefined(body, 'placeOrder'); const headers: HttpHeaders = { 'Content-Type': 'application/json', @@ -90,7 +90,7 @@ export class StoreApi extends BaseAPI { path: '/store/order', method: 'POST', headers, - body: requestParameters.body, + body: body, }); }; diff --git a/samples/client/petstore/typescript-rxjs/builds/with-npm-version/apis/UserApi.ts b/samples/client/petstore/typescript-rxjs/builds/with-npm-version/apis/UserApi.ts index 2194fdfe9f68..9d9a988d95ec 100644 --- a/samples/client/petstore/typescript-rxjs/builds/with-npm-version/apis/UserApi.ts +++ b/samples/client/petstore/typescript-rxjs/builds/with-npm-version/apis/UserApi.ts @@ -12,7 +12,7 @@ */ import { Observable } from 'rxjs'; -import { BaseAPI, HttpHeaders, HttpQuery, throwIfRequired, encodeURI } from '../runtime'; +import { BaseAPI, HttpHeaders, HttpQuery, throwIfNullOrUndefined, encodeURI } from '../runtime'; import { User, } from '../models'; @@ -56,8 +56,8 @@ export class UserApi extends BaseAPI { * This can only be done by the logged in user. * Create user */ - createUser = (requestParameters: CreateUserRequest): Observable => { - throwIfRequired(requestParameters, 'body', 'createUser'); + createUser = ({ body, }: CreateUserRequest): Observable => { + throwIfNullOrUndefined(body, 'createUser'); const headers: HttpHeaders = { 'Content-Type': 'application/json', @@ -67,15 +67,15 @@ export class UserApi extends BaseAPI { path: '/user', method: 'POST', headers, - body: requestParameters.body, + body: body, }); }; /** * Creates list of users with given input array */ - createUsersWithArrayInput = (requestParameters: CreateUsersWithArrayInputRequest): Observable => { - throwIfRequired(requestParameters, 'body', 'createUsersWithArrayInput'); + createUsersWithArrayInput = ({ body, }: CreateUsersWithArrayInputRequest): Observable => { + throwIfNullOrUndefined(body, 'createUsersWithArrayInput'); const headers: HttpHeaders = { 'Content-Type': 'application/json', @@ -85,15 +85,15 @@ export class UserApi extends BaseAPI { path: '/user/createWithArray', method: 'POST', headers, - body: requestParameters.body, + body: body, }); }; /** * Creates list of users with given input array */ - createUsersWithListInput = (requestParameters: CreateUsersWithListInputRequest): Observable => { - throwIfRequired(requestParameters, 'body', 'createUsersWithListInput'); + createUsersWithListInput = ({ body, }: CreateUsersWithListInputRequest): Observable => { + throwIfNullOrUndefined(body, 'createUsersWithListInput'); const headers: HttpHeaders = { 'Content-Type': 'application/json', @@ -103,7 +103,7 @@ export class UserApi extends BaseAPI { path: '/user/createWithList', method: 'POST', headers, - body: requestParameters.body, + body: body, }); }; @@ -111,11 +111,11 @@ export class UserApi extends BaseAPI { * This can only be done by the logged in user. * Delete user */ - deleteUser = (requestParameters: DeleteUserRequest): Observable => { - throwIfRequired(requestParameters, 'username', 'deleteUser'); + deleteUser = ({ username, }: DeleteUserRequest): Observable => { + throwIfNullOrUndefined(username, 'deleteUser'); return this.request({ - path: '/user/{username}'.replace('{username}', encodeURI(requestParameters.username)), + path: '/user/{username}'.replace('{username}', encodeURI(username)), method: 'DELETE', }); }; @@ -123,11 +123,11 @@ export class UserApi extends BaseAPI { /** * Get user by user name */ - getUserByName = (requestParameters: GetUserByNameRequest): Observable => { - throwIfRequired(requestParameters, 'username', 'getUserByName'); + getUserByName = ({ username, }: GetUserByNameRequest): Observable => { + throwIfNullOrUndefined(username, 'getUserByName'); return this.request({ - path: '/user/{username}'.replace('{username}', encodeURI(requestParameters.username)), + path: '/user/{username}'.replace('{username}', encodeURI(username)), method: 'GET', }); }; @@ -135,13 +135,13 @@ export class UserApi extends BaseAPI { /** * Logs user into the system */ - loginUser = (requestParameters: LoginUserRequest): Observable => { - throwIfRequired(requestParameters, 'username', 'loginUser'); - throwIfRequired(requestParameters, 'password', 'loginUser'); + loginUser = ({ username, password, }: LoginUserRequest): Observable => { + throwIfNullOrUndefined(username, 'loginUser'); + throwIfNullOrUndefined(password, 'loginUser'); const query: HttpQuery = { - ...(requestParameters.username && { 'username': requestParameters.username }), - ...(requestParameters.password && { 'password': requestParameters.password }), + 'username': username, + 'password': password, }; return this.request({ @@ -165,19 +165,19 @@ export class UserApi extends BaseAPI { * This can only be done by the logged in user. * Updated user */ - updateUser = (requestParameters: UpdateUserRequest): Observable => { - throwIfRequired(requestParameters, 'username', 'updateUser'); - throwIfRequired(requestParameters, 'body', 'updateUser'); + updateUser = ({ username, body, }: UpdateUserRequest): Observable => { + throwIfNullOrUndefined(username, 'updateUser'); + throwIfNullOrUndefined(body, 'updateUser'); const headers: HttpHeaders = { 'Content-Type': 'application/json', }; return this.request({ - path: '/user/{username}'.replace('{username}', encodeURI(requestParameters.username)), + path: '/user/{username}'.replace('{username}', encodeURI(username)), method: 'PUT', headers, - body: requestParameters.body, + body: body, }); }; diff --git a/samples/client/petstore/typescript-rxjs/builds/with-npm-version/runtime.ts b/samples/client/petstore/typescript-rxjs/builds/with-npm-version/runtime.ts index e71a012b04bd..60ce06be6073 100644 --- a/samples/client/petstore/typescript-rxjs/builds/with-npm-version/runtime.ts +++ b/samples/client/petstore/typescript-rxjs/builds/with-npm-version/runtime.ts @@ -136,7 +136,10 @@ export class BaseAPI { Object.assign(Object.create(Object.getPrototypeOf(this)), this); } -// export for not being a breaking change +/** + * @deprecated + * export for not being a breaking change + */ export class RequiredError extends Error { name: 'RequiredError' = 'RequiredError'; } @@ -178,12 +181,21 @@ const queryString = (params: HttpQuery): string => Object.keys(params) // alias fallback for not being a breaking change export const querystring = queryString; +/** + * @deprecated + */ export const throwIfRequired = (params: {[key: string]: any}, key: string, nickname: string) => { - if (!params || params[key] === null || params[key] === undefined) { + if (!params || params[key] == null) { throw new RequiredError(`Required parameter ${key} was null or undefined when calling ${nickname}.`); } }; +export const throwIfNullOrUndefined = (value: any, nickname?: string) => { + if (value == null) { + throw new Error(`Parameter "${value}" was null or undefined when calling "${nickname}".`); + } +}; + // alias for easier importing export interface RequestArgs extends AjaxRequest {} export interface ResponseArgs extends AjaxResponse {} From 20bada001a09521edfc73e77bce55d578fd7c682 Mon Sep 17 00:00:00 2001 From: Bernd Hacker Date: Wed, 23 Oct 2019 19:28:00 +0200 Subject: [PATCH 05/18] feat(typescript-rxjs): add hasRequiredQueryParams flag for improved query object generation --- .../languages/TypeScriptRxjsClientCodegen.java | 17 +++++++++-------- .../resources/typescript-rxjs/apis.mustache | 12 ++++++------ 2 files changed, 15 insertions(+), 14 deletions(-) diff --git a/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/TypeScriptRxjsClientCodegen.java b/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/TypeScriptRxjsClientCodegen.java index 93a25c21f4c5..8aabd3bf8fde 100644 --- a/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/TypeScriptRxjsClientCodegen.java +++ b/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/TypeScriptRxjsClientCodegen.java @@ -255,7 +255,7 @@ private void addConditionalImportInformation(Map operations) { Map _operations = (Map) operations.get("operations"); List operationList = (List) _operations.get("operation"); - boolean hasRequiredParameters = false; + boolean hasRequiredParams = false; boolean hasListContainers = false; boolean hasHttpHeaders = false; boolean hasQueryParams = false; @@ -263,7 +263,7 @@ private void addConditionalImportInformation(Map operations) { for (ExtendedCodegenOperation op : operationList) { if (op.getHasRequiredParams()) { - hasRequiredParameters = true; + hasRequiredParams = true; } for (CodegenParameter param : op.headerParams) { @@ -275,7 +275,10 @@ private void addConditionalImportInformation(Map operations) { for (CodegenParameter param : op.queryParams) { if (param.isListContainer && !param.isCollectionFormatMulti) { hasListContainers = true; - break; + } + + if (param.required) { + op.hasRequiredQueryParams = true; } } for (CodegenParameter param : op.formParams) { @@ -294,13 +297,9 @@ private void addConditionalImportInformation(Map operations) { if (op.getHasPathParams()) { hasPathParams = true; } - - if(hasRequiredParameters && hasListContainers && hasHttpHeaders && hasQueryParams && hasPathParams){ - break; - } } - operations.put("hasRequiredParameters", hasRequiredParameters); + operations.put("hasRequiredParams", hasRequiredParams); operations.put("hasListContainers", hasListContainers); operations.put("hasHttpHeaders", hasHttpHeaders); operations.put("hasQueryParams", hasQueryParams); @@ -330,6 +329,7 @@ private void addExtraReservedWords() { class ExtendedCodegenOperation extends CodegenOperation { public boolean hasHttpHeaders; + public boolean hasRequiredQueryParams; public ExtendedCodegenOperation(CodegenOperation o) { super(); @@ -403,6 +403,7 @@ public ExtendedCodegenOperation(CodegenOperation o) { // new fields this.hasHttpHeaders = o.getHasHeaderParams() || o.getHasBodyParam() || o.hasAuthMethods; + this.hasRequiredQueryParams = false; // will be updated within addConditionalImportInformation } } } diff --git a/modules/openapi-generator/src/main/resources/typescript-rxjs/apis.mustache b/modules/openapi-generator/src/main/resources/typescript-rxjs/apis.mustache index 6be5b47d2ffc..f61032d414ed 100644 --- a/modules/openapi-generator/src/main/resources/typescript-rxjs/apis.mustache +++ b/modules/openapi-generator/src/main/resources/typescript-rxjs/apis.mustache @@ -1,7 +1,7 @@ // tslint:disable {{>licenseInfo}} import { Observable } from 'rxjs'; -import { BaseAPI{{#hasHttpHeaders}}, HttpHeaders{{/hasHttpHeaders}}{{#hasQueryParams}}, HttpQuery{{/hasQueryParams}}{{#hasRequiredParameters}}, throwIfNullOrUndefined{{/hasRequiredParameters}}{{#hasPathParams}}, encodeURI{{/hasPathParams}}{{#hasListContainers}}, COLLECTION_FORMATS{{/hasListContainers}} } from '../runtime'; +import { BaseAPI{{#hasHttpHeaders}}, HttpHeaders{{/hasHttpHeaders}}{{#hasQueryParams}}, HttpQuery{{/hasQueryParams}}{{#hasRequiredParams}}, throwIfNullOrUndefined{{/hasRequiredParams}}{{#hasPathParams}}, encodeURI{{/hasPathParams}}{{#hasListContainers}}, COLLECTION_FORMATS{{/hasListContainers}} } from '../runtime'; {{#imports.0}} import { {{#imports}} @@ -87,12 +87,12 @@ export class {{classname}} extends BaseAPI { {{/hasHttpHeaders}} {{#hasQueryParams}} - {{^hasRequiredParameters}} + {{^hasRequiredQueryParams}} const query: HttpQuery = {}; - {{/hasRequiredParameters}} - {{#hasRequiredParameters}} - const query: HttpQuery = { + {{/hasRequiredQueryParams}} + {{#hasRequiredQueryParams}} + const query: HttpQuery = { // required parameters are used directly since they are already checked by throwIfNullOrUndefined {{#queryParams}} {{#required}} {{#isListContainer}} @@ -120,7 +120,7 @@ export class {{classname}} extends BaseAPI { {{/queryParams}} }; - {{/hasRequiredParameters}} + {{/hasRequiredQueryParams}} {{#queryParams}} {{^required}} {{#isListContainer}} From 63cdaf58548219c797f29f35dcc84dea659ed8a0 Mon Sep 17 00:00:00 2001 From: Bernd Hacker Date: Wed, 23 Oct 2019 19:58:19 +0200 Subject: [PATCH 06/18] feat(typescript-rxjs): remove trailing comma in param destructuring, improve formatting via hasOptionalQueryParams flag --- .../codegen/languages/TypeScriptRxjsClientCodegen.java | 4 ++++ .../src/main/resources/typescript-rxjs/apis.mustache | 8 +++++--- 2 files changed, 9 insertions(+), 3 deletions(-) diff --git a/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/TypeScriptRxjsClientCodegen.java b/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/TypeScriptRxjsClientCodegen.java index 8aabd3bf8fde..aff4d23e0ebb 100644 --- a/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/TypeScriptRxjsClientCodegen.java +++ b/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/TypeScriptRxjsClientCodegen.java @@ -279,6 +279,8 @@ private void addConditionalImportInformation(Map operations) { if (param.required) { op.hasRequiredQueryParams = true; + } else { + op.hasOptionalQueryParams = true; } } for (CodegenParameter param : op.formParams) { @@ -330,6 +332,7 @@ private void addExtraReservedWords() { class ExtendedCodegenOperation extends CodegenOperation { public boolean hasHttpHeaders; public boolean hasRequiredQueryParams; + public boolean hasOptionalQueryParams; public ExtendedCodegenOperation(CodegenOperation o) { super(); @@ -404,6 +407,7 @@ public ExtendedCodegenOperation(CodegenOperation o) { // new fields this.hasHttpHeaders = o.getHasHeaderParams() || o.getHasBodyParam() || o.hasAuthMethods; this.hasRequiredQueryParams = false; // will be updated within addConditionalImportInformation + this.hasOptionalQueryParams = false; // will be updated within addConditionalImportInformation } } } diff --git a/modules/openapi-generator/src/main/resources/typescript-rxjs/apis.mustache b/modules/openapi-generator/src/main/resources/typescript-rxjs/apis.mustache index f61032d414ed..b06a4ea3be26 100644 --- a/modules/openapi-generator/src/main/resources/typescript-rxjs/apis.mustache +++ b/modules/openapi-generator/src/main/resources/typescript-rxjs/apis.mustache @@ -37,7 +37,7 @@ export class {{classname}} extends BaseAPI { * {{&summary}} {{/summary}} */ - {{nickname}} = ({{#allParams.0}}{ {{#allParams}}{{paramName}}, {{/allParams}}}: {{operationIdCamelCase}}Request{{/allParams.0}}): Observable<{{#returnType}}{{{returnType}}}{{/returnType}}{{^returnType}}void{{/returnType}}> => { + {{nickname}} = ({{#allParams.0}}{ {{#allParams}}{{paramName}}{{^-last}}, {{/-last}}{{/allParams}} }: {{operationIdCamelCase}}Request{{/allParams.0}}): Observable<{{#returnType}}{{{returnType}}}{{/returnType}}{{^returnType}}void{{/returnType}}> => { {{#hasParams}} {{#allParams}} {{#required}} @@ -89,7 +89,6 @@ export class {{classname}} extends BaseAPI { {{#hasQueryParams}} {{^hasRequiredQueryParams}} const query: HttpQuery = {}; - {{/hasRequiredQueryParams}} {{#hasRequiredQueryParams}} const query: HttpQuery = { // required parameters are used directly since they are already checked by throwIfNullOrUndefined @@ -119,8 +118,9 @@ export class {{classname}} extends BaseAPI { {{/required}} {{/queryParams}} }; - {{/hasRequiredQueryParams}} + {{#hasOptionalQueryParams}} + {{#queryParams}} {{^required}} {{#isListContainer}} @@ -146,6 +146,7 @@ export class {{classname}} extends BaseAPI { {{/isListContainer}} {{/required}} {{/queryParams}} + {{/hasOptionalQueryParams}} {{#authMethods}} {{#isApiKey}} {{#isKeyInQuery}} @@ -153,6 +154,7 @@ export class {{classname}} extends BaseAPI { {{/isKeyInQuery}} {{/isApiKey}} {{/authMethods}} + {{/hasQueryParams}} {{#hasFormParams}} const formData = new FormData(); From 126faa8cf2a923f5bccf69e7725f4d0b11a7de76 Mon Sep 17 00:00:00 2001 From: Bernd Hacker Date: Wed, 23 Oct 2019 20:16:52 +0200 Subject: [PATCH 07/18] feat(typescript-rxjs): remove useless generics in BaseAPI --- .../resources/typescript-rxjs/runtime.mustache | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/modules/openapi-generator/src/main/resources/typescript-rxjs/runtime.mustache b/modules/openapi-generator/src/main/resources/typescript-rxjs/runtime.mustache index 297a78755eea..03dc1599a2f2 100644 --- a/modules/openapi-generator/src/main/resources/typescript-rxjs/runtime.mustache +++ b/modules/openapi-generator/src/main/resources/typescript-rxjs/runtime.mustache @@ -61,17 +61,17 @@ export class BaseAPI { this.middleware = configuration.middleware; } - withMiddleware = (middlewares: Middleware[]) => { - const next = this.clone(); + withMiddleware = (middlewares: Middleware[]) => { + const next = this.clone(); next.middleware = next.middleware.concat(middlewares); return next; }; - withPreMiddleware = (preMiddlewares: Array) => - this.withMiddleware(preMiddlewares.map((pre) => ({ pre }))); + withPreMiddleware = (preMiddlewares: Array) => + this.withMiddleware(preMiddlewares.map((pre) => ({ pre }))); - withPostMiddleware = (postMiddlewares: Array) => - this.withMiddleware(postMiddlewares.map((post) => ({ post }))); + withPostMiddleware = (postMiddlewares: Array) => + this.withMiddleware(postMiddlewares.map((post) => ({ post }))); protected request = (requestOpts: RequestOpts): Observable => this.rxjsRequest(this.createRequestArgs(requestOpts)).pipe( @@ -121,7 +121,7 @@ export class BaseAPI { * Create a shallow clone of `this` by constructing a new instance * and then shallow cloning data members. */ - private clone = (): T => + private clone = (): BaseAPI => Object.assign(Object.create(Object.getPrototypeOf(this)), this); } From 7a1b104a71a6b6f9289eca5f881902181a2c8eb8 Mon Sep 17 00:00:00 2001 From: Bernd Hacker Date: Wed, 23 Oct 2019 20:17:33 +0200 Subject: [PATCH 08/18] feat(typescript-rxjs): regenerate samples --- .../builds/default/apis/PetApi.ts | 20 +++++++++---------- .../builds/default/apis/StoreApi.ts | 6 +++--- .../builds/default/apis/UserApi.ts | 16 +++++++-------- .../typescript-rxjs/builds/default/runtime.ts | 14 ++++++------- .../builds/es6-target/apis/PetApi.ts | 20 +++++++++---------- .../builds/es6-target/apis/StoreApi.ts | 6 +++--- .../builds/es6-target/apis/UserApi.ts | 16 +++++++-------- .../builds/es6-target/runtime.ts | 14 ++++++------- .../builds/with-interfaces/apis/PetApi.ts | 20 +++++++++---------- .../builds/with-interfaces/apis/StoreApi.ts | 6 +++--- .../builds/with-interfaces/apis/UserApi.ts | 16 +++++++-------- .../builds/with-interfaces/runtime.ts | 14 ++++++------- .../builds/with-npm-version/apis/PetApi.ts | 20 +++++++++---------- .../builds/with-npm-version/apis/StoreApi.ts | 6 +++--- .../builds/with-npm-version/apis/UserApi.ts | 16 +++++++-------- .../builds/with-npm-version/runtime.ts | 14 ++++++------- 16 files changed, 112 insertions(+), 112 deletions(-) diff --git a/samples/client/petstore/typescript-rxjs/builds/default/apis/PetApi.ts b/samples/client/petstore/typescript-rxjs/builds/default/apis/PetApi.ts index 290d250b18f7..3b3232c44dbb 100644 --- a/samples/client/petstore/typescript-rxjs/builds/default/apis/PetApi.ts +++ b/samples/client/petstore/typescript-rxjs/builds/default/apis/PetApi.ts @@ -63,7 +63,7 @@ export class PetApi extends BaseAPI { /** * Add a new pet to the store */ - addPet = ({ body, }: AddPetRequest): Observable => { + addPet = ({ body }: AddPetRequest): Observable => { throwIfNullOrUndefined(body, 'addPet'); const headers: HttpHeaders = { @@ -88,7 +88,7 @@ export class PetApi extends BaseAPI { /** * Deletes a pet */ - deletePet = ({ petId, apiKey, }: DeletePetRequest): Observable => { + deletePet = ({ petId, apiKey }: DeletePetRequest): Observable => { throwIfNullOrUndefined(petId, 'deletePet'); const headers: HttpHeaders = { @@ -113,7 +113,7 @@ export class PetApi extends BaseAPI { * Multiple status values can be provided with comma separated strings * Finds Pets by status */ - findPetsByStatus = ({ status, }: FindPetsByStatusRequest): Observable> => { + findPetsByStatus = ({ status }: FindPetsByStatusRequest): Observable> => { throwIfNullOrUndefined(status, 'findPetsByStatus'); const headers: HttpHeaders = { @@ -126,7 +126,7 @@ export class PetApi extends BaseAPI { ), }; - const query: HttpQuery = { + const query: HttpQuery = { // required parameters are used directly since they are already checked by throwIfNullOrUndefined 'status': status.join(COLLECTION_FORMATS['csv']), }; @@ -142,7 +142,7 @@ export class PetApi extends BaseAPI { * Multiple tags can be provided with comma separated strings. Use tag1, tag2, tag3 for testing. * Finds Pets by tags */ - findPetsByTags = ({ tags, }: FindPetsByTagsRequest): Observable> => { + findPetsByTags = ({ tags }: FindPetsByTagsRequest): Observable> => { throwIfNullOrUndefined(tags, 'findPetsByTags'); const headers: HttpHeaders = { @@ -155,7 +155,7 @@ export class PetApi extends BaseAPI { ), }; - const query: HttpQuery = { + const query: HttpQuery = { // required parameters are used directly since they are already checked by throwIfNullOrUndefined 'tags': tags.join(COLLECTION_FORMATS['csv']), }; @@ -171,7 +171,7 @@ export class PetApi extends BaseAPI { * Returns a single pet * Find pet by ID */ - getPetById = ({ petId, }: GetPetByIdRequest): Observable => { + getPetById = ({ petId }: GetPetByIdRequest): Observable => { throwIfNullOrUndefined(petId, 'getPetById'); const headers: HttpHeaders = { @@ -188,7 +188,7 @@ export class PetApi extends BaseAPI { /** * Update an existing pet */ - updatePet = ({ body, }: UpdatePetRequest): Observable => { + updatePet = ({ body }: UpdatePetRequest): Observable => { throwIfNullOrUndefined(body, 'updatePet'); const headers: HttpHeaders = { @@ -213,7 +213,7 @@ export class PetApi extends BaseAPI { /** * Updates a pet in the store with form data */ - updatePetWithForm = ({ petId, name, status, }: UpdatePetWithFormRequest): Observable => { + updatePetWithForm = ({ petId, name, status }: UpdatePetWithFormRequest): Observable => { throwIfNullOrUndefined(petId, 'updatePetWithForm'); const headers: HttpHeaders = { @@ -241,7 +241,7 @@ export class PetApi extends BaseAPI { /** * uploads an image */ - uploadFile = ({ petId, additionalMetadata, file, }: UploadFileRequest): Observable => { + uploadFile = ({ petId, additionalMetadata, file }: UploadFileRequest): Observable => { throwIfNullOrUndefined(petId, 'uploadFile'); const headers: HttpHeaders = { diff --git a/samples/client/petstore/typescript-rxjs/builds/default/apis/StoreApi.ts b/samples/client/petstore/typescript-rxjs/builds/default/apis/StoreApi.ts index 9fbda2c243de..aac36206d606 100644 --- a/samples/client/petstore/typescript-rxjs/builds/default/apis/StoreApi.ts +++ b/samples/client/petstore/typescript-rxjs/builds/default/apis/StoreApi.ts @@ -38,7 +38,7 @@ export class StoreApi extends BaseAPI { * For valid response try integer IDs with value < 1000. Anything above 1000 or nonintegers will generate API errors * Delete purchase order by ID */ - deleteOrder = ({ orderId, }: DeleteOrderRequest): Observable => { + deleteOrder = ({ orderId }: DeleteOrderRequest): Observable => { throwIfNullOrUndefined(orderId, 'deleteOrder'); return this.request({ @@ -67,7 +67,7 @@ export class StoreApi extends BaseAPI { * For valid response try integer IDs with value <= 5 or > 10. Other values will generated exceptions * Find purchase order by ID */ - getOrderById = ({ orderId, }: GetOrderByIdRequest): Observable => { + getOrderById = ({ orderId }: GetOrderByIdRequest): Observable => { throwIfNullOrUndefined(orderId, 'getOrderById'); return this.request({ @@ -79,7 +79,7 @@ export class StoreApi extends BaseAPI { /** * Place an order for a pet */ - placeOrder = ({ body, }: PlaceOrderRequest): Observable => { + placeOrder = ({ body }: PlaceOrderRequest): Observable => { throwIfNullOrUndefined(body, 'placeOrder'); const headers: HttpHeaders = { diff --git a/samples/client/petstore/typescript-rxjs/builds/default/apis/UserApi.ts b/samples/client/petstore/typescript-rxjs/builds/default/apis/UserApi.ts index 9d9a988d95ec..1b3c07eea4f7 100644 --- a/samples/client/petstore/typescript-rxjs/builds/default/apis/UserApi.ts +++ b/samples/client/petstore/typescript-rxjs/builds/default/apis/UserApi.ts @@ -56,7 +56,7 @@ export class UserApi extends BaseAPI { * This can only be done by the logged in user. * Create user */ - createUser = ({ body, }: CreateUserRequest): Observable => { + createUser = ({ body }: CreateUserRequest): Observable => { throwIfNullOrUndefined(body, 'createUser'); const headers: HttpHeaders = { @@ -74,7 +74,7 @@ export class UserApi extends BaseAPI { /** * Creates list of users with given input array */ - createUsersWithArrayInput = ({ body, }: CreateUsersWithArrayInputRequest): Observable => { + createUsersWithArrayInput = ({ body }: CreateUsersWithArrayInputRequest): Observable => { throwIfNullOrUndefined(body, 'createUsersWithArrayInput'); const headers: HttpHeaders = { @@ -92,7 +92,7 @@ export class UserApi extends BaseAPI { /** * Creates list of users with given input array */ - createUsersWithListInput = ({ body, }: CreateUsersWithListInputRequest): Observable => { + createUsersWithListInput = ({ body }: CreateUsersWithListInputRequest): Observable => { throwIfNullOrUndefined(body, 'createUsersWithListInput'); const headers: HttpHeaders = { @@ -111,7 +111,7 @@ export class UserApi extends BaseAPI { * This can only be done by the logged in user. * Delete user */ - deleteUser = ({ username, }: DeleteUserRequest): Observable => { + deleteUser = ({ username }: DeleteUserRequest): Observable => { throwIfNullOrUndefined(username, 'deleteUser'); return this.request({ @@ -123,7 +123,7 @@ export class UserApi extends BaseAPI { /** * Get user by user name */ - getUserByName = ({ username, }: GetUserByNameRequest): Observable => { + getUserByName = ({ username }: GetUserByNameRequest): Observable => { throwIfNullOrUndefined(username, 'getUserByName'); return this.request({ @@ -135,11 +135,11 @@ export class UserApi extends BaseAPI { /** * Logs user into the system */ - loginUser = ({ username, password, }: LoginUserRequest): Observable => { + loginUser = ({ username, password }: LoginUserRequest): Observable => { throwIfNullOrUndefined(username, 'loginUser'); throwIfNullOrUndefined(password, 'loginUser'); - const query: HttpQuery = { + const query: HttpQuery = { // required parameters are used directly since they are already checked by throwIfNullOrUndefined 'username': username, 'password': password, }; @@ -165,7 +165,7 @@ export class UserApi extends BaseAPI { * This can only be done by the logged in user. * Updated user */ - updateUser = ({ username, body, }: UpdateUserRequest): Observable => { + updateUser = ({ username, body }: UpdateUserRequest): Observable => { throwIfNullOrUndefined(username, 'updateUser'); throwIfNullOrUndefined(body, 'updateUser'); diff --git a/samples/client/petstore/typescript-rxjs/builds/default/runtime.ts b/samples/client/petstore/typescript-rxjs/builds/default/runtime.ts index 60ce06be6073..18e318900ebb 100644 --- a/samples/client/petstore/typescript-rxjs/builds/default/runtime.ts +++ b/samples/client/petstore/typescript-rxjs/builds/default/runtime.ts @@ -72,17 +72,17 @@ export class BaseAPI { this.middleware = configuration.middleware; } - withMiddleware = (middlewares: Middleware[]) => { - const next = this.clone(); + withMiddleware = (middlewares: Middleware[]) => { + const next = this.clone(); next.middleware = next.middleware.concat(middlewares); return next; }; - withPreMiddleware = (preMiddlewares: Array) => - this.withMiddleware(preMiddlewares.map((pre) => ({ pre }))); + withPreMiddleware = (preMiddlewares: Array) => + this.withMiddleware(preMiddlewares.map((pre) => ({ pre }))); - withPostMiddleware = (postMiddlewares: Array) => - this.withMiddleware(postMiddlewares.map((post) => ({ post }))); + withPostMiddleware = (postMiddlewares: Array) => + this.withMiddleware(postMiddlewares.map((post) => ({ post }))); protected request = (requestOpts: RequestOpts): Observable => this.rxjsRequest(this.createRequestArgs(requestOpts)).pipe( @@ -132,7 +132,7 @@ export class BaseAPI { * Create a shallow clone of `this` by constructing a new instance * and then shallow cloning data members. */ - private clone = (): T => + private clone = (): BaseAPI => Object.assign(Object.create(Object.getPrototypeOf(this)), this); } diff --git a/samples/client/petstore/typescript-rxjs/builds/es6-target/apis/PetApi.ts b/samples/client/petstore/typescript-rxjs/builds/es6-target/apis/PetApi.ts index 290d250b18f7..3b3232c44dbb 100644 --- a/samples/client/petstore/typescript-rxjs/builds/es6-target/apis/PetApi.ts +++ b/samples/client/petstore/typescript-rxjs/builds/es6-target/apis/PetApi.ts @@ -63,7 +63,7 @@ export class PetApi extends BaseAPI { /** * Add a new pet to the store */ - addPet = ({ body, }: AddPetRequest): Observable => { + addPet = ({ body }: AddPetRequest): Observable => { throwIfNullOrUndefined(body, 'addPet'); const headers: HttpHeaders = { @@ -88,7 +88,7 @@ export class PetApi extends BaseAPI { /** * Deletes a pet */ - deletePet = ({ petId, apiKey, }: DeletePetRequest): Observable => { + deletePet = ({ petId, apiKey }: DeletePetRequest): Observable => { throwIfNullOrUndefined(petId, 'deletePet'); const headers: HttpHeaders = { @@ -113,7 +113,7 @@ export class PetApi extends BaseAPI { * Multiple status values can be provided with comma separated strings * Finds Pets by status */ - findPetsByStatus = ({ status, }: FindPetsByStatusRequest): Observable> => { + findPetsByStatus = ({ status }: FindPetsByStatusRequest): Observable> => { throwIfNullOrUndefined(status, 'findPetsByStatus'); const headers: HttpHeaders = { @@ -126,7 +126,7 @@ export class PetApi extends BaseAPI { ), }; - const query: HttpQuery = { + const query: HttpQuery = { // required parameters are used directly since they are already checked by throwIfNullOrUndefined 'status': status.join(COLLECTION_FORMATS['csv']), }; @@ -142,7 +142,7 @@ export class PetApi extends BaseAPI { * Multiple tags can be provided with comma separated strings. Use tag1, tag2, tag3 for testing. * Finds Pets by tags */ - findPetsByTags = ({ tags, }: FindPetsByTagsRequest): Observable> => { + findPetsByTags = ({ tags }: FindPetsByTagsRequest): Observable> => { throwIfNullOrUndefined(tags, 'findPetsByTags'); const headers: HttpHeaders = { @@ -155,7 +155,7 @@ export class PetApi extends BaseAPI { ), }; - const query: HttpQuery = { + const query: HttpQuery = { // required parameters are used directly since they are already checked by throwIfNullOrUndefined 'tags': tags.join(COLLECTION_FORMATS['csv']), }; @@ -171,7 +171,7 @@ export class PetApi extends BaseAPI { * Returns a single pet * Find pet by ID */ - getPetById = ({ petId, }: GetPetByIdRequest): Observable => { + getPetById = ({ petId }: GetPetByIdRequest): Observable => { throwIfNullOrUndefined(petId, 'getPetById'); const headers: HttpHeaders = { @@ -188,7 +188,7 @@ export class PetApi extends BaseAPI { /** * Update an existing pet */ - updatePet = ({ body, }: UpdatePetRequest): Observable => { + updatePet = ({ body }: UpdatePetRequest): Observable => { throwIfNullOrUndefined(body, 'updatePet'); const headers: HttpHeaders = { @@ -213,7 +213,7 @@ export class PetApi extends BaseAPI { /** * Updates a pet in the store with form data */ - updatePetWithForm = ({ petId, name, status, }: UpdatePetWithFormRequest): Observable => { + updatePetWithForm = ({ petId, name, status }: UpdatePetWithFormRequest): Observable => { throwIfNullOrUndefined(petId, 'updatePetWithForm'); const headers: HttpHeaders = { @@ -241,7 +241,7 @@ export class PetApi extends BaseAPI { /** * uploads an image */ - uploadFile = ({ petId, additionalMetadata, file, }: UploadFileRequest): Observable => { + uploadFile = ({ petId, additionalMetadata, file }: UploadFileRequest): Observable => { throwIfNullOrUndefined(petId, 'uploadFile'); const headers: HttpHeaders = { diff --git a/samples/client/petstore/typescript-rxjs/builds/es6-target/apis/StoreApi.ts b/samples/client/petstore/typescript-rxjs/builds/es6-target/apis/StoreApi.ts index 9fbda2c243de..aac36206d606 100644 --- a/samples/client/petstore/typescript-rxjs/builds/es6-target/apis/StoreApi.ts +++ b/samples/client/petstore/typescript-rxjs/builds/es6-target/apis/StoreApi.ts @@ -38,7 +38,7 @@ export class StoreApi extends BaseAPI { * For valid response try integer IDs with value < 1000. Anything above 1000 or nonintegers will generate API errors * Delete purchase order by ID */ - deleteOrder = ({ orderId, }: DeleteOrderRequest): Observable => { + deleteOrder = ({ orderId }: DeleteOrderRequest): Observable => { throwIfNullOrUndefined(orderId, 'deleteOrder'); return this.request({ @@ -67,7 +67,7 @@ export class StoreApi extends BaseAPI { * For valid response try integer IDs with value <= 5 or > 10. Other values will generated exceptions * Find purchase order by ID */ - getOrderById = ({ orderId, }: GetOrderByIdRequest): Observable => { + getOrderById = ({ orderId }: GetOrderByIdRequest): Observable => { throwIfNullOrUndefined(orderId, 'getOrderById'); return this.request({ @@ -79,7 +79,7 @@ export class StoreApi extends BaseAPI { /** * Place an order for a pet */ - placeOrder = ({ body, }: PlaceOrderRequest): Observable => { + placeOrder = ({ body }: PlaceOrderRequest): Observable => { throwIfNullOrUndefined(body, 'placeOrder'); const headers: HttpHeaders = { diff --git a/samples/client/petstore/typescript-rxjs/builds/es6-target/apis/UserApi.ts b/samples/client/petstore/typescript-rxjs/builds/es6-target/apis/UserApi.ts index 9d9a988d95ec..1b3c07eea4f7 100644 --- a/samples/client/petstore/typescript-rxjs/builds/es6-target/apis/UserApi.ts +++ b/samples/client/petstore/typescript-rxjs/builds/es6-target/apis/UserApi.ts @@ -56,7 +56,7 @@ export class UserApi extends BaseAPI { * This can only be done by the logged in user. * Create user */ - createUser = ({ body, }: CreateUserRequest): Observable => { + createUser = ({ body }: CreateUserRequest): Observable => { throwIfNullOrUndefined(body, 'createUser'); const headers: HttpHeaders = { @@ -74,7 +74,7 @@ export class UserApi extends BaseAPI { /** * Creates list of users with given input array */ - createUsersWithArrayInput = ({ body, }: CreateUsersWithArrayInputRequest): Observable => { + createUsersWithArrayInput = ({ body }: CreateUsersWithArrayInputRequest): Observable => { throwIfNullOrUndefined(body, 'createUsersWithArrayInput'); const headers: HttpHeaders = { @@ -92,7 +92,7 @@ export class UserApi extends BaseAPI { /** * Creates list of users with given input array */ - createUsersWithListInput = ({ body, }: CreateUsersWithListInputRequest): Observable => { + createUsersWithListInput = ({ body }: CreateUsersWithListInputRequest): Observable => { throwIfNullOrUndefined(body, 'createUsersWithListInput'); const headers: HttpHeaders = { @@ -111,7 +111,7 @@ export class UserApi extends BaseAPI { * This can only be done by the logged in user. * Delete user */ - deleteUser = ({ username, }: DeleteUserRequest): Observable => { + deleteUser = ({ username }: DeleteUserRequest): Observable => { throwIfNullOrUndefined(username, 'deleteUser'); return this.request({ @@ -123,7 +123,7 @@ export class UserApi extends BaseAPI { /** * Get user by user name */ - getUserByName = ({ username, }: GetUserByNameRequest): Observable => { + getUserByName = ({ username }: GetUserByNameRequest): Observable => { throwIfNullOrUndefined(username, 'getUserByName'); return this.request({ @@ -135,11 +135,11 @@ export class UserApi extends BaseAPI { /** * Logs user into the system */ - loginUser = ({ username, password, }: LoginUserRequest): Observable => { + loginUser = ({ username, password }: LoginUserRequest): Observable => { throwIfNullOrUndefined(username, 'loginUser'); throwIfNullOrUndefined(password, 'loginUser'); - const query: HttpQuery = { + const query: HttpQuery = { // required parameters are used directly since they are already checked by throwIfNullOrUndefined 'username': username, 'password': password, }; @@ -165,7 +165,7 @@ export class UserApi extends BaseAPI { * This can only be done by the logged in user. * Updated user */ - updateUser = ({ username, body, }: UpdateUserRequest): Observable => { + updateUser = ({ username, body }: UpdateUserRequest): Observable => { throwIfNullOrUndefined(username, 'updateUser'); throwIfNullOrUndefined(body, 'updateUser'); diff --git a/samples/client/petstore/typescript-rxjs/builds/es6-target/runtime.ts b/samples/client/petstore/typescript-rxjs/builds/es6-target/runtime.ts index 60ce06be6073..18e318900ebb 100644 --- a/samples/client/petstore/typescript-rxjs/builds/es6-target/runtime.ts +++ b/samples/client/petstore/typescript-rxjs/builds/es6-target/runtime.ts @@ -72,17 +72,17 @@ export class BaseAPI { this.middleware = configuration.middleware; } - withMiddleware = (middlewares: Middleware[]) => { - const next = this.clone(); + withMiddleware = (middlewares: Middleware[]) => { + const next = this.clone(); next.middleware = next.middleware.concat(middlewares); return next; }; - withPreMiddleware = (preMiddlewares: Array) => - this.withMiddleware(preMiddlewares.map((pre) => ({ pre }))); + withPreMiddleware = (preMiddlewares: Array) => + this.withMiddleware(preMiddlewares.map((pre) => ({ pre }))); - withPostMiddleware = (postMiddlewares: Array) => - this.withMiddleware(postMiddlewares.map((post) => ({ post }))); + withPostMiddleware = (postMiddlewares: Array) => + this.withMiddleware(postMiddlewares.map((post) => ({ post }))); protected request = (requestOpts: RequestOpts): Observable => this.rxjsRequest(this.createRequestArgs(requestOpts)).pipe( @@ -132,7 +132,7 @@ export class BaseAPI { * Create a shallow clone of `this` by constructing a new instance * and then shallow cloning data members. */ - private clone = (): T => + private clone = (): BaseAPI => Object.assign(Object.create(Object.getPrototypeOf(this)), this); } diff --git a/samples/client/petstore/typescript-rxjs/builds/with-interfaces/apis/PetApi.ts b/samples/client/petstore/typescript-rxjs/builds/with-interfaces/apis/PetApi.ts index 290d250b18f7..3b3232c44dbb 100644 --- a/samples/client/petstore/typescript-rxjs/builds/with-interfaces/apis/PetApi.ts +++ b/samples/client/petstore/typescript-rxjs/builds/with-interfaces/apis/PetApi.ts @@ -63,7 +63,7 @@ export class PetApi extends BaseAPI { /** * Add a new pet to the store */ - addPet = ({ body, }: AddPetRequest): Observable => { + addPet = ({ body }: AddPetRequest): Observable => { throwIfNullOrUndefined(body, 'addPet'); const headers: HttpHeaders = { @@ -88,7 +88,7 @@ export class PetApi extends BaseAPI { /** * Deletes a pet */ - deletePet = ({ petId, apiKey, }: DeletePetRequest): Observable => { + deletePet = ({ petId, apiKey }: DeletePetRequest): Observable => { throwIfNullOrUndefined(petId, 'deletePet'); const headers: HttpHeaders = { @@ -113,7 +113,7 @@ export class PetApi extends BaseAPI { * Multiple status values can be provided with comma separated strings * Finds Pets by status */ - findPetsByStatus = ({ status, }: FindPetsByStatusRequest): Observable> => { + findPetsByStatus = ({ status }: FindPetsByStatusRequest): Observable> => { throwIfNullOrUndefined(status, 'findPetsByStatus'); const headers: HttpHeaders = { @@ -126,7 +126,7 @@ export class PetApi extends BaseAPI { ), }; - const query: HttpQuery = { + const query: HttpQuery = { // required parameters are used directly since they are already checked by throwIfNullOrUndefined 'status': status.join(COLLECTION_FORMATS['csv']), }; @@ -142,7 +142,7 @@ export class PetApi extends BaseAPI { * Multiple tags can be provided with comma separated strings. Use tag1, tag2, tag3 for testing. * Finds Pets by tags */ - findPetsByTags = ({ tags, }: FindPetsByTagsRequest): Observable> => { + findPetsByTags = ({ tags }: FindPetsByTagsRequest): Observable> => { throwIfNullOrUndefined(tags, 'findPetsByTags'); const headers: HttpHeaders = { @@ -155,7 +155,7 @@ export class PetApi extends BaseAPI { ), }; - const query: HttpQuery = { + const query: HttpQuery = { // required parameters are used directly since they are already checked by throwIfNullOrUndefined 'tags': tags.join(COLLECTION_FORMATS['csv']), }; @@ -171,7 +171,7 @@ export class PetApi extends BaseAPI { * Returns a single pet * Find pet by ID */ - getPetById = ({ petId, }: GetPetByIdRequest): Observable => { + getPetById = ({ petId }: GetPetByIdRequest): Observable => { throwIfNullOrUndefined(petId, 'getPetById'); const headers: HttpHeaders = { @@ -188,7 +188,7 @@ export class PetApi extends BaseAPI { /** * Update an existing pet */ - updatePet = ({ body, }: UpdatePetRequest): Observable => { + updatePet = ({ body }: UpdatePetRequest): Observable => { throwIfNullOrUndefined(body, 'updatePet'); const headers: HttpHeaders = { @@ -213,7 +213,7 @@ export class PetApi extends BaseAPI { /** * Updates a pet in the store with form data */ - updatePetWithForm = ({ petId, name, status, }: UpdatePetWithFormRequest): Observable => { + updatePetWithForm = ({ petId, name, status }: UpdatePetWithFormRequest): Observable => { throwIfNullOrUndefined(petId, 'updatePetWithForm'); const headers: HttpHeaders = { @@ -241,7 +241,7 @@ export class PetApi extends BaseAPI { /** * uploads an image */ - uploadFile = ({ petId, additionalMetadata, file, }: UploadFileRequest): Observable => { + uploadFile = ({ petId, additionalMetadata, file }: UploadFileRequest): Observable => { throwIfNullOrUndefined(petId, 'uploadFile'); const headers: HttpHeaders = { diff --git a/samples/client/petstore/typescript-rxjs/builds/with-interfaces/apis/StoreApi.ts b/samples/client/petstore/typescript-rxjs/builds/with-interfaces/apis/StoreApi.ts index 9fbda2c243de..aac36206d606 100644 --- a/samples/client/petstore/typescript-rxjs/builds/with-interfaces/apis/StoreApi.ts +++ b/samples/client/petstore/typescript-rxjs/builds/with-interfaces/apis/StoreApi.ts @@ -38,7 +38,7 @@ export class StoreApi extends BaseAPI { * For valid response try integer IDs with value < 1000. Anything above 1000 or nonintegers will generate API errors * Delete purchase order by ID */ - deleteOrder = ({ orderId, }: DeleteOrderRequest): Observable => { + deleteOrder = ({ orderId }: DeleteOrderRequest): Observable => { throwIfNullOrUndefined(orderId, 'deleteOrder'); return this.request({ @@ -67,7 +67,7 @@ export class StoreApi extends BaseAPI { * For valid response try integer IDs with value <= 5 or > 10. Other values will generated exceptions * Find purchase order by ID */ - getOrderById = ({ orderId, }: GetOrderByIdRequest): Observable => { + getOrderById = ({ orderId }: GetOrderByIdRequest): Observable => { throwIfNullOrUndefined(orderId, 'getOrderById'); return this.request({ @@ -79,7 +79,7 @@ export class StoreApi extends BaseAPI { /** * Place an order for a pet */ - placeOrder = ({ body, }: PlaceOrderRequest): Observable => { + placeOrder = ({ body }: PlaceOrderRequest): Observable => { throwIfNullOrUndefined(body, 'placeOrder'); const headers: HttpHeaders = { diff --git a/samples/client/petstore/typescript-rxjs/builds/with-interfaces/apis/UserApi.ts b/samples/client/petstore/typescript-rxjs/builds/with-interfaces/apis/UserApi.ts index 9d9a988d95ec..1b3c07eea4f7 100644 --- a/samples/client/petstore/typescript-rxjs/builds/with-interfaces/apis/UserApi.ts +++ b/samples/client/petstore/typescript-rxjs/builds/with-interfaces/apis/UserApi.ts @@ -56,7 +56,7 @@ export class UserApi extends BaseAPI { * This can only be done by the logged in user. * Create user */ - createUser = ({ body, }: CreateUserRequest): Observable => { + createUser = ({ body }: CreateUserRequest): Observable => { throwIfNullOrUndefined(body, 'createUser'); const headers: HttpHeaders = { @@ -74,7 +74,7 @@ export class UserApi extends BaseAPI { /** * Creates list of users with given input array */ - createUsersWithArrayInput = ({ body, }: CreateUsersWithArrayInputRequest): Observable => { + createUsersWithArrayInput = ({ body }: CreateUsersWithArrayInputRequest): Observable => { throwIfNullOrUndefined(body, 'createUsersWithArrayInput'); const headers: HttpHeaders = { @@ -92,7 +92,7 @@ export class UserApi extends BaseAPI { /** * Creates list of users with given input array */ - createUsersWithListInput = ({ body, }: CreateUsersWithListInputRequest): Observable => { + createUsersWithListInput = ({ body }: CreateUsersWithListInputRequest): Observable => { throwIfNullOrUndefined(body, 'createUsersWithListInput'); const headers: HttpHeaders = { @@ -111,7 +111,7 @@ export class UserApi extends BaseAPI { * This can only be done by the logged in user. * Delete user */ - deleteUser = ({ username, }: DeleteUserRequest): Observable => { + deleteUser = ({ username }: DeleteUserRequest): Observable => { throwIfNullOrUndefined(username, 'deleteUser'); return this.request({ @@ -123,7 +123,7 @@ export class UserApi extends BaseAPI { /** * Get user by user name */ - getUserByName = ({ username, }: GetUserByNameRequest): Observable => { + getUserByName = ({ username }: GetUserByNameRequest): Observable => { throwIfNullOrUndefined(username, 'getUserByName'); return this.request({ @@ -135,11 +135,11 @@ export class UserApi extends BaseAPI { /** * Logs user into the system */ - loginUser = ({ username, password, }: LoginUserRequest): Observable => { + loginUser = ({ username, password }: LoginUserRequest): Observable => { throwIfNullOrUndefined(username, 'loginUser'); throwIfNullOrUndefined(password, 'loginUser'); - const query: HttpQuery = { + const query: HttpQuery = { // required parameters are used directly since they are already checked by throwIfNullOrUndefined 'username': username, 'password': password, }; @@ -165,7 +165,7 @@ export class UserApi extends BaseAPI { * This can only be done by the logged in user. * Updated user */ - updateUser = ({ username, body, }: UpdateUserRequest): Observable => { + updateUser = ({ username, body }: UpdateUserRequest): Observable => { throwIfNullOrUndefined(username, 'updateUser'); throwIfNullOrUndefined(body, 'updateUser'); diff --git a/samples/client/petstore/typescript-rxjs/builds/with-interfaces/runtime.ts b/samples/client/petstore/typescript-rxjs/builds/with-interfaces/runtime.ts index 60ce06be6073..18e318900ebb 100644 --- a/samples/client/petstore/typescript-rxjs/builds/with-interfaces/runtime.ts +++ b/samples/client/petstore/typescript-rxjs/builds/with-interfaces/runtime.ts @@ -72,17 +72,17 @@ export class BaseAPI { this.middleware = configuration.middleware; } - withMiddleware = (middlewares: Middleware[]) => { - const next = this.clone(); + withMiddleware = (middlewares: Middleware[]) => { + const next = this.clone(); next.middleware = next.middleware.concat(middlewares); return next; }; - withPreMiddleware = (preMiddlewares: Array) => - this.withMiddleware(preMiddlewares.map((pre) => ({ pre }))); + withPreMiddleware = (preMiddlewares: Array) => + this.withMiddleware(preMiddlewares.map((pre) => ({ pre }))); - withPostMiddleware = (postMiddlewares: Array) => - this.withMiddleware(postMiddlewares.map((post) => ({ post }))); + withPostMiddleware = (postMiddlewares: Array) => + this.withMiddleware(postMiddlewares.map((post) => ({ post }))); protected request = (requestOpts: RequestOpts): Observable => this.rxjsRequest(this.createRequestArgs(requestOpts)).pipe( @@ -132,7 +132,7 @@ export class BaseAPI { * Create a shallow clone of `this` by constructing a new instance * and then shallow cloning data members. */ - private clone = (): T => + private clone = (): BaseAPI => Object.assign(Object.create(Object.getPrototypeOf(this)), this); } diff --git a/samples/client/petstore/typescript-rxjs/builds/with-npm-version/apis/PetApi.ts b/samples/client/petstore/typescript-rxjs/builds/with-npm-version/apis/PetApi.ts index 290d250b18f7..3b3232c44dbb 100644 --- a/samples/client/petstore/typescript-rxjs/builds/with-npm-version/apis/PetApi.ts +++ b/samples/client/petstore/typescript-rxjs/builds/with-npm-version/apis/PetApi.ts @@ -63,7 +63,7 @@ export class PetApi extends BaseAPI { /** * Add a new pet to the store */ - addPet = ({ body, }: AddPetRequest): Observable => { + addPet = ({ body }: AddPetRequest): Observable => { throwIfNullOrUndefined(body, 'addPet'); const headers: HttpHeaders = { @@ -88,7 +88,7 @@ export class PetApi extends BaseAPI { /** * Deletes a pet */ - deletePet = ({ petId, apiKey, }: DeletePetRequest): Observable => { + deletePet = ({ petId, apiKey }: DeletePetRequest): Observable => { throwIfNullOrUndefined(petId, 'deletePet'); const headers: HttpHeaders = { @@ -113,7 +113,7 @@ export class PetApi extends BaseAPI { * Multiple status values can be provided with comma separated strings * Finds Pets by status */ - findPetsByStatus = ({ status, }: FindPetsByStatusRequest): Observable> => { + findPetsByStatus = ({ status }: FindPetsByStatusRequest): Observable> => { throwIfNullOrUndefined(status, 'findPetsByStatus'); const headers: HttpHeaders = { @@ -126,7 +126,7 @@ export class PetApi extends BaseAPI { ), }; - const query: HttpQuery = { + const query: HttpQuery = { // required parameters are used directly since they are already checked by throwIfNullOrUndefined 'status': status.join(COLLECTION_FORMATS['csv']), }; @@ -142,7 +142,7 @@ export class PetApi extends BaseAPI { * Multiple tags can be provided with comma separated strings. Use tag1, tag2, tag3 for testing. * Finds Pets by tags */ - findPetsByTags = ({ tags, }: FindPetsByTagsRequest): Observable> => { + findPetsByTags = ({ tags }: FindPetsByTagsRequest): Observable> => { throwIfNullOrUndefined(tags, 'findPetsByTags'); const headers: HttpHeaders = { @@ -155,7 +155,7 @@ export class PetApi extends BaseAPI { ), }; - const query: HttpQuery = { + const query: HttpQuery = { // required parameters are used directly since they are already checked by throwIfNullOrUndefined 'tags': tags.join(COLLECTION_FORMATS['csv']), }; @@ -171,7 +171,7 @@ export class PetApi extends BaseAPI { * Returns a single pet * Find pet by ID */ - getPetById = ({ petId, }: GetPetByIdRequest): Observable => { + getPetById = ({ petId }: GetPetByIdRequest): Observable => { throwIfNullOrUndefined(petId, 'getPetById'); const headers: HttpHeaders = { @@ -188,7 +188,7 @@ export class PetApi extends BaseAPI { /** * Update an existing pet */ - updatePet = ({ body, }: UpdatePetRequest): Observable => { + updatePet = ({ body }: UpdatePetRequest): Observable => { throwIfNullOrUndefined(body, 'updatePet'); const headers: HttpHeaders = { @@ -213,7 +213,7 @@ export class PetApi extends BaseAPI { /** * Updates a pet in the store with form data */ - updatePetWithForm = ({ petId, name, status, }: UpdatePetWithFormRequest): Observable => { + updatePetWithForm = ({ petId, name, status }: UpdatePetWithFormRequest): Observable => { throwIfNullOrUndefined(petId, 'updatePetWithForm'); const headers: HttpHeaders = { @@ -241,7 +241,7 @@ export class PetApi extends BaseAPI { /** * uploads an image */ - uploadFile = ({ petId, additionalMetadata, file, }: UploadFileRequest): Observable => { + uploadFile = ({ petId, additionalMetadata, file }: UploadFileRequest): Observable => { throwIfNullOrUndefined(petId, 'uploadFile'); const headers: HttpHeaders = { diff --git a/samples/client/petstore/typescript-rxjs/builds/with-npm-version/apis/StoreApi.ts b/samples/client/petstore/typescript-rxjs/builds/with-npm-version/apis/StoreApi.ts index 9fbda2c243de..aac36206d606 100644 --- a/samples/client/petstore/typescript-rxjs/builds/with-npm-version/apis/StoreApi.ts +++ b/samples/client/petstore/typescript-rxjs/builds/with-npm-version/apis/StoreApi.ts @@ -38,7 +38,7 @@ export class StoreApi extends BaseAPI { * For valid response try integer IDs with value < 1000. Anything above 1000 or nonintegers will generate API errors * Delete purchase order by ID */ - deleteOrder = ({ orderId, }: DeleteOrderRequest): Observable => { + deleteOrder = ({ orderId }: DeleteOrderRequest): Observable => { throwIfNullOrUndefined(orderId, 'deleteOrder'); return this.request({ @@ -67,7 +67,7 @@ export class StoreApi extends BaseAPI { * For valid response try integer IDs with value <= 5 or > 10. Other values will generated exceptions * Find purchase order by ID */ - getOrderById = ({ orderId, }: GetOrderByIdRequest): Observable => { + getOrderById = ({ orderId }: GetOrderByIdRequest): Observable => { throwIfNullOrUndefined(orderId, 'getOrderById'); return this.request({ @@ -79,7 +79,7 @@ export class StoreApi extends BaseAPI { /** * Place an order for a pet */ - placeOrder = ({ body, }: PlaceOrderRequest): Observable => { + placeOrder = ({ body }: PlaceOrderRequest): Observable => { throwIfNullOrUndefined(body, 'placeOrder'); const headers: HttpHeaders = { diff --git a/samples/client/petstore/typescript-rxjs/builds/with-npm-version/apis/UserApi.ts b/samples/client/petstore/typescript-rxjs/builds/with-npm-version/apis/UserApi.ts index 9d9a988d95ec..1b3c07eea4f7 100644 --- a/samples/client/petstore/typescript-rxjs/builds/with-npm-version/apis/UserApi.ts +++ b/samples/client/petstore/typescript-rxjs/builds/with-npm-version/apis/UserApi.ts @@ -56,7 +56,7 @@ export class UserApi extends BaseAPI { * This can only be done by the logged in user. * Create user */ - createUser = ({ body, }: CreateUserRequest): Observable => { + createUser = ({ body }: CreateUserRequest): Observable => { throwIfNullOrUndefined(body, 'createUser'); const headers: HttpHeaders = { @@ -74,7 +74,7 @@ export class UserApi extends BaseAPI { /** * Creates list of users with given input array */ - createUsersWithArrayInput = ({ body, }: CreateUsersWithArrayInputRequest): Observable => { + createUsersWithArrayInput = ({ body }: CreateUsersWithArrayInputRequest): Observable => { throwIfNullOrUndefined(body, 'createUsersWithArrayInput'); const headers: HttpHeaders = { @@ -92,7 +92,7 @@ export class UserApi extends BaseAPI { /** * Creates list of users with given input array */ - createUsersWithListInput = ({ body, }: CreateUsersWithListInputRequest): Observable => { + createUsersWithListInput = ({ body }: CreateUsersWithListInputRequest): Observable => { throwIfNullOrUndefined(body, 'createUsersWithListInput'); const headers: HttpHeaders = { @@ -111,7 +111,7 @@ export class UserApi extends BaseAPI { * This can only be done by the logged in user. * Delete user */ - deleteUser = ({ username, }: DeleteUserRequest): Observable => { + deleteUser = ({ username }: DeleteUserRequest): Observable => { throwIfNullOrUndefined(username, 'deleteUser'); return this.request({ @@ -123,7 +123,7 @@ export class UserApi extends BaseAPI { /** * Get user by user name */ - getUserByName = ({ username, }: GetUserByNameRequest): Observable => { + getUserByName = ({ username }: GetUserByNameRequest): Observable => { throwIfNullOrUndefined(username, 'getUserByName'); return this.request({ @@ -135,11 +135,11 @@ export class UserApi extends BaseAPI { /** * Logs user into the system */ - loginUser = ({ username, password, }: LoginUserRequest): Observable => { + loginUser = ({ username, password }: LoginUserRequest): Observable => { throwIfNullOrUndefined(username, 'loginUser'); throwIfNullOrUndefined(password, 'loginUser'); - const query: HttpQuery = { + const query: HttpQuery = { // required parameters are used directly since they are already checked by throwIfNullOrUndefined 'username': username, 'password': password, }; @@ -165,7 +165,7 @@ export class UserApi extends BaseAPI { * This can only be done by the logged in user. * Updated user */ - updateUser = ({ username, body, }: UpdateUserRequest): Observable => { + updateUser = ({ username, body }: UpdateUserRequest): Observable => { throwIfNullOrUndefined(username, 'updateUser'); throwIfNullOrUndefined(body, 'updateUser'); diff --git a/samples/client/petstore/typescript-rxjs/builds/with-npm-version/runtime.ts b/samples/client/petstore/typescript-rxjs/builds/with-npm-version/runtime.ts index 60ce06be6073..18e318900ebb 100644 --- a/samples/client/petstore/typescript-rxjs/builds/with-npm-version/runtime.ts +++ b/samples/client/petstore/typescript-rxjs/builds/with-npm-version/runtime.ts @@ -72,17 +72,17 @@ export class BaseAPI { this.middleware = configuration.middleware; } - withMiddleware = (middlewares: Middleware[]) => { - const next = this.clone(); + withMiddleware = (middlewares: Middleware[]) => { + const next = this.clone(); next.middleware = next.middleware.concat(middlewares); return next; }; - withPreMiddleware = (preMiddlewares: Array) => - this.withMiddleware(preMiddlewares.map((pre) => ({ pre }))); + withPreMiddleware = (preMiddlewares: Array) => + this.withMiddleware(preMiddlewares.map((pre) => ({ pre }))); - withPostMiddleware = (postMiddlewares: Array) => - this.withMiddleware(postMiddlewares.map((post) => ({ post }))); + withPostMiddleware = (postMiddlewares: Array) => + this.withMiddleware(postMiddlewares.map((post) => ({ post }))); protected request = (requestOpts: RequestOpts): Observable => this.rxjsRequest(this.createRequestArgs(requestOpts)).pipe( @@ -132,7 +132,7 @@ export class BaseAPI { * Create a shallow clone of `this` by constructing a new instance * and then shallow cloning data members. */ - private clone = (): T => + private clone = (): BaseAPI => Object.assign(Object.create(Object.getPrototypeOf(this)), this); } From 4231b3b9c3394eba37a068113b63a53c09147040 Mon Sep 17 00:00:00 2001 From: Bernd Hacker Date: Fri, 1 Nov 2019 09:23:54 +0100 Subject: [PATCH 09/18] feat(typescript-rxjs): extend CodegenParameter by output.paramNameAlternative and output.paramNameOrAlternative --- .../org/openapitools/codegen/CodegenParameter.java | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/modules/openapi-generator/src/main/java/org/openapitools/codegen/CodegenParameter.java b/modules/openapi-generator/src/main/java/org/openapitools/codegen/CodegenParameter.java index b42f6119996a..d66b370676af 100644 --- a/modules/openapi-generator/src/main/java/org/openapitools/codegen/CodegenParameter.java +++ b/modules/openapi-generator/src/main/java/org/openapitools/codegen/CodegenParameter.java @@ -27,7 +27,7 @@ public class CodegenParameter { public boolean isFormParam, isQueryParam, isPathParam, isHeaderParam, isCookieParam, isBodyParam, hasMore, isContainer, secondaryParam, isCollectionFormatMulti, isPrimitiveType, isModel, isExplode; - public String baseName, paramName, dataType, datatypeWithEnum, dataFormat, + public String baseName, paramName, paramNameAlternative, paramNameOrAlternative, dataType, datatypeWithEnum, dataFormat, collectionFormat, description, unescapedDescription, baseType, defaultValue, enumName, style; public String example; // example value (x-example) @@ -105,6 +105,8 @@ public CodegenParameter copy() { output.secondaryParam = this.secondaryParam; output.baseName = this.baseName; output.paramName = this.paramName; + output.paramNameAlternative = this.paramNameAlternative; + output.paramNameOrAlternative = this.paramNameOrAlternative; output.dataType = this.dataType; output.datatypeWithEnum = this.datatypeWithEnum; output.enumName = this.enumName; @@ -200,6 +202,8 @@ public boolean equals(Object o) { Objects.equals(isModel, that.isModel) && Objects.equals(baseName, that.baseName) && Objects.equals(paramName, that.paramName) && + Objects.equals(paramNameAlternative, that.paramNameAlternative) && + Objects.equals(paramNameOrAlternative, that.paramNameOrAlternative) && Objects.equals(dataType, that.dataType) && Objects.equals(datatypeWithEnum, that.datatypeWithEnum) && Objects.equals(enumName, that.enumName) && @@ -269,6 +273,8 @@ public int hashCode() { isModel, baseName, paramName, + paramNameAlternative, + paramNameOrAlternative, dataType, datatypeWithEnum, enumName, @@ -339,6 +345,8 @@ public java.lang.String toString() { ", isModel=" + isModel + ", baseName='" + baseName + '\'' + ", paramName='" + paramName + '\'' + + ", paramNameAlternative='" + paramNameAlternative + '\'' + + ", paramNameOrAlternative='" + paramNameOrAlternative + '\'' + ", dataType='" + dataType + '\'' + ", datatypeWithEnum='" + datatypeWithEnum + '\'' + ", dataFormat='" + dataFormat + '\'' + From 5cf66d06d8f855ead943f1a4596ac7d3572da98e Mon Sep 17 00:00:00 2001 From: Bernd Hacker Date: Fri, 1 Nov 2019 09:24:21 +0100 Subject: [PATCH 10/18] refactor(typescript-rxjs): remove obsolete reservedWords RequiredError and exists --- .../codegen/languages/TypeScriptRxjsClientCodegen.java | 2 -- 1 file changed, 2 deletions(-) diff --git a/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/TypeScriptRxjsClientCodegen.java b/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/TypeScriptRxjsClientCodegen.java index aff4d23e0ebb..560ca1124ad8 100644 --- a/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/TypeScriptRxjsClientCodegen.java +++ b/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/TypeScriptRxjsClientCodegen.java @@ -311,7 +311,6 @@ private void addConditionalImportInformation(Map operations) { private void addExtraReservedWords() { this.reservedWords.add("BASE_PATH"); this.reservedWords.add("BaseAPI"); - this.reservedWords.add("RequiredError"); this.reservedWords.add("COLLECTION_FORMATS"); this.reservedWords.add("ConfigurationParameters"); this.reservedWords.add("Configuration"); @@ -323,7 +322,6 @@ private void addExtraReservedWords() { this.reservedWords.add("RequestArgs"); this.reservedWords.add("RequestOpts"); this.reservedWords.add("ResponseArgs"); - this.reservedWords.add("exists"); this.reservedWords.add("Middleware"); this.reservedWords.add("AjaxRequest"); this.reservedWords.add("AjaxResponse"); From 8a8bf518bc759e4713c3986279313bd8b429a2f0 Mon Sep 17 00:00:00 2001 From: Bernd Hacker Date: Fri, 1 Nov 2019 09:25:35 +0100 Subject: [PATCH 11/18] feat(typescript-rxjs): add reservedParamNames list with headers, query and formData, extend param processing --- .../TypeScriptRxjsClientCodegen.java | 78 +++++++++++++------ 1 file changed, 54 insertions(+), 24 deletions(-) diff --git a/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/TypeScriptRxjsClientCodegen.java b/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/TypeScriptRxjsClientCodegen.java index 560ca1124ad8..20331a1294b0 100644 --- a/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/TypeScriptRxjsClientCodegen.java +++ b/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/TypeScriptRxjsClientCodegen.java @@ -22,22 +22,24 @@ import io.swagger.v3.parser.util.SchemaTypeUtil; import org.openapitools.codegen.*; import org.openapitools.codegen.utils.ModelUtils; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; import java.io.File; +import java.lang.reflect.Field; import java.text.SimpleDateFormat; -import java.util.TreeSet; -import java.util.Date; -import java.util.List; -import java.util.ArrayList; -import java.util.Locale; -import java.util.Map; +import java.util.*; + +import static java.util.stream.Collectors.toList; public class TypeScriptRxjsClientCodegen extends AbstractTypeScriptClientCodegen { + private static final Logger LOGGER = LoggerFactory.getLogger(AbstractTypeScriptClientCodegen.class); public static final String NPM_REPOSITORY = "npmRepository"; public static final String WITH_INTERFACES = "withInterfaces"; protected String npmRepository = null; + protected Set reservedParamNames = new HashSet<>(); public TypeScriptRxjsClientCodegen() { super(); @@ -56,6 +58,11 @@ public TypeScriptRxjsClientCodegen() { this.cliOptions.add(new CliOption(NPM_REPOSITORY, "Use this property to set an url your private npmRepo in the package.json")); this.cliOptions.add(new CliOption(WITH_INTERFACES, "Setting this property to true will generate interfaces next to the default class implementations.", SchemaTypeUtil.BOOLEAN_TYPE).defaultValue(Boolean.FALSE.toString())); + + // these are used in the api template for more efficient destructuring + this.reservedParamNames.add("headers"); + this.reservedParamNames.add("query"); + this.reservedParamNames.add("formData"); } @Override @@ -250,6 +257,13 @@ private void updateOperationParameterEnumInformation(Map operati operations.put("hasEnums", hasEnums); } + private void setParamNameOrAlternative(CodegenParameter param, String paramName, String paramNameAlternative) { + if (paramName == param.paramName) { + param.paramNameAlternative = paramNameAlternative; + } + param.paramNameOrAlternative = param.paramNameAlternative != null ? param.paramNameAlternative : param.paramName; + } + private void addConditionalImportInformation(Map operations) { // This method will determine if there are required parameters and if there are list containers Map _operations = (Map) operations.get("operations"); @@ -265,28 +279,44 @@ private void addConditionalImportInformation(Map operations) { if (op.getHasRequiredParams()) { hasRequiredParams = true; } - - for (CodegenParameter param : op.headerParams) { - if (param.isListContainer) { - hasListContainers = true; - break; + + for (CodegenParameter p: op.allParams) { + String paramNameAlternative = null; + + if(this.reservedParamNames.contains(p.paramName)){ + paramNameAlternative = p.paramName + "Alias"; + LOGGER.info("param: "+p.paramName+" isReserved ––> "+paramNameAlternative); } - } - for (CodegenParameter param : op.queryParams) { - if (param.isListContainer && !param.isCollectionFormatMulti) { - hasListContainers = true; + setParamNameOrAlternative(p, p.paramName, paramNameAlternative); + + for (CodegenParameter param : op.headerParams) { + if (param.isListContainer) { + hasListContainers = true; + } + setParamNameOrAlternative(param, p.paramName, paramNameAlternative); } - if (param.required) { - op.hasRequiredQueryParams = true; - } else { - op.hasOptionalQueryParams = true; + for (CodegenParameter param : op.queryParams) { + if (param.isListContainer && !param.isCollectionFormatMulti) { + hasListContainers = true; + } + if (param.required) { + op.hasRequiredQueryParams = true; + } else { + op.hasOptionalQueryParams = true; + } + setParamNameOrAlternative(param, p.paramName, paramNameAlternative); } - } - for (CodegenParameter param : op.formParams) { - if (param.isListContainer && !param.isCollectionFormatMulti) { - hasListContainers = true; - break; + + for (CodegenParameter param : op.formParams) { + if (param.isListContainer && !param.isCollectionFormatMulti) { + hasListContainers = true; + } + setParamNameOrAlternative(param, p.paramName, paramNameAlternative); + } + + for (CodegenParameter param : op.pathParams) { + setParamNameOrAlternative(param, p.paramName, paramNameAlternative); } } From 8a8d472388740f14f3443b8d0c2962f52147c98e Mon Sep 17 00:00:00 2001 From: Bernd Hacker Date: Fri, 1 Nov 2019 09:26:02 +0100 Subject: [PATCH 12/18] feat(typescript-rxjs): use paramNameOrAlternative in api template --- .../resources/typescript-rxjs/apis.mustache | 38 +++++++++---------- 1 file changed, 19 insertions(+), 19 deletions(-) diff --git a/modules/openapi-generator/src/main/resources/typescript-rxjs/apis.mustache b/modules/openapi-generator/src/main/resources/typescript-rxjs/apis.mustache index b06a4ea3be26..c957896eb467 100644 --- a/modules/openapi-generator/src/main/resources/typescript-rxjs/apis.mustache +++ b/modules/openapi-generator/src/main/resources/typescript-rxjs/apis.mustache @@ -37,11 +37,11 @@ export class {{classname}} extends BaseAPI { * {{&summary}} {{/summary}} */ - {{nickname}} = ({{#allParams.0}}{ {{#allParams}}{{paramName}}{{^-last}}, {{/-last}}{{/allParams}} }: {{operationIdCamelCase}}Request{{/allParams.0}}): Observable<{{#returnType}}{{{returnType}}}{{/returnType}}{{^returnType}}void{{/returnType}}> => { + {{nickname}} = ({{#allParams.0}}{ {{#allParams}}{{paramName}}{{#paramNameAlternative}}: {{paramNameAlternative}}{{/paramNameAlternative}}{{^-last}}, {{/-last}}{{/allParams}} }: {{operationIdCamelCase}}Request{{/allParams.0}}): Observable<{{#returnType}}{{{returnType}}}{{/returnType}}{{^returnType}}void{{/returnType}}> => { {{#hasParams}} {{#allParams}} {{#required}} - throwIfNullOrUndefined({{paramName}}, '{{nickname}}'); + throwIfNullOrUndefined({{paramNameOrAlternative}}, '{{nickname}}'); {{/required}} {{/allParams}} @@ -58,10 +58,10 @@ export class {{classname}} extends BaseAPI { {{/bodyParam}} {{#headerParams}} {{#isListContainer}} - ...({{paramName}} != null ? { '{{baseName}}': {{paramName}}.join(COLLECTION_FORMATS['{{collectionFormat}}'])) } : undefined), + ...({{paramNameOrAlternative}} != null ? { '{{baseName}}': {{paramNameOrAlternative}}.join(COLLECTION_FORMATS['{{collectionFormat}}'])) } : undefined), {{/isListContainer}} {{^isListContainer}} - ...({{paramName}} != null ? { '{{baseName}}': String({{paramName}}) } : undefined), + ...({{paramNameOrAlternative}} != null ? { '{{baseName}}': String({{paramNameOrAlternative}}) } : undefined), {{/isListContainer}} {{/headerParams}} {{#authMethods}} @@ -96,22 +96,22 @@ export class {{classname}} extends BaseAPI { {{#required}} {{#isListContainer}} {{#isCollectionFormatMulti}} - '{{baseName}}': {{paramName}}, + '{{baseName}}': {{paramNameOrAlternative}}, {{/isCollectionFormatMulti}} {{^isCollectionFormatMulti}} - '{{baseName}}': {{paramName}}.join(COLLECTION_FORMATS['{{collectionFormat}}']), + '{{baseName}}': {{paramNameOrAlternative}}.join(COLLECTION_FORMATS['{{collectionFormat}}']), {{/isCollectionFormatMulti}} {{/isListContainer}} {{^isListContainer}} {{#isDateTime}} - '{{baseName}}': ({{paramName}} as any).toISOString(), + '{{baseName}}': ({{paramNameOrAlternative}} as any).toISOString(), {{/isDateTime}} {{^isDateTime}} {{#isDate}} - '{{baseName}}': ({{paramName}} as any).toISOString(), + '{{baseName}}': ({{paramNameOrAlternative}} as any).toISOString(), {{/isDate}} {{^isDate}} - '{{baseName}}': {{paramName}}, + '{{baseName}}': {{paramNameOrAlternative}}, {{/isDate}} {{/isDateTime}} {{/isListContainer}} @@ -125,22 +125,22 @@ export class {{classname}} extends BaseAPI { {{^required}} {{#isListContainer}} {{#isCollectionFormatMulti}} - if ({{paramName}} != null) { query['{{baseName}}'] = {{paramName}}; } + if ({{paramNameOrAlternative}} != null) { query['{{baseName}}'] = {{paramNameOrAlternative}}; } {{/isCollectionFormatMulti}} {{^isCollectionFormatMulti}} - if ({{paramName}} != null) { query['{{baseName}}'] = {{paramName}}.join(COLLECTION_FORMATS['{{collectionFormat}}']); } + if ({{paramNameOrAlternative}} != null) { query['{{baseName}}'] = {{paramNameOrAlternative}}.join(COLLECTION_FORMATS['{{collectionFormat}}']); } {{/isCollectionFormatMulti}} {{/isListContainer}} {{^isListContainer}} {{#isDateTime}} - if ({{paramName}} != null) { query['{{baseName}}'] = ({{paramName}} as any).toISOString(); } + if ({{paramNameOrAlternative}} != null) { query['{{baseName}}'] = ({{paramNameOrAlternative}} as any).toISOString(); } {{/isDateTime}} {{^isDateTime}} {{#isDate}} - if ({{paramName}} != null) { query['{{baseName}}'] = ({{paramName}} as any).toISOString(); } + if ({{paramNameOrAlternative}} != null) { query['{{baseName}}'] = ({{paramNameOrAlternative}} as any).toISOString(); } {{/isDate}} {{^isDate}} - if ({{paramName}} != null) { query['{{baseName}}'] = {{paramName}}; } + if ({{paramNameOrAlternative}} != null) { query['{{baseName}}'] = {{paramNameOrAlternative}}; } {{/isDate}} {{/isDateTime}} {{/isListContainer}} @@ -160,24 +160,24 @@ export class {{classname}} extends BaseAPI { const formData = new FormData(); {{#formParams}} {{#isListContainer}} - if ({{paramName}} !== undefined) { + if ({{paramNameOrAlternative}} !== undefined) { {{#isCollectionFormatMulti}} - {{paramName}}.forEach((element) => formData.append('{{baseName}}', element as any)) + {{paramNameOrAlternative}}.forEach((element) => formData.append('{{baseName}}', element as any)) {{/isCollectionFormatMulti}} {{^isCollectionFormatMulti}} - formData.append('{{baseName}}', {{paramName}}.join(COLLECTION_FORMATS['{{collectionFormat}}'])); + formData.append('{{baseName}}', {{paramNameOrAlternative}}.join(COLLECTION_FORMATS['{{collectionFormat}}'])); {{/isCollectionFormatMulti}} } {{/isListContainer}} {{^isListContainer}} - if ({{paramName}} !== undefined) { formData.append('{{baseName}}', {{paramName}} as any); } + if ({{paramNameOrAlternative}} !== undefined) { formData.append('{{baseName}}', {{paramNameOrAlternative}} as any); } {{/isListContainer}} {{/formParams}} {{/hasFormParams}} return this.request<{{#returnType}}{{{returnType}}}{{/returnType}}{{^returnType}}void{{/returnType}}>({ - path: '{{{path}}}'{{#pathParams}}.replace({{=<% %>=}}'{<%baseName%>}'<%={{ }}=%>, encodeURI({{paramName}})){{/pathParams}}, + path: '{{{path}}}'{{#pathParams}}.replace({{=<% %>=}}'{<%baseName%>}'<%={{ }}=%>, encodeURI({{paramNameOrAlternative}})){{/pathParams}}, method: '{{httpMethod}}', {{#hasHttpHeaders}} headers, From bbb4b4404aba2db9b3a4250831a98a99e4027a22 Mon Sep 17 00:00:00 2001 From: Bernd Hacker Date: Fri, 1 Nov 2019 09:52:54 +0100 Subject: [PATCH 13/18] refactor(typescript-rxjs): replace paramNameOrAlternative prop with mustache partial --- .../codegen/CodegenParameter.java | 6 +--- .../TypeScriptRxjsClientCodegen.java | 17 ++++----- .../resources/typescript-rxjs/apis.mustache | 36 +++++++++---------- .../typescript-rxjs/paramNamePartial.mustache | 2 ++ 4 files changed, 27 insertions(+), 34 deletions(-) create mode 100644 modules/openapi-generator/src/main/resources/typescript-rxjs/paramNamePartial.mustache diff --git a/modules/openapi-generator/src/main/java/org/openapitools/codegen/CodegenParameter.java b/modules/openapi-generator/src/main/java/org/openapitools/codegen/CodegenParameter.java index d66b370676af..c6800f26cf54 100644 --- a/modules/openapi-generator/src/main/java/org/openapitools/codegen/CodegenParameter.java +++ b/modules/openapi-generator/src/main/java/org/openapitools/codegen/CodegenParameter.java @@ -27,7 +27,7 @@ public class CodegenParameter { public boolean isFormParam, isQueryParam, isPathParam, isHeaderParam, isCookieParam, isBodyParam, hasMore, isContainer, secondaryParam, isCollectionFormatMulti, isPrimitiveType, isModel, isExplode; - public String baseName, paramName, paramNameAlternative, paramNameOrAlternative, dataType, datatypeWithEnum, dataFormat, + public String baseName, paramName, paramNameAlternative, dataType, datatypeWithEnum, dataFormat, collectionFormat, description, unescapedDescription, baseType, defaultValue, enumName, style; public String example; // example value (x-example) @@ -106,7 +106,6 @@ public CodegenParameter copy() { output.baseName = this.baseName; output.paramName = this.paramName; output.paramNameAlternative = this.paramNameAlternative; - output.paramNameOrAlternative = this.paramNameOrAlternative; output.dataType = this.dataType; output.datatypeWithEnum = this.datatypeWithEnum; output.enumName = this.enumName; @@ -203,7 +202,6 @@ public boolean equals(Object o) { Objects.equals(baseName, that.baseName) && Objects.equals(paramName, that.paramName) && Objects.equals(paramNameAlternative, that.paramNameAlternative) && - Objects.equals(paramNameOrAlternative, that.paramNameOrAlternative) && Objects.equals(dataType, that.dataType) && Objects.equals(datatypeWithEnum, that.datatypeWithEnum) && Objects.equals(enumName, that.enumName) && @@ -274,7 +272,6 @@ public int hashCode() { baseName, paramName, paramNameAlternative, - paramNameOrAlternative, dataType, datatypeWithEnum, enumName, @@ -346,7 +343,6 @@ public java.lang.String toString() { ", baseName='" + baseName + '\'' + ", paramName='" + paramName + '\'' + ", paramNameAlternative='" + paramNameAlternative + '\'' + - ", paramNameOrAlternative='" + paramNameOrAlternative + '\'' + ", dataType='" + dataType + '\'' + ", datatypeWithEnum='" + datatypeWithEnum + '\'' + ", dataFormat='" + dataFormat + '\'' + diff --git a/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/TypeScriptRxjsClientCodegen.java b/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/TypeScriptRxjsClientCodegen.java index 20331a1294b0..4a4fd2cba63c 100644 --- a/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/TypeScriptRxjsClientCodegen.java +++ b/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/TypeScriptRxjsClientCodegen.java @@ -26,12 +26,8 @@ import org.slf4j.LoggerFactory; import java.io.File; -import java.lang.reflect.Field; -import java.text.SimpleDateFormat; import java.util.*; -import static java.util.stream.Collectors.toList; - public class TypeScriptRxjsClientCodegen extends AbstractTypeScriptClientCodegen { private static final Logger LOGGER = LoggerFactory.getLogger(AbstractTypeScriptClientCodegen.class); @@ -257,11 +253,10 @@ private void updateOperationParameterEnumInformation(Map operati operations.put("hasEnums", hasEnums); } - private void setParamNameOrAlternative(CodegenParameter param, String paramName, String paramNameAlternative) { + private void setParamNameAlternative(CodegenParameter param, String paramName, String paramNameAlternative) { if (paramName == param.paramName) { param.paramNameAlternative = paramNameAlternative; } - param.paramNameOrAlternative = param.paramNameAlternative != null ? param.paramNameAlternative : param.paramName; } private void addConditionalImportInformation(Map operations) { @@ -287,13 +282,13 @@ private void addConditionalImportInformation(Map operations) { paramNameAlternative = p.paramName + "Alias"; LOGGER.info("param: "+p.paramName+" isReserved ––> "+paramNameAlternative); } - setParamNameOrAlternative(p, p.paramName, paramNameAlternative); + setParamNameAlternative(p, p.paramName, paramNameAlternative); for (CodegenParameter param : op.headerParams) { if (param.isListContainer) { hasListContainers = true; } - setParamNameOrAlternative(param, p.paramName, paramNameAlternative); + setParamNameAlternative(param, p.paramName, paramNameAlternative); } for (CodegenParameter param : op.queryParams) { @@ -305,18 +300,18 @@ private void addConditionalImportInformation(Map operations) { } else { op.hasOptionalQueryParams = true; } - setParamNameOrAlternative(param, p.paramName, paramNameAlternative); + setParamNameAlternative(param, p.paramName, paramNameAlternative); } for (CodegenParameter param : op.formParams) { if (param.isListContainer && !param.isCollectionFormatMulti) { hasListContainers = true; } - setParamNameOrAlternative(param, p.paramName, paramNameAlternative); + setParamNameAlternative(param, p.paramName, paramNameAlternative); } for (CodegenParameter param : op.pathParams) { - setParamNameOrAlternative(param, p.paramName, paramNameAlternative); + setParamNameAlternative(param, p.paramName, paramNameAlternative); } } diff --git a/modules/openapi-generator/src/main/resources/typescript-rxjs/apis.mustache b/modules/openapi-generator/src/main/resources/typescript-rxjs/apis.mustache index c957896eb467..a84a8c6679c9 100644 --- a/modules/openapi-generator/src/main/resources/typescript-rxjs/apis.mustache +++ b/modules/openapi-generator/src/main/resources/typescript-rxjs/apis.mustache @@ -41,7 +41,7 @@ export class {{classname}} extends BaseAPI { {{#hasParams}} {{#allParams}} {{#required}} - throwIfNullOrUndefined({{paramNameOrAlternative}}, '{{nickname}}'); + throwIfNullOrUndefined({{> paramNamePartial}}, '{{nickname}}'); {{/required}} {{/allParams}} @@ -58,10 +58,10 @@ export class {{classname}} extends BaseAPI { {{/bodyParam}} {{#headerParams}} {{#isListContainer}} - ...({{paramNameOrAlternative}} != null ? { '{{baseName}}': {{paramNameOrAlternative}}.join(COLLECTION_FORMATS['{{collectionFormat}}'])) } : undefined), + ...({{> paramNamePartial}} != null ? { '{{baseName}}': {{> paramNamePartial}}.join(COLLECTION_FORMATS['{{collectionFormat}}'])) } : undefined), {{/isListContainer}} {{^isListContainer}} - ...({{paramNameOrAlternative}} != null ? { '{{baseName}}': String({{paramNameOrAlternative}}) } : undefined), + ...({{> paramNamePartial}} != null ? { '{{baseName}}': String({{> paramNamePartial}}) } : undefined), {{/isListContainer}} {{/headerParams}} {{#authMethods}} @@ -96,22 +96,22 @@ export class {{classname}} extends BaseAPI { {{#required}} {{#isListContainer}} {{#isCollectionFormatMulti}} - '{{baseName}}': {{paramNameOrAlternative}}, + '{{baseName}}': {{> paramNamePartial}}, {{/isCollectionFormatMulti}} {{^isCollectionFormatMulti}} - '{{baseName}}': {{paramNameOrAlternative}}.join(COLLECTION_FORMATS['{{collectionFormat}}']), + '{{baseName}}': {{> paramNamePartial}}.join(COLLECTION_FORMATS['{{collectionFormat}}']), {{/isCollectionFormatMulti}} {{/isListContainer}} {{^isListContainer}} {{#isDateTime}} - '{{baseName}}': ({{paramNameOrAlternative}} as any).toISOString(), + '{{baseName}}': ({{> paramNamePartial}} as any).toISOString(), {{/isDateTime}} {{^isDateTime}} {{#isDate}} - '{{baseName}}': ({{paramNameOrAlternative}} as any).toISOString(), + '{{baseName}}': ({{> paramNamePartial}} as any).toISOString(), {{/isDate}} {{^isDate}} - '{{baseName}}': {{paramNameOrAlternative}}, + '{{baseName}}': {{> paramNamePartial}}, {{/isDate}} {{/isDateTime}} {{/isListContainer}} @@ -125,22 +125,22 @@ export class {{classname}} extends BaseAPI { {{^required}} {{#isListContainer}} {{#isCollectionFormatMulti}} - if ({{paramNameOrAlternative}} != null) { query['{{baseName}}'] = {{paramNameOrAlternative}}; } + if ({{> paramNamePartial}} != null) { query['{{baseName}}'] = {{> paramNamePartial}}; } {{/isCollectionFormatMulti}} {{^isCollectionFormatMulti}} - if ({{paramNameOrAlternative}} != null) { query['{{baseName}}'] = {{paramNameOrAlternative}}.join(COLLECTION_FORMATS['{{collectionFormat}}']); } + if ({{> paramNamePartial}} != null) { query['{{baseName}}'] = {{> paramNamePartial}}.join(COLLECTION_FORMATS['{{collectionFormat}}']); } {{/isCollectionFormatMulti}} {{/isListContainer}} {{^isListContainer}} {{#isDateTime}} - if ({{paramNameOrAlternative}} != null) { query['{{baseName}}'] = ({{paramNameOrAlternative}} as any).toISOString(); } + if ({{> paramNamePartial}} != null) { query['{{baseName}}'] = ({{> paramNamePartial}} as any).toISOString(); } {{/isDateTime}} {{^isDateTime}} {{#isDate}} - if ({{paramNameOrAlternative}} != null) { query['{{baseName}}'] = ({{paramNameOrAlternative}} as any).toISOString(); } + if ({{> paramNamePartial}} != null) { query['{{baseName}}'] = ({{> paramNamePartial}} as any).toISOString(); } {{/isDate}} {{^isDate}} - if ({{paramNameOrAlternative}} != null) { query['{{baseName}}'] = {{paramNameOrAlternative}}; } + if ({{> paramNamePartial}} != null) { query['{{baseName}}'] = {{> paramNamePartial}}; } {{/isDate}} {{/isDateTime}} {{/isListContainer}} @@ -160,24 +160,24 @@ export class {{classname}} extends BaseAPI { const formData = new FormData(); {{#formParams}} {{#isListContainer}} - if ({{paramNameOrAlternative}} !== undefined) { + if ({{> paramNamePartial}} !== undefined) { {{#isCollectionFormatMulti}} - {{paramNameOrAlternative}}.forEach((element) => formData.append('{{baseName}}', element as any)) + {{> paramNamePartial}}.forEach((element) => formData.append('{{baseName}}', element as any)) {{/isCollectionFormatMulti}} {{^isCollectionFormatMulti}} - formData.append('{{baseName}}', {{paramNameOrAlternative}}.join(COLLECTION_FORMATS['{{collectionFormat}}'])); + formData.append('{{baseName}}', {{> paramNamePartial}}.join(COLLECTION_FORMATS['{{collectionFormat}}'])); {{/isCollectionFormatMulti}} } {{/isListContainer}} {{^isListContainer}} - if ({{paramNameOrAlternative}} !== undefined) { formData.append('{{baseName}}', {{paramNameOrAlternative}} as any); } + if ({{> paramNamePartial}} !== undefined) { formData.append('{{baseName}}', {{> paramNamePartial}} as any); } {{/isListContainer}} {{/formParams}} {{/hasFormParams}} return this.request<{{#returnType}}{{{returnType}}}{{/returnType}}{{^returnType}}void{{/returnType}}>({ - path: '{{{path}}}'{{#pathParams}}.replace({{=<% %>=}}'{<%baseName%>}'<%={{ }}=%>, encodeURI({{paramNameOrAlternative}})){{/pathParams}}, + path: '{{{path}}}'{{#pathParams}}.replace({{=<% %>=}}'{<%baseName%>}'<%={{ }}=%>, encodeURI({{> paramNamePartial}})){{/pathParams}}, method: '{{httpMethod}}', {{#hasHttpHeaders}} headers, diff --git a/modules/openapi-generator/src/main/resources/typescript-rxjs/paramNamePartial.mustache b/modules/openapi-generator/src/main/resources/typescript-rxjs/paramNamePartial.mustache new file mode 100644 index 000000000000..740b77bc0302 --- /dev/null +++ b/modules/openapi-generator/src/main/resources/typescript-rxjs/paramNamePartial.mustache @@ -0,0 +1,2 @@ +{{! helper to output the alias of a parameter if provided and to not clutter the main template }} +{{#paramNameAlternative}}{{paramNameAlternative}}{{/paramNameAlternative}}{{^paramNameAlternative}}{{paramName}}{{/paramNameAlternative}} \ No newline at end of file From 33f1c1e09d0059a539b5d04979ae9316e8041c20 Mon Sep 17 00:00:00 2001 From: Bernd Hacker Date: Thu, 5 Dec 2019 15:07:25 +0100 Subject: [PATCH 14/18] refactor(typescript-rxjs): reduce branching in configuration's apiKey() and accessToken() --- .../main/resources/typescript-rxjs/runtime.mustache | 10 ++-------- .../petstore/typescript-rxjs/builds/default/runtime.ts | 10 ++-------- .../typescript-rxjs/builds/es6-target/runtime.ts | 10 ++-------- .../typescript-rxjs/builds/with-interfaces/runtime.ts | 10 ++-------- .../typescript-rxjs/builds/with-npm-version/runtime.ts | 10 ++-------- 5 files changed, 10 insertions(+), 40 deletions(-) diff --git a/modules/openapi-generator/src/main/resources/typescript-rxjs/runtime.mustache b/modules/openapi-generator/src/main/resources/typescript-rxjs/runtime.mustache index 03dc1599a2f2..6136d3f62817 100644 --- a/modules/openapi-generator/src/main/resources/typescript-rxjs/runtime.mustache +++ b/modules/openapi-generator/src/main/resources/typescript-rxjs/runtime.mustache @@ -36,18 +36,12 @@ export class Configuration { get apiKey(): ((name: string) => string) | undefined { const apiKey = this.configuration.apiKey; - if (apiKey) { - return typeof apiKey === 'function' ? apiKey : () => apiKey; - } - return undefined; + return apiKey && (typeof apiKey === 'function' ? apiKey : () => apiKey); } get accessToken(): ((name: string, scopes?: string[]) => string) | undefined { const accessToken = this.configuration.accessToken; - if (accessToken) { - return typeof accessToken === 'function' ? accessToken : () => accessToken; - } - return undefined; + return accessToken && (typeof accessToken === 'function' ? accessToken : () => accessToken); } } diff --git a/samples/client/petstore/typescript-rxjs/builds/default/runtime.ts b/samples/client/petstore/typescript-rxjs/builds/default/runtime.ts index 18e318900ebb..c2ebc9de3cfd 100644 --- a/samples/client/petstore/typescript-rxjs/builds/default/runtime.ts +++ b/samples/client/petstore/typescript-rxjs/builds/default/runtime.ts @@ -47,18 +47,12 @@ export class Configuration { get apiKey(): ((name: string) => string) | undefined { const apiKey = this.configuration.apiKey; - if (apiKey) { - return typeof apiKey === 'function' ? apiKey : () => apiKey; - } - return undefined; + return apiKey && (typeof apiKey === 'function' ? apiKey : () => apiKey); } get accessToken(): ((name: string, scopes?: string[]) => string) | undefined { const accessToken = this.configuration.accessToken; - if (accessToken) { - return typeof accessToken === 'function' ? accessToken : () => accessToken; - } - return undefined; + return accessToken && (typeof accessToken === 'function' ? accessToken : () => accessToken); } } diff --git a/samples/client/petstore/typescript-rxjs/builds/es6-target/runtime.ts b/samples/client/petstore/typescript-rxjs/builds/es6-target/runtime.ts index 18e318900ebb..c2ebc9de3cfd 100644 --- a/samples/client/petstore/typescript-rxjs/builds/es6-target/runtime.ts +++ b/samples/client/petstore/typescript-rxjs/builds/es6-target/runtime.ts @@ -47,18 +47,12 @@ export class Configuration { get apiKey(): ((name: string) => string) | undefined { const apiKey = this.configuration.apiKey; - if (apiKey) { - return typeof apiKey === 'function' ? apiKey : () => apiKey; - } - return undefined; + return apiKey && (typeof apiKey === 'function' ? apiKey : () => apiKey); } get accessToken(): ((name: string, scopes?: string[]) => string) | undefined { const accessToken = this.configuration.accessToken; - if (accessToken) { - return typeof accessToken === 'function' ? accessToken : () => accessToken; - } - return undefined; + return accessToken && (typeof accessToken === 'function' ? accessToken : () => accessToken); } } diff --git a/samples/client/petstore/typescript-rxjs/builds/with-interfaces/runtime.ts b/samples/client/petstore/typescript-rxjs/builds/with-interfaces/runtime.ts index 18e318900ebb..c2ebc9de3cfd 100644 --- a/samples/client/petstore/typescript-rxjs/builds/with-interfaces/runtime.ts +++ b/samples/client/petstore/typescript-rxjs/builds/with-interfaces/runtime.ts @@ -47,18 +47,12 @@ export class Configuration { get apiKey(): ((name: string) => string) | undefined { const apiKey = this.configuration.apiKey; - if (apiKey) { - return typeof apiKey === 'function' ? apiKey : () => apiKey; - } - return undefined; + return apiKey && (typeof apiKey === 'function' ? apiKey : () => apiKey); } get accessToken(): ((name: string, scopes?: string[]) => string) | undefined { const accessToken = this.configuration.accessToken; - if (accessToken) { - return typeof accessToken === 'function' ? accessToken : () => accessToken; - } - return undefined; + return accessToken && (typeof accessToken === 'function' ? accessToken : () => accessToken); } } diff --git a/samples/client/petstore/typescript-rxjs/builds/with-npm-version/runtime.ts b/samples/client/petstore/typescript-rxjs/builds/with-npm-version/runtime.ts index 18e318900ebb..c2ebc9de3cfd 100644 --- a/samples/client/petstore/typescript-rxjs/builds/with-npm-version/runtime.ts +++ b/samples/client/petstore/typescript-rxjs/builds/with-npm-version/runtime.ts @@ -47,18 +47,12 @@ export class Configuration { get apiKey(): ((name: string) => string) | undefined { const apiKey = this.configuration.apiKey; - if (apiKey) { - return typeof apiKey === 'function' ? apiKey : () => apiKey; - } - return undefined; + return apiKey && (typeof apiKey === 'function' ? apiKey : () => apiKey); } get accessToken(): ((name: string, scopes?: string[]) => string) | undefined { const accessToken = this.configuration.accessToken; - if (accessToken) { - return typeof accessToken === 'function' ? accessToken : () => accessToken; - } - return undefined; + return accessToken && (typeof accessToken === 'function' ? accessToken : () => accessToken); } } From 3ad6e5f012bdb7d2fc51e50063e0057c24a5e1d8 Mon Sep 17 00:00:00 2001 From: Bernd Hacker Date: Fri, 6 Dec 2019 10:15:51 +0100 Subject: [PATCH 15/18] refactor(typescript-rxjs): remove unused ModelPropertyNaming --- .../codegen/languages/TypeScriptRxjsClientCodegen.java | 1 - .../src/main/resources/typescript-rxjs/runtime.mustache | 1 - 2 files changed, 2 deletions(-) diff --git a/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/TypeScriptRxjsClientCodegen.java b/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/TypeScriptRxjsClientCodegen.java index 4a4fd2cba63c..701b3deffe9b 100644 --- a/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/TypeScriptRxjsClientCodegen.java +++ b/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/TypeScriptRxjsClientCodegen.java @@ -343,7 +343,6 @@ private void addExtraReservedWords() { this.reservedWords.add("HttpHeaders"); this.reservedWords.add("HttpQuery"); this.reservedWords.add("HttpBody"); - this.reservedWords.add("ModelPropertyNaming"); this.reservedWords.add("RequestArgs"); this.reservedWords.add("RequestOpts"); this.reservedWords.add("ResponseArgs"); diff --git a/modules/openapi-generator/src/main/resources/typescript-rxjs/runtime.mustache b/modules/openapi-generator/src/main/resources/typescript-rxjs/runtime.mustache index 6136d3f62817..a978bd7d2cce 100644 --- a/modules/openapi-generator/src/main/resources/typescript-rxjs/runtime.mustache +++ b/modules/openapi-generator/src/main/resources/typescript-rxjs/runtime.mustache @@ -139,7 +139,6 @@ export type HttpMethod = 'GET' | 'POST' | 'PUT' | 'PATCH' | 'DELETE' | 'OPTIONS' export type HttpHeaders = { [key: string]: string }; export type HttpQuery = Partial<{ [key: string]: string | number | null | boolean | Array }>; // partial is needed for strict mode export type HttpBody = Json | FormData; -export type ModelPropertyNaming = 'camelCase' | 'snake_case' | 'PascalCase' | 'original'; export interface RequestOpts { path: string; From 7292a00ead60f15e4af2c32237fff55c23e350a7 Mon Sep 17 00:00:00 2001 From: Bernd Hacker Date: Fri, 6 Dec 2019 13:09:20 +0100 Subject: [PATCH 16/18] feat(typescript-rxjs): regenerate samples --- .../client/petstore/typescript-rxjs/builds/default/runtime.ts | 1 - .../client/petstore/typescript-rxjs/builds/es6-target/runtime.ts | 1 - .../petstore/typescript-rxjs/builds/with-interfaces/runtime.ts | 1 - .../petstore/typescript-rxjs/builds/with-npm-version/runtime.ts | 1 - 4 files changed, 4 deletions(-) diff --git a/samples/client/petstore/typescript-rxjs/builds/default/runtime.ts b/samples/client/petstore/typescript-rxjs/builds/default/runtime.ts index c2ebc9de3cfd..40d2e7b3947c 100644 --- a/samples/client/petstore/typescript-rxjs/builds/default/runtime.ts +++ b/samples/client/petstore/typescript-rxjs/builds/default/runtime.ts @@ -150,7 +150,6 @@ export type HttpMethod = 'GET' | 'POST' | 'PUT' | 'PATCH' | 'DELETE' | 'OPTIONS' export type HttpHeaders = { [key: string]: string }; export type HttpQuery = Partial<{ [key: string]: string | number | null | boolean | Array }>; // partial is needed for strict mode export type HttpBody = Json | FormData; -export type ModelPropertyNaming = 'camelCase' | 'snake_case' | 'PascalCase' | 'original'; export interface RequestOpts { path: string; diff --git a/samples/client/petstore/typescript-rxjs/builds/es6-target/runtime.ts b/samples/client/petstore/typescript-rxjs/builds/es6-target/runtime.ts index c2ebc9de3cfd..40d2e7b3947c 100644 --- a/samples/client/petstore/typescript-rxjs/builds/es6-target/runtime.ts +++ b/samples/client/petstore/typescript-rxjs/builds/es6-target/runtime.ts @@ -150,7 +150,6 @@ export type HttpMethod = 'GET' | 'POST' | 'PUT' | 'PATCH' | 'DELETE' | 'OPTIONS' export type HttpHeaders = { [key: string]: string }; export type HttpQuery = Partial<{ [key: string]: string | number | null | boolean | Array }>; // partial is needed for strict mode export type HttpBody = Json | FormData; -export type ModelPropertyNaming = 'camelCase' | 'snake_case' | 'PascalCase' | 'original'; export interface RequestOpts { path: string; diff --git a/samples/client/petstore/typescript-rxjs/builds/with-interfaces/runtime.ts b/samples/client/petstore/typescript-rxjs/builds/with-interfaces/runtime.ts index c2ebc9de3cfd..40d2e7b3947c 100644 --- a/samples/client/petstore/typescript-rxjs/builds/with-interfaces/runtime.ts +++ b/samples/client/petstore/typescript-rxjs/builds/with-interfaces/runtime.ts @@ -150,7 +150,6 @@ export type HttpMethod = 'GET' | 'POST' | 'PUT' | 'PATCH' | 'DELETE' | 'OPTIONS' export type HttpHeaders = { [key: string]: string }; export type HttpQuery = Partial<{ [key: string]: string | number | null | boolean | Array }>; // partial is needed for strict mode export type HttpBody = Json | FormData; -export type ModelPropertyNaming = 'camelCase' | 'snake_case' | 'PascalCase' | 'original'; export interface RequestOpts { path: string; diff --git a/samples/client/petstore/typescript-rxjs/builds/with-npm-version/runtime.ts b/samples/client/petstore/typescript-rxjs/builds/with-npm-version/runtime.ts index c2ebc9de3cfd..40d2e7b3947c 100644 --- a/samples/client/petstore/typescript-rxjs/builds/with-npm-version/runtime.ts +++ b/samples/client/petstore/typescript-rxjs/builds/with-npm-version/runtime.ts @@ -150,7 +150,6 @@ export type HttpMethod = 'GET' | 'POST' | 'PUT' | 'PATCH' | 'DELETE' | 'OPTIONS' export type HttpHeaders = { [key: string]: string }; export type HttpQuery = Partial<{ [key: string]: string | number | null | boolean | Array }>; // partial is needed for strict mode export type HttpBody = Json | FormData; -export type ModelPropertyNaming = 'camelCase' | 'snake_case' | 'PascalCase' | 'original'; export interface RequestOpts { path: string; From 0a28db108a3dd29834f091e832527d3f3c2af4ba Mon Sep 17 00:00:00 2001 From: Bernd Hacker Date: Thu, 2 Jan 2020 13:26:45 +0100 Subject: [PATCH 17/18] feat(typescript-rxjs): remove CodegenParamter's paramNameAlternative, use vendorExtensions instead --- .../java/org/openapitools/codegen/CodegenParameter.java | 7 ++----- .../codegen/languages/TypeScriptRxjsClientCodegen.java | 4 ++-- .../src/main/resources/typescript-rxjs/apis.mustache | 2 +- .../resources/typescript-rxjs/paramNamePartial.mustache | 2 +- 4 files changed, 6 insertions(+), 9 deletions(-) diff --git a/modules/openapi-generator/src/main/java/org/openapitools/codegen/CodegenParameter.java b/modules/openapi-generator/src/main/java/org/openapitools/codegen/CodegenParameter.java index b3a0cfbb0ca5..14fb30a86175 100644 --- a/modules/openapi-generator/src/main/java/org/openapitools/codegen/CodegenParameter.java +++ b/modules/openapi-generator/src/main/java/org/openapitools/codegen/CodegenParameter.java @@ -23,7 +23,7 @@ public class CodegenParameter implements IJsonSchemaValidationProperties { public boolean isFormParam, isQueryParam, isPathParam, isHeaderParam, isCookieParam, isBodyParam, hasMore, isContainer, secondaryParam, isCollectionFormatMulti, isPrimitiveType, isModel, isExplode; - public String baseName, paramName, paramNameAlternative, dataType, datatypeWithEnum, dataFormat, + public String baseName, paramName, dataType, datatypeWithEnum, dataFormat, collectionFormat, description, unescapedDescription, baseType, defaultValue, enumName, style; public String example; // example value (x-example) @@ -101,7 +101,6 @@ public CodegenParameter copy() { output.secondaryParam = this.secondaryParam; output.baseName = this.baseName; output.paramName = this.paramName; - output.paramNameAlternative = this.paramNameAlternative; output.dataType = this.dataType; output.datatypeWithEnum = this.datatypeWithEnum; output.enumName = this.enumName; @@ -184,7 +183,7 @@ public CodegenParameter copy() { @Override public int hashCode() { - return Objects.hash(isFormParam, isQueryParam, isPathParam, isHeaderParam, isCookieParam, isBodyParam, hasMore, isContainer, secondaryParam, isCollectionFormatMulti, isPrimitiveType, isModel, isExplode, baseName, paramName, paramNameAlternative, dataType, datatypeWithEnum, dataFormat, collectionFormat, description, unescapedDescription, baseType, defaultValue, enumName, style, example, jsonSchema, isString, isNumeric, isInteger, isLong, isNumber, isFloat, isDouble, isByteArray, isBinary, isBoolean, isDate, isDateTime, isUuid, isUri, isEmail, isFreeFormObject, isListContainer, isMapContainer, isFile, isEnum, _enum, allowableValues, items, mostInnerItems, vendorExtensions, hasValidation, getMaxProperties(), getMinProperties(), isNullable, required, getMaximum(), getExclusiveMaximum(), getMinimum(), getExclusiveMinimum(), getMaxLength(), getMinLength(), getPattern(), getMaxItems(), getMinItems(), getUniqueItems(), multipleOf); + return Objects.hash(isFormParam, isQueryParam, isPathParam, isHeaderParam, isCookieParam, isBodyParam, hasMore, isContainer, secondaryParam, isCollectionFormatMulti, isPrimitiveType, isModel, isExplode, baseName, paramName, dataType, datatypeWithEnum, dataFormat, collectionFormat, description, unescapedDescription, baseType, defaultValue, enumName, style, example, jsonSchema, isString, isNumeric, isInteger, isLong, isNumber, isFloat, isDouble, isByteArray, isBinary, isBoolean, isDate, isDateTime, isUuid, isUri, isEmail, isFreeFormObject, isListContainer, isMapContainer, isFile, isEnum, _enum, allowableValues, items, mostInnerItems, vendorExtensions, hasValidation, getMaxProperties(), getMinProperties(), isNullable, required, getMaximum(), getExclusiveMaximum(), getMinimum(), getExclusiveMinimum(), getMaxLength(), getMinLength(), getPattern(), getMaxItems(), getMinItems(), getUniqueItems(), multipleOf); } @Override @@ -233,7 +232,6 @@ public boolean equals(Object o) { getUniqueItems() == that.getUniqueItems() && Objects.equals(baseName, that.baseName) && Objects.equals(paramName, that.paramName) && - Objects.equals(paramNameAlternative, that.paramNameAlternative) && Objects.equals(dataType, that.dataType) && Objects.equals(datatypeWithEnum, that.datatypeWithEnum) && Objects.equals(dataFormat, that.dataFormat) && @@ -281,7 +279,6 @@ public String toString() { sb.append(", isExplode=").append(isExplode); sb.append(", baseName='").append(baseName).append('\''); sb.append(", paramName='").append(paramName).append('\''); - sb.append(", paramNameAlternative='").append(paramNameAlternative).append('\''); sb.append(", dataType='").append(dataType).append('\''); sb.append(", datatypeWithEnum='").append(datatypeWithEnum).append('\''); sb.append(", dataFormat='").append(dataFormat).append('\''); diff --git a/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/TypeScriptRxjsClientCodegen.java b/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/TypeScriptRxjsClientCodegen.java index 701b3deffe9b..13a074e9fffc 100644 --- a/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/TypeScriptRxjsClientCodegen.java +++ b/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/TypeScriptRxjsClientCodegen.java @@ -254,8 +254,8 @@ private void updateOperationParameterEnumInformation(Map operati } private void setParamNameAlternative(CodegenParameter param, String paramName, String paramNameAlternative) { - if (paramName == param.paramName) { - param.paramNameAlternative = paramNameAlternative; + if (param.paramName.equals(paramName)) { + param.vendorExtensions.put("paramNameAlternative", paramNameAlternative); } } diff --git a/modules/openapi-generator/src/main/resources/typescript-rxjs/apis.mustache b/modules/openapi-generator/src/main/resources/typescript-rxjs/apis.mustache index e58c8f553111..78ef140df225 100644 --- a/modules/openapi-generator/src/main/resources/typescript-rxjs/apis.mustache +++ b/modules/openapi-generator/src/main/resources/typescript-rxjs/apis.mustache @@ -37,7 +37,7 @@ export class {{classname}} extends BaseAPI { * {{&summary}} {{/summary}} */ - {{nickname}} = ({{#allParams.0}}{ {{#allParams}}{{paramName}}{{#paramNameAlternative}}: {{paramNameAlternative}}{{/paramNameAlternative}}{{^-last}}, {{/-last}}{{/allParams}} }: {{operationIdCamelCase}}Request{{/allParams.0}}): Observable<{{#returnType}}{{{returnType}}}{{/returnType}}{{^returnType}}void{{/returnType}}> => { + {{nickname}} = ({{#allParams.0}}{ {{#allParams}}{{paramName}}{{#vendorExtensions.paramNameAlternative}}: {{vendorExtensions.paramNameAlternative}}{{/vendorExtensions.paramNameAlternative}}{{^-last}}, {{/-last}}{{/allParams}} }: {{operationIdCamelCase}}Request{{/allParams.0}}): Observable<{{#returnType}}{{{returnType}}}{{/returnType}}{{^returnType}}void{{/returnType}}> => { {{#hasParams}} {{#allParams}} {{#required}} diff --git a/modules/openapi-generator/src/main/resources/typescript-rxjs/paramNamePartial.mustache b/modules/openapi-generator/src/main/resources/typescript-rxjs/paramNamePartial.mustache index 740b77bc0302..d406033c5935 100644 --- a/modules/openapi-generator/src/main/resources/typescript-rxjs/paramNamePartial.mustache +++ b/modules/openapi-generator/src/main/resources/typescript-rxjs/paramNamePartial.mustache @@ -1,2 +1,2 @@ {{! helper to output the alias of a parameter if provided and to not clutter the main template }} -{{#paramNameAlternative}}{{paramNameAlternative}}{{/paramNameAlternative}}{{^paramNameAlternative}}{{paramName}}{{/paramNameAlternative}} \ No newline at end of file +{{#vendorExtensions.paramNameAlternative}}{{vendorExtensions.paramNameAlternative}}{{/vendorExtensions.paramNameAlternative}}{{^vendorExtensions.paramNameAlternative}}{{paramName}}{{/vendorExtensions.paramNameAlternative}} \ No newline at end of file From e79d4b687d824d3b5cb25c48b67c1a1ca8d27990 Mon Sep 17 00:00:00 2001 From: Bernd Hacker Date: Thu, 23 Jan 2020 08:52:24 +0100 Subject: [PATCH 18/18] docs(typescript-rxjs): regenerate readme --- docs/generators/typescript-rxjs.md | 3 --- 1 file changed, 3 deletions(-) diff --git a/docs/generators/typescript-rxjs.md b/docs/generators/typescript-rxjs.md index 3d8bf8a33180..0516372fef8a 100644 --- a/docs/generators/typescript-rxjs.md +++ b/docs/generators/typescript-rxjs.md @@ -67,10 +67,8 @@ sidebar_label: typescript-rxjs
  • HttpMethod
  • HttpQuery
  • Middleware
  • -
  • ModelPropertyNaming
  • RequestArgs
  • RequestOpts
  • -
  • RequiredError
  • ResponseArgs
  • abstract
  • await
  • @@ -90,7 +88,6 @@ sidebar_label: typescript-rxjs
  • double
  • else
  • enum
  • -
  • exists
  • export
  • extends
  • false