@goast/typescript 0.5.3 → 0.6.0-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 (97) hide show
  1. package/LICENSE +21 -21
  2. package/esm/src/file-builder.d.ts.map +1 -1
  3. package/esm/src/file-builder.js +2 -5
  4. package/esm/src/generators/models/model-generator.d.ts.map +1 -1
  5. package/esm/src/generators/models/model-generator.js +6 -2
  6. package/esm/src/generators/services/k6-clients/k6-client-generator.d.ts.map +1 -1
  7. package/esm/src/generators/services/k6-clients/k6-client-generator.js +2 -1
  8. package/package.json +3 -3
  9. package/script/src/file-builder.d.ts.map +1 -1
  10. package/script/src/file-builder.js +1 -5
  11. package/script/src/generators/models/model-generator.d.ts.map +1 -1
  12. package/script/src/generators/models/model-generator.js +5 -1
  13. package/script/src/generators/services/k6-clients/k6-client-generator.d.ts.map +1 -1
  14. package/script/src/generators/services/k6-clients/k6-client-generator.js +2 -1
  15. package/src/mod.ts +0 -7
  16. package/src/src/assets.ts +0 -9
  17. package/src/src/ast/_index.ts +0 -54
  18. package/src/src/ast/common.ts +0 -1
  19. package/src/src/ast/index.ts +0 -1
  20. package/src/src/ast/node.ts +0 -10
  21. package/src/src/ast/nodes/argument.ts +0 -40
  22. package/src/src/ast/nodes/array-type.ts +0 -49
  23. package/src/src/ast/nodes/arrow-function.ts +0 -91
  24. package/src/src/ast/nodes/call.ts +0 -55
  25. package/src/src/ast/nodes/class.ts +0 -133
  26. package/src/src/ast/nodes/constructor-parameter.ts +0 -70
  27. package/src/src/ast/nodes/constructor.ts +0 -77
  28. package/src/src/ast/nodes/decorator.ts +0 -76
  29. package/src/src/ast/nodes/doc-tag.ts +0 -291
  30. package/src/src/ast/nodes/doc.ts +0 -102
  31. package/src/src/ast/nodes/enum-value.ts +0 -72
  32. package/src/src/ast/nodes/enum.ts +0 -77
  33. package/src/src/ast/nodes/export.ts +0 -54
  34. package/src/src/ast/nodes/function-type.ts +0 -60
  35. package/src/src/ast/nodes/function.ts +0 -107
  36. package/src/src/ast/nodes/generic-parameter.ts +0 -71
  37. package/src/src/ast/nodes/indexer.ts +0 -60
  38. package/src/src/ast/nodes/interface.ts +0 -117
  39. package/src/src/ast/nodes/intersection-type.ts +0 -67
  40. package/src/src/ast/nodes/lookup-type.ts +0 -53
  41. package/src/src/ast/nodes/method.ts +0 -138
  42. package/src/src/ast/nodes/object-type.ts +0 -52
  43. package/src/src/ast/nodes/object.ts +0 -48
  44. package/src/src/ast/nodes/parameter.ts +0 -85
  45. package/src/src/ast/nodes/property-accessor.ts +0 -173
  46. package/src/src/ast/nodes/property.ts +0 -192
  47. package/src/src/ast/nodes/reference.ts +0 -194
  48. package/src/src/ast/nodes/string.ts +0 -49
  49. package/src/src/ast/nodes/tuple.ts +0 -53
  50. package/src/src/ast/nodes/type-alias.ts +0 -75
  51. package/src/src/ast/nodes/typeof.ts +0 -42
  52. package/src/src/ast/nodes/types.ts +0 -40
  53. package/src/src/ast/nodes/union-type.ts +0 -62
  54. package/src/src/ast/nodes/variable.ts +0 -73
  55. package/src/src/ast/references/angular.ts +0 -24
  56. package/src/src/ast/references/easy-network-stub.ts +0 -21
  57. package/src/src/ast/references/index.ts +0 -5
  58. package/src/src/ast/references/k6.ts +0 -8
  59. package/src/src/ast/references/rxjs.ts +0 -7
  60. package/src/src/ast/references/typescript.ts +0 -35
  61. package/src/src/ast/utils/get-type-script-builder-options.ts +0 -19
  62. package/src/src/ast/utils/to-ts-node.ts +0 -27
  63. package/src/src/ast/utils/write-ts-generic-parameters.ts +0 -25
  64. package/src/src/ast/utils/write-ts-members.ts +0 -28
  65. package/src/src/ast/utils/write-ts-nodes.ts +0 -35
  66. package/src/src/ast/utils/write-ts-parameters.ts +0 -25
  67. package/src/src/common-results.ts +0 -26
  68. package/src/src/config.ts +0 -89
  69. package/src/src/file-builder.ts +0 -136
  70. package/src/src/generators/file-generator.ts +0 -15
  71. package/src/src/generators/index.ts +0 -6
  72. package/src/src/generators/models/index.ts +0 -3
  73. package/src/src/generators/models/model-generator.ts +0 -469
  74. package/src/src/generators/models/models-generator.ts +0 -108
  75. package/src/src/generators/models/models.ts +0 -121
  76. package/src/src/generators/services/angular-services/angular-service-generator.ts +0 -406
  77. package/src/src/generators/services/angular-services/angular-services-generator.ts +0 -295
  78. package/src/src/generators/services/angular-services/index.ts +0 -3
  79. package/src/src/generators/services/angular-services/models.ts +0 -277
  80. package/src/src/generators/services/angular-services/refs.ts +0 -54
  81. package/src/src/generators/services/easy-network-stub/easy-network-stub-generator.ts +0 -242
  82. package/src/src/generators/services/easy-network-stub/easy-network-stubs-generator.ts +0 -211
  83. package/src/src/generators/services/easy-network-stub/index.ts +0 -3
  84. package/src/src/generators/services/easy-network-stub/models.ts +0 -124
  85. package/src/src/generators/services/easy-network-stub/refs.ts +0 -45
  86. package/src/src/generators/services/fetch-clients/fetch-client-generator.ts +0 -275
  87. package/src/src/generators/services/fetch-clients/fetch-clients-generator.ts +0 -163
  88. package/src/src/generators/services/fetch-clients/index.ts +0 -3
  89. package/src/src/generators/services/fetch-clients/models.ts +0 -130
  90. package/src/src/generators/services/fetch-clients/refs.ts +0 -21
  91. package/src/src/generators/services/k6-clients/index.ts +0 -3
  92. package/src/src/generators/services/k6-clients/k6-client-generator.ts +0 -465
  93. package/src/src/generators/services/k6-clients/k6-clients-generator.ts +0 -171
  94. package/src/src/generators/services/k6-clients/models.ts +0 -247
  95. package/src/src/generators/services/k6-clients/refs.ts +0 -16
  96. package/src/src/import-collection.ts +0 -236
  97. package/src/src/utils.ts +0 -72
