@goast/kotlin 0.5.8 → 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 +2 -2
  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,138 +0,0 @@
1
- import {
2
- type AstNodeOptions,
3
- type BasicAppendValue,
4
- basicAppendValueGroup,
5
- notNullish,
6
- type Nullable,
7
- type ParametersWithOverloads,
8
- type Prettify,
9
- type SingleOrMultiple,
10
- type SourceBuilder,
11
- type StringSuggestions,
12
- } from '@goast/core';
13
-
14
- import { isKotlinAppendValue } from '../../file-builder.js';
15
- import { KtNode } from '../node.js';
16
- import { type KtAppendValue, writeKtNodes } from '../utils/write-kt-node.js';
17
-
18
- type Injects = never;
19
-
20
- type Options<TBuilder extends SourceBuilder, TInjects extends string = never> = AstNodeOptions<
21
- typeof KtNode<TBuilder, TInjects | Injects>,
22
- {
23
- tag: string;
24
- args?: Nullable<Nullable<BasicAppendValue<TBuilder>>[]>;
25
- description?: Nullable<BasicAppendValue<TBuilder>>;
26
- }
27
- >;
28
-
29
- export class KtDocTag<TBuilder extends SourceBuilder, TInjects extends string = never> extends KtNode<
30
- TBuilder,
31
- TInjects | Injects
32
- > {
33
- public tag: string;
34
- public args: BasicAppendValue<TBuilder>[];
35
- public description: BasicAppendValue<TBuilder> | null;
36
-
37
- constructor(options: Options<TBuilder, TInjects>) {
38
- super(options);
39
- this.tag = options.tag;
40
- this.args = options.args?.filter(notNullish) ?? [];
41
- this.description = options.description ?? null;
42
- }
43
-
44
- protected override onWrite(builder: TBuilder): void {
45
- builder.append('@', this.tag);
46
- this.args.forEach((a) => builder.append(' ', a));
47
- if (this.description) builder.append(' ', this.description);
48
- }
49
- }
50
-
51
- type _KtDocTagOpt<TBuilder extends SourceBuilder> = Prettify<Omit<Options<TBuilder>, 'tag'>>;
52
-
53
- type _KtDocTagArgsMap<TBuilder extends SourceBuilder> =
54
- & {
55
- suppress(options?: _KtDocTagOpt<TBuilder>): never;
56
- }
57
- & {
58
- [K in 'return' | 'constructor' | 'receiver' | 'author' | 'since']: (
59
- description: BasicAppendValue<TBuilder>,
60
- options?: _KtDocTagOpt<TBuilder>,
61
- ) => never;
62
- }
63
- & {
64
- [K in 'param' | 'property']: (
65
- name: string,
66
- description: BasicAppendValue<TBuilder>,
67
- options?: _KtDocTagOpt<TBuilder>,
68
- ) => never;
69
- }
70
- & {
71
- [K in 'see' | 'sample']: (identifier: string, options?: _KtDocTagOpt<TBuilder>) => never;
72
- }
73
- & {
74
- [K in 'throws' | 'exception']: (
75
- $class: BasicAppendValue<TBuilder>,
76
- description: BasicAppendValue<TBuilder>,
77
- options?: _KtDocTagOpt<TBuilder>,
78
- ) => never;
79
- };
80
-
81
- const tagsWithDescription = [
82
- 'return',
83
- 'constructor',
84
- 'receiver',
85
- 'author',
86
- 'since',
87
- 'param',
88
- 'property',
89
- 'throws',
90
- 'exception',
91
- ];
92
-
93
- type _KtDocTagArgs<
94
- TTagName extends StringSuggestions<keyof _KtDocTagArgsMap<TBuilder>>,
95
- TBuilder extends SourceBuilder,
96
- > = TTagName extends keyof _KtDocTagArgsMap<TBuilder>
97
- // deno-lint-ignore no-explicit-any
98
- ? _KtDocTagArgsMap<TBuilder>[TTagName] extends (...args: any[]) => any
99
- ? ParametersWithOverloads<_KtDocTagArgsMap<TBuilder>[TTagName]>
100
- : never
101
- : [options?: _KtDocTagOpt<TBuilder>];
102
-
103
- function createDocTag<
104
- TTagName extends StringSuggestions<keyof _KtDocTagArgsMap<TBuilder>>,
105
- TBuilder extends SourceBuilder,
106
- >(tag: TTagName, ...args: _KtDocTagArgs<TTagName, TBuilder>): KtDocTag<TBuilder>;
107
- function createDocTag<TBuilder extends SourceBuilder>(tag: string, ...args: unknown[]): KtDocTag<TBuilder> {
108
- let opt: _KtDocTagOpt<TBuilder> = {};
109
- if (args.length > 0) {
110
- const lastArg = args[args.length - 1];
111
- if (!isKotlinAppendValue(lastArg) && !!lastArg) {
112
- opt = args.pop() as _KtDocTagOpt<TBuilder>;
113
- }
114
- }
115
-
116
- const params = args as BasicAppendValue<TBuilder>[];
117
- if (tagsWithDescription.includes(tag)) {
118
- const description = params.pop();
119
- if (opt.description && description) {
120
- opt.description = basicAppendValueGroup<TBuilder>([description, opt.description], '\n');
121
- } else if (description) {
122
- opt.description = description;
123
- }
124
- }
125
-
126
- return new KtDocTag({ ...opt, tag, args: params });
127
- }
128
-
129
- const writeDocTags = <TBuilder extends SourceBuilder>(
130
- builder: TBuilder,
131
- nodes: SingleOrMultiple<Nullable<KtAppendValue<TBuilder>>>,
132
- ): void => {
133
- writeKtNodes(builder, nodes, { separator: '\n' });
134
- };
135
-
136
- export const ktDocTag: typeof createDocTag & { write: typeof writeDocTags } = Object.assign(createDocTag, {
137
- write: writeDocTags,
138
- });
@@ -1,111 +0,0 @@
1
- import {
2
- type AstNodeOptions,
3
- type BasicAppendValue,
4
- createOverwriteProxy,
5
- getIsInstanceOf,
6
- notNullish,
7
- type Nullable,
8
- type Prettify,
9
- type SourceBuilder,
10
- } from '@goast/core';
11
-
12
- import { KtNode } from '../node.js';
13
- import { writeKtNodes } from '../utils/write-kt-node.js';
14
- import { type KtDocTag, ktDocTag } from './doc-tag.js';
15
- import { KtGenericParameter } from './generic-parameter.js';
16
- import { KtParameter } from './parameter.js';
17
-
18
- type Injects = never;
19
-
20
- type Options<TBuilder extends SourceBuilder, TInjects extends string = never> = AstNodeOptions<
21
- typeof KtNode<TBuilder, TInjects | Injects>,
22
- {
23
- description?: Nullable<BasicAppendValue<TBuilder>>;
24
- tags?: Nullable<Nullable<KtDocTag<TBuilder>>[]>;
25
- }
26
- >;
27
-
28
- export class KtDoc<TBuilder extends SourceBuilder, TInjects extends string = never> extends KtNode<
29
- TBuilder,
30
- TInjects | Injects
31
- > {
32
- public description: BasicAppendValue<TBuilder> | null;
33
- public tags: KtDocTag<TBuilder>[];
34
-
35
- constructor(options: Options<TBuilder, TInjects>) {
36
- super(options);
37
- this.description = options.description ?? null;
38
- this.tags = options.tags?.filter(notNullish) ?? [];
39
- }
40
-
41
- protected override onWrite(builder: TBuilder): void {
42
- if (!this.description && this.tags.length === 0) return;
43
- builder
44
- .ensureCurrentLineEmpty()
45
- .parenthesize(
46
- ['/**', ' */'],
47
- (b) =>
48
- b.appendWithLinePrefix(' * ', (b) => {
49
- builder.append(this.description);
50
- if (this.tags.length > 0) {
51
- b.ensurePreviousLineEmpty();
52
- ktDocTag.write(b, this.tags);
53
- }
54
- }),
55
- { multiline: true, indent: false },
56
- )
57
- .appendLine();
58
- }
59
- }
60
-
61
- const createDoc = <TBuilder extends SourceBuilder>(
62
- description?: Options<TBuilder>['description'],
63
- tags?: Options<TBuilder>['tags'],
64
- options?: Prettify<Omit<Options<TBuilder>, 'description' | 'tags'>>,
65
- ): KtDoc<TBuilder> => new KtDoc<TBuilder>({ ...options, description, tags: tags ?? undefined });
66
-
67
- function getDoc<TBuilder extends SourceBuilder>(
68
- baseDoc: KtDoc<TBuilder> | null,
69
- options: {
70
- parameters?: Nullable<Nullable<KtParameter<TBuilder> | BasicAppendValue<TBuilder>>[]>;
71
- generics?: Nullable<Nullable<KtGenericParameter<TBuilder> | BasicAppendValue<TBuilder>>[]>;
72
- },
73
- ): KtDoc<TBuilder> | null {
74
- const paramsWithDesc = options.parameters
75
- ?.filter(getIsInstanceOf(KtParameter<TBuilder>))
76
- .filter((x): x is KtParameter<TBuilder> & { description: NonNullable<unknown> } => !!x.description) ?? [];
77
- const classParamsWithPropertyDesc = options.parameters
78
- ?.filter(getIsInstanceOf(KtParameter<TBuilder>))
79
- .filter(
80
- (x): x is KtParameter<TBuilder> & { property: NonNullable<unknown>; propertyDescription: NonNullable<unknown> } =>
81
- !!x.property && !!x.propertyDescription,
82
- ) ?? [];
83
- const genericsWithDesc = options.generics
84
- ?.filter(getIsInstanceOf(KtGenericParameter<TBuilder>))
85
- .filter((x): x is KtGenericParameter<TBuilder> & { description: NonNullable<unknown> } => !!x.description) ?? [];
86
- if (
87
- baseDoc === null &&
88
- paramsWithDesc.length === 0 &&
89
- genericsWithDesc.length === 0 &&
90
- classParamsWithPropertyDesc.length === 0
91
- ) {
92
- return null;
93
- }
94
-
95
- const doc = baseDoc ? createOverwriteProxy(baseDoc) : ktDoc<TBuilder>();
96
- const paramTags = paramsWithDesc.map<KtDocTag<TBuilder>>((p) => ktDocTag('param', p.name, p.description));
97
- const propertyTags = classParamsWithPropertyDesc.map<KtDocTag<TBuilder>>((p) =>
98
- ktDocTag('property', p.name, p.propertyDescription)
99
- );
100
- const genericTags = genericsWithDesc.map<KtDocTag<TBuilder>>((p) => ktDocTag('param', p.name, p.description));
101
- doc.tags.splice(0, 0, ...genericTags, ...paramTags, ...propertyTags);
102
- return doc;
103
- }
104
-
105
- export const ktDoc: typeof createDoc & {
106
- write: typeof writeKtNodes;
107
- get: typeof getDoc;
108
- } = Object.assign(createDoc, {
109
- write: writeKtNodes,
110
- get: getDoc,
111
- });
@@ -1,100 +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 { KtNode } from '../node.js';
11
- import { writeKtEnumValues } from '../utils/write-kt-enum-values.js';
12
- import { writeKtMembers } from '../utils/write-kt-members.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 { KtFunction } from './function.js';
17
- import type { KtParameter } from './parameter.js';
18
-
19
- type Injects = 'doc' | 'annotations' | 'name' | 'arguments' | 'body' | 'members';
20
-
21
- type Options<TBuilder extends SourceBuilder, TInjects extends string = never> = AstNodeOptions<
22
- typeof KtNode<TBuilder, TInjects | Injects>,
23
- {
24
- name: string;
25
- doc?: Nullable<KtDoc<TBuilder>>;
26
- annotations?: Nullable<Nullable<KtAnnotation<TBuilder>>[]>;
27
- arguments?: Nullable<Nullable<KtArgument<TBuilder> | AppendValue<TBuilder>>[]>;
28
- members?: Nullable<Nullable<KtEnumValueMember<TBuilder>>[]>;
29
- }
30
- >;
31
-
32
- export type KtEnumValueMember<TBuilder extends SourceBuilder> =
33
- | KtParameter<TBuilder>
34
- | KtFunction<TBuilder>
35
- | AppendValue<TBuilder>;
36
-
37
- export class KtEnumValue<TBuilder extends SourceBuilder, TInjects extends string = never> extends KtNode<
38
- TBuilder,
39
- TInjects | Injects
40
- > {
41
- public name: string;
42
- public doc: KtDoc<TBuilder> | null;
43
- public annotations: KtAnnotation<TBuilder>[];
44
- public arguments: (KtArgument<TBuilder> | AppendValue<TBuilder>)[];
45
- public members: KtEnumValueMember<TBuilder>[];
46
-
47
- constructor(options: Options<TBuilder, TInjects>) {
48
- super(options);
49
- this.name = options.name;
50
- this.doc = options.doc ?? null;
51
- this.annotations = options.annotations?.filter(notNullish) ?? [];
52
- this.arguments = options.arguments?.filter(notNullish) ?? [];
53
- this.members = options.members?.filter(notNullish) ?? [];
54
- }
55
-
56
- protected override onWrite(builder: TBuilder): void {
57
- builder.append(this.inject.beforeDoc);
58
- this.doc?.write(builder);
59
- builder.append(this.inject.afterDoc);
60
-
61
- builder.append(this.inject.beforeAnnotations);
62
- ktAnnotation.write(builder, this.annotations, { multiline: true });
63
- builder.append(this.inject.afterAnnotations);
64
-
65
- builder.append(this.inject.beforeName, this.name, this.inject.afterName);
66
-
67
- if (this.arguments.length > 0) {
68
- builder.append(this.inject.beforeArguments);
69
- ktArgument.write(builder, this.arguments);
70
- builder.append(this.inject.afterArguments);
71
- }
72
-
73
- if (this.members.length > 0) {
74
- builder.append(' ');
75
- builder.append(this.inject.beforeBody);
76
- builder.parenthesize(
77
- '{}',
78
- (b) => {
79
- builder.append(this.inject.beforeMembers);
80
- writeKtMembers(b, this.members);
81
- builder.append(this.inject.afterMembers);
82
- },
83
- { multiline: true },
84
- );
85
- builder.append(this.inject.afterBody);
86
- }
87
- }
88
- }
89
-
90
- const createEnumValue = <TBuilder extends SourceBuilder>(
91
- name: Options<TBuilder>['name'],
92
- options?: Prettify<Omit<Options<TBuilder>, 'name'>>,
93
- ): KtEnumValue<TBuilder> => new KtEnumValue<TBuilder>({ ...options, name });
94
-
95
- export const ktEnumValue: typeof createEnumValue & { write: typeof writeKtEnumValues } = Object.assign(
96
- createEnumValue,
97
- {
98
- write: writeKtEnumValues,
99
- },
100
- );
@@ -1,163 +0,0 @@
1
- import {
2
- type AppendValue,
3
- type AstNodeOptions,
4
- createOverwriteProxy,
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 { writeKtMembers } from '../utils/write-kt-members.js';
14
- import { writeKtNodes } from '../utils/write-kt-node.js';
15
- import { type KtAnnotation, ktAnnotation } from './annotation.js';
16
- import type { KtClass } from './class.js';
17
- import type { KtConstructor } from './constructor.js';
18
- import { type KtDoc, ktDoc } from './doc.js';
19
- import { type KtEnumValue, ktEnumValue } from './enum-value.js';
20
- import type { KtFunction } from './function.js';
21
- import { type KtInitBlock, ktInitBlock } from './init-block.js';
22
- import type { KtInterface } from './interface.js';
23
- import type { KtObject } from './object.js';
24
- import type { KtProperty } from './property.js';
25
- import type { KtType } from './types.js';
26
-
27
- type Injects =
28
- | 'doc'
29
- | 'annotations'
30
- | 'modifiers'
31
- | 'name'
32
- | 'primaryConstructor'
33
- | 'implements'
34
- | 'body'
35
- | 'values'
36
- | 'members';
37
-
38
- type Options<TBuilder extends SourceBuilder, TInjects extends string = never> = AstNodeOptions<
39
- typeof KtNode<TBuilder, TInjects | Injects>,
40
- {
41
- name: string;
42
- doc?: Nullable<KtDoc<TBuilder>>;
43
- annotations?: Nullable<Nullable<KtAnnotation<TBuilder>>[]>;
44
- accessModifier?: Nullable<KtAccessModifier>;
45
- primaryConstructor?: Nullable<KtConstructor<TBuilder>>;
46
- implements?: Nullable<Nullable<KtType<TBuilder>>[]>;
47
- values?: Nullable<KtEnumValue<TBuilder>[]>;
48
- members?: Nullable<Nullable<KtEnumMember<TBuilder>>[]>;
49
- companionObject?: Nullable<KtObject<TBuilder>>;
50
- }
51
- >;
52
-
53
- export type KtEnumMember<TBuilder extends SourceBuilder> =
54
- | KtConstructor<TBuilder>
55
- | KtEnum<TBuilder>
56
- | KtInitBlock<TBuilder>
57
- | KtInterface<TBuilder>
58
- | KtProperty<TBuilder>
59
- | KtFunction<TBuilder>
60
- | KtClass<TBuilder>
61
- | AppendValue<TBuilder>;
62
-
63
- export class KtEnum<TBuilder extends SourceBuilder, TInjects extends string = never> extends KtNode<
64
- TBuilder,
65
- TInjects | Injects
66
- > {
67
- public name: string;
68
- public doc: KtDoc<TBuilder> | null;
69
- public annotations: KtAnnotation<TBuilder>[];
70
- public accessModifier: KtAccessModifier | null;
71
- public primaryConstructor: KtConstructor<TBuilder> | null;
72
- public implements: KtType<TBuilder>[];
73
- public values: KtEnumValue<TBuilder>[];
74
- public members: KtEnumMember<TBuilder>[];
75
- public companionObject: KtObject<TBuilder> | null;
76
-
77
- constructor(options: Options<TBuilder, TInjects>) {
78
- super(options);
79
- this.name = options.name;
80
- this.doc = options.doc ?? null;
81
- this.annotations = options.annotations?.filter(notNullish) ?? [];
82
- this.accessModifier = options.accessModifier ?? null;
83
- this.primaryConstructor = options.primaryConstructor ?? null;
84
- this.implements = options.implements?.filter(notNullish) ?? [];
85
- this.values = options.values ?? [];
86
- this.members = options.members?.filter(notNullish) ?? [];
87
- this.companionObject = options.companionObject ?? null;
88
- }
89
-
90
- protected override onWrite(builder: TBuilder): void {
91
- builder.append(this.inject.beforeDoc);
92
- ktDoc.get(this.doc, { parameters: this.primaryConstructor?.parameters })?.write(builder);
93
- builder.append(this.inject.afterDoc);
94
-
95
- builder.append(this.inject.beforeAnnotations);
96
- ktAnnotation.write(builder, this.annotations, { multiline: true });
97
- builder.append(this.inject.afterAnnotations);
98
-
99
- builder.append(this.inject.beforeModifiers);
100
- if (this.accessModifier) builder.append(this.accessModifier, ' ');
101
- builder.append(this.inject.afterModifiers);
102
-
103
- builder.append('enum class ');
104
- builder.append(this.inject.beforeName, this.name, this.inject.afterName);
105
-
106
- if (this.primaryConstructor) {
107
- builder.append(this.inject.beforePrimaryConstructor);
108
- this.primaryConstructor.writeAsPrimary(builder);
109
- builder.append(this.inject.afterPrimaryConstructor);
110
- }
111
-
112
- if (this.implements.length > 0) {
113
- builder.append(' : ');
114
- builder.append(this.inject.beforeImplements);
115
- writeKtNodes(builder, this.implements, { separator: ', ' });
116
- builder.append(this.inject.afterImplements);
117
- }
118
-
119
- const allMembers = [
120
- this.companionObject ? createOverwriteProxy(this.companionObject, { companion: true }) : null,
121
- this.primaryConstructor?.body ? ktInitBlock(this.primaryConstructor?.body) : null,
122
- ...this.members,
123
- ].filter(notNullish);
124
-
125
- if (this.values.length > 0 || allMembers.length > 0) {
126
- builder.append(' ');
127
- builder.append(this.inject.beforeBody);
128
- builder.parenthesize(
129
- '{}',
130
- (b) => {
131
- if (this.values.length > 0) {
132
- b.append(this.inject.beforeValues);
133
- ktEnumValue.write(b, this.values);
134
- if (allMembers.length > 0) {
135
- b.append(';\n\n');
136
- }
137
- b.append(this.inject.afterValues);
138
- }
139
-
140
- if (allMembers.length > 0) {
141
- b.append(this.inject.beforeMembers);
142
- writeKtMembers(b, allMembers);
143
- b.append(this.inject.afterMembers);
144
- }
145
- },
146
- { multiline: true },
147
- );
148
- builder.append(this.inject.afterBody);
149
- }
150
-
151
- builder.appendLine();
152
- }
153
- }
154
-
155
- const createEnum = <TBuilder extends SourceBuilder>(
156
- name: Options<TBuilder>['name'],
157
- values?: Options<TBuilder>['values'],
158
- options?: Prettify<Omit<Options<TBuilder>, 'name' | 'values'>>,
159
- ): KtEnum<TBuilder> => new KtEnum<TBuilder>({ ...options, name, values: values ?? undefined });
160
-
161
- export const ktEnum: typeof createEnum & { write: typeof writeKtNodes } = Object.assign(createEnum, {
162
- write: writeKtNodes,
163
- });
@@ -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
- });