@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.
Files changed (217) hide show
  1. package/assets/{service → client}/angular/request-builder.ts +6 -2
  2. package/assets/client/fetch/{url-builder.ts → fetch-client.utils.ts} +15 -0
  3. package/assets/stubs/easy-network-stub/easy-network-stub.utils.ts +235 -0
  4. package/cjs/lib/ast/_index.js +108 -0
  5. package/cjs/lib/ast/common.js +2 -0
  6. package/cjs/lib/ast/index.js +5 -0
  7. package/cjs/lib/ast/node.js +10 -0
  8. package/cjs/lib/ast/nodes/argument.js +20 -0
  9. package/cjs/lib/ast/nodes/array-type.js +27 -0
  10. package/cjs/lib/ast/nodes/arrow-function.js +51 -0
  11. package/cjs/lib/ast/nodes/call.js +26 -0
  12. package/cjs/lib/ast/nodes/class.js +70 -0
  13. package/cjs/lib/ast/nodes/constructor-parameter.js +46 -0
  14. package/cjs/lib/ast/nodes/constructor.js +42 -0
  15. package/cjs/lib/ast/nodes/decorator.js +38 -0
  16. package/cjs/lib/ast/nodes/doc-tag.js +64 -0
  17. package/cjs/lib/ast/nodes/doc.js +57 -0
  18. package/cjs/lib/ast/nodes/enum-value.js +35 -0
  19. package/cjs/lib/ast/nodes/enum.js +46 -0
  20. package/cjs/lib/ast/nodes/export.js +27 -0
  21. package/cjs/lib/ast/nodes/function-type.js +35 -0
  22. package/cjs/lib/ast/nodes/function.js +60 -0
  23. package/cjs/lib/ast/nodes/generic-parameter.js +40 -0
  24. package/cjs/lib/ast/nodes/indexer.js +32 -0
  25. package/cjs/lib/ast/nodes/interface.js +60 -0
  26. package/cjs/lib/ast/nodes/intersection-type.js +44 -0
  27. package/cjs/lib/ast/nodes/lookup-type.js +30 -0
  28. package/cjs/lib/ast/nodes/method.js +82 -0
  29. package/cjs/lib/ast/nodes/object-type.js +24 -0
  30. package/cjs/lib/ast/nodes/object.js +24 -0
  31. package/cjs/lib/ast/nodes/parameter.js +45 -0
  32. package/cjs/lib/ast/nodes/property-accessor.js +128 -0
  33. package/cjs/lib/ast/nodes/property.js +119 -0
  34. package/cjs/lib/ast/nodes/reference.js +63 -0
  35. package/cjs/lib/ast/nodes/string.js +30 -0
  36. package/cjs/lib/ast/nodes/tuple.js +28 -0
  37. package/cjs/lib/ast/nodes/type-alias.js +36 -0
  38. package/cjs/lib/ast/nodes/typeof.js +23 -0
  39. package/cjs/lib/ast/nodes/types.js +2 -0
  40. package/cjs/lib/ast/nodes/union-type.js +44 -0
  41. package/cjs/lib/ast/nodes/variable.js +38 -0
  42. package/cjs/lib/ast/references/angular.js +12 -0
  43. package/cjs/lib/ast/references/easy-network-stub.js +8 -0
  44. package/cjs/lib/ast/references/index.js +7 -0
  45. package/cjs/lib/ast/references/rxjs.js +9 -0
  46. package/cjs/lib/ast/references/typescript.js +33 -0
  47. package/cjs/lib/ast/utils/get-type-script-builder-options.js +19 -0
  48. package/cjs/lib/ast/utils/to-ts-node.js +24 -0
  49. package/cjs/lib/ast/utils/write-ts-generic-parameters.js +11 -0
  50. package/cjs/lib/ast/utils/write-ts-members.js +18 -0
  51. package/cjs/lib/ast/utils/write-ts-nodes.js +24 -0
  52. package/cjs/lib/ast/utils/write-ts-parameters.js +14 -0
  53. package/cjs/lib/config.js +5 -3
  54. package/cjs/lib/file-builder.js +45 -202
  55. package/cjs/lib/generators/file-generator.js +2 -18
  56. package/cjs/lib/generators/index.js +1 -0
  57. package/cjs/lib/generators/models/model-generator.js +144 -205
  58. package/cjs/lib/generators/models/models-generator.js +12 -26
  59. package/cjs/lib/generators/models/models.js +1 -1
  60. package/cjs/lib/generators/services/angular-services/angular-service-generator.js +183 -306
  61. package/cjs/lib/generators/services/angular-services/angular-services-generator.js +168 -76
  62. package/cjs/lib/generators/services/angular-services/models.js +10 -1
  63. package/cjs/lib/generators/services/angular-services/refs.js +24 -0
  64. package/cjs/lib/generators/services/easy-network-stub/easy-network-stub-generator.js +169 -0
  65. package/cjs/lib/generators/services/easy-network-stub/easy-network-stubs-generator.js +73 -0
  66. package/cjs/lib/generators/services/easy-network-stub/index.js +6 -0
  67. package/cjs/lib/generators/services/easy-network-stub/models.js +10 -0
  68. package/cjs/lib/generators/services/easy-network-stub/refs.js +21 -0
  69. package/cjs/lib/generators/services/fetch-clients/fetch-client-generator.js +126 -180
  70. package/cjs/lib/generators/services/fetch-clients/fetch-clients-generator.js +5 -1
  71. package/cjs/lib/generators/services/fetch-clients/refs.js +17 -0
  72. package/cjs/lib/import-collection.js +18 -19
  73. package/esm/lib/ast/_index.js +37 -0
  74. package/esm/lib/ast/common.js +1 -0
  75. package/esm/lib/ast/index.js +2 -0
  76. package/esm/lib/ast/node.js +6 -0
  77. package/esm/lib/ast/nodes/argument.js +16 -0
  78. package/esm/lib/ast/nodes/array-type.js +23 -0
  79. package/esm/lib/ast/nodes/arrow-function.js +47 -0
  80. package/esm/lib/ast/nodes/call.js +22 -0
  81. package/esm/lib/ast/nodes/class.js +66 -0
  82. package/esm/lib/ast/nodes/constructor-parameter.js +42 -0
  83. package/esm/lib/ast/nodes/constructor.js +38 -0
  84. package/esm/lib/ast/nodes/decorator.js +34 -0
  85. package/esm/lib/ast/nodes/doc-tag.js +60 -0
  86. package/esm/lib/ast/nodes/doc.js +53 -0
  87. package/esm/lib/ast/nodes/enum-value.js +31 -0
  88. package/esm/lib/ast/nodes/enum.js +42 -0
  89. package/esm/lib/ast/nodes/export.js +22 -0
  90. package/esm/lib/ast/nodes/function-type.js +31 -0
  91. package/esm/lib/ast/nodes/function.js +56 -0
  92. package/esm/lib/ast/nodes/generic-parameter.js +36 -0
  93. package/esm/lib/ast/nodes/indexer.js +28 -0
  94. package/esm/lib/ast/nodes/interface.js +56 -0
  95. package/esm/lib/ast/nodes/intersection-type.js +40 -0
  96. package/esm/lib/ast/nodes/lookup-type.js +26 -0
  97. package/esm/lib/ast/nodes/method.js +77 -0
  98. package/esm/lib/ast/nodes/object-type.js +20 -0
  99. package/esm/lib/ast/nodes/object.js +20 -0
  100. package/esm/lib/ast/nodes/parameter.js +41 -0
  101. package/esm/lib/ast/nodes/property-accessor.js +121 -0
  102. package/esm/lib/ast/nodes/property.js +113 -0
  103. package/esm/lib/ast/nodes/reference.js +59 -0
  104. package/esm/lib/ast/nodes/string.js +26 -0
  105. package/esm/lib/ast/nodes/tuple.js +24 -0
  106. package/esm/lib/ast/nodes/type-alias.js +32 -0
  107. package/esm/lib/ast/nodes/typeof.js +18 -0
  108. package/esm/lib/ast/nodes/types.js +1 -0
  109. package/esm/lib/ast/nodes/union-type.js +40 -0
  110. package/esm/lib/ast/nodes/variable.js +34 -0
  111. package/esm/lib/ast/references/angular.js +9 -0
  112. package/esm/lib/ast/references/easy-network-stub.js +5 -0
  113. package/esm/lib/ast/references/index.js +5 -0
  114. package/esm/lib/ast/references/rxjs.js +6 -0
  115. package/esm/lib/ast/references/typescript.js +30 -0
  116. package/esm/lib/ast/utils/get-type-script-builder-options.js +15 -0
  117. package/esm/lib/ast/utils/to-ts-node.js +20 -0
  118. package/esm/lib/ast/utils/write-ts-generic-parameters.js +7 -0
  119. package/esm/lib/ast/utils/write-ts-members.js +14 -0
  120. package/esm/lib/ast/utils/write-ts-nodes.js +19 -0
  121. package/esm/lib/ast/utils/write-ts-parameters.js +10 -0
  122. package/esm/lib/config.js +5 -3
  123. package/esm/lib/file-builder.js +44 -202
  124. package/esm/lib/generators/file-generator.js +2 -18
  125. package/esm/lib/generators/index.js +1 -0
  126. package/esm/lib/generators/models/model-generator.js +149 -210
  127. package/esm/lib/generators/models/models-generator.js +15 -29
  128. package/esm/lib/generators/models/models.js +1 -1
  129. package/esm/lib/generators/services/angular-services/angular-service-generator.js +186 -309
  130. package/esm/lib/generators/services/angular-services/angular-services-generator.js +170 -78
  131. package/esm/lib/generators/services/angular-services/models.js +10 -1
  132. package/esm/lib/generators/services/angular-services/refs.js +20 -0
  133. package/esm/lib/generators/services/easy-network-stub/easy-network-stub-generator.js +165 -0
  134. package/esm/lib/generators/services/easy-network-stub/easy-network-stubs-generator.js +69 -0
  135. package/esm/lib/generators/services/easy-network-stub/index.js +3 -0
  136. package/esm/lib/generators/services/easy-network-stub/models.js +7 -0
  137. package/esm/lib/generators/services/easy-network-stub/refs.js +17 -0
  138. package/esm/lib/generators/services/fetch-clients/fetch-client-generator.js +128 -182
  139. package/esm/lib/generators/services/fetch-clients/fetch-clients-generator.js +5 -1
  140. package/esm/lib/generators/services/fetch-clients/refs.js +13 -0
  141. package/esm/lib/import-collection.js +17 -18
  142. package/package.json +6 -6
  143. package/types/lib/ast/_index.d.ts +38 -0
  144. package/types/lib/ast/common.d.ts +1 -0
  145. package/types/lib/ast/index.d.ts +1 -0
  146. package/types/lib/ast/node.d.ts +4 -0
  147. package/types/lib/ast/nodes/argument.d.ts +17 -0
  148. package/types/lib/ast/nodes/array-type.d.ts +19 -0
  149. package/types/lib/ast/nodes/arrow-function.d.ts +29 -0
  150. package/types/lib/ast/nodes/call.d.ts +20 -0
  151. package/types/lib/ast/nodes/class.d.ts +41 -0
  152. package/types/lib/ast/nodes/constructor-parameter.d.ts +19 -0
  153. package/types/lib/ast/nodes/constructor.d.ts +25 -0
  154. package/types/lib/ast/nodes/decorator.d.ts +22 -0
  155. package/types/lib/ast/nodes/doc-tag.d.ts +73 -0
  156. package/types/lib/ast/nodes/doc.d.ts +28 -0
  157. package/types/lib/ast/nodes/enum-value.d.ts +21 -0
  158. package/types/lib/ast/nodes/enum.d.ts +26 -0
  159. package/types/lib/ast/nodes/export.d.ts +19 -0
  160. package/types/lib/ast/nodes/function-type.d.ts +23 -0
  161. package/types/lib/ast/nodes/function.d.ts +35 -0
  162. package/types/lib/ast/nodes/generic-parameter.d.ts +25 -0
  163. package/types/lib/ast/nodes/indexer.d.ts +23 -0
  164. package/types/lib/ast/nodes/interface.d.ts +36 -0
  165. package/types/lib/ast/nodes/intersection-type.d.ts +17 -0
  166. package/types/lib/ast/nodes/lookup-type.d.ts +19 -0
  167. package/types/lib/ast/nodes/method.d.ts +45 -0
  168. package/types/lib/ast/nodes/object-type.d.ts +20 -0
  169. package/types/lib/ast/nodes/object.d.ts +19 -0
  170. package/types/lib/ast/nodes/parameter.d.ts +28 -0
  171. package/types/lib/ast/nodes/property-accessor.d.ts +53 -0
  172. package/types/lib/ast/nodes/property.d.ts +84 -0
  173. package/types/lib/ast/nodes/reference.d.ts +46 -0
  174. package/types/lib/ast/nodes/string.d.ts +18 -0
  175. package/types/lib/ast/nodes/tuple.d.ts +17 -0
  176. package/types/lib/ast/nodes/type-alias.d.ts +27 -0
  177. package/types/lib/ast/nodes/typeof.d.ts +18 -0
  178. package/types/lib/ast/nodes/types.d.ts +18 -0
  179. package/types/lib/ast/nodes/union-type.d.ts +17 -0
  180. package/types/lib/ast/nodes/variable.d.ts +28 -0
  181. package/types/lib/ast/references/angular.d.ts +37 -0
  182. package/types/lib/ast/references/easy-network-stub.d.ts +26 -0
  183. package/types/lib/ast/references/index.d.ts +3 -0
  184. package/types/lib/ast/references/rxjs.d.ts +30 -0
  185. package/types/lib/ast/references/typescript.d.ts +133 -0
  186. package/types/lib/ast/utils/get-type-script-builder-options.d.ts +3 -0
  187. package/types/lib/ast/utils/to-ts-node.d.ts +8 -0
  188. package/types/lib/ast/utils/write-ts-generic-parameters.d.ts +3 -0
  189. package/types/lib/ast/utils/write-ts-members.d.ts +5 -0
  190. package/types/lib/ast/utils/write-ts-nodes.d.ts +6 -0
  191. package/types/lib/ast/utils/write-ts-parameters.d.ts +3 -0
  192. package/types/lib/common-results.d.ts +4 -0
  193. package/types/lib/config.d.ts +5 -2
  194. package/types/lib/file-builder.d.ts +21 -98
  195. package/types/lib/generators/file-generator.d.ts +3 -7
  196. package/types/lib/generators/index.d.ts +1 -0
  197. package/types/lib/generators/models/model-generator.d.ts +18 -23
  198. package/types/lib/generators/models/models-generator.d.ts +4 -5
  199. package/types/lib/generators/models/models.d.ts +4 -4
  200. package/types/lib/generators/services/angular-services/angular-service-generator.d.ts +15 -35
  201. package/types/lib/generators/services/angular-services/angular-services-generator.d.ts +12 -10
  202. package/types/lib/generators/services/angular-services/models.d.ts +67 -22
  203. package/types/lib/generators/services/angular-services/refs.d.ts +34 -0
  204. package/types/lib/generators/services/easy-network-stub/easy-network-stub-generator.d.ts +32 -0
  205. package/types/lib/generators/services/easy-network-stub/easy-network-stubs-generator.d.ts +25 -0
  206. package/types/lib/generators/services/easy-network-stub/index.d.ts +3 -0
  207. package/types/lib/generators/services/easy-network-stub/models.d.ts +51 -0
  208. package/types/lib/generators/services/easy-network-stub/refs.d.ts +49 -0
  209. package/types/lib/generators/services/fetch-clients/fetch-client-generator.d.ts +11 -22
  210. package/types/lib/generators/services/fetch-clients/models.d.ts +4 -1
  211. package/types/lib/generators/services/fetch-clients/refs.d.ts +23 -0
  212. package/types/lib/import-collection.d.ts +13 -5
  213. package/assets/client/fetch/types.ts +0 -9
  214. package/assets/service/angular/api-configuration.ts +0 -18
  215. package/assets/service/angular/base-service.ts +0 -29
  216. package/assets/service/angular/response-handlers.ts +0 -127
  217. package/assets/service/angular/strict-http-response.ts +0 -8
@@ -0,0 +1,22 @@
1
+ import { notNullish } from '@goast/core';
2
+ import { tsArgument } from './argument';
3
+ import { TsNode } from '../node';
4
+ import { writeTsNodes } from '../utils/write-ts-nodes';
5
+ export class TsCall extends TsNode {
6
+ constructor(options) {
7
+ var _a, _b;
8
+ super(options);
9
+ this.path = options.path.filter(notNullish);
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
+ writeTsNodes(builder, this.path, { separator: '.' });
14
+ if (this.arguments) {
15
+ tsArgument.write(builder, this.arguments);
16
+ }
17
+ }
18
+ }
19
+ const createCall = (path, args, options) => new TsCall(Object.assign(Object.assign({}, options), { path: Array.isArray(path) ? path : [path], arguments: args }));
20
+ export const tsCall = Object.assign(createCall, {
21
+ write: writeTsNodes,
22
+ });
@@ -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
+ });