diff --git a/src/templates/client.hbs b/src/templates/client.hbs new file mode 100644 index 00000000..51afc61a --- /dev/null +++ b/src/templates/client.hbs @@ -0,0 +1,39 @@ +{{>header}} + +import type { BaseHttpRequest } from './core/BaseHttpRequest'; +import type { OpenAPIConfig } from './core/OpenAPI'; +import { {{{httpRequest}}} } from './core/{{{httpRequest}}}'; +{{#if services}} +{{#each services}} +import { {{{name}}} } from './services/{{{name}}}'; +{{/each}} +{{/if}} + +type HttpRequestConstructor = new (config: OpenAPIConfig) => BaseHttpRequest; + +export class {{{clientName}}} { + +{{#each services}} + readonly {{{name}}}: {{{name}}}; +{{/each}} + + readonly request: BaseHttpRequest; + + constructor(config?: OpenAPIConfig, HttpRequest: HttpRequestConstructor = {{{httpRequest}}}) { + this.request = new HttpRequest({ + BASE: config?.BASE ?? '{{{server}}}', + VERSION: config?.VERSION ?? '{{{version}}}', + WITH_CREDENTIALS: config?.WITH_CREDENTIALS ?? false, + CREDENTIALS: config?.CREDENTIALS ?? 'include', + TOKEN: config?.TOKEN, + USERNAME: config?.USERNAME, + PASSWORD: config?.PASSWORD, + HEADERS: config?.HEADERS, + ENCODE_PATH: config?.ENCODE_PATH, + }); + + {{#each services}} + this.{{{name}}} = new {{{name}}}(this.request); + {{/each}} + } +} diff --git a/src/templates/core/BaseHttpRequest.hbs b/src/templates/core/BaseHttpRequest.hbs new file mode 100644 index 00000000..6a70629a --- /dev/null +++ b/src/templates/core/BaseHttpRequest.hbs @@ -0,0 +1,17 @@ +{{>header}} + +import type { ApiRequestOptions } from './ApiRequestOptions'; +import type { CancelablePromise } from './CancelablePromise'; +import type { OpenAPIConfig } from './OpenAPI'; + +export class BaseHttpRequest { + protected readonly config: OpenAPIConfig; + + constructor(config: OpenAPIConfig) { + this.config = config; + } + + public request(options: ApiRequestOptions): CancelablePromise { + throw new Error('Not Implemented'); + } +} diff --git a/src/templates/core/HttpRequest.hbs b/src/templates/core/HttpRequest.hbs new file mode 100644 index 00000000..ed97a39b --- /dev/null +++ b/src/templates/core/HttpRequest.hbs @@ -0,0 +1,22 @@ +{{>header}} + +import type { BaseHttpRequest } from './BaseHttpRequest'; +import type { OpenAPIConfig } from './OpenAPI'; +import { request as __request } from './request'; + +export class {{HttpRequest}} extends BaseHttpRequest { + + constructor(config: OpenAPIConfig) { + super(config); + } + + /** + * Request method + * @param options The request options from the service + * @returns CancelablePromise + * @throws ApiError + */ + public request(options: ApiRequestOptions): CancelablePromise { + return __request(this.config, options); + } +} diff --git a/src/templates/core/axios/request.hbs b/src/templates/core/axios/request.hbs index 755555bf..6f7765a0 100644 --- a/src/templates/core/axios/request.hbs +++ b/src/templates/core/axios/request.hbs @@ -59,7 +59,7 @@ import type { OpenAPIConfig } from './OpenAPI'; /** - * Request using axios client + * Request method * @param config The OpenAPI configuration object * @param options The request options from the service * @returns CancelablePromise @@ -83,7 +83,7 @@ export const request = (config: OpenAPIConfig, options: ApiRequestOptions): C ok: isSuccess(response.status), status: response.status, statusText: response.statusText, - body: responseHeader || responseBody, + body: responseHeader ?? responseBody, }; catchErrors(options, result); diff --git a/src/templates/core/axios/sendRequest.hbs b/src/templates/core/axios/sendRequest.hbs index f5c08e40..41af3b46 100644 --- a/src/templates/core/axios/sendRequest.hbs +++ b/src/templates/core/axios/sendRequest.hbs @@ -12,7 +12,7 @@ const sendRequest = async ( const requestConfig: AxiosRequestConfig = { url, headers, - data: body || formData, + data: body ?? formData, method: options.method, withCredentials: config.WITH_CREDENTIALS, cancelToken: source.token, diff --git a/src/templates/core/fetch/request.hbs b/src/templates/core/fetch/request.hbs index 6116daed..5815f6e4 100644 --- a/src/templates/core/fetch/request.hbs +++ b/src/templates/core/fetch/request.hbs @@ -56,7 +56,7 @@ import type { OpenAPIConfig } from './OpenAPI'; /** - * Request using fetch client + * Request method * @param config The OpenAPI configuration object * @param options The request options from the service * @returns CancelablePromise @@ -80,7 +80,7 @@ export const request = (config: OpenAPIConfig, options: ApiRequestOptions): C ok: response.ok, status: response.status, statusText: response.statusText, - body: responseHeader || responseBody, + body: responseHeader ?? responseBody, }; catchErrors(options, result); diff --git a/src/templates/core/fetch/sendRequest.hbs b/src/templates/core/fetch/sendRequest.hbs index fa10a698..d0a0c7c7 100644 --- a/src/templates/core/fetch/sendRequest.hbs +++ b/src/templates/core/fetch/sendRequest.hbs @@ -11,7 +11,7 @@ export const sendRequest = async ( const request: RequestInit = { headers, - body: body || formData, + body: body ?? formData, method: options.method, signal: controller.signal, }; diff --git a/src/templates/core/node/request.hbs b/src/templates/core/node/request.hbs index 367254d5..fdd33a26 100644 --- a/src/templates/core/node/request.hbs +++ b/src/templates/core/node/request.hbs @@ -60,7 +60,7 @@ import type { OpenAPIConfig } from './OpenAPI'; /** - * Request using node-fetch client + * Request method * @param config The OpenAPI configuration object * @param options The request options from the service * @returns CancelablePromise @@ -84,7 +84,7 @@ export const request = (config: OpenAPIConfig, options: ApiRequestOptions): C ok: response.ok, status: response.status, statusText: response.statusText, - body: responseHeader || responseBody, + body: responseHeader ?? responseBody, }; catchErrors(options, result); diff --git a/src/templates/core/node/sendRequest.hbs b/src/templates/core/node/sendRequest.hbs index 1160ad66..dd6ac3df 100644 --- a/src/templates/core/node/sendRequest.hbs +++ b/src/templates/core/node/sendRequest.hbs @@ -11,7 +11,7 @@ export const sendRequest = async ( const request: RequestInit = { headers, method: options.method, - body: body || formData, + body: body ?? formData, signal: controller.signal, }; diff --git a/src/templates/core/xhr/request.hbs b/src/templates/core/xhr/request.hbs index d9d32225..b5f91d4b 100644 --- a/src/templates/core/xhr/request.hbs +++ b/src/templates/core/xhr/request.hbs @@ -59,7 +59,7 @@ import type { OpenAPIConfig } from './OpenAPI'; /** - * Request using XHR client + * Request method * @param config The OpenAPI configuration object * @param options The request options from the service * @returns CancelablePromise @@ -83,7 +83,7 @@ export const request = (config: OpenAPIConfig, options: ApiRequestOptions): C ok: isSuccess(response.status), status: response.status, statusText: response.statusText, - body: responseHeader || responseBody, + body: responseHeader ?? responseBody, }; catchErrors(options, result); diff --git a/src/templates/core/xhr/sendRequest.hbs b/src/templates/core/xhr/sendRequest.hbs index d51f6e3c..ea2f8da5 100644 --- a/src/templates/core/xhr/sendRequest.hbs +++ b/src/templates/core/xhr/sendRequest.hbs @@ -19,7 +19,7 @@ export const sendRequest = async ( xhr.onload = () => resolve(xhr); xhr.onabort = () => reject(new Error('Request aborted')); xhr.onerror = () => reject(new Error('Network error')); - xhr.send(body || formData); + xhr.send(body ?? formData); onCancel(() => xhr.abort()); });