@goast/typescript 0.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (70) hide show
  1. package/README.md +11 -0
  2. package/assets/client/fetch/types.ts +9 -0
  3. package/assets/client/fetch/url-builder.ts +36 -0
  4. package/assets/service/angular/api-configuration.ts +18 -0
  5. package/assets/service/angular/base-service.ts +29 -0
  6. package/assets/service/angular/request-builder.ts +368 -0
  7. package/assets/service/angular/response-handlers.ts +127 -0
  8. package/assets/service/angular/strict-http-response.ts +8 -0
  9. package/cjs/index.js +9 -0
  10. package/cjs/lib/common-results.js +2 -0
  11. package/cjs/lib/config.js +15 -0
  12. package/cjs/lib/file-builder.js +244 -0
  13. package/cjs/lib/generators/file-generator.js +26 -0
  14. package/cjs/lib/generators/index.js +7 -0
  15. package/cjs/lib/generators/models/index.js +6 -0
  16. package/cjs/lib/generators/models/model-generator.js +317 -0
  17. package/cjs/lib/generators/models/models-generator.js +67 -0
  18. package/cjs/lib/generators/models/models.js +6 -0
  19. package/cjs/lib/generators/services/angular-services/angular-service-generator.js +360 -0
  20. package/cjs/lib/generators/services/angular-services/angular-services-generator.js +122 -0
  21. package/cjs/lib/generators/services/angular-services/index.js +6 -0
  22. package/cjs/lib/generators/services/angular-services/models.js +5 -0
  23. package/cjs/lib/generators/services/fetch-clients/fetch-client-generator.js +240 -0
  24. package/cjs/lib/generators/services/fetch-clients/fetch-clients-generator.js +83 -0
  25. package/cjs/lib/generators/services/fetch-clients/index.js +6 -0
  26. package/cjs/lib/generators/services/fetch-clients/models.js +5 -0
  27. package/cjs/lib/import-collection.js +116 -0
  28. package/cjs/lib/utils.js +56 -0
  29. package/cjs/package.json +1 -0
  30. package/esm/index.js +6 -0
  31. package/esm/lib/common-results.js +1 -0
  32. package/esm/lib/config.js +12 -0
  33. package/esm/lib/file-builder.js +240 -0
  34. package/esm/lib/generators/file-generator.js +22 -0
  35. package/esm/lib/generators/index.js +4 -0
  36. package/esm/lib/generators/models/index.js +3 -0
  37. package/esm/lib/generators/models/model-generator.js +313 -0
  38. package/esm/lib/generators/models/models-generator.js +63 -0
  39. package/esm/lib/generators/models/models.js +3 -0
  40. package/esm/lib/generators/services/angular-services/angular-service-generator.js +356 -0
  41. package/esm/lib/generators/services/angular-services/angular-services-generator.js +118 -0
  42. package/esm/lib/generators/services/angular-services/index.js +3 -0
  43. package/esm/lib/generators/services/angular-services/models.js +2 -0
  44. package/esm/lib/generators/services/fetch-clients/fetch-client-generator.js +236 -0
  45. package/esm/lib/generators/services/fetch-clients/fetch-clients-generator.js +79 -0
  46. package/esm/lib/generators/services/fetch-clients/index.js +3 -0
  47. package/esm/lib/generators/services/fetch-clients/models.js +2 -0
  48. package/esm/lib/import-collection.js +112 -0
  49. package/esm/lib/utils.js +48 -0
  50. package/package.json +29 -0
  51. package/types/index.d.ts +6 -0
  52. package/types/lib/common-results.d.ts +11 -0
  53. package/types/lib/config.d.ts +13 -0
  54. package/types/lib/file-builder.d.ts +110 -0
  55. package/types/lib/generators/file-generator.d.ts +11 -0
  56. package/types/lib/generators/index.d.ts +4 -0
  57. package/types/lib/generators/models/index.d.ts +3 -0
  58. package/types/lib/generators/models/model-generator.d.ts +40 -0
  59. package/types/lib/generators/models/models-generator.d.ts +23 -0
  60. package/types/lib/generators/models/models.d.ts +29 -0
  61. package/types/lib/generators/services/angular-services/angular-service-generator.d.ts +53 -0
  62. package/types/lib/generators/services/angular-services/angular-services-generator.d.ts +29 -0
  63. package/types/lib/generators/services/angular-services/index.d.ts +3 -0
  64. package/types/lib/generators/services/angular-services/models.d.ts +41 -0
  65. package/types/lib/generators/services/fetch-clients/fetch-client-generator.d.ts +43 -0
  66. package/types/lib/generators/services/fetch-clients/fetch-clients-generator.d.ts +24 -0
  67. package/types/lib/generators/services/fetch-clients/index.d.ts +3 -0
  68. package/types/lib/generators/services/fetch-clients/models.d.ts +34 -0
  69. package/types/lib/import-collection.d.ts +21 -0
  70. package/types/lib/utils.d.ts +6 -0
