From 162faa8f620d52d17383a0c9b6ea22021bc67482 Mon Sep 17 00:00:00 2001 From: PromiSe#### Date: Mon, 15 Apr 2024 13:27:59 +0700 Subject: [PATCH 1/2] Appen support Blob type --- src/templates/core/ApiRequestOptions.hbs | 1 + src/templates/core/fetch/getResponseBody.hbs | 6 +++++- src/templates/core/fetch/request.hbs | 2 +- src/templates/exportService.hbs | 1 + 4 files changed, 8 insertions(+), 2 deletions(-) diff --git a/src/templates/core/ApiRequestOptions.hbs b/src/templates/core/ApiRequestOptions.hbs index 355929a71..64e1d2920 100644 --- a/src/templates/core/ApiRequestOptions.hbs +++ b/src/templates/core/ApiRequestOptions.hbs @@ -12,4 +12,5 @@ export type ApiRequestOptions = { readonly mediaType?: string; readonly responseHeader?: string; readonly errors?: Record; + readonly type?: string; }; diff --git a/src/templates/core/fetch/getResponseBody.hbs b/src/templates/core/fetch/getResponseBody.hbs index 1011380ee..2e1356f9c 100644 --- a/src/templates/core/fetch/getResponseBody.hbs +++ b/src/templates/core/fetch/getResponseBody.hbs @@ -1,6 +1,10 @@ -export const getResponseBody = async (response: Response): Promise => { +export const getResponseBody = async (response: Response, options: ApiRequestOptions): Promise => { if (response.status !== 204) { try { + if(options.type === 'Blob') { + return await response.blob(); + } + const contentType = response.headers.get('Content-Type'); if (contentType) { const jsonTypes = ['application/json', 'application/problem+json'] diff --git a/src/templates/core/fetch/request.hbs b/src/templates/core/fetch/request.hbs index 4af6f9440..ec6ed8492 100644 --- a/src/templates/core/fetch/request.hbs +++ b/src/templates/core/fetch/request.hbs @@ -72,7 +72,7 @@ export const request = (config: OpenAPIConfig, options: ApiRequestOptions): C if (!onCancel.isCancelled) { const response = await sendRequest(config, options, url, body, formData, headers, onCancel); - const responseBody = await getResponseBody(response); + const responseBody = await getResponseBody(response, options); const responseHeader = getResponseHeader(response, options.responseHeader); const result: ApiResult = { diff --git a/src/templates/exportService.hbs b/src/templates/exportService.hbs index d6bccbbeb..6857a568d 100644 --- a/src/templates/exportService.hbs +++ b/src/templates/exportService.hbs @@ -145,6 +145,7 @@ export class {{{name}}}{{{@root.postfix}}} { {{/each}} }, {{/if}} + type: '{{>result}}', }); } From f603bae48c0f543f6ca6ff1760f2419f2b51da85 Mon Sep 17 00:00:00 2001 From: PromiSe#### Date: Mon, 15 Apr 2024 13:39:14 +0700 Subject: [PATCH 2/2] Append support type Blob for other clients --- src/templates/core/angular/sendRequest.hbs | 1 + src/templates/core/axios/request.hbs | 2 +- src/templates/core/axios/sendRequest.hbs | 4 ++++ src/templates/core/node/getResponseBody.hbs | 6 +++++- src/templates/core/node/request.hbs | 2 +- src/templates/core/xhr/getResponseBody.hbs | 6 +++++- src/templates/core/xhr/request.hbs | 2 +- src/templates/core/xhr/sendRequest.hbs | 4 ++++ 8 files changed, 22 insertions(+), 5 deletions(-) diff --git a/src/templates/core/angular/sendRequest.hbs b/src/templates/core/angular/sendRequest.hbs index ad73d8332..59b7c4722 100644 --- a/src/templates/core/angular/sendRequest.hbs +++ b/src/templates/core/angular/sendRequest.hbs @@ -12,5 +12,6 @@ export const sendRequest = ( body: body ?? formData, withCredentials: config.WITH_CREDENTIALS, observe: 'response', + responseType: options.type === 'Blob' ? 'blob' : undefined, }); }; diff --git a/src/templates/core/axios/request.hbs b/src/templates/core/axios/request.hbs index 6612f1614..1099a72ea 100644 --- a/src/templates/core/axios/request.hbs +++ b/src/templates/core/axios/request.hbs @@ -80,7 +80,7 @@ export const request = (config: OpenAPIConfig, options: ApiRequestOptions, ax if (!onCancel.isCancelled) { const response = await sendRequest(config, options, url, body, formData, headers, onCancel, axiosClient); - const responseBody = getResponseBody(response); + const responseBody = getResponseBody(response, options); const responseHeader = getResponseHeader(response, options.responseHeader); const result: ApiResult = { diff --git a/src/templates/core/axios/sendRequest.hbs b/src/templates/core/axios/sendRequest.hbs index 66b5dcb1d..3554ca024 100644 --- a/src/templates/core/axios/sendRequest.hbs +++ b/src/templates/core/axios/sendRequest.hbs @@ -20,6 +20,10 @@ export const sendRequest = async ( cancelToken: source.token, }; + if(options.type === 'Blob') { + requestConfig.responseType = 'blob'; + } + onCancel(() => source.cancel('The user aborted a request.')); try { diff --git a/src/templates/core/node/getResponseBody.hbs b/src/templates/core/node/getResponseBody.hbs index 1011380ee..2e1356f9c 100644 --- a/src/templates/core/node/getResponseBody.hbs +++ b/src/templates/core/node/getResponseBody.hbs @@ -1,6 +1,10 @@ -export const getResponseBody = async (response: Response): Promise => { +export const getResponseBody = async (response: Response, options: ApiRequestOptions): Promise => { if (response.status !== 204) { try { + if(options.type === 'Blob') { + return await response.blob(); + } + const contentType = response.headers.get('Content-Type'); if (contentType) { const jsonTypes = ['application/json', 'application/problem+json'] diff --git a/src/templates/core/node/request.hbs b/src/templates/core/node/request.hbs index 8e6f6110e..edf40a4cd 100644 --- a/src/templates/core/node/request.hbs +++ b/src/templates/core/node/request.hbs @@ -77,7 +77,7 @@ export const request = (config: OpenAPIConfig, options: ApiRequestOptions): C if (!onCancel.isCancelled) { const response = await sendRequest(options, url, body, formData, headers, onCancel); - const responseBody = await getResponseBody(response); + const responseBody = await getResponseBody(response, options); const responseHeader = getResponseHeader(response, options.responseHeader); const result: ApiResult = { diff --git a/src/templates/core/xhr/getResponseBody.hbs b/src/templates/core/xhr/getResponseBody.hbs index ccf83b1ff..e0b548a05 100644 --- a/src/templates/core/xhr/getResponseBody.hbs +++ b/src/templates/core/xhr/getResponseBody.hbs @@ -1,6 +1,10 @@ -export const getResponseBody = (xhr: XMLHttpRequest): any => { +export const getResponseBody = (xhr: XMLHttpRequest, options: ApiRequestOptions): any => { if (xhr.status !== 204) { try { + if(options.type === 'Blob') { + return xhr.response; + } + const contentType = xhr.getResponseHeader('Content-Type'); if (contentType) { const jsonTypes = ['application/json', 'application/problem+json'] diff --git a/src/templates/core/xhr/request.hbs b/src/templates/core/xhr/request.hbs index 47f92870b..fe5992435 100644 --- a/src/templates/core/xhr/request.hbs +++ b/src/templates/core/xhr/request.hbs @@ -75,7 +75,7 @@ export const request = (config: OpenAPIConfig, options: ApiRequestOptions): C if (!onCancel.isCancelled) { const response = await sendRequest(config, options, url, body, formData, headers, onCancel); - const responseBody = getResponseBody(response); + const responseBody = getResponseBody(response, options); const responseHeader = getResponseHeader(response, options.responseHeader); const result: ApiResult = { diff --git a/src/templates/core/xhr/sendRequest.hbs b/src/templates/core/xhr/sendRequest.hbs index 0badf8daa..83025487a 100644 --- a/src/templates/core/xhr/sendRequest.hbs +++ b/src/templates/core/xhr/sendRequest.hbs @@ -11,6 +11,10 @@ export const sendRequest = async ( xhr.open(options.method, url, true); xhr.withCredentials = config.WITH_CREDENTIALS; + if(options.type === 'Blob') { + xhr.responseType = 'blob'; + } + headers.forEach((value, key) => { xhr.setRequestHeader(key, value); });