@goast/kotlin 0.5.7 → 0.5.9-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 (118) hide show
  1. package/LICENSE +21 -21
  2. package/assets/client/okhttp3/ApiAbstractions.kt +30 -30
  3. package/assets/client/okhttp3/ApiClient.kt +253 -253
  4. package/assets/client/okhttp3/ApiResponse.kt +43 -43
  5. package/assets/client/okhttp3/Errors.kt +21 -21
  6. package/assets/client/okhttp3/PartConfig.kt +11 -11
  7. package/assets/client/okhttp3/RequestConfig.kt +18 -18
  8. package/assets/client/okhttp3/RequestMethod.kt +8 -8
  9. package/assets/client/okhttp3/ResponseExtensions.kt +24 -24
  10. package/assets/client/spring-reactive-web-clients/ApiRequestFile.kt +33 -33
  11. package/esm/src/ast/references/jackson.d.ts +8 -5
  12. package/esm/src/ast/references/jackson.d.ts.map +1 -1
  13. package/esm/src/ast/references/jackson.js +14 -6
  14. package/esm/src/config.d.ts +10 -0
  15. package/esm/src/config.d.ts.map +1 -1
  16. package/esm/src/config.js +1 -0
  17. package/esm/src/generators/services/okhttp3-clients/okhttp3-client-generator.d.ts.map +1 -1
  18. package/esm/src/generators/services/okhttp3-clients/okhttp3-client-generator.js +36 -32
  19. package/esm/src/generators/services/okhttp3-clients/okhttp3-clients-generator.d.ts.map +1 -1
  20. package/esm/src/generators/services/okhttp3-clients/okhttp3-clients-generator.js +22 -6
  21. package/esm/src/generators/services/spring-controllers/spring-controller-generator.d.ts.map +1 -1
  22. package/esm/src/generators/services/spring-controllers/spring-controller-generator.js +23 -13
  23. package/esm/src/generators/services/spring-reactive-web-clients/spring-reactive-web-client-generator.d.ts.map +1 -1
  24. package/esm/src/generators/services/spring-reactive-web-clients/spring-reactive-web-client-generator.js +4 -1
  25. package/package.json +3 -3
  26. package/script/src/ast/references/jackson.d.ts +8 -5
  27. package/script/src/ast/references/jackson.d.ts.map +1 -1
  28. package/script/src/ast/references/jackson.js +20 -7
  29. package/script/src/config.d.ts +10 -0
  30. package/script/src/config.d.ts.map +1 -1
  31. package/script/src/config.js +1 -0
  32. package/script/src/generators/services/okhttp3-clients/okhttp3-client-generator.d.ts.map +1 -1
  33. package/script/src/generators/services/okhttp3-clients/okhttp3-client-generator.js +36 -32
  34. package/script/src/generators/services/okhttp3-clients/okhttp3-clients-generator.d.ts.map +1 -1
  35. package/script/src/generators/services/okhttp3-clients/okhttp3-clients-generator.js +22 -6
  36. package/script/src/generators/services/spring-controllers/spring-controller-generator.d.ts.map +1 -1
  37. package/script/src/generators/services/spring-controllers/spring-controller-generator.js +23 -13
  38. package/script/src/generators/services/spring-reactive-web-clients/spring-reactive-web-client-generator.d.ts.map +1 -1
  39. package/script/src/generators/services/spring-reactive-web-clients/spring-reactive-web-client-generator.js +4 -1
  40. package/src/mod.ts +0 -8
  41. package/src/src/assets.ts +0 -9
  42. package/src/src/ast/_index.ts +0 -66
  43. package/src/src/ast/common.ts +0 -1
  44. package/src/src/ast/index.ts +0 -1
  45. package/src/src/ast/node.ts +0 -10
  46. package/src/src/ast/nodes/annotation.ts +0 -79
  47. package/src/src/ast/nodes/argument.ts +0 -62
  48. package/src/src/ast/nodes/call.ts +0 -75
  49. package/src/src/ast/nodes/class.ts +0 -178
  50. package/src/src/ast/nodes/collection-literal.ts +0 -49
  51. package/src/src/ast/nodes/constructor.ts +0 -126
  52. package/src/src/ast/nodes/doc-tag.ts +0 -138
  53. package/src/src/ast/nodes/doc.ts +0 -111
  54. package/src/src/ast/nodes/enum-value.ts +0 -100
  55. package/src/src/ast/nodes/enum.ts +0 -163
  56. package/src/src/ast/nodes/function.ts +0 -178
  57. package/src/src/ast/nodes/generic-parameter.ts +0 -54
  58. package/src/src/ast/nodes/init-block.ts +0 -38
  59. package/src/src/ast/nodes/interface.ts +0 -133
  60. package/src/src/ast/nodes/lambda-type.ts +0 -73
  61. package/src/src/ast/nodes/lambda.ts +0 -74
  62. package/src/src/ast/nodes/object.ts +0 -102
  63. package/src/src/ast/nodes/parameter.ts +0 -118
  64. package/src/src/ast/nodes/property.ts +0 -225
  65. package/src/src/ast/nodes/reference.ts +0 -178
  66. package/src/src/ast/nodes/string.ts +0 -114
  67. package/src/src/ast/nodes/types.ts +0 -23
  68. package/src/src/ast/references/index.ts +0 -10
  69. package/src/src/ast/references/jackson.ts +0 -44
  70. package/src/src/ast/references/jakarta.ts +0 -14
  71. package/src/src/ast/references/java.ts +0 -27
  72. package/src/src/ast/references/kotlin.ts +0 -41
  73. package/src/src/ast/references/kotlinx.ts +0 -14
  74. package/src/src/ast/references/okhttp3.ts +0 -5
  75. package/src/src/ast/references/reactor.ts +0 -5
  76. package/src/src/ast/references/spring-reactive.ts +0 -33
  77. package/src/src/ast/references/spring.ts +0 -86
  78. package/src/src/ast/references/swagger.ts +0 -23
  79. package/src/src/ast/utils/get-kotlin-builder-options.ts +0 -19
  80. package/src/src/ast/utils/to-kt-node.ts +0 -31
  81. package/src/src/ast/utils/write-kt-annotations.ts +0 -15
  82. package/src/src/ast/utils/write-kt-arguments.ts +0 -45
  83. package/src/src/ast/utils/write-kt-enum-values.ts +0 -27
  84. package/src/src/ast/utils/write-kt-generic-parameters.ts +0 -12
  85. package/src/src/ast/utils/write-kt-members.ts +0 -25
  86. package/src/src/ast/utils/write-kt-node.ts +0 -37
  87. package/src/src/ast/utils/write-kt-parameters.ts +0 -25
  88. package/src/src/common-results.ts +0 -4
  89. package/src/src/config.ts +0 -48
  90. package/src/src/file-builder.ts +0 -112
  91. package/src/src/generators/file-generator.ts +0 -29
  92. package/src/src/generators/index.ts +0 -5
  93. package/src/src/generators/models/args.ts +0 -136
  94. package/src/src/generators/models/index.ts +0 -4
  95. package/src/src/generators/models/model-generator.ts +0 -725
  96. package/src/src/generators/models/models-generator.ts +0 -65
  97. package/src/src/generators/models/models.ts +0 -95
  98. package/src/src/generators/services/okhttp3-clients/args.ts +0 -90
  99. package/src/src/generators/services/okhttp3-clients/index.ts +0 -4
  100. package/src/src/generators/services/okhttp3-clients/models.ts +0 -73
  101. package/src/src/generators/services/okhttp3-clients/okhttp3-client-generator.ts +0 -609
  102. package/src/src/generators/services/okhttp3-clients/okhttp3-clients-generator.ts +0 -169
  103. package/src/src/generators/services/okhttp3-clients/refs.ts +0 -59
  104. package/src/src/generators/services/spring-controllers/args.ts +0 -95
  105. package/src/src/generators/services/spring-controllers/index.ts +0 -4
  106. package/src/src/generators/services/spring-controllers/models.ts +0 -76
  107. package/src/src/generators/services/spring-controllers/refs.ts +0 -17
  108. package/src/src/generators/services/spring-controllers/spring-controller-generator.ts +0 -1097
  109. package/src/src/generators/services/spring-controllers/spring-controllers-generator.ts +0 -140
  110. package/src/src/generators/services/spring-reactive-web-clients/args.ts +0 -103
  111. package/src/src/generators/services/spring-reactive-web-clients/index.ts +0 -4
  112. package/src/src/generators/services/spring-reactive-web-clients/models.ts +0 -62
  113. package/src/src/generators/services/spring-reactive-web-clients/refs.ts +0 -11
  114. package/src/src/generators/services/spring-reactive-web-clients/spring-reactive-web-client-generator.ts +0 -583
  115. package/src/src/generators/services/spring-reactive-web-clients/spring-reactive-web-clients-generator.ts +0 -125
  116. package/src/src/import-collection.ts +0 -98
  117. package/src/src/types.ts +0 -3
  118. package/src/src/utils.ts +0 -47
