diff --git a/src/templates/core/CancelablePromise.hbs b/src/templates/core/CancelablePromise.hbs index 2ce30856..c89a6a2c 100644 --- a/src/templates/core/CancelablePromise.hbs +++ b/src/templates/core/CancelablePromise.hbs @@ -1,6 +1,12 @@ export class CancelablePromise extends Promise { - constructor(executor: (resolve: (value: T | PromiseLike) => void, reject: (reason?: any) => void) => void) { + private readonly _cancel: (reason?: any) => void; + + constructor(executor: ( + resolve: (value: T | PromiseLike) => void, + reject: () => void + cancel: () => void + ) => void) { super(executor); } diff --git a/src/templates/core/fetch/request.hbs b/src/templates/core/fetch/request.hbs index 21077340..7558f243 100644 --- a/src/templates/core/fetch/request.hbs +++ b/src/templates/core/fetch/request.hbs @@ -3,7 +3,7 @@ import { ApiError } from './ApiError'; import type { ApiRequestOptions } from './ApiRequestOptions'; import type { ApiResult } from './ApiResult'; -import type { CancelablePromise } from './CancelablePromise'; +import { CancelablePromise } from './CancelablePromise'; import { OpenAPI } from './OpenAPI'; {{>functions/isDefined}} @@ -51,24 +51,25 @@ import { OpenAPI } from './OpenAPI'; /** * Request using fetch client * @param options The request options from the the service - * @returns ApiResult + * @returns CancelablePromise * @throws ApiError */ -export async function request(options: ApiRequestOptions): CancelablePromise { - const controller = new AbortController(); - const url = getUrl(options); - const response = await sendRequest(options, url, controller.signal); - const responseBody = await getResponseBody(response); - const responseHeader = getResponseHeader(response, options.responseHeader); +export function request(options: ApiRequestOptions): CancelablePromise { + return new CancelablePromise((resolve, reject, cancel) => { + const controller = new AbortController(); + const url = getUrl(options); + const response = await sendRequest(options, url, controller.signal); + const responseBody = await getResponseBody(response); + const responseHeader = getResponseHeader(response, options.responseHeader); - const result: ApiResult = { - url, - ok: response.ok, - status: response.status, - statusText: response.statusText, - body: responseHeader || responseBody, - }; + const result: ApiResult = { + url, + ok: response.ok, + status: response.status, + statusText: response.statusText, + body: responseHeader || responseBody, + }; - catchErrors(options, result); - return result; + catchErrors(options, result); + }); } diff --git a/src/templates/core/node/request.hbs b/src/templates/core/node/request.hbs index 3af6cc2b..76adafb5 100644 --- a/src/templates/core/node/request.hbs +++ b/src/templates/core/node/request.hbs @@ -8,7 +8,7 @@ import { types } from 'util'; import { ApiError } from './ApiError'; import type { ApiRequestOptions } from './ApiRequestOptions'; import type { ApiResult } from './ApiResult'; -import type { CancelablePromise } from './CancelablePromise'; +import { CancelablePromise } from './CancelablePromise'; import { OpenAPI } from './OpenAPI'; {{>functions/isDefined}} @@ -56,24 +56,25 @@ import { OpenAPI } from './OpenAPI'; /** * Request using node-fetch client * @param options The request options from the the service - * @returns ApiResult + * @returns CancelablePromise * @throws ApiError */ -export async function request(options: ApiRequestOptions): CancelablePromise { - const controller = new AbortController(); - const url = getUrl(options); - const response = await sendRequest(options, url, controller.signal); - const responseBody = await getResponseBody(response); - const responseHeader = getResponseHeader(response, options.responseHeader); +export function request(options: ApiRequestOptions): CancelablePromise { + return new CancelablePromise((resolve, reject, cancel) => { + const controller = new AbortController(); + const url = getUrl(options); + const response = await sendRequest(options, url, controller.signal); + const responseBody = await getResponseBody(response); + const responseHeader = getResponseHeader(response, options.responseHeader); - const result: ApiResult = { - url, - ok: response.ok, - status: response.status, - statusText: response.statusText, - body: responseHeader || responseBody, - }; + const result: ApiResult = { + url, + ok: response.ok, + status: response.status, + statusText: response.statusText, + body: responseHeader || responseBody, + }; - catchErrors(options, result); - return result; + catchErrors(options, result); + }); } diff --git a/src/templates/core/xhr/request.hbs b/src/templates/core/xhr/request.hbs index 4aa9cbf4..f1efea90 100644 --- a/src/templates/core/xhr/request.hbs +++ b/src/templates/core/xhr/request.hbs @@ -3,7 +3,7 @@ import { ApiError } from './ApiError'; import type { ApiRequestOptions } from './ApiRequestOptions'; import type { ApiResult } from './ApiResult'; -import type { CancelablePromise } from './CancelablePromise'; +import { CancelablePromise } from './CancelablePromise'; import { OpenAPI } from './OpenAPI'; {{>functions/isDefined}} @@ -54,23 +54,24 @@ import { OpenAPI } from './OpenAPI'; /** * Request using XHR client * @param options The request options from the the service - * @returns ApiResult + * @returns CancelablePromise * @throws ApiError */ -export async function request(options: ApiRequestOptions): CancelablePromise { - const url = getUrl(options); - const response = await sendRequest(options, url); - const responseBody = getResponseBody(response); - const responseHeader = getResponseHeader(response, options.responseHeader); +export function request(options: ApiRequestOptions): CancelablePromise { + return new CancelablePromise((resolve, reject, cancel) => { + const url = getUrl(options); + const response = await sendRequest(options, url); + const responseBody = getResponseBody(response); + const responseHeader = getResponseHeader(response, options.responseHeader); - const result: ApiResult = { - url, - ok: isSuccess(response.status), - status: response.status, - statusText: response.statusText, - body: responseHeader || responseBody, - }; + const result: ApiResult = { + url, + ok: isSuccess(response.status), + status: response.status, + statusText: response.statusText, + body: responseHeader || responseBody, + }; - catchErrors(options, result); - return result; + catchErrors(options, result); + }); } diff --git a/src/templates/core/xhr/sendRequest.hbs b/src/templates/core/xhr/sendRequest.hbs index 70c08b1f..05c14a0a 100644 --- a/src/templates/core/xhr/sendRequest.hbs +++ b/src/templates/core/xhr/sendRequest.hbs @@ -16,5 +16,7 @@ async function sendRequest(options: ApiRequestOptions, url: string): Promiseparameters}}): CancelablePromise<{{>result}}> { - const result = await __request({ + public static {{{name}}}({{>parameters}}): CancelablePromise<{{>result}}> { + return __request({ method: '{{{method}}}', path: `{{{path}}}`, {{#if parametersCookie}} @@ -82,7 +82,6 @@ export class {{{name}}} { }, {{/if}} }); - return result.body; } {{/each}} diff --git a/src/utils/registerHandlebarTemplates.ts b/src/utils/registerHandlebarTemplates.ts index 54e113a1..1c0128b7 100644 --- a/src/utils/registerHandlebarTemplates.ts +++ b/src/utils/registerHandlebarTemplates.ts @@ -4,6 +4,7 @@ import { HttpClient } from '../HttpClient'; import templateCoreApiError from '../templates/core/ApiError.hbs'; import templateCoreApiRequestOptions from '../templates/core/ApiRequestOptions.hbs'; import templateCoreApiResult from '../templates/core/ApiResult.hbs'; +import templateCancelablePromise from '../templates/core/CancelablePromise.hbs'; import fetchGetHeaders from '../templates/core/fetch/getHeaders.hbs'; import fetchGetRequestBody from '../templates/core/fetch/getRequestBody.hbs'; import fetchGetResponseBody from '../templates/core/fetch/getResponseBody.hbs'; @@ -28,7 +29,6 @@ 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 templateCoreSettings from '../templates/core/OpenAPI.hbs'; -import templateCancelablePromise from '../templates/core/CancelablePromise.hbs'; import templateCoreRequest from '../templates/core/request.hbs'; import xhrGetHeaders from '../templates/core/xhr/getHeaders.hbs'; import xhrGetRequestBody from '../templates/core/xhr/getRequestBody.hbs'; diff --git a/test/custom/request.ts b/test/custom/request.ts index 0c246a6b..8fb19a70 100644 --- a/test/custom/request.ts +++ b/test/custom/request.ts @@ -2,22 +2,17 @@ /* tslint:disable */ /* eslint-disable */ import type { ApiRequestOptions } from './ApiRequestOptions'; -import type { ApiResult } from './ApiResult'; +import { CancelablePromise } from './CancelablePromise'; import { OpenAPI } from './OpenAPI'; -export async function request(options: ApiRequestOptions): Promise { +export function request(options: ApiRequestOptions): CancelablePromise { + return new CancelablePromise((resolve, reject, cancel) => { + const url = `${OpenAPI.BASE}${options.path}`; - const url = `${OpenAPI.BASE}${options.path}`; + // Do your request... - // Do your request... - - return { - url, - ok: true, - status: 200, - statusText: 'dummy', - body: { + resolve({ ...options - }, - }; + }); + }); }