@goast/typescript 0.6.1 → 0.6.3-beta.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (88) hide show
  1. package/LICENSE +21 -21
  2. package/assets/client/k6/request-builder.js +4 -0
  3. package/assets/client/k6/request-builder.ts +4 -0
  4. package/assets/stubs/easy-network-stub/easy-network-stub.utils.ts +2 -6
  5. package/package.json +2 -2
  6. package/src/mod.ts +0 -7
  7. package/src/src/assets.ts +0 -9
  8. package/src/src/ast/_index.ts +0 -54
  9. package/src/src/ast/common.ts +0 -1
  10. package/src/src/ast/index.ts +0 -1
  11. package/src/src/ast/node.ts +0 -10
  12. package/src/src/ast/nodes/argument.ts +0 -40
  13. package/src/src/ast/nodes/array-type.ts +0 -49
  14. package/src/src/ast/nodes/arrow-function.ts +0 -91
  15. package/src/src/ast/nodes/call.ts +0 -55
  16. package/src/src/ast/nodes/class.ts +0 -133
  17. package/src/src/ast/nodes/constructor-parameter.ts +0 -70
  18. package/src/src/ast/nodes/constructor.ts +0 -77
  19. package/src/src/ast/nodes/decorator.ts +0 -76
  20. package/src/src/ast/nodes/doc-tag.ts +0 -291
  21. package/src/src/ast/nodes/doc.ts +0 -102
  22. package/src/src/ast/nodes/enum-value.ts +0 -72
  23. package/src/src/ast/nodes/enum.ts +0 -77
  24. package/src/src/ast/nodes/export.ts +0 -54
  25. package/src/src/ast/nodes/function-type.ts +0 -60
  26. package/src/src/ast/nodes/function.ts +0 -107
  27. package/src/src/ast/nodes/generic-parameter.ts +0 -71
  28. package/src/src/ast/nodes/indexer.ts +0 -60
  29. package/src/src/ast/nodes/interface.ts +0 -117
  30. package/src/src/ast/nodes/intersection-type.ts +0 -67
  31. package/src/src/ast/nodes/lookup-type.ts +0 -53
  32. package/src/src/ast/nodes/method.ts +0 -138
  33. package/src/src/ast/nodes/object-type.ts +0 -52
  34. package/src/src/ast/nodes/object.ts +0 -48
  35. package/src/src/ast/nodes/parameter.ts +0 -85
  36. package/src/src/ast/nodes/property-accessor.ts +0 -173
  37. package/src/src/ast/nodes/property.ts +0 -192
  38. package/src/src/ast/nodes/reference.ts +0 -194
  39. package/src/src/ast/nodes/string.ts +0 -49
  40. package/src/src/ast/nodes/tuple.ts +0 -53
  41. package/src/src/ast/nodes/type-alias.ts +0 -75
  42. package/src/src/ast/nodes/typeof.ts +0 -42
  43. package/src/src/ast/nodes/types.ts +0 -40
  44. package/src/src/ast/nodes/union-type.ts +0 -62
  45. package/src/src/ast/nodes/variable.ts +0 -73
  46. package/src/src/ast/references/angular.ts +0 -24
  47. package/src/src/ast/references/easy-network-stub.ts +0 -21
  48. package/src/src/ast/references/index.ts +0 -5
  49. package/src/src/ast/references/k6.ts +0 -8
  50. package/src/src/ast/references/rxjs.ts +0 -7
  51. package/src/src/ast/references/typescript.ts +0 -35
  52. package/src/src/ast/utils/get-type-script-builder-options.ts +0 -19
  53. package/src/src/ast/utils/to-ts-node.ts +0 -27
  54. package/src/src/ast/utils/write-ts-generic-parameters.ts +0 -25
  55. package/src/src/ast/utils/write-ts-members.ts +0 -28
  56. package/src/src/ast/utils/write-ts-nodes.ts +0 -35
  57. package/src/src/ast/utils/write-ts-parameters.ts +0 -25
  58. package/src/src/common-results.ts +0 -26
  59. package/src/src/config.ts +0 -89
  60. package/src/src/file-builder.ts +0 -137
  61. package/src/src/generators/file-generator.ts +0 -15
  62. package/src/src/generators/index.ts +0 -6
  63. package/src/src/generators/models/index.ts +0 -3
  64. package/src/src/generators/models/model-generator.ts +0 -481
  65. package/src/src/generators/models/models-generator.ts +0 -108
  66. package/src/src/generators/models/models.ts +0 -121
  67. package/src/src/generators/services/angular-services/angular-service-generator.ts +0 -414
  68. package/src/src/generators/services/angular-services/angular-services-generator.ts +0 -295
  69. package/src/src/generators/services/angular-services/index.ts +0 -3
  70. package/src/src/generators/services/angular-services/models.ts +0 -277
  71. package/src/src/generators/services/angular-services/refs.ts +0 -54
  72. package/src/src/generators/services/easy-network-stub/easy-network-stub-generator.ts +0 -250
  73. package/src/src/generators/services/easy-network-stub/easy-network-stubs-generator.ts +0 -211
  74. package/src/src/generators/services/easy-network-stub/index.ts +0 -3
  75. package/src/src/generators/services/easy-network-stub/models.ts +0 -124
  76. package/src/src/generators/services/easy-network-stub/refs.ts +0 -45
  77. package/src/src/generators/services/fetch-clients/fetch-client-generator.ts +0 -285
  78. package/src/src/generators/services/fetch-clients/fetch-clients-generator.ts +0 -163
  79. package/src/src/generators/services/fetch-clients/index.ts +0 -3
  80. package/src/src/generators/services/fetch-clients/models.ts +0 -130
  81. package/src/src/generators/services/fetch-clients/refs.ts +0 -21
  82. package/src/src/generators/services/k6-clients/index.ts +0 -3
  83. package/src/src/generators/services/k6-clients/k6-client-generator.ts +0 -474
  84. package/src/src/generators/services/k6-clients/k6-clients-generator.ts +0 -171
  85. package/src/src/generators/services/k6-clients/models.ts +0 -247
  86. package/src/src/generators/services/k6-clients/refs.ts +0 -16
  87. package/src/src/import-collection.ts +0 -236
  88. package/src/src/utils.ts +0 -72