@@ -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
- });
@@ -1,118 +0,0 @@
1
- import {
2
- type AstNodeOptions,
3
- type BasicAppendValue,
4
- notNullish,
5
- type Nullable,
6
- type Prettify,
7
- type SourceBuilder,
8
- } from '@goast/core';
9
-
10
- import type { KtAccessModifier } from '../common.js';
11
- import { KtNode } from '../node.js';
12
- import { writeKtNode } from '../utils/write-kt-node.js';
13
- import { writeKtParameters } from '../utils/write-kt-parameters.js';
14
- import { type KtAnnotation, ktAnnotation } from './annotation.js';
15
- import type { KtType, KtValue } from './types.js';
16
-
17
- type Injects = 'modifiers' | 'annotations' | 'name' | 'type' | 'default';
18
-
19
- type Options<TBuilder extends SourceBuilder, TInjects extends string = never> = AstNodeOptions<
20
- typeof KtNode<TBuilder, TInjects | Injects>,
21
- {
22
- name: string;
23
- type: KtType<TBuilder>;
24
- annotations?: Nullable<Nullable<KtAnnotation<TBuilder>>[]>;
25
- default?: Nullable<KtValue<TBuilder>>;
26
- vararg?: Nullable<boolean>;
27
- description?: Nullable<BasicAppendValue<TBuilder>>;
28
-
29
- // class parameter options
30
- accessModifier?: Nullable<KtAccessModifier>;
31
- property?: Nullable<'readonly' | 'mutable'>;
32
- propertyDescription?: Nullable<BasicAppendValue<TBuilder>>;
33
- override?: Nullable<boolean>;
34
- }
35
- >;
36
-
37
- export class KtParameter<TBuilder extends SourceBuilder, TInjects extends string = never> extends KtNode<
38
- TBuilder,
39
- TInjects | Injects
40
- > {
41
- public name: string;
42
- public type: KtType<TBuilder>;
43
- public annotations: KtAnnotation<TBuilder>[];
44
- public default: KtValue<TBuilder> | null;
45
- public vararg: boolean;
46
- public description: BasicAppendValue<TBuilder> | null;
47
-
48
- // class parameter options
49
- public accessModifier: KtAccessModifier | null;
50
- public property: 'readonly' | 'mutable' | null;
51
- public propertyDescription: BasicAppendValue<TBuilder> | null;
52
- public override: boolean;
53
-
54
- constructor(options: Options<TBuilder, TInjects>) {
55
- super(options);
56
- this.name = options.name;
57
- this.type = options.type;
58
- this.annotations = options.annotations?.filter(notNullish) ?? [];
59
- this.default = options.default ?? null;
60
- this.vararg = options.vararg ?? false;
61
- this.description = options.description ?? null;
62
-
63
- this.accessModifier = options.accessModifier ?? null;
64
- this.property = options.property ?? null;
65
- this.propertyDescription = options.propertyDescription ?? null;
66
- this.override = options.override ?? false;
67
- }
68
-
69
- protected override onWrite(builder: TBuilder): void {
70
- builder.append(this.inject.beforeAnnotations);
71
- ktAnnotation.write(builder, this.annotations, { multiline: true });
72
- builder.append(this.inject.afterAnnotations);
73
-
74
- builder.append(this.inject.beforeModifiers);
75
- if (this.accessModifier && this.property) builder.append(this.accessModifier, ' ');
76
- if (this.override && this.property) builder.append('override ');
77
- if (this.vararg) builder.append('vararg ');
78
- builder.append(this.inject.afterModifiers);
79
-
80
- if (this.property) builder.append(this.property === 'mutable' ? 'var' : 'val', ' ');
81
- builder.append(this.inject.beforeName, this.name, this.inject.afterName);
82
-
83
- builder.append(': ');
84
-
85
- builder.append(this.inject.beforeType);
86
- writeKtNode(builder, this.type);
87
- builder.append(this.inject.afterType);
88
-
89
- if (this.default) {
90
- builder.append(' = ');
91
- builder.append(this.inject.beforeDefault);
92
- writeKtNode(builder, this.default);
93
- builder.append(this.inject.afterDefault);
94
- }
95
- }
96
- }
97
-
98
- const createParameter = <TBuilder extends SourceBuilder>(
99
- name: KtParameter<TBuilder>['name'],
100
- type: KtParameter<TBuilder>['type'],
101
- options?: Prettify<
102
- Omit<Options<TBuilder>, 'name' | 'type' | 'accessModifier' | 'property' | 'propertyDescription' | 'override'>
103
- >,
104
- ): KtParameter<TBuilder> => new KtParameter<TBuilder>({ ...options, name, type });
105
-
106
- const createClassParameter = <TBuilder extends SourceBuilder>(
107
- name: KtParameter<TBuilder>['name'],
108
- type: KtParameter<TBuilder>['type'],
109
- options?: Prettify<Omit<Options<TBuilder>, 'name' | 'type'>>,
110
- ): KtParameter<TBuilder> => new KtParameter<TBuilder>({ ...options, name, type });
111
-
112
- export const ktParameter: typeof createParameter & {
113
- class: typeof createClassParameter;
114
- write: typeof writeKtParameters;
115
- } = Object.assign(createParameter, {
116
- class: createClassParameter,
117
- write: writeKtParameters,
118
- });