diff --git a/index.js b/index.js index 23b1aa08..a42b61a5 100755 --- a/index.js +++ b/index.js @@ -66,6 +66,7 @@ program .option("--disableStrictSSL", "disabled strict SSL", false) .option("--disableProxy", "disabled proxy", false) .option("--axios", "generate axios http client", false) + .option("--unwrap-response-data", "unwrap the data item from the response", false) .option("--single-http-client", "Ability to send HttpClient instance to Api constructor", false) .option("--silent", "Output only errors to console", false) .option("--default-response ", "default type for empty response schema", TS_KEYWORDS.VOID) @@ -100,6 +101,7 @@ const { disableProxy, cleanOutput, defaultResponse, + unwrapResponseData, singleHttpClient, axios, silent, @@ -115,6 +117,7 @@ generateApi({ httpClientType: axios ? HTTP_CLIENT.AXIOS : HTTP_CLIENT.FETCH, defaultResponseAsSuccess: defaultAsSuccess, defaultResponseType: defaultResponse, + unwrapResponseData: unwrapResponseData, generateUnionEnums: unionEnums, generateResponses: responses, extractRequestParams: !!extractRequestParams, diff --git a/src/config.js b/src/config.js index d62c6195..b9f3d63a 100644 --- a/src/config.js +++ b/src/config.js @@ -58,6 +58,7 @@ const config = { defaultResponseType: TS_KEYWORDS.VOID, singleHttpClient: false, httpClientType: HTTP_CLIENT.FETCH, + unwrapResponseData: false, templatePaths: { /** `templates/base` */ base: "", diff --git a/src/index.js b/src/index.js index 1d55599a..6ccbdd3a 100644 --- a/src/index.js +++ b/src/index.js @@ -44,6 +44,7 @@ module.exports = { extractRequestParams = config.extractRequestParams, extractRequestBody = config.extractRequestBody, defaultResponseType = config.defaultResponseType, + unwrapResponseData = config.unwrapResponseData, singleHttpClient = config.singleHttpClient, prettier: prettierOptions = constants.PRETTIER_OPTIONS, hooks: rawHooks, @@ -77,6 +78,7 @@ module.exports = { disableProxy, cleanOutput, defaultResponseType, + unwrapResponseData, singleHttpClient, constants, silent, diff --git a/templates/base/http-clients/axios-http-client.eta b/templates/base/http-clients/axios-http-client.eta index abe7b99e..afd9f9b7 100644 --- a/templates/base/http-clients/axios-http-client.eta +++ b/templates/base/http-clients/axios-http-client.eta @@ -1,5 +1,5 @@ <% -const { apiConfig, generateResponses } = it; +const { apiConfig, generateResponses, config } = it; %> import axios, { AxiosInstance, AxiosRequestConfig, AxiosResponse, ResponseType } from "axios"; @@ -89,7 +89,11 @@ export class HttpClient { format, body, ...params +<% if (config.unwrapResponseData) { %> + }: FullRequestParams): Promise => { +<% } else { %> }: FullRequestParams): Promise> => { +<% } %> const secureParams = ((typeof secure === 'boolean' ? secure : this.secure) && this.securityWorker && (await this.securityWorker(this.securityData))) || {}; const requestParams = this.mergeRequestParams(params, secureParams); const responseFormat = (format && this.format) || void 0; @@ -112,6 +116,10 @@ export class HttpClient { responseType: responseFormat, data: body, url: path, +<% if (config.unwrapResponseData) { %> + }).then(response => response.data); +<% } else { %> }); +<% } %> }; } diff --git a/templates/base/http-clients/fetch-http-client.eta b/templates/base/http-clients/fetch-http-client.eta index 88a24306..0477e0b7 100644 --- a/templates/base/http-clients/fetch-http-client.eta +++ b/templates/base/http-clients/fetch-http-client.eta @@ -1,5 +1,5 @@ <% -const { apiConfig, generateResponses } = it; +const { apiConfig, generateResponses, config } = it; %> export type QueryParamsType = Record; @@ -164,7 +164,11 @@ export class HttpClient { baseUrl, cancelToken, ...params +<% if (config.unwrapResponseData) { %> + }: FullRequestParams): Promise => { +<% } else { %> }: FullRequestParams): Promise> => { +<% } %> const secureParams = ((typeof secure === 'boolean' ? secure : this.baseApiParams.secure) && this.securityWorker && await this.securityWorker(this.securityData)) || {}; const requestParams = this.mergeRequestParams(params, secureParams); const queryString = query && this.toQueryString(query); @@ -206,7 +210,11 @@ export class HttpClient { } if (!response.ok) throw data; +<% if (config.unwrapResponseData) { %> + return data.data; +<% } else { %> return data; +<% } %> }); }; }