diff --git a/src/templates/client.hbs b/src/templates/client.hbs index 33cc0f1d..4f643fb2 100644 --- a/src/templates/client.hbs +++ b/src/templates/client.hbs @@ -3,6 +3,7 @@ import type { BaseHttpRequest } from './core/BaseHttpRequest'; import type { OpenAPIConfig } from './core/OpenAPI'; import { {{{httpRequest}}} } from './core/{{{httpRequest}}}'; + {{#if services}} {{#each services}} import { {{{name}}}{{{@root.postfix}}} } from './services/{{{name}}}{{{@root.postfix}}}'; @@ -17,7 +18,7 @@ export class {{{clientName}}} { public readonly {{{camelCase name}}}: {{{name}}}{{{@root.postfix}}}; {{/each}} - public readonly request: BaseHttpRequest; + private readonly request: BaseHttpRequest; constructor(config?: OpenAPIConfig, HttpRequest: HttpRequestConstructor = {{{httpRequest}}}) { this.request = new HttpRequest({ diff --git a/src/utils/getHttpRequestName.ts b/src/utils/getHttpRequestName.ts index e25d2380..b6906209 100644 --- a/src/utils/getHttpRequestName.ts +++ b/src/utils/getHttpRequestName.ts @@ -1,3 +1,18 @@ -export const getHttpRequestName = (): string => { - return ''; +import { HttpClient } from '../HttpClient'; + +/** + * Generate the HttpRequest filename based on the selected client + * @param httpClient The selected httpClient (fetch, xhr, node or axios) + */ +export const getHttpRequestName = (httpClient: HttpClient): string => { + switch (httpClient) { + case HttpClient.FETCH: + return 'FetchHttpRequest'; + case HttpClient.XHR: + return 'XHRHttpRequest'; + case HttpClient.NODE: + return 'NodeHttpRequest'; + case HttpClient.AXIOS: + return 'AxiosHttpRequest'; + } }; diff --git a/src/utils/registerHandlebarHelpers.ts b/src/utils/registerHandlebarHelpers.ts index f03ab5f0..58b2ad18 100644 --- a/src/utils/registerHandlebarHelpers.ts +++ b/src/utils/registerHandlebarHelpers.ts @@ -2,9 +2,9 @@ import camelCase from 'camelcase'; import Handlebars from 'handlebars/runtime'; import { EOL } from 'os'; -import { Enum } from '../client/interfaces/Enum'; -import { Model } from '../client/interfaces/Model'; -import { HttpClient } from '../HttpClient'; +import type { Enum } from '../client/interfaces/Enum'; +import type { Model } from '../client/interfaces/Model'; +import type { HttpClient } from '../HttpClient'; import { unique } from './unique'; export const registerHandlebarHelpers = (root: { diff --git a/src/utils/writeClient.spec.ts b/src/utils/writeClient.spec.ts index bc38b4b6..3c06a95a 100644 --- a/src/utils/writeClient.spec.ts +++ b/src/utils/writeClient.spec.ts @@ -2,7 +2,7 @@ import type { Client } from '../client/interfaces/Client'; import { HttpClient } from '../HttpClient'; import { Indent } from '../Indent'; import { mkdir, rmdir, writeFile } from './fileSystem'; -import { Templates } from './registerHandlebarTemplates'; +import type { Templates } from './registerHandlebarTemplates'; import { writeClient } from './writeClient'; jest.mock('./fileSystem'); diff --git a/src/utils/writeClient.ts b/src/utils/writeClient.ts index 4a1feaab..e77828db 100644 --- a/src/utils/writeClient.ts +++ b/src/utils/writeClient.ts @@ -1,12 +1,12 @@ import { resolve } from 'path'; import type { Client } from '../client/interfaces/Client'; -import { HttpClient } from '../HttpClient'; -import { Indent } from '../Indent'; +import type { HttpClient } from '../HttpClient'; +import type { Indent } from '../Indent'; import { mkdir, rmdir } from './fileSystem'; import { isDefined } from './isDefined'; import { isSubDirectory } from './isSubdirectory'; -import { Templates } from './registerHandlebarTemplates'; +import type { Templates } from './registerHandlebarTemplates'; import { writeClientClass } from './writeClientClass'; import { writeClientCore } from './writeClientCore'; import { writeClientIndex } from './writeClientIndex'; diff --git a/src/utils/writeClientClass.spec.ts b/src/utils/writeClientClass.spec.ts index 871e2052..3aa6d29c 100644 --- a/src/utils/writeClientClass.spec.ts +++ b/src/utils/writeClientClass.spec.ts @@ -2,7 +2,7 @@ import type { Client } from '../client/interfaces/Client'; import { HttpClient } from '../HttpClient'; import { Indent } from '../Indent'; import { mkdir, rmdir, writeFile } from './fileSystem'; -import { Templates } from './registerHandlebarTemplates'; +import type { Templates } from './registerHandlebarTemplates'; import { writeClientClass } from './writeClientClass'; jest.mock('./fileSystem'); diff --git a/src/utils/writeClientClass.ts b/src/utils/writeClientClass.ts index 2b06d7d6..be0702c8 100644 --- a/src/utils/writeClientClass.ts +++ b/src/utils/writeClientClass.ts @@ -1,14 +1,16 @@ import { resolve } from 'path'; import type { Client } from '../client/interfaces/Client'; -import { HttpClient } from '../HttpClient'; -import { Indent } from '../Indent'; +import type { HttpClient } from '../HttpClient'; +import type { Indent } from '../Indent'; import { writeFile } from './fileSystem'; import { formatCode as f } from './formatCode'; import { formatIndentation as i } from './formatIndentation'; -import { Templates } from './registerHandlebarTemplates'; +import { getHttpRequestName } from './getHttpRequestName'; +import type { Templates } from './registerHandlebarTemplates'; import { sortModelsByName } from './sortModelsByName'; import { sortServicesByName } from './sortServicesByName'; + /** * Generate the OpenAPI client index file using the Handlebar template and write it to disk. * The index file just contains all the exports you need to use the client as a standalone @@ -37,7 +39,7 @@ export const writeClientClass = async ( version: client.version, models: sortModelsByName(client.models), services: sortServicesByName(client.services), - httpRequest: 'XHRHttpRequest', + httpRequest: getHttpRequestName(httpClient), }); await writeFile(resolve(outputPath, 'client.ts'), i(f(templateResult), indent)); diff --git a/src/utils/writeClientCore.spec.ts b/src/utils/writeClientCore.spec.ts index b9222227..cb2cc292 100644 --- a/src/utils/writeClientCore.spec.ts +++ b/src/utils/writeClientCore.spec.ts @@ -2,7 +2,7 @@ import type { Client } from '../client/interfaces/Client'; import { HttpClient } from '../HttpClient'; import { Indent } from '../Indent'; import { writeFile } from './fileSystem'; -import { Templates } from './registerHandlebarTemplates'; +import type { Templates } from './registerHandlebarTemplates'; import { writeClientCore } from './writeClientCore'; jest.mock('./fileSystem'); diff --git a/src/utils/writeClientCore.ts b/src/utils/writeClientCore.ts index 2e641e1a..3be78d9e 100644 --- a/src/utils/writeClientCore.ts +++ b/src/utils/writeClientCore.ts @@ -1,12 +1,13 @@ import { resolve } from 'path'; import type { Client } from '../client/interfaces/Client'; -import { HttpClient } from '../HttpClient'; -import { Indent } from '../Indent'; +import type { HttpClient } from '../HttpClient'; +import type { Indent } from '../Indent'; import { copyFile, exists, writeFile } from './fileSystem'; import { formatIndentation as i } from './formatIndentation'; +import { getHttpRequestName } from './getHttpRequestName'; import { isDefined } from './isDefined'; -import { Templates } from './registerHandlebarTemplates'; +import type { Templates } from './registerHandlebarTemplates'; /** * Generate OpenAPI core files, this includes the basic boilerplate code to handle requests. @@ -26,12 +27,13 @@ export const writeClientCore = async ( clientName?: string, request?: string ): Promise => { + const httpRequest = getHttpRequestName(httpClient); const context = { httpClient, clientName, + httpRequest, server: client.server, version: client.version, - httpRequest: 'XHRHttpRequest', }; await writeFile(resolve(outputPath, 'OpenAPI.ts'), i(templates.core.settings(context), indent)); @@ -43,7 +45,7 @@ export const writeClientCore = async ( if (isDefined(clientName)) { await writeFile(resolve(outputPath, 'BaseHttpRequest.ts'), i(templates.core.baseHttpRequest(context), indent)); - await writeFile(resolve(outputPath, 'XHRHttpRequest.ts'), i(templates.core.httpRequest(context), indent)); + await writeFile(resolve(outputPath, `${httpRequest}.ts`), i(templates.core.httpRequest(context), indent)); } if (request) { diff --git a/src/utils/writeClientIndex.spec.ts b/src/utils/writeClientIndex.spec.ts index ffc365bd..6284dfd2 100644 --- a/src/utils/writeClientIndex.spec.ts +++ b/src/utils/writeClientIndex.spec.ts @@ -1,6 +1,6 @@ import type { Client } from '../client/interfaces/Client'; import { writeFile } from './fileSystem'; -import { Templates } from './registerHandlebarTemplates'; +import type { Templates } from './registerHandlebarTemplates'; import { writeClientIndex } from './writeClientIndex'; jest.mock('./fileSystem'); diff --git a/src/utils/writeClientModels.spec.ts b/src/utils/writeClientModels.spec.ts index 61e2255b..81b7b58b 100644 --- a/src/utils/writeClientModels.spec.ts +++ b/src/utils/writeClientModels.spec.ts @@ -2,7 +2,7 @@ import type { Model } from '../client/interfaces/Model'; import { HttpClient } from '../HttpClient'; import { Indent } from '../Indent'; import { writeFile } from './fileSystem'; -import { Templates } from './registerHandlebarTemplates'; +import type { Templates } from './registerHandlebarTemplates'; import { writeClientModels } from './writeClientModels'; jest.mock('./fileSystem'); diff --git a/src/utils/writeClientModels.ts b/src/utils/writeClientModels.ts index 8ea5fc22..9ecf7568 100644 --- a/src/utils/writeClientModels.ts +++ b/src/utils/writeClientModels.ts @@ -1,12 +1,12 @@ import { resolve } from 'path'; import type { Model } from '../client/interfaces/Model'; -import { HttpClient } from '../HttpClient'; -import { Indent } from '../Indent'; +import type { HttpClient } from '../HttpClient'; +import type { Indent } from '../Indent'; import { writeFile } from './fileSystem'; import { formatCode as f } from './formatCode'; import { formatIndentation as i } from './formatIndentation'; -import { Templates } from './registerHandlebarTemplates'; +import type { Templates } from './registerHandlebarTemplates'; /** * Generate Models using the Handlebar template and write to disk. diff --git a/src/utils/writeClientSchemas.spec.ts b/src/utils/writeClientSchemas.spec.ts index 1f917223..499aba3e 100644 --- a/src/utils/writeClientSchemas.spec.ts +++ b/src/utils/writeClientSchemas.spec.ts @@ -2,7 +2,7 @@ import type { Model } from '../client/interfaces/Model'; import { HttpClient } from '../HttpClient'; import { Indent } from '../Indent'; import { writeFile } from './fileSystem'; -import { Templates } from './registerHandlebarTemplates'; +import type { Templates } from './registerHandlebarTemplates'; import { writeClientSchemas } from './writeClientSchemas'; jest.mock('./fileSystem'); diff --git a/src/utils/writeClientSchemas.ts b/src/utils/writeClientSchemas.ts index 18727198..0e51e6fb 100644 --- a/src/utils/writeClientSchemas.ts +++ b/src/utils/writeClientSchemas.ts @@ -1,12 +1,12 @@ import { resolve } from 'path'; import type { Model } from '../client/interfaces/Model'; -import { HttpClient } from '../HttpClient'; -import { Indent } from '../Indent'; +import type { HttpClient } from '../HttpClient'; +import type { Indent } from '../Indent'; import { writeFile } from './fileSystem'; import { formatCode as f } from './formatCode'; import { formatIndentation as i } from './formatIndentation'; -import { Templates } from './registerHandlebarTemplates'; +import type { Templates } from './registerHandlebarTemplates'; /** * Generate Schemas using the Handlebar template and write to disk. diff --git a/src/utils/writeClientServices.spec.ts b/src/utils/writeClientServices.spec.ts index 387ea208..38a64948 100644 --- a/src/utils/writeClientServices.spec.ts +++ b/src/utils/writeClientServices.spec.ts @@ -2,7 +2,7 @@ import type { Service } from '../client/interfaces/Service'; import { HttpClient } from '../HttpClient'; import { Indent } from '../Indent'; import { writeFile } from './fileSystem'; -import { Templates } from './registerHandlebarTemplates'; +import type { Templates } from './registerHandlebarTemplates'; import { writeClientServices } from './writeClientServices'; jest.mock('./fileSystem'); diff --git a/src/utils/writeClientServices.ts b/src/utils/writeClientServices.ts index 7bf47652..633fe3af 100644 --- a/src/utils/writeClientServices.ts +++ b/src/utils/writeClientServices.ts @@ -1,12 +1,12 @@ import { resolve } from 'path'; import type { Service } from '../client/interfaces/Service'; -import { HttpClient } from '../HttpClient'; -import { Indent } from '../Indent'; +import type { HttpClient } from '../HttpClient'; +import type { Indent } from '../Indent'; import { writeFile } from './fileSystem'; import { formatCode as f } from './formatCode'; import { formatIndentation as i } from './formatIndentation'; -import { Templates } from './registerHandlebarTemplates'; +import type { Templates } from './registerHandlebarTemplates'; const VERSION_TEMPLATE_STRING = 'OpenAPI.VERSION';