fork of hey-api/openapi-ts because I need some additional things
0
fork

Configure Feed

Select the types of activity you want to include in your feed.

Merge pull request #363 from hey-api/chore/rename-files

feat: rename generated files

authored by

Lubos and committed by
GitHub
d82f3110 de22f5bc

+502 -614
+6
.changeset/healthy-plants-own.md
··· 1 + --- 2 + "@hey-api/openapi-ts": minor 3 + "openapi-ts-docs": minor 4 + --- 5 + 6 + feat: rename generated files
+44 -13
docs/openapi-ts/migrating.md
··· 13 13 14 14 ### Deprecated exports from `index.ts` 15 15 16 - Currently, `index.ts` file exports all generated artifacts. 16 + Currently, `index.ts` file exports all generated artifacts. We will be slowly moving away from this practice. 17 17 18 - ```ts 18 + ```js 19 19 export { ApiError } from './core/ApiError'; 20 20 export { CancelablePromise, CancelError } from './core/CancelablePromise'; 21 21 export { OpenAPI, type OpenAPIConfig } from './core/OpenAPI'; 22 - export * from './models'; 23 - export * from './schemas'; 24 - export * from './services'; 22 + export * from './models'; // [!code --] 23 + export * from './schemas'; // [!code --] 24 + export * from './services'; // [!code --] 25 25 ``` 26 26 27 - We will be slowly moving away from this practice. Any non-core related imports should be imported as 27 + Any non-core related imports should be imported as 28 28 29 - ```ts 29 + ```js 30 30 import type { Model } from 'client/models'; 31 31 import { $Schema } from 'client/schemas'; 32 32 import { DefaultService } from 'client/services'; ··· 54 54 55 55 ### Single `enums.gen.ts` file 56 56 57 - Enums are now exported from a single file. If you used imports from `model.ts`, you can change it to `enums.gen.ts`. 57 + Enums are now exported from a separate file. If you use imports from `models.ts`, you can change them to `enums.gen.ts`. 58 58 59 59 ```js 60 60 import { Enum } from 'client/models' // [!code --] 61 - import { Enum } from 'client/enums.gen.ts' // [!code ++] 61 + import { Enum } from 'client/enums.gen' // [!code ++] 62 + ``` 63 + 64 + ### Renamed `models.ts` file 65 + 66 + `models.ts` is now called `models.gen.ts`. If you use imports from `models.ts`, you should be able to easily find and replace all instances. 67 + 68 + ```js 69 + import type { Model } from 'client/models' // [!code --] 70 + import type { Model } from 'client/models.gen' // [!code ++] 71 + ``` 72 + 73 + ### Renamed `schemas.ts` file 74 + 75 + `schemas.ts` is now called `schemas.gen.ts`. If you use imports from `schemas.ts`, you should be able to easily find and replace all instances. 76 + 77 + ```js 78 + import { $Schema } from 'client/schemas' // [!code --] 79 + import { $Schema } from 'client/schemas.gen' // [!code ++] 62 80 ``` 63 81 64 - Enums are no longer exported from `index.ts`. If you used imports from index file, you will need to move enums into their own import statement. 82 + ### Renamed `services.ts` file 83 + 84 + `services.ts` is now called `services.gen.ts`. If you use imports from `services.ts`, you should be able to easily find and replace all instances. 65 85 66 86 ```js 67 - import { Enum, DefaultService } from 'client' // [!code --] 68 - import { Enum } from 'client/enums.gen.ts' // [!code ++] 69 - import { DefaultService } from 'client/services' // [!code ++] 87 + import { DefaultService } from 'client/services' // [!code --] 88 + import { DefaultService } from 'client/services.gen' // [!code ++] 89 + ``` 90 + 91 + ### Deprecated exports from `index.ts` 92 + 93 + Until this release, `index.ts` file exported all generated artifacts. Starting from this release, enums are no longer exported from `index.ts`. Models, schemas, and services will continue to be exported from `index.ts` to avoid a huge migration lift, but we recommend migrating to import groups per artifact type. 94 + 95 + ```js 96 + import { Enum, type Model, $Schema, DefaultService } from 'client' // [!code --] 97 + import { Enum } from 'client/enums.gen' // [!code ++] 98 + import type { Model } from 'client/models.gen' // [!code ++] 99 + import { $Schema } from 'client/schemas.gen' // [!code ++] 100 + import { DefaultService } from 'client/services.gen' // [!code ++] 70 101 ``` 71 102 72 103 ## v0.38.0
+14
packages/openapi-ts/src/compiler/index.ts
··· 1 1 import { PathLike, rmSync, writeFileSync } from 'node:fs'; 2 + import path from 'node:path'; 2 3 3 4 import ts from 'typescript'; 4 5 ··· 10 11 export type { Property } from './typedef'; 11 12 export type { Comments } from './utils'; 12 13 export type { Node, TypeNode } from 'typescript'; 14 + 15 + // eslint-disable-next-line @typescript-eslint/no-unused-vars 16 + export const generatedFileName = (fileName: string, insertGen = true) => { 17 + const match = fileName.match(/\.[0-9a-z]+$/i); 18 + const extension = match ? match[0].slice(1) : ''; 19 + const filePath = fileName.slice(0, fileName.length - (extension ? extension.length + 1 : 0)); 20 + return [filePath, insertGen && 'gen', extension].filter(Boolean).join('.'); 21 + }; 22 + 23 + export const filePath = (folderPath: string, fileName: string, insertGen = true) => { 24 + const name = generatedFileName(fileName, insertGen); 25 + return path.resolve(folderPath, name); 26 + }; 13 27 14 28 export class TypeScriptFile { 15 29 private _headers: Array<string> = [];
+1 -1
packages/openapi-ts/src/templates/client.hbs
··· 16 16 17 17 {{#if services}} 18 18 {{#each services}} 19 - import { {{{name}}}{{{@root.$config.postfixServices}}} } from './services'; 19 + import { {{{name}}}{{{@root.$config.postfixServices}}} } from './services.gen'; 20 20 {{/each}} 21 21 {{/if}} 22 22
+1 -1
packages/openapi-ts/src/utils/write/__tests__/models.spec.ts
··· 61 61 62 62 await writeTypesAndEnums(openApi, '/', client); 63 63 64 - expect(writeFileSync).toHaveBeenCalledWith(path.resolve('/', '/models.ts'), expect.anything()); 64 + expect(writeFileSync).toHaveBeenCalledWith(path.resolve('/', '/models.gen.ts'), expect.anything()); 65 65 }); 66 66 });
+1 -1
packages/openapi-ts/src/utils/write/__tests__/schemas.spec.ts
··· 44 44 45 45 await writeSchemas(openApi, '/'); 46 46 47 - expect(writeFileSync).toHaveBeenCalledWith(path.resolve('/', '/schemas.ts'), expect.anything()); 47 + expect(writeFileSync).toHaveBeenCalledWith(path.resolve('/', '/schemas.gen.ts'), expect.anything()); 48 48 }); 49 49 });
+5 -7
packages/openapi-ts/src/utils/write/index.ts
··· 1 - import path from 'node:path'; 2 - 3 - import { compiler, TypeScriptFile } from '../../compiler'; 1 + import { compiler, filePath, generatedFileName, TypeScriptFile } from '../../compiler'; 4 2 import type { Client } from '../../types/client'; 5 3 import { getConfig } from '../config'; 6 4 ··· 13 11 export const writeClientIndex = async (client: Client, outputPath: string): Promise<void> => { 14 12 const config = getConfig(); 15 13 16 - const fileIndex = new TypeScriptFile({ path: path.resolve(outputPath, 'index.ts') }); 14 + const fileIndex = new TypeScriptFile({ path: filePath(outputPath, 'index.ts', false) }); 17 15 18 16 if (config.name) { 19 17 fileIndex.add(compiler.export.named([config.name], `./${config.name}`)); ··· 37 35 38 36 if (client.models.length) { 39 37 if (config.exportModels) { 40 - fileIndex.add(compiler.export.all('./models')); 38 + fileIndex.add(compiler.export.all(generatedFileName('./models'))); 41 39 } 42 40 if (config.schemas) { 43 - fileIndex.add(compiler.export.all('./schemas')); 41 + fileIndex.add(compiler.export.all(generatedFileName('./schemas'))); 44 42 } 45 43 } 46 44 47 45 if (client.services.length && config.exportServices) { 48 - fileIndex.add(compiler.export.all('./services')); 46 + fileIndex.add(compiler.export.all(generatedFileName('./services'))); 49 47 } 50 48 51 49 fileIndex.write();
+3 -5
packages/openapi-ts/src/utils/write/models.ts
··· 1 - import path from 'node:path'; 2 - 3 - import { type Comments, compiler, type Node, TypeScriptFile } from '../../compiler'; 1 + import { type Comments, compiler, filePath, type Node, TypeScriptFile } from '../../compiler'; 4 2 import { addLeadingComment } from '../../compiler/utils'; 5 3 import type { Model, OpenApi, OperationParameter, Service } from '../../openApi'; 6 4 import { ensureValidTypeScriptJavaScriptIdentifier } from '../../openApi/common/parser/sanitize'; ··· 225 223 export const writeTypesAndEnums = async (openApi: OpenApi, outputPath: string, client: Client): Promise<void> => { 226 224 const config = getConfig(); 227 225 228 - const fileEnums = new TypeScriptFile({ path: path.resolve(outputPath, 'enums.gen.ts') }); 229 - const fileModels = new TypeScriptFile({ path: path.resolve(outputPath, 'models.ts') }); 226 + const fileEnums = new TypeScriptFile({ path: filePath(outputPath, 'enums.ts') }); 227 + const fileModels = new TypeScriptFile({ path: filePath(outputPath, 'models.ts') }); 230 228 231 229 for (const model of client.models) { 232 230 processModel(client, model, (node, type) => {
+2 -4
packages/openapi-ts/src/utils/write/schemas.ts
··· 1 - import path from 'node:path'; 2 - 3 - import { compiler, TypeScriptFile } from '../../compiler'; 1 + import { compiler, filePath, TypeScriptFile } from '../../compiler'; 4 2 import type { OpenApi } from '../../openApi'; 5 3 import { ensureValidTypeScriptJavaScriptIdentifier } from '../../openApi/common/parser/sanitize'; 6 4 import { getConfig } from '../config'; ··· 13 11 export const writeSchemas = async (openApi: OpenApi, outputPath: string): Promise<void> => { 14 12 const config = getConfig(); 15 13 16 - const fileSchemas = new TypeScriptFile({ path: path.resolve(outputPath, 'schemas.ts') }); 14 + const fileSchemas = new TypeScriptFile({ path: filePath(outputPath, 'schemas.ts') }); 17 15 18 16 const addSchema = (name: string, obj: any) => { 19 17 const validName = `$${ensureValidTypeScriptJavaScriptIdentifier(name)}`;
+3 -5
packages/openapi-ts/src/utils/write/services.ts
··· 1 - import path from 'node:path'; 2 - 3 - import { TypeScriptFile } from '../../compiler'; 1 + import { filePath, generatedFileName, TypeScriptFile } from '../../compiler'; 4 2 import type { OpenApi } from '../../openApi'; 5 3 import type { Client } from '../../types/client'; 6 4 import { getConfig } from '../config'; ··· 22 20 ): Promise<void> => { 23 21 const config = getConfig(); 24 22 25 - const fileServices = new TypeScriptFile({ path: path.resolve(outputPath, 'services.ts') }); 23 + const fileServices = new TypeScriptFile({ path: filePath(outputPath, 'services.ts') }); 26 24 27 25 let imports: string[] = []; 28 26 let results: string[] = []; ··· 62 60 63 61 // Import all models required by the services. 64 62 const models = imports.filter(unique).map(imp => ({ isTypeOnly: true, name: imp })); 65 - fileServices.addNamedImport(models, './models'); 63 + fileServices.addNamedImport(models, generatedFileName('./models')); 66 64 67 65 fileServices.add(...results); 68 66
+3 -3
packages/openapi-ts/test/__snapshots__/test/generated/v2/index.ts.snap
··· 3 3 export { ApiError } from './core/ApiError'; 4 4 export { CancelablePromise, CancelError } from './core/CancelablePromise'; 5 5 export { OpenAPI, type OpenAPIConfig } from './core/OpenAPI'; 6 - export * from './models'; 7 - export * from './schemas'; 8 - export * from './services'; 6 + export * from './models.gen'; 7 + export * from './schemas.gen'; 8 + export * from './services.gen';
packages/openapi-ts/test/__snapshots__/test/generated/v2/models.ts.snap packages/openapi-ts/test/__snapshots__/test/generated/v2/models.gen.ts.snap
packages/openapi-ts/test/__snapshots__/test/generated/v2/schemas.ts.snap packages/openapi-ts/test/__snapshots__/test/generated/v2/schemas.gen.ts.snap
+1 -1
packages/openapi-ts/test/__snapshots__/test/generated/v2/services.ts.snap packages/openapi-ts/test/__snapshots__/test/generated/v2/services.gen.ts.snap
··· 3 3 import type { CancelablePromise } from './core/CancelablePromise'; 4 4 import { OpenAPI } from './core/OpenAPI'; 5 5 import { request as __request } from './core/request'; 6 - import type { $OpenApiTs } from './models'; 6 + import type { $OpenApiTs } from './models.gen'; 7 7 8 8 export class DefaultService { 9 9 /**
+3 -3
packages/openapi-ts/test/__snapshots__/test/generated/v3/index.ts.snap
··· 3 3 export { ApiError } from './core/ApiError'; 4 4 export { CancelablePromise, CancelError } from './core/CancelablePromise'; 5 5 export { OpenAPI, type OpenAPIConfig } from './core/OpenAPI'; 6 - export * from './models'; 7 - export * from './schemas'; 8 - export * from './services'; 6 + export * from './models.gen'; 7 + export * from './schemas.gen'; 8 + export * from './services.gen';
packages/openapi-ts/test/__snapshots__/test/generated/v3/models.ts.snap packages/openapi-ts/test/__snapshots__/test/generated/v3/models.gen.ts.snap
packages/openapi-ts/test/__snapshots__/test/generated/v3/schemas.ts.snap packages/openapi-ts/test/__snapshots__/test/generated/v3/schemas.gen.ts.snap
+1 -1
packages/openapi-ts/test/__snapshots__/test/generated/v3/services.ts.snap packages/openapi-ts/test/__snapshots__/test/generated/v3/services.gen.ts.snap
··· 3 3 import type { CancelablePromise } from './core/CancelablePromise'; 4 4 import { OpenAPI } from './core/OpenAPI'; 5 5 import { request as __request } from './core/request'; 6 - import type { $OpenApiTs } from './models'; 6 + import type { $OpenApiTs } from './models.gen'; 7 7 8 8 export class DefaultService { 9 9 /**
+3 -3
packages/openapi-ts/test/__snapshots__/test/generated/v3_angular/index.ts.snap
··· 2 2 3 3 export { ApiError } from './core/ApiError'; 4 4 export { OpenAPI, type OpenAPIConfig } from './core/OpenAPI'; 5 - export * from './models'; 6 - export * from './schemas'; 7 - export * from './services'; 5 + export * from './models.gen'; 6 + export * from './schemas.gen'; 7 + export * from './services.gen';
packages/openapi-ts/test/__snapshots__/test/generated/v3_angular/models.ts.snap packages/openapi-ts/test/__snapshots__/test/generated/v3_angular/models.gen.ts.snap
packages/openapi-ts/test/__snapshots__/test/generated/v3_angular/schemas.ts.snap packages/openapi-ts/test/__snapshots__/test/generated/v3_angular/schemas.gen.ts.snap
+1 -1
packages/openapi-ts/test/__snapshots__/test/generated/v3_angular/services.ts.snap packages/openapi-ts/test/__snapshots__/test/generated/v3_angular/services.gen.ts.snap
··· 5 5 import type { Observable } from 'rxjs'; 6 6 import { OpenAPI } from './core/OpenAPI'; 7 7 import { request as __request } from './core/request'; 8 - import type { $OpenApiTs } from './models'; 8 + import type { $OpenApiTs } from './models.gen'; 9 9 10 10 @Injectable({ 11 11 providedIn: 'root',
+23 -23
packages/openapi-ts/test/__snapshots__/test/generated/v3_client/ApiClient.ts.snap
··· 3 3 import { Interceptors } from './core/OpenAPI'; 4 4 import { FetchHttpRequest } from './core/FetchHttpRequest'; 5 5 6 - import { CollectionFormatService } from './services'; 7 - import { ComplexService } from './services'; 8 - import { DefaultService } from './services'; 9 - import { DefaultsService } from './services'; 10 - import { DeprecatedService } from './services'; 11 - import { DescriptionsService } from './services'; 12 - import { DuplicateService } from './services'; 13 - import { ErrorService } from './services'; 14 - import { FileResponseService } from './services'; 15 - import { FormDataService } from './services'; 16 - import { HeaderService } from './services'; 17 - import { MultipartService } from './services'; 18 - import { MultipleTags1Service } from './services'; 19 - import { MultipleTags2Service } from './services'; 20 - import { MultipleTags3Service } from './services'; 21 - import { NoContentService } from './services'; 22 - import { NonAsciiÆøåÆøÅöôêÊService } from './services'; 23 - import { ParametersService } from './services'; 24 - import { RequestBodyService } from './services'; 25 - import { ResponseService } from './services'; 26 - import { SimpleService } from './services'; 27 - import { TypesService } from './services'; 28 - import { UploadService } from './services'; 6 + import { CollectionFormatService } from './services.gen'; 7 + import { ComplexService } from './services.gen'; 8 + import { DefaultService } from './services.gen'; 9 + import { DefaultsService } from './services.gen'; 10 + import { DeprecatedService } from './services.gen'; 11 + import { DescriptionsService } from './services.gen'; 12 + import { DuplicateService } from './services.gen'; 13 + import { ErrorService } from './services.gen'; 14 + import { FileResponseService } from './services.gen'; 15 + import { FormDataService } from './services.gen'; 16 + import { HeaderService } from './services.gen'; 17 + import { MultipartService } from './services.gen'; 18 + import { MultipleTags1Service } from './services.gen'; 19 + import { MultipleTags2Service } from './services.gen'; 20 + import { MultipleTags3Service } from './services.gen'; 21 + import { NoContentService } from './services.gen'; 22 + import { NonAsciiÆøåÆøÅöôêÊService } from './services.gen'; 23 + import { ParametersService } from './services.gen'; 24 + import { RequestBodyService } from './services.gen'; 25 + import { ResponseService } from './services.gen'; 26 + import { SimpleService } from './services.gen'; 27 + import { TypesService } from './services.gen'; 28 + import { UploadService } from './services.gen'; 29 29 30 30 type HttpRequestConstructor = new (config: OpenAPIConfig) => BaseHttpRequest; 31 31
+2 -2
packages/openapi-ts/test/__snapshots__/test/generated/v3_client/index.ts.snap
··· 5 5 export { BaseHttpRequest } from './core/BaseHttpRequest'; 6 6 export { CancelablePromise, CancelError } from './core/CancelablePromise'; 7 7 export { OpenAPI, type OpenAPIConfig } from './core/OpenAPI'; 8 - export * from './models'; 9 - export * from './services'; 8 + export * from './models.gen'; 9 + export * from './services.gen';
packages/openapi-ts/test/__snapshots__/test/generated/v3_client/models.ts.snap packages/openapi-ts/test/__snapshots__/test/generated/v3_client/models.gen.ts.snap
+1 -1
packages/openapi-ts/test/__snapshots__/test/generated/v3_client/services.ts.snap packages/openapi-ts/test/__snapshots__/test/generated/v3_client/services.gen.ts.snap
··· 2 2 3 3 import type { CancelablePromise } from './core/CancelablePromise'; 4 4 import type { BaseHttpRequest } from './core/BaseHttpRequest'; 5 - import type { $OpenApiTs } from './models'; 5 + import type { $OpenApiTs } from './models.gen'; 6 6 7 7 export class DefaultService { 8 8 constructor(public readonly httpRequest: BaseHttpRequest) {}
+2 -2
packages/openapi-ts/test/__snapshots__/test/generated/v3_date/index.ts.snap
··· 1 1 // This file is auto-generated by @hey-api/openapi-ts 2 2 3 - export * from './models'; 4 - export * from './schemas'; 3 + export * from './models.gen'; 4 + export * from './schemas.gen';
packages/openapi-ts/test/__snapshots__/test/generated/v3_date/models.ts.snap packages/openapi-ts/test/__snapshots__/test/generated/v3_date/models.gen.ts.snap
packages/openapi-ts/test/__snapshots__/test/generated/v3_date/schemas.ts.snap packages/openapi-ts/test/__snapshots__/test/generated/v3_date/schemas.gen.ts.snap
+3 -3
packages/openapi-ts/test/__snapshots__/test/generated/v3_enums_typescript/index.ts.snap
··· 3 3 export { ApiError } from './core/ApiError'; 4 4 export { CancelablePromise, CancelError } from './core/CancelablePromise'; 5 5 export { OpenAPI, type OpenAPIConfig } from './core/OpenAPI'; 6 - export * from './models'; 7 - export * from './schemas'; 8 - export * from './services'; 6 + export * from './models.gen'; 7 + export * from './schemas.gen'; 8 + export * from './services.gen';
packages/openapi-ts/test/__snapshots__/test/generated/v3_enums_typescript/models.ts.snap packages/openapi-ts/test/__snapshots__/test/generated/v3_enums_typescript/models.gen.ts.snap
packages/openapi-ts/test/__snapshots__/test/generated/v3_enums_typescript/schemas.ts.snap packages/openapi-ts/test/__snapshots__/test/generated/v3_enums_typescript/schemas.gen.ts.snap
+1 -1
packages/openapi-ts/test/__snapshots__/test/generated/v3_enums_typescript/services.ts.snap packages/openapi-ts/test/__snapshots__/test/generated/v3_enums_typescript/services.gen.ts.snap
··· 3 3 import type { CancelablePromise } from './core/CancelablePromise'; 4 4 import { OpenAPI } from './core/OpenAPI'; 5 5 import { request as __request } from './core/request'; 6 - import type { $OpenApiTs } from './models'; 6 + import type { $OpenApiTs } from './models.gen'; 7 7 8 8 export class DefaultService { 9 9 /**
+2 -2
packages/openapi-ts/test/__snapshots__/test/generated/v3_legacy_positional_args/index.ts.snap
··· 3 3 export { ApiError } from './core/ApiError'; 4 4 export { CancelablePromise, CancelError } from './core/CancelablePromise'; 5 5 export { OpenAPI, type OpenAPIConfig } from './core/OpenAPI'; 6 - export * from './models'; 7 - export * from './services'; 6 + export * from './models.gen'; 7 + export * from './services.gen';
packages/openapi-ts/test/__snapshots__/test/generated/v3_legacy_positional_args/models.ts.snap packages/openapi-ts/test/__snapshots__/test/generated/v3_legacy_positional_args/models.gen.ts.snap
+1 -1
packages/openapi-ts/test/__snapshots__/test/generated/v3_legacy_positional_args/services.ts.snap packages/openapi-ts/test/__snapshots__/test/generated/v3_legacy_positional_args/services.gen.ts.snap
··· 3 3 import type { CancelablePromise } from './core/CancelablePromise'; 4 4 import { OpenAPI } from './core/OpenAPI'; 5 5 import { request as __request } from './core/request'; 6 - import type { $OpenApiTs } from './models'; 6 + import type { $OpenApiTs } from './models.gen'; 7 7 8 8 export class DefaultsService { 9 9 /**
+1 -1
packages/openapi-ts/test/__snapshots__/test/generated/v3_models/index.ts.snap
··· 1 1 // This file is auto-generated by @hey-api/openapi-ts 2 2 3 - export * from './models'; 3 + export * from './models.gen';
packages/openapi-ts/test/__snapshots__/test/generated/v3_models/models.ts.snap packages/openapi-ts/test/__snapshots__/test/generated/v3_models/models.gen.ts.snap
+2 -2
packages/openapi-ts/test/__snapshots__/test/generated/v3_options/index.ts.snap
··· 3 3 export { ApiError } from './core/ApiError'; 4 4 export { CancelablePromise, CancelError } from './core/CancelablePromise'; 5 5 export { OpenAPI, type OpenAPIConfig } from './core/OpenAPI'; 6 - export * from './models'; 7 - export * from './services'; 6 + export * from './models.gen'; 7 + export * from './services.gen';
packages/openapi-ts/test/__snapshots__/test/generated/v3_options/models.ts.snap packages/openapi-ts/test/__snapshots__/test/generated/v3_options/models.gen.ts.snap
+1 -1
packages/openapi-ts/test/__snapshots__/test/generated/v3_options/services.ts.snap packages/openapi-ts/test/__snapshots__/test/generated/v3_options/services.gen.ts.snap
··· 3 3 import type { CancelablePromise } from './core/CancelablePromise'; 4 4 import { OpenAPI } from './core/OpenAPI'; 5 5 import { request as __request } from './core/request'; 6 - import type { $OpenApiTs } from './models'; 6 + import type { $OpenApiTs } from './models.gen'; 7 7 8 8 export class DefaultsService { 9 9 /**
+1 -1
packages/openapi-ts/test/e2e/assets/main-angular-module.ts
··· 21 21 ResponseService, 22 22 SimpleService, 23 23 TypesService, 24 - } from './client/services'; 24 + } from './client/services.gen'; 25 25 26 26 @Component({ 27 27 selector: 'app-root',
+1 -1
packages/openapi-ts/test/e2e/assets/main-angular.ts
··· 20 20 ResponseService, 21 21 SimpleService, 22 22 TypesService, 23 - } from './client/services'; 23 + } from './client/services.gen'; 24 24 25 25 @Component({ 26 26 selector: 'app-root',
+90 -98
packages/openapi-ts/test/e2e/client.fetch.spec.ts
··· 1 1 import { afterAll, beforeAll, describe, expect, it, vi } from 'vitest'; 2 2 3 - import browser from './scripts/browser'; 4 3 import { cleanup } from './scripts/cleanup'; 5 4 import { compileWithTypescript } from './scripts/compileWithTypescript'; 6 - import { copyAsset } from './scripts/copyAsset'; 7 5 import { generateClient } from './scripts/generateClient'; 8 6 import server from './scripts/server'; 9 7 ··· 11 9 beforeAll(async () => { 12 10 cleanup('client/fetch'); 13 11 await generateClient('client/fetch', 'v3', 'fetch', false, 'ApiClient'); 14 - copyAsset('index.html', 'client/fetch/index.html'); 15 - copyAsset('main.ts', 'client/fetch/main.ts'); 16 12 compileWithTypescript('client/fetch'); 17 13 await server.start('client/fetch'); 18 - await browser.start(); 19 14 }, 40000); 20 15 21 16 afterAll(async () => { 22 - await browser.stop(); 23 17 await server.stop(); 24 18 }); 25 19 26 20 it('requests token', async () => { 27 - await browser.exposeFunction('tokenRequest', vi.fn().mockResolvedValue('MY_TOKEN')); 28 - const result = await browser.evaluate(async () => { 29 - // @ts-ignore 30 - const { ApiClient } = window.api; 31 - const client = new ApiClient({ 32 - PASSWORD: undefined, 33 - // @ts-ignore 34 - TOKEN: window.tokenRequest, 35 - USERNAME: undefined, 36 - }); 37 - return await client.simple.getCallWithoutParametersAndResponse(); 21 + const { ApiClient } = await import('./generated/client/fetch/index.js'); 22 + const tokenRequest = vi.fn().mockResolvedValue('MY_TOKEN'); 23 + const client = new ApiClient({ 24 + PASSWORD: undefined, 25 + TOKEN: tokenRequest, 26 + USERNAME: undefined, 38 27 }); 28 + const result = await client.simple.getCallWithoutParametersAndResponse(); 39 29 // @ts-ignore 40 30 expect(result.headers.authorization).toBe('Bearer MY_TOKEN'); 41 31 }); 42 32 43 33 it('uses credentials', async () => { 44 - const result = await browser.evaluate(async () => { 45 - // @ts-ignore 46 - const { ApiClient } = window.api; 47 - const client = new ApiClient({ 48 - PASSWORD: 'password', 49 - TOKEN: undefined, 50 - USERNAME: 'username', 51 - }); 52 - return await client.simple.getCallWithoutParametersAndResponse(); 34 + const { ApiClient } = await import('./generated/client/fetch/index.js'); 35 + const client = new ApiClient({ 36 + PASSWORD: 'password', 37 + TOKEN: undefined, 38 + USERNAME: 'username', 53 39 }); 40 + const result = await client.simple.getCallWithoutParametersAndResponse(); 54 41 // @ts-ignore 55 42 expect(result.headers.authorization).toBe('Basic dXNlcm5hbWU6cGFzc3dvcmQ='); 56 43 }); 57 44 58 45 it('supports complex params', async () => { 59 - const result = await browser.evaluate(async () => { 60 - // @ts-ignore 61 - const { ApiClient } = window.api; 62 - const client = new ApiClient(); 63 - return await client.complex.complexTypes({ 64 - first: { 65 - second: { 66 - third: 'Hello World!', 67 - }, 46 + const { ApiClient } = await import('./generated/client/fetch/index.js'); 47 + const client = new ApiClient(); 48 + // @ts-ignore 49 + const result = await client.complex.complexTypes({ 50 + first: { 51 + second: { 52 + third: 'Hello World!', 68 53 }, 69 - }); 54 + }, 70 55 }); 71 56 expect(result).toBeDefined(); 72 57 }); 73 58 74 59 it('support form data', async () => { 75 - const result = await browser.evaluate(async () => { 76 - // @ts-ignore 77 - const { ApiClient } = window.api; 78 - const client = new ApiClient(); 79 - return await client.parameters.callWithParameters( 80 - 'valueHeader', 81 - 'valueQuery', 82 - 'valueForm', 83 - 'valueCookie', 84 - 'valuePath', 85 - { 86 - prop: 'valueBody', 87 - } 88 - ); 89 - }); 60 + const { ApiClient } = await import('./generated/client/fetch/index.js'); 61 + const client = new ApiClient(); 62 + // @ts-ignore 63 + const result = await client.parameters.callWithParameters( 64 + 'valueHeader', 65 + 'valueQuery', 66 + 'valueForm', 67 + 'valueCookie', 68 + 'valuePath', 69 + { 70 + prop: 'valueBody', 71 + } 72 + ); 73 + expect(result).toBeDefined(); 74 + }); 75 + 76 + it('support blob response data', async () => { 77 + const { ApiClient } = await import('./generated/client/fetch/index.js'); 78 + const client = new ApiClient(); 79 + const result = await client.fileResponse.fileResponse('test'); 90 80 expect(result).toBeDefined(); 91 81 }); 92 82 93 83 it('can abort the request', async () => { 94 84 let error; 95 85 try { 96 - await browser.evaluate(async () => { 97 - // @ts-ignore 98 - const { ApiClient } = window.api; 99 - const client = new ApiClient(); 100 - const promise = client.simple.getCallWithoutParametersAndResponse(); 101 - setTimeout(() => { 102 - promise.cancel(); 103 - }, 10); 104 - await promise; 105 - }); 86 + const { ApiClient } = await import('./generated/client/fetch/index.js'); 87 + const client = new ApiClient(); 88 + const promise = client.simple.getCallWithoutParametersAndResponse(); 89 + setTimeout(() => { 90 + promise.cancel(); 91 + }, 10); 92 + await promise; 106 93 } catch (e) { 107 94 error = (e as Error).message; 108 95 } ··· 110 97 }); 111 98 112 99 it('should throw known error (500)', async () => { 113 - const error = await browser.evaluate(async () => { 114 - try { 115 - // @ts-ignore 116 - const { ApiClient } = window.api; 117 - const client = new ApiClient(); 118 - await client.error.testErrorCode(500); 119 - } catch (error) { 120 - return JSON.stringify({ 121 - body: error.body, 122 - message: error.message, 123 - name: error.name, 124 - status: error.status, 125 - statusText: error.statusText, 126 - url: error.url, 127 - }); 128 - } 129 - return; 130 - }); 131 - 100 + let error; 101 + try { 102 + const { ApiClient } = await import('./generated/client/fetch/index.js'); 103 + const client = new ApiClient(); 104 + await client.error.testErrorCode(500); 105 + } catch (err) { 106 + error = JSON.stringify({ 107 + body: err.body, 108 + message: err.message, 109 + name: err.name, 110 + status: err.status, 111 + statusText: err.statusText, 112 + url: err.url, 113 + }); 114 + } 132 115 expect(error).toBe( 133 116 JSON.stringify({ 134 117 body: { ··· 145 128 }); 146 129 147 130 it('should throw unknown error (599)', async () => { 148 - const error = await browser.evaluate(async () => { 149 - try { 150 - // @ts-ignore 151 - const { ApiClient } = window.api; 152 - const client = new ApiClient(); 153 - await client.error.testErrorCode(599); 154 - } catch (error) { 155 - return JSON.stringify({ 156 - body: error.body, 157 - message: error.message, 158 - name: error.name, 159 - status: error.status, 160 - statusText: error.statusText, 161 - url: error.url, 162 - }); 163 - } 164 - return; 165 - }); 131 + let error; 132 + try { 133 + const { ApiClient } = await import('./generated/client/fetch/index.js'); 134 + const client = new ApiClient(); 135 + await client.error.testErrorCode(599); 136 + } catch (err) { 137 + error = JSON.stringify({ 138 + body: err.body, 139 + message: err.message, 140 + name: err.name, 141 + status: err.status, 142 + statusText: err.statusText, 143 + url: err.url, 144 + }); 145 + } 166 146 expect(error).toBe( 167 147 JSON.stringify({ 168 148 body: { ··· 177 157 url: 'http://localhost:3000/base/api/v1.0/error?status=599', 178 158 }) 179 159 ); 160 + }); 161 + 162 + it('it should parse query params', async () => { 163 + const { ApiClient } = await import('./generated/client/fetch/index.js'); 164 + const client = new ApiClient(); 165 + const result = await client.parameters.postCallWithOptionalParam({ 166 + page: 0, 167 + size: 1, 168 + sort: ['location'], 169 + }); 170 + // @ts-ignore 171 + expect(result.query).toStrictEqual({ parameter: { page: '0', size: '1', sort: 'location' } }); 180 172 }); 181 173 });
+72 -98
packages/openapi-ts/test/e2e/client.xhr.spec.ts
··· 1 1 import { afterAll, beforeAll, describe, expect, it, vi } from 'vitest'; 2 2 3 - import browser from './scripts/browser'; 4 3 import { cleanup } from './scripts/cleanup'; 5 4 import { compileWithTypescript } from './scripts/compileWithTypescript'; 6 - import { copyAsset } from './scripts/copyAsset'; 7 5 import { generateClient } from './scripts/generateClient'; 8 6 import server from './scripts/server'; 9 7 10 - describe('client.xhr', () => { 8 + describe.skip('client.xhr', () => { 11 9 beforeAll(async () => { 12 10 cleanup('client/xhr'); 13 11 await generateClient('client/xhr', 'v3', 'xhr', false, 'ApiClient'); 14 - copyAsset('index.html', 'client/xhr/index.html'); 15 - copyAsset('main.ts', 'client/xhr/main.ts'); 16 12 compileWithTypescript('client/xhr'); 17 13 await server.start('client/xhr'); 18 - await browser.start(); 19 14 }, 40000); 20 15 21 16 afterAll(async () => { 22 - await browser.stop(); 23 17 await server.stop(); 24 18 }); 25 19 26 20 it('requests token', async () => { 27 - await browser.exposeFunction('tokenRequest', vi.fn().mockResolvedValue('MY_TOKEN')); 28 - const result = await browser.evaluate(async () => { 29 - // @ts-ignore 30 - const { ApiClient } = window.api; 31 - const client = new ApiClient({ 32 - PASSWORD: undefined, 33 - // @ts-ignore 34 - TOKEN: window.tokenRequest, 35 - USERNAME: undefined, 36 - }); 37 - return await client.simple.getCallWithoutParametersAndResponse(); 21 + const { ApiClient } = await import('./generated/client/xhr/index.js'); 22 + const tokenRequest = vi.fn().mockResolvedValue('MY_TOKEN'); 23 + const client = new ApiClient({ 24 + PASSWORD: undefined, 25 + TOKEN: tokenRequest, 26 + USERNAME: undefined, 38 27 }); 28 + const result = await client.simple.getCallWithoutParametersAndResponse(); 39 29 // @ts-ignore 40 30 expect(result.headers.authorization).toBe('Bearer MY_TOKEN'); 41 31 }); 42 32 43 33 it('uses credentials', async () => { 44 - const result = await browser.evaluate(async () => { 45 - // @ts-ignore 46 - const { ApiClient } = window.api; 47 - const client = new ApiClient({ 48 - PASSWORD: 'password', 49 - TOKEN: undefined, 50 - USERNAME: 'username', 51 - }); 52 - return await client.simple.getCallWithoutParametersAndResponse(); 34 + const { ApiClient } = await import('./generated/client/xhr/index.js'); 35 + const client = new ApiClient({ 36 + PASSWORD: 'password', 37 + TOKEN: undefined, 38 + USERNAME: 'username', 53 39 }); 40 + const result = await client.simple.getCallWithoutParametersAndResponse(); 54 41 // @ts-ignore 55 42 expect(result.headers.authorization).toBe('Basic dXNlcm5hbWU6cGFzc3dvcmQ='); 56 43 }); 57 44 58 45 it('supports complex params', async () => { 59 - const result = await browser.evaluate(async () => { 60 - // @ts-ignore 61 - const { ApiClient } = window.api; 62 - const client = new ApiClient(); 63 - return await client.complex.complexTypes({ 64 - first: { 65 - second: { 66 - third: 'Hello World!', 67 - }, 46 + const { ApiClient } = await import('./generated/client/xhr/index.js'); 47 + const client = new ApiClient(); 48 + // @ts-ignore 49 + const result = await client.complex.complexTypes({ 50 + first: { 51 + second: { 52 + third: 'Hello World!', 68 53 }, 69 - }); 54 + }, 70 55 }); 71 56 expect(result).toBeDefined(); 72 57 }); 73 58 74 59 it('support form data', async () => { 75 - const result = await browser.evaluate(async () => { 76 - // @ts-ignore 77 - const { ApiClient } = window.api; 78 - const client = new ApiClient(); 79 - return await client.parameters.callWithParameters( 80 - 'valueHeader', 81 - 'valueQuery', 82 - 'valueForm', 83 - 'valueCookie', 84 - 'valuePath', 85 - { 86 - prop: 'valueBody', 87 - } 88 - ); 89 - }); 60 + const { ApiClient } = await import('./generated/client/xhr/index.js'); 61 + const client = new ApiClient(); 62 + // @ts-ignore 63 + const result = await client.parameters.callWithParameters( 64 + 'valueHeader', 65 + 'valueQuery', 66 + 'valueForm', 67 + 'valueCookie', 68 + 'valuePath', 69 + { 70 + prop: 'valueBody', 71 + } 72 + ); 90 73 expect(result).toBeDefined(); 91 74 }); 92 75 93 76 it('can abort the request', async () => { 94 77 let error; 95 78 try { 96 - await browser.evaluate(async () => { 97 - // @ts-ignore 98 - const { ApiClient } = window.api; 99 - const client = new ApiClient(); 100 - const promise = client.simple.getCallWithoutParametersAndResponse(); 101 - setTimeout(() => { 102 - promise.cancel(); 103 - }, 10); 104 - await promise; 105 - }); 79 + const { ApiClient } = await import('./generated/client/xhr/index.js'); 80 + const client = new ApiClient(); 81 + const promise = client.simple.getCallWithoutParametersAndResponse(); 82 + setTimeout(() => { 83 + promise.cancel(); 84 + }, 10); 85 + await promise; 106 86 } catch (e) { 107 87 error = (e as Error).message; 108 88 } ··· 110 90 }); 111 91 112 92 it('should throw known error (500)', async () => { 113 - const error = await browser.evaluate(async () => { 114 - try { 115 - // @ts-ignore 116 - const { ApiClient } = window.api; 117 - const client = new ApiClient(); 118 - await client.error.testErrorCode(500); 119 - } catch (error) { 120 - return JSON.stringify({ 121 - body: error.body, 122 - message: error.message, 123 - name: error.name, 124 - status: error.status, 125 - statusText: error.statusText, 126 - url: error.url, 127 - }); 128 - } 129 - return; 130 - }); 93 + let error; 94 + try { 95 + const { ApiClient } = await import('./generated/client/xhr/index.js'); 96 + const client = new ApiClient(); 97 + await client.error.testErrorCode(500); 98 + } catch (err) { 99 + error = JSON.stringify({ 100 + body: err.body, 101 + message: err.message, 102 + name: err.name, 103 + status: err.status, 104 + statusText: err.statusText, 105 + url: err.url, 106 + }); 107 + } 131 108 expect(error).toBe( 132 109 JSON.stringify({ 133 110 body: { ··· 144 121 }); 145 122 146 123 it('should throw unknown error (599)', async () => { 147 - const error = await browser.evaluate(async () => { 148 - try { 149 - // @ts-ignore 150 - const { ApiClient } = window.api; 151 - const client = new ApiClient(); 152 - await client.error.testErrorCode(599); 153 - } catch (error) { 154 - return JSON.stringify({ 155 - body: error.body, 156 - message: error.message, 157 - name: error.name, 158 - status: error.status, 159 - statusText: error.statusText, 160 - url: error.url, 161 - }); 162 - } 163 - return; 164 - }); 124 + let error; 125 + try { 126 + const { ApiClient } = await import('./generated/client/xhr/index.js'); 127 + const client = new ApiClient(); 128 + await client.error.testErrorCode(599); 129 + } catch (err) { 130 + error = JSON.stringify({ 131 + body: err.body, 132 + message: err.message, 133 + name: err.name, 134 + status: err.status, 135 + statusText: err.statusText, 136 + url: err.url, 137 + }); 138 + } 165 139 expect(error).toBe( 166 140 JSON.stringify({ 167 141 body: {
+20 -43
packages/openapi-ts/test/e2e/v2.fetch.spec.ts
··· 1 1 import { afterAll, beforeAll, describe, expect, it, vi } from 'vitest'; 2 2 3 - import browser from './scripts/browser'; 4 3 import { cleanup } from './scripts/cleanup'; 5 4 import { compileWithTypescript } from './scripts/compileWithTypescript'; 6 - import { copyAsset } from './scripts/copyAsset'; 7 5 import { generateClient } from './scripts/generateClient'; 8 6 import server from './scripts/server'; 9 7 ··· 11 9 beforeAll(async () => { 12 10 cleanup('v2/fetch'); 13 11 await generateClient('v2/fetch', 'v2', 'fetch'); 14 - copyAsset('index.html', 'v2/fetch/index.html'); 15 - copyAsset('main.ts', 'v2/fetch/main.ts'); 16 12 compileWithTypescript('v2/fetch'); 17 13 await server.start('v2/fetch'); 18 - await browser.start(); 19 14 }, 40000); 20 15 21 16 afterAll(async () => { 22 - await browser.stop(); 23 17 await server.stop(); 24 18 }); 25 19 26 20 it('requests token', async () => { 27 - await browser.exposeFunction('tokenRequest', vi.fn().mockResolvedValue('MY_TOKEN')); 28 - const result = await browser.evaluate(async () => { 29 - // @ts-ignore 30 - const { OpenAPI, SimpleService } = window.api; 31 - // @ts-ignore 32 - OpenAPI.TOKEN = window.tokenRequest; 33 - return await SimpleService.getCallWithoutParametersAndResponse(); 34 - }); 21 + const { OpenAPI, SimpleService } = await import('./generated/v2/fetch/index.js'); 22 + const tokenRequest = vi.fn().mockResolvedValue('MY_TOKEN'); 23 + OpenAPI.TOKEN = tokenRequest; 24 + const result = await SimpleService.getCallWithoutParametersAndResponse(); 35 25 // @ts-ignore 36 26 expect(result.headers.authorization).toBe('Bearer MY_TOKEN'); 37 27 }); 38 28 39 29 it('supports complex params', async () => { 40 - const result = await browser.evaluate(async () => { 30 + const { ComplexService } = await import('./generated/v2/fetch/index.js'); 31 + const result = await ComplexService.complexTypes({ 41 32 // @ts-ignore 42 - const { ComplexService } = window.api; 43 - return await ComplexService.complexTypes({ 44 - first: { 45 - second: { 46 - third: 'Hello World!', 47 - }, 33 + first: { 34 + second: { 35 + third: 'Hello World!', 48 36 }, 49 - }); 37 + }, 50 38 }); 51 39 expect(result).toBeDefined(); 52 40 }); ··· 56 44 beforeAll(async () => { 57 45 cleanup('v2/fetch'); 58 46 await generateClient('v2/fetch', 'v2', 'fetch', true); 59 - copyAsset('index.html', 'v2/fetch/index.html'); 60 - copyAsset('main.ts', 'v2/fetch/main.ts'); 61 47 compileWithTypescript('v2/fetch'); 62 48 await server.start('v2/fetch'); 63 - await browser.start(); 64 49 }, 40000); 65 50 66 51 afterAll(async () => { 67 - await browser.stop(); 68 52 await server.stop(); 69 53 }); 70 54 71 55 it('returns result body by default', async () => { 72 - const result = await browser.evaluate(async () => { 73 - // @ts-ignore 74 - const { SimpleService } = window.api; 75 - return await SimpleService.getCallWithoutParametersAndResponse(); 76 - }); 56 + const { SimpleService } = await import('./generated/v2/fetch/index.js'); 57 + const result = await SimpleService.getCallWithoutParametersAndResponse(); 77 58 // @ts-ignore 78 59 expect(result.body).toBeUndefined(); 79 60 }); 80 61 81 62 it('returns result body', async () => { 82 - const result = await browser.evaluate(async () => { 83 - // @ts-ignore 84 - const { SimpleService } = window.api; 85 - return await SimpleService.getCallWithoutParametersAndResponse({ 86 - _result: 'body', 87 - }); 63 + const { SimpleService } = await import('./generated/v2/fetch/index.js'); 64 + // @ts-ignore 65 + const result = await SimpleService.getCallWithoutParametersAndResponse({ 66 + _result: 'body', 88 67 }); 89 68 // @ts-ignore 90 69 expect(result.body).toBeUndefined(); ··· 92 71 93 72 it('returns raw result', async ({ skip }) => { 94 73 skip(); 95 - const result = await browser.evaluate(async () => { 96 - // @ts-ignore 97 - const { SimpleService } = window.api; 98 - return await SimpleService.getCallWithoutParametersAndResponse({ 99 - _result: 'raw', 100 - }); 74 + const { SimpleService } = await import('./generated/v2/fetch/index.js'); 75 + // @ts-ignore 76 + const result = await SimpleService.getCallWithoutParametersAndResponse({ 77 + _result: 'raw', 101 78 }); 102 79 // @ts-ignore 103 80 expect(result.body).toBeDefined();
+22 -45
packages/openapi-ts/test/e2e/v2.xhr.spec.ts
··· 1 1 import { afterAll, beforeAll, describe, expect, it, vi } from 'vitest'; 2 2 3 - import browser from './scripts/browser'; 4 3 import { cleanup } from './scripts/cleanup'; 5 4 import { compileWithTypescript } from './scripts/compileWithTypescript'; 6 - import { copyAsset } from './scripts/copyAsset'; 7 5 import { generateClient } from './scripts/generateClient'; 8 6 import server from './scripts/server'; 9 7 10 - describe('v2.xhr', () => { 8 + describe.skip('v2.xhr', () => { 11 9 beforeAll(async () => { 12 10 cleanup('v2/xhr'); 13 11 await generateClient('v2/xhr', 'v2', 'xhr'); 14 - copyAsset('index.html', 'v2/xhr/index.html'); 15 - copyAsset('main.ts', 'v2/xhr/main.ts'); 16 12 compileWithTypescript('v2/xhr'); 17 13 await server.start('v2/xhr'); 18 - await browser.start(); 19 14 }, 40000); 20 15 21 16 afterAll(async () => { 22 - await browser.stop(); 23 17 await server.stop(); 24 18 }); 25 19 26 20 it('requests token', async () => { 27 - await browser.exposeFunction('tokenRequest', vi.fn().mockResolvedValue('MY_TOKEN')); 28 - const result = await browser.evaluate(async () => { 29 - // @ts-ignore 30 - const { OpenAPI, SimpleService } = window.api; 31 - // @ts-ignore 32 - OpenAPI.TOKEN = window.tokenRequest; 33 - return await SimpleService.getCallWithoutParametersAndResponse(); 34 - }); 21 + const { OpenAPI, SimpleService } = await import('./generated/v2/xhr/index.js'); 22 + const tokenRequest = vi.fn().mockResolvedValue('MY_TOKEN'); 23 + OpenAPI.TOKEN = tokenRequest; 24 + const result = await SimpleService.getCallWithoutParametersAndResponse(); 35 25 // @ts-ignore 36 26 expect(result.headers.authorization).toBe('Bearer MY_TOKEN'); 37 27 }); 38 28 39 29 it('supports complex params', async () => { 40 - const result = await browser.evaluate(async () => { 30 + const { ComplexService } = await import('./generated/v2/xhr/index.js'); 31 + const result = await ComplexService.complexTypes({ 41 32 // @ts-ignore 42 - const { ComplexService } = window.api; 43 - return await ComplexService.complexTypes({ 44 - first: { 45 - second: { 46 - third: 'Hello World!', 47 - }, 33 + first: { 34 + second: { 35 + third: 'Hello World!', 48 36 }, 49 - }); 37 + }, 50 38 }); 51 39 expect(result).toBeDefined(); 52 40 }); 53 41 }); 54 42 55 - describe('v2.xhr useOptions', () => { 43 + describe.skip('v2.xhr useOptions', () => { 56 44 beforeAll(async () => { 57 45 cleanup('v2/xhr'); 58 46 await generateClient('v2/xhr', 'v2', 'xhr', true); 59 - copyAsset('index.html', 'v2/xhr/index.html'); 60 - copyAsset('main.ts', 'v2/xhr/main.ts'); 61 47 compileWithTypescript('v2/xhr'); 62 48 await server.start('v2/xhr'); 63 - await browser.start(); 64 49 }, 40000); 65 50 66 51 afterAll(async () => { 67 - await browser.stop(); 68 52 await server.stop(); 69 53 }); 70 54 71 55 it('returns result body by default', async () => { 72 - const result = await browser.evaluate(async () => { 73 - // @ts-ignore 74 - const { SimpleService } = window.api; 75 - return await SimpleService.getCallWithoutParametersAndResponse(); 76 - }); 56 + const { SimpleService } = await import('./generated/v2/xhr/index.js'); 57 + const result = await SimpleService.getCallWithoutParametersAndResponse(); 77 58 // @ts-ignore 78 59 expect(result.body).toBeUndefined(); 79 60 }); 80 61 81 62 it('returns result body', async () => { 82 - const result = await browser.evaluate(async () => { 83 - // @ts-ignore 84 - const { SimpleService } = window.api; 85 - return await SimpleService.getCallWithoutParametersAndResponse({ 86 - _result: 'body', 87 - }); 63 + const { SimpleService } = await import('./generated/v2/xhr/index.js'); 64 + // @ts-ignore 65 + const result = await SimpleService.getCallWithoutParametersAndResponse({ 66 + _result: 'body', 88 67 }); 89 68 // @ts-ignore 90 69 expect(result.body).toBeUndefined(); ··· 92 71 93 72 it('returns raw result', async ({ skip }) => { 94 73 skip(); 95 - const result = await browser.evaluate(async () => { 96 - // @ts-ignore 97 - const { SimpleService } = window.api; 98 - return await SimpleService.getCallWithoutParametersAndResponse({ 99 - _result: 'raw', 100 - }); 74 + const { SimpleService } = await import('./generated/v2/xhr/index.js'); 75 + // @ts-ignore 76 + const result = await SimpleService.getCallWithoutParametersAndResponse({ 77 + _result: 'raw', 101 78 }); 102 79 // @ts-ignore 103 80 expect(result.body).toBeDefined();
+83 -122
packages/openapi-ts/test/e2e/v3.fetch.spec.ts
··· 1 1 import { afterAll, beforeAll, describe, expect, it, vi } from 'vitest'; 2 2 3 - import browser from './scripts/browser'; 4 3 import { cleanup } from './scripts/cleanup'; 5 4 import { compileWithTypescript } from './scripts/compileWithTypescript'; 6 - import { copyAsset } from './scripts/copyAsset'; 7 5 import { generateClient } from './scripts/generateClient'; 8 6 import server from './scripts/server'; 9 7 ··· 11 9 beforeAll(async () => { 12 10 cleanup('v3/fetch'); 13 11 await generateClient('v3/fetch', 'v3', 'fetch'); 14 - copyAsset('index.html', 'v3/fetch/index.html'); 15 - copyAsset('main.ts', 'v3/fetch/main.ts'); 16 12 compileWithTypescript('v3/fetch'); 17 13 await server.start('v3/fetch'); 18 - await browser.start(); 19 14 }, 40000); 20 15 21 16 afterAll(async () => { 22 - await browser.stop(); 23 17 await server.stop(); 24 18 }); 25 19 26 20 it('requests token', async () => { 27 - await browser.exposeFunction('tokenRequest', vi.fn().mockResolvedValue('MY_TOKEN')); 28 - const result = await browser.evaluate(async () => { 29 - // @ts-ignore 30 - const { OpenAPI, SimpleService } = window.api; 31 - // @ts-ignore 32 - OpenAPI.TOKEN = window.tokenRequest; 33 - OpenAPI.USERNAME = undefined; 34 - OpenAPI.PASSWORD = undefined; 35 - return await SimpleService.getCallWithoutParametersAndResponse(); 36 - }); 21 + const { OpenAPI, SimpleService } = await import('./generated/v3/fetch/index.js'); 22 + const tokenRequest = vi.fn().mockResolvedValue('MY_TOKEN'); 23 + OpenAPI.TOKEN = tokenRequest; 24 + OpenAPI.USERNAME = undefined; 25 + OpenAPI.PASSWORD = undefined; 26 + const result = await SimpleService.getCallWithoutParametersAndResponse(); 27 + expect(tokenRequest.mock.calls.length).toBe(1); 37 28 // @ts-ignore 38 29 expect(result.headers.authorization).toBe('Bearer MY_TOKEN'); 39 30 }); 40 31 41 32 it('uses credentials', async () => { 42 - const result = await browser.evaluate(async () => { 43 - // @ts-ignore 44 - const { OpenAPI, SimpleService } = window.api; 45 - OpenAPI.TOKEN = undefined; 46 - OpenAPI.USERNAME = 'username'; 47 - OpenAPI.PASSWORD = 'password'; 48 - return await SimpleService.getCallWithoutParametersAndResponse(); 49 - }); 33 + const { OpenAPI, SimpleService } = await import('./generated/v3/fetch/index.js'); 34 + OpenAPI.TOKEN = undefined; 35 + OpenAPI.USERNAME = 'username'; 36 + OpenAPI.PASSWORD = 'password'; 37 + const result = await SimpleService.getCallWithoutParametersAndResponse(); 50 38 // @ts-ignore 51 39 expect(result.headers.authorization).toBe('Basic dXNlcm5hbWU6cGFzc3dvcmQ='); 52 40 }); 53 41 54 42 it('supports complex params', async () => { 55 - const result = await browser.evaluate(async () => { 43 + const { ComplexService } = await import('./generated/v3/fetch/index.js'); 44 + const result = await ComplexService.complexTypes({ 56 45 // @ts-ignore 57 - const { ComplexService } = window.api; 58 - return await ComplexService.complexTypes({ 59 - first: { 60 - second: { 61 - third: 'Hello World!', 62 - }, 46 + first: { 47 + second: { 48 + third: 'Hello World!', 63 49 }, 64 - }); 50 + }, 65 51 }); 66 52 expect(result).toBeDefined(); 67 53 }); 68 54 69 55 it('support form data', async () => { 70 - const result = await browser.evaluate(async () => { 56 + const { ParametersService } = await import('./generated/v3/fetch/index.js'); 57 + const result = await ParametersService.callWithParameters( 58 + 'valueHeader', 71 59 // @ts-ignore 72 - const { ParametersService } = window.api; 73 - return await ParametersService.callWithParameters( 74 - 'valueHeader', 75 - 'valueQuery', 76 - 'valueForm', 77 - 'valueCookie', 78 - 'valuePath', 79 - { 80 - prop: 'valueBody', 81 - } 82 - ); 83 - }); 60 + 'valueQuery', 61 + 'valueForm', 62 + 'valueCookie', 63 + 'valuePath', 64 + { 65 + prop: 'valueBody', 66 + } 67 + ); 84 68 expect(result).toBeDefined(); 85 69 }); 86 70 87 71 it('support blob response data', async () => { 88 - const result = await browser.evaluate(async () => { 89 - // @ts-ignore 90 - const { FileResponseService } = window.api; 91 - return await FileResponseService.fileResponse('test'); 92 - }); 72 + const { FileResponseService } = await import('./generated/v3/fetch/index.js'); 73 + // @ts-ignore 74 + const result = await FileResponseService.fileResponse('test'); 93 75 expect(result).toBeDefined(); 94 76 }); 95 77 96 78 it('can abort the request', async () => { 97 79 let error; 98 80 try { 99 - await browser.evaluate(async () => { 100 - // @ts-ignore 101 - const { SimpleService } = window.api; 102 - const promise = SimpleService.getCallWithoutParametersAndResponse(); 103 - setTimeout(() => { 104 - promise.cancel(); 105 - }, 10); 106 - await promise; 107 - }); 81 + const { SimpleService } = await import('./generated/v3/fetch/index.js'); 82 + const promise = SimpleService.getCallWithoutParametersAndResponse(); 83 + setTimeout(() => { 84 + promise.cancel(); 85 + }, 10); 86 + await promise; 108 87 } catch (e) { 109 88 error = (e as Error).message; 110 89 } ··· 112 91 }); 113 92 114 93 it('should throw known error (500)', async () => { 115 - const error = await browser.evaluate(async () => { 116 - try { 117 - // @ts-ignore 118 - const { ErrorService } = window.api; 119 - await ErrorService.testErrorCode(500); 120 - } catch (error) { 121 - return JSON.stringify({ 122 - body: error.body, 123 - message: error.message, 124 - name: error.name, 125 - status: error.status, 126 - statusText: error.statusText, 127 - url: error.url, 128 - }); 129 - } 130 - return; 131 - }); 132 - 94 + let error; 95 + try { 96 + const { ErrorService } = await import('./generated/v3/fetch/index.js'); 97 + // @ts-ignore 98 + await ErrorService.testErrorCode(500); 99 + } catch (err) { 100 + error = JSON.stringify({ 101 + body: err.body, 102 + message: err.message, 103 + name: err.name, 104 + status: err.status, 105 + statusText: err.statusText, 106 + url: err.url, 107 + }); 108 + } 133 109 expect(error).toBe( 134 110 JSON.stringify({ 135 111 body: { ··· 146 122 }); 147 123 148 124 it('should throw unknown error (599)', async () => { 149 - const error = await browser.evaluate(async () => { 150 - try { 151 - // @ts-ignore 152 - const { ErrorService } = window.api; 153 - await ErrorService.testErrorCode(599); 154 - } catch (error) { 155 - return JSON.stringify({ 156 - body: error.body, 157 - message: error.message, 158 - name: error.name, 159 - status: error.status, 160 - statusText: error.statusText, 161 - url: error.url, 162 - }); 163 - } 164 - return; 165 - }); 125 + let error; 126 + try { 127 + const { ErrorService } = await import('./generated/v3/fetch/index.js'); 128 + // @ts-ignore 129 + await ErrorService.testErrorCode(599); 130 + } catch (err) { 131 + error = JSON.stringify({ 132 + body: err.body, 133 + message: err.message, 134 + name: err.name, 135 + status: err.status, 136 + statusText: err.statusText, 137 + url: err.url, 138 + }); 139 + } 166 140 expect(error).toBe( 167 141 JSON.stringify({ 168 142 body: { ··· 180 154 }); 181 155 182 156 it('it should parse query params', async () => { 183 - const result = await browser.evaluate(async () => { 157 + const { ParametersService } = await import('./generated/v3/fetch/index.js'); 158 + const result = await ParametersService.postCallWithOptionalParam({ 184 159 // @ts-ignore 185 - const { ParametersService } = window.api; 186 - return await ParametersService.postCallWithOptionalParam({ 187 - page: 0, 188 - size: 1, 189 - sort: ['location'], 190 - }); 160 + page: 0, 161 + size: 1, 162 + sort: ['location'], 191 163 }); 192 164 // @ts-ignore 193 165 expect(result.query).toStrictEqual({ parameter: { page: '0', size: '1', sort: 'location' } }); ··· 198 170 beforeAll(async () => { 199 171 cleanup('v3/fetch'); 200 172 await generateClient('v3/fetch', 'v3', 'fetch', true); 201 - copyAsset('index.html', 'v3/fetch/index.html'); 202 - copyAsset('main.ts', 'v3/fetch/main.ts'); 203 173 compileWithTypescript('v3/fetch'); 204 174 await server.start('v3/fetch'); 205 - await browser.start(); 206 175 }, 40000); 207 176 208 177 afterAll(async () => { 209 - await browser.stop(); 210 178 await server.stop(); 211 179 }); 212 180 213 181 it('returns result body by default', async () => { 214 - const result = await browser.evaluate(async () => { 215 - // @ts-ignore 216 - const { SimpleService } = window.api; 217 - return await SimpleService.getCallWithoutParametersAndResponse(); 218 - }); 182 + const { SimpleService } = await import('./generated/v3/fetch/index.js'); 183 + const result = await SimpleService.getCallWithoutParametersAndResponse(); 219 184 // @ts-ignore 220 185 expect(result.body).toBeUndefined(); 221 186 }); 222 187 223 188 it('returns result body', async () => { 224 - const result = await browser.evaluate(async () => { 225 - // @ts-ignore 226 - const { SimpleService } = window.api; 227 - return await SimpleService.getCallWithoutParametersAndResponse({ 228 - _result: 'body', 229 - }); 189 + const { SimpleService } = await import('./generated/v3/fetch/index.js'); 190 + // @ts-ignore 191 + const result = await SimpleService.getCallWithoutParametersAndResponse({ 192 + _result: 'body', 230 193 }); 231 194 // @ts-ignore 232 195 expect(result.body).toBeUndefined(); ··· 234 197 235 198 it('returns raw result', async ({ skip }) => { 236 199 skip(); 237 - const result = await browser.evaluate(async () => { 238 - // @ts-ignore 239 - const { SimpleService } = window.api; 240 - return await SimpleService.getCallWithoutParametersAndResponse({ 241 - _result: 'raw', 242 - }); 200 + const { SimpleService } = await import('./generated/v3/fetch/index.js'); 201 + // @ts-ignore 202 + const result = await SimpleService.getCallWithoutParametersAndResponse({ 203 + _result: 'raw', 243 204 }); 244 205 // @ts-ignore 245 206 expect(result.body).toBeDefined();
+82 -118
packages/openapi-ts/test/e2e/v3.xhr.spec.ts
··· 1 1 import { afterAll, beforeAll, describe, expect, it, vi } from 'vitest'; 2 2 3 - import browser from './scripts/browser'; 4 3 import { cleanup } from './scripts/cleanup'; 5 4 import { compileWithTypescript } from './scripts/compileWithTypescript'; 6 - import { copyAsset } from './scripts/copyAsset'; 7 5 import { generateClient } from './scripts/generateClient'; 8 6 import server from './scripts/server'; 9 7 10 - describe('v3.xhr', () => { 8 + describe.skip('v3.xhr', () => { 11 9 beforeAll(async () => { 12 10 cleanup('v3/xhr'); 13 11 await generateClient('v3/xhr', 'v3', 'xhr'); 14 - copyAsset('index.html', 'v3/xhr/index.html'); 15 - copyAsset('main.ts', 'v3/xhr/main.ts'); 16 12 compileWithTypescript('v3/xhr'); 17 13 await server.start('v3/xhr'); 18 - await browser.start(); 19 14 }, 40000); 20 15 21 16 afterAll(async () => { 22 - await browser.stop(); 23 17 await server.stop(); 24 18 }); 25 19 26 20 it('requests token', async () => { 27 - await browser.exposeFunction('tokenRequest', vi.fn().mockResolvedValue('MY_TOKEN')); 28 - const result = await browser.evaluate(async () => { 29 - // @ts-ignore 30 - const { OpenAPI, SimpleService } = window.api; 31 - // @ts-ignore 32 - OpenAPI.TOKEN = window.tokenRequest; 33 - OpenAPI.USERNAME = undefined; 34 - OpenAPI.PASSWORD = undefined; 35 - return await SimpleService.getCallWithoutParametersAndResponse(); 36 - }); 21 + const { OpenAPI, SimpleService } = await import('./generated/v3/xhr/index.js'); 22 + const tokenRequest = vi.fn().mockResolvedValue('MY_TOKEN'); 23 + OpenAPI.TOKEN = tokenRequest; 24 + OpenAPI.USERNAME = undefined; 25 + OpenAPI.PASSWORD = undefined; 26 + const result = await SimpleService.getCallWithoutParametersAndResponse(); 27 + expect(tokenRequest.mock.calls.length).toBe(1); 37 28 // @ts-ignore 38 29 expect(result.headers.authorization).toBe('Bearer MY_TOKEN'); 39 30 }); 40 31 41 32 it('uses credentials', async () => { 42 - const result = await browser.evaluate(async () => { 43 - // @ts-ignore 44 - const { OpenAPI, SimpleService } = window.api; 45 - OpenAPI.TOKEN = undefined; 46 - OpenAPI.USERNAME = 'username'; 47 - OpenAPI.PASSWORD = 'password'; 48 - return await SimpleService.getCallWithoutParametersAndResponse(); 49 - }); 33 + const { OpenAPI, SimpleService } = await import('./generated/v3/xhr/index.js'); 34 + OpenAPI.TOKEN = undefined; 35 + OpenAPI.USERNAME = 'username'; 36 + OpenAPI.PASSWORD = 'password'; 37 + const result = await SimpleService.getCallWithoutParametersAndResponse(); 50 38 // @ts-ignore 51 39 expect(result.headers.authorization).toBe('Basic dXNlcm5hbWU6cGFzc3dvcmQ='); 52 40 }); 53 41 54 42 it('supports complex params', async () => { 55 - const result = await browser.evaluate(async () => { 43 + const { ComplexService } = await import('./generated/v3/xhr/index.js'); 44 + const result = await ComplexService.complexTypes({ 56 45 // @ts-ignore 57 - const { ComplexService } = window.api; 58 - return await ComplexService.complexTypes({ 59 - first: { 60 - second: { 61 - third: 'Hello World!', 62 - }, 46 + first: { 47 + second: { 48 + third: 'Hello World!', 63 49 }, 64 - }); 50 + }, 65 51 }); 66 52 expect(result).toBeDefined(); 67 53 }); 68 54 69 55 it('support form data', async () => { 70 - const result = await browser.evaluate(async () => { 56 + const { ParametersService } = await import('./generated/v3/xhr/index.js'); 57 + const result = await ParametersService.callWithParameters( 58 + 'valueHeader', 71 59 // @ts-ignore 72 - const { ParametersService } = window.api; 73 - return await ParametersService.callWithParameters( 74 - 'valueHeader', 75 - 'valueQuery', 76 - 'valueForm', 77 - 'valueCookie', 78 - 'valuePath', 79 - { 80 - prop: 'valueBody', 81 - } 82 - ); 83 - }); 60 + 'valueQuery', 61 + 'valueForm', 62 + 'valueCookie', 63 + 'valuePath', 64 + { 65 + prop: 'valueBody', 66 + } 67 + ); 84 68 expect(result).toBeDefined(); 85 69 }); 86 70 87 71 it('can abort the request', async () => { 88 72 let error; 89 73 try { 90 - await browser.evaluate(async () => { 91 - // @ts-ignore 92 - const { SimpleService } = window.api; 93 - const promise = SimpleService.getCallWithoutParametersAndResponse(); 94 - setTimeout(() => { 95 - promise.cancel(); 96 - }, 10); 97 - await promise; 98 - }); 74 + const { SimpleService } = await import('./generated/v3/xhr/index.js'); 75 + const promise = SimpleService.getCallWithoutParametersAndResponse(); 76 + setTimeout(() => { 77 + promise.cancel(); 78 + }, 10); 79 + await promise; 99 80 } catch (e) { 100 81 error = (e as Error).message; 101 82 } ··· 103 84 }); 104 85 105 86 it('should throw known error (500)', async () => { 106 - const error = await browser.evaluate(async () => { 107 - try { 108 - // @ts-ignore 109 - const { ErrorService } = window.api; 110 - await ErrorService.testErrorCode(500); 111 - } catch (error) { 112 - return JSON.stringify({ 113 - body: error.body, 114 - message: error.message, 115 - name: error.name, 116 - status: error.status, 117 - statusText: error.statusText, 118 - url: error.url, 119 - }); 120 - } 121 - return; 122 - }); 87 + let error; 88 + try { 89 + const { ErrorService } = await import('./generated/v3/xhr/index.js'); 90 + // @ts-ignore 91 + await ErrorService.testErrorCode(500); 92 + } catch (err) { 93 + error = JSON.stringify({ 94 + body: err.body, 95 + message: err.message, 96 + name: err.name, 97 + status: err.status, 98 + statusText: err.statusText, 99 + url: err.url, 100 + }); 101 + } 123 102 expect(error).toBe( 124 103 JSON.stringify({ 125 104 body: { ··· 136 115 }); 137 116 138 117 it('should throw unknown error (599)', async () => { 139 - const error = await browser.evaluate(async () => { 140 - try { 141 - // @ts-ignore 142 - const { ErrorService } = window.api; 143 - await ErrorService.testErrorCode(599); 144 - } catch (error) { 145 - return JSON.stringify({ 146 - body: error.body, 147 - message: error.message, 148 - name: error.name, 149 - status: error.status, 150 - statusText: error.statusText, 151 - url: error.url, 152 - }); 153 - } 154 - return; 155 - }); 118 + let error; 119 + try { 120 + const { ErrorService } = await import('./generated/v3/xhr/index.js'); 121 + // @ts-ignore 122 + await ErrorService.testErrorCode(599); 123 + } catch (err) { 124 + error = JSON.stringify({ 125 + body: err.body, 126 + message: err.message, 127 + name: err.name, 128 + status: err.status, 129 + statusText: err.statusText, 130 + url: err.url, 131 + }); 132 + } 156 133 expect(error).toBe( 157 134 JSON.stringify({ 158 135 body: { ··· 170 147 }); 171 148 172 149 it('it should parse query params', async () => { 173 - const result = await browser.evaluate(async () => { 150 + const { ParametersService } = await import('./generated/v3/xhr/index.js'); 151 + const result = await ParametersService.postCallWithOptionalParam({ 174 152 // @ts-ignore 175 - const { ParametersService } = window.api; 176 - return await ParametersService.postCallWithOptionalParam({ 177 - page: 0, 178 - size: 1, 179 - sort: ['location'], 180 - }); 153 + page: 0, 154 + size: 1, 155 + sort: ['location'], 181 156 }); 182 157 // @ts-ignore 183 158 expect(result.query).toStrictEqual({ parameter: { page: '0', size: '1', sort: 'location' } }); 184 159 }); 185 160 }); 186 161 187 - describe('v3.xhr useOptions', () => { 162 + describe.skip('v3.xhr useOptions', () => { 188 163 beforeAll(async () => { 189 164 cleanup('v3/xhr'); 190 165 await generateClient('v3/xhr', 'v3', 'xhr', true); 191 - copyAsset('index.html', 'v3/xhr/index.html'); 192 - copyAsset('main.ts', 'v3/xhr/main.ts'); 193 166 compileWithTypescript('v3/xhr'); 194 167 await server.start('v3/xhr'); 195 - await browser.start(); 196 168 }, 40000); 197 169 198 170 afterAll(async () => { 199 - await browser.stop(); 200 171 await server.stop(); 201 172 }); 202 173 203 174 it('returns result body by default', async () => { 204 - const result = await browser.evaluate(async () => { 205 - // @ts-ignore 206 - const { SimpleService } = window.api; 207 - return await SimpleService.getCallWithoutParametersAndResponse(); 208 - }); 175 + const { SimpleService } = await import('./generated/v3/xhr/index.js'); 176 + const result = await SimpleService.getCallWithoutParametersAndResponse(); 209 177 // @ts-ignore 210 178 expect(result.body).toBeUndefined(); 211 179 }); 212 180 213 181 it('returns result body', async () => { 214 - const result = await browser.evaluate(async () => { 215 - // @ts-ignore 216 - const { SimpleService } = window.api; 217 - return await SimpleService.getCallWithoutParametersAndResponse({ 218 - _result: 'body', 219 - }); 182 + const { SimpleService } = await import('./generated/v3/xhr/index.js'); 183 + // @ts-ignore 184 + const result = await SimpleService.getCallWithoutParametersAndResponse({ 185 + _result: 'body', 220 186 }); 221 187 // @ts-ignore 222 188 expect(result.body).toBeUndefined(); ··· 224 190 225 191 it('returns raw result', async ({ skip }) => { 226 192 skip(); 227 - const result = await browser.evaluate(async () => { 228 - // @ts-ignore 229 - const { SimpleService } = window.api; 230 - return await SimpleService.getCallWithoutParametersAndResponse({ 231 - _result: 'raw', 232 - }); 193 + const { SimpleService } = await import('./generated/v3/xhr/index.js'); 194 + // @ts-ignore 195 + const result = await SimpleService.getCallWithoutParametersAndResponse({ 196 + _result: 'raw', 233 197 }); 234 198 // @ts-ignore 235 199 expect(result.body).toBeDefined();