@@ -0,0 +1,11 @@
1
+ import { OpenApiGenerationProviderContext, OpenApiGeneratorInput } from '@goast/core';
2
+ import { TypeScriptGeneratorConfig } from '../config';
3
+ export declare abstract class TypeScriptFileGenerator<TContext extends OpenApiGenerationProviderContext<OpenApiGeneratorInput, TypeScriptGeneratorConfig>, TOutput> {
4
+ abstract generate(context: TContext): TOutput;
5
+ protected getAnyType(context: TContext): string;
6
+ protected toTypeName(context: TContext, name: string): string;
7
+ protected toMethodName(context: TContext, name: string): string;
8
+ protected toPropertyName(context: TContext, name: string, keepCasing?: boolean): string;
9
+ protected toEnumValueName(context: TContext, name: string): string;
10
+ protected toStringLiteral(context: TContext, text: string): string;
11
+ }
@@ -0,0 +1,4 @@
1
+ export * from './file-generator';
2
+ export * from './models';
3
+ export * from './services/angular-services';
4
+ export * from './services/fetch-clients';
@@ -0,0 +1,3 @@
1
+ export * from './model-generator';
2
+ export * from './models';
3
+ export * from './models-generator';
@@ -0,0 +1,40 @@
1
+ import { ApiSchema, ApiSchemaProperty, ArrayLikeApiSchema, CombinedLikeApiSchema, ObjectLikeApiSchema } from '@goast/core';
2
+ import { TypeScriptModelGeneratorContext, TypeScriptModelGeneratorOutput } from './models';
3
+ import { TypeScriptFileBuilder } from '../../file-builder';
4
+ import { TypeScriptFileGenerator } from '../file-generator';
5
+ type Context = TypeScriptModelGeneratorContext;
6
+ type Output = TypeScriptModelGeneratorOutput;
7
+ type Builder = TypeScriptFileBuilder;
8
+ export interface TypeScriptModelGenerator<TOutput extends Output = Output> {
9
+ generate(ctx: Context): TOutput;
10
+ }
11
+ export declare class DefaultTypeScriptModelGenerator extends TypeScriptFileGenerator<Context, Output> implements TypeScriptModelGenerator {
12
+ generate(ctx: Context): Output;
13
+ protected generateFileContent(ctx: Context, builder: Builder): void;
14
+ protected generateEnum(ctx: Context, builder: Builder): void;
15
+ protected generateEnumSignature(ctx: Context, builder: Builder): void;
16
+ protected generateEnumValues(ctx: Context, builder: Builder): void;
17
+ protected generateInterface(ctx: Context, builder: Builder, schema: ApiSchema<'object'>): void;
18
+ protected generateInterfaceSignature(ctx: Context, builder: Builder): void;
19
+ protected generateInterfaceContent(ctx: Context, builder: Builder, schema: ApiSchema<'object'>): void;
20
+ protected generateTypeAlias(ctx: Context, builder: Builder): void;
21
+ protected generateTypeAliasSignature(ctx: Context, builder: Builder): void;
22
+ protected generateTypeUsage(ctx: Context, builder: Builder, schema: ApiSchema): void;
23
+ protected generateType(ctx: Context, builder: Builder, schema: ApiSchema): void;
24
+ protected generateArrayType(ctx: Context, builder: Builder, schema: ArrayLikeApiSchema): void;
25
+ protected generateCombinedType(ctx: Context, builder: Builder, schema: CombinedLikeApiSchema): void;
26
+ protected generateOneOfType(ctx: Context, builder: Builder, schema: ApiSchema<'oneOf'>): void;
27
+ protected generateMultiType(ctx: Context, builder: Builder, schema: ApiSchema<'multi-type'>): void;
28
+ protected generateObjectType(ctx: Context, builder: Builder, schema: ObjectLikeApiSchema): void;
29
+ protected generateObjectTypeProperties(ctx: Context, builder: Builder, schema: ObjectLikeApiSchema): void;
30
+ protected generateObjectTypeAdditionalProperties(ctx: Context, builder: Builder, schema: ObjectLikeApiSchema): void;
31
+ protected generateEnumType(ctx: Context, builder: Builder, schema: ApiSchema): void;
32
+ protected generateTypeDocumentation(ctx: Context, builder: Builder): void;
33
+ protected generatePropertyDocumentation(ctx: Context, builder: Builder, property: ApiSchemaProperty): void;
34
+ protected generateDocumentation(ctx: Context, builder: Builder, schema: ApiSchema): void;
35
+ protected shouldGenerateTypeDeclaration(ctx: Context, schema: ApiSchema): boolean;
36
+ protected resolveInterfaceSchema(ctx: Context): ApiSchema<'object'> | undefined;
37
+ protected getDeclarationTypeName(ctx: Context, schema: ApiSchema): string;
38
+ protected getFilePath(ctx: Context, schema: ApiSchema): string;
39
+ }
40
+ export {};
@@ -0,0 +1,23 @@
1
+ import { ApiSchema, OpenApiGeneratorContext, OpenApiSchemasGenerationProviderBase, Factory } from '@goast/core';
2
+ import { TypeScriptModelGenerator } from './model-generator';
3
+ import { TypeScriptModelGeneratorOutput, TypeScriptModelsGeneratorConfig, TypeScriptModelsGeneratorContext, TypeScriptModelsGeneratorInput, TypeScriptModelsGeneratorOutput } from './models';
4
+ import { TypeScriptFileBuilder } from '../../file-builder';
5
+ type Input = TypeScriptModelsGeneratorInput;
6
+ type Output = TypeScriptModelsGeneratorOutput;
7
+ type Config = TypeScriptModelsGeneratorConfig;
8
+ type SchemaOutput = TypeScriptModelGeneratorOutput;
9
+ type Context = TypeScriptModelsGeneratorContext;
10
+ export declare class TypeScriptModelsGenerator extends OpenApiSchemasGenerationProviderBase<Input, Output, Config, SchemaOutput, Context> {
11
+ private readonly _modelGeneratorFactory;
12
+ constructor(modelGeneratorFactory?: Factory<TypeScriptModelGenerator, []>);
13
+ protected initResult(): Output;
14
+ protected buildContext(context: OpenApiGeneratorContext<TypeScriptModelsGeneratorInput>, config?: Partial<Config> | undefined): Context;
15
+ onGenerate(ctx: Context): Output;
16
+ protected generateSchema(ctx: Context, schema: ApiSchema): SchemaOutput;
17
+ protected addSchemaResult(ctx: Context, schema: ApiSchema, result: SchemaOutput): void;
18
+ protected generateIndexFile(ctx: Context): string | undefined;
19
+ protected getIndexFilePath(ctx: Context): string;
20
+ protected shouldGenerateIndexFile(ctx: Context): boolean;
21
+ protected generateIndexFileContent(ctx: Context, builder: TypeScriptFileBuilder): void;
22
+ }
23
+ export {};
@@ -0,0 +1,29 @@
1
+ import { ApiSchema, DefaultGenerationProviderConfig, OpenApiSchemasGenerationProviderContext, Nullable, StringCasing, StringCasingWithOptions } from '@goast/core';
2
+ import { TypeScriptComponentOutput } from '../../common-results';
3
+ import { TypeScriptGeneratorConfig } from '../../config';
4
+ export type TypeScriptModelGeneratorConfig = TypeScriptGeneratorConfig & {
5
+ fileNameCasing: StringCasing | StringCasingWithOptions;
6
+ typeNameCasing: StringCasing | StringCasingWithOptions;
7
+ enumGeneration: 'union' | 'prefer-enum';
8
+ immutableTypes: boolean;
9
+ inlineUnnamedSchemas: boolean;
10
+ modelsDirPath: string;
11
+ typeDeclaration: 'type' | 'prefer-interface';
12
+ };
13
+ export type TypeScriptModelsGeneratorConfig = TypeScriptModelGeneratorConfig & {
14
+ indexFilePath: string | null;
15
+ };
16
+ export declare const defaultTypeScriptModelGeneratorConfig: DefaultGenerationProviderConfig<TypeScriptModelGeneratorConfig>;
17
+ export declare const defaultTypeScriptModelsGeneratorConfig: DefaultGenerationProviderConfig<TypeScriptModelsGeneratorConfig>;
18
+ export type TypeScriptModelsGeneratorInput = {};
19
+ export type TypeScriptModelsGeneratorOutput = {
20
+ models: {
21
+ [schemaId: string]: TypeScriptModelGeneratorOutput;
22
+ };
23
+ modelIndexFilePath: Nullable<string>;
24
+ };
25
+ export type TypeScriptModelGeneratorOutput = TypeScriptComponentOutput;
26
+ export type TypeScriptModelsGeneratorContext = OpenApiSchemasGenerationProviderContext<TypeScriptModelsGeneratorInput, TypeScriptModelsGeneratorOutput, TypeScriptModelsGeneratorConfig, TypeScriptModelGeneratorOutput>;
27
+ export type TypeScriptModelGeneratorContext = TypeScriptModelsGeneratorContext & {
28
+ schema: ApiSchema;
29
+ };
@@ -0,0 +1,53 @@
1
+ import { ApiEndpoint, TextOrBuilderFn } from '@goast/core';
2
+ import { TypeScriptAngularServiceGeneratorContext, TypeScriptAngularServiceGeneratorOutput } from './models';
3
+ import { TypeScriptClassOptions, TypeScriptConstructorOptions, TypeScriptExternalTypeOptions, TypeScriptFileBuilder, TypeScriptMethodOptions, TypeScriptParameterOptions, TypeScriptPropertyOptions } from '../../../file-builder';
4
+ import { TypeScriptFileGenerator } from '../../file-generator';
5
+ type Context = TypeScriptAngularServiceGeneratorContext;
6
+ type Output = TypeScriptAngularServiceGeneratorOutput;
7
+ type Builder = TypeScriptFileBuilder;
8
+ export interface TypeScriptAngularServiceGenerator<TOutput extends Output = Output> {
9
+ generate(ctx: Context): TOutput;
10
+ }
11
+ export declare class DefaultTypeScriptAngularServiceGenerator extends TypeScriptFileGenerator<Context, Output> implements TypeScriptAngularServiceGenerator {
12
+ protected readonly httpClientType: TypeScriptExternalTypeOptions;
13
+ protected readonly httpContextType: TypeScriptExternalTypeOptions;
14
+ protected readonly httpResponseType: TypeScriptExternalTypeOptions;
15
+ protected readonly observableType: TypeScriptExternalTypeOptions;
16
+ protected readonly rxjsFilterType: TypeScriptExternalTypeOptions;
17
+ protected readonly rxjsMapType: TypeScriptExternalTypeOptions;
18
+ protected getApiConfigurationType(ctx: Context): TypeScriptExternalTypeOptions;
19
+ protected getBaseServiceType(ctx: Context): TypeScriptExternalTypeOptions;
20
+ protected getStrictHttpResponseType(ctx: Context): TypeScriptExternalTypeOptions;
21
+ protected getRequestBuilderType(ctx: Context): TypeScriptExternalTypeOptions;
22
+ generate(ctx: Context): Output;
23
+ protected generateServiceFileContent(ctx: Context, builder: Builder): void;
24
+ protected generateEndpointParamsType(ctx: Context, builder: Builder, endpoint: ApiEndpoint): void;
25
+ protected generateClass(ctx: Context, builder: Builder): void;
26
+ protected generateClassContent(ctx: Context, builder: Builder): void;
27
+ protected generateConstructor(ctx: Context, builder: Builder): void;
28
+ protected generateConstructorContent(ctx: Context, builder: Builder): void;
29
+ protected generateEndpoint(ctx: Context, builder: Builder, endpoint: ApiEndpoint): void;
30
+ protected generateEndpointPathProperty(ctx: Context, builder: Builder, endpoint: ApiEndpoint): void;
31
+ protected generateEndpointResponseMethod(ctx: Context, builder: Builder, endpoint: ApiEndpoint): void;
32
+ protected generateEndpointResponseMethodContent(ctx: Context, builder: Builder, endpoint: ApiEndpoint): void;
33
+ protected generateEndpointMethod(ctx: Context, builder: Builder, endpoint: ApiEndpoint): void;
34
+ protected generateEndpointMethodContent(ctx: Context, builder: Builder, endpoint: ApiEndpoint): void;
35
+ protected getClassOptions(ctx: Context): TypeScriptClassOptions;
36
+ protected getConstructorOptions(ctx: Context): TypeScriptConstructorOptions;
37
+ protected getEndpointPathPropertyOptions(ctx: Context, endpoint: ApiEndpoint): TypeScriptPropertyOptions;
38
+ protected getEndpointMethodParams(ctx: Context, endpoint: ApiEndpoint): (TextOrBuilderFn<Builder> | TypeScriptParameterOptions)[];
39
+ protected generateEndpointSuccessResponseSchema(ctx: Context, builder: Builder, endpoint: ApiEndpoint): void;
40
+ protected getEndpointResponseMethodOptions(ctx: Context, endpoint: ApiEndpoint): TypeScriptMethodOptions;
41
+ protected getEndpointMethodOptions(ctx: Context, endpoint: ApiEndpoint): TypeScriptMethodOptions;
42
+ protected getEndpointSuccessResponse(ctx: Context, endpoint: ApiEndpoint): import("@goast/core").ApiResponse | undefined;
43
+ protected getServiceClassName(ctx: Context): string;
44
+ protected hasEndpointParams(ctx: Context, endpoint: ApiEndpoint): boolean;
45
+ protected getEndpointParamsTypeName(ctx: Context, endpoint: ApiEndpoint): string;
46
+ protected getEndpointPathPropertyName(ctx: Context, endpoint: ApiEndpoint): string;
47
+ protected getEndpointMethodName(ctx: Context, endpoint: ApiEndpoint): string;
48
+ protected getEndpointResponseMethodName(ctx: Context, endpoint: ApiEndpoint): string;
49
+ protected getServiceFilePath(ctx: Context): string;
50
+ protected getResponseModelsFilePath(ctx: Context): string;
51
+ protected getUtilsDirPath(ctx: Context): string;
52
+ }
53
+ export {};
@@ -0,0 +1,29 @@
1
+ import { ApiService, Factory, OpenApiGeneratorContext, OpenApiServicesGenerationProviderBase } from '@goast/core';
2
+ import { TypeScriptAngularServiceGenerator } from './angular-service-generator';
3
+ import { TypeScriptAngularServicesGeneratorInput, TypeScriptAngularServicesGeneratorOutput, TypeScriptAngularServicesGeneratorConfig, TypeScriptAngularServiceGeneratorOutput, TypeScriptAngularServicesGeneratorContext } from './models';
4
+ import { TypeScriptFileBuilder } from '../../../file-builder';
5
+ type Input = TypeScriptAngularServicesGeneratorInput;
6
+ type Output = TypeScriptAngularServicesGeneratorOutput;
7
+ type Config = TypeScriptAngularServicesGeneratorConfig;
8
+ type ServiceOutput = TypeScriptAngularServiceGeneratorOutput;
9
+ type Context = TypeScriptAngularServicesGeneratorContext;
10
+ export declare class TypeScriptAngularServicesGenerator extends OpenApiServicesGenerationProviderBase<Input, Output, Config, ServiceOutput, Context> {
11
+ private readonly _clientGeneratorFactory;
12
+ constructor(clientGeneratorFactory?: Factory<TypeScriptAngularServiceGenerator, []>);
13
+ protected initResult(): Output;
14
+ protected buildContext(context: OpenApiGeneratorContext<Input>, config?: Partial<Config> | undefined): Context;
15
+ onGenerate(ctx: Context): Output;
16
+ protected generateService(ctx: Context, service: ApiService): ServiceOutput;
17
+ protected addServiceResult(ctx: Context, service: ApiService, result: ServiceOutput): void;
18
+ protected generateServicesIndexFile(ctx: Context): string | undefined;
19
+ protected getServicesIndexFilePath(ctx: Context): string;
20
+ protected shouldGenerateServicesIndexFile(ctx: Context): boolean;
21
+ protected generateServicesIndexFileContent(ctx: Context, builder: TypeScriptFileBuilder): void;
22
+ protected generateResponseModelsIndexFile(ctx: Context): string | undefined;
23
+ protected getResponseModelsIndexFilePath(ctx: Context): string;
24
+ protected shouldGenerateResponseModelsIndexFile(ctx: Context): boolean;
25
+ protected generateResponseModelsIndexFileContent(ctx: Context, builder: TypeScriptFileBuilder): void;
26
+ protected copyUtilsFiles(ctx: Context): void;
27
+ protected getRootUrl(ctx: Context): string;
28
+ }
29
+ export {};
@@ -0,0 +1,3 @@
1
+ export * from './angular-service-generator';
2
+ export * from './angular-services-generator';
3
+ export * from './models';
@@ -0,0 +1,41 @@
1
+ import { ApiEndpoint, ApiService, DefaultGenerationProviderConfig, Nullable, OpenApiServicesGenerationProviderContext, RequiredProperties, StringCasing, StringCasingWithOptions } from '@goast/core';
2
+ import { TypeScriptComponentOutput } from '../../../common-results';
3
+ import { TypeScriptGeneratorConfig } from '../../../config';
4
+ import { TypeScriptModelsGeneratorOutput } from '../../models';
5
+ export type TypeScriptAngularServicesGeneratorConfig = TypeScriptGeneratorConfig & {
6
+ fileNameCasing: StringCasing | StringCasingWithOptions;
7
+ responseModelsFileNameCasing: StringCasing | StringCasingWithOptions;
8
+ exposeResponseMethods: boolean;
9
+ exposePathProperties: boolean;
10
+ clientMethodFlavor: 'default' | 'response-handler';
11
+ rootUrl?: string | RegExp | ((rootUrl: string) => string);
12
+ pathModifier?: RegExp | ((path: string, endpoint: ApiEndpoint) => string);
13
+ servicesDirPath: string;
14
+ responseModelsDirPath: Nullable<string>;
15
+ utilsDirPath: string;
16
+ indexFilePath: Nullable<string>;
17
+ responseModelsIndexFilePath: Nullable<string>;
18
+ };
19
+ export declare const defaultTypeScriptAngularServicesGeneratorConfig: DefaultGenerationProviderConfig<TypeScriptAngularServicesGeneratorConfig>;
20
+ export type TypeScriptAngularServicesGeneratorInput = TypeScriptModelsGeneratorOutput;
21
+ export type TypeScriptAngularServicesGeneratorOutput = {
22
+ services: {
23
+ [serviceId: string]: TypeScriptAngularServiceGeneratorOutput;
24
+ };
25
+ servicesIndexFilePath: string | undefined;
26
+ responseModelsIndexFilePath: string | undefined;
27
+ };
28
+ export type x = Omit<TypeScriptComponentOutput, 'additionalImports'>;
29
+ export type TypeScriptAngularServiceGeneratorOutput = RequiredProperties<TypeScriptComponentOutput, 'filePath'> & {
30
+ responseModels: {
31
+ [operationId: string]: TypeScriptComponentOutput & {
32
+ statusCodes: {
33
+ [statusCode: string]: TypeScriptComponentOutput;
34
+ };
35
+ };
36
+ };
37
+ };
38
+ export type TypeScriptAngularServicesGeneratorContext = OpenApiServicesGenerationProviderContext<TypeScriptAngularServicesGeneratorInput, TypeScriptAngularServicesGeneratorOutput, TypeScriptAngularServicesGeneratorConfig, TypeScriptAngularServiceGeneratorOutput>;
39
+ export type TypeScriptAngularServiceGeneratorContext = TypeScriptAngularServicesGeneratorContext & {
40
+ readonly service: ApiService;
41
+ };
@@ -0,0 +1,43 @@
1
+ import { ApiEndpoint, ApiSchema } from '@goast/core';
2
+ import { TypeScriptFetchClientGeneratorContext, TypeScriptFetchClientGeneratorOutput } from './models';
3
+ import { TypeScriptFileBuilder } from '../../../file-builder';
4
+ import { TypeScriptFileGenerator } from '../../file-generator';
5
+ type Context = TypeScriptFetchClientGeneratorContext;
6
+ type Output = TypeScriptFetchClientGeneratorOutput;
7
+ type Builder = TypeScriptFileBuilder;
8
+ export interface TypeScriptFetchClientGenerator<TOutput extends Output = Output> {
9
+ generate(ctx: Context): TOutput;
10
+ }
11
+ export declare class DefaultTypeScriptFetchClientGenerator extends TypeScriptFileGenerator<Context, Output> implements TypeScriptFetchClientGenerator {
12
+ generate(ctx: Context): Output;
13
+ protected generateInterface(ctx: Context, builder: Builder): void;
14
+ protected generateInterfaceDocumentation(ctx: Context, builder: Builder): void;
15
+ protected generateInterfaceSignature(ctx: Context, builder: Builder): void;
16
+ protected generateInterfaceContent(ctx: Context, builder: Builder): void;
17
+ protected generateInterfaceServiceMethod(ctx: Context, builder: Builder, endpoint: ApiEndpoint): void;
18
+ protected generateDefaultOptions(ctx: Context, builder: Builder): void;
19
+ protected generateClass(ctx: Context, builder: Builder): void;
20
+ protected generateClassDocumentation(ctx: Context, builder: Builder): void;
21
+ protected generateClassSignature(ctx: Context, builder: Builder): void;
22
+ protected generateClassContent(ctx: Context, builder: Builder): void;
23
+ protected generateClassFields(ctx: Context, builder: Builder): void;
24
+ protected generateClassConstructor(ctx: Context, builder: Builder): void;
25
+ protected generateClassConstructorContent(ctx: Context, builder: Builder): void;
26
+ protected generateClassServiceMethod(ctx: Context, builder: Builder, endpoint: ApiEndpoint): void;
27
+ protected generateServiceMethodDocumentation(ctx: Context, builder: Builder, endpoint: ApiEndpoint): void;
28
+ protected generateServiceMethodSignature(ctx: Context, builder: Builder, endpoint: ApiEndpoint): void;
29
+ protected generateServiceMethodParameters(ctx: Context, builder: Builder, endpoint: ApiEndpoint): void;
30
+ protected generateServiceMethodReturnValue(ctx: Context, builder: Builder, endpoint: ApiEndpoint): void;
31
+ protected generateTypedResponse(ctx: Context, builder: Builder, schema: ApiSchema | undefined): void;
32
+ protected generateServiceMethodContent(ctx: Context, builder: Builder, endpoint: ApiEndpoint): void;
33
+ protected getTypeName(ctx: Context, builder: Builder, schemaId: string | undefined): string;
34
+ protected shouldGenerateInterface(ctx: Context): boolean;
35
+ protected shouldGenerateClass(ctx: Context): boolean;
36
+ protected getInterfaceName(ctx: Context): string;
37
+ protected getClassName(ctx: Context): string;
38
+ protected getDefaultOptionsConstantName(ctx: Context): string;
39
+ protected getInterfaceFilePath(ctx: Context): string;
40
+ protected getClassFilePath(ctx: Context): string;
41
+ protected getUtilPath(ctx: Context, fileName: string): string;
42
+ }
43
+ export {};
@@ -0,0 +1,24 @@
1
+ import { ApiService, OpenApiGeneratorContext, OpenApiServicesGenerationProviderBase, Factory } from '@goast/core';
2
+ import { TypeScriptFetchClientGenerator } from './fetch-client-generator';
3
+ import { TypeScriptFetchClientGeneratorOutput, TypeScriptFetchClientsGeneratorConfig, TypeScriptFetchClientsGeneratorContext, TypeScriptFetchClientsGeneratorInput, TypeScriptFetchClientsGeneratorOutput } from './models';
4
+ import { TypeScriptFileBuilder } from '../../../file-builder';
5
+ type Input = TypeScriptFetchClientsGeneratorInput;
6
+ type Output = TypeScriptFetchClientsGeneratorOutput;
7
+ type Config = TypeScriptFetchClientsGeneratorConfig;
8
+ type ServiceOutput = TypeScriptFetchClientGeneratorOutput;
9
+ type Context = TypeScriptFetchClientsGeneratorContext;
10
+ export declare class TypeScriptClientsGenerator extends OpenApiServicesGenerationProviderBase<Input, Output, Config, ServiceOutput, Context> {
11
+ private readonly _clientGeneratorFactory;
12
+ constructor(clientGeneratorFactory?: Factory<TypeScriptFetchClientGenerator, []>);
13
+ protected initResult(): Output;
14
+ protected buildContext(context: OpenApiGeneratorContext<Input>, config?: Partial<Config> | undefined): Context;
15
+ onGenerate(ctx: Context): Output;
16
+ protected generateService(ctx: Context, service: ApiService): ServiceOutput;
17
+ protected addServiceResult(ctx: Context, service: ApiService, result: ServiceOutput): void;
18
+ protected generateIndexFile(ctx: Context): string | undefined;
19
+ protected getIndexFilePath(ctx: Context): string;
20
+ protected shouldGenerateIndexFile(ctx: Context): boolean;
21
+ protected generateIndexFileContent(ctx: Context, builder: TypeScriptFileBuilder): void;
22
+ private copyUtilsFiles;
23
+ }
24
+ export {};
@@ -0,0 +1,3 @@
1
+ export * from './fetch-client-generator';
2
+ export * from './fetch-clients-generator';
3
+ export * from './models';
@@ -0,0 +1,34 @@
1
+ import { ApiService, DefaultGenerationProviderConfig, OpenApiServicesGenerationProviderContext, StringCasing, StringCasingWithOptions, Nullable } from '@goast/core';
2
+ import { TypeScriptComponentOutput } from '../../../common-results';
3
+ import { TypeScriptGeneratorConfig } from '../../../config';
4
+ import { TypeScriptModelsGeneratorOutput } from '../../models/models';
5
+ export type TypeScriptFetchClientsGeneratorConfig = TypeScriptGeneratorConfig & {
6
+ fileNameCasing: StringCasing | StringCasingWithOptions;
7
+ interfaceFileNameCasing: Nullable<StringCasing | StringCasingWithOptions>;
8
+ classNameCasing: StringCasing | StringCasingWithOptions;
9
+ interfaceNameCasing: StringCasing | StringCasingWithOptions;
10
+ methodCasing: StringCasing | StringCasingWithOptions;
11
+ clientFileKind: 'interface' | 'class' | 'class-and-interface';
12
+ clientDirPath: string;
13
+ clientInterfaceDirPath: Nullable<string>;
14
+ indexFilePath: Nullable<string>;
15
+ interfaceIndexFilePath: Nullable<string>;
16
+ utilsDirPath: string;
17
+ };
18
+ export declare const defaultTypeScriptFetchClientsGeneratorConfig: DefaultGenerationProviderConfig<TypeScriptFetchClientsGeneratorConfig>;
19
+ export type TypeScriptFetchClientsGeneratorInput = TypeScriptModelsGeneratorOutput;
20
+ export type TypeScriptFetchClientsGeneratorOutput = {
21
+ clients: {
22
+ [serviceId: string]: TypeScriptFetchClientGeneratorOutput;
23
+ };
24
+ clientIndexFilePath: string | undefined;
25
+ clientInterfaceIndexFilePath: string | undefined;
26
+ };
27
+ export type TypeScriptFetchClientGeneratorOutput = {
28
+ class?: Omit<TypeScriptComponentOutput, 'additionalImports'>;
29
+ interface?: Omit<TypeScriptComponentOutput, 'additionalImports'>;
30
+ };
31
+ export type TypeScriptFetchClientsGeneratorContext = OpenApiServicesGenerationProviderContext<TypeScriptFetchClientsGeneratorInput, TypeScriptFetchClientsGeneratorOutput, TypeScriptFetchClientsGeneratorConfig, TypeScriptFetchClientGeneratorOutput>;
32
+ export type TypeScriptFetchClientGeneratorContext = TypeScriptFetchClientsGeneratorContext & {
33
+ readonly service: ApiService;
34
+ };
@@ -0,0 +1,21 @@
1
+ import { SourceBuilderOptions, StringBuilder } from '@goast/core';
2
+ import { TypeScriptImport, TypeScriptImportKind } from './common-results';
3
+ import { TypeScriptFileBuilder } from './file-builder';
4
+ import { ImportModuleTransformer } from './utils';
5
+ export declare class ImportExportCollection {
6
+ private readonly _imports;
7
+ private readonly _exports;
8
+ get hasImports(): boolean;
9
+ get hasExports(): boolean;
10
+ get imports(): TypeScriptImport[];
11
+ addImport(importName: string, fromModule: string): void;
12
+ addExport(exportName: string, fromModule: string): void;
13
+ clear(): void;
14
+ toString(options: Partial<SourceBuilderOptions>, filePath: string | undefined, importModuleTransformer: ImportModuleTransformer): string;
15
+ writeTo(builder: StringBuilder, filePath: string | undefined, importModuleTransformer: ImportModuleTransformer): void;
16
+ writeTo(builder: TypeScriptFileBuilder): void;
17
+ protected writeImportsExports(builder: StringBuilder, keyword: 'import' | 'export', data: (readonly [string, TypeScriptImportKind, string[]])[]): void;
18
+ protected sortAndResolve(data: Map<string, Set<string>>, filePath: string | undefined, importModuleTransformer: ImportModuleTransformer): (readonly [string, TypeScriptImportKind, string[]])[];
19
+ protected getImportKind(fromModule: string): TypeScriptImportKind;
20
+ protected resolveModulePath(fromModule: string, filePath: string | undefined, importModuleTransformer: ImportModuleTransformer): [string, TypeScriptImportKind];
21
+ }
@@ -0,0 +1,6 @@
1
+ export type ImportModuleTransformer = 'omit-extension' | 'js-extension' | ((module: string) => string);
2
+ export declare function toTypeScriptStringLiteral(value: string, useSingleQuotes: boolean): string;
3
+ export declare function toTypeScriptPropertyName(value: string, useSingleQuotes: boolean): string;
4
+ export declare function getModulePathRelativeToFile(from: string, to: string, transformer: ImportModuleTransformer): string;
5
+ export declare function getModulePathRelativeToDirectory(from: string, to: string, transformer: ImportModuleTransformer): string;
6
+ export declare function modifyString<TArgs extends any[]>(value: string, modifier: string | RegExp | ((value: string, ...args: TArgs) => string) | undefined, ...args: TArgs): string;