@goast/kotlin 0.5.13 → 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 (115) hide show
  1. package/LICENSE +21 -21
  2. package/README.md +45 -45
  3. package/assets/client/okhttp3/ApiAbstractions.kt +30 -30
  4. package/assets/client/okhttp3/ApiClient.kt +252 -252
  5. package/assets/client/okhttp3/ApiResponse.kt +43 -43
  6. package/assets/client/okhttp3/Errors.kt +21 -21
  7. package/assets/client/okhttp3/PartConfig.kt +11 -11
  8. package/assets/client/okhttp3/RequestConfig.kt +18 -18
  9. package/assets/client/okhttp3/RequestMethod.kt +8 -8
  10. package/assets/client/okhttp3/ResponseExtensions.kt +24 -24
  11. package/assets/client/spring-reactive-web-clients/ApiRequestFile.kt +33 -33
  12. package/esm/src/generators/models/model-generator.d.ts.map +1 -1
  13. package/esm/src/generators/models/model-generator.js +5 -14
  14. package/esm/src/generators/services/okhttp3-clients/okhttp3-client-generator.d.ts.map +1 -1
  15. package/esm/src/generators/services/okhttp3-clients/okhttp3-client-generator.js +40 -47
  16. package/esm/src/generators/services/okhttp3-clients/okhttp3-clients-generator.js +9 -9
  17. package/esm/src/generators/services/spring-controllers/spring-controller-generator.d.ts.map +1 -1
  18. package/esm/src/generators/services/spring-controllers/spring-controller-generator.js +31 -39
  19. package/esm/src/generators/services/spring-reactive-web-clients/spring-reactive-web-client-generator.d.ts.map +1 -1
  20. package/esm/src/generators/services/spring-reactive-web-clients/spring-reactive-web-client-generator.js +16 -25
  21. package/esm/src/utils.d.ts +1 -3
  22. package/esm/src/utils.d.ts.map +1 -1
  23. package/esm/src/utils.js +0 -7
  24. package/package.json +2 -2
  25. package/script/src/generators/models/model-generator.d.ts.map +1 -1
  26. package/script/src/generators/models/model-generator.js +4 -13
  27. package/script/src/generators/services/okhttp3-clients/okhttp3-client-generator.d.ts.map +1 -1
  28. package/script/src/generators/services/okhttp3-clients/okhttp3-client-generator.js +39 -46
  29. package/script/src/generators/services/okhttp3-clients/okhttp3-clients-generator.js +9 -9
  30. package/script/src/generators/services/spring-controllers/spring-controller-generator.d.ts.map +1 -1
  31. package/script/src/generators/services/spring-controllers/spring-controller-generator.js +30 -38
  32. package/script/src/generators/services/spring-reactive-web-clients/spring-reactive-web-client-generator.d.ts.map +1 -1
  33. package/script/src/generators/services/spring-reactive-web-clients/spring-reactive-web-client-generator.js +15 -24
  34. package/script/src/utils.d.ts +1 -3
  35. package/script/src/utils.d.ts.map +1 -1
  36. package/script/src/utils.js +0 -9
  37. package/src/mod.ts +0 -8
  38. package/src/src/assets.ts +0 -9
  39. package/src/src/ast/_index.ts +0 -66
  40. package/src/src/ast/common.ts +0 -1
  41. package/src/src/ast/index.ts +0 -1
  42. package/src/src/ast/node.ts +0 -10
  43. package/src/src/ast/nodes/annotation.ts +0 -79
  44. package/src/src/ast/nodes/argument.ts +0 -62
  45. package/src/src/ast/nodes/call.ts +0 -75
  46. package/src/src/ast/nodes/class.ts +0 -178
  47. package/src/src/ast/nodes/collection-literal.ts +0 -49
  48. package/src/src/ast/nodes/constructor.ts +0 -126
  49. package/src/src/ast/nodes/doc-tag.ts +0 -138
  50. package/src/src/ast/nodes/doc.ts +0 -111
  51. package/src/src/ast/nodes/enum-value.ts +0 -100
  52. package/src/src/ast/nodes/enum.ts +0 -163
  53. package/src/src/ast/nodes/function.ts +0 -178
  54. package/src/src/ast/nodes/generic-parameter.ts +0 -54
  55. package/src/src/ast/nodes/init-block.ts +0 -38
  56. package/src/src/ast/nodes/interface.ts +0 -133
  57. package/src/src/ast/nodes/lambda-type.ts +0 -73
  58. package/src/src/ast/nodes/lambda.ts +0 -74
  59. package/src/src/ast/nodes/object.ts +0 -102
  60. package/src/src/ast/nodes/parameter.ts +0 -118
  61. package/src/src/ast/nodes/property.ts +0 -225
  62. package/src/src/ast/nodes/reference.ts +0 -178
  63. package/src/src/ast/nodes/string.ts +0 -114
  64. package/src/src/ast/nodes/types.ts +0 -23
  65. package/src/src/ast/references/index.ts +0 -10
  66. package/src/src/ast/references/jackson.ts +0 -59
  67. package/src/src/ast/references/jakarta.ts +0 -14
  68. package/src/src/ast/references/java.ts +0 -27
  69. package/src/src/ast/references/kotlin.ts +0 -41
  70. package/src/src/ast/references/kotlinx.ts +0 -14
  71. package/src/src/ast/references/okhttp3.ts +0 -5
  72. package/src/src/ast/references/reactor.ts +0 -5
  73. package/src/src/ast/references/spring-reactive.ts +0 -37
  74. package/src/src/ast/references/spring.ts +0 -86
  75. package/src/src/ast/references/swagger.ts +0 -23
  76. package/src/src/ast/utils/get-kotlin-builder-options.ts +0 -19
  77. package/src/src/ast/utils/to-kt-node.ts +0 -31
  78. package/src/src/ast/utils/write-kt-annotations.ts +0 -15
  79. package/src/src/ast/utils/write-kt-arguments.ts +0 -45
  80. package/src/src/ast/utils/write-kt-enum-values.ts +0 -27
  81. package/src/src/ast/utils/write-kt-generic-parameters.ts +0 -12
  82. package/src/src/ast/utils/write-kt-members.ts +0 -25
  83. package/src/src/ast/utils/write-kt-node.ts +0 -37
  84. package/src/src/ast/utils/write-kt-parameters.ts +0 -25
  85. package/src/src/common-results.ts +0 -4
  86. package/src/src/config.ts +0 -61
  87. package/src/src/file-builder.ts +0 -112
  88. package/src/src/generators/file-generator.ts +0 -29
  89. package/src/src/generators/index.ts +0 -5
  90. package/src/src/generators/models/args.ts +0 -136
  91. package/src/src/generators/models/index.ts +0 -4
  92. package/src/src/generators/models/model-generator.ts +0 -736
  93. package/src/src/generators/models/models-generator.ts +0 -65
  94. package/src/src/generators/models/models.ts +0 -95
  95. package/src/src/generators/services/okhttp3-clients/args.ts +0 -90
  96. package/src/src/generators/services/okhttp3-clients/index.ts +0 -4
  97. package/src/src/generators/services/okhttp3-clients/models.ts +0 -73
  98. package/src/src/generators/services/okhttp3-clients/okhttp3-client-generator.ts +0 -627
  99. package/src/src/generators/services/okhttp3-clients/okhttp3-clients-generator.ts +0 -188
  100. package/src/src/generators/services/okhttp3-clients/refs.ts +0 -59
  101. package/src/src/generators/services/spring-controllers/args.ts +0 -95
  102. package/src/src/generators/services/spring-controllers/index.ts +0 -4
  103. package/src/src/generators/services/spring-controllers/models.ts +0 -76
  104. package/src/src/generators/services/spring-controllers/refs.ts +0 -17
  105. package/src/src/generators/services/spring-controllers/spring-controller-generator.ts +0 -1115
  106. package/src/src/generators/services/spring-controllers/spring-controllers-generator.ts +0 -140
  107. package/src/src/generators/services/spring-reactive-web-clients/args.ts +0 -112
  108. package/src/src/generators/services/spring-reactive-web-clients/index.ts +0 -4
  109. package/src/src/generators/services/spring-reactive-web-clients/models.ts +0 -78
  110. package/src/src/generators/services/spring-reactive-web-clients/refs.ts +0 -11
  111. package/src/src/generators/services/spring-reactive-web-clients/spring-reactive-web-client-generator.ts +0 -641
  112. package/src/src/generators/services/spring-reactive-web-clients/spring-reactive-web-clients-generator.ts +0 -125
  113. package/src/src/import-collection.ts +0 -98
  114. package/src/src/types.ts +0 -3
  115. package/src/src/utils.ts +0 -55