@@ -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
- });
@@ -1,54 +0,0 @@
1
- import type { AstNodeOptions, Nullable, Prettify, SourceBuilder } from '@goast/core';
2
-
3
- import type { TypeScriptExportType } from '../../common-results.js';
4
- import { TypeScriptFileBuilder } from '../../file-builder.js';
5
- import { TsNode } from '../node.js';
6
- import { writeTsNodes } from '../utils/write-ts-nodes.js';
7
-
8
- type Injects = never;
9
-
10
- type Options<TBuilder extends SourceBuilder, TInjects extends string = never> = AstNodeOptions<
11
- typeof TsNode<TBuilder, TInjects | Injects>,
12
- {
13
- name: string;
14
- filePath: string;
15
- kind?: Nullable<TypeScriptExportType>;
16
- }
17
- >;
18
-
19
- export class TsExport<TBuilder extends SourceBuilder, TInjects extends string = never> extends TsNode<
20
- TBuilder,
21
- TInjects | Injects
22
- > {
23
- public name: string;
24
- public filePath: string;
25
- public kind: TypeScriptExportType;
26
-
27
- constructor(options: Options<TBuilder, TInjects>) {
28
- super(options);
29
- this.name = options.name;
30
- this.filePath = options.filePath;
31
- this.kind = options.kind ?? 'export';
32
- }
33
-
34
- protected override onWrite(builder: TBuilder): void {
35
- if (builder instanceof TypeScriptFileBuilder) {
36
- builder.addExport(this.name, this.filePath, { type: this.kind });
37
- } else {
38
- builder.appendLine(
39
- this.kind === 'type-export' ? 'export type' : 'export',
40
- ` { ${this.name} } from '${this.filePath}';`,
41
- );
42
- }
43
- }
44
- }
45
-
46
- export const createExport = <TBuilder extends SourceBuilder>(
47
- name: Options<TBuilder>['name'],
48
- filePath: Options<TBuilder>['filePath'],
49
- options?: Prettify<Omit<Options<TBuilder>, 'name' | 'filePath'>>,
50
- ): TsExport<TBuilder> => new TsExport<TBuilder>({ ...options, name, filePath });
51
-
52
- export const tsExport: typeof createExport & { write: typeof writeTsNodes } = Object.assign(createExport, {
53
- write: writeTsNodes,
54
- });
@@ -1,60 +0,0 @@
1
- import { type AstNodeOptions, type BasicAppendValue, notNullish, type Nullable, type SourceBuilder } from '@goast/core';
2
-
3
- import { TsNode } from '../node.js';
4
- import { writeTsNode, writeTsNodes } from '../utils/write-ts-nodes.js';
5
- import { type TsGenericParameter, tsGenericParameter } from './generic-parameter.js';
6
- import { type TsParameter, tsParameter } from './parameter.js';
7
- import type { TsType } from './types.js';
8
-
9
- type Injects = 'generics' | 'params' | 'returnType';
10
-
11
- type Options<TBuilder extends SourceBuilder, TInjects extends string = never> = AstNodeOptions<
12
- typeof TsNode<TBuilder, TInjects | Injects>,
13
- {
14
- generics?: Nullable<Nullable<TsGenericParameter<TBuilder> | BasicAppendValue<TBuilder>>[]>;
15
- parameters?: Nullable<Nullable<TsParameter<TBuilder> | BasicAppendValue<TBuilder>>[]>;
16
- returnType?: Nullable<TsType<TBuilder>>;
17
- }
18
- >;
19
-
20
- export class TsFunctionType<TBuilder extends SourceBuilder, TInjects extends string = never> extends TsNode<
21
- TBuilder,
22
- TInjects | Injects
23
- > {
24
- public generics: (TsGenericParameter<TBuilder> | BasicAppendValue<TBuilder>)[];
25
- public parameters: (TsParameter<TBuilder> | BasicAppendValue<TBuilder>)[];
26
- public returnType: TsType<TBuilder> | null;
27
-
28
- constructor(options: Options<TBuilder, TInjects>) {
29
- super(options);
30
- this.generics = options.generics?.filter(notNullish) ?? [];
31
- this.parameters = options.parameters?.filter(notNullish) ?? [];
32
- this.returnType = options.returnType ?? null;
33
- }
34
-
35
- protected override onWrite(builder: TBuilder): void {
36
- builder.append(this.inject.beforeGenerics);
37
- tsGenericParameter.write(builder, this.generics);
38
- builder.append(this.inject.afterGenerics);
39
-
40
- builder.append(this.inject.beforeParams);
41
- tsParameter.write(builder, this.parameters);
42
- builder.append(this.inject.afterParams);
43
-
44
- builder.append(' => ');
45
-
46
- builder.append(this.inject.beforeReturnType);
47
- writeTsNode(builder, this.returnType ?? 'void');
48
- builder.append(this.inject.afterReturnType);
49
- }
50
- }
51
-
52
- const createFunctionType = <TBuilder extends SourceBuilder>(options?: Options<TBuilder>): TsFunctionType<TBuilder> =>
53
- new TsFunctionType<TBuilder>(options ?? {});
54
-
55
- export const tsFunctionType: typeof createFunctionType & { write: typeof writeTsNodes } = Object.assign(
56
- createFunctionType,
57
- {
58
- write: writeTsNodes,
59
- },
60
- );
@@ -1,107 +0,0 @@
1
- import {
2
- type AppendValue,
3
- type AstNodeOptions,
4
- notNullish,
5
- type Nullable,
6
- type Prettify,
7
- type SourceBuilder,
8
- } from '@goast/core';
9
-
10
- import { TsNode } from '../node.js';
11
- import { writeTsNode, writeTsNodes } from '../utils/write-ts-nodes.js';
12
- import { type TsDecorator, tsDecorator } from './decorator.js';
13
- import { type TsDoc, tsDoc } from './doc.js';
14
- import { type TsGenericParameter, tsGenericParameter } from './generic-parameter.js';
15
- import { type TsParameter, tsParameter } from './parameter.js';
16
- import type { TsType } from './types.js';
17
-
18
- type Injects = 'doc' | 'decorators' | 'modifiers' | 'name' | 'generics' | 'params' | 'returnType' | 'body';
19
-
20
- type Options<TBuilder extends SourceBuilder, TInjects extends string = never> = AstNodeOptions<
21
- typeof TsNode<TBuilder, TInjects | Injects>,
22
- {
23
- doc?: Nullable<TsDoc<TBuilder>>;
24
- decorators?: Nullable<Nullable<TsDecorator<TBuilder>>[]>;
25
- export?: boolean;
26
- name: string;
27
- generics?: Nullable<Nullable<TsGenericParameter<TBuilder>>[]>;
28
- parameters?: Nullable<Nullable<TsParameter<TBuilder>>[]>;
29
- returnType?: Nullable<TsType<TBuilder>>;
30
- body?: Nullable<AppendValue<TBuilder>>;
31
- }
32
- >;
33
-
34
- export class TsFunction<TBuilder extends SourceBuilder, TInjects extends string = never> extends TsNode<
35
- TBuilder,
36
- TInjects | Injects
37
- > {
38
- public doc: TsDoc<TBuilder> | null;
39
- public decorators: TsDecorator<TBuilder>[];
40
- public export: boolean;
41
- public name: string;
42
- public generics: TsGenericParameter<TBuilder>[];
43
- public parameters: TsParameter<TBuilder>[];
44
- public returnType: TsType<TBuilder> | null;
45
- public body: AppendValue<TBuilder> | null;
46
-
47
- constructor(options: Options<TBuilder, TInjects>) {
48
- super(options);
49
- this.doc = options.doc ?? null;
50
- this.decorators = options.decorators?.filter(notNullish) ?? [];
51
- this.export = options.export ?? false;
52
- this.name = options.name;
53
- this.generics = options.generics?.filter(notNullish) ?? [];
54
- this.parameters = options.parameters?.filter(notNullish) ?? [];
55
- this.returnType = options.returnType ?? null;
56
- this.body = options.body ?? null;
57
- }
58
-
59
- protected override onWrite(builder: TBuilder): void {
60
- builder.append(this.inject.beforeDoc);
61
- tsDoc.write(builder, tsDoc.get(this.doc, { generics: this.generics }));
62
- builder.append(this.inject.afterDoc);
63
-
64
- builder.append(this.inject.beforeDecorators);
65
- tsDecorator.write(builder, this.decorators, { multiline: true });
66
- builder.append(this.inject.afterDecorators);
67
-
68
- builder.append(this.inject.beforeModifiers);
69
- if (this.export) builder.append('export ');
70
- builder.append(this.inject.afterModifiers);
71
-
72
- builder.append('function ');
73
- builder.append(this.inject.beforeName, this.name, this.inject.afterName);
74
-
75
- builder.append(this.inject.beforeGenerics);
76
- tsGenericParameter.write(builder, this.generics);
77
- builder.append(this.inject.afterGenerics);
78
-
79
- builder.append(this.inject.beforeParams);
80
- tsParameter.write(builder, this.parameters);
81
- builder.append(this.inject.afterParams);
82
-
83
- if (this.returnType) {
84
- builder.append(': ');
85
- builder.append(this.inject.beforeReturnType);
86
- writeTsNode(builder, this.returnType);
87
- builder.append(this.inject.afterReturnType);
88
- }
89
-
90
- builder.append(' ');
91
-
92
- builder.append(this.inject.beforeBody);
93
- builder.parenthesize('{}', this.body, { multiline: !!this.body });
94
- builder.append(this.inject.afterBody);
95
-
96
- builder.appendLine();
97
- }
98
- }
99
-
100
- const createFunction = <TBuilder extends SourceBuilder>(
101
- name: Options<TBuilder>['name'],
102
- options?: Prettify<Omit<Options<TBuilder>, 'name'>>,
103
- ): TsFunction<TBuilder> => new TsFunction<TBuilder>({ ...options, name });
104
-
105
- export const tsFunction: typeof createFunction & { write: typeof writeTsNodes } = Object.assign(createFunction, {
106
- write: writeTsNodes,
107
- });
@@ -1,71 +0,0 @@
1
- import type { AstNodeOptions, BasicAppendValue, Nullable, Prettify, SourceBuilder } from '@goast/core';
2
-
3
- import { TsNode } from '../node.js';
4
- import { writeTsGenericParameters } from '../utils/write-ts-generic-parameters.js';
5
- import { writeTsNode } from '../utils/write-ts-nodes.js';
6
- import type { TsType } from './types.js';
7
-
8
- type Injects = 'modifiers' | 'name' | 'constraint' | 'default';
9
-
10
- type Options<TBuilder extends SourceBuilder, TInjects extends string = never> = AstNodeOptions<
11
- typeof TsNode<TBuilder, TInjects | Injects>,
12
- {
13
- description?: Nullable<BasicAppendValue<TBuilder>>;
14
- const?: Nullable<boolean>;
15
- name: string;
16
- constraint?: Nullable<TsType<TBuilder>>;
17
- default?: Nullable<TsType<TBuilder>>;
18
- }
19
- >;
20
-
21
- export class TsGenericParameter<TBuilder extends SourceBuilder, TInjects extends string = never> extends TsNode<
22
- TBuilder,
23
- TInjects | Injects
24
- > {
25
- public description: BasicAppendValue<TBuilder> | null;
26
- public const: boolean;
27
- public name: string;
28
- public constraint: TsType<TBuilder> | null;
29
- public default: TsType<TBuilder> | null;
30
-
31
- constructor(options: Options<TBuilder, TInjects>) {
32
- super(options);
33
- this.description = options.description ?? null;
34
- this.const = options.const ?? false;
35
- this.name = options.name;
36
- this.constraint = options.constraint ?? null;
37
- this.default = options.default ?? null;
38
- }
39
-
40
- protected override onWrite(builder: TBuilder): void {
41
- builder.append(this.inject.beforeModifiers);
42
- builder.appendIf(this.const, 'const ');
43
- builder.append(this.inject.afterModifiers);
44
-
45
- builder.append(this.inject.beforeName, this.name, this.inject.afterName);
46
-
47
- if (this.constraint !== null) {
48
- builder.append(' extends ');
49
- builder.append(this.inject.beforeConstraint);
50
- writeTsNode(builder, this.constraint);
51
- builder.append(this.inject.afterConstraint);
52
- }
53
-
54
- if (this.default !== null) {
55
- builder.append(' = ');
56
- builder.append(this.inject.beforeDefault);
57
- writeTsNode(builder, this.default);
58
- builder.append(this.inject.afterDefault);
59
- }
60
- }
61
- }
62
-
63
- const createGenericParameter = <TBuilder extends SourceBuilder>(
64
- name: Options<TBuilder>['name'],
65
- options?: Prettify<Omit<Options<TBuilder>, 'name'>>,
66
- ): TsGenericParameter<TBuilder> => new TsGenericParameter<TBuilder>({ ...options, name });
67
-
68
- export const tsGenericParameter: typeof createGenericParameter & { write: typeof writeTsGenericParameters } = Object
69
- .assign(createGenericParameter, {
70
- write: writeTsGenericParameters,
71
- });
@@ -1,60 +0,0 @@
1
- import type { AstNodeOptions, Nullable, Prettify, SourceBuilder } from '@goast/core';
2
-
3
- import { TsNode } from '../node.js';
4
- import { writeTsNode, writeTsNodes } from '../utils/write-ts-nodes.js';
5
- import type { TsType } from './types.js';
6
-
7
- type Injects = never;
8
-
9
- type Options<TBuilder extends SourceBuilder, TInjects extends string = never> = AstNodeOptions<
10
- typeof TsNode<TBuilder, TInjects | Injects>,
11
- {
12
- keyName?: Nullable<string>;
13
- keyType: TsType<TBuilder>;
14
- valueType: TsType<TBuilder>;
15
- readonly?: Nullable<boolean>;
16
- }
17
- >;
18
-
19
- export class TsIndexer<TBuilder extends SourceBuilder, TInjects extends string = never> extends TsNode<
20
- TBuilder,
21
- TInjects | Injects
22
- > {
23
- public keyName: string;
24
- public keyType: TsType<TBuilder>;
25
- public valueType: TsType<TBuilder>;
26
- public readonly: boolean;
27
-
28
- constructor(options: Options<TBuilder, TInjects>) {
29
- super(options);
30
- this.keyName = options.keyName ?? 'key';
31
- this.keyType = options.keyType;
32
- this.valueType = options.valueType;
33
- this.readonly = options.readonly ?? false;
34
- }
35
-
36
- protected override onWrite(builder: TBuilder): void {
37
- if (this.readonly) builder.append('readonly ');
38
-
39
- builder.parenthesize('[]', (b) => {
40
- b.append(this.keyName, ': ');
41
- writeTsNode(b, this.keyType);
42
- });
43
-
44
- builder.append(': ');
45
- writeTsNode(builder, this.valueType);
46
- builder.append(';');
47
-
48
- builder.appendLine();
49
- }
50
- }
51
-
52
- const createIndexer = <TBuilder extends SourceBuilder>(
53
- keyType: Options<TBuilder>['keyType'],
54
- valueType: Options<TBuilder>['valueType'],
55
- options?: Prettify<Omit<Options<TBuilder>, 'keyType' | 'valueType'>>,
56
- ): TsIndexer<TBuilder> => new TsIndexer<TBuilder>({ ...options, keyType, valueType });
57
-
58
- export const tsIndexer: typeof createIndexer & { write: typeof writeTsNodes } = Object.assign(createIndexer, {
59
- write: writeTsNodes,
60
- });