@goast/typescript 0.0.4 → 0.2.0
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.
- package/assets/{service → client}/angular/request-builder.ts +6 -2
- package/assets/client/fetch/{url-builder.ts → fetch-client.utils.ts} +15 -0
- package/assets/stubs/easy-network-stub/easy-network-stub.utils.ts +235 -0
- package/cjs/lib/ast/_index.js +108 -0
- package/cjs/lib/ast/common.js +2 -0
- package/cjs/lib/ast/index.js +5 -0
- package/cjs/lib/ast/node.js +10 -0
- package/cjs/lib/ast/nodes/argument.js +20 -0
- package/cjs/lib/ast/nodes/array-type.js +27 -0
- package/cjs/lib/ast/nodes/arrow-function.js +51 -0
- package/cjs/lib/ast/nodes/call.js +26 -0
- package/cjs/lib/ast/nodes/class.js +70 -0
- package/cjs/lib/ast/nodes/constructor-parameter.js +46 -0
- package/cjs/lib/ast/nodes/constructor.js +42 -0
- package/cjs/lib/ast/nodes/decorator.js +38 -0
- package/cjs/lib/ast/nodes/doc-tag.js +64 -0
- package/cjs/lib/ast/nodes/doc.js +57 -0
- package/cjs/lib/ast/nodes/enum-value.js +35 -0
- package/cjs/lib/ast/nodes/enum.js +46 -0
- package/cjs/lib/ast/nodes/export.js +27 -0
- package/cjs/lib/ast/nodes/function-type.js +35 -0
- package/cjs/lib/ast/nodes/function.js +60 -0
- package/cjs/lib/ast/nodes/generic-parameter.js +40 -0
- package/cjs/lib/ast/nodes/indexer.js +32 -0
- package/cjs/lib/ast/nodes/interface.js +60 -0
- package/cjs/lib/ast/nodes/intersection-type.js +44 -0
- package/cjs/lib/ast/nodes/lookup-type.js +30 -0
- package/cjs/lib/ast/nodes/method.js +82 -0
- package/cjs/lib/ast/nodes/object-type.js +24 -0
- package/cjs/lib/ast/nodes/object.js +24 -0
- package/cjs/lib/ast/nodes/parameter.js +45 -0
- package/cjs/lib/ast/nodes/property-accessor.js +128 -0
- package/cjs/lib/ast/nodes/property.js +119 -0
- package/cjs/lib/ast/nodes/reference.js +63 -0
- package/cjs/lib/ast/nodes/string.js +30 -0
- package/cjs/lib/ast/nodes/tuple.js +28 -0
- package/cjs/lib/ast/nodes/type-alias.js +36 -0
- package/cjs/lib/ast/nodes/typeof.js +23 -0
- package/cjs/lib/ast/nodes/types.js +2 -0
- package/cjs/lib/ast/nodes/union-type.js +44 -0
- package/cjs/lib/ast/nodes/variable.js +38 -0
- package/cjs/lib/ast/references/angular.js +12 -0
- package/cjs/lib/ast/references/easy-network-stub.js +8 -0
- package/cjs/lib/ast/references/index.js +7 -0
- package/cjs/lib/ast/references/rxjs.js +9 -0
- package/cjs/lib/ast/references/typescript.js +33 -0
- package/cjs/lib/ast/utils/get-type-script-builder-options.js +19 -0
- package/cjs/lib/ast/utils/to-ts-node.js +24 -0
- package/cjs/lib/ast/utils/write-ts-generic-parameters.js +11 -0
- package/cjs/lib/ast/utils/write-ts-members.js +18 -0
- package/cjs/lib/ast/utils/write-ts-nodes.js +24 -0
- package/cjs/lib/ast/utils/write-ts-parameters.js +14 -0
- package/cjs/lib/config.js +5 -3
- package/cjs/lib/file-builder.js +45 -202
- package/cjs/lib/generators/file-generator.js +2 -18
- package/cjs/lib/generators/index.js +1 -0
- package/cjs/lib/generators/models/model-generator.js +144 -205
- package/cjs/lib/generators/models/models-generator.js +12 -26
- package/cjs/lib/generators/models/models.js +1 -1
- package/cjs/lib/generators/services/angular-services/angular-service-generator.js +183 -306
- package/cjs/lib/generators/services/angular-services/angular-services-generator.js +168 -76
- package/cjs/lib/generators/services/angular-services/models.js +10 -1
- package/cjs/lib/generators/services/angular-services/refs.js +24 -0
- package/cjs/lib/generators/services/easy-network-stub/easy-network-stub-generator.js +169 -0
- package/cjs/lib/generators/services/easy-network-stub/easy-network-stubs-generator.js +73 -0
- package/cjs/lib/generators/services/easy-network-stub/index.js +6 -0
- package/cjs/lib/generators/services/easy-network-stub/models.js +10 -0
- package/cjs/lib/generators/services/easy-network-stub/refs.js +21 -0
- package/cjs/lib/generators/services/fetch-clients/fetch-client-generator.js +126 -180
- package/cjs/lib/generators/services/fetch-clients/fetch-clients-generator.js +5 -1
- package/cjs/lib/generators/services/fetch-clients/refs.js +17 -0
- package/cjs/lib/import-collection.js +18 -19
- package/esm/lib/ast/_index.js +37 -0
- package/esm/lib/ast/common.js +1 -0
- package/esm/lib/ast/index.js +2 -0
- package/esm/lib/ast/node.js +6 -0
- package/esm/lib/ast/nodes/argument.js +16 -0
- package/esm/lib/ast/nodes/array-type.js +23 -0
- package/esm/lib/ast/nodes/arrow-function.js +47 -0
- package/esm/lib/ast/nodes/call.js +22 -0
- package/esm/lib/ast/nodes/class.js +66 -0
- package/esm/lib/ast/nodes/constructor-parameter.js +42 -0
- package/esm/lib/ast/nodes/constructor.js +38 -0
- package/esm/lib/ast/nodes/decorator.js +34 -0
- package/esm/lib/ast/nodes/doc-tag.js +60 -0
- package/esm/lib/ast/nodes/doc.js +53 -0
- package/esm/lib/ast/nodes/enum-value.js +31 -0
- package/esm/lib/ast/nodes/enum.js +42 -0
- package/esm/lib/ast/nodes/export.js +22 -0
- package/esm/lib/ast/nodes/function-type.js +31 -0
- package/esm/lib/ast/nodes/function.js +56 -0
- package/esm/lib/ast/nodes/generic-parameter.js +36 -0
- package/esm/lib/ast/nodes/indexer.js +28 -0
- package/esm/lib/ast/nodes/interface.js +56 -0
- package/esm/lib/ast/nodes/intersection-type.js +40 -0
- package/esm/lib/ast/nodes/lookup-type.js +26 -0
- package/esm/lib/ast/nodes/method.js +77 -0
- package/esm/lib/ast/nodes/object-type.js +20 -0
- package/esm/lib/ast/nodes/object.js +20 -0
- package/esm/lib/ast/nodes/parameter.js +41 -0
- package/esm/lib/ast/nodes/property-accessor.js +121 -0
- package/esm/lib/ast/nodes/property.js +113 -0
- package/esm/lib/ast/nodes/reference.js +59 -0
- package/esm/lib/ast/nodes/string.js +26 -0
- package/esm/lib/ast/nodes/tuple.js +24 -0
- package/esm/lib/ast/nodes/type-alias.js +32 -0
- package/esm/lib/ast/nodes/typeof.js +18 -0
- package/esm/lib/ast/nodes/types.js +1 -0
- package/esm/lib/ast/nodes/union-type.js +40 -0
- package/esm/lib/ast/nodes/variable.js +34 -0
- package/esm/lib/ast/references/angular.js +9 -0
- package/esm/lib/ast/references/easy-network-stub.js +5 -0
- package/esm/lib/ast/references/index.js +5 -0
- package/esm/lib/ast/references/rxjs.js +6 -0
- package/esm/lib/ast/references/typescript.js +30 -0
- package/esm/lib/ast/utils/get-type-script-builder-options.js +15 -0
- package/esm/lib/ast/utils/to-ts-node.js +20 -0
- package/esm/lib/ast/utils/write-ts-generic-parameters.js +7 -0
- package/esm/lib/ast/utils/write-ts-members.js +14 -0
- package/esm/lib/ast/utils/write-ts-nodes.js +19 -0
- package/esm/lib/ast/utils/write-ts-parameters.js +10 -0
- package/esm/lib/config.js +5 -3
- package/esm/lib/file-builder.js +44 -202
- package/esm/lib/generators/file-generator.js +2 -18
- package/esm/lib/generators/index.js +1 -0
- package/esm/lib/generators/models/model-generator.js +149 -210
- package/esm/lib/generators/models/models-generator.js +15 -29
- package/esm/lib/generators/models/models.js +1 -1
- package/esm/lib/generators/services/angular-services/angular-service-generator.js +186 -309
- package/esm/lib/generators/services/angular-services/angular-services-generator.js +170 -78
- package/esm/lib/generators/services/angular-services/models.js +10 -1
- package/esm/lib/generators/services/angular-services/refs.js +20 -0
- package/esm/lib/generators/services/easy-network-stub/easy-network-stub-generator.js +165 -0
- package/esm/lib/generators/services/easy-network-stub/easy-network-stubs-generator.js +69 -0
- package/esm/lib/generators/services/easy-network-stub/index.js +3 -0
- package/esm/lib/generators/services/easy-network-stub/models.js +7 -0
- package/esm/lib/generators/services/easy-network-stub/refs.js +17 -0
- package/esm/lib/generators/services/fetch-clients/fetch-client-generator.js +128 -182
- package/esm/lib/generators/services/fetch-clients/fetch-clients-generator.js +5 -1
- package/esm/lib/generators/services/fetch-clients/refs.js +13 -0
- package/esm/lib/import-collection.js +17 -18
- package/package.json +6 -6
- package/types/lib/ast/_index.d.ts +38 -0
- package/types/lib/ast/common.d.ts +1 -0
- package/types/lib/ast/index.d.ts +1 -0
- package/types/lib/ast/node.d.ts +4 -0
- package/types/lib/ast/nodes/argument.d.ts +17 -0
- package/types/lib/ast/nodes/array-type.d.ts +19 -0
- package/types/lib/ast/nodes/arrow-function.d.ts +29 -0
- package/types/lib/ast/nodes/call.d.ts +20 -0
- package/types/lib/ast/nodes/class.d.ts +41 -0
- package/types/lib/ast/nodes/constructor-parameter.d.ts +19 -0
- package/types/lib/ast/nodes/constructor.d.ts +25 -0
- package/types/lib/ast/nodes/decorator.d.ts +22 -0
- package/types/lib/ast/nodes/doc-tag.d.ts +73 -0
- package/types/lib/ast/nodes/doc.d.ts +28 -0
- package/types/lib/ast/nodes/enum-value.d.ts +21 -0
- package/types/lib/ast/nodes/enum.d.ts +26 -0
- package/types/lib/ast/nodes/export.d.ts +19 -0
- package/types/lib/ast/nodes/function-type.d.ts +23 -0
- package/types/lib/ast/nodes/function.d.ts +35 -0
- package/types/lib/ast/nodes/generic-parameter.d.ts +25 -0
- package/types/lib/ast/nodes/indexer.d.ts +23 -0
- package/types/lib/ast/nodes/interface.d.ts +36 -0
- package/types/lib/ast/nodes/intersection-type.d.ts +17 -0
- package/types/lib/ast/nodes/lookup-type.d.ts +19 -0
- package/types/lib/ast/nodes/method.d.ts +45 -0
- package/types/lib/ast/nodes/object-type.d.ts +20 -0
- package/types/lib/ast/nodes/object.d.ts +19 -0
- package/types/lib/ast/nodes/parameter.d.ts +28 -0
- package/types/lib/ast/nodes/property-accessor.d.ts +53 -0
- package/types/lib/ast/nodes/property.d.ts +84 -0
- package/types/lib/ast/nodes/reference.d.ts +46 -0
- package/types/lib/ast/nodes/string.d.ts +18 -0
- package/types/lib/ast/nodes/tuple.d.ts +17 -0
- package/types/lib/ast/nodes/type-alias.d.ts +27 -0
- package/types/lib/ast/nodes/typeof.d.ts +18 -0
- package/types/lib/ast/nodes/types.d.ts +18 -0
- package/types/lib/ast/nodes/union-type.d.ts +17 -0
- package/types/lib/ast/nodes/variable.d.ts +28 -0
- package/types/lib/ast/references/angular.d.ts +37 -0
- package/types/lib/ast/references/easy-network-stub.d.ts +26 -0
- package/types/lib/ast/references/index.d.ts +3 -0
- package/types/lib/ast/references/rxjs.d.ts +30 -0
- package/types/lib/ast/references/typescript.d.ts +133 -0
- package/types/lib/ast/utils/get-type-script-builder-options.d.ts +3 -0
- package/types/lib/ast/utils/to-ts-node.d.ts +8 -0
- package/types/lib/ast/utils/write-ts-generic-parameters.d.ts +3 -0
- package/types/lib/ast/utils/write-ts-members.d.ts +5 -0
- package/types/lib/ast/utils/write-ts-nodes.d.ts +6 -0
- package/types/lib/ast/utils/write-ts-parameters.d.ts +3 -0
- package/types/lib/common-results.d.ts +4 -0
- package/types/lib/config.d.ts +5 -2
- package/types/lib/file-builder.d.ts +21 -98
- package/types/lib/generators/file-generator.d.ts +3 -7
- package/types/lib/generators/index.d.ts +1 -0
- package/types/lib/generators/models/model-generator.d.ts +18 -23
- package/types/lib/generators/models/models-generator.d.ts +4 -5
- package/types/lib/generators/models/models.d.ts +4 -4
- package/types/lib/generators/services/angular-services/angular-service-generator.d.ts +15 -35
- package/types/lib/generators/services/angular-services/angular-services-generator.d.ts +12 -10
- package/types/lib/generators/services/angular-services/models.d.ts +67 -22
- package/types/lib/generators/services/angular-services/refs.d.ts +34 -0
- package/types/lib/generators/services/easy-network-stub/easy-network-stub-generator.d.ts +32 -0
- package/types/lib/generators/services/easy-network-stub/easy-network-stubs-generator.d.ts +25 -0
- package/types/lib/generators/services/easy-network-stub/index.d.ts +3 -0
- package/types/lib/generators/services/easy-network-stub/models.d.ts +51 -0
- package/types/lib/generators/services/easy-network-stub/refs.d.ts +49 -0
- package/types/lib/generators/services/fetch-clients/fetch-client-generator.d.ts +11 -22
- package/types/lib/generators/services/fetch-clients/models.d.ts +4 -1
- package/types/lib/generators/services/fetch-clients/refs.d.ts +23 -0
- package/types/lib/import-collection.d.ts +13 -5
- package/assets/client/fetch/types.ts +0 -9
- package/assets/service/angular/api-configuration.ts +0 -18
- package/assets/service/angular/base-service.ts +0 -29
- package/assets/service/angular/response-handlers.ts +0 -127
- package/assets/service/angular/strict-http-response.ts +0 -8
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
import { ApiSchema, ApiService, DefaultGenerationProviderConfig, Nullable, OpenApiServicesGenerationProviderContext } from '@goast/core';
|
|
2
|
+
import { getReferenceFactories } from './refs';
|
|
3
|
+
import { ts } from '../../../ast';
|
|
4
|
+
import { TypeScriptExportOutput } from '../../../common-results';
|
|
5
|
+
import { TypeScriptGeneratorConfig } from '../../../config';
|
|
6
|
+
import { TypeScriptFileBuilder } from '../../../file-builder';
|
|
7
|
+
import { TypeScriptModelGeneratorOutput } from '../../models';
|
|
8
|
+
export type TypeScriptEasyNetworkStubsGeneratorConfig = TypeScriptGeneratorConfig & {
|
|
9
|
+
/**
|
|
10
|
+
* The default response types for status codes that are not defined in the OpenAPI specification.
|
|
11
|
+
* @example
|
|
12
|
+
* {
|
|
13
|
+
* 400: schemas =>
|
|
14
|
+
* schemas.find(s => s.name === 'BadRequestResponse')
|
|
15
|
+
* ?? throwExp('BadRequestResponse not found'),
|
|
16
|
+
* 404: 'never',
|
|
17
|
+
* 500: ts.refs.any(),
|
|
18
|
+
* }
|
|
19
|
+
* @default
|
|
20
|
+
* {
|
|
21
|
+
* 401: ts.refs.never(),
|
|
22
|
+
* 403: ts.refs.never(),
|
|
23
|
+
* 500: ts.refs.never(),
|
|
24
|
+
* }
|
|
25
|
+
*/
|
|
26
|
+
defaultStatusCodeResponseTypes: Record<number, Exclude<ts.Type<TypeScriptFileBuilder>, Function> | ((schemas: readonly ApiSchema[]) => ApiSchema)>;
|
|
27
|
+
stubsDirPath: string;
|
|
28
|
+
stubsIndexFilePath: Nullable<string>;
|
|
29
|
+
utilsDirPath: string;
|
|
30
|
+
};
|
|
31
|
+
export declare const defaultTypeScriptEasyNetworkStubsGeneratorConfig: DefaultGenerationProviderConfig<TypeScriptEasyNetworkStubsGeneratorConfig>;
|
|
32
|
+
export type TypeScriptEasyNetworkStubsGeneratorInput = {
|
|
33
|
+
models: {
|
|
34
|
+
[schemaId: string]: TypeScriptModelGeneratorOutput;
|
|
35
|
+
};
|
|
36
|
+
};
|
|
37
|
+
export type TypeScriptEasyNetworkStubsGeneratorOutput = {
|
|
38
|
+
stubs: {
|
|
39
|
+
[serviceId: string]: TypeScriptEasyNetworkStubGeneratorOutput;
|
|
40
|
+
};
|
|
41
|
+
indexFiles: {
|
|
42
|
+
stubs: Nullable<string>;
|
|
43
|
+
};
|
|
44
|
+
};
|
|
45
|
+
export type TypeScriptEasyNetworkStubGeneratorOutput = TypeScriptExportOutput;
|
|
46
|
+
export type TypeScriptEasyNetworkStubsGeneratorContext = OpenApiServicesGenerationProviderContext<TypeScriptEasyNetworkStubsGeneratorInput, TypeScriptEasyNetworkStubsGeneratorOutput, TypeScriptEasyNetworkStubsGeneratorConfig, TypeScriptEasyNetworkStubGeneratorOutput> & {
|
|
47
|
+
refs: ReturnType<typeof getReferenceFactories>;
|
|
48
|
+
};
|
|
49
|
+
export type TypeScriptEasyNetworkStubGeneratorContext = TypeScriptEasyNetworkStubsGeneratorContext & {
|
|
50
|
+
readonly service: ApiService;
|
|
51
|
+
};
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
import { TypeScriptEasyNetworkStubsGeneratorConfig } from './models';
|
|
2
|
+
import { ts } from '../../../ast';
|
|
3
|
+
export declare function getReferenceFactories(options: TypeScriptEasyNetworkStubsGeneratorConfig): {
|
|
4
|
+
easyNetworkStubWrapperOptions: (<TBuilder extends import("@goast/core").SourceBuilder<never>>() => ts.Reference<TBuilder, never>) & {
|
|
5
|
+
refName: string;
|
|
6
|
+
moduleNameOrfilePath: import("@goast/core").Nullable<string>;
|
|
7
|
+
} & {
|
|
8
|
+
moduleNameOrfilePath: string;
|
|
9
|
+
};
|
|
10
|
+
stubRequestItem: (<TBuilder extends import("@goast/core").SourceBuilder<never>>() => ts.Reference<TBuilder, never>) & {
|
|
11
|
+
refName: string;
|
|
12
|
+
moduleNameOrfilePath: import("@goast/core").Nullable<string>;
|
|
13
|
+
} & {
|
|
14
|
+
moduleNameOrfilePath: string;
|
|
15
|
+
};
|
|
16
|
+
stubRequestInfo: (<TBuilder_1 extends import("@goast/core").SourceBuilder<never>>(generics: [ts.Type<TBuilder_1>, ts.Type<TBuilder_1>]) => ts.Reference<TBuilder_1, never>) & {
|
|
17
|
+
refName: string;
|
|
18
|
+
moduleNameOrfilePath: import("@goast/core").Nullable<string>;
|
|
19
|
+
infer: <TBuilder_2 extends import("@goast/core").SourceBuilder<never>>() => ts.Reference<TBuilder_2, never>;
|
|
20
|
+
} & {
|
|
21
|
+
moduleNameOrfilePath: string;
|
|
22
|
+
};
|
|
23
|
+
strictRouteResponseCallback: (<TBuilder_3 extends import("@goast/core").SourceBuilder<never>>(generics: [ts.Type<TBuilder_3>, ts.Type<TBuilder_3>, ts.Type<TBuilder_3>]) => ts.Reference<TBuilder_3, never>) & {
|
|
24
|
+
refName: string;
|
|
25
|
+
moduleNameOrfilePath: import("@goast/core").Nullable<string>;
|
|
26
|
+
infer: <TBuilder_4 extends import("@goast/core").SourceBuilder<never>>() => ts.Reference<TBuilder_4, never>;
|
|
27
|
+
} & {
|
|
28
|
+
moduleNameOrfilePath: string;
|
|
29
|
+
};
|
|
30
|
+
getStubResponder: (<TBuilder_5 extends import("@goast/core").SourceBuilder<never>>(generics: [ts.Type<TBuilder_5>]) => ts.Reference<TBuilder_5, never>) & {
|
|
31
|
+
refName: string;
|
|
32
|
+
moduleNameOrfilePath: import("@goast/core").Nullable<string>;
|
|
33
|
+
infer: <TBuilder_6 extends import("@goast/core").SourceBuilder<never>>() => ts.Reference<TBuilder_6, never>;
|
|
34
|
+
} & {
|
|
35
|
+
moduleNameOrfilePath: string;
|
|
36
|
+
};
|
|
37
|
+
easyNetworkStubWrapper: (<TBuilder extends import("@goast/core").SourceBuilder<never>>() => ts.Reference<TBuilder, never>) & {
|
|
38
|
+
refName: string;
|
|
39
|
+
moduleNameOrfilePath: import("@goast/core").Nullable<string>;
|
|
40
|
+
} & {
|
|
41
|
+
moduleNameOrfilePath: string;
|
|
42
|
+
};
|
|
43
|
+
easyNetworkStubBase: (<TBuilder extends import("@goast/core").SourceBuilder<never>>() => ts.Reference<TBuilder, never>) & {
|
|
44
|
+
refName: string;
|
|
45
|
+
moduleNameOrfilePath: import("@goast/core").Nullable<string>;
|
|
46
|
+
} & {
|
|
47
|
+
moduleNameOrfilePath: string;
|
|
48
|
+
};
|
|
49
|
+
};
|
|
@@ -1,5 +1,6 @@
|
|
|
1
|
-
import { ApiEndpoint, ApiSchema } from '@goast/core';
|
|
1
|
+
import { ApiEndpoint, ApiSchema, AppendValueGroup } from '@goast/core';
|
|
2
2
|
import { TypeScriptFetchClientGeneratorContext, TypeScriptFetchClientGeneratorOutput } from './models';
|
|
3
|
+
import { ts } from '../../../ast';
|
|
3
4
|
import { TypeScriptFileBuilder } from '../../../file-builder';
|
|
4
5
|
import { TypeScriptFileGenerator } from '../../file-generator';
|
|
5
6
|
type Context = TypeScriptFetchClientGeneratorContext;
|
|
@@ -10,27 +11,14 @@ export interface TypeScriptFetchClientGenerator<TOutput extends Output = Output>
|
|
|
10
11
|
}
|
|
11
12
|
export declare class DefaultTypeScriptFetchClientGenerator extends TypeScriptFileGenerator<Context, Output> implements TypeScriptFetchClientGenerator {
|
|
12
13
|
generate(ctx: Context): Output;
|
|
13
|
-
protected
|
|
14
|
-
protected
|
|
15
|
-
protected
|
|
16
|
-
protected
|
|
17
|
-
protected
|
|
18
|
-
protected
|
|
19
|
-
protected
|
|
20
|
-
protected
|
|
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;
|
|
14
|
+
protected getInterfaceFileContent(ctx: Context): AppendValueGroup<Builder>;
|
|
15
|
+
protected getInterface(ctx: Context): ts.Interface<Builder>;
|
|
16
|
+
protected getInterfaceEndpointMethod(ctx: Context, endpoint: ApiEndpoint): ts.Method<Builder>;
|
|
17
|
+
protected getClassFileContent(ctx: Context): AppendValueGroup<Builder>;
|
|
18
|
+
protected getDefaultOptionsConstant(ctx: Context): ts.Variable<Builder>;
|
|
19
|
+
protected getClass(ctx: Context): ts.Class<Builder>;
|
|
20
|
+
protected getServiceMethod(ctx: Context, endpoint: ApiEndpoint): ts.Method<Builder>;
|
|
21
|
+
protected getSchemaType(ctx: Context, schema: ApiSchema | undefined, fallback?: ts.Type<Builder>): ts.Type<Builder>;
|
|
34
22
|
protected shouldGenerateInterface(ctx: Context): boolean;
|
|
35
23
|
protected shouldGenerateClass(ctx: Context): boolean;
|
|
36
24
|
protected getInterfaceName(ctx: Context): string;
|
|
@@ -39,5 +27,6 @@ export declare class DefaultTypeScriptFetchClientGenerator extends TypeScriptFil
|
|
|
39
27
|
protected getInterfaceFilePath(ctx: Context): string;
|
|
40
28
|
protected getClassFilePath(ctx: Context): string;
|
|
41
29
|
protected getUtilPath(ctx: Context, fileName: string): string;
|
|
30
|
+
private getResponseSchema;
|
|
42
31
|
}
|
|
43
32
|
export {};
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { ApiService, DefaultGenerationProviderConfig, OpenApiServicesGenerationProviderContext, StringCasing, StringCasingWithOptions, Nullable } from '@goast/core';
|
|
2
|
+
import { getReferenceFactories } from './refs';
|
|
2
3
|
import { TypeScriptComponentOutput } from '../../../common-results';
|
|
3
4
|
import { TypeScriptGeneratorConfig } from '../../../config';
|
|
4
5
|
import { TypeScriptModelsGeneratorOutput } from '../../models/models';
|
|
@@ -28,7 +29,9 @@ export type TypeScriptFetchClientGeneratorOutput = {
|
|
|
28
29
|
class?: Omit<TypeScriptComponentOutput, 'additionalImports'>;
|
|
29
30
|
interface?: Omit<TypeScriptComponentOutput, 'additionalImports'>;
|
|
30
31
|
};
|
|
31
|
-
export type TypeScriptFetchClientsGeneratorContext = OpenApiServicesGenerationProviderContext<TypeScriptFetchClientsGeneratorInput, TypeScriptFetchClientsGeneratorOutput, TypeScriptFetchClientsGeneratorConfig, TypeScriptFetchClientGeneratorOutput
|
|
32
|
+
export type TypeScriptFetchClientsGeneratorContext = OpenApiServicesGenerationProviderContext<TypeScriptFetchClientsGeneratorInput, TypeScriptFetchClientsGeneratorOutput, TypeScriptFetchClientsGeneratorConfig, TypeScriptFetchClientGeneratorOutput> & {
|
|
33
|
+
refs: ReturnType<typeof getReferenceFactories>;
|
|
34
|
+
};
|
|
32
35
|
export type TypeScriptFetchClientGeneratorContext = TypeScriptFetchClientsGeneratorContext & {
|
|
33
36
|
readonly service: ApiService;
|
|
34
37
|
};
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import { TypeScriptFetchClientsGeneratorConfig } from './models';
|
|
2
|
+
import { ts } from '../../../ast';
|
|
3
|
+
export declare function getReferenceFactories(options: TypeScriptFetchClientsGeneratorConfig): {
|
|
4
|
+
typedResponse: (<TBuilder extends import("@goast/core").SourceBuilder<never>>(generics: [ts.Type<TBuilder>]) => ts.Reference<TBuilder, never>) & {
|
|
5
|
+
refName: string;
|
|
6
|
+
moduleNameOrfilePath: import("@goast/core").Nullable<string>;
|
|
7
|
+
infer: <TBuilder_1 extends import("@goast/core").SourceBuilder<never>>() => ts.Reference<TBuilder_1, never>;
|
|
8
|
+
} & {
|
|
9
|
+
moduleNameOrfilePath: string;
|
|
10
|
+
};
|
|
11
|
+
fetchClientOptions: (<TBuilder_2 extends import("@goast/core").SourceBuilder<never>>() => ts.Reference<TBuilder_2, never>) & {
|
|
12
|
+
refName: string;
|
|
13
|
+
moduleNameOrfilePath: import("@goast/core").Nullable<string>;
|
|
14
|
+
} & {
|
|
15
|
+
moduleNameOrfilePath: string;
|
|
16
|
+
};
|
|
17
|
+
urlBuilder: (<TBuilder_2 extends import("@goast/core").SourceBuilder<never>>() => ts.Reference<TBuilder_2, never>) & {
|
|
18
|
+
refName: string;
|
|
19
|
+
moduleNameOrfilePath: import("@goast/core").Nullable<string>;
|
|
20
|
+
} & {
|
|
21
|
+
moduleNameOrfilePath: string;
|
|
22
|
+
};
|
|
23
|
+
};
|
|
@@ -1,20 +1,28 @@
|
|
|
1
1
|
import { SourceBuilderOptions, StringBuilder } from '@goast/core';
|
|
2
2
|
import { TypeScriptImport, TypeScriptImportKind } from './common-results';
|
|
3
|
-
import { TypeScriptFileBuilder } from './file-builder';
|
|
4
3
|
import { ImportModuleTransformer } from './utils';
|
|
4
|
+
export type ImportExportCollectionOptions = {
|
|
5
|
+
filePath?: string;
|
|
6
|
+
importModuleTransformer: ImportModuleTransformer;
|
|
7
|
+
useSingleQuotes: boolean;
|
|
8
|
+
};
|
|
9
|
+
export declare const defaultImportExportCollectionOptions: ImportExportCollectionOptions;
|
|
5
10
|
export declare class ImportExportCollection {
|
|
6
11
|
private readonly _imports;
|
|
7
12
|
private readonly _exports;
|
|
13
|
+
private readonly _options;
|
|
14
|
+
constructor(options?: Partial<ImportExportCollectionOptions>);
|
|
8
15
|
get hasImports(): boolean;
|
|
9
16
|
get hasExports(): boolean;
|
|
10
17
|
get imports(): TypeScriptImport[];
|
|
11
18
|
addImport(importName: string, fromModule: string): void;
|
|
12
19
|
addExport(exportName: string, fromModule: string): void;
|
|
13
20
|
clear(): void;
|
|
14
|
-
toString(options: Partial<SourceBuilderOptions
|
|
15
|
-
writeTo(builder: StringBuilder
|
|
16
|
-
|
|
17
|
-
|
|
21
|
+
toString(options: Partial<SourceBuilderOptions>): string;
|
|
22
|
+
writeTo(builder: StringBuilder): void;
|
|
23
|
+
protected writeImportsExports(builder: StringBuilder, keyword: 'import' | 'export', data: (readonly [string, TypeScriptImportKind, string[]])[], options: {
|
|
24
|
+
useSingleQuotes: boolean;
|
|
25
|
+
}): void;
|
|
18
26
|
protected sortAndResolve(data: Map<string, Set<string>>, filePath: string | undefined, importModuleTransformer: ImportModuleTransformer): (readonly [string, TypeScriptImportKind, string[]])[];
|
|
19
27
|
protected getImportKind(fromModule: string): TypeScriptImportKind;
|
|
20
28
|
protected resolveModulePath(fromModule: string, filePath: string | undefined, importModuleTransformer: ImportModuleTransformer): [string, TypeScriptImportKind];
|
|
@@ -1,18 +0,0 @@
|
|
|
1
|
-
import { Injectable } from '@angular/core';
|
|
2
|
-
|
|
3
|
-
/**
|
|
4
|
-
* Global configuration
|
|
5
|
-
*/
|
|
6
|
-
@Injectable({
|
|
7
|
-
providedIn: 'root',
|
|
8
|
-
})
|
|
9
|
-
export class ApiConfiguration {
|
|
10
|
-
rootUrl: string = '@ROOT_URL@';
|
|
11
|
-
}
|
|
12
|
-
|
|
13
|
-
/**
|
|
14
|
-
* Parameters for `ApiModule.forRoot()`
|
|
15
|
-
*/
|
|
16
|
-
export interface ApiConfigurationParams {
|
|
17
|
-
rootUrl?: string;
|
|
18
|
-
}
|
|
@@ -1,29 +0,0 @@
|
|
|
1
|
-
import { HttpClient } from '@angular/common/http';
|
|
2
|
-
import { Injectable } from '@angular/core';
|
|
3
|
-
|
|
4
|
-
import { ApiConfiguration } from './api-configuration';
|
|
5
|
-
|
|
6
|
-
/**
|
|
7
|
-
* Base class for services
|
|
8
|
-
*/
|
|
9
|
-
@Injectable()
|
|
10
|
-
export class BaseService {
|
|
11
|
-
constructor(protected config: ApiConfiguration, protected http: HttpClient) {}
|
|
12
|
-
|
|
13
|
-
private _rootUrl: string = '';
|
|
14
|
-
|
|
15
|
-
/**
|
|
16
|
-
* Returns the root url for all operations in this service. If not set directly in this
|
|
17
|
-
* service, will fallback to `ApiConfiguration.rootUrl`.
|
|
18
|
-
*/
|
|
19
|
-
get rootUrl(): string {
|
|
20
|
-
return this._rootUrl || this.config.rootUrl;
|
|
21
|
-
}
|
|
22
|
-
|
|
23
|
-
/**
|
|
24
|
-
* Sets the root URL for API operations in this service.
|
|
25
|
-
*/
|
|
26
|
-
set rootUrl(rootUrl: string) {
|
|
27
|
-
this._rootUrl = rootUrl;
|
|
28
|
-
}
|
|
29
|
-
}
|
|
@@ -1,127 +0,0 @@
|
|
|
1
|
-
import { HttpErrorResponse } from '@angular/common/http';
|
|
2
|
-
|
|
3
|
-
import { StrictHttpResponse } from './strict-http-response';
|
|
4
|
-
|
|
5
|
-
type Response = { status: string; content: unknown };
|
|
6
|
-
type PickRsp<T extends Response, K extends T['status']> = Exclude<T, Exclude<T, { status: K }>>;
|
|
7
|
-
type ExcludeRsp<T extends Response, K extends T['status']> = Exclude<T, { status: K }>;
|
|
8
|
-
type Handeled<T extends string | number | symbol> = { [K in T]: true };
|
|
9
|
-
type SuccessCode = `2${number}`;
|
|
10
|
-
type SuccessCodes<T extends Response> = Exclude<T['status'], Exclude<T['status'], SuccessCode>>;
|
|
11
|
-
type ErrorCode = `${4 | 5}${number}` | 'other';
|
|
12
|
-
type ErrorCodes<T extends Response> = Exclude<T['status'], Exclude<T['status'], ErrorCode>>;
|
|
13
|
-
type RemoveVoid<T> = T extends void ? never : T;
|
|
14
|
-
|
|
15
|
-
export class ResponseHandler<
|
|
16
|
-
I extends Response,
|
|
17
|
-
S extends I,
|
|
18
|
-
E extends Handeled<Exclude<I['status'], S['status']>>,
|
|
19
|
-
O
|
|
20
|
-
> {
|
|
21
|
-
private readonly _dummy?: E;
|
|
22
|
-
private readonly _response: I;
|
|
23
|
-
private _isHandeled = false;
|
|
24
|
-
public result: O | PromiseLike<O> = undefined!;
|
|
25
|
-
|
|
26
|
-
constructor(response: I) {
|
|
27
|
-
this._response = response;
|
|
28
|
-
}
|
|
29
|
-
|
|
30
|
-
public handle<T extends Exclude<S['status'], 'other'>, U = undefined>(
|
|
31
|
-
status: T[] | T,
|
|
32
|
-
handler?: (r: PickRsp<S, T>, status: string) => U | PromiseLike<U>
|
|
33
|
-
) {
|
|
34
|
-
const newThis = this.as<ExcludeRsp<S, T>, Handeled<T | keyof E>, RemoveVoid<U>>();
|
|
35
|
-
const matches = Array.isArray(status)
|
|
36
|
-
? (status as string[]).indexOf(this._response.status.toString()) >= 0
|
|
37
|
-
: this._response.status.toString() === status;
|
|
38
|
-
if (matches && !this._isHandeled) {
|
|
39
|
-
this._isHandeled = true;
|
|
40
|
-
if (handler) {
|
|
41
|
-
newThis.result = handler(this._response as PickRsp<S, T>, this._response.status) as
|
|
42
|
-
| RemoveVoid<U>
|
|
43
|
-
| PromiseLike<RemoveVoid<U>>;
|
|
44
|
-
}
|
|
45
|
-
}
|
|
46
|
-
return newThis;
|
|
47
|
-
}
|
|
48
|
-
|
|
49
|
-
public handleSuccess<T = undefined>(handler?: (r: PickRsp<S, SuccessCode>, status: string) => T | PromiseLike<T>) {
|
|
50
|
-
const newThis = this.as<ExcludeRsp<S, SuccessCode>, Handeled<SuccessCodes<S> | keyof E>, RemoveVoid<T>>();
|
|
51
|
-
const matches = this._response.status.startsWith('2');
|
|
52
|
-
if (matches && !this._isHandeled) {
|
|
53
|
-
this._isHandeled = true;
|
|
54
|
-
if (handler) {
|
|
55
|
-
newThis.result = handler(this._response as PickRsp<S, SuccessCode>, this._response.status) as
|
|
56
|
-
| RemoveVoid<T>
|
|
57
|
-
| PromiseLike<RemoveVoid<T>>;
|
|
58
|
-
}
|
|
59
|
-
}
|
|
60
|
-
return newThis;
|
|
61
|
-
}
|
|
62
|
-
|
|
63
|
-
public handleError<T = undefined>(handler?: (r: PickRsp<S, ErrorCode>, status: string) => T | PromiseLike<T>) {
|
|
64
|
-
const newThis = this.as<ExcludeRsp<S, ErrorCode>, Handeled<ErrorCodes<S> | keyof E>, RemoveVoid<T>>();
|
|
65
|
-
const matches = this._response.status.startsWith('4') || this._response.status.startsWith('5');
|
|
66
|
-
if (matches && !this._isHandeled) {
|
|
67
|
-
this._isHandeled = true;
|
|
68
|
-
if (handler) {
|
|
69
|
-
newThis.result = handler(this._response as PickRsp<S, ErrorCode>, this._response.status) as
|
|
70
|
-
| RemoveVoid<T>
|
|
71
|
-
| PromiseLike<RemoveVoid<T>>;
|
|
72
|
-
}
|
|
73
|
-
}
|
|
74
|
-
return newThis;
|
|
75
|
-
}
|
|
76
|
-
|
|
77
|
-
public throwOnError() {
|
|
78
|
-
const newThis = this.as<ExcludeRsp<S, ErrorCode>, Handeled<ErrorCodes<S> | keyof E>, never>();
|
|
79
|
-
const matches = this._response.status.startsWith('4') || this._response.status.startsWith('5');
|
|
80
|
-
if (matches && !this._isHandeled) {
|
|
81
|
-
throw new UnhandeledResponseError(this._response);
|
|
82
|
-
}
|
|
83
|
-
return newThis;
|
|
84
|
-
}
|
|
85
|
-
|
|
86
|
-
private as<NewS extends I, NewE extends Handeled<Exclude<I['status'], NewS['status']>>, NewO>() {
|
|
87
|
-
return this as unknown as ResponseHandler<I, NewS, NewE, O | NewO>;
|
|
88
|
-
}
|
|
89
|
-
}
|
|
90
|
-
|
|
91
|
-
export class UnhandeledResponseError extends Error {
|
|
92
|
-
public readonly response: Response;
|
|
93
|
-
|
|
94
|
-
constructor(response: Response) {
|
|
95
|
-
super(`The response with status code '${response.status}' was not handeled.`, { cause: response });
|
|
96
|
-
this.response = response;
|
|
97
|
-
}
|
|
98
|
-
}
|
|
99
|
-
|
|
100
|
-
export type ResponseHandlerFn<T extends Response, O> = (
|
|
101
|
-
handler: ResponseHandler<T, T, object, never>
|
|
102
|
-
) => ResponseHandler<T, never, { [K in T['status']]: true }, O>;
|
|
103
|
-
|
|
104
|
-
export function handleResponse<R extends Response, O>(
|
|
105
|
-
response: Promise<StrictHttpResponse<unknown>>,
|
|
106
|
-
handler: ResponseHandlerFn<R, O>
|
|
107
|
-
): Promise<O> {
|
|
108
|
-
return response
|
|
109
|
-
.then(
|
|
110
|
-
(r: StrictHttpResponse<unknown>) =>
|
|
111
|
-
<R>{
|
|
112
|
-
status: r.status.toString(),
|
|
113
|
-
content: r.body,
|
|
114
|
-
}
|
|
115
|
-
)
|
|
116
|
-
.catch((e: HttpErrorResponse) => {
|
|
117
|
-
if (!e.status) throw e;
|
|
118
|
-
return <R>{
|
|
119
|
-
status: e.status.toString(),
|
|
120
|
-
content: e.error,
|
|
121
|
-
};
|
|
122
|
-
})
|
|
123
|
-
.then((r: R) => {
|
|
124
|
-
const h = new ResponseHandler<R, R, object, never>(r);
|
|
125
|
-
return handler(h).result;
|
|
126
|
-
});
|
|
127
|
-
}
|