@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
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
import { notNullish } from '@goast/core';
|
|
2
|
+
import { tsDecorator } from './decorator';
|
|
3
|
+
import { tsDoc } from './doc';
|
|
4
|
+
import { tsGenericParameter } from './generic-parameter';
|
|
5
|
+
import { TsNode } from '../node';
|
|
6
|
+
import { writeTsMembers } from '../utils/write-ts-members';
|
|
7
|
+
import { writeTsNode, writeTsNodes } from '../utils/write-ts-nodes';
|
|
8
|
+
export class TsClass extends TsNode {
|
|
9
|
+
constructor(options) {
|
|
10
|
+
var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m;
|
|
11
|
+
super(options);
|
|
12
|
+
this.doc = (_a = options.doc) !== null && _a !== void 0 ? _a : null;
|
|
13
|
+
this.decorators = (_c = (_b = options.decorators) === null || _b === void 0 ? void 0 : _b.filter(notNullish)) !== null && _c !== void 0 ? _c : [];
|
|
14
|
+
this.export = (_d = options.export) !== null && _d !== void 0 ? _d : false;
|
|
15
|
+
this.abstract = (_e = options.abstract) !== null && _e !== void 0 ? _e : false;
|
|
16
|
+
this.name = options.name;
|
|
17
|
+
this.generics = (_g = (_f = options.generics) === null || _f === void 0 ? void 0 : _f.filter(notNullish)) !== null && _g !== void 0 ? _g : [];
|
|
18
|
+
this.extends = (_h = options.extends) !== null && _h !== void 0 ? _h : null;
|
|
19
|
+
this.implements = (_k = (_j = options.implements) === null || _j === void 0 ? void 0 : _j.filter(notNullish)) !== null && _k !== void 0 ? _k : [];
|
|
20
|
+
this.members = (_m = (_l = options.members) === null || _l === void 0 ? void 0 : _l.filter(notNullish)) !== null && _m !== void 0 ? _m : [];
|
|
21
|
+
}
|
|
22
|
+
onWrite(builder) {
|
|
23
|
+
builder.append(this.inject.beforeDoc);
|
|
24
|
+
tsDoc.write(builder, tsDoc.get(this.doc, { generics: this.generics }));
|
|
25
|
+
builder.append(this.inject.afterDoc);
|
|
26
|
+
builder.append(this.inject.beforeDecorators);
|
|
27
|
+
tsDecorator.write(builder, this.decorators, { multiline: true });
|
|
28
|
+
builder.append(this.inject.afterDecorators);
|
|
29
|
+
builder.append(this.inject.beforeModifiers);
|
|
30
|
+
if (this.export)
|
|
31
|
+
builder.append('export ');
|
|
32
|
+
if (this.abstract)
|
|
33
|
+
builder.append('abstract ');
|
|
34
|
+
builder.append(this.inject.afterModifiers);
|
|
35
|
+
builder.append('class ');
|
|
36
|
+
builder.append(this.inject.beforeName, this.name, this.inject.afterName);
|
|
37
|
+
builder.append(this.inject.beforeGenerics);
|
|
38
|
+
tsGenericParameter.write(builder, this.generics);
|
|
39
|
+
builder.append(this.inject.afterGenerics);
|
|
40
|
+
if (this.extends) {
|
|
41
|
+
builder.append(' extends ');
|
|
42
|
+
builder.append(this.inject.beforeExtends);
|
|
43
|
+
writeTsNode(builder, this.extends);
|
|
44
|
+
builder.append(this.inject.afterExtends);
|
|
45
|
+
}
|
|
46
|
+
if (this.implements.length > 0) {
|
|
47
|
+
builder.append(' implements ');
|
|
48
|
+
builder.append(this.inject.beforeImplements);
|
|
49
|
+
writeTsNodes(builder, this.implements, { separator: ', ' });
|
|
50
|
+
builder.append(this.inject.afterImplements);
|
|
51
|
+
}
|
|
52
|
+
builder.append(' ');
|
|
53
|
+
builder.append(this.inject.beforeBody);
|
|
54
|
+
builder.parenthesize('{}', (b) => {
|
|
55
|
+
b.append(this.inject.beforeMembers);
|
|
56
|
+
writeTsMembers(b, this.members);
|
|
57
|
+
b.append(this.inject.afterMembers);
|
|
58
|
+
}, { multiline: this.members.length > 0 });
|
|
59
|
+
builder.append(this.inject.afterBody);
|
|
60
|
+
builder.appendLine();
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
const createClass = (name, options) => new TsClass(Object.assign(Object.assign({}, options), { name }));
|
|
64
|
+
export const tsClass = Object.assign(createClass, {
|
|
65
|
+
write: writeTsNodes,
|
|
66
|
+
});
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
import { tsDecorator } from './decorator';
|
|
2
|
+
import { TsParameter } from './parameter';
|
|
3
|
+
import { writeTsNode } from '../utils/write-ts-nodes';
|
|
4
|
+
import { writeTsParameters } from '../utils/write-ts-parameters';
|
|
5
|
+
export class TsConstructorParameter extends TsParameter {
|
|
6
|
+
constructor(options) {
|
|
7
|
+
var _a, _b;
|
|
8
|
+
super(options);
|
|
9
|
+
this.accessModifier = (_a = options.accessModifier) !== null && _a !== void 0 ? _a : null;
|
|
10
|
+
this.readonly = (_b = options.readonly) !== null && _b !== void 0 ? _b : false;
|
|
11
|
+
}
|
|
12
|
+
onWrite(builder) {
|
|
13
|
+
builder.append(this.inject.beforeDecorators);
|
|
14
|
+
tsDecorator.write(builder, this.decorators);
|
|
15
|
+
builder.append(this.inject.afterDecorators);
|
|
16
|
+
builder.append(this.inject.beforeModifiers);
|
|
17
|
+
if (this.accessModifier)
|
|
18
|
+
builder.append(this.accessModifier, ' ');
|
|
19
|
+
if (this.readonly)
|
|
20
|
+
builder.append('readonly ');
|
|
21
|
+
builder.append(this.inject.afterModifiers);
|
|
22
|
+
builder.append(this.inject.beforeName, this.name, this.inject.afterName);
|
|
23
|
+
if (this.optional)
|
|
24
|
+
builder.append('?');
|
|
25
|
+
if (this.type) {
|
|
26
|
+
builder.append(': ');
|
|
27
|
+
builder.append(this.inject.beforeType);
|
|
28
|
+
writeTsNode(builder, this.type);
|
|
29
|
+
builder.append(this.inject.afterType);
|
|
30
|
+
}
|
|
31
|
+
if (this.default) {
|
|
32
|
+
builder.append(' = ');
|
|
33
|
+
builder.append(this.inject.beforeDefault);
|
|
34
|
+
writeTsNode(builder, this.default);
|
|
35
|
+
builder.append(this.inject.afterDefault);
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
const createConstructorParameter = (name, options) => new TsConstructorParameter(Object.assign(Object.assign({}, options), { name }));
|
|
40
|
+
export const tsConstructorParameter = Object.assign(createConstructorParameter, {
|
|
41
|
+
write: writeTsParameters,
|
|
42
|
+
});
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
import { notNullish } from '@goast/core';
|
|
2
|
+
import { tsDecorator } from './decorator';
|
|
3
|
+
import { tsDoc } from './doc';
|
|
4
|
+
import { tsParameter } from './parameter';
|
|
5
|
+
import { TsNode } from '../node';
|
|
6
|
+
import { writeTsNodes } from '../utils/write-ts-nodes';
|
|
7
|
+
export class TsConstructor extends TsNode {
|
|
8
|
+
constructor(options) {
|
|
9
|
+
var _a, _b, _c, _d, _e, _f;
|
|
10
|
+
super(options);
|
|
11
|
+
this.doc = (_a = options.doc) !== null && _a !== void 0 ? _a : null;
|
|
12
|
+
this.decorators = (_c = (_b = options.decorators) === null || _b === void 0 ? void 0 : _b.filter(notNullish)) !== null && _c !== void 0 ? _c : [];
|
|
13
|
+
this.parameters = (_e = (_d = options.parameters) === null || _d === void 0 ? void 0 : _d.filter(notNullish)) !== null && _e !== void 0 ? _e : [];
|
|
14
|
+
this.body = (_f = options.body) !== null && _f !== void 0 ? _f : null;
|
|
15
|
+
}
|
|
16
|
+
onWrite(builder) {
|
|
17
|
+
var _a;
|
|
18
|
+
builder.append(this.inject.beforeDoc);
|
|
19
|
+
(_a = tsDoc.get(this.doc, { parameters: this.parameters })) === null || _a === void 0 ? void 0 : _a.write(builder);
|
|
20
|
+
builder.append(this.inject.afterDoc);
|
|
21
|
+
builder.append(this.inject.beforeDecorators);
|
|
22
|
+
tsDecorator.write(builder, this.decorators, { multiline: true });
|
|
23
|
+
builder.append(this.inject.afterDecorators);
|
|
24
|
+
builder.append('constructor');
|
|
25
|
+
builder.append(this.inject.beforeParams);
|
|
26
|
+
tsParameter.write(builder, this.parameters);
|
|
27
|
+
builder.append(this.inject.afterParams);
|
|
28
|
+
builder.append(' ');
|
|
29
|
+
builder.append(this.inject.beforeBody);
|
|
30
|
+
builder.parenthesize('{}', this.body, { multiline: !!this.body });
|
|
31
|
+
builder.append(this.inject.afterBody);
|
|
32
|
+
builder.appendLine();
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
const createConstructor = (options) => new TsConstructor(options !== null && options !== void 0 ? options : {});
|
|
36
|
+
export const tsConstructor = Object.assign(createConstructor, {
|
|
37
|
+
write: writeTsNodes,
|
|
38
|
+
});
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
import { notNullish, toArray, } from '@goast/core';
|
|
2
|
+
import { tsArgument } from './argument';
|
|
3
|
+
import { TsNode } from '../node';
|
|
4
|
+
import { writeTsNode } from '../utils/write-ts-nodes';
|
|
5
|
+
export class TsDecorator extends TsNode {
|
|
6
|
+
constructor(options) {
|
|
7
|
+
var _a, _b;
|
|
8
|
+
super(options);
|
|
9
|
+
this.function = options.function;
|
|
10
|
+
this.arguments = (_b = (_a = options.arguments) === null || _a === void 0 ? void 0 : _a.filter(notNullish)) !== null && _b !== void 0 ? _b : null;
|
|
11
|
+
}
|
|
12
|
+
onWrite(builder) {
|
|
13
|
+
builder.append('@');
|
|
14
|
+
builder.append(this.inject.beforeFunction);
|
|
15
|
+
writeTsNode(builder, this.function);
|
|
16
|
+
builder.append(this.inject.afterFunction);
|
|
17
|
+
if (this.arguments) {
|
|
18
|
+
builder.append(this.inject.beforeArguments);
|
|
19
|
+
tsArgument.write(builder, this.arguments);
|
|
20
|
+
builder.append(this.inject.afterArguments);
|
|
21
|
+
}
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
const createDecorator = (fn, args, options) => new TsDecorator(Object.assign(Object.assign({}, options), { function: fn, arguments: args }));
|
|
25
|
+
const writeDecorators = (builder, nodes, options) => {
|
|
26
|
+
const filteredNodes = toArray(nodes).filter(notNullish);
|
|
27
|
+
builder.forEach(filteredNodes, (b, d) => {
|
|
28
|
+
writeTsNode(b, d);
|
|
29
|
+
b.append((options === null || options === void 0 ? void 0 : options.multiline) ? '\n' : ' ');
|
|
30
|
+
});
|
|
31
|
+
};
|
|
32
|
+
export const tsDecorator = Object.assign(createDecorator, {
|
|
33
|
+
write: writeDecorators,
|
|
34
|
+
});
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
import { basicAppendValueGroup, notNullish, } from '@goast/core';
|
|
2
|
+
import { isTypeScriptAppendValue } from '../../file-builder';
|
|
3
|
+
import { TsNode } from '../node';
|
|
4
|
+
import { writeTsNode, writeTsNodes } from '../utils/write-ts-nodes';
|
|
5
|
+
export class TsDocTag extends TsNode {
|
|
6
|
+
constructor(options) {
|
|
7
|
+
var _a, _b;
|
|
8
|
+
super(options);
|
|
9
|
+
this.tag = options.tag;
|
|
10
|
+
this.type = (_a = options.type) !== null && _a !== void 0 ? _a : null;
|
|
11
|
+
this.text = (_b = options.text) !== null && _b !== void 0 ? _b : null;
|
|
12
|
+
}
|
|
13
|
+
onWrite(builder) {
|
|
14
|
+
builder.append('@', this.tag);
|
|
15
|
+
if (this.type) {
|
|
16
|
+
builder.append(' ');
|
|
17
|
+
builder.parenthesize('{}', (b) => writeTsNode(b, this.type));
|
|
18
|
+
}
|
|
19
|
+
if (this.text) {
|
|
20
|
+
builder.append(' ', this.text);
|
|
21
|
+
}
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
function createDocTag(tag, ...args) {
|
|
25
|
+
let opt = {};
|
|
26
|
+
if (args.length > 0) {
|
|
27
|
+
const lastArg = args[args.length - 1];
|
|
28
|
+
if (!isTypeScriptAppendValue(lastArg) && !!lastArg) {
|
|
29
|
+
opt = args.pop();
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
let params = args;
|
|
33
|
+
if (tag === 'author' && params.length === 2) {
|
|
34
|
+
params[1] = `<${params[1]}>`;
|
|
35
|
+
}
|
|
36
|
+
if (tag === 'borrows') {
|
|
37
|
+
params.splice(1, 0, 'as');
|
|
38
|
+
}
|
|
39
|
+
if (tag === 'example') {
|
|
40
|
+
if (typeof params[0] === 'string') {
|
|
41
|
+
params[0] = `<caption>${params[0]}</caption>`;
|
|
42
|
+
}
|
|
43
|
+
if (params[1] && isTypeScriptAppendValue(params[1])) {
|
|
44
|
+
params.splice(1, 0, '\n');
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
if ((tag === 'event' || tag === 'fires') && typeof params[0] === 'string' && typeof params[1] === 'string') {
|
|
48
|
+
params.splice(0, 2, `${params[0]}#${params[1]}`);
|
|
49
|
+
}
|
|
50
|
+
params = [...params, opt.text].filter(notNullish);
|
|
51
|
+
return new TsDocTag({
|
|
52
|
+
tag,
|
|
53
|
+
type: opt.type,
|
|
54
|
+
text: params.length > 0 ? basicAppendValueGroup(params, ' ') : null,
|
|
55
|
+
inject: opt.inject,
|
|
56
|
+
});
|
|
57
|
+
}
|
|
58
|
+
export const tsDocTag = Object.assign(createDocTag, {
|
|
59
|
+
write: writeTsNodes,
|
|
60
|
+
});
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
import { createOverwriteProxy, getIsInstanceOf, notNullish, } from '@goast/core';
|
|
2
|
+
import { tsDocTag } from './doc-tag';
|
|
3
|
+
import { TsGenericParameter } from './generic-parameter';
|
|
4
|
+
import { TsParameter } from './parameter';
|
|
5
|
+
import { TsNode } from '../node';
|
|
6
|
+
import { writeTsNodes } from '../utils/write-ts-nodes';
|
|
7
|
+
export class TsDoc extends TsNode {
|
|
8
|
+
constructor(options) {
|
|
9
|
+
var _a, _b, _c;
|
|
10
|
+
super(options);
|
|
11
|
+
this.description = (_a = options.description) !== null && _a !== void 0 ? _a : null;
|
|
12
|
+
this.tags = (_c = (_b = options.tags) === null || _b === void 0 ? void 0 : _b.filter(notNullish)) !== null && _c !== void 0 ? _c : [];
|
|
13
|
+
}
|
|
14
|
+
onWrite(builder) {
|
|
15
|
+
if (!this.description && this.tags.length === 0) {
|
|
16
|
+
return;
|
|
17
|
+
}
|
|
18
|
+
builder
|
|
19
|
+
.ensureCurrentLineEmpty()
|
|
20
|
+
.parenthesize(['/**', ' */'], (b) => b.appendWithLinePrefix(' * ', (b) => {
|
|
21
|
+
if (this.description) {
|
|
22
|
+
b.append(this.description);
|
|
23
|
+
}
|
|
24
|
+
if (this.tags.length > 0) {
|
|
25
|
+
b.ensurePreviousLineEmpty();
|
|
26
|
+
tsDocTag.write(b, this.tags, { separator: '\n' });
|
|
27
|
+
}
|
|
28
|
+
}), { multiline: true, indent: false })
|
|
29
|
+
.appendLine();
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
const createDoc = (options) => new TsDoc(options !== null && options !== void 0 ? options : {});
|
|
33
|
+
function getDoc(baseDoc, options) {
|
|
34
|
+
var _a, _b, _c, _d;
|
|
35
|
+
const paramsWithDesc = (_b = (_a = options.parameters) === null || _a === void 0 ? void 0 : _a.filter(getIsInstanceOf((TsParameter))).filter((x) => !!x.description)) !== null && _b !== void 0 ? _b : [];
|
|
36
|
+
const genericsWithDesc = (_d = (_c = options.generics) === null || _c === void 0 ? void 0 : _c.filter(getIsInstanceOf((TsGenericParameter))).filter((x) => !!x.description)) !== null && _d !== void 0 ? _d : [];
|
|
37
|
+
if (paramsWithDesc.length === 0 && genericsWithDesc.length === 0) {
|
|
38
|
+
return baseDoc;
|
|
39
|
+
}
|
|
40
|
+
const doc = baseDoc ? createOverwriteProxy(baseDoc) : createDoc();
|
|
41
|
+
const paramTags = paramsWithDesc.map((p) => tsDocTag('param', p.name, p.description));
|
|
42
|
+
const genericTags = genericsWithDesc.map((p) => tsDocTag('template', p.name, p.description));
|
|
43
|
+
doc.tags.splice(0, 0, ...genericTags, ...paramTags);
|
|
44
|
+
return doc;
|
|
45
|
+
}
|
|
46
|
+
function isDocEmpty(doc) {
|
|
47
|
+
return !doc || (!doc.description && doc.tags.length === 0);
|
|
48
|
+
}
|
|
49
|
+
export const tsDoc = Object.assign(createDoc, {
|
|
50
|
+
write: writeTsNodes,
|
|
51
|
+
get: getDoc,
|
|
52
|
+
isEmpty: isDocEmpty,
|
|
53
|
+
});
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
import { TsNode } from '../node';
|
|
2
|
+
import { writeTsNode, writeTsNodes } from '../utils/write-ts-nodes';
|
|
3
|
+
export class TsEnumValue extends TsNode {
|
|
4
|
+
constructor(options) {
|
|
5
|
+
var _a, _b;
|
|
6
|
+
super(options);
|
|
7
|
+
this.name = options.name;
|
|
8
|
+
this.doc = (_a = options.doc) !== null && _a !== void 0 ? _a : null;
|
|
9
|
+
this.value = (_b = options.value) !== null && _b !== void 0 ? _b : null;
|
|
10
|
+
}
|
|
11
|
+
onWrite(builder) {
|
|
12
|
+
var _a;
|
|
13
|
+
builder.append(this.inject.beforeDoc);
|
|
14
|
+
(_a = this.doc) === null || _a === void 0 ? void 0 : _a.write(builder);
|
|
15
|
+
builder.append(this.inject.afterDoc);
|
|
16
|
+
builder.append(this.inject.beforeName, this.name, this.inject.afterName);
|
|
17
|
+
if (this.value) {
|
|
18
|
+
builder.append(' = ');
|
|
19
|
+
builder.append(this.inject.beforeValue);
|
|
20
|
+
writeTsNode(builder, this.value);
|
|
21
|
+
builder.append(this.inject.afterValue);
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
const createEnumValue = (name, options) => new TsEnumValue(Object.assign(Object.assign({}, options), { name }));
|
|
26
|
+
const writeEnumValues = (builder, nodes) => {
|
|
27
|
+
writeTsNodes(builder, nodes, { separator: ',\n' });
|
|
28
|
+
};
|
|
29
|
+
export const tsEnumValue = Object.assign(createEnumValue, {
|
|
30
|
+
write: writeEnumValues,
|
|
31
|
+
});
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
import { notNullish } from '@goast/core';
|
|
2
|
+
import { tsEnumValue } from './enum-value';
|
|
3
|
+
import { TsNode } from '../node';
|
|
4
|
+
import { writeTsNodes } from '../utils/write-ts-nodes';
|
|
5
|
+
export class TsEnum extends TsNode {
|
|
6
|
+
constructor(options) {
|
|
7
|
+
var _a, _b, _c, _d, _e;
|
|
8
|
+
super(options);
|
|
9
|
+
this.doc = (_a = options.doc) !== null && _a !== void 0 ? _a : null;
|
|
10
|
+
this.export = (_b = options.export) !== null && _b !== void 0 ? _b : false;
|
|
11
|
+
this.const = (_c = options.const) !== null && _c !== void 0 ? _c : false;
|
|
12
|
+
this.name = options.name;
|
|
13
|
+
this.members = (_e = (_d = options.members) === null || _d === void 0 ? void 0 : _d.filter(notNullish)) !== null && _e !== void 0 ? _e : [];
|
|
14
|
+
}
|
|
15
|
+
onWrite(builder) {
|
|
16
|
+
var _a;
|
|
17
|
+
builder.append(this.inject.beforeDoc);
|
|
18
|
+
(_a = this.doc) === null || _a === void 0 ? void 0 : _a.write(builder);
|
|
19
|
+
builder.append(this.inject.afterDoc);
|
|
20
|
+
builder.append(this.inject.beforeModifiers);
|
|
21
|
+
if (this.export)
|
|
22
|
+
builder.append('export ');
|
|
23
|
+
if (this.const)
|
|
24
|
+
builder.append('const ');
|
|
25
|
+
builder.append(this.inject.afterModifiers);
|
|
26
|
+
builder.append('enum ');
|
|
27
|
+
builder.append(this.inject.beforeName, this.name, this.inject.afterName);
|
|
28
|
+
builder.append(' ');
|
|
29
|
+
builder.append(this.inject.beforeBody);
|
|
30
|
+
builder.parenthesize('{}', (b) => {
|
|
31
|
+
b.append(this.inject.beforeMembers);
|
|
32
|
+
tsEnumValue.write(b, this.members);
|
|
33
|
+
b.append(this.inject.afterMembers);
|
|
34
|
+
}, { multiline: this.members.length > 0 });
|
|
35
|
+
builder.append(this.inject.afterBody);
|
|
36
|
+
builder.appendLine();
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
const createEnum = (name, options) => new TsEnum(Object.assign(Object.assign({}, options), { name }));
|
|
40
|
+
export const tsEnum = Object.assign(createEnum, {
|
|
41
|
+
write: writeTsNodes,
|
|
42
|
+
});
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import { TypeScriptFileBuilder } from '../../file-builder';
|
|
2
|
+
import { TsNode } from '../node';
|
|
3
|
+
import { writeTsNodes } from '../utils/write-ts-nodes';
|
|
4
|
+
export class TsExport extends TsNode {
|
|
5
|
+
constructor(options) {
|
|
6
|
+
super(options);
|
|
7
|
+
this.name = options.name;
|
|
8
|
+
this.filePath = options.filePath;
|
|
9
|
+
}
|
|
10
|
+
onWrite(builder) {
|
|
11
|
+
if (builder instanceof TypeScriptFileBuilder) {
|
|
12
|
+
builder.addExport(this.name, this.filePath);
|
|
13
|
+
}
|
|
14
|
+
else {
|
|
15
|
+
builder.appendLine(`export { ${this.name} } from '${this.filePath}';`);
|
|
16
|
+
}
|
|
17
|
+
}
|
|
18
|
+
}
|
|
19
|
+
export const createExport = (name, filePath, options) => new TsExport(Object.assign(Object.assign({}, options), { name, filePath }));
|
|
20
|
+
export const tsExport = Object.assign(createExport, {
|
|
21
|
+
write: writeTsNodes,
|
|
22
|
+
});
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
import { notNullish } from '@goast/core';
|
|
2
|
+
import { tsGenericParameter } from './generic-parameter';
|
|
3
|
+
import { tsParameter } from './parameter';
|
|
4
|
+
import { TsNode } from '../node';
|
|
5
|
+
import { writeTsNode, writeTsNodes } from '../utils/write-ts-nodes';
|
|
6
|
+
export class TsFunctionType extends TsNode {
|
|
7
|
+
constructor(options) {
|
|
8
|
+
var _a, _b, _c, _d, _e;
|
|
9
|
+
super(options);
|
|
10
|
+
this.generics = (_b = (_a = options.generics) === null || _a === void 0 ? void 0 : _a.filter(notNullish)) !== null && _b !== void 0 ? _b : [];
|
|
11
|
+
this.parameters = (_d = (_c = options.parameters) === null || _c === void 0 ? void 0 : _c.filter(notNullish)) !== null && _d !== void 0 ? _d : [];
|
|
12
|
+
this.returnType = (_e = options.returnType) !== null && _e !== void 0 ? _e : null;
|
|
13
|
+
}
|
|
14
|
+
onWrite(builder) {
|
|
15
|
+
var _a;
|
|
16
|
+
builder.append(this.inject.beforeGenerics);
|
|
17
|
+
tsGenericParameter.write(builder, this.generics);
|
|
18
|
+
builder.append(this.inject.afterGenerics);
|
|
19
|
+
builder.append(this.inject.beforeParams);
|
|
20
|
+
tsParameter.write(builder, this.parameters);
|
|
21
|
+
builder.append(this.inject.afterParams);
|
|
22
|
+
builder.append(' => ');
|
|
23
|
+
builder.append(this.inject.beforeReturnType);
|
|
24
|
+
writeTsNode(builder, (_a = this.returnType) !== null && _a !== void 0 ? _a : 'void');
|
|
25
|
+
builder.append(this.inject.afterReturnType);
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
const createFunctionType = (options) => new TsFunctionType(options !== null && options !== void 0 ? options : {});
|
|
29
|
+
export const tsFunctionType = Object.assign(createFunctionType, {
|
|
30
|
+
write: writeTsNodes,
|
|
31
|
+
});
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
import { notNullish } from '@goast/core';
|
|
2
|
+
import { tsDecorator } from './decorator';
|
|
3
|
+
import { tsDoc } from './doc';
|
|
4
|
+
import { tsGenericParameter } from './generic-parameter';
|
|
5
|
+
import { tsParameter } from './parameter';
|
|
6
|
+
import { TsNode } from '../node';
|
|
7
|
+
import { writeTsNode, writeTsNodes } from '../utils/write-ts-nodes';
|
|
8
|
+
export class TsFunction extends TsNode {
|
|
9
|
+
constructor(options) {
|
|
10
|
+
var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k;
|
|
11
|
+
super(options);
|
|
12
|
+
this.doc = (_a = options.doc) !== null && _a !== void 0 ? _a : null;
|
|
13
|
+
this.decorators = (_c = (_b = options.decorators) === null || _b === void 0 ? void 0 : _b.filter(notNullish)) !== null && _c !== void 0 ? _c : [];
|
|
14
|
+
this.export = (_d = options.export) !== null && _d !== void 0 ? _d : false;
|
|
15
|
+
this.name = options.name;
|
|
16
|
+
this.generics = (_f = (_e = options.generics) === null || _e === void 0 ? void 0 : _e.filter(notNullish)) !== null && _f !== void 0 ? _f : [];
|
|
17
|
+
this.parameters = (_h = (_g = options.parameters) === null || _g === void 0 ? void 0 : _g.filter(notNullish)) !== null && _h !== void 0 ? _h : [];
|
|
18
|
+
this.returnType = (_j = options.returnType) !== null && _j !== void 0 ? _j : null;
|
|
19
|
+
this.body = (_k = options.body) !== null && _k !== void 0 ? _k : null;
|
|
20
|
+
}
|
|
21
|
+
onWrite(builder) {
|
|
22
|
+
builder.append(this.inject.beforeDoc);
|
|
23
|
+
tsDoc.write(builder, tsDoc.get(this.doc, { generics: this.generics }));
|
|
24
|
+
builder.append(this.inject.afterDoc);
|
|
25
|
+
builder.append(this.inject.beforeDecorators);
|
|
26
|
+
tsDecorator.write(builder, this.decorators, { multiline: true });
|
|
27
|
+
builder.append(this.inject.afterDecorators);
|
|
28
|
+
builder.append(this.inject.beforeModifiers);
|
|
29
|
+
if (this.export)
|
|
30
|
+
builder.append('export ');
|
|
31
|
+
builder.append(this.inject.afterModifiers);
|
|
32
|
+
builder.append('function ');
|
|
33
|
+
builder.append(this.inject.beforeName, this.name, this.inject.afterName);
|
|
34
|
+
builder.append(this.inject.beforeGenerics);
|
|
35
|
+
tsGenericParameter.write(builder, this.generics);
|
|
36
|
+
builder.append(this.inject.afterGenerics);
|
|
37
|
+
builder.append(this.inject.beforeParams);
|
|
38
|
+
tsParameter.write(builder, this.parameters);
|
|
39
|
+
builder.append(this.inject.afterParams);
|
|
40
|
+
if (this.returnType) {
|
|
41
|
+
builder.append(': ');
|
|
42
|
+
builder.append(this.inject.beforeReturnType);
|
|
43
|
+
writeTsNode(builder, this.returnType);
|
|
44
|
+
builder.append(this.inject.afterReturnType);
|
|
45
|
+
}
|
|
46
|
+
builder.append(' ');
|
|
47
|
+
builder.append(this.inject.beforeBody);
|
|
48
|
+
builder.parenthesize('{}', this.body, { multiline: !!this.body });
|
|
49
|
+
builder.append(this.inject.afterBody);
|
|
50
|
+
builder.appendLine();
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
const createFunction = (name, options) => new TsFunction(Object.assign(Object.assign({}, options), { name }));
|
|
54
|
+
export const tsFunction = Object.assign(createFunction, {
|
|
55
|
+
write: writeTsNodes,
|
|
56
|
+
});
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
import { TsNode } from '../node';
|
|
2
|
+
import { writeTsGenericParameters } from '../utils/write-ts-generic-parameters';
|
|
3
|
+
import { writeTsNode } from '../utils/write-ts-nodes';
|
|
4
|
+
export class TsGenericParameter extends TsNode {
|
|
5
|
+
constructor(options) {
|
|
6
|
+
var _a, _b, _c, _d;
|
|
7
|
+
super(options);
|
|
8
|
+
this.description = (_a = options.description) !== null && _a !== void 0 ? _a : null;
|
|
9
|
+
this.const = (_b = options.const) !== null && _b !== void 0 ? _b : false;
|
|
10
|
+
this.name = options.name;
|
|
11
|
+
this.constraint = (_c = options.constraint) !== null && _c !== void 0 ? _c : null;
|
|
12
|
+
this.default = (_d = options.default) !== null && _d !== void 0 ? _d : null;
|
|
13
|
+
}
|
|
14
|
+
onWrite(builder) {
|
|
15
|
+
builder.append(this.inject.beforeModifiers);
|
|
16
|
+
builder.appendIf(this.const, 'const ');
|
|
17
|
+
builder.append(this.inject.afterModifiers);
|
|
18
|
+
builder.append(this.inject.beforeName, this.name, this.inject.afterName);
|
|
19
|
+
if (this.constraint !== null) {
|
|
20
|
+
builder.append(' extends ');
|
|
21
|
+
builder.append(this.inject.beforeConstraint);
|
|
22
|
+
writeTsNode(builder, this.constraint);
|
|
23
|
+
builder.append(this.inject.afterConstraint);
|
|
24
|
+
}
|
|
25
|
+
if (this.default !== null) {
|
|
26
|
+
builder.append(' = ');
|
|
27
|
+
builder.append(this.inject.beforeDefault);
|
|
28
|
+
writeTsNode(builder, this.default);
|
|
29
|
+
builder.append(this.inject.afterDefault);
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
const createGenericParameter = (name, options) => new TsGenericParameter(Object.assign(Object.assign({}, options), { name }));
|
|
34
|
+
export const tsGenericParameter = Object.assign(createGenericParameter, {
|
|
35
|
+
write: writeTsGenericParameters,
|
|
36
|
+
});
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import { TsNode } from '../node';
|
|
2
|
+
import { writeTsNode, writeTsNodes } from '../utils/write-ts-nodes';
|
|
3
|
+
export class TsIndexer extends TsNode {
|
|
4
|
+
constructor(options) {
|
|
5
|
+
var _a, _b;
|
|
6
|
+
super(options);
|
|
7
|
+
this.keyName = (_a = options.keyName) !== null && _a !== void 0 ? _a : 'key';
|
|
8
|
+
this.keyType = options.keyType;
|
|
9
|
+
this.valueType = options.valueType;
|
|
10
|
+
this.readonly = (_b = options.readonly) !== null && _b !== void 0 ? _b : false;
|
|
11
|
+
}
|
|
12
|
+
onWrite(builder) {
|
|
13
|
+
if (this.readonly)
|
|
14
|
+
builder.append('readonly ');
|
|
15
|
+
builder.parenthesize('[]', (b) => {
|
|
16
|
+
b.append(this.keyName, ': ');
|
|
17
|
+
writeTsNode(b, this.keyType);
|
|
18
|
+
});
|
|
19
|
+
builder.append(': ');
|
|
20
|
+
writeTsNode(builder, this.valueType);
|
|
21
|
+
builder.append(';');
|
|
22
|
+
builder.appendLine();
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
const createIndexer = (keyType, valueType, options) => new TsIndexer(Object.assign(Object.assign({}, options), { keyType, valueType }));
|
|
26
|
+
export const tsIndexer = Object.assign(createIndexer, {
|
|
27
|
+
write: writeTsNodes,
|
|
28
|
+
});
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
import { notNullish } from '@goast/core';
|
|
2
|
+
import { tsDecorator } from './decorator';
|
|
3
|
+
import { tsDoc } from './doc';
|
|
4
|
+
import { tsGenericParameter } from './generic-parameter';
|
|
5
|
+
import { TsNode } from '../node';
|
|
6
|
+
import { writeTsMembers } from '../utils/write-ts-members';
|
|
7
|
+
import { writeTsNodes } from '../utils/write-ts-nodes';
|
|
8
|
+
export class TsInterface extends TsNode {
|
|
9
|
+
constructor(options) {
|
|
10
|
+
var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k;
|
|
11
|
+
super(options);
|
|
12
|
+
this.doc = (_a = options.doc) !== null && _a !== void 0 ? _a : null;
|
|
13
|
+
this.decorators = (_c = (_b = options.decorators) === null || _b === void 0 ? void 0 : _b.filter(notNullish)) !== null && _c !== void 0 ? _c : [];
|
|
14
|
+
this.export = (_d = options.export) !== null && _d !== void 0 ? _d : false;
|
|
15
|
+
this.name = options.name;
|
|
16
|
+
this.generics = (_f = (_e = options.generics) === null || _e === void 0 ? void 0 : _e.filter(notNullish)) !== null && _f !== void 0 ? _f : [];
|
|
17
|
+
this.extends = (_h = (_g = options.extends) === null || _g === void 0 ? void 0 : _g.filter(notNullish)) !== null && _h !== void 0 ? _h : [];
|
|
18
|
+
this.members = (_k = (_j = options.members) === null || _j === void 0 ? void 0 : _j.filter(notNullish)) !== null && _k !== void 0 ? _k : [];
|
|
19
|
+
}
|
|
20
|
+
onWrite(builder) {
|
|
21
|
+
builder.append(this.inject.beforeDoc);
|
|
22
|
+
tsDoc.write(builder, tsDoc.get(this.doc, { generics: this.generics }));
|
|
23
|
+
builder.append(this.inject.afterDoc);
|
|
24
|
+
builder.append(this.inject.beforeDecorators);
|
|
25
|
+
tsDecorator.write(builder, this.decorators, { multiline: true });
|
|
26
|
+
builder.append(this.inject.afterDecorators);
|
|
27
|
+
builder.append(this.inject.beforeModifiers);
|
|
28
|
+
if (this.export)
|
|
29
|
+
builder.append('export ');
|
|
30
|
+
builder.append(this.inject.afterModifiers);
|
|
31
|
+
builder.append('interface ');
|
|
32
|
+
builder.append(this.inject.beforeName, this.name, this.inject.afterName);
|
|
33
|
+
builder.append(this.inject.beforeGenerics);
|
|
34
|
+
tsGenericParameter.write(builder, this.generics);
|
|
35
|
+
builder.append(this.inject.afterGenerics);
|
|
36
|
+
if (this.extends.length > 0) {
|
|
37
|
+
builder.append(' extends ');
|
|
38
|
+
builder.append(this.inject.beforeExtends);
|
|
39
|
+
writeTsNodes(builder, this.extends, { separator: ', ' });
|
|
40
|
+
builder.append(this.inject.afterExtends);
|
|
41
|
+
}
|
|
42
|
+
builder.append(' ');
|
|
43
|
+
builder.append(this.inject.beforeBody);
|
|
44
|
+
builder.parenthesize('{}', (b) => {
|
|
45
|
+
b.append(this.inject.beforeMembers);
|
|
46
|
+
writeTsMembers(b, this.members);
|
|
47
|
+
b.append(this.inject.afterMembers);
|
|
48
|
+
}, { multiline: this.members.length > 0 });
|
|
49
|
+
builder.append(this.inject.afterBody);
|
|
50
|
+
builder.appendLine();
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
const createInterface = (name, options) => new TsInterface(Object.assign(Object.assign({}, options), { name }));
|
|
54
|
+
export const tsInterface = Object.assign(createInterface, {
|
|
55
|
+
write: writeTsNodes,
|
|
56
|
+
});
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
import { notNullish } from '@goast/core';
|
|
2
|
+
import { TsNode } from '../node';
|
|
3
|
+
import { writeTsNode, writeTsNodes } from '../utils/write-ts-nodes';
|
|
4
|
+
export class TsIntersectionType extends TsNode {
|
|
5
|
+
constructor(options) {
|
|
6
|
+
super(options);
|
|
7
|
+
this.types = options.types.filter(notNullish);
|
|
8
|
+
}
|
|
9
|
+
onWrite(builder) {
|
|
10
|
+
const types = this.types.length === 0 ? ['unknown'] : resolveNestedIntersectionTypes(this);
|
|
11
|
+
if (types.length === 1) {
|
|
12
|
+
writeTsNode(builder, types[0]);
|
|
13
|
+
}
|
|
14
|
+
else {
|
|
15
|
+
const multiline = types.length > 3;
|
|
16
|
+
if (multiline) {
|
|
17
|
+
builder.appendLine().append('& ');
|
|
18
|
+
}
|
|
19
|
+
builder.forEach(types, (b, t) => b.parenthesize('()', (b) => writeTsNode(b, t)), {
|
|
20
|
+
separator: multiline ? '\n& ' : ' & ',
|
|
21
|
+
});
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
const createIntersectionType = (types, options) => new TsIntersectionType(Object.assign(Object.assign({}, options), { types }));
|
|
26
|
+
export const tsIntersectionType = Object.assign(createIntersectionType, {
|
|
27
|
+
write: writeTsNodes,
|
|
28
|
+
});
|
|
29
|
+
function resolveNestedIntersectionTypes(node) {
|
|
30
|
+
const types = [];
|
|
31
|
+
for (const type of node.types) {
|
|
32
|
+
if (type instanceof TsIntersectionType) {
|
|
33
|
+
types.push(...resolveNestedIntersectionTypes(type));
|
|
34
|
+
}
|
|
35
|
+
else {
|
|
36
|
+
types.push(type);
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
return types;
|
|
40
|
+
}
|