From 95b92ec36a06bcbb8c02197a0abf64f98b5b15e4 Mon Sep 17 00:00:00 2001 From: Richard Goldstein Date: Tue, 22 Sep 2020 13:43:42 -0400 Subject: [PATCH 01/12] Added REQUEST_HOOK and RESPONSE_HOOK to OpenAPI. --- src/templates/core/OpenAPI.hbs | 6 ++++- src/templates/core/request.ts | 11 +++++++-- test/__snapshots__/index.spec.js.snap | 34 ++++++++++++++++++++++----- 3 files changed, 42 insertions(+), 9 deletions(-) diff --git a/src/templates/core/OpenAPI.hbs b/src/templates/core/OpenAPI.hbs index a2dbfef5b..bc51815f2 100644 --- a/src/templates/core/OpenAPI.hbs +++ b/src/templates/core/OpenAPI.hbs @@ -2,12 +2,16 @@ /* tslint:disable */ /* eslint-disable */ +import { Result } from './Result'; + interface Config { BASE: string; VERSION: string; CLIENT: 'fetch' | 'xhr'; WITH_CREDENTIALS: boolean; TOKEN: string; + REQUEST_HOOK?(request: RequestInit): Promise; + RESPONSE_HOOK?(result: Result): Promise } export const OpenAPI: Config = { @@ -15,5 +19,5 @@ export const OpenAPI: Config = { VERSION: '{{{version}}}', CLIENT: '{{{httpClient}}}', WITH_CREDENTIALS: false, - TOKEN: '', + TOKEN: '' }; diff --git a/src/templates/core/request.ts b/src/templates/core/request.ts index 1d17662b8..1fd30a6b1 100644 --- a/src/templates/core/request.ts +++ b/src/templates/core/request.ts @@ -71,13 +71,20 @@ export async function request(options: Readonly): Promise; + RESPONSE_HOOK?(result: Result): Promise } export const OpenAPI: Config = { @@ -78,7 +82,7 @@ export const OpenAPI: Config = { VERSION: '9.0', CLIENT: 'fetch', WITH_CREDENTIALS: false, - TOKEN: '', + TOKEN: '' };" `; @@ -263,13 +267,20 @@ export async function request(options: Readonly): Promise; + RESPONSE_HOOK?(result: Result): Promise } export const OpenAPI: Config = { @@ -2568,7 +2583,7 @@ export const OpenAPI: Config = { VERSION: '1', CLIENT: 'fetch', WITH_CREDENTIALS: false, - TOKEN: '', + TOKEN: '' };" `; @@ -2753,13 +2768,20 @@ export async function request(options: Readonly): Promise Date: Tue, 22 Sep 2020 14:00:45 -0400 Subject: [PATCH 02/12] Add prepare --- package.json | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/package.json b/package.json index d64a801c9..5ceafe891 100644 --- a/package.json +++ b/package.json @@ -57,7 +57,8 @@ "prettier": "prettier \"./src/**/*.ts\" \"./bin/index.js\" --check", "prettier:fix": "prettier \"./src/**/*.ts\" \"./bin/index.js\" --write", "prepublish": "yarn run clean && yarn run release", - "codecov": "codecov --token=66c30c23-8954-4892-bef9-fbaed0a2e42b" + "codecov": "codecov --token=66c30c23-8954-4892-bef9-fbaed0a2e42b", + "prepare": "yarn run release" }, "dependencies": { "camelcase": "6.0.0", From 271ff5baec4469f7b58f2684e0d69e4750ca9d1d Mon Sep 17 00:00:00 2001 From: Richard Goldstein Date: Tue, 22 Sep 2020 14:01:56 -0400 Subject: [PATCH 03/12] npm for our builds --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 5ceafe891..6dbea970b 100644 --- a/package.json +++ b/package.json @@ -58,7 +58,7 @@ "prettier:fix": "prettier \"./src/**/*.ts\" \"./bin/index.js\" --write", "prepublish": "yarn run clean && yarn run release", "codecov": "codecov --token=66c30c23-8954-4892-bef9-fbaed0a2e42b", - "prepare": "yarn run release" + "prepare": "npm run release" }, "dependencies": { "camelcase": "6.0.0", From 1a8eedf595c57338137ad7910f8445faf59d29e9 Mon Sep 17 00:00:00 2001 From: Richard Goldstein Date: Tue, 22 Sep 2020 14:38:08 -0400 Subject: [PATCH 04/12] Refactor Hooks --- src/templates/core/OpenAPI.hbs | 15 +++++++++++++-- src/templates/core/Result.ts | 1 + src/templates/core/request.ts | 14 ++++++-------- src/templates/core/requestUsingFetch.ts | 3 ++- src/templates/core/requestUsingXHR.ts | 3 ++- 5 files changed, 24 insertions(+), 12 deletions(-) diff --git a/src/templates/core/OpenAPI.hbs b/src/templates/core/OpenAPI.hbs index bc51815f2..62afa63cf 100644 --- a/src/templates/core/OpenAPI.hbs +++ b/src/templates/core/OpenAPI.hbs @@ -4,14 +4,25 @@ import { Result } from './Result'; +export interface RequestHookParams { + url: string; + request: RequestInit; + responseHeader: string|undefined; +} + +export interface ResponseHookParams { + url: string; + result: Result; +} + interface Config { BASE: string; VERSION: string; CLIENT: 'fetch' | 'xhr'; WITH_CREDENTIALS: boolean; TOKEN: string; - REQUEST_HOOK?(request: RequestInit): Promise; - RESPONSE_HOOK?(result: Result): Promise + REQUEST_HOOK?(params: RequestHookParams): Promise; + RESPONSE_HOOK?(result: ResponseHookParams): Promise } export const OpenAPI: Config = { diff --git a/src/templates/core/Result.ts b/src/templates/core/Result.ts index 330d5416f..5875d7efd 100644 --- a/src/templates/core/Result.ts +++ b/src/templates/core/Result.ts @@ -8,4 +8,5 @@ export interface Result { status: number; statusText: string; body: any; + response?: Response|XMLHttpRequest; } diff --git a/src/templates/core/request.ts b/src/templates/core/request.ts index 1fd30a6b1..3acea58fb 100644 --- a/src/templates/core/request.ts +++ b/src/templates/core/request.ts @@ -4,7 +4,7 @@ import { getFormData } from './getFormData'; import { getQueryString } from './getQueryString'; -import { OpenAPI } from './OpenAPI'; +import { OpenAPI, RequestHookParams, ResponseHookParams } from './OpenAPI'; import { RequestOptions } from './RequestOptions'; import { requestUsingFetch } from './requestUsingFetch'; import { requestUsingXHR } from './requestUsingXHR'; @@ -73,18 +73,16 @@ export async function request(options: Readonly): Promise, responseHeader?: string): Promise { +export async function requestUsingFetch(url: string, request: Readonly, responseHeader?: string, includeResponse?: boolean): Promise { // Fetch response using fetch API. const response = await fetch(url, request); @@ -68,5 +68,6 @@ export async function requestUsingFetch(url: string, request: Readonly, responseHeader?: string): Promise { +export async function requestUsingXHR(url: string, request: Readonly, responseHeader?: string, includeResponse?: boolean): Promise { return new Promise(resolve => { const xhr = new XMLHttpRequest(); @@ -88,6 +88,7 @@ export async function requestUsingXHR(url: string, request: Readonly Date: Wed, 18 Nov 2020 13:53:34 -0500 Subject: [PATCH 05/12] UPdate from Fork and impleneht hooks --- src/templates/core/ApiResult.hbs | 1 + src/templates/core/OpenAPI.hbs | 9 ++-- src/templates/core/fetch/request.hbs | 19 +++++-- src/templates/core/node/request.hbs | 12 ++++- src/templates/core/xhr/request.hbs | 16 ++++-- test/__snapshots__/index.spec.js.snap | 72 ++++++++++++++++++++++++--- 6 files changed, 111 insertions(+), 18 deletions(-) diff --git a/src/templates/core/ApiResult.hbs b/src/templates/core/ApiResult.hbs index 1a9f8533b..cd1a9f1ec 100644 --- a/src/templates/core/ApiResult.hbs +++ b/src/templates/core/ApiResult.hbs @@ -6,4 +6,5 @@ export interface ApiResult { readonly status: number; readonly statusText: string; readonly body: any; + readonly response?: any; } diff --git a/src/templates/core/OpenAPI.hbs b/src/templates/core/OpenAPI.hbs index 97a4a611c..cabab9a69 100644 --- a/src/templates/core/OpenAPI.hbs +++ b/src/templates/core/OpenAPI.hbs @@ -3,17 +3,18 @@ type Resolver = () => Promise; type Headers = Record; -import { Result } from './Result'; +import { ApiResult } from './ApiResult'; +import { ApiRequestOptions } from './ApiRequestOptions'; export interface RequestHookParams { url: string; - request: RequestInit; + request: ApiRequestOptions; responseHeader: string|undefined; } export interface ResponseHookParams { url: string; - result: Result; + result: ApiResult; } interface Config { @@ -21,7 +22,7 @@ interface Config { VERSION: string; WITH_CREDENTIALS: boolean; REQUEST_HOOK?(params: RequestHookParams): Promise; - RESPONSE_HOOK?(result: ResponseHookParams): Promise + RESPONSE_HOOK?(result: ResponseHookParams): Promise TOKEN?: string | Resolver; USERNAME?: string | Resolver; PASSWORD?: string | Resolver; diff --git a/src/templates/core/fetch/request.hbs b/src/templates/core/fetch/request.hbs index 5e6f47e23..ffb36828d 100644 --- a/src/templates/core/fetch/request.hbs +++ b/src/templates/core/fetch/request.hbs @@ -55,18 +55,31 @@ import { OpenAPI } from './OpenAPI'; */ export async function request(options: ApiRequestOptions): Promise { const url = getUrl(options); - const response = await sendRequest(options, url); + + // Pre-hook on request if a function is provided. + const requestHookResult = OpenAPI.REQUEST_HOOK ? + (await OpenAPI.REQUEST_HOOK({ url, request: options, responseHeader: options.responseHeader})) : + { url, options, responseHeader: options.responseHeader}; + + + const response = await sendRequest(requestHookResult.options, requestHookResult.url); const responseBody = await getResponseBody(response); - const responseHeader = getResponseHeader(response, options.responseHeader); + const responseHeader = getResponseHeader(response, requestHookResult.options.responseHeader); + - const result: ApiResult = { + let result: ApiResult = { url, ok: response.ok, status: response.status, statusText: response.statusText, body: responseHeader || responseBody, + response }; + result = OpenAPI.RESPONSE_HOOK ? await OpenAPI.RESPONSE_HOOK({url, result}) : result; + catchErrors(options, result); + + return result; } diff --git a/src/templates/core/node/request.hbs b/src/templates/core/node/request.hbs index 2c3a52478..78e3baf7f 100644 --- a/src/templates/core/node/request.hbs +++ b/src/templates/core/node/request.hbs @@ -59,9 +59,15 @@ import { OpenAPI } from './OpenAPI'; */ export async function request(options: ApiRequestOptions): Promise { const url = getUrl(options); - const response = await sendRequest(options, url); + + // Pre-hook on request if a function is provided. + const requestHookResult = OpenAPI.REQUEST_HOOK ? + (await OpenAPI.REQUEST_HOOK({ url, request: options, responseHeader: options.responseHeader})) : + { url, options, responseHeader: options.responseHeader}; + + const response = await sendRequest(requestHookResult.options, requestHookResult.url); const responseBody = await getResponseBody(response); - const responseHeader = getResponseHeader(response, options.responseHeader); + const responseHeader = getResponseHeader(response, requestHookResult.options.responseHeader); const result: ApiResult = { url, @@ -69,7 +75,9 @@ export async function request(options: ApiRequestOptions): Promise { status: response.status, statusText: response.statusText, body: responseHeader || responseBody, + response }; + result = OpenAPI.RESPONSE_HOOK ? await OpenAPI.RESPONSE_HOOK({url, result}) : result; catchErrors(options, result); return result; diff --git a/src/templates/core/xhr/request.hbs b/src/templates/core/xhr/request.hbs index 88f05c6df..87f3aa5c7 100644 --- a/src/templates/core/xhr/request.hbs +++ b/src/templates/core/xhr/request.hbs @@ -58,9 +58,16 @@ import { OpenAPI } from './OpenAPI'; */ export async function request(options: ApiRequestOptions): Promise { const url = getUrl(options); - const response = await sendRequest(options, url); - const responseBody = getResponseBody(response); - const responseHeader = getResponseHeader(response, options.responseHeader); + + // Pre-hook on request if a function is provided. + const requestHookResult = OpenAPI.REQUEST_HOOK ? + (await OpenAPI.REQUEST_HOOK({ url, request: options, responseHeader: options.responseHeader})) : + { url, options, responseHeader: options.responseHeader}; + + const response = await sendRequest(requestHookResult.options, requestHookResult.url); + const responseBody = await getResponseBody(response); + const responseHeader = getResponseHeader(response, requestHookResult.options.responseHeader); + const result: ApiResult = { url, @@ -68,8 +75,11 @@ export async function request(options: ApiRequestOptions): Promise { status: response.status, statusText: response.statusText, body: responseHeader || responseBody, + response }; + result = OpenAPI.RESPONSE_HOOK ? await OpenAPI.RESPONSE_HOOK({url, result}) : result; + catchErrors(options, result); return result; } diff --git a/test/__snapshots__/index.spec.js.snap b/test/__snapshots__/index.spec.js.snap index 8e8eb9e24..ef90a5bc3 100644 --- a/test/__snapshots__/index.spec.js.snap +++ b/test/__snapshots__/index.spec.js.snap @@ -50,6 +50,7 @@ export interface ApiResult { readonly status: number; readonly statusText: string; readonly body: any; + readonly response?: any; }" `; @@ -60,10 +61,26 @@ exports[`v2 should generate: ./test/generated/v2/core/OpenAPI.ts 1`] = ` type Resolver = () => Promise; type Headers = Record; +import { ApiResult } from './ApiResult'; +import { ApiRequestOptions } from './ApiRequestOptions'; + +export interface RequestHookParams { + url: string; + request: ApiRequestOptions; + responseHeader: string|undefined; +} + +export interface ResponseHookParams { + url: string; + result: ApiResult; +} + interface Config { BASE: string; VERSION: string; WITH_CREDENTIALS: boolean; + REQUEST_HOOK?(params: RequestHookParams): Promise; + RESPONSE_HOOK?(result: ResponseHookParams): Promise TOKEN?: string | Resolver; USERNAME?: string | Resolver; PASSWORD?: string | Resolver; @@ -268,19 +285,32 @@ function catchErrors(options: ApiRequestOptions, result: ApiResult): void { */ export async function request(options: ApiRequestOptions): Promise { const url = getUrl(options); - const response = await sendRequest(options, url); + + // Pre-hook on request if a function is provided. + const requestHookResult = OpenAPI.REQUEST_HOOK ? + (await OpenAPI.REQUEST_HOOK({ url, request: options, responseHeader: options.responseHeader})) : + { url, options, responseHeader: options.responseHeader}; + + + const response = await sendRequest(requestHookResult.options, requestHookResult.url); const responseBody = await getResponseBody(response); - const responseHeader = getResponseHeader(response, options.responseHeader); + const responseHeader = getResponseHeader(response, requestHookResult.options.responseHeader); + - const result: ApiResult = { + let result: ApiResult = { url, ok: response.ok, status: response.status, statusText: response.statusText, body: responseHeader || responseBody, + response }; + result = OpenAPI.RESPONSE_HOOK ? await OpenAPI.RESPONSE_HOOK({url, result}) : result; + catchErrors(options, result); + + return result; } @@ -2394,6 +2424,7 @@ export interface ApiResult { readonly status: number; readonly statusText: string; readonly body: any; + readonly response?: any; }" `; @@ -2404,10 +2435,26 @@ exports[`v3 should generate: ./test/generated/v3/core/OpenAPI.ts 1`] = ` type Resolver = () => Promise; type Headers = Record; +import { ApiResult } from './ApiResult'; +import { ApiRequestOptions } from './ApiRequestOptions'; + +export interface RequestHookParams { + url: string; + request: ApiRequestOptions; + responseHeader: string|undefined; +} + +export interface ResponseHookParams { + url: string; + result: ApiResult; +} + interface Config { BASE: string; VERSION: string; WITH_CREDENTIALS: boolean; + REQUEST_HOOK?(params: RequestHookParams): Promise; + RESPONSE_HOOK?(result: ResponseHookParams): Promise TOKEN?: string | Resolver; USERNAME?: string | Resolver; PASSWORD?: string | Resolver; @@ -2612,19 +2659,32 @@ function catchErrors(options: ApiRequestOptions, result: ApiResult): void { */ export async function request(options: ApiRequestOptions): Promise { const url = getUrl(options); - const response = await sendRequest(options, url); + + // Pre-hook on request if a function is provided. + const requestHookResult = OpenAPI.REQUEST_HOOK ? + (await OpenAPI.REQUEST_HOOK({ url, request: options, responseHeader: options.responseHeader})) : + { url, options, responseHeader: options.responseHeader}; + + + const response = await sendRequest(requestHookResult.options, requestHookResult.url); const responseBody = await getResponseBody(response); - const responseHeader = getResponseHeader(response, options.responseHeader); + const responseHeader = getResponseHeader(response, requestHookResult.options.responseHeader); + - const result: ApiResult = { + let result: ApiResult = { url, ok: response.ok, status: response.status, statusText: response.statusText, body: responseHeader || responseBody, + response }; + result = OpenAPI.RESPONSE_HOOK ? await OpenAPI.RESPONSE_HOOK({url, result}) : result; + catchErrors(options, result); + + return result; } From 8685b67a5e24c6ea1342713cd2f7b4f3d1e9262a Mon Sep 17 00:00:00 2001 From: Richard Goldstein Date: Wed, 18 Nov 2020 14:04:29 -0500 Subject: [PATCH 06/12] Fic issue with field names in request --- src/templates/core/OpenAPI.hbs | 2 +- src/templates/core/fetch/request.hbs | 2 +- src/templates/core/node/request.hbs | 2 +- src/templates/core/xhr/request.hbs | 2 +- 4 files changed, 4 insertions(+), 4 deletions(-) diff --git a/src/templates/core/OpenAPI.hbs b/src/templates/core/OpenAPI.hbs index cabab9a69..e9812cf00 100644 --- a/src/templates/core/OpenAPI.hbs +++ b/src/templates/core/OpenAPI.hbs @@ -8,7 +8,7 @@ import { ApiRequestOptions } from './ApiRequestOptions'; export interface RequestHookParams { url: string; - request: ApiRequestOptions; + options: ApiRequestOptions; responseHeader: string|undefined; } diff --git a/src/templates/core/fetch/request.hbs b/src/templates/core/fetch/request.hbs index ffb36828d..e3b665ded 100644 --- a/src/templates/core/fetch/request.hbs +++ b/src/templates/core/fetch/request.hbs @@ -58,7 +58,7 @@ export async function request(options: ApiRequestOptions): Promise { // Pre-hook on request if a function is provided. const requestHookResult = OpenAPI.REQUEST_HOOK ? - (await OpenAPI.REQUEST_HOOK({ url, request: options, responseHeader: options.responseHeader})) : + (await OpenAPI.REQUEST_HOOK({ url, options, responseHeader: options.responseHeader})) : { url, options, responseHeader: options.responseHeader}; diff --git a/src/templates/core/node/request.hbs b/src/templates/core/node/request.hbs index 78e3baf7f..e932a2fbe 100644 --- a/src/templates/core/node/request.hbs +++ b/src/templates/core/node/request.hbs @@ -62,7 +62,7 @@ export async function request(options: ApiRequestOptions): Promise { // Pre-hook on request if a function is provided. const requestHookResult = OpenAPI.REQUEST_HOOK ? - (await OpenAPI.REQUEST_HOOK({ url, request: options, responseHeader: options.responseHeader})) : + (await OpenAPI.REQUEST_HOOK({ url, options, responseHeader: options.responseHeader})) : { url, options, responseHeader: options.responseHeader}; const response = await sendRequest(requestHookResult.options, requestHookResult.url); diff --git a/src/templates/core/xhr/request.hbs b/src/templates/core/xhr/request.hbs index 87f3aa5c7..6ae47503b 100644 --- a/src/templates/core/xhr/request.hbs +++ b/src/templates/core/xhr/request.hbs @@ -61,7 +61,7 @@ export async function request(options: ApiRequestOptions): Promise { // Pre-hook on request if a function is provided. const requestHookResult = OpenAPI.REQUEST_HOOK ? - (await OpenAPI.REQUEST_HOOK({ url, request: options, responseHeader: options.responseHeader})) : + (await OpenAPI.REQUEST_HOOK({ url, options, responseHeader: options.responseHeader})) : { url, options, responseHeader: options.responseHeader}; const response = await sendRequest(requestHookResult.options, requestHookResult.url); From daaea3a6c9b35f1c2742220f9d3f1a38b5092eb9 Mon Sep 17 00:00:00 2001 From: Richard Goldstein Date: Thu, 19 Nov 2020 09:56:42 -0500 Subject: [PATCH 07/12] Move response to hook only --- src/templates/core/ApiResult.hbs | 1 - src/templates/core/OpenAPI.hbs | 2 +- src/templates/core/fetch/request.hbs | 9 ++++----- src/templates/core/node/request.hbs | 10 +++++----- src/templates/core/xhr/request.hbs | 9 ++++----- test/__snapshots__/index.spec.js.snap | 28 ++++++++++++--------------- 6 files changed, 26 insertions(+), 33 deletions(-) diff --git a/src/templates/core/ApiResult.hbs b/src/templates/core/ApiResult.hbs index cd1a9f1ec..1a9f8533b 100644 --- a/src/templates/core/ApiResult.hbs +++ b/src/templates/core/ApiResult.hbs @@ -6,5 +6,4 @@ export interface ApiResult { readonly status: number; readonly statusText: string; readonly body: any; - readonly response?: any; } diff --git a/src/templates/core/OpenAPI.hbs b/src/templates/core/OpenAPI.hbs index e9812cf00..ed4286ffb 100644 --- a/src/templates/core/OpenAPI.hbs +++ b/src/templates/core/OpenAPI.hbs @@ -9,12 +9,12 @@ import { ApiRequestOptions } from './ApiRequestOptions'; export interface RequestHookParams { url: string; options: ApiRequestOptions; - responseHeader: string|undefined; } export interface ResponseHookParams { url: string; result: ApiResult; + response?: any; } interface Config { diff --git a/src/templates/core/fetch/request.hbs b/src/templates/core/fetch/request.hbs index e3b665ded..03721670d 100644 --- a/src/templates/core/fetch/request.hbs +++ b/src/templates/core/fetch/request.hbs @@ -58,8 +58,7 @@ export async function request(options: ApiRequestOptions): Promise { // Pre-hook on request if a function is provided. const requestHookResult = OpenAPI.REQUEST_HOOK ? - (await OpenAPI.REQUEST_HOOK({ url, options, responseHeader: options.responseHeader})) : - { url, options, responseHeader: options.responseHeader}; + (await OpenAPI.REQUEST_HOOK({ url, options})) : { url, options }; const response = await sendRequest(requestHookResult.options, requestHookResult.url); @@ -72,11 +71,11 @@ export async function request(options: ApiRequestOptions): Promise { ok: response.ok, status: response.status, statusText: response.statusText, - body: responseHeader || responseBody, - response + body: responseHeader || responseBody }; - result = OpenAPI.RESPONSE_HOOK ? await OpenAPI.RESPONSE_HOOK({url, result}) : result; + // Post-request Hook if provided + result = OpenAPI.RESPONSE_HOOK ? await OpenAPI.RESPONSE_HOOK({url, result, response}) : result; catchErrors(options, result); diff --git a/src/templates/core/node/request.hbs b/src/templates/core/node/request.hbs index e932a2fbe..18532dfd4 100644 --- a/src/templates/core/node/request.hbs +++ b/src/templates/core/node/request.hbs @@ -62,8 +62,7 @@ export async function request(options: ApiRequestOptions): Promise { // Pre-hook on request if a function is provided. const requestHookResult = OpenAPI.REQUEST_HOOK ? - (await OpenAPI.REQUEST_HOOK({ url, options, responseHeader: options.responseHeader})) : - { url, options, responseHeader: options.responseHeader}; + (await OpenAPI.REQUEST_HOOK({ url, options})) : { url, options }; const response = await sendRequest(requestHookResult.options, requestHookResult.url); const responseBody = await getResponseBody(response); @@ -74,10 +73,11 @@ export async function request(options: ApiRequestOptions): Promise { ok: response.ok, status: response.status, statusText: response.statusText, - body: responseHeader || responseBody, - response + body: responseHeader || responseBody }; - result = OpenAPI.RESPONSE_HOOK ? await OpenAPI.RESPONSE_HOOK({url, result}) : result; + + // Post-request Hook if provided + result = OpenAPI.RESPONSE_HOOK ? await OpenAPI.RESPONSE_HOOK({url, result, response}) : result; catchErrors(options, result); return result; diff --git a/src/templates/core/xhr/request.hbs b/src/templates/core/xhr/request.hbs index 6ae47503b..5755f2da7 100644 --- a/src/templates/core/xhr/request.hbs +++ b/src/templates/core/xhr/request.hbs @@ -61,8 +61,7 @@ export async function request(options: ApiRequestOptions): Promise { // Pre-hook on request if a function is provided. const requestHookResult = OpenAPI.REQUEST_HOOK ? - (await OpenAPI.REQUEST_HOOK({ url, options, responseHeader: options.responseHeader})) : - { url, options, responseHeader: options.responseHeader}; + (await OpenAPI.REQUEST_HOOK({ url, options})) : { url, options }; const response = await sendRequest(requestHookResult.options, requestHookResult.url); const responseBody = await getResponseBody(response); @@ -74,11 +73,11 @@ export async function request(options: ApiRequestOptions): Promise { ok: isSuccess(response.status), status: response.status, statusText: response.statusText, - body: responseHeader || responseBody, - response + body: responseHeader || responseBody }; - result = OpenAPI.RESPONSE_HOOK ? await OpenAPI.RESPONSE_HOOK({url, result}) : result; + // Post-request Hook if provided + result = OpenAPI.RESPONSE_HOOK ? await OpenAPI.RESPONSE_HOOK({url, result, response}) : result; catchErrors(options, result); return result; diff --git a/test/__snapshots__/index.spec.js.snap b/test/__snapshots__/index.spec.js.snap index ef90a5bc3..dba8ee31f 100644 --- a/test/__snapshots__/index.spec.js.snap +++ b/test/__snapshots__/index.spec.js.snap @@ -50,7 +50,6 @@ export interface ApiResult { readonly status: number; readonly statusText: string; readonly body: any; - readonly response?: any; }" `; @@ -66,13 +65,13 @@ import { ApiRequestOptions } from './ApiRequestOptions'; export interface RequestHookParams { url: string; - request: ApiRequestOptions; - responseHeader: string|undefined; + options: ApiRequestOptions; } export interface ResponseHookParams { url: string; result: ApiResult; + response?: any; } interface Config { @@ -288,8 +287,7 @@ export async function request(options: ApiRequestOptions): Promise { // Pre-hook on request if a function is provided. const requestHookResult = OpenAPI.REQUEST_HOOK ? - (await OpenAPI.REQUEST_HOOK({ url, request: options, responseHeader: options.responseHeader})) : - { url, options, responseHeader: options.responseHeader}; + (await OpenAPI.REQUEST_HOOK({ url, options})) : { url, options }; const response = await sendRequest(requestHookResult.options, requestHookResult.url); @@ -302,11 +300,11 @@ export async function request(options: ApiRequestOptions): Promise { ok: response.ok, status: response.status, statusText: response.statusText, - body: responseHeader || responseBody, - response + body: responseHeader || responseBody }; - result = OpenAPI.RESPONSE_HOOK ? await OpenAPI.RESPONSE_HOOK({url, result}) : result; + // Post-request Hook if provided + result = OpenAPI.RESPONSE_HOOK ? await OpenAPI.RESPONSE_HOOK({url, result, response}) : result; catchErrors(options, result); @@ -2424,7 +2422,6 @@ export interface ApiResult { readonly status: number; readonly statusText: string; readonly body: any; - readonly response?: any; }" `; @@ -2440,13 +2437,13 @@ import { ApiRequestOptions } from './ApiRequestOptions'; export interface RequestHookParams { url: string; - request: ApiRequestOptions; - responseHeader: string|undefined; + options: ApiRequestOptions; } export interface ResponseHookParams { url: string; result: ApiResult; + response?: any; } interface Config { @@ -2662,8 +2659,7 @@ export async function request(options: ApiRequestOptions): Promise { // Pre-hook on request if a function is provided. const requestHookResult = OpenAPI.REQUEST_HOOK ? - (await OpenAPI.REQUEST_HOOK({ url, request: options, responseHeader: options.responseHeader})) : - { url, options, responseHeader: options.responseHeader}; + (await OpenAPI.REQUEST_HOOK({ url, options})) : { url, options }; const response = await sendRequest(requestHookResult.options, requestHookResult.url); @@ -2676,11 +2672,11 @@ export async function request(options: ApiRequestOptions): Promise { ok: response.ok, status: response.status, statusText: response.statusText, - body: responseHeader || responseBody, - response + body: responseHeader || responseBody }; - result = OpenAPI.RESPONSE_HOOK ? await OpenAPI.RESPONSE_HOOK({url, result}) : result; + // Post-request Hook if provided + result = OpenAPI.RESPONSE_HOOK ? await OpenAPI.RESPONSE_HOOK({url, result, response}) : result; catchErrors(options, result); From 9e18865a1ad69bcf5df887184a3b4bc446c1ca13 Mon Sep 17 00:00:00 2001 From: Richard Goldstein Date: Thu, 19 Nov 2020 10:26:01 -0500 Subject: [PATCH 08/12] Revert changes to package.json --- package.json | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/package.json b/package.json index 8ff5bd499..b8ac76ca5 100644 --- a/package.json +++ b/package.json @@ -59,8 +59,7 @@ "prettier": "prettier \"./src/**/*.ts\" \"./bin/index.js\" \"./types/index.d.ts\" --check", "prettier:fix": "prettier \"./src/**/*.ts\" \"./bin/index.js\" \"./types/index.d.ts\" --write", "prepublish": "yarn run clean && yarn run release", - "codecov": "codecov --token=66c30c23-8954-4892-bef9-fbaed0a2e42b", - "prepare": "npm run release" + "codecov": "codecov --token=66c30c23-8954-4892-bef9-fbaed0a2e42b" }, "dependencies": { "camelcase": "6.2.0", From cace20c261f6aad08104cf188237e3820f4e7120 Mon Sep 17 00:00:00 2001 From: Richard Goldstein Date: Thu, 19 Nov 2020 14:50:57 -0500 Subject: [PATCH 09/12] Update snapshot --- test/__snapshots__/index.spec.js.snap | 443 +++++++++++++------------- 1 file changed, 221 insertions(+), 222 deletions(-) diff --git a/test/__snapshots__/index.spec.js.snap b/test/__snapshots__/index.spec.js.snap index b54765f73..102287987 100644 --- a/test/__snapshots__/index.spec.js.snap +++ b/test/__snapshots__/index.spec.js.snap @@ -27,7 +27,7 @@ exports[`v2 should generate: ./test/generated/v2/core/ApiRequestOptions.ts 1`] = "/* istanbul ignore file */ /* tslint:disable */ /* eslint-disable */ -export interface ApiRequestOptions { +export type ApiRequestOptions = { readonly method: 'GET' | 'PUT' | 'POST' | 'DELETE' | 'OPTIONS' | 'HEAD' | 'PATCH'; readonly path: string; readonly cookies?: Record; @@ -44,7 +44,7 @@ exports[`v2 should generate: ./test/generated/v2/core/ApiResult.ts 1`] = ` "/* istanbul ignore file */ /* tslint:disable */ /* eslint-disable */ -export interface ApiResult { +export type ApiResult = { readonly url: string; readonly ok: boolean; readonly status: number; @@ -74,7 +74,7 @@ export interface ResponseHookParams { response?: any; } -interface Config { +type Config = { BASE: string; VERSION: string; WITH_CREDENTIALS: boolean; @@ -644,11 +644,10 @@ import type { ModelWithString } from './ModelWithString'; /** * This is a model that extends another model */ -export interface ModelThatExtends extends ModelWithString { - propExtendsA?: string; - propExtendsB?: ModelWithString; -} -" +export type ModelThatExtends = (ModelWithString & { + propExtendsA?: string, + propExtendsB?: ModelWithString, +});" `; exports[`v2 should generate: ./test/generated/v2/models/ModelThatExtendsExtends.ts 1`] = ` @@ -662,11 +661,10 @@ import type { ModelWithString } from './ModelWithString'; /** * This is a model that extends another model */ -export interface ModelThatExtendsExtends extends ModelWithString, ModelThatExtends { - propExtendsC?: string; - propExtendsD?: ModelWithString; -} -" +export type ModelThatExtendsExtends = (ModelWithString & ModelThatExtends & { + propExtendsC?: string, + propExtendsD?: ModelWithString, +});" `; exports[`v2 should generate: ./test/generated/v2/models/ModelWithArray.ts 1`] = ` @@ -679,7 +677,7 @@ import type { ModelWithString } from './ModelWithString'; /** * This is a model with one property containing an array */ -export interface ModelWithArray { +export type ModelWithArray = { prop?: Array; propWithFile?: Array; propWithNumber?: Array; @@ -695,7 +693,7 @@ exports[`v2 should generate: ./test/generated/v2/models/ModelWithBoolean.ts 1`] /** * This is a model with one boolean property */ -export interface ModelWithBoolean { +export type ModelWithBoolean = { /** * This is a simple boolean property */ @@ -712,7 +710,7 @@ exports[`v2 should generate: ./test/generated/v2/models/ModelWithCircularReferen /** * This is a model with one property containing a circular reference */ -export interface ModelWithCircularReference { +export type ModelWithCircularReference = { prop?: ModelWithCircularReference; } " @@ -726,7 +724,7 @@ exports[`v2 should generate: ./test/generated/v2/models/ModelWithDictionary.ts 1 /** * This is a model with one property containing a dictionary */ -export interface ModelWithDictionary { +export type ModelWithDictionary = { prop?: Record; } " @@ -742,7 +740,7 @@ import type { ModelWithString } from './ModelWithString'; /** * This is a model with duplicated imports */ -export interface ModelWithDuplicateImports { +export type ModelWithDuplicateImports = { propA?: ModelWithString; propB?: ModelWithString; propC?: ModelWithString; @@ -760,7 +758,7 @@ import type { ModelWithString } from './ModelWithString'; /** * This is a model with duplicated properties */ -export interface ModelWithDuplicateProperties { +export type ModelWithDuplicateProperties = { prop?: ModelWithString; } " @@ -774,7 +772,7 @@ exports[`v2 should generate: ./test/generated/v2/models/ModelWithEnum.ts 1`] = ` /** * This is a model with one enum */ -export interface ModelWithEnum { +export type ModelWithEnum = { /** * This is a simple enum with strings */ @@ -821,7 +819,7 @@ exports[`v2 should generate: ./test/generated/v2/models/ModelWithEnumFromDescrip /** * This is a model with one enum */ -export interface ModelWithEnumFromDescription { +export type ModelWithEnumFromDescription = { /** * Success=1,Warning=2,Error=3 */ @@ -852,7 +850,7 @@ exports[`v2 should generate: ./test/generated/v2/models/ModelWithInteger.ts 1`] /** * This is a model with one number property */ -export interface ModelWithInteger { +export type ModelWithInteger = { /** * This is a simple number property */ @@ -869,7 +867,7 @@ exports[`v2 should generate: ./test/generated/v2/models/ModelWithNestedEnums.ts /** * This is a model with nested enums */ -export interface ModelWithNestedEnums { +export type ModelWithNestedEnums = { dictionaryWithEnum?: Record; dictionaryWithEnumFromDescription?: Record; arrayWithEnum?: Array<'Success' | 'Warning' | 'Error'>; @@ -886,7 +884,7 @@ exports[`v2 should generate: ./test/generated/v2/models/ModelWithNestedPropertie /** * This is a model with one nested property */ -export interface ModelWithNestedProperties { +export type ModelWithNestedProperties = { readonly first: { readonly second: { readonly third: string, @@ -904,7 +902,7 @@ exports[`v2 should generate: ./test/generated/v2/models/ModelWithNullableString. /** * This is a model with one string property */ -export interface ModelWithNullableString { +export type ModelWithNullableString = { /** * This is a simple string property */ @@ -925,7 +923,7 @@ exports[`v2 should generate: ./test/generated/v2/models/ModelWithOrderedProperti /** * This is a model with ordered properties */ -export interface ModelWithOrderedProperties { +export type ModelWithOrderedProperties = { zebra?: string; apple?: string; hawaii?: string; @@ -941,7 +939,7 @@ exports[`v2 should generate: ./test/generated/v2/models/ModelWithPattern.ts 1`] /** * This is a model that contains a some patterns */ -export interface ModelWithPattern { +export type ModelWithPattern = { key: string; name: string; readonly enabled?: boolean; @@ -962,7 +960,7 @@ import type { ModelWithString } from './ModelWithString'; /** * This is a model with one nested property */ -export interface ModelWithProperties { +export type ModelWithProperties = { required: string; readonly requiredAndReadOnly: string; string?: string; @@ -985,7 +983,7 @@ import type { ModelWithProperties } from './ModelWithProperties'; /** * This is a model with one property containing a reference */ -export interface ModelWithReference { +export type ModelWithReference = { prop?: ModelWithProperties; } " @@ -999,7 +997,7 @@ exports[`v2 should generate: ./test/generated/v2/models/ModelWithString.ts 1`] = /** * This is a model with one string property */ -export interface ModelWithString { +export type ModelWithString = { /** * This is a simple string property */ @@ -1094,7 +1092,6 @@ exports[`v2 should generate: ./test/generated/v2/schemas/$ArrayWithArray.ts 1`] "/* istanbul ignore file */ /* tslint:disable */ /* eslint-disable */ - export const $ArrayWithArray = { type: 'array', contains: { @@ -1110,7 +1107,6 @@ exports[`v2 should generate: ./test/generated/v2/schemas/$ArrayWithBooleans.ts 1 "/* istanbul ignore file */ /* tslint:disable */ /* eslint-disable */ - export const $ArrayWithBooleans = { type: 'array', contains: { @@ -1123,7 +1119,6 @@ exports[`v2 should generate: ./test/generated/v2/schemas/$ArrayWithNumbers.ts 1` "/* istanbul ignore file */ /* tslint:disable */ /* eslint-disable */ - export const $ArrayWithNumbers = { type: 'array', contains: { @@ -1136,7 +1131,6 @@ exports[`v2 should generate: ./test/generated/v2/schemas/$ArrayWithProperties.ts "/* istanbul ignore file */ /* tslint:disable */ /* eslint-disable */ - export const $ArrayWithProperties = { type: 'array', contains: { @@ -1156,7 +1150,6 @@ exports[`v2 should generate: ./test/generated/v2/schemas/$ArrayWithReferences.ts "/* istanbul ignore file */ /* tslint:disable */ /* eslint-disable */ - export const $ArrayWithReferences = { type: 'array', contains: { @@ -1169,7 +1162,6 @@ exports[`v2 should generate: ./test/generated/v2/schemas/$ArrayWithStrings.ts 1` "/* istanbul ignore file */ /* tslint:disable */ /* eslint-disable */ - export const $ArrayWithStrings = { type: 'array', contains: { @@ -1182,7 +1174,6 @@ exports[`v2 should generate: ./test/generated/v2/schemas/$Date.ts 1`] = ` "/* istanbul ignore file */ /* tslint:disable */ /* eslint-disable */ - export const $Date = { type: 'string', };" @@ -1192,7 +1183,6 @@ exports[`v2 should generate: ./test/generated/v2/schemas/$DictionaryWithArray.ts "/* istanbul ignore file */ /* tslint:disable */ /* eslint-disable */ - export const $DictionaryWithArray = { type: 'dictionary', contains: { @@ -1208,7 +1198,6 @@ exports[`v2 should generate: ./test/generated/v2/schemas/$DictionaryWithDictiona "/* istanbul ignore file */ /* tslint:disable */ /* eslint-disable */ - export const $DictionaryWithDictionary = { type: 'dictionary', contains: { @@ -1224,7 +1213,6 @@ exports[`v2 should generate: ./test/generated/v2/schemas/$DictionaryWithProperti "/* istanbul ignore file */ /* tslint:disable */ /* eslint-disable */ - export const $DictionaryWithProperties = { type: 'dictionary', contains: { @@ -1244,7 +1232,6 @@ exports[`v2 should generate: ./test/generated/v2/schemas/$DictionaryWithReferenc "/* istanbul ignore file */ /* tslint:disable */ /* eslint-disable */ - export const $DictionaryWithReference = { type: 'dictionary', contains: { @@ -1257,7 +1244,6 @@ exports[`v2 should generate: ./test/generated/v2/schemas/$DictionaryWithString.t "/* istanbul ignore file */ /* tslint:disable */ /* eslint-disable */ - export const $DictionaryWithString = { type: 'dictionary', contains: { @@ -1270,7 +1256,6 @@ exports[`v2 should generate: ./test/generated/v2/schemas/$EnumFromDescription.ts "/* istanbul ignore file */ /* tslint:disable */ /* eslint-disable */ - export const $EnumFromDescription = { type: 'Enum', };" @@ -1280,7 +1265,6 @@ exports[`v2 should generate: ./test/generated/v2/schemas/$EnumWithExtensions.ts "/* istanbul ignore file */ /* tslint:disable */ /* eslint-disable */ - export const $EnumWithExtensions = { type: 'Enum', };" @@ -1290,7 +1274,6 @@ exports[`v2 should generate: ./test/generated/v2/schemas/$EnumWithNumbers.ts 1`] "/* istanbul ignore file */ /* tslint:disable */ /* eslint-disable */ - export const $EnumWithNumbers = { type: 'Enum', };" @@ -1300,7 +1283,6 @@ exports[`v2 should generate: ./test/generated/v2/schemas/$EnumWithStrings.ts 1`] "/* istanbul ignore file */ /* tslint:disable */ /* eslint-disable */ - export const $EnumWithStrings = { type: 'Enum', };" @@ -1310,19 +1292,20 @@ exports[`v2 should generate: ./test/generated/v2/schemas/$ModelThatExtends.ts 1` "/* istanbul ignore file */ /* tslint:disable */ /* eslint-disable */ - -import { $ModelWithString } from './$ModelWithString'; - export const $ModelThatExtends = { - properties: { - ...$ModelWithString.properties, - propExtendsA: { - type: 'string', - }, - propExtendsB: { - type: 'ModelWithString', + type: 'all-of', + contains: [{ + type: 'ModelWithString', + }, { + properties: { + propExtendsA: { + type: 'string', + }, + propExtendsB: { + type: 'ModelWithString', + }, }, - }, + }], };" `; @@ -1330,21 +1313,22 @@ exports[`v2 should generate: ./test/generated/v2/schemas/$ModelThatExtendsExtend "/* istanbul ignore file */ /* tslint:disable */ /* eslint-disable */ - -import { $ModelWithString } from './$ModelWithString'; -import { $ModelThatExtends } from './$ModelThatExtends'; - export const $ModelThatExtendsExtends = { - properties: { - ...$ModelWithString.properties, - ...$ModelThatExtends.properties, - propExtendsC: { - type: 'string', - }, - propExtendsD: { - type: 'ModelWithString', + type: 'all-of', + contains: [{ + type: 'ModelWithString', + }, { + type: 'ModelThatExtends', + }, { + properties: { + propExtendsC: { + type: 'string', + }, + propExtendsD: { + type: 'ModelWithString', + }, }, - }, + }], };" `; @@ -1352,7 +1336,6 @@ exports[`v2 should generate: ./test/generated/v2/schemas/$ModelWithArray.ts 1`] "/* istanbul ignore file */ /* tslint:disable */ /* eslint-disable */ - export const $ModelWithArray = { properties: { prop: { @@ -1381,7 +1364,6 @@ exports[`v2 should generate: ./test/generated/v2/schemas/$ModelWithBoolean.ts 1` "/* istanbul ignore file */ /* tslint:disable */ /* eslint-disable */ - export const $ModelWithBoolean = { properties: { prop: { @@ -1395,7 +1377,6 @@ exports[`v2 should generate: ./test/generated/v2/schemas/$ModelWithCircularRefer "/* istanbul ignore file */ /* tslint:disable */ /* eslint-disable */ - export const $ModelWithCircularReference = { properties: { prop: { @@ -1409,7 +1390,6 @@ exports[`v2 should generate: ./test/generated/v2/schemas/$ModelWithDictionary.ts "/* istanbul ignore file */ /* tslint:disable */ /* eslint-disable */ - export const $ModelWithDictionary = { properties: { prop: { @@ -1426,7 +1406,6 @@ exports[`v2 should generate: ./test/generated/v2/schemas/$ModelWithDuplicateImpo "/* istanbul ignore file */ /* tslint:disable */ /* eslint-disable */ - export const $ModelWithDuplicateImports = { properties: { propA: { @@ -1446,7 +1425,6 @@ exports[`v2 should generate: ./test/generated/v2/schemas/$ModelWithDuplicateProp "/* istanbul ignore file */ /* tslint:disable */ /* eslint-disable */ - export const $ModelWithDuplicateProperties = { properties: { prop: { @@ -1460,7 +1438,6 @@ exports[`v2 should generate: ./test/generated/v2/schemas/$ModelWithEnum.ts 1`] = "/* istanbul ignore file */ /* tslint:disable */ /* eslint-disable */ - export const $ModelWithEnum = { properties: { test: { @@ -1477,7 +1454,6 @@ exports[`v2 should generate: ./test/generated/v2/schemas/$ModelWithEnumFromDescr "/* istanbul ignore file */ /* tslint:disable */ /* eslint-disable */ - export const $ModelWithEnumFromDescription = { properties: { test: { @@ -1491,7 +1467,6 @@ exports[`v2 should generate: ./test/generated/v2/schemas/$ModelWithInteger.ts 1` "/* istanbul ignore file */ /* tslint:disable */ /* eslint-disable */ - export const $ModelWithInteger = { properties: { prop: { @@ -1505,7 +1480,6 @@ exports[`v2 should generate: ./test/generated/v2/schemas/$ModelWithNestedEnums.t "/* istanbul ignore file */ /* tslint:disable */ /* eslint-disable */ - export const $ModelWithNestedEnums = { properties: { dictionaryWithEnum: { @@ -1540,7 +1514,6 @@ exports[`v2 should generate: ./test/generated/v2/schemas/$ModelWithNestedPropert "/* istanbul ignore file */ /* tslint:disable */ /* eslint-disable */ - export const $ModelWithNestedProperties = { properties: { first: { @@ -1568,7 +1541,6 @@ exports[`v2 should generate: ./test/generated/v2/schemas/$ModelWithNullableStrin "/* istanbul ignore file */ /* tslint:disable */ /* eslint-disable */ - export const $ModelWithNullableString = { properties: { nullableProp: { @@ -1588,7 +1560,6 @@ exports[`v2 should generate: ./test/generated/v2/schemas/$ModelWithOrderedProper "/* istanbul ignore file */ /* tslint:disable */ /* eslint-disable */ - export const $ModelWithOrderedProperties = { properties: { zebra: { @@ -1608,7 +1579,6 @@ exports[`v2 should generate: ./test/generated/v2/schemas/$ModelWithPattern.ts 1` "/* istanbul ignore file */ /* tslint:disable */ /* eslint-disable */ - export const $ModelWithPattern = { properties: { key: { @@ -1647,7 +1617,6 @@ exports[`v2 should generate: ./test/generated/v2/schemas/$ModelWithProperties.ts "/* istanbul ignore file */ /* tslint:disable */ /* eslint-disable */ - export const $ModelWithProperties = { properties: { required: { @@ -1687,7 +1656,6 @@ exports[`v2 should generate: ./test/generated/v2/schemas/$ModelWithReference.ts "/* istanbul ignore file */ /* tslint:disable */ /* eslint-disable */ - export const $ModelWithReference = { properties: { prop: { @@ -1701,7 +1669,6 @@ exports[`v2 should generate: ./test/generated/v2/schemas/$ModelWithString.ts 1`] "/* istanbul ignore file */ /* tslint:disable */ /* eslint-disable */ - export const $ModelWithString = { properties: { prop: { @@ -1715,7 +1682,6 @@ exports[`v2 should generate: ./test/generated/v2/schemas/$MultilineComment.ts 1` "/* istanbul ignore file */ /* tslint:disable */ /* eslint-disable */ - export const $MultilineComment = { type: 'number', };" @@ -1725,7 +1691,6 @@ exports[`v2 should generate: ./test/generated/v2/schemas/$SimpleBoolean.ts 1`] = "/* istanbul ignore file */ /* tslint:disable */ /* eslint-disable */ - export const $SimpleBoolean = { type: 'boolean', };" @@ -1735,7 +1700,6 @@ exports[`v2 should generate: ./test/generated/v2/schemas/$SimpleFile.ts 1`] = ` "/* istanbul ignore file */ /* tslint:disable */ /* eslint-disable */ - export const $SimpleFile = { type: 'File', };" @@ -1745,7 +1709,6 @@ exports[`v2 should generate: ./test/generated/v2/schemas/$SimpleInteger.ts 1`] = "/* istanbul ignore file */ /* tslint:disable */ /* eslint-disable */ - export const $SimpleInteger = { type: 'number', };" @@ -1755,7 +1718,6 @@ exports[`v2 should generate: ./test/generated/v2/schemas/$SimpleReference.ts 1`] "/* istanbul ignore file */ /* tslint:disable */ /* eslint-disable */ - export const $SimpleReference = { type: 'ModelWithString', };" @@ -1765,7 +1727,6 @@ exports[`v2 should generate: ./test/generated/v2/schemas/$SimpleString.ts 1`] = "/* istanbul ignore file */ /* tslint:disable */ /* eslint-disable */ - export const $SimpleString = { type: 'string', };" @@ -1775,7 +1736,6 @@ exports[`v2 should generate: ./test/generated/v2/schemas/$SimpleStringWithPatter "/* istanbul ignore file */ /* tslint:disable */ /* eslint-disable */ - export const $SimpleStringWithPattern = { type: 'string', maxLength: 64, @@ -2336,7 +2296,7 @@ exports[`v3 should generate: ./test/generated/v3/core/ApiRequestOptions.ts 1`] = "/* istanbul ignore file */ /* tslint:disable */ /* eslint-disable */ -export interface ApiRequestOptions { +export type ApiRequestOptions = { readonly method: 'GET' | 'PUT' | 'POST' | 'DELETE' | 'OPTIONS' | 'HEAD' | 'PATCH'; readonly path: string; readonly cookies?: Record; @@ -2353,7 +2313,7 @@ exports[`v3 should generate: ./test/generated/v3/core/ApiResult.ts 1`] = ` "/* istanbul ignore file */ /* tslint:disable */ /* eslint-disable */ -export interface ApiResult { +export type ApiResult = { readonly url: string; readonly ok: boolean; readonly status: number; @@ -2383,7 +2343,7 @@ export interface ResponseHookParams { response?: any; } -interface Config { +type Config = { BASE: string; VERSION: string; WITH_CREDENTIALS: boolean; @@ -2826,10 +2786,10 @@ import type { ModelWithEnum } from './ModelWithEnum'; /** * This is a model with one property with a 'all of' relationship */ -export interface CompositionWithAllOfAndNullable { - propA?: { +export type CompositionWithAllOfAndNullable = { + propA?: ({ boolean?: boolean, - } | null; + } & ModelWithEnum & ModelWithArray & ModelWithDictionary) | null; } " `; @@ -2847,8 +2807,8 @@ import type { ModelWithString } from './ModelWithString'; /** * This is a model with one property with a 'any of' relationship */ -export interface CompositionWithAnyOf { - propA?: ModelWithArray | ModelWithDictionary | ModelWithEnum | ModelWithString; +export type CompositionWithAnyOf = { + propA?: (ModelWithString | ModelWithEnum | ModelWithArray | ModelWithDictionary); } " `; @@ -2865,8 +2825,10 @@ import type { ModelWithEnum } from './ModelWithEnum'; /** * This is a model with one property with a 'any of' relationship */ -export interface CompositionWithAnyOfAndNullable { - propA?: ModelWithArray | ModelWithDictionary | ModelWithEnum | null; +export type CompositionWithAnyOfAndNullable = { + propA?: ({ + boolean?: boolean, + } | ModelWithEnum | ModelWithArray | ModelWithDictionary) | null; } " `; @@ -2879,8 +2841,10 @@ exports[`v3 should generate: ./test/generated/v3/models/CompositionWithAnyOfAnon /** * This is a model with one property with a 'any of' relationship where the options are not $ref */ -export interface CompositionWithAnyOfAnonymous { - propA?: ; +export type CompositionWithAnyOfAnonymous = { + propA?: ({ + propA?: any, + } | string | number); } " `; @@ -2898,8 +2862,8 @@ import type { ModelWithString } from './ModelWithString'; /** * This is a model with one property with a 'one of' relationship */ -export interface CompositionWithOneOf { - propA?: ModelWithArray | ModelWithDictionary | ModelWithEnum | ModelWithString; +export type CompositionWithOneOf = { + propA?: (ModelWithString | ModelWithEnum | ModelWithArray | ModelWithDictionary); } " `; @@ -2916,8 +2880,10 @@ import type { ModelWithEnum } from './ModelWithEnum'; /** * This is a model with one property with a 'one of' relationship */ -export interface CompositionWithOneOfAndNullable { - propA?: ModelWithArray | ModelWithDictionary | ModelWithEnum | null; +export type CompositionWithOneOfAndNullable = { + propA?: ({ + boolean?: boolean, + } | ModelWithEnum | ModelWithArray | ModelWithDictionary) | null; } " `; @@ -2930,8 +2896,10 @@ exports[`v3 should generate: ./test/generated/v3/models/CompositionWithOneOfAnon /** * This is a model with one property with a 'one of' relationship where the options are not $ref */ -export interface CompositionWithOneOfAnonymous { - propA?: ; +export type CompositionWithOneOfAnonymous = { + propA?: ({ + propA?: any, + } | string | number); } " `; @@ -3077,11 +3045,10 @@ import type { ModelWithString } from './ModelWithString'; /** * This is a model that extends another model */ -export interface ModelThatExtends extends ModelWithString { - propExtendsA?: string; - propExtendsB?: ModelWithString; -} -" +export type ModelThatExtends = (ModelWithString & { + propExtendsA?: string, + propExtendsB?: ModelWithString, +});" `; exports[`v3 should generate: ./test/generated/v3/models/ModelThatExtendsExtends.ts 1`] = ` @@ -3095,11 +3062,10 @@ import type { ModelWithString } from './ModelWithString'; /** * This is a model that extends another model */ -export interface ModelThatExtendsExtends extends ModelWithString, ModelThatExtends { - propExtendsC?: string; - propExtendsD?: ModelWithString; -} -" +export type ModelThatExtendsExtends = (ModelWithString & ModelThatExtends & { + propExtendsC?: string, + propExtendsD?: ModelWithString, +});" `; exports[`v3 should generate: ./test/generated/v3/models/ModelWithArray.ts 1`] = ` @@ -3112,7 +3078,7 @@ import type { ModelWithString } from './ModelWithString'; /** * This is a model with one property containing an array */ -export interface ModelWithArray { +export type ModelWithArray = { prop?: Array; propWithFile?: Array; propWithNumber?: Array; @@ -3128,7 +3094,7 @@ exports[`v3 should generate: ./test/generated/v3/models/ModelWithBoolean.ts 1`] /** * This is a model with one boolean property */ -export interface ModelWithBoolean { +export type ModelWithBoolean = { /** * This is a simple boolean property */ @@ -3145,7 +3111,7 @@ exports[`v3 should generate: ./test/generated/v3/models/ModelWithCircularReferen /** * This is a model with one property containing a circular reference */ -export interface ModelWithCircularReference { +export type ModelWithCircularReference = { prop?: ModelWithCircularReference; } " @@ -3159,7 +3125,7 @@ exports[`v3 should generate: ./test/generated/v3/models/ModelWithDictionary.ts 1 /** * This is a model with one property containing a dictionary */ -export interface ModelWithDictionary { +export type ModelWithDictionary = { prop?: Record; } " @@ -3175,7 +3141,7 @@ import type { ModelWithString } from './ModelWithString'; /** * This is a model with duplicated imports */ -export interface ModelWithDuplicateImports { +export type ModelWithDuplicateImports = { propA?: ModelWithString; propB?: ModelWithString; propC?: ModelWithString; @@ -3193,7 +3159,7 @@ import type { ModelWithString } from './ModelWithString'; /** * This is a model with duplicated properties */ -export interface ModelWithDuplicateProperties { +export type ModelWithDuplicateProperties = { prop?: ModelWithString; } " @@ -3207,7 +3173,7 @@ exports[`v3 should generate: ./test/generated/v3/models/ModelWithEnum.ts 1`] = ` /** * This is a model with one enum */ -export interface ModelWithEnum { +export type ModelWithEnum = { /** * This is a simple enum with strings */ @@ -3254,7 +3220,7 @@ exports[`v3 should generate: ./test/generated/v3/models/ModelWithEnumFromDescrip /** * This is a model with one enum */ -export interface ModelWithEnumFromDescription { +export type ModelWithEnumFromDescription = { /** * Success=1,Warning=2,Error=3 */ @@ -3285,7 +3251,7 @@ exports[`v3 should generate: ./test/generated/v3/models/ModelWithInteger.ts 1`] /** * This is a model with one number property */ -export interface ModelWithInteger { +export type ModelWithInteger = { /** * This is a simple number property */ @@ -3302,7 +3268,7 @@ exports[`v3 should generate: ./test/generated/v3/models/ModelWithNestedEnums.ts /** * This is a model with nested enums */ -export interface ModelWithNestedEnums { +export type ModelWithNestedEnums = { dictionaryWithEnum?: Record; dictionaryWithEnumFromDescription?: Record; arrayWithEnum?: Array<'Success' | 'Warning' | 'Error'>; @@ -3319,7 +3285,7 @@ exports[`v3 should generate: ./test/generated/v3/models/ModelWithNestedPropertie /** * This is a model with one nested property */ -export interface ModelWithNestedProperties { +export type ModelWithNestedProperties = { readonly first: { readonly second: { readonly third: string | null, @@ -3337,7 +3303,7 @@ exports[`v3 should generate: ./test/generated/v3/models/ModelWithOrderedProperti /** * This is a model with ordered properties */ -export interface ModelWithOrderedProperties { +export type ModelWithOrderedProperties = { zebra?: string; apple?: string; hawaii?: string; @@ -3353,7 +3319,7 @@ exports[`v3 should generate: ./test/generated/v3/models/ModelWithPattern.ts 1`] /** * This is a model that contains a some patterns */ -export interface ModelWithPattern { +export type ModelWithPattern = { key: string; name: string; readonly enabled?: boolean; @@ -3374,7 +3340,7 @@ import type { ModelWithString } from './ModelWithString'; /** * This is a model with one nested property */ -export interface ModelWithProperties { +export type ModelWithProperties = { required: string; readonly requiredAndReadOnly: string; requiredAndNullable: string | null; @@ -3398,7 +3364,7 @@ import type { ModelWithProperties } from './ModelWithProperties'; /** * This is a model with one property containing a reference */ -export interface ModelWithReference { +export type ModelWithReference = { prop?: ModelWithProperties; } " @@ -3412,7 +3378,7 @@ exports[`v3 should generate: ./test/generated/v3/models/ModelWithString.ts 1`] = /** * This is a model with one string property */ -export interface ModelWithString { +export type ModelWithString = { /** * This is a simple string property */ @@ -3507,7 +3473,6 @@ exports[`v3 should generate: ./test/generated/v3/schemas/$ArrayWithArray.ts 1`] "/* istanbul ignore file */ /* tslint:disable */ /* eslint-disable */ - export const $ArrayWithArray = { type: 'array', contains: { @@ -3523,7 +3488,6 @@ exports[`v3 should generate: ./test/generated/v3/schemas/$ArrayWithBooleans.ts 1 "/* istanbul ignore file */ /* tslint:disable */ /* eslint-disable */ - export const $ArrayWithBooleans = { type: 'array', contains: { @@ -3536,7 +3500,6 @@ exports[`v3 should generate: ./test/generated/v3/schemas/$ArrayWithNumbers.ts 1` "/* istanbul ignore file */ /* tslint:disable */ /* eslint-disable */ - export const $ArrayWithNumbers = { type: 'array', contains: { @@ -3549,7 +3512,6 @@ exports[`v3 should generate: ./test/generated/v3/schemas/$ArrayWithProperties.ts "/* istanbul ignore file */ /* tslint:disable */ /* eslint-disable */ - export const $ArrayWithProperties = { type: 'array', contains: { @@ -3569,7 +3531,6 @@ exports[`v3 should generate: ./test/generated/v3/schemas/$ArrayWithReferences.ts "/* istanbul ignore file */ /* tslint:disable */ /* eslint-disable */ - export const $ArrayWithReferences = { type: 'array', contains: { @@ -3582,7 +3543,6 @@ exports[`v3 should generate: ./test/generated/v3/schemas/$ArrayWithStrings.ts 1` "/* istanbul ignore file */ /* tslint:disable */ /* eslint-disable */ - export const $ArrayWithStrings = { type: 'array', contains: { @@ -3595,18 +3555,23 @@ exports[`v3 should generate: ./test/generated/v3/schemas/$CompositionWithAllOfAn "/* istanbul ignore file */ /* tslint:disable */ /* eslint-disable */ - export const $CompositionWithAllOfAndNullable = { properties: { propA: { - properties: { - ...$ModelWithEnum.properties, - ...$ModelWithArray.properties, - ...$ModelWithDictionary.properties, - boolean: { - type: 'boolean', + type: 'all-of', + contains: [{ + properties: { + boolean: { + type: 'boolean', + }, }, - }, + }, { + type: 'ModelWithEnum', + }, { + type: 'ModelWithArray', + }, { + type: 'ModelWithDictionary', + }], isNullable: true, }, }, @@ -3617,11 +3582,19 @@ exports[`v3 should generate: ./test/generated/v3/schemas/$CompositionWithAnyOf.t "/* istanbul ignore file */ /* tslint:disable */ /* eslint-disable */ - export const $CompositionWithAnyOf = { properties: { propA: { - type: 'ModelWithArray | ModelWithDictionary | ModelWithEnum | ModelWithString', + type: 'any-of', + contains: [{ + type: 'ModelWithString', + }, { + type: 'ModelWithEnum', + }, { + type: 'ModelWithArray', + }, { + type: 'ModelWithDictionary', + }], }, }, };" @@ -3631,11 +3604,23 @@ exports[`v3 should generate: ./test/generated/v3/schemas/$CompositionWithAnyOfAn "/* istanbul ignore file */ /* tslint:disable */ /* eslint-disable */ - export const $CompositionWithAnyOfAndNullable = { properties: { propA: { - type: 'ModelWithArray | ModelWithDictionary | ModelWithEnum', + type: 'any-of', + contains: [{ + properties: { + boolean: { + type: 'boolean', + }, + }, + }, { + type: 'ModelWithEnum', + }, { + type: 'ModelWithArray', + }, { + type: 'ModelWithDictionary', + }], isNullable: true, }, }, @@ -3646,10 +3631,22 @@ exports[`v3 should generate: ./test/generated/v3/schemas/$CompositionWithAnyOfAn "/* istanbul ignore file */ /* tslint:disable */ /* eslint-disable */ - export const $CompositionWithAnyOfAnonymous = { properties: { propA: { + type: 'any-of', + contains: [{ + properties: { + propA: { + properties: { + }, + }, + }, + }, { + type: 'string', + }, { + type: 'number', + }], }, }, };" @@ -3659,11 +3656,19 @@ exports[`v3 should generate: ./test/generated/v3/schemas/$CompositionWithOneOf.t "/* istanbul ignore file */ /* tslint:disable */ /* eslint-disable */ - export const $CompositionWithOneOf = { properties: { propA: { - type: 'ModelWithArray | ModelWithDictionary | ModelWithEnum | ModelWithString', + type: 'one-of', + contains: [{ + type: 'ModelWithString', + }, { + type: 'ModelWithEnum', + }, { + type: 'ModelWithArray', + }, { + type: 'ModelWithDictionary', + }], }, }, };" @@ -3673,11 +3678,23 @@ exports[`v3 should generate: ./test/generated/v3/schemas/$CompositionWithOneOfAn "/* istanbul ignore file */ /* tslint:disable */ /* eslint-disable */ - export const $CompositionWithOneOfAndNullable = { properties: { propA: { - type: 'ModelWithArray | ModelWithDictionary | ModelWithEnum', + type: 'one-of', + contains: [{ + properties: { + boolean: { + type: 'boolean', + }, + }, + }, { + type: 'ModelWithEnum', + }, { + type: 'ModelWithArray', + }, { + type: 'ModelWithDictionary', + }], isNullable: true, }, }, @@ -3688,10 +3705,22 @@ exports[`v3 should generate: ./test/generated/v3/schemas/$CompositionWithOneOfAn "/* istanbul ignore file */ /* tslint:disable */ /* eslint-disable */ - export const $CompositionWithOneOfAnonymous = { properties: { propA: { + type: 'one-of', + contains: [{ + properties: { + propA: { + properties: { + }, + }, + }, + }, { + type: 'string', + }, { + type: 'number', + }], }, }, };" @@ -3701,7 +3730,6 @@ exports[`v3 should generate: ./test/generated/v3/schemas/$DictionaryWithArray.ts "/* istanbul ignore file */ /* tslint:disable */ /* eslint-disable */ - export const $DictionaryWithArray = { type: 'dictionary', contains: { @@ -3717,7 +3745,6 @@ exports[`v3 should generate: ./test/generated/v3/schemas/$DictionaryWithDictiona "/* istanbul ignore file */ /* tslint:disable */ /* eslint-disable */ - export const $DictionaryWithDictionary = { type: 'dictionary', contains: { @@ -3733,7 +3760,6 @@ exports[`v3 should generate: ./test/generated/v3/schemas/$DictionaryWithProperti "/* istanbul ignore file */ /* tslint:disable */ /* eslint-disable */ - export const $DictionaryWithProperties = { type: 'dictionary', contains: { @@ -3753,7 +3779,6 @@ exports[`v3 should generate: ./test/generated/v3/schemas/$DictionaryWithReferenc "/* istanbul ignore file */ /* tslint:disable */ /* eslint-disable */ - export const $DictionaryWithReference = { type: 'dictionary', contains: { @@ -3766,7 +3791,6 @@ exports[`v3 should generate: ./test/generated/v3/schemas/$DictionaryWithString.t "/* istanbul ignore file */ /* tslint:disable */ /* eslint-disable */ - export const $DictionaryWithString = { type: 'dictionary', contains: { @@ -3779,7 +3803,6 @@ exports[`v3 should generate: ./test/generated/v3/schemas/$EnumFromDescription.ts "/* istanbul ignore file */ /* tslint:disable */ /* eslint-disable */ - export const $EnumFromDescription = { type: 'Enum', };" @@ -3789,7 +3812,6 @@ exports[`v3 should generate: ./test/generated/v3/schemas/$EnumWithExtensions.ts "/* istanbul ignore file */ /* tslint:disable */ /* eslint-disable */ - export const $EnumWithExtensions = { type: 'Enum', };" @@ -3799,7 +3821,6 @@ exports[`v3 should generate: ./test/generated/v3/schemas/$EnumWithNumbers.ts 1`] "/* istanbul ignore file */ /* tslint:disable */ /* eslint-disable */ - export const $EnumWithNumbers = { type: 'Enum', };" @@ -3809,7 +3830,6 @@ exports[`v3 should generate: ./test/generated/v3/schemas/$EnumWithStrings.ts 1`] "/* istanbul ignore file */ /* tslint:disable */ /* eslint-disable */ - export const $EnumWithStrings = { type: 'Enum', };" @@ -3819,19 +3839,20 @@ exports[`v3 should generate: ./test/generated/v3/schemas/$ModelThatExtends.ts 1` "/* istanbul ignore file */ /* tslint:disable */ /* eslint-disable */ - -import { $ModelWithString } from './$ModelWithString'; - export const $ModelThatExtends = { - properties: { - ...$ModelWithString.properties, - propExtendsA: { - type: 'string', - }, - propExtendsB: { - type: 'ModelWithString', + type: 'all-of', + contains: [{ + type: 'ModelWithString', + }, { + properties: { + propExtendsA: { + type: 'string', + }, + propExtendsB: { + type: 'ModelWithString', + }, }, - }, + }], };" `; @@ -3839,21 +3860,22 @@ exports[`v3 should generate: ./test/generated/v3/schemas/$ModelThatExtendsExtend "/* istanbul ignore file */ /* tslint:disable */ /* eslint-disable */ - -import { $ModelWithString } from './$ModelWithString'; -import { $ModelThatExtends } from './$ModelThatExtends'; - export const $ModelThatExtendsExtends = { - properties: { - ...$ModelWithString.properties, - ...$ModelThatExtends.properties, - propExtendsC: { - type: 'string', - }, - propExtendsD: { - type: 'ModelWithString', + type: 'all-of', + contains: [{ + type: 'ModelWithString', + }, { + type: 'ModelThatExtends', + }, { + properties: { + propExtendsC: { + type: 'string', + }, + propExtendsD: { + type: 'ModelWithString', + }, }, - }, + }], };" `; @@ -3861,7 +3883,6 @@ exports[`v3 should generate: ./test/generated/v3/schemas/$ModelWithArray.ts 1`] "/* istanbul ignore file */ /* tslint:disable */ /* eslint-disable */ - export const $ModelWithArray = { properties: { prop: { @@ -3890,7 +3911,6 @@ exports[`v3 should generate: ./test/generated/v3/schemas/$ModelWithBoolean.ts 1` "/* istanbul ignore file */ /* tslint:disable */ /* eslint-disable */ - export const $ModelWithBoolean = { properties: { prop: { @@ -3904,7 +3924,6 @@ exports[`v3 should generate: ./test/generated/v3/schemas/$ModelWithCircularRefer "/* istanbul ignore file */ /* tslint:disable */ /* eslint-disable */ - export const $ModelWithCircularReference = { properties: { prop: { @@ -3918,7 +3937,6 @@ exports[`v3 should generate: ./test/generated/v3/schemas/$ModelWithDictionary.ts "/* istanbul ignore file */ /* tslint:disable */ /* eslint-disable */ - export const $ModelWithDictionary = { properties: { prop: { @@ -3935,7 +3953,6 @@ exports[`v3 should generate: ./test/generated/v3/schemas/$ModelWithDuplicateImpo "/* istanbul ignore file */ /* tslint:disable */ /* eslint-disable */ - export const $ModelWithDuplicateImports = { properties: { propA: { @@ -3955,7 +3972,6 @@ exports[`v3 should generate: ./test/generated/v3/schemas/$ModelWithDuplicateProp "/* istanbul ignore file */ /* tslint:disable */ /* eslint-disable */ - export const $ModelWithDuplicateProperties = { properties: { prop: { @@ -3969,7 +3985,6 @@ exports[`v3 should generate: ./test/generated/v3/schemas/$ModelWithEnum.ts 1`] = "/* istanbul ignore file */ /* tslint:disable */ /* eslint-disable */ - export const $ModelWithEnum = { properties: { test: { @@ -3986,7 +4001,6 @@ exports[`v3 should generate: ./test/generated/v3/schemas/$ModelWithEnumFromDescr "/* istanbul ignore file */ /* tslint:disable */ /* eslint-disable */ - export const $ModelWithEnumFromDescription = { properties: { test: { @@ -4000,7 +4014,6 @@ exports[`v3 should generate: ./test/generated/v3/schemas/$ModelWithInteger.ts 1` "/* istanbul ignore file */ /* tslint:disable */ /* eslint-disable */ - export const $ModelWithInteger = { properties: { prop: { @@ -4014,7 +4027,6 @@ exports[`v3 should generate: ./test/generated/v3/schemas/$ModelWithNestedEnums.t "/* istanbul ignore file */ /* tslint:disable */ /* eslint-disable */ - export const $ModelWithNestedEnums = { properties: { dictionaryWithEnum: { @@ -4049,7 +4061,6 @@ exports[`v3 should generate: ./test/generated/v3/schemas/$ModelWithNestedPropert "/* istanbul ignore file */ /* tslint:disable */ /* eslint-disable */ - export const $ModelWithNestedProperties = { properties: { first: { @@ -4080,7 +4091,6 @@ exports[`v3 should generate: ./test/generated/v3/schemas/$ModelWithOrderedProper "/* istanbul ignore file */ /* tslint:disable */ /* eslint-disable */ - export const $ModelWithOrderedProperties = { properties: { zebra: { @@ -4100,7 +4110,6 @@ exports[`v3 should generate: ./test/generated/v3/schemas/$ModelWithPattern.ts 1` "/* istanbul ignore file */ /* tslint:disable */ /* eslint-disable */ - export const $ModelWithPattern = { properties: { key: { @@ -4139,7 +4148,6 @@ exports[`v3 should generate: ./test/generated/v3/schemas/$ModelWithProperties.ts "/* istanbul ignore file */ /* tslint:disable */ /* eslint-disable */ - export const $ModelWithProperties = { properties: { required: { @@ -4184,7 +4192,6 @@ exports[`v3 should generate: ./test/generated/v3/schemas/$ModelWithReference.ts "/* istanbul ignore file */ /* tslint:disable */ /* eslint-disable */ - export const $ModelWithReference = { properties: { prop: { @@ -4198,7 +4205,6 @@ exports[`v3 should generate: ./test/generated/v3/schemas/$ModelWithString.ts 1`] "/* istanbul ignore file */ /* tslint:disable */ /* eslint-disable */ - export const $ModelWithString = { properties: { prop: { @@ -4212,7 +4218,6 @@ exports[`v3 should generate: ./test/generated/v3/schemas/$MultilineComment.ts 1` "/* istanbul ignore file */ /* tslint:disable */ /* eslint-disable */ - export const $MultilineComment = { type: 'number', };" @@ -4222,7 +4227,6 @@ exports[`v3 should generate: ./test/generated/v3/schemas/$SimpleBoolean.ts 1`] = "/* istanbul ignore file */ /* tslint:disable */ /* eslint-disable */ - export const $SimpleBoolean = { type: 'boolean', };" @@ -4232,7 +4236,6 @@ exports[`v3 should generate: ./test/generated/v3/schemas/$SimpleFile.ts 1`] = ` "/* istanbul ignore file */ /* tslint:disable */ /* eslint-disable */ - export const $SimpleFile = { type: 'File', };" @@ -4242,7 +4245,6 @@ exports[`v3 should generate: ./test/generated/v3/schemas/$SimpleInteger.ts 1`] = "/* istanbul ignore file */ /* tslint:disable */ /* eslint-disable */ - export const $SimpleInteger = { type: 'number', };" @@ -4252,7 +4254,6 @@ exports[`v3 should generate: ./test/generated/v3/schemas/$SimpleReference.ts 1`] "/* istanbul ignore file */ /* tslint:disable */ /* eslint-disable */ - export const $SimpleReference = { type: 'ModelWithString', };" @@ -4262,7 +4263,6 @@ exports[`v3 should generate: ./test/generated/v3/schemas/$SimpleString.ts 1`] = "/* istanbul ignore file */ /* tslint:disable */ /* eslint-disable */ - export const $SimpleString = { type: 'string', };" @@ -4272,7 +4272,6 @@ exports[`v3 should generate: ./test/generated/v3/schemas/$SimpleStringWithPatter "/* istanbul ignore file */ /* tslint:disable */ /* eslint-disable */ - export const $SimpleStringWithPattern = { type: 'string', isNullable: true, @@ -4340,7 +4339,7 @@ export class ComplexService { readonly type: 'Monkey' | 'Horse' | 'Bird', listOfModels?: Array | null, listOfStrings?: Array | null, - parameters: ModelWithArray | ModelWithDictionary | ModelWithEnum | ModelWithString, + parameters: (ModelWithString | ModelWithEnum | ModelWithArray | ModelWithDictionary), readonly user?: { readonly id?: number, readonly name?: string | null, @@ -4906,13 +4905,13 @@ import { OpenAPI } from '../core/OpenAPI'; export class TypesService { /** + * @param parameterObject This is an object parameter * @param parameterArray This is an array parameter * @param parameterDictionary This is a dictionary parameter * @param parameterEnum This is an enum parameter * @param parameterNumber This is a number parameter * @param parameterString This is a string parameter * @param parameterBoolean This is a boolean parameter - * @param parameterObject This is an object parameter * @param id This is a number parameter * @result number Response is a simple number * @result string Response is a simple string @@ -4921,26 +4920,26 @@ export class TypesService { * @throws ApiError */ public static async types( + parameterObject: any, parameterArray: Array | null, parameterDictionary: any, parameterEnum: 'Success' | 'Warning' | 'Error' | null, parameterNumber: number = 123, parameterString: string | null = 'default', parameterBoolean: boolean | null = true, - parameterObject: any = null, id?: number, ): Promise { const result = await __request({ method: 'GET', path: \`/api/v\${OpenAPI.VERSION}/types\`, query: { + 'parameterObject': parameterObject, 'parameterArray': parameterArray, 'parameterDictionary': parameterDictionary, 'parameterEnum': parameterEnum, 'parameterNumber': parameterNumber, 'parameterString': parameterString, 'parameterBoolean': parameterBoolean, - 'parameterObject': parameterObject, }, }); return result.body; From 1d08cd1072731294e75f3681cba26252a966b0a8 Mon Sep 17 00:00:00 2001 From: Richard Goldstein Date: Mon, 23 Nov 2020 20:47:20 -0500 Subject: [PATCH 10/12] Define type of Response, per implementation --- src/templates/core/OpenAPI.hbs | 7 ++++++- src/templates/core/fetch/responseType.hbs | 2 ++ src/templates/core/node/responseType.hbs | 1 + src/templates/core/xhr/responseType.hbs | 1 + src/utils/registerHandlebarTemplates.ts | 6 ++++++ 5 files changed, 16 insertions(+), 1 deletion(-) create mode 100644 src/templates/core/fetch/responseType.hbs create mode 100644 src/templates/core/node/responseType.hbs create mode 100644 src/templates/core/xhr/responseType.hbs diff --git a/src/templates/core/OpenAPI.hbs b/src/templates/core/OpenAPI.hbs index 019c9b851..3f9113697 100644 --- a/src/templates/core/OpenAPI.hbs +++ b/src/templates/core/OpenAPI.hbs @@ -1,5 +1,10 @@ {{>header}} + +{{#equals @root.httpClient 'fetch'}}{{>fetch/responseType}}{{/equals}} +{{#equals @root.httpClient 'xhr'}}{{>xhr/responseType}}{{/equals}} +{{#equals @root.httpClient 'node'}}{{>node/responseType}}{{/equals}} + type Resolver = () => Promise; type Headers = Record; @@ -14,7 +19,7 @@ export interface RequestHookParams { export interface ResponseHookParams { url: string; result: ApiResult; - response?: any; + response?: ResponseImplementation; } type Config = { diff --git a/src/templates/core/fetch/responseType.hbs b/src/templates/core/fetch/responseType.hbs new file mode 100644 index 000000000..c9cf71bbe --- /dev/null +++ b/src/templates/core/fetch/responseType.hbs @@ -0,0 +1,2 @@ +type ResponseImplementation = Response; + diff --git a/src/templates/core/node/responseType.hbs b/src/templates/core/node/responseType.hbs new file mode 100644 index 000000000..556ef6d1f --- /dev/null +++ b/src/templates/core/node/responseType.hbs @@ -0,0 +1 @@ +import { Response as ResponseImplementation } from 'node-fetch'; diff --git a/src/templates/core/xhr/responseType.hbs b/src/templates/core/xhr/responseType.hbs new file mode 100644 index 000000000..5d12c9f2f --- /dev/null +++ b/src/templates/core/xhr/responseType.hbs @@ -0,0 +1 @@ +type ResponseImplementation = XMLHttpRequest; diff --git a/src/utils/registerHandlebarTemplates.ts b/src/utils/registerHandlebarTemplates.ts index febe94f1f..f6fabae84 100644 --- a/src/utils/registerHandlebarTemplates.ts +++ b/src/utils/registerHandlebarTemplates.ts @@ -9,6 +9,7 @@ import fetchGetResponseBody from '../templates/core/fetch/getResponseBody.hbs'; import fetchGetResponseHeader from '../templates/core/fetch/getResponseHeader.hbs'; import fetchRequest from '../templates/core/fetch/request.hbs'; import fetchSendRequest from '../templates/core/fetch/sendRequest.hbs'; +import fetchResponseType from '../templates/core/fetch/responseType.hbs'; import functionCatchErrors from '../templates/core/functions/catchErrors.hbs'; import functionGetFormData from '../templates/core/functions/getFormData.hbs'; import functionGetQueryString from '../templates/core/functions/getQueryString.hbs'; @@ -26,6 +27,7 @@ import nodeGetResponseBody from '../templates/core/node/getResponseBody.hbs'; import nodeGetResponseHeader from '../templates/core/node/getResponseHeader.hbs'; import nodeRequest from '../templates/core/node/request.hbs'; import nodeSendRequest from '../templates/core/node/sendRequest.hbs'; +import nodeResponseType from '../templates/core/node/responseType.hbs'; import templateCoreSettings from '../templates/core/OpenAPI.hbs'; import templateCoreRequest from '../templates/core/request.hbs'; import xhrGetHeaders from '../templates/core/xhr/getHeaders.hbs'; @@ -34,6 +36,7 @@ import xhrGetResponseBody from '../templates/core/xhr/getResponseBody.hbs'; import xhrGetResponseHeader from '../templates/core/xhr/getResponseHeader.hbs'; import xhrRequest from '../templates/core/xhr/request.hbs'; import xhrSendRequest from '../templates/core/xhr/sendRequest.hbs'; +import xhrResponseType from '../templates/core/xhr/responseType.hbs'; import templateExportModel from '../templates/exportModel.hbs'; import templateExportSchema from '../templates/exportSchema.hbs'; import templateExportService from '../templates/exportService.hbs'; @@ -154,6 +157,7 @@ export function registerHandlebarTemplates(): Templates { Handlebars.registerPartial('fetch/getResponseHeader', Handlebars.template(fetchGetResponseHeader)); Handlebars.registerPartial('fetch/sendRequest', Handlebars.template(fetchSendRequest)); Handlebars.registerPartial('fetch/request', Handlebars.template(fetchRequest)); + Handlebars.registerPartial('fetch/responseType', Handlebars.template(fetchResponseType)); // Specific files for the xhr client implementation Handlebars.registerPartial('xhr/getHeaders', Handlebars.template(xhrGetHeaders)); @@ -162,6 +166,7 @@ export function registerHandlebarTemplates(): Templates { Handlebars.registerPartial('xhr/getResponseHeader', Handlebars.template(xhrGetResponseHeader)); Handlebars.registerPartial('xhr/sendRequest', Handlebars.template(xhrSendRequest)); Handlebars.registerPartial('xhr/request', Handlebars.template(xhrRequest)); + Handlebars.registerPartial('xhr/responseType', Handlebars.template(xhrResponseType)); // Specific files for the node client implementation Handlebars.registerPartial('node/getHeaders', Handlebars.template(nodeGetHeaders)); @@ -170,6 +175,7 @@ export function registerHandlebarTemplates(): Templates { Handlebars.registerPartial('node/getResponseHeader', Handlebars.template(nodeGetResponseHeader)); Handlebars.registerPartial('node/sendRequest', Handlebars.template(nodeSendRequest)); Handlebars.registerPartial('node/request', Handlebars.template(nodeRequest)); + Handlebars.registerPartial('node/responseType', Handlebars.template(nodeResponseType)); return templates; } From 866f8efec91c94175546ac8288fbd6b2385d2e1a Mon Sep 17 00:00:00 2001 From: Richard Goldstein Date: Mon, 23 Nov 2020 21:00:09 -0500 Subject: [PATCH 11/12] Updated to support implementation-specific Response type in Reponse hook --- test/__snapshots__/index.spec.js.snap | 14 ++++++++++++-- 1 file changed, 12 insertions(+), 2 deletions(-) diff --git a/test/__snapshots__/index.spec.js.snap b/test/__snapshots__/index.spec.js.snap index 102287987..3b210cae1 100644 --- a/test/__snapshots__/index.spec.js.snap +++ b/test/__snapshots__/index.spec.js.snap @@ -57,6 +57,11 @@ exports[`v2 should generate: ./test/generated/v2/core/OpenAPI.ts 1`] = ` "/* istanbul ignore file */ /* tslint:disable */ /* eslint-disable */ + +type ResponseImplementation = Response; + + + type Resolver = () => Promise; type Headers = Record; @@ -71,7 +76,7 @@ export interface RequestHookParams { export interface ResponseHookParams { url: string; result: ApiResult; - response?: any; + response?: ResponseImplementation; } type Config = { @@ -2326,6 +2331,11 @@ exports[`v3 should generate: ./test/generated/v3/core/OpenAPI.ts 1`] = ` "/* istanbul ignore file */ /* tslint:disable */ /* eslint-disable */ + +type ResponseImplementation = Response; + + + type Resolver = () => Promise; type Headers = Record; @@ -2340,7 +2350,7 @@ export interface RequestHookParams { export interface ResponseHookParams { url: string; result: ApiResult; - response?: any; + response?: ResponseImplementation; } type Config = { From 5a0548a13f31f3ec4b0c23360a5dbebd04d59a66 Mon Sep 17 00:00:00 2001 From: Shivam Techoon <153499070+ShivamTechoon@users.noreply.github.com> Date: Wed, 10 Apr 2024 04:34:51 +0530 Subject: [PATCH 12/12] Hotfix/response type blob (#3) * update-response-type-for-blob-data * update-blob-response-type-for-node-fetch-module * revert-last-commit-unnecessary-changes --- src/templates/core/fetch/getResponseBody.hbs | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) diff --git a/src/templates/core/fetch/getResponseBody.hbs b/src/templates/core/fetch/getResponseBody.hbs index 502979ef4..d13f47b8d 100644 --- a/src/templates/core/fetch/getResponseBody.hbs +++ b/src/templates/core/fetch/getResponseBody.hbs @@ -2,9 +2,18 @@ async function getResponseBody(response: Response): Promise { try { const contentType = response.headers.get('Content-Type'); if (contentType) { - const isJSON = contentType.toLowerCase().startsWith('application/json'); + + const jsonTypes = ['application/json', 'application/problem+json'] + const isJSON = jsonTypes.some(type => contentType.toLowerCase().startsWith(type)); + + //Check for the blob types + const blobTypes = ['application/vnd.openxmlformats-officedocument.wordprocessingml.document', 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet'] + const isBlob = blobTypes.some(type => contentType.toLowerCase().startsWith(type)); + if (isJSON) { - return await response.json(); + return await response.json(); + } else if (isBlob) { + return await response.arrayBuffer(); } else { return await response.text(); }