@goast/kotlin 0.5.12 → 0.5.13-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 (113) 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 +12 -3
  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 +19 -12
  16. package/esm/src/generators/services/spring-controllers/spring-controller-generator.d.ts.map +1 -1
  17. package/esm/src/generators/services/spring-controllers/spring-controller-generator.js +30 -22
  18. package/esm/src/generators/services/spring-reactive-web-clients/spring-reactive-web-client-generator.d.ts.map +1 -1
  19. package/esm/src/generators/services/spring-reactive-web-clients/spring-reactive-web-client-generator.js +25 -16
  20. package/esm/src/utils.d.ts +3 -1
  21. package/esm/src/utils.d.ts.map +1 -1
  22. package/esm/src/utils.js +7 -0
  23. package/package.json +1 -1
  24. package/script/src/generators/models/model-generator.d.ts.map +1 -1
  25. package/script/src/generators/models/model-generator.js +11 -2
  26. package/script/src/generators/services/okhttp3-clients/okhttp3-client-generator.d.ts.map +1 -1
  27. package/script/src/generators/services/okhttp3-clients/okhttp3-client-generator.js +18 -11
  28. package/script/src/generators/services/spring-controllers/spring-controller-generator.d.ts.map +1 -1
  29. package/script/src/generators/services/spring-controllers/spring-controller-generator.js +29 -21
  30. package/script/src/generators/services/spring-reactive-web-clients/spring-reactive-web-client-generator.d.ts.map +1 -1
  31. package/script/src/generators/services/spring-reactive-web-clients/spring-reactive-web-client-generator.js +24 -15
  32. package/script/src/utils.d.ts +3 -1
  33. package/script/src/utils.d.ts.map +1 -1
  34. package/script/src/utils.js +9 -0
  35. package/src/mod.ts +0 -8
  36. package/src/src/assets.ts +0 -9
  37. package/src/src/ast/_index.ts +0 -66
  38. package/src/src/ast/common.ts +0 -1
  39. package/src/src/ast/index.ts +0 -1
  40. package/src/src/ast/node.ts +0 -10
  41. package/src/src/ast/nodes/annotation.ts +0 -79
  42. package/src/src/ast/nodes/argument.ts +0 -62
  43. package/src/src/ast/nodes/call.ts +0 -75
  44. package/src/src/ast/nodes/class.ts +0 -178
  45. package/src/src/ast/nodes/collection-literal.ts +0 -49
  46. package/src/src/ast/nodes/constructor.ts +0 -126
  47. package/src/src/ast/nodes/doc-tag.ts +0 -138
  48. package/src/src/ast/nodes/doc.ts +0 -111
  49. package/src/src/ast/nodes/enum-value.ts +0 -100
  50. package/src/src/ast/nodes/enum.ts +0 -163
  51. package/src/src/ast/nodes/function.ts +0 -178
  52. package/src/src/ast/nodes/generic-parameter.ts +0 -54
  53. package/src/src/ast/nodes/init-block.ts +0 -38
  54. package/src/src/ast/nodes/interface.ts +0 -133
  55. package/src/src/ast/nodes/lambda-type.ts +0 -73
  56. package/src/src/ast/nodes/lambda.ts +0 -74
  57. package/src/src/ast/nodes/object.ts +0 -102
  58. package/src/src/ast/nodes/parameter.ts +0 -118
  59. package/src/src/ast/nodes/property.ts +0 -225
  60. package/src/src/ast/nodes/reference.ts +0 -178
  61. package/src/src/ast/nodes/string.ts +0 -114
  62. package/src/src/ast/nodes/types.ts +0 -23
  63. package/src/src/ast/references/index.ts +0 -10
  64. package/src/src/ast/references/jackson.ts +0 -59
  65. package/src/src/ast/references/jakarta.ts +0 -14
  66. package/src/src/ast/references/java.ts +0 -27
  67. package/src/src/ast/references/kotlin.ts +0 -41
  68. package/src/src/ast/references/kotlinx.ts +0 -14
  69. package/src/src/ast/references/okhttp3.ts +0 -5
  70. package/src/src/ast/references/reactor.ts +0 -5
  71. package/src/src/ast/references/spring-reactive.ts +0 -37
  72. package/src/src/ast/references/spring.ts +0 -86
  73. package/src/src/ast/references/swagger.ts +0 -23
  74. package/src/src/ast/utils/get-kotlin-builder-options.ts +0 -19
  75. package/src/src/ast/utils/to-kt-node.ts +0 -31
  76. package/src/src/ast/utils/write-kt-annotations.ts +0 -15
  77. package/src/src/ast/utils/write-kt-arguments.ts +0 -45
  78. package/src/src/ast/utils/write-kt-enum-values.ts +0 -27
  79. package/src/src/ast/utils/write-kt-generic-parameters.ts +0 -12
  80. package/src/src/ast/utils/write-kt-members.ts +0 -25
  81. package/src/src/ast/utils/write-kt-node.ts +0 -37
  82. package/src/src/ast/utils/write-kt-parameters.ts +0 -25
  83. package/src/src/common-results.ts +0 -4
  84. package/src/src/config.ts +0 -61
  85. package/src/src/file-builder.ts +0 -112
  86. package/src/src/generators/file-generator.ts +0 -29
  87. package/src/src/generators/index.ts +0 -5
  88. package/src/src/generators/models/args.ts +0 -136
  89. package/src/src/generators/models/index.ts +0 -4
  90. package/src/src/generators/models/model-generator.ts +0 -725
  91. package/src/src/generators/models/models-generator.ts +0 -65
  92. package/src/src/generators/models/models.ts +0 -95
  93. package/src/src/generators/services/okhttp3-clients/args.ts +0 -90
  94. package/src/src/generators/services/okhttp3-clients/index.ts +0 -4
  95. package/src/src/generators/services/okhttp3-clients/models.ts +0 -73
  96. package/src/src/generators/services/okhttp3-clients/okhttp3-client-generator.ts +0 -613
  97. package/src/src/generators/services/okhttp3-clients/okhttp3-clients-generator.ts +0 -188
  98. package/src/src/generators/services/okhttp3-clients/refs.ts +0 -59
  99. package/src/src/generators/services/spring-controllers/args.ts +0 -95
  100. package/src/src/generators/services/spring-controllers/index.ts +0 -4
  101. package/src/src/generators/services/spring-controllers/models.ts +0 -76
  102. package/src/src/generators/services/spring-controllers/refs.ts +0 -17
  103. package/src/src/generators/services/spring-controllers/spring-controller-generator.ts +0 -1109
  104. package/src/src/generators/services/spring-controllers/spring-controllers-generator.ts +0 -140
  105. package/src/src/generators/services/spring-reactive-web-clients/args.ts +0 -112
  106. package/src/src/generators/services/spring-reactive-web-clients/index.ts +0 -4
  107. package/src/src/generators/services/spring-reactive-web-clients/models.ts +0 -78
  108. package/src/src/generators/services/spring-reactive-web-clients/refs.ts +0 -11
  109. package/src/src/generators/services/spring-reactive-web-clients/spring-reactive-web-client-generator.ts +0 -625
  110. package/src/src/generators/services/spring-reactive-web-clients/spring-reactive-web-clients-generator.ts +0 -125
  111. package/src/src/import-collection.ts +0 -98
  112. package/src/src/types.ts +0 -3
  113. package/src/src/utils.ts +0 -47
