@goast/typescript 0.0.5 → 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 +121 -181
- 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 +123 -183
- 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 +10 -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 -14
- 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
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import {
|
|
3
|
-
import {
|
|
1
|
+
import { resolve } from 'path';
|
|
2
|
+
import { toCasing, appendValueGroup, builderTemplate as s, } from '@goast/core';
|
|
3
|
+
import { ts } from '../../../ast';
|
|
4
4
|
import { TypeScriptFileBuilder } from '../../../file-builder';
|
|
5
5
|
import { TypeScriptFileGenerator } from '../../file-generator';
|
|
6
6
|
export class DefaultTypeScriptFetchClientGenerator extends TypeScriptFileGenerator {
|
|
@@ -10,205 +10,145 @@ export class DefaultTypeScriptFetchClientGenerator extends TypeScriptFileGenerat
|
|
|
10
10
|
if (this.shouldGenerateInterface(ctx)) {
|
|
11
11
|
const filePath = this.getInterfaceFilePath(ctx);
|
|
12
12
|
const name = this.getInterfaceName(ctx);
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
13
|
+
TypeScriptFileBuilder.generate({
|
|
14
|
+
logName: `interface ${name}`,
|
|
15
|
+
filePath,
|
|
16
|
+
options: ctx.config,
|
|
17
|
+
generator: (b) => b.append(this.getInterfaceFileContent(ctx)),
|
|
18
|
+
});
|
|
18
19
|
result.interface = { filePath, component: name, imports: [{ kind: 'file', name, modulePath: filePath }] };
|
|
19
20
|
}
|
|
20
21
|
if (this.shouldGenerateClass(ctx)) {
|
|
21
22
|
const filePath = this.getClassFilePath(ctx);
|
|
22
23
|
const name = this.getClassName(ctx);
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
this.generateClass(ctx, builder);
|
|
30
|
-
writeFileSync(filePath, builder.toString());
|
|
24
|
+
TypeScriptFileBuilder.generate({
|
|
25
|
+
logName: `class ${name}`,
|
|
26
|
+
filePath,
|
|
27
|
+
options: ctx.config,
|
|
28
|
+
generator: (b) => b.append(this.getClassFileContent(ctx)),
|
|
29
|
+
});
|
|
31
30
|
result.class = { filePath, component: name, imports: [{ kind: 'file', name, modulePath: filePath }] };
|
|
32
31
|
}
|
|
33
32
|
return result;
|
|
34
33
|
}
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
.append((builder) => this.generateInterfaceDocumentation(ctx, builder))
|
|
39
|
-
.ensureCurrentLineEmpty()
|
|
40
|
-
.append((builder) => this.generateInterfaceSignature(ctx, builder))
|
|
41
|
-
.append(' ')
|
|
42
|
-
.parenthesize('{}', (builder) => this.generateInterfaceContent(ctx, builder))
|
|
43
|
-
.appendLine();
|
|
44
|
-
}
|
|
45
|
-
generateInterfaceDocumentation(ctx, builder) {
|
|
46
|
-
if (ctx.service.description) {
|
|
47
|
-
builder.appendLine('/**').appendLineWithLinePrefix(' *', ctx.service.description).appendLine(' */');
|
|
48
|
-
}
|
|
34
|
+
// #region Interface
|
|
35
|
+
getInterfaceFileContent(ctx) {
|
|
36
|
+
return appendValueGroup([this.getInterface(ctx)], '\n');
|
|
49
37
|
}
|
|
50
|
-
|
|
51
|
-
|
|
38
|
+
getInterface(ctx) {
|
|
39
|
+
return ts.interface(this.getInterfaceName(ctx), {
|
|
40
|
+
doc: ts.doc({ description: ctx.service.description }),
|
|
41
|
+
export: true,
|
|
42
|
+
members: ctx.service.endpoints.map((endpoint) => this.getInterfaceEndpointMethod(ctx, endpoint)),
|
|
43
|
+
});
|
|
52
44
|
}
|
|
53
|
-
|
|
54
|
-
|
|
45
|
+
getInterfaceEndpointMethod(ctx, endpoint) {
|
|
46
|
+
var _a, _b;
|
|
47
|
+
const params = endpoint.parameters.filter((x) => x.target === 'path' || x.target === 'query');
|
|
48
|
+
const bodySchema = (_b = (_a = endpoint.requestBody) === null || _a === void 0 ? void 0 : _a.content[0]) === null || _b === void 0 ? void 0 : _b.schema;
|
|
49
|
+
const responseSchema = this.getResponseSchema(ctx, endpoint);
|
|
50
|
+
return ts.method(toCasing(endpoint.name, ctx.config.methodCasing), {
|
|
51
|
+
doc: ts.doc({ description: endpoint.description }),
|
|
52
|
+
parameters: [
|
|
53
|
+
params.length > 0
|
|
54
|
+
? ts.parameter('params', {
|
|
55
|
+
description: 'Parameters for the endpoint.',
|
|
56
|
+
type: ts.objectType({
|
|
57
|
+
members: params.map((x) => ts.property(toCasing(x.name, ctx.config.propertyNameCasing), {
|
|
58
|
+
type: this.getSchemaType(ctx, x.schema),
|
|
59
|
+
optional: !x.required,
|
|
60
|
+
})),
|
|
61
|
+
}),
|
|
62
|
+
})
|
|
63
|
+
: null,
|
|
64
|
+
bodySchema &&
|
|
65
|
+
ts.parameter('body', {
|
|
66
|
+
description: 'Body for the endpoint.',
|
|
67
|
+
type: this.getSchemaType(ctx, bodySchema),
|
|
68
|
+
}),
|
|
69
|
+
],
|
|
70
|
+
returnType: ts.refs.promise([ctx.refs.typedResponse([this.getSchemaType(ctx, responseSchema, ts.refs.void_())])]),
|
|
71
|
+
});
|
|
55
72
|
}
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
.ensureCurrentLineEmpty()
|
|
61
|
-
.append((builder) => this.generateServiceMethodSignature(ctx, builder, endpoint))
|
|
62
|
-
.appendLine(';');
|
|
73
|
+
// #endregion
|
|
74
|
+
// #region Class
|
|
75
|
+
getClassFileContent(ctx) {
|
|
76
|
+
return appendValueGroup([this.getDefaultOptionsConstant(ctx), this.getClass(ctx)], '\n');
|
|
63
77
|
}
|
|
64
|
-
|
|
78
|
+
getDefaultOptionsConstant(ctx) {
|
|
65
79
|
const baseUrl = ctx.service.endpoints
|
|
66
80
|
.map((x) => { var _a, _b, _c; return (_c = (_b = (_a = x.$src) === null || _a === void 0 ? void 0 : _a.document.servers) === null || _b === void 0 ? void 0 : _b.find((x) => x.url)) === null || _c === void 0 ? void 0 : _c.url; })
|
|
67
81
|
.find((x) => !!x);
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
builder
|
|
76
|
-
.ensurePreviousLineEmpty()
|
|
77
|
-
.append((builder) => this.generateClassDocumentation(ctx, builder))
|
|
78
|
-
.ensureCurrentLineEmpty()
|
|
79
|
-
.append((builder) => this.generateClassSignature(ctx, builder))
|
|
80
|
-
.append(' ')
|
|
81
|
-
.parenthesize('{}', (builder) => this.generateClassContent(ctx, builder))
|
|
82
|
-
.appendLine();
|
|
83
|
-
}
|
|
84
|
-
generateClassDocumentation(ctx, builder) {
|
|
85
|
-
if (ctx.service.description) {
|
|
86
|
-
builder.appendLine('/**').appendLineWithLinePrefix(' *', ctx.service.description).appendLine(' */');
|
|
87
|
-
}
|
|
88
|
-
}
|
|
89
|
-
generateClassSignature(ctx, builder) {
|
|
90
|
-
builder
|
|
91
|
-
.append('export class ')
|
|
92
|
-
.append(this.getClassName(ctx))
|
|
93
|
-
.appendIf(this.shouldGenerateInterface(ctx), (builder) => builder
|
|
94
|
-
.addImport(this.getInterfaceName(ctx), this.getInterfaceFilePath(ctx))
|
|
95
|
-
.append(' implements ', this.getInterfaceName(ctx)));
|
|
96
|
-
}
|
|
97
|
-
generateClassContent(ctx, builder) {
|
|
98
|
-
builder
|
|
99
|
-
.append((builder) => this.generateClassFields(ctx, builder))
|
|
100
|
-
.append((builder) => this.generateClassConstructor(ctx, builder))
|
|
101
|
-
.forEach(ctx.service.endpoints, (builder, endpoint) => this.generateClassServiceMethod(ctx, builder, endpoint));
|
|
102
|
-
}
|
|
103
|
-
generateClassFields(ctx, builder) {
|
|
104
|
-
builder.ensureCurrentLineEmpty().appendLine('public options: FetchClientOptions;');
|
|
105
|
-
}
|
|
106
|
-
generateClassConstructor(ctx, builder) {
|
|
107
|
-
builder
|
|
108
|
-
.ensurePreviousLineEmpty()
|
|
109
|
-
.append('constructor(options?: Partial<FetchClientOptions>)')
|
|
110
|
-
.parenthesize('{}', (builder) => this.generateClassConstructorContent(ctx, builder), {
|
|
111
|
-
indent: true,
|
|
112
|
-
multiline: true,
|
|
82
|
+
return ts.variable(this.getDefaultOptionsConstantName(ctx), {
|
|
83
|
+
export: true,
|
|
84
|
+
readonly: true,
|
|
85
|
+
type: ctx.refs.fetchClientOptions(),
|
|
86
|
+
value: ts.object({
|
|
87
|
+
members: [baseUrl && ts.property('baseUrl', { value: ts.string(baseUrl) })],
|
|
88
|
+
}),
|
|
113
89
|
});
|
|
114
90
|
}
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
.appendLine(`@see ${getEndpointUrlPreview(endpoint)}`)
|
|
140
|
-
.appendLineIf(hasParams, `@param params Parameters for the endpoint.`)
|
|
141
|
-
.append(`@returns The response of the call to the endpoint.`);
|
|
91
|
+
getClass(ctx) {
|
|
92
|
+
return ts.class(this.getClassName(ctx), {
|
|
93
|
+
doc: ts.doc({ description: ctx.service.description }),
|
|
94
|
+
export: true,
|
|
95
|
+
implements: this.shouldGenerateInterface(ctx)
|
|
96
|
+
? [ts.reference(this.getInterfaceName(ctx), this.getInterfaceFilePath(ctx))]
|
|
97
|
+
: undefined,
|
|
98
|
+
members: [
|
|
99
|
+
ts.property('options', {
|
|
100
|
+
doc: ts.doc({ description: 'Options for the fetch client.' }),
|
|
101
|
+
accessModifier: 'public',
|
|
102
|
+
type: ctx.refs.fetchClientOptions(),
|
|
103
|
+
}),
|
|
104
|
+
ts.constructor({
|
|
105
|
+
parameters: [
|
|
106
|
+
ts.constructorParameter('options', {
|
|
107
|
+
type: ts.refs.partial([ctx.refs.fetchClientOptions()]),
|
|
108
|
+
optional: true,
|
|
109
|
+
}),
|
|
110
|
+
],
|
|
111
|
+
body: appendValueGroup([s `this.options = { ...${this.getDefaultOptionsConstantName(ctx)}, ...options };`], '\n'),
|
|
112
|
+
}),
|
|
113
|
+
...ctx.service.endpoints.map((endpoint) => this.getServiceMethod(ctx, endpoint)),
|
|
114
|
+
],
|
|
142
115
|
});
|
|
143
116
|
}
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
.
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
.
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
builder
|
|
180
|
-
.addImport('UrlBuilder', this.getUtilPath(ctx, 'url-builder.ts'))
|
|
181
|
-
.appendLine('const url = new UrlBuilder(this.options.baseUrl)')
|
|
182
|
-
.indent((builder) => builder
|
|
183
|
-
.appendLine(`.withPath(${this.toStringLiteral(ctx, endpoint.path)})`)
|
|
184
|
-
.forEach(endpoint.parameters.filter((x) => x.target === 'path' || x.target === 'query'), (builder, parameter) => builder
|
|
185
|
-
.appendIf(parameter.target === 'path', `.withPathParam`)
|
|
186
|
-
.appendIf(parameter.target === 'query', `.withQueryParam`)
|
|
187
|
-
.parenthesize('()', `${this.toStringLiteral(ctx, parameter.name)}, params.${this.toPropertyName(ctx, parameter.name)}`)
|
|
188
|
-
.appendLine())
|
|
189
|
-
.appendLine('.build();'))
|
|
190
|
-
.append('const response = (this.options.fetch ?? fetch)')
|
|
191
|
-
.parenthesize('()', (builder) => builder.append('url, ').parenthesize('{}', (builder) => {
|
|
192
|
-
var _a, _b;
|
|
193
|
-
return builder
|
|
194
|
-
.appendLine('method: ', this.toStringLiteral(ctx, toCasing(endpoint.method, 'all-upper')), ',')
|
|
195
|
-
.appendLine('headers: this.options.headers,')
|
|
196
|
-
.appendLineIf(!!((_b = (_a = endpoint.requestBody) === null || _a === void 0 ? void 0 : _a.content[0]) === null || _b === void 0 ? void 0 : _b.schema), 'body: JSON.stringify(body),');
|
|
197
|
-
}, { indent: true, multiline: true }), { indent: false })
|
|
198
|
-
.appendLine(';')
|
|
199
|
-
.appendLine("Object.defineProperty(response, 'isVoidResponse', { value: ", this.getResponseSchema(ctx, endpoint) ? 'false' : 'true', ' });')
|
|
200
|
-
.appendLine('return response as unknown as ', (builder) => this.generateServiceMethodReturnValue(ctx, builder, endpoint), ';');
|
|
201
|
-
}
|
|
202
|
-
getTypeName(ctx, builder, schemaId, fallback) {
|
|
203
|
-
if (!schemaId) {
|
|
204
|
-
return fallback ? fallback : this.getAnyType(ctx);
|
|
205
|
-
}
|
|
206
|
-
const modelInfo = ctx.input.models[schemaId];
|
|
207
|
-
if (!modelInfo) {
|
|
208
|
-
return this.getAnyType(ctx);
|
|
209
|
-
}
|
|
210
|
-
modelInfo.imports.forEach((x) => builder.addImport(x.name, x.modulePath));
|
|
211
|
-
return modelInfo.component;
|
|
117
|
+
getServiceMethod(ctx, endpoint) {
|
|
118
|
+
var _a, _b;
|
|
119
|
+
const method = this.getInterfaceEndpointMethod(ctx, endpoint);
|
|
120
|
+
method.accessModifier = 'public';
|
|
121
|
+
method.body = appendValueGroup([
|
|
122
|
+
s `const url = new ${ctx.refs.urlBuilder()}(this.options.baseUrl)${s.indent `
|
|
123
|
+
.withPath(${ts.string(endpoint.path)})${(b) => b.forEach(endpoint.parameters, (b, p) => {
|
|
124
|
+
switch (p.target) {
|
|
125
|
+
case 'path':
|
|
126
|
+
b.append(s `\n.withPathParam(${ts.string(p.name)}, params.${toCasing(p.name, ctx.config.paramNameCasing)})`);
|
|
127
|
+
break;
|
|
128
|
+
case 'query':
|
|
129
|
+
b.append(s `\n.withQueryParam(${ts.string(p.name)}, params.${toCasing(p.name, ctx.config.paramNameCasing)})`);
|
|
130
|
+
break;
|
|
131
|
+
}
|
|
132
|
+
})}
|
|
133
|
+
.build();`}`,
|
|
134
|
+
s `const response = (this.options.fetch ?? fetch)(url, ${ts.object({
|
|
135
|
+
members: [
|
|
136
|
+
ts.property('method', { value: ts.string(toCasing(endpoint.method, 'all-upper')) }),
|
|
137
|
+
ts.property('headers', { value: 'this.options.headers' }),
|
|
138
|
+
((_b = (_a = endpoint.requestBody) === null || _a === void 0 ? void 0 : _a.content[0]) === null || _b === void 0 ? void 0 : _b.schema) ? ts.property('body', { value: 'JSON.stringify(body)' }) : null,
|
|
139
|
+
],
|
|
140
|
+
})});`,
|
|
141
|
+
s `Object.defineProperty(response, 'isVoidResponse', { value: ${this.getResponseSchema(ctx, endpoint) ? 'false' : 'true'} });`,
|
|
142
|
+
s `return response as unknown as ${method.returnType};`,
|
|
143
|
+
], '\n');
|
|
144
|
+
return method;
|
|
145
|
+
}
|
|
146
|
+
// #endregion
|
|
147
|
+
getSchemaType(ctx, schema, fallback) {
|
|
148
|
+
const output = schema && ctx.input.models[schema.id];
|
|
149
|
+
if (!output)
|
|
150
|
+
return fallback !== null && fallback !== void 0 ? fallback : this.getAnyType(ctx);
|
|
151
|
+
return (b) => b.appendModelUsage(output);
|
|
212
152
|
}
|
|
213
153
|
shouldGenerateInterface(ctx) {
|
|
214
154
|
return ctx.config.clientFileKind === 'interface' || ctx.config.clientFileKind === 'class-and-interface';
|
|
@@ -223,7 +163,7 @@ export class DefaultTypeScriptFetchClientGenerator extends TypeScriptFileGenerat
|
|
|
223
163
|
return toCasing(ctx.service.name, ctx.config.classNameCasing);
|
|
224
164
|
}
|
|
225
165
|
getDefaultOptionsConstantName(ctx) {
|
|
226
|
-
return toCasing(this.getClassName(ctx) + '-default-options', ctx.config.
|
|
166
|
+
return toCasing(this.getClassName(ctx) + '-default-options', ctx.config.constantNameCasing);
|
|
227
167
|
}
|
|
228
168
|
getInterfaceFilePath(ctx) {
|
|
229
169
|
var _a, _b;
|
|
@@ -3,6 +3,7 @@ import { ensureDirSync, writeFileSync, copyFileSync, readdirSync } from 'fs-extr
|
|
|
3
3
|
import { OpenApiServicesGenerationProviderBase, Factory } from '@goast/core';
|
|
4
4
|
import { DefaultTypeScriptFetchClientGenerator } from './fetch-client-generator';
|
|
5
5
|
import { defaultTypeScriptFetchClientsGeneratorConfig, } from './models';
|
|
6
|
+
import { getReferenceFactories } from './refs';
|
|
6
7
|
import { TypeScriptFileBuilder } from '../../../file-builder';
|
|
7
8
|
import { ImportExportCollection } from '../../../import-collection';
|
|
8
9
|
export class TypeScriptClientsGenerator extends OpenApiServicesGenerationProviderBase {
|
|
@@ -19,7 +20,10 @@ export class TypeScriptClientsGenerator extends OpenApiServicesGenerationProvide
|
|
|
19
20
|
};
|
|
20
21
|
}
|
|
21
22
|
buildContext(context, config) {
|
|
22
|
-
|
|
23
|
+
const providerContext = this.getProviderContext(context, config, defaultTypeScriptFetchClientsGeneratorConfig);
|
|
24
|
+
return Object.assign(providerContext, {
|
|
25
|
+
refs: getReferenceFactories(providerContext.config),
|
|
26
|
+
});
|
|
23
27
|
}
|
|
24
28
|
onGenerate(ctx) {
|
|
25
29
|
this.copyUtilsFiles(ctx);
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import { resolve } from 'path';
|
|
2
|
+
import { ts } from '../../../ast';
|
|
3
|
+
// See packages/typescript/assets/client/fetch for reference
|
|
4
|
+
export function getReferenceFactories(options) {
|
|
5
|
+
const utilsDirPath = resolve(options.outputDir, options.utilsDirPath);
|
|
6
|
+
const fetchClientUtilsPath = resolve(utilsDirPath, 'fetch-client.utils.ts');
|
|
7
|
+
return {
|
|
8
|
+
// fetch-client.utils.ts
|
|
9
|
+
typedResponse: ts.reference.genericFactory('TypedResponse', fetchClientUtilsPath),
|
|
10
|
+
fetchClientOptions: ts.reference.factory('FetchClientOptions', fetchClientUtilsPath),
|
|
11
|
+
urlBuilder: ts.reference.factory('UrlBuilder', fetchClientUtilsPath),
|
|
12
|
+
};
|
|
13
|
+
}
|
|
@@ -1,10 +1,16 @@
|
|
|
1
1
|
import { extname } from 'path';
|
|
2
2
|
import { StringBuilder } from '@goast/core';
|
|
3
|
+
import { defaultTypeScriptGeneratorConfig } from './config';
|
|
3
4
|
import { getModulePathRelativeToFile } from './utils';
|
|
5
|
+
export const defaultImportExportCollectionOptions = {
|
|
6
|
+
importModuleTransformer: defaultTypeScriptGeneratorConfig.importModuleTransformer,
|
|
7
|
+
useSingleQuotes: defaultTypeScriptGeneratorConfig.useSingleQuotes,
|
|
8
|
+
};
|
|
4
9
|
export class ImportExportCollection {
|
|
5
|
-
constructor() {
|
|
10
|
+
constructor(options) {
|
|
6
11
|
this._imports = new Map();
|
|
7
12
|
this._exports = new Map();
|
|
13
|
+
this._options = Object.assign(Object.assign({}, defaultImportExportCollectionOptions), options);
|
|
8
14
|
}
|
|
9
15
|
get hasImports() {
|
|
10
16
|
return this._imports.size > 0;
|
|
@@ -43,34 +49,26 @@ export class ImportExportCollection {
|
|
|
43
49
|
this._imports.clear();
|
|
44
50
|
this._exports.clear();
|
|
45
51
|
}
|
|
46
|
-
toString(options
|
|
52
|
+
toString(options) {
|
|
47
53
|
const builder = new StringBuilder(options);
|
|
48
|
-
this.writeTo(builder
|
|
54
|
+
this.writeTo(builder);
|
|
49
55
|
return builder.toString();
|
|
50
56
|
}
|
|
51
|
-
writeTo(builder
|
|
52
|
-
|
|
53
|
-
filePath = builder.filePath;
|
|
54
|
-
}
|
|
55
|
-
if (!importModuleTransformer) {
|
|
56
|
-
importModuleTransformer = builder.options.importModuleTransformer;
|
|
57
|
-
if (!importModuleTransformer) {
|
|
58
|
-
throw new Error('importModuleTransformer is required');
|
|
59
|
-
}
|
|
60
|
-
}
|
|
57
|
+
writeTo(builder) {
|
|
58
|
+
const { filePath, importModuleTransformer, useSingleQuotes } = this._options;
|
|
61
59
|
if (this._imports.size > 0) {
|
|
62
60
|
const sortedImports = this.sortAndResolve(this._imports, filePath, importModuleTransformer);
|
|
63
|
-
this.writeImportsExports(builder, 'import', sortedImports);
|
|
61
|
+
this.writeImportsExports(builder, 'import', sortedImports, { useSingleQuotes });
|
|
64
62
|
}
|
|
65
63
|
if (this._imports.size > 0 && this._exports.size > 0) {
|
|
66
64
|
builder.appendLine();
|
|
67
65
|
}
|
|
68
66
|
if (this._exports.size > 0) {
|
|
69
67
|
const sortedExports = this.sortAndResolve(this._exports, filePath, importModuleTransformer);
|
|
70
|
-
this.writeImportsExports(builder, 'export', sortedExports);
|
|
68
|
+
this.writeImportsExports(builder, 'export', sortedExports, { useSingleQuotes });
|
|
71
69
|
}
|
|
72
70
|
}
|
|
73
|
-
writeImportsExports(builder, keyword, data) {
|
|
71
|
+
writeImportsExports(builder, keyword, data, options) {
|
|
74
72
|
const moduleData = [];
|
|
75
73
|
const fileData = [];
|
|
76
74
|
for (const x of data) {
|
|
@@ -81,14 +79,15 @@ export class ImportExportCollection {
|
|
|
81
79
|
fileData.push(x);
|
|
82
80
|
}
|
|
83
81
|
}
|
|
82
|
+
const quote = options.useSingleQuotes ? "'" : '"';
|
|
84
83
|
for (const [fromModule, _, names] of moduleData) {
|
|
85
|
-
builder.appendLine(`${keyword} { ${names.join(', ')} } from
|
|
84
|
+
builder.appendLine(`${keyword} { ${names.join(', ')} } from ${quote}${fromModule}${quote};`);
|
|
86
85
|
}
|
|
87
86
|
if (moduleData.length > 0 && fileData.length > 0) {
|
|
88
87
|
builder.appendLine();
|
|
89
88
|
}
|
|
90
89
|
for (const [fromModule, _, names] of fileData) {
|
|
91
|
-
builder.appendLine(`${keyword} { ${names.join(', ')} } from
|
|
90
|
+
builder.appendLine(`${keyword} { ${names.join(', ')} } from ${quote}${fromModule}${quote};`);
|
|
92
91
|
}
|
|
93
92
|
}
|
|
94
93
|
sortAndResolve(data, filePath, importModuleTransformer) {
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@goast/typescript",
|
|
3
|
-
"version": "0.0
|
|
3
|
+
"version": "0.2.0",
|
|
4
4
|
"repository": "https://github.com/MaSch0212/goast.git",
|
|
5
5
|
"author": {
|
|
6
6
|
"name": "Marc Schmidt (MaSch0212)",
|
|
@@ -9,11 +9,11 @@
|
|
|
9
9
|
"license": "MIT",
|
|
10
10
|
"type": "module",
|
|
11
11
|
"dependencies": {
|
|
12
|
-
"fs-extra": "^11.
|
|
13
|
-
"node-fetch": "^2.
|
|
14
|
-
"yaml": "^2.
|
|
15
|
-
"@goast/core": "0.
|
|
16
|
-
"tslib": "
|
|
12
|
+
"fs-extra": "^11.2.0",
|
|
13
|
+
"node-fetch": "^2.7.0",
|
|
14
|
+
"yaml": "^2.4.1",
|
|
15
|
+
"@goast/core": "0.2.0",
|
|
16
|
+
"tslib": "2.6.2"
|
|
17
17
|
},
|
|
18
18
|
"module": "./esm/index.js",
|
|
19
19
|
"main": "./cjs/index.js",
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
export { TsAccessModifier as AccessModifier } from './common';
|
|
2
|
+
export { TsNode as Node } from './node';
|
|
3
|
+
export { TsArgument as Argument, tsArgument as argument } from './nodes/argument';
|
|
4
|
+
export { TsArrayType as ArrayType, tsArrayType as arrayType } from './nodes/array-type';
|
|
5
|
+
export { TsArrowFunction as ArrowFunction, tsArrowFunction as arrowFunction } from './nodes/arrow-function';
|
|
6
|
+
export { TsCall as Call, tsCall as call } from './nodes/call';
|
|
7
|
+
export { TsClass as Class, tsClass as class } from './nodes/class';
|
|
8
|
+
export { TsConstructor as Constructor, tsConstructor as constructor } from './nodes/constructor';
|
|
9
|
+
export { TsConstructorParameter as ConstructorParameter, tsConstructorParameter as constructorParameter, } from './nodes/constructor-parameter';
|
|
10
|
+
export { TsDecorator as Decorator, tsDecorator as decorator } from './nodes/decorator';
|
|
11
|
+
export { TsDoc as Doc, tsDoc as doc } from './nodes/doc';
|
|
12
|
+
export { TsDocTag as DocTag, tsDocTag as docTag } from './nodes/doc-tag';
|
|
13
|
+
export { TsEnum as Enum, tsEnum as enum } from './nodes/enum';
|
|
14
|
+
export { TsEnumValue as EnumValue, tsEnumValue as enumValue } from './nodes/enum-value';
|
|
15
|
+
export { TsExport as Export, tsExport as export } from './nodes/export';
|
|
16
|
+
export { TsFunction as Function, tsFunction as function } from './nodes/function';
|
|
17
|
+
export { TsFunctionType as FunctionType, tsFunctionType as functionType } from './nodes/function-type';
|
|
18
|
+
export { TsGenericParameter as GenericParameter, tsGenericParameter as genericParameter, } from './nodes/generic-parameter';
|
|
19
|
+
export { TsIndexer as Indexer, tsIndexer as indexer } from './nodes/indexer';
|
|
20
|
+
export { TsInterface as Interface, tsInterface as interface } from './nodes/interface';
|
|
21
|
+
export { TsIntersectionType as IntersectionType, tsIntersectionType as intersectionType, } from './nodes/intersection-type';
|
|
22
|
+
export { TsLookupType as LookupType, tsLookupType as lookupType } from './nodes/lookup-type';
|
|
23
|
+
export { TsMethod as Method, tsMethod as method } from './nodes/method';
|
|
24
|
+
export { TsObject as Object, tsObject as object } from './nodes/object';
|
|
25
|
+
export { TsObjectType as ObjectType, tsObjectType as objectType } from './nodes/object-type';
|
|
26
|
+
export { TsParameter as Parameter, tsParameter as parameter } from './nodes/parameter';
|
|
27
|
+
export { TsProperty as Property, tsProperty as property } from './nodes/property';
|
|
28
|
+
export { TsReference as Reference, tsReference as reference } from './nodes/reference';
|
|
29
|
+
export { TsString as String, tsString as string } from './nodes/string';
|
|
30
|
+
export { TsTuple as Tuple, tsTuple as tuple } from './nodes/tuple';
|
|
31
|
+
export { TsTypeAlias as TypeAlias, tsTypeAlias as typeAlias } from './nodes/type-alias';
|
|
32
|
+
export { TsType as Type, TsValue as Value } from './nodes/types';
|
|
33
|
+
export { TsUnionType as UnionType, tsUnionType as unionType } from './nodes/union-type';
|
|
34
|
+
export { TsVariable as Variable, tsVariable as variable } from './nodes/variable';
|
|
35
|
+
export { TsTypeof as Typeof, tsTypeof as typeof } from './nodes/typeof';
|
|
36
|
+
export * as refs from './references';
|
|
37
|
+
export { getTypeScriptBuilderOptions as getBuilderOptions } from './utils/get-type-script-builder-options';
|
|
38
|
+
export { toTsNode as toNode } from './utils/to-ts-node';
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export type TsAccessModifier = 'public' | 'protected' | 'private';
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export * as ts from './_index';
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
import { AstNode, AstNodeOptions, SourceBuilder } from '@goast/core';
|
|
2
|
+
export declare abstract class TsNode<TBuilder extends SourceBuilder, TInjects extends string = never> extends AstNode<TBuilder, TInjects> {
|
|
3
|
+
constructor(options: AstNodeOptions<typeof AstNode<TBuilder, TInjects>>);
|
|
4
|
+
}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import { AstNodeOptions, Prettify, SourceBuilder } from '@goast/core';
|
|
2
|
+
import { TsValue } from './types';
|
|
3
|
+
import { TsNode } from '../node';
|
|
4
|
+
import { writeTsParameters } from '../utils/write-ts-parameters';
|
|
5
|
+
type Injects = never;
|
|
6
|
+
type Options<TBuilder extends SourceBuilder, TInjects extends string = never> = AstNodeOptions<typeof TsNode<TBuilder, TInjects | Injects>, {
|
|
7
|
+
value: TsValue<TBuilder>;
|
|
8
|
+
}>;
|
|
9
|
+
export declare class TsArgument<TBuilder extends SourceBuilder, TInjects extends string = never> extends TsNode<TBuilder, TInjects | Injects> {
|
|
10
|
+
value: TsValue<TBuilder>;
|
|
11
|
+
constructor(options: Options<TBuilder, TInjects>);
|
|
12
|
+
protected onWrite(builder: TBuilder): void;
|
|
13
|
+
}
|
|
14
|
+
export declare const tsArgument: (<TBuilder extends SourceBuilder<never>>(value: Options<TBuilder>['value'], options?: Prettify<Omit<Options<TBuilder>, 'value'>>) => TsArgument<TBuilder, never>) & {
|
|
15
|
+
write: typeof writeTsParameters;
|
|
16
|
+
};
|
|
17
|
+
export {};
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import { AstNodeOptions, Nullable, Prettify, SourceBuilder } from '@goast/core';
|
|
2
|
+
import { TsType } from './types';
|
|
3
|
+
import { TsNode } from '../node';
|
|
4
|
+
import { writeTsNodes } from '../utils/write-ts-nodes';
|
|
5
|
+
type Injects = 'type';
|
|
6
|
+
type Options<TBuilder extends SourceBuilder, TInjects extends string = never> = AstNodeOptions<typeof TsNode<TBuilder, TInjects | Injects>, {
|
|
7
|
+
readonly?: Nullable<boolean>;
|
|
8
|
+
type: TsType<TBuilder>;
|
|
9
|
+
}>;
|
|
10
|
+
export declare class TsArrayType<TBuilder extends SourceBuilder, TInjects extends string = never> extends TsNode<TBuilder, TInjects | Injects> {
|
|
11
|
+
readonly: boolean;
|
|
12
|
+
type: TsType<TBuilder>;
|
|
13
|
+
constructor(options: Options<TBuilder, TInjects>);
|
|
14
|
+
protected onWrite(builder: TBuilder): void;
|
|
15
|
+
}
|
|
16
|
+
export declare const tsArrayType: (<TBuilder extends SourceBuilder<never>>(type: Options<TBuilder>['type'], options?: Prettify<Omit<Options<TBuilder>, 'type'>>) => TsArrayType<TBuilder, never>) & {
|
|
17
|
+
write: typeof writeTsNodes;
|
|
18
|
+
};
|
|
19
|
+
export {};
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import { AppendValue, AstNodeOptions, BasicAppendValue, Nullable, SourceBuilder } from '@goast/core';
|
|
2
|
+
import { TsGenericParameter } from './generic-parameter';
|
|
3
|
+
import { TsParameter } from './parameter';
|
|
4
|
+
import { TsType } from './types';
|
|
5
|
+
import { TsNode } from '../node';
|
|
6
|
+
import { writeTsNodes } from '../utils/write-ts-nodes';
|
|
7
|
+
type Injects = 'generics' | 'params' | 'returnType' | 'body';
|
|
8
|
+
type Options<TBuilder extends SourceBuilder, TInjects extends string = never> = AstNodeOptions<typeof TsNode<TBuilder, TInjects | Injects>, {
|
|
9
|
+
async?: Nullable<boolean>;
|
|
10
|
+
generics?: Nullable<Nullable<TsGenericParameter<TBuilder> | BasicAppendValue<TBuilder>>[]>;
|
|
11
|
+
parameters?: Nullable<Nullable<TsParameter<TBuilder> | BasicAppendValue<TBuilder>>[]>;
|
|
12
|
+
returnType?: Nullable<TsType<TBuilder>>;
|
|
13
|
+
singleExpression?: Nullable<boolean>;
|
|
14
|
+
body?: Nullable<AppendValue<TBuilder>>;
|
|
15
|
+
}>;
|
|
16
|
+
export declare class TsArrowFunction<TBuilder extends SourceBuilder, TInjects extends string = never> extends TsNode<TBuilder, TInjects | Injects> {
|
|
17
|
+
async: boolean;
|
|
18
|
+
generics: (TsGenericParameter<TBuilder> | BasicAppendValue<TBuilder>)[];
|
|
19
|
+
parameters: (TsParameter<TBuilder> | BasicAppendValue<TBuilder>)[];
|
|
20
|
+
returnType: TsType<TBuilder> | null;
|
|
21
|
+
singleExpression: boolean;
|
|
22
|
+
body: AppendValue<TBuilder> | null;
|
|
23
|
+
constructor(options: Options<TBuilder, TInjects>);
|
|
24
|
+
protected onWrite(builder: TBuilder): void;
|
|
25
|
+
}
|
|
26
|
+
export declare const tsArrowFunction: (<TBuilder extends SourceBuilder<never>>(options?: Options<TBuilder>) => TsArrowFunction<TBuilder, never>) & {
|
|
27
|
+
write: typeof writeTsNodes;
|
|
28
|
+
};
|
|
29
|
+
export {};
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import { SourceBuilder, AstNodeOptions, Nullable, ArrayItem, Prettify } from '@goast/core';
|
|
2
|
+
import { TsArgument } from './argument';
|
|
3
|
+
import { TsType, TsValue } from './types';
|
|
4
|
+
import { TsNode } from '../node';
|
|
5
|
+
import { writeTsNodes } from '../utils/write-ts-nodes';
|
|
6
|
+
type Injects = never;
|
|
7
|
+
type Options<TBuilder extends SourceBuilder, TInjects extends string = never> = AstNodeOptions<typeof TsNode<TBuilder, TInjects | Injects>, {
|
|
8
|
+
path: Nullable<TsType<TBuilder> | TsValue<TBuilder>>[];
|
|
9
|
+
arguments?: Nullable<Nullable<TsArgument<TBuilder> | TsValue<TBuilder>>[]>;
|
|
10
|
+
}>;
|
|
11
|
+
export declare class TsCall<TBuilder extends SourceBuilder, TInjects extends string = never> extends TsNode<TBuilder, TInjects | Injects> {
|
|
12
|
+
path: (TsType<TBuilder> | TsValue<TBuilder>)[];
|
|
13
|
+
arguments: (TsArgument<TBuilder> | TsValue<TBuilder>)[] | null;
|
|
14
|
+
constructor(options: Options<TBuilder, TInjects>);
|
|
15
|
+
protected onWrite(builder: TBuilder): void;
|
|
16
|
+
}
|
|
17
|
+
export declare const tsCall: (<TBuilder extends SourceBuilder<never>>(path: Options<TBuilder>['path'] | ArrayItem<Options<TBuilder>['path']>, args?: Options<TBuilder>['arguments'], options?: Prettify<Omit<Options<TBuilder>, 'path' | 'arguments'>>) => TsCall<TBuilder, never>) & {
|
|
18
|
+
write: typeof writeTsNodes;
|
|
19
|
+
};
|
|
20
|
+
export {};
|