@@ -1,178 +0,0 @@
1
- import {
2
- type AppendValue,
3
- type AstNodeOptions,
4
- type BasicAppendValue,
5
- notNullish,
6
- type Nullable,
7
- type Prettify,
8
- type SourceBuilder,
9
- } from '@goast/core';
10
-
11
- import type { KtAccessModifier } from '../common.js';
12
- import { KtNode } from '../node.js';
13
- import { writeKtNode, writeKtNodes } from '../utils/write-kt-node.js';
14
- import { type KtAnnotation, ktAnnotation } from './annotation.js';
15
- import { type KtDoc, ktDoc } from './doc.js';
16
- import { type KtGenericParameter, ktGenericParameter } from './generic-parameter.js';
17
- import { KtInterface } from './interface.js';
18
- import { type KtParameter, ktParameter } from './parameter.js';
19
- import type { KtType } from './types.js';
20
-
21
- type Injects =
22
- | 'doc'
23
- | 'annotations'
24
- | 'modifiers'
25
- | 'generics'
26
- | 'receiverAnnotations'
27
- | 'receiverType'
28
- | 'name'
29
- | 'parameters'
30
- | 'returnType';
31
-
32
- type Options<TBuilder extends SourceBuilder, TInjects extends string = never> = AstNodeOptions<
33
- typeof KtNode<TBuilder, TInjects | Injects>,
34
- {
35
- name: string;
36
- generics?: Nullable<Nullable<KtGenericParameter<TBuilder> | BasicAppendValue<TBuilder>>[]>;
37
- parameters?: Nullable<Nullable<KtParameter<TBuilder> | BasicAppendValue<TBuilder>>[]>;
38
- doc?: Nullable<KtDoc<TBuilder>>;
39
- returnType?: Nullable<KtType<TBuilder>>;
40
- body?: Nullable<AppendValue<TBuilder>>;
41
- accessModifier?: Nullable<KtAccessModifier>;
42
- annotations?: Nullable<Nullable<KtAnnotation<TBuilder>>[]>;
43
- receiverType?: Nullable<KtType<TBuilder>>;
44
- receiverAnnotations?: Nullable<Nullable<KtAnnotation<TBuilder>>[]>;
45
- singleExpression?: Nullable<boolean>;
46
- open?: Nullable<boolean>;
47
- inline?: Nullable<boolean>;
48
- infix?: Nullable<boolean>;
49
- tailrec?: Nullable<boolean>;
50
- suspend?: Nullable<boolean>;
51
- operator?: Nullable<boolean>;
52
- override?: Nullable<boolean>;
53
- abstract?: Nullable<boolean>;
54
- }
55
- >;
56
-
57
- export class KtFunction<TBuilder extends SourceBuilder, TInjects extends string = never> extends KtNode<
58
- TBuilder,
59
- TInjects | Injects
60
- > {
61
- public name: string;
62
- public generics: (KtGenericParameter<TBuilder> | BasicAppendValue<TBuilder>)[];
63
- public parameters: (KtParameter<TBuilder> | BasicAppendValue<TBuilder>)[];
64
- public doc: KtDoc<TBuilder> | null;
65
- public returnType: KtType<TBuilder> | null;
66
- public body: AppendValue<TBuilder> | null;
67
- public accessModifier: KtAccessModifier | null;
68
- public annotations: KtAnnotation<TBuilder>[];
69
- public receiverType: KtType<TBuilder> | null;
70
- public receiverAnnotations: KtAnnotation<TBuilder>[];
71
- public singleExpression: boolean;
72
- public open: boolean;
73
- public inline: boolean;
74
- public infix: boolean;
75
- public tailrec: boolean;
76
- public suspend: boolean;
77
- public operator: boolean;
78
- public override: boolean;
79
- public abstract: boolean;
80
-
81
- constructor(options: Options<TBuilder, TInjects>) {
82
- super(options);
83
- this.name = options.name;
84
- this.generics = options.generics?.filter(notNullish) ?? [];
85
- this.parameters = options.parameters?.filter(notNullish) ?? [];
86
- this.doc = options.doc ?? null;
87
- this.returnType = options.returnType ?? null;
88
- this.body = options.body ?? null;
89
- this.accessModifier = options.accessModifier ?? null;
90
- this.annotations = options.annotations?.filter(notNullish) ?? [];
91
- this.receiverType = options.receiverType ?? null;
92
- this.receiverAnnotations = options.receiverAnnotations?.filter(notNullish) ?? [];
93
- this.singleExpression = options.singleExpression ?? false;
94
- this.open = options.open ?? false;
95
- this.inline = options.inline ?? false;
96
- this.infix = options.infix ?? false;
97
- this.tailrec = options.tailrec ?? false;
98
- this.suspend = options.suspend ?? false;
99
- this.operator = options.operator ?? false;
100
- this.override = options.override ?? false;
101
- this.abstract = options.abstract ?? false;
102
- }
103
-
104
- protected override onWrite(builder: TBuilder): void {
105
- builder.append(this.inject.beforeDoc);
106
- ktDoc.get(this.doc, { generics: this.generics, parameters: this.parameters })?.write(builder);
107
- builder.append(this.inject.afterDoc);
108
-
109
- builder.append(this.inject.beforeAnnotations);
110
- ktAnnotation.write(builder, this.annotations, { multiline: true });
111
- builder.append(this.inject.afterAnnotations);
112
-
113
- builder.append(this.inject.beforeModifiers);
114
- if (this.accessModifier) builder.append(this.accessModifier, ' ');
115
- if (this.inline) builder.append('inline ');
116
- if (this.infix) builder.append('infix ');
117
- if (this.tailrec) builder.append('tailrec ');
118
- if (this.suspend) builder.append('suspend ');
119
- if (this.open) builder.append('open ');
120
- if (this.override) builder.append('override ');
121
- if (this.abstract) builder.append('abstract ');
122
- if (this.operator) builder.append('operator ');
123
- builder.append(this.inject.afterModifiers);
124
-
125
- builder.append('fun ');
126
-
127
- builder.append(this.inject.beforeGenerics);
128
- ktGenericParameter.write(builder, this.generics);
129
- builder.append(this.inject.afterGenerics);
130
- if (this.generics.length > 0) builder.append(' ');
131
-
132
- if (this.receiverType) {
133
- builder.append(this.inject.beforeReceiverAnnotations);
134
- ktAnnotation.write(builder, this.receiverAnnotations, { multiline: false });
135
- builder.append(this.inject.afterReceiverAnnotations);
136
-
137
- builder.append(this.inject.beforeReceiverType);
138
- writeKtNode(builder, this.receiverType);
139
- builder.append(this.inject.afterReceiverType);
140
- builder.append('.');
141
- }
142
-
143
- builder.append(this.inject.beforeName, this.name, this.inject.afterName);
144
-
145
- builder.append(this.inject.beforeParameters);
146
- ktParameter.write(builder, this.parameters);
147
- builder.append(this.inject.afterParameters);
148
-
149
- if (this.returnType) {
150
- builder.append(': ');
151
- builder.append(this.inject.beforeReturnType);
152
- writeKtNode(builder, this.returnType);
153
- builder.append(this.inject.afterReturnType);
154
- }
155
-
156
- const isInInterface = this.getParentNode(builder) instanceof KtInterface;
157
- if (!this.abstract && (this.body || !isInInterface)) {
158
- builder.append(' ');
159
- if (this.singleExpression && this.body) {
160
- builder.append('= ');
161
- builder.indent(this.body);
162
- } else {
163
- builder.parenthesize('{}', this.body, { multiline: !!this.body });
164
- }
165
- }
166
-
167
- builder.appendLine();
168
- }
169
- }
170
-
171
- const createFunction = <TBuilder extends SourceBuilder>(
172
- name: Options<TBuilder>['name'],
173
- options?: Prettify<Omit<Options<TBuilder>, 'name'>>,
174
- ): KtFunction<TBuilder> => new KtFunction<TBuilder>({ ...options, name });
175
-
176
- export const ktFunction: typeof createFunction & { write: typeof writeKtNodes } = Object.assign(createFunction, {
177
- write: writeKtNodes,
178
- });
@@ -1,54 +0,0 @@
1
- import type { AstNodeOptions, BasicAppendValue, Nullable, Prettify, SourceBuilder } from '@goast/core';
2
-
3
- import { KtNode } from '../node.js';
4
- import { writeKtGenericParameters } from '../utils/write-kt-generic-parameters.js';
5
- import { writeKtNode } from '../utils/write-kt-node.js';
6
- import type { KtType } from './types.js';
7
-
8
- type Injects = 'name' | 'constraint';
9
-
10
- type Options<TBuilder extends SourceBuilder, TInjects extends string = never> = AstNodeOptions<
11
- typeof KtNode<TBuilder, TInjects | Injects>,
12
- {
13
- name: string;
14
- description?: Nullable<BasicAppendValue<TBuilder>>;
15
- constraint?: Nullable<KtType<TBuilder>>;
16
- }
17
- >;
18
-
19
- export class KtGenericParameter<TBuilder extends SourceBuilder, TInjects extends string = never> extends KtNode<
20
- TBuilder,
21
- TInjects | Injects
22
- > {
23
- public name: string;
24
- public description: BasicAppendValue<TBuilder> | null;
25
- public constraint: KtType<TBuilder> | null;
26
-
27
- constructor(options: Options<TBuilder, TInjects>) {
28
- super(options);
29
- this.name = options.name;
30
- this.description = options.description ?? null;
31
- this.constraint = options.constraint ?? null;
32
- }
33
-
34
- protected override onWrite(builder: TBuilder): void {
35
- builder.append(this.inject.beforeName, this.name, this.inject.afterName);
36
-
37
- if (this.constraint) {
38
- builder.append(' : ');
39
- builder.append(this.inject.beforeConstraint);
40
- writeKtNode(builder, this.constraint);
41
- builder.append(this.inject.afterConstraint);
42
- }
43
- }
44
- }
45
-
46
- const createGenericParameter = <TBuilder extends SourceBuilder>(
47
- name: Options<TBuilder>['name'],
48
- options?: Prettify<Omit<Options<TBuilder>, 'name'>>,
49
- ): KtGenericParameter<TBuilder> => new KtGenericParameter<TBuilder>({ ...options, name });
50
-
51
- export const ktGenericParameter: typeof createGenericParameter & { write: typeof writeKtGenericParameters } = Object
52
- .assign(createGenericParameter, {
53
- write: writeKtGenericParameters,
54
- });
@@ -1,38 +0,0 @@
1
- import type { AppendValue, AstNodeOptions, Prettify, SourceBuilder } from '@goast/core';
2
-
3
- import { KtNode } from '../node.js';
4
- import { writeKtNodes } from '../utils/write-kt-node.js';
5
-
6
- type Injects = never;
7
-
8
- type Options<TBuilder extends SourceBuilder, TInjects extends string = never> = AstNodeOptions<
9
- typeof KtNode<TBuilder, TInjects | Injects>,
10
- {
11
- body: AppendValue<TBuilder>;
12
- }
13
- >;
14
-
15
- export class KtInitBlock<TBuilder extends SourceBuilder, TInjects extends string = never> extends KtNode<
16
- TBuilder,
17
- TInjects | Injects
18
- > {
19
- public body: AppendValue<TBuilder>;
20
-
21
- constructor(options: Options<TBuilder, TInjects>) {
22
- super(options);
23
- this.body = options.body;
24
- }
25
-
26
- protected override onWrite(builder: TBuilder): void {
27
- builder.append('init ').parenthesize('{}', this.body, { multiline: !!this.body }).appendLine();
28
- }
29
- }
30
-
31
- const createInitBlock = <TBuilder extends SourceBuilder>(
32
- body: Options<TBuilder>['body'],
33
- options?: Prettify<Omit<Options<TBuilder>, 'body'>>,
34
- ): KtInitBlock<TBuilder> => new KtInitBlock<TBuilder>({ ...options, body });
35
-
36
- export const ktInitBlock: typeof createInitBlock & { write: typeof writeKtNodes } = Object.assign(createInitBlock, {
37
- write: writeKtNodes,
38
- });
@@ -1,133 +0,0 @@
1
- import {
2
- type AppendValue,
3
- type AstNodeOptions,
4
- type BasicAppendValue,
5
- createOverwriteProxy,
6
- notNullish,
7
- type Nullable,
8
- type Prettify,
9
- type SourceBuilder,
10
- } from '@goast/core';
11
-
12
- import type { KtAccessModifier } from '../common.js';
13
- import { KtNode } from '../node.js';
14
- import { writeKtMembers } from '../utils/write-kt-members.js';
15
- import { writeKtNodes } from '../utils/write-kt-node.js';
16
- import { type KtAnnotation, ktAnnotation } from './annotation.js';
17
- import type { KtClass } from './class.js';
18
- import { type KtDoc, ktDoc } from './doc.js';
19
- import type { KtEnum } from './enum.js';
20
- import type { KtFunction } from './function.js';
21
- import { type KtGenericParameter, ktGenericParameter } from './generic-parameter.js';
22
- import type { KtObject } from './object.js';
23
- import type { KtProperty } from './property.js';
24
- import type { KtType } from './types.js';
25
-
26
- type Injects = 'doc' | 'annotations' | 'modifiers' | 'name' | 'generics' | 'extends' | 'body' | 'members';
27
-
28
- type Options<TBuilder extends SourceBuilder, TInjects extends string = never> = AstNodeOptions<
29
- typeof KtNode<TBuilder, TInjects | Injects>,
30
- {
31
- doc?: Nullable<KtDoc<TBuilder>>;
32
- annotations?: Nullable<Nullable<KtAnnotation<TBuilder>>[]>;
33
- accessModifier?: Nullable<KtAccessModifier>;
34
- name: string;
35
- generics?: Nullable<Nullable<KtGenericParameter<TBuilder> | BasicAppendValue<TBuilder>>[]>;
36
- extends?: Nullable<Nullable<KtType<TBuilder>>[]>;
37
- members?: Nullable<Nullable<KtInterfaceMember<TBuilder>>[]>;
38
- companionObject?: Nullable<KtObject<TBuilder>>;
39
- }
40
- >;
41
-
42
- export type KtInterfaceMember<TBuilder extends SourceBuilder> =
43
- | KtEnum<TBuilder>
44
- | KtInterface<TBuilder>
45
- | KtProperty<TBuilder>
46
- | KtFunction<TBuilder>
47
- | KtClass<TBuilder>
48
- | AppendValue<TBuilder>;
49
-
50
- export class KtInterface<TBuilder extends SourceBuilder, TInjects extends string = never> extends KtNode<
51
- TBuilder,
52
- TInjects | Injects
53
- > {
54
- public doc: KtDoc<TBuilder> | null;
55
- public annotations: KtAnnotation<TBuilder>[];
56
- public accessModifier: KtAccessModifier | null;
57
- public name: string;
58
- public generics: (KtGenericParameter<TBuilder> | BasicAppendValue<TBuilder>)[];
59
- public extends: KtType<TBuilder>[];
60
- public members: KtInterfaceMember<TBuilder>[];
61
- public companionObject: KtObject<TBuilder> | null;
62
-
63
- constructor(options: Options<TBuilder, TInjects>) {
64
- super(options);
65
- this.doc = options.doc ?? null;
66
- this.annotations = options.annotations?.filter(notNullish) ?? [];
67
- this.accessModifier = options.accessModifier ?? null;
68
- this.name = options.name;
69
- this.generics = options.generics?.filter(notNullish) ?? [];
70
- this.extends = options.extends?.filter(notNullish) ?? [];
71
- this.members = options.members?.filter(notNullish) ?? [];
72
- this.companionObject = options.companionObject ?? null;
73
- }
74
-
75
- protected override onWrite(builder: TBuilder): void {
76
- builder.append(this.inject.beforeDoc);
77
- ktDoc.get(this.doc, { generics: this.generics })?.write(builder);
78
- builder.append(this.inject.afterDoc);
79
-
80
- builder.append(this.inject.beforeAnnotations);
81
- ktAnnotation.write(builder, this.annotations, { multiline: true });
82
- builder.append(this.inject.afterAnnotations);
83
-
84
- builder.append(this.inject.beforeModifiers);
85
- if (this.accessModifier) builder.append(this.accessModifier, ' ');
86
- builder.append(this.inject.afterModifiers);
87
-
88
- builder.append('interface ');
89
- builder.append(this.inject.beforeName, this.name, this.inject.afterName);
90
-
91
- builder.append(this.inject.beforeGenerics);
92
- ktGenericParameter.write(builder, this.generics);
93
- builder.append(this.inject.afterGenerics);
94
-
95
- if (this.extends.length > 0) {
96
- builder.append(' : ');
97
- builder.append(this.inject.beforeExtends);
98
- writeKtNodes(builder, this.extends, { separator: ', ' });
99
- builder.append(this.inject.afterExtends);
100
- }
101
-
102
- const allMembers = [
103
- this.companionObject ? createOverwriteProxy(this.companionObject, { companion: true }) : null,
104
- ...this.members,
105
- ].filter(notNullish);
106
-
107
- if (allMembers.length > 0) {
108
- builder.append(' ');
109
- builder.append(this.inject.beforeBody);
110
- builder.parenthesize(
111
- '{}',
112
- (b) => {
113
- b.append(this.inject.beforeMembers);
114
- writeKtMembers(b, allMembers);
115
- b.append(this.inject.afterMembers);
116
- },
117
- { multiline: true },
118
- );
119
- builder.append(this.inject.afterBody);
120
- }
121
-
122
- builder.appendLine();
123
- }
124
- }
125
-
126
- const createInterface = <TBuilder extends SourceBuilder>(
127
- name: KtInterface<TBuilder>['name'],
128
- options?: Prettify<Omit<Options<TBuilder>, 'name'>>,
129
- ): KtInterface<TBuilder> => new KtInterface<TBuilder>({ ...options, name });
130
-
131
- export const ktInterface: typeof createInterface & { write: typeof writeKtNodes } = Object.assign(createInterface, {
132
- write: writeKtNodes,
133
- });
@@ -1,73 +0,0 @@
1
- import { type AstNodeOptions, notNullish, type Nullable, type SourceBuilder } from '@goast/core';
2
-
3
- import { KtNode } from '../node.js';
4
- import { writeKtNode, writeKtNodes } from '../utils/write-kt-node.js';
5
- import { ktParameter } from './parameter.js';
6
- import type { KtType } from './types.js';
7
-
8
- type Injects = 'extensionFor' | 'params' | 'returnType';
9
-
10
- type Options<TBuilder extends SourceBuilder, TInjects extends string = never> = AstNodeOptions<
11
- typeof KtNode<TBuilder, TInjects | Injects>,
12
- {
13
- extensionFor?: Nullable<KtType<TBuilder>>;
14
- parameters?: Nullable<Nullable<KtType<TBuilder>>[]>;
15
- returnType: KtType<TBuilder>;
16
- suspend?: boolean;
17
- }
18
- >;
19
-
20
- export class KtLambdaType<TBuilder extends SourceBuilder, TInjects extends string = never> extends KtNode<
21
- TBuilder,
22
- TInjects | Injects
23
- > {
24
- public extensionFor: KtType<TBuilder> | null;
25
- public parameters: KtType<TBuilder>[];
26
- public returnType: KtType<TBuilder>;
27
- public suspend: boolean;
28
-
29
- constructor(options: Options<TBuilder, TInjects>) {
30
- super(options);
31
- this.extensionFor = options.extensionFor ?? null;
32
- this.parameters = options.parameters?.filter(notNullish) ?? [];
33
- this.returnType = options.returnType;
34
- this.suspend = options.suspend ?? false;
35
- }
36
-
37
- protected override onWrite(builder: TBuilder): void {
38
- if (this.suspend) {
39
- builder.append('suspend ');
40
- }
41
-
42
- if (this.extensionFor) {
43
- builder.append(this.inject.beforeExtensionFor);
44
- writeKtNode(builder, this.extensionFor);
45
- builder.append(this.inject.afterExtensionFor);
46
- builder.append('.');
47
- }
48
-
49
- builder.append(this.inject.beforeParams);
50
- if (this.parameters.length === 0) {
51
- builder.append('()');
52
- } else {
53
- ktParameter.write(builder, this.parameters);
54
- }
55
- builder.append(this.inject.afterParams);
56
-
57
- builder.append(' -> ');
58
-
59
- builder.append(this.inject.beforeReturnType);
60
- writeKtNode(builder, this.returnType);
61
- builder.append(this.inject.afterReturnType);
62
- }
63
- }
64
-
65
- const createLambdaType = <TBuilder extends SourceBuilder>(
66
- parameters: Options<TBuilder>['parameters'],
67
- returnType: Options<TBuilder>['returnType'],
68
- options?: Omit<Options<TBuilder>, 'parameters' | 'returnType'>,
69
- ): KtLambdaType<TBuilder> => new KtLambdaType<TBuilder>({ ...options, parameters, returnType });
70
-
71
- export const ktLambdaType: typeof createLambdaType & { write: typeof writeKtNodes } = Object.assign(createLambdaType, {
72
- write: writeKtNodes,
73
- });
@@ -1,74 +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 { KtNode } from '../node.js';
11
- import { writeKtNodes } from '../utils/write-kt-node.js';
12
-
13
- type Injects = 'arguments' | 'body';
14
-
15
- type Options<TBuilder extends SourceBuilder, TInjects extends string = never> = AstNodeOptions<
16
- typeof KtNode<TBuilder, TInjects | Injects>,
17
- {
18
- arguments?: Nullable<Nullable<BasicAppendValue<TBuilder>>[]>;
19
- body?: Nullable<AppendValue<TBuilder>>;
20
- singleline?: boolean;
21
- }
22
- >;
23
-
24
- export class KtLambda<TBuilder extends SourceBuilder, TInjects extends string = never> extends KtNode<
25
- TBuilder,
26
- TInjects | Injects
27
- > {
28
- public arguments: BasicAppendValue<TBuilder>[];
29
- public body: AppendValue<TBuilder> | null;
30
- public singleline: boolean;
31
-
32
- constructor(options: Options<TBuilder, TInjects>) {
33
- super(options);
34
- this.arguments = options.arguments?.filter(notNullish) ?? [];
35
- this.body = options.body ?? null;
36
- this.singleline = options.singleline ?? false;
37
- }
38
-
39
- protected override onWrite(builder: TBuilder): void {
40
- const singleline = this.singleline || !this.body;
41
-
42
- builder.parenthesize('{}', (b) => {
43
- if (this.arguments.length > 0) {
44
- b.append(' ', this.inject.beforeArguments);
45
- writeKtNodes(b, this.arguments, { separator: ', ' });
46
- b.append(this.inject.afterArguments);
47
-
48
- b.append(' ->');
49
- }
50
-
51
- b.append(singleline ? ' ' : '\n');
52
-
53
- b.append(this.inject.beforeBody, this.body, this.inject.afterBody);
54
-
55
- if (singleline) {
56
- if (!b.isCurrentLineEmpty) {
57
- b.append(' ');
58
- }
59
- } else {
60
- b.ensureCurrentLineEmpty();
61
- }
62
- });
63
- }
64
- }
65
-
66
- const createLambda = <TBuilder extends SourceBuilder>(
67
- args: Options<TBuilder>['arguments'],
68
- body: Options<TBuilder>['body'],
69
- options?: Omit<Options<TBuilder>, 'arguments' | 'body'>,
70
- ): KtLambda<TBuilder> => new KtLambda<TBuilder>({ ...options, arguments: args, body });
71
-
72
- export const ktLambda: typeof createLambda & { write: typeof writeKtNodes } = Object.assign(createLambda, {
73
- write: writeKtNodes,
74
- });
@@ -1,102 +0,0 @@
1
- import { type AstNodeOptions, type BasicAppendValue, notNullish, type Nullable, type SourceBuilder } from '@goast/core';
2
-
3
- import { KtNode } from '../node.js';
4
- import { writeKtMembers } from '../utils/write-kt-members.js';
5
- import { writeKtNode, writeKtNodes } from '../utils/write-kt-node.js';
6
- import { type KtArgument, ktArgument } from './argument.js';
7
- import type { KtFunction } from './function.js';
8
- import type { KtInitBlock } from './init-block.js';
9
- import type { KtProperty } from './property.js';
10
- import type { KtType, KtValue } from './types.js';
11
-
12
- type Injects = 'modifiers' | 'name' | 'inheritList' | 'body' | 'members';
13
-
14
- type Options<TBuilder extends SourceBuilder, TInjects extends string = never> = AstNodeOptions<
15
- typeof KtNode<TBuilder, TInjects | Injects>,
16
- {
17
- data?: boolean;
18
- name?: Nullable<string>;
19
- class?: KtType<TBuilder>;
20
- classArguments?: Nullable<Nullable<KtArgument<TBuilder> | KtValue<TBuilder>>[]>;
21
- implements?: Nullable<Nullable<KtType<TBuilder>>[]>;
22
- members?: Nullable<Nullable<KtObjectMember<TBuilder>>[]>;
23
- companion?: Nullable<boolean>;
24
- }
25
- >;
26
-
27
- export type KtObjectMember<TBuilder extends SourceBuilder> =
28
- | KtInitBlock<TBuilder>
29
- | KtProperty<TBuilder>
30
- | KtFunction<TBuilder>
31
- | BasicAppendValue<TBuilder>;
32
-
33
- export class KtObject<TBuilder extends SourceBuilder, TInjects extends string = never> extends KtNode<
34
- TBuilder,
35
- TInjects | Injects
36
- > {
37
- public data: boolean;
38
- public name: string | null;
39
- public class: KtType<TBuilder> | null;
40
- public classArguments: (KtArgument<TBuilder> | KtValue<TBuilder>)[];
41
- public implements: KtType<TBuilder>[];
42
- public members: KtObjectMember<TBuilder>[];
43
- public companion: boolean;
44
-
45
- constructor(options: Options<TBuilder, TInjects>) {
46
- super(options);
47
- this.data = options.data ?? false;
48
- this.name = options.name ?? null;
49
- this.class = options.class ?? null;
50
- this.classArguments = options.classArguments?.filter(notNullish) ?? [];
51
- this.implements = options.implements?.filter(notNullish) ?? [];
52
- this.members = options.members?.filter(notNullish) ?? [];
53
- this.companion = options.companion ?? false;
54
- }
55
-
56
- protected override onWrite(builder: TBuilder): void {
57
- builder.append(this.inject.beforeModifiers);
58
- if (this.data) builder.append('data ');
59
- if (this.companion) builder.append('companion ');
60
- builder.append(this.inject.afterModifiers);
61
-
62
- builder.append('object');
63
-
64
- if (this.name) {
65
- builder.append(' ', this.inject.beforeName, this.name, this.inject.afterName);
66
- }
67
-
68
- if (this.class || this.implements.length > 0) {
69
- builder.append(' : ', this.inject.beforeInheritList);
70
-
71
- if (this.class) {
72
- writeKtNode(builder, this.class);
73
- ktArgument.write(builder, this.classArguments);
74
- if (this.implements.length > 0) builder.append(', ');
75
- }
76
-
77
- writeKtNodes(builder, this.implements, { separator: ', ' });
78
- builder.append(this.inject.afterInheritList);
79
- }
80
-
81
- builder.append(' ', this.inject.beforeBody);
82
- builder.parenthesize(
83
- '{}',
84
- (b) => {
85
- builder.append(this.inject.beforeMembers);
86
- writeKtMembers(b, this.members);
87
- builder.append(this.inject.afterMembers);
88
- },
89
- { multiline: this.members.length > 0 },
90
- );
91
- builder.append(this.inject.afterBody);
92
-
93
- if (this.name) builder.appendLine();
94
- }
95
- }
96
-
97
- const createObject = <TBuilder extends SourceBuilder>(options?: Options<TBuilder>): KtObject<TBuilder> =>
98
- new KtObject<TBuilder>(options ?? {});
99
-
100
- export const ktObject: typeof createObject & { write: typeof writeKtNodes } = Object.assign(createObject, {
101
- write: writeKtNodes,
102
- });