@@ -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
- });
@@ -1,225 +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 type { KtAccessModifier } from '../common.js';
11
- import { KtNode } from '../node.js';
12
- import { writeKtNode, writeKtNodes } from '../utils/write-kt-node.js';
13
- import { type KtAnnotation, ktAnnotation } from './annotation.js';
14
- import { type KtArgument, ktArgument } from './argument.js';
15
- import type { KtDoc } from './doc.js';
16
- import type { KtType, KtValue } from './types.js';
17
-
18
- type AccessorInjects = 'annotations' | 'modifiers' | 'params' | 'body';
19
-
20
- type AccessorOptions<TBuilder extends SourceBuilder, TInjects extends string = never> = AstNodeOptions<
21
- typeof KtNode<TBuilder, TInjects | AccessorInjects>,
22
- {
23
- accessModifier?: Nullable<KtAccessModifier>;
24
- annotations?: Nullable<Nullable<KtAnnotation<TBuilder>>[]>;
25
- body?: Nullable<AppendValue<TBuilder>>;
26
- singleExpression?: Nullable<boolean>;
27
- }
28
- >;
29
-
30
- export abstract class KtPropertyAccessor<
31
- TBuilder extends SourceBuilder,
32
- TInjects extends string = never,
33
- > extends KtNode<TBuilder, TInjects | AccessorInjects> {
34
- public abstract get kind(): 'get' | 'set';
35
- public accessModifier: KtAccessModifier | null;
36
- public annotations: KtAnnotation<TBuilder>[];
37
- public body: AppendValue<TBuilder> | null;
38
- public singleExpression: boolean;
39
-
40
- constructor(options: AccessorOptions<TBuilder, TInjects>) {
41
- super(options);
42
- this.accessModifier = options.accessModifier ?? null;
43
- this.annotations = options.annotations?.filter(notNullish) ?? [];
44
- this.body = options.body ?? null;
45
- this.singleExpression = options.singleExpression ?? false;
46
- }
47
-
48
- protected override onWrite(builder: TBuilder): void {
49
- builder.append(this.inject.beforeAnnotations);
50
- ktAnnotation.write(builder, this.annotations, { multiline: true });
51
- builder.append(this.inject.afterAnnotations);
52
-
53
- builder.append(this.inject.beforeModifiers);
54
- if (this.accessModifier) builder.append(this.accessModifier, ' ');
55
- builder.append(this.inject.afterModifiers);
56
-
57
- builder.append(this.kind);
58
-
59
- if (this.body) {
60
- builder.append(this.inject.beforeParams);
61
- builder.append(this.kind === 'set' ? '(value)' : '()');
62
- builder.append(this.inject.afterParams);
63
-
64
- if (this.singleExpression) {
65
- builder.append(' = ', this.inject.beforeBody);
66
- builder.indent(this.body);
67
- } else {
68
- builder.append(' ', this.inject.beforeBody);
69
- builder.parenthesize('{}', this.body, { multiline: true });
70
- }
71
- builder.append(this.inject.afterBody);
72
- }
73
-
74
- builder.appendLine();
75
- }
76
- }
77
- export class KtPropertyGetter<TBuilder extends SourceBuilder> extends KtPropertyAccessor<TBuilder> {
78
- public override readonly kind = 'get' as const;
79
- }
80
- export class KtPropertySetter<TBuilder extends SourceBuilder> extends KtPropertyAccessor<TBuilder> {
81
- public override readonly kind = 'set' as const;
82
- }
83
-
84
- type Injects = 'doc' | 'annotations' | 'modifiers' | 'name' | 'type' | 'default' | 'delegate';
85
-
86
- type Options<TBuilder extends SourceBuilder, TInjects extends string = never> = AstNodeOptions<
87
- typeof KtNode<TBuilder, TInjects | Injects>,
88
- {
89
- doc?: Nullable<KtDoc<TBuilder>>;
90
- name: string;
91
- type?: KtType<TBuilder>;
92
- annotations?: Nullable<Nullable<KtAnnotation<TBuilder>>[]>;
93
- accessModifier?: Nullable<KtAccessModifier>;
94
- getter?: Nullable<KtPropertyGetter<TBuilder>>;
95
- setter?: Nullable<KtPropertySetter<TBuilder>>;
96
- default?: Nullable<KtValue<TBuilder>>;
97
- delegate?: Nullable<KtType<TBuilder>>;
98
- delegateArguments?: Nullable<Nullable<KtArgument<TBuilder> | KtValue<TBuilder>>[]>;
99
- mutable?: Nullable<boolean>;
100
- const?: Nullable<boolean>;
101
- lateinit?: Nullable<boolean>;
102
- open?: Nullable<boolean>;
103
- override?: Nullable<boolean>;
104
- abstract?: Nullable<boolean>;
105
- }
106
- >;
107
-
108
- export class KtProperty<TBuilder extends SourceBuilder, TInjects extends string = never> extends KtNode<
109
- TBuilder,
110
- TInjects | Injects
111
- > {
112
- public doc: KtDoc<TBuilder> | null;
113
- public name: string;
114
- public type: KtType<TBuilder> | null;
115
- public annotations: KtAnnotation<TBuilder>[];
116
- public accessModifier: KtAccessModifier | null;
117
- public getter: KtPropertyGetter<TBuilder> | null;
118
- public setter: KtPropertySetter<TBuilder> | null;
119
- public default: KtValue<TBuilder> | null;
120
- public delegate: KtType<TBuilder> | null;
121
- public delegateArguments: (KtArgument<TBuilder> | KtValue<TBuilder>)[] | null;
122
- public mutable: boolean;
123
- public const: boolean;
124
- public lateinit: boolean;
125
- public open: boolean;
126
- public override: boolean;
127
- public abstract: boolean;
128
-
129
- constructor(options: Options<TBuilder, TInjects>) {
130
- super(options);
131
- this.doc = options.doc ?? null;
132
- this.name = options.name;
133
- this.type = options.type ?? null;
134
- this.annotations = options.annotations?.filter(notNullish) ?? [];
135
- this.accessModifier = options.accessModifier ?? null;
136
- this.getter = options.getter ?? null;
137
- this.setter = options.setter ?? null;
138
- this.default = options.default ?? null;
139
- this.delegate = options.delegate ?? null;
140
- this.delegateArguments = options.delegateArguments?.filter(notNullish) ?? null;
141
- this.mutable = options.mutable ?? false;
142
- this.const = options.const ?? false;
143
- this.lateinit = options.lateinit ?? false;
144
- this.open = options.open ?? false;
145
- this.override = options.override ?? false;
146
- this.abstract = options.abstract ?? false;
147
- }
148
-
149
- protected override onWrite(builder: TBuilder): void {
150
- builder.append(this.inject.beforeDoc);
151
- this.doc?.write(builder);
152
- builder.append(this.inject.afterDoc);
153
-
154
- builder.append(this.inject.beforeAnnotations);
155
- ktAnnotation.write(builder, this.annotations, { multiline: true });
156
- builder.append(this.inject.afterAnnotations);
157
-
158
- builder.append(this.inject.beforeModifiers);
159
- if (this.accessModifier) builder.append(this.accessModifier, ' ');
160
- if (this.const) builder.append('const ');
161
- if (this.lateinit) builder.append('lateinit ');
162
- if (this.abstract) builder.append('abstract ');
163
- if (this.override) builder.append('override ');
164
- if (this.open) builder.append('open ');
165
- builder.append(this.inject.afterModifiers);
166
-
167
- builder.append(this.mutable || !!this.setter ? 'var ' : 'val ');
168
- builder.append(this.inject.beforeName, this.name, this.inject.afterName);
169
-
170
- if (this.type || (!this.default && !this.getter?.body)) {
171
- builder.append(': ', this.inject.beforeType);
172
- writeKtNode(builder, this.type ?? 'Any?');
173
- builder.append(this.inject.afterType);
174
- }
175
-
176
- if (this.default) {
177
- builder.append(' = ', this.inject.beforeDefault);
178
- writeKtNode(builder, this.default);
179
- builder.append(this.inject.afterDefault);
180
- }
181
-
182
- if (this.delegate) {
183
- builder.append(' by ', this.inject.beforeDelegate);
184
- writeKtNode(builder, this.delegate);
185
- if (this.delegateArguments) {
186
- ktArgument.write(builder, this.delegateArguments);
187
- }
188
- builder.append(this.inject.afterDelegate);
189
- }
190
-
191
- builder.appendLine();
192
-
193
- if (this.getter || this.setter) {
194
- builder.indent((b) => {
195
- this.getter?.write(b);
196
- this.setter?.write(b);
197
- });
198
- }
199
-
200
- builder.ensureCurrentLineEmpty();
201
- }
202
- }
203
-
204
- const createPropertyGetter = <TBuilder extends SourceBuilder>(
205
- options?: AccessorOptions<TBuilder>,
206
- ): KtPropertyGetter<TBuilder> => new KtPropertyGetter<TBuilder>(options ?? {});
207
-
208
- const createPropertySetter = <TBuilder extends SourceBuilder>(
209
- options?: AccessorOptions<TBuilder>,
210
- ): KtPropertySetter<TBuilder> => new KtPropertySetter<TBuilder>(options ?? {});
211
-
212
- const createProperty = <TBuilder extends SourceBuilder>(
213
- name: Options<TBuilder>['name'],
214
- options?: Prettify<Omit<Options<TBuilder>, 'name'>>,
215
- ): KtProperty<TBuilder> => new KtProperty<TBuilder>({ ...options, name });
216
-
217
- export const ktProperty: typeof createProperty & {
218
- getter: typeof createPropertyGetter;
219
- setter: typeof createPropertySetter;
220
- write: typeof writeKtNodes;
221
- } = Object.assign(createProperty, {
222
- getter: createPropertyGetter,
223
- setter: createPropertySetter,
224
- write: writeKtNodes,
225
- });