@@ -1,77 +0,0 @@
1
- import {
2
- type AppendValue,
3
- type AstNodeOptions,
4
- type BasicAppendValue,
5
- notNullish,
6
- type Nullable,
7
- type SourceBuilder,
8
- } from '@goast/core';
9
-
10
- import { TsNode } from '../node.js';
11
- import { writeTsNodes } from '../utils/write-ts-nodes.js';
12
- import type { TsConstructorParameter } from './constructor-parameter.js';
13
- import { type TsDecorator, tsDecorator } from './decorator.js';
14
- import { type TsDoc, tsDoc } from './doc.js';
15
- import { tsParameter } from './parameter.js';
16
-
17
- type Injects = 'params' | 'doc' | 'decorators' | 'body';
18
-
19
- type Options<TBuilder extends SourceBuilder, TInjects extends string = never> = AstNodeOptions<
20
- typeof TsNode<TBuilder, TInjects | Injects>,
21
- {
22
- doc?: Nullable<TsDoc<TBuilder>>;
23
- decorators?: Nullable<Nullable<TsDecorator<TBuilder>>[]>;
24
- parameters?: Nullable<Nullable<TsConstructorParameter<TBuilder> | BasicAppendValue<TBuilder>>[]>;
25
- body?: Nullable<AppendValue<TBuilder>>;
26
- }
27
- >;
28
-
29
- export class TsConstructor<TBuilder extends SourceBuilder, TInjects extends string = never> extends TsNode<
30
- TBuilder,
31
- TInjects | Injects
32
- > {
33
- public doc: TsDoc<TBuilder> | null;
34
- public decorators: TsDecorator<TBuilder>[];
35
- public parameters: (TsConstructorParameter<TBuilder> | BasicAppendValue<TBuilder>)[];
36
- public body: AppendValue<TBuilder> | null;
37
-
38
- constructor(options: Options<TBuilder, TInjects>) {
39
- super(options);
40
- this.doc = options.doc ?? null;
41
- this.decorators = options.decorators?.filter(notNullish) ?? [];
42
- this.parameters = options.parameters?.filter(notNullish) ?? [];
43
- this.body = options.body ?? null;
44
- }
45
-
46
- protected override onWrite(builder: TBuilder): void {
47
- builder.append(this.inject.beforeDoc);
48
- tsDoc.get(this.doc, { parameters: this.parameters })?.write(builder);
49
- builder.append(this.inject.afterDoc);
50
-
51
- builder.append(this.inject.beforeDecorators);
52
- tsDecorator.write(builder, this.decorators, { multiline: true });
53
- builder.append(this.inject.afterDecorators);
54
-
55
- builder.append('constructor');
56
- builder.append(this.inject.beforeParams);
57
- tsParameter.write(builder, this.parameters);
58
- builder.append(this.inject.afterParams);
59
- builder.append(' ');
60
-
61
- builder.append(this.inject.beforeBody);
62
- builder.parenthesize('{}', this.body, { multiline: !!this.body });
63
- builder.append(this.inject.afterBody);
64
-
65
- builder.appendLine();
66
- }
67
- }
68
-
69
- const createConstructor = <TBuilder extends SourceBuilder>(options?: Options<TBuilder>): TsConstructor<TBuilder> =>
70
- new TsConstructor<TBuilder>(options ?? {});
71
-
72
- export const tsConstructor: typeof createConstructor & { write: typeof writeTsNodes } = Object.assign(
73
- createConstructor,
74
- {
75
- write: writeTsNodes,
76
- },
77
- );
@@ -1,76 +0,0 @@
1
- import {
2
- type AppendValue,
3
- type AstNodeOptions,
4
- type BasicAppendValue,
5
- notNullish,
6
- type Nullable,
7
- type Prettify,
8
- type SingleOrMultiple,
9
- type SourceBuilder,
10
- toArray,
11
- } from '@goast/core';
12
-
13
- import { TsNode } from '../node.js';
14
- import { writeTsNode } from '../utils/write-ts-nodes.js';
15
- import { type TsArgument, tsArgument } from './argument.js';
16
- import type { TsReference } from './reference.js';
17
- import type { TsValue } from './types.js';
18
-
19
- type Injects = 'function' | 'arguments';
20
-
21
- type Options<TBuilder extends SourceBuilder, TInjects extends string = never> = AstNodeOptions<
22
- typeof TsNode<TBuilder, TInjects | Injects>,
23
- {
24
- function: TsReference<TBuilder> | BasicAppendValue<TBuilder>;
25
- arguments?: Nullable<Nullable<TsArgument<TBuilder> | TsValue<TBuilder>>[]>;
26
- }
27
- >;
28
-
29
- export class TsDecorator<TBuilder extends SourceBuilder, TInjects extends string = never> extends TsNode<
30
- TBuilder,
31
- TInjects | Injects
32
- > {
33
- public function: TsReference<TBuilder> | BasicAppendValue<TBuilder>;
34
- public arguments: (TsArgument<TBuilder> | TsValue<TBuilder>)[] | null;
35
-
36
- constructor(options: Options<TBuilder, TInjects>) {
37
- super(options);
38
- this.function = options.function;
39
- this.arguments = options.arguments?.filter(notNullish) ?? null;
40
- }
41
-
42
- protected override onWrite(builder: TBuilder): void {
43
- builder.append('@');
44
- builder.append(this.inject.beforeFunction);
45
- writeTsNode(builder, this.function);
46
- builder.append(this.inject.afterFunction);
47
-
48
- if (this.arguments) {
49
- builder.append(this.inject.beforeArguments);
50
- tsArgument.write(builder, this.arguments);
51
- builder.append(this.inject.afterArguments);
52
- }
53
- }
54
- }
55
-
56
- const createDecorator = <TBuilder extends SourceBuilder>(
57
- fn: Options<TBuilder>['function'],
58
- args?: Options<TBuilder>['arguments'],
59
- options?: Prettify<Omit<Options<TBuilder>, 'function' | 'arguments'>>,
60
- ): TsDecorator<TBuilder> => new TsDecorator<TBuilder>({ ...options, function: fn, arguments: args });
61
-
62
- const writeDecorators = <TBuilder extends SourceBuilder>(
63
- builder: TBuilder,
64
- nodes: SingleOrMultiple<Nullable<TsDecorator<TBuilder> | AppendValue<TBuilder>>>,
65
- options?: { multiline?: boolean },
66
- ): void => {
67
- const filteredNodes = toArray(nodes).filter(notNullish);
68
- builder.forEach(filteredNodes, (b, d) => {
69
- writeTsNode(b, d);
70
- b.append(options?.multiline ? '\n' : ' ');
71
- });
72
- };
73
-
74
- export const tsDecorator: typeof createDecorator & { write: typeof writeDecorators } = Object.assign(createDecorator, {
75
- write: writeDecorators,
76
- });
@@ -1,291 +0,0 @@
1
- import {
2
- type AstNodeOptions,
3
- type BasicAppendValue,
4
- basicAppendValueGroup,
5
- notNullish,
6
- type Nullable,
7
- type ParametersWithOverloads,
8
- type Prettify,
9
- type SourceBuilder,
10
- type StringSuggestions,
11
- } from '@goast/core';
12
-
13
- import { isTypeScriptAppendValue } from '../../file-builder.js';
14
- import { TsNode } from '../node.js';
15
- import { writeTsNode, writeTsNodes } from '../utils/write-ts-nodes.js';
16
- import type { TsType } from './types.js';
17
-
18
- type Injects = never;
19
-
20
- type Options<TBuilder extends SourceBuilder, TInjects extends string = never> = AstNodeOptions<
21
- typeof TsNode<TBuilder, TInjects | Injects>,
22
- {
23
- tag: string;
24
- type?: Nullable<TsType<TBuilder>>;
25
- text?: Nullable<BasicAppendValue<TBuilder>>;
26
- }
27
- >;
28
-
29
- export class TsDocTag<TBuilder extends SourceBuilder, TInjects extends string = never> extends TsNode<
30
- TBuilder,
31
- TInjects | Injects
32
- > {
33
- public tag: string;
34
- public type: TsType<TBuilder> | null;
35
- public text: BasicAppendValue<TBuilder> | null;
36
-
37
- constructor(options: Options<TBuilder, TInjects>) {
38
- super(options);
39
- this.tag = options.tag;
40
- this.type = options.type ?? null;
41
- this.text = options.text ?? null;
42
- }
43
-
44
- protected override onWrite(builder: TBuilder): void {
45
- builder.append('@', this.tag);
46
-
47
- if (this.type) {
48
- builder.append(' ');
49
- builder.parenthesize('{}', (b) => writeTsNode(b, this.type));
50
- }
51
-
52
- if (this.text) {
53
- builder.append(' ', this.text);
54
- }
55
- }
56
- }
57
-
58
- type _TsDocTagOpt<TBuilder extends SourceBuilder> = Prettify<Omit<Options<TBuilder>, 'tag'>>;
59
-
60
- type _TsDocTagArgsMap<TBuilder extends SourceBuilder> =
61
- & {
62
- access(
63
- access: StringSuggestions<'package' | 'private' | 'protected' | 'public'>,
64
- options?: _TsDocTagOpt<TBuilder>,
65
- ): never;
66
- author(authorName: BasicAppendValue<TBuilder>, options?: _TsDocTagOpt<TBuilder>): never;
67
- author(
68
- authorName: BasicAppendValue<TBuilder>,
69
- emailAddress: BasicAppendValue<TBuilder>,
70
- options?: _TsDocTagOpt<TBuilder>,
71
- ): never;
72
- borrows(
73
- thatNamepath: BasicAppendValue<TBuilder>,
74
- thisNamepath: BasicAppendValue<TBuilder>,
75
- options?: _TsDocTagOpt<TBuilder>,
76
- ): never;
77
- params(
78
- paramName: BasicAppendValue<TBuilder>,
79
- paramDescription: BasicAppendValue<TBuilder>,
80
- options?: _TsDocTagOpt<TBuilder>,
81
- ): never;
82
- example(
83
- caption: BasicAppendValue<TBuilder>,
84
- code: BasicAppendValue<TBuilder>,
85
- options?: _TsDocTagOpt<TBuilder>,
86
- ): never;
87
- example(code: BasicAppendValue<TBuilder>, options?: _TsDocTagOpt<TBuilder>): never;
88
- exports(
89
- moduleName: BasicAppendValue<TBuilder>,
90
- exportName: BasicAppendValue<TBuilder>,
91
- options?: _TsDocTagOpt<TBuilder>,
92
- ): never;
93
- kind(
94
- kindName: StringSuggestions<
95
- | 'class'
96
- | 'constant'
97
- | 'event'
98
- | 'external'
99
- | 'file'
100
- | 'function'
101
- | 'member'
102
- | 'mixin'
103
- | 'module'
104
- | 'namespace'
105
- | 'typedef'
106
- >,
107
- options?: _TsDocTagOpt<TBuilder>,
108
- ): never;
109
- license(identifier: BasicAppendValue<TBuilder>, options?: _TsDocTagOpt<TBuilder>): never;
110
- listens(eventName: BasicAppendValue<TBuilder>, options?: _TsDocTagOpt<TBuilder>): never;
111
- mixes(otherObjectPath: BasicAppendValue<TBuilder>, options?: _TsDocTagOpt<TBuilder>): never;
112
- mixin(mixinName: BasicAppendValue<TBuilder>, options?: _TsDocTagOpt<TBuilder>): never;
113
- requires(moduleName: BasicAppendValue<TBuilder>, options?: _TsDocTagOpt<TBuilder>): never;
114
- variation(variationNumber: BasicAppendValue<TBuilder>, options?: _TsDocTagOpt<TBuilder>): never;
115
- }
116
- & {
117
- [K in 'virtual' | 'abstract']: (options?: _TsDocTagOpt<TBuilder>) => never;
118
- }
119
- & {
120
- [K in 'alias' | 'augments' | 'callback' | 'extends' | 'lends' | 'name' | 'see' | 'this']: (
121
- namePath: BasicAppendValue<TBuilder>,
122
- options?: _TsDocTagOpt<TBuilder>,
123
- ) => never;
124
- }
125
- & {
126
- [
127
- K in
128
- | 'async'
129
- | 'generator'
130
- | 'global'
131
- | 'hideconstructor'
132
- | 'ignore'
133
- | 'inheritdoc'
134
- | 'inner'
135
- | 'instance'
136
- | 'override'
137
- | 'static'
138
- | 'enum'
139
- | 'package'
140
- | 'private'
141
- | 'protected'
142
- | 'implements'
143
- | 'type'
144
- ]: (options?: _TsDocTagOpt<TBuilder>) => never;
145
- }
146
- & {
147
- [
148
- K in
149
- | 'class'
150
- | 'constructor'
151
- | 'const'
152
- | 'function'
153
- | 'func'
154
- | 'method'
155
- | 'constant'
156
- | 'member'
157
- | 'constructs'
158
- | 'interface'
159
- | 'var'
160
- | 'yield'
161
- | 'yields'
162
- | 'module'
163
- | 'namespace'
164
- | 'typedef'
165
- ]: {
166
- (name: BasicAppendValue<TBuilder>, options?: _TsDocTagOpt<TBuilder>): never;
167
- (options?: _TsDocTagOpt<TBuilder>): never;
168
- };
169
- }
170
- & {
171
- [
172
- K in
173
- | 'return'
174
- | 'returns'
175
- | 'throws'
176
- | 'exception'
177
- | 'classdesc'
178
- | 'copyright'
179
- | 'deprecated'
180
- | 'desc'
181
- | 'description'
182
- | 'file'
183
- | 'fileoverview'
184
- | 'overview'
185
- | 'public'
186
- | 'readonly'
187
- | 'since'
188
- | 'summary'
189
- | 'todo'
190
- | 'tutorial'
191
- | 'version'
192
- ]: {
193
- (description: BasicAppendValue<TBuilder>, options?: _TsDocTagOpt<TBuilder>): never;
194
- (options?: _TsDocTagOpt<TBuilder>): never;
195
- };
196
- }
197
- & {
198
- [K in 'default' | 'defaultvalue']: {
199
- (value: BasicAppendValue<TBuilder>, options?: _TsDocTagOpt<TBuilder>): never;
200
- (options?: _TsDocTagOpt<TBuilder>): never;
201
- };
202
- }
203
- & {
204
- [K in 'event' | 'fires']: (
205
- className: BasicAppendValue<TBuilder>,
206
- eventName: BasicAppendValue<TBuilder>,
207
- options?: _TsDocTagOpt<TBuilder>,
208
- ) => never;
209
- }
210
- & {
211
- [K in 'external' | 'host']: (nameOfExternal: BasicAppendValue<TBuilder>, options?: _TsDocTagOpt<TBuilder>) => never;
212
- }
213
- & {
214
- [K in 'memberof' | 'memberof!']: (
215
- parentNamepath: BasicAppendValue<TBuilder>,
216
- options?: _TsDocTagOpt<TBuilder>,
217
- ) => never;
218
- }
219
- & {
220
- [K in 'param' | 'arg' | 'argument' | 'prop' | 'property' | 'template']: {
221
- (
222
- name: BasicAppendValue<TBuilder>,
223
- description: BasicAppendValue<TBuilder>,
224
- options?: _TsDocTagOpt<TBuilder>,
225
- ): never;
226
- (name: BasicAppendValue<TBuilder>, options?: _TsDocTagOpt<TBuilder>): never;
227
- };
228
- };
229
-
230
- type _TsDocTagArgs<
231
- TTagName extends StringSuggestions<keyof _TsDocTagArgsMap<TBuilder>>,
232
- TBuilder extends SourceBuilder,
233
- > = TTagName extends keyof _TsDocTagArgsMap<TBuilder>
234
- // deno-lint-ignore no-explicit-any
235
- ? _TsDocTagArgsMap<TBuilder>[TTagName] extends (...args: any[]) => any
236
- ? ParametersWithOverloads<_TsDocTagArgsMap<TBuilder>[TTagName]>
237
- : never
238
- : [options?: _TsDocTagOpt<TBuilder>];
239
-
240
- function createDocTag<
241
- TTagName extends StringSuggestions<keyof _TsDocTagArgsMap<TBuilder>>,
242
- TBuilder extends SourceBuilder,
243
- >(
244
- tag: TTagName,
245
- ...args: _TsDocTagArgs<TTagName, TBuilder>
246
- ): TsDocTag<TBuilder>;
247
- // deno-lint-ignore no-explicit-any
248
- function createDocTag<TBuilder extends SourceBuilder>(tag: string, ...args: any[]): TsDocTag<TBuilder> {
249
- let opt: _TsDocTagOpt<TBuilder> = {};
250
- if (args.length > 0) {
251
- const lastArg = args[args.length - 1];
252
- if (!isTypeScriptAppendValue(lastArg) && !!lastArg) {
253
- opt = args.pop() as _TsDocTagOpt<TBuilder>;
254
- }
255
- }
256
-
257
- let params = args as BasicAppendValue<TBuilder>[];
258
-
259
- if (tag === 'author' && params.length === 2) {
260
- params[1] = `<${params[1]}>`;
261
- }
262
-
263
- if (tag === 'borrows') {
264
- params.splice(1, 0, 'as');
265
- }
266
-
267
- if (tag === 'example') {
268
- if (typeof params[0] === 'string') {
269
- params[0] = `<caption>${params[0]}</caption>`;
270
- }
271
- if (params[1] && isTypeScriptAppendValue(params[1])) {
272
- params.splice(1, 0, '\n');
273
- }
274
- }
275
-
276
- if ((tag === 'event' || tag === 'fires') && typeof params[0] === 'string' && typeof params[1] === 'string') {
277
- params.splice(0, 2, `${params[0]}#${params[1]}`);
278
- }
279
-
280
- params = [...params, opt.text].filter(notNullish);
281
- return new TsDocTag({
282
- tag,
283
- type: opt.type,
284
- text: params.length > 0 ? basicAppendValueGroup<TBuilder>(params, ' ') : null,
285
- inject: opt.inject,
286
- });
287
- }
288
-
289
- export const tsDocTag: typeof createDocTag & { write: typeof writeTsNodes } = Object.assign(createDocTag, {
290
- write: writeTsNodes,
291
- });
@@ -1,102 +0,0 @@
1
- import {
2
- type AstNodeOptions,
3
- type BasicAppendValue,
4
- createOverwriteProxy,
5
- getIsInstanceOf,
6
- notNullish,
7
- type Nullable,
8
- type SourceBuilder,
9
- } from '@goast/core';
10
-
11
- import { TsNode } from '../node.js';
12
- import { writeTsNodes } from '../utils/write-ts-nodes.js';
13
- import { type TsDocTag, tsDocTag } from './doc-tag.js';
14
- import { TsGenericParameter } from './generic-parameter.js';
15
- import { TsParameter } from './parameter.js';
16
-
17
- type Injects = never;
18
-
19
- type Options<TBuilder extends SourceBuilder, TInjects extends string = never> = AstNodeOptions<
20
- typeof TsNode<TBuilder, TInjects | Injects>,
21
- {
22
- description?: Nullable<BasicAppendValue<TBuilder>>;
23
- tags?: Nullable<Nullable<TsDocTag<TBuilder>>[]>;
24
- }
25
- >;
26
-
27
- export class TsDoc<TBuilder extends SourceBuilder, TInjects extends string = never>
28
- extends TsNode<TBuilder, TInjects | Injects> {
29
- public description: BasicAppendValue<TBuilder> | null;
30
- public tags: TsDocTag<TBuilder>[];
31
-
32
- constructor(options: Options<TBuilder, TInjects>) {
33
- super(options);
34
- this.description = options.description ?? null;
35
- this.tags = options.tags?.filter(notNullish) ?? [];
36
- }
37
-
38
- protected override onWrite(builder: TBuilder): void {
39
- if (!this.description && this.tags.length === 0) {
40
- return;
41
- }
42
-
43
- builder
44
- .ensureCurrentLineEmpty()
45
- .parenthesize(
46
- ['/**', ' */'],
47
- (b) =>
48
- b.appendWithLinePrefix(' * ', (b) => {
49
- if (this.description) {
50
- b.append(this.description);
51
- }
52
-
53
- if (this.tags.length > 0) {
54
- b.ensurePreviousLineEmpty();
55
- tsDocTag.write(b, this.tags, { separator: '\n' });
56
- }
57
- }),
58
- { multiline: true, indent: false },
59
- )
60
- .appendLine();
61
- }
62
- }
63
-
64
- const createDoc = <TBuilder extends SourceBuilder>(options?: Options<TBuilder>): TsDoc<TBuilder> =>
65
- new TsDoc<TBuilder>(options ?? {});
66
-
67
- function getDoc<TBuilder extends SourceBuilder>(
68
- baseDoc: TsDoc<TBuilder> | null,
69
- options: {
70
- parameters?: Nullable<Nullable<TsParameter<TBuilder> | BasicAppendValue<TBuilder>>[]>;
71
- generics?: Nullable<Nullable<TsGenericParameter<TBuilder> | BasicAppendValue<TBuilder>>[]>;
72
- },
73
- ): TsDoc<TBuilder> | null {
74
- const paramsWithDesc = options.parameters
75
- ?.filter(getIsInstanceOf(TsParameter<TBuilder>))
76
- .filter((x): x is TsParameter<TBuilder> & { description: NonNullable<unknown> } => !!x.description) ?? [];
77
- const genericsWithDesc = options.generics
78
- ?.filter(getIsInstanceOf(TsGenericParameter<TBuilder>))
79
- .filter((x): x is TsGenericParameter<TBuilder> & { description: NonNullable<unknown> } => !!x.description) ?? [];
80
- if (paramsWithDesc.length === 0 && genericsWithDesc.length === 0) {
81
- return baseDoc;
82
- }
83
- const doc = baseDoc ? createOverwriteProxy(baseDoc) : createDoc<TBuilder>();
84
- const paramTags = paramsWithDesc.map<TsDocTag<TBuilder>>((p) => tsDocTag('param', p.name, p.description));
85
- const genericTags = genericsWithDesc.map<TsDocTag<TBuilder>>((p) => tsDocTag('template', p.name, p.description));
86
- doc.tags.splice(0, 0, ...genericTags, ...paramTags);
87
- return doc;
88
- }
89
-
90
- function isDocEmpty(doc: Nullable<TsDoc<SourceBuilder>>): boolean {
91
- return !doc || (!doc.description && doc.tags.length === 0);
92
- }
93
-
94
- export const tsDoc: typeof createDoc & {
95
- write: typeof writeTsNodes;
96
- get: typeof getDoc;
97
- isEmpty: typeof isDocEmpty;
98
- } = Object.assign(createDoc, {
99
- write: writeTsNodes,
100
- get: getDoc,
101
- isEmpty: isDocEmpty,
102
- });
@@ -1,72 +0,0 @@
1
- import type {
2
- AppendValue,
3
- AstNodeOptions,
4
- BasicAppendValue,
5
- Nullable,
6
- Prettify,
7
- SingleOrMultiple,
8
- SourceBuilder,
9
- } from '@goast/core';
10
-
11
- import { TsNode } from '../node.js';
12
- import { writeTsNode, writeTsNodes } from '../utils/write-ts-nodes.js';
13
- import type { TsDoc } from './doc.js';
14
- import type { TsString } from './string.js';
15
-
16
- type Injects = 'doc' | 'name' | 'value';
17
-
18
- type Options<TBuilder extends SourceBuilder, TInjects extends string = never> = AstNodeOptions<
19
- typeof TsNode<TBuilder, TInjects | Injects>,
20
- {
21
- doc?: Nullable<TsDoc<TBuilder>>;
22
- name: string;
23
- value?: Nullable<TsString<TBuilder> | BasicAppendValue<TBuilder>>;
24
- }
25
- >;
26
-
27
- export class TsEnumValue<TBuilder extends SourceBuilder, TInjects extends string = never> extends TsNode<
28
- TBuilder,
29
- TInjects | Injects
30
- > {
31
- public doc: TsDoc<TBuilder> | null;
32
- public name: string;
33
- public value: TsString<TBuilder> | BasicAppendValue<TBuilder> | null;
34
-
35
- constructor(options: Options<TBuilder, TInjects>) {
36
- super(options);
37
- this.name = options.name;
38
- this.doc = options.doc ?? null;
39
- this.value = options.value ?? null;
40
- }
41
-
42
- protected override onWrite(builder: TBuilder): void {
43
- builder.append(this.inject.beforeDoc);
44
- this.doc?.write(builder);
45
- builder.append(this.inject.afterDoc);
46
-
47
- builder.append(this.inject.beforeName, this.name, this.inject.afterName);
48
-
49
- if (this.value) {
50
- builder.append(' = ');
51
- builder.append(this.inject.beforeValue);
52
- writeTsNode(builder, this.value);
53
- builder.append(this.inject.afterValue);
54
- }
55
- }
56
- }
57
-
58
- const createEnumValue = <TBuilder extends SourceBuilder>(
59
- name: Options<TBuilder>['name'],
60
- options?: Prettify<Omit<Options<TBuilder>, 'name'>>,
61
- ): TsEnumValue<TBuilder> => new TsEnumValue<TBuilder>({ ...options, name });
62
-
63
- const writeEnumValues = <TBuilder extends SourceBuilder>(
64
- builder: TBuilder,
65
- nodes: SingleOrMultiple<Nullable<TsEnumValue<TBuilder> | AppendValue<TBuilder>>>,
66
- ): void => {
67
- writeTsNodes(builder, nodes, { separator: ',\n' });
68
- };
69
-
70
- export const tsEnumValue: typeof createEnumValue & { write: typeof writeEnumValues } = Object.assign(createEnumValue, {
71
- write: writeEnumValues,
72
- });
@@ -1,77 +0,0 @@
1
- import { type AstNodeOptions, notNullish, type Nullable, type Prettify, type SourceBuilder } from '@goast/core';
2
-
3
- import { TsNode } from '../node.js';
4
- import { writeTsNodes } from '../utils/write-ts-nodes.js';
5
- import type { TsDoc } from './doc.js';
6
- import { type TsEnumValue, tsEnumValue } from './enum-value.js';
7
-
8
- type Injects = 'doc' | 'modifiers' | 'name' | 'body' | 'members';
9
-
10
- type Options<TBuilder extends SourceBuilder, TInjects extends string = never> = AstNodeOptions<
11
- typeof TsNode<TBuilder, TInjects | Injects>,
12
- {
13
- doc?: Nullable<TsDoc<TBuilder>>;
14
- export?: Nullable<boolean>;
15
- const?: Nullable<boolean>;
16
- name: string;
17
- members?: Nullable<Nullable<TsEnumValue<TBuilder>>[]>;
18
- }
19
- >;
20
-
21
- export class TsEnum<TBuilder extends SourceBuilder, TInjects extends string = never> extends TsNode<
22
- TBuilder,
23
- TInjects | Injects
24
- > {
25
- public doc: TsDoc<TBuilder> | null;
26
- public export: boolean;
27
- public const: boolean;
28
- public name: string;
29
- public members: TsEnumValue<TBuilder>[];
30
-
31
- constructor(options: Options<TBuilder, TInjects>) {
32
- super(options);
33
- this.doc = options.doc ?? null;
34
- this.export = options.export ?? false;
35
- this.const = options.const ?? false;
36
- this.name = options.name;
37
- this.members = options.members?.filter(notNullish) ?? [];
38
- }
39
-
40
- protected override onWrite(builder: TBuilder): void {
41
- builder.append(this.inject.beforeDoc);
42
- this.doc?.write(builder);
43
- builder.append(this.inject.afterDoc);
44
-
45
- builder.append(this.inject.beforeModifiers);
46
- if (this.export) builder.append('export ');
47
- if (this.const) builder.append('const ');
48
- builder.append(this.inject.afterModifiers);
49
-
50
- builder.append('enum ');
51
- builder.append(this.inject.beforeName, this.name, this.inject.afterName);
52
- builder.append(' ');
53
-
54
- builder.append(this.inject.beforeBody);
55
- builder.parenthesize(
56
- '{}',
57
- (b) => {
58
- b.append(this.inject.beforeMembers);
59
- tsEnumValue.write(b, this.members);
60
- b.append(this.inject.afterMembers);
61
- },
62
- { multiline: this.members.length > 0 },
63
- );
64
- builder.append(this.inject.afterBody);
65
-
66
- builder.appendLine();
67
- }
68
- }
69
-
70
- const createEnum = <TBuilder extends SourceBuilder>(
71
- name: Options<TBuilder>['name'],
72
- options?: Prettify<Omit<Options<TBuilder>, 'name'>>,
73
- ): TsEnum<TBuilder> => new TsEnum<TBuilder>({ ...options, name });
74
-
75
- export const tsEnum: typeof createEnum & { write: typeof writeTsNodes } = Object.assign(createEnum, {
76
- write: writeTsNodes,
77
- });