@goast/kotlin 0.5.13 → 0.6.0-beta.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (115) hide show
  1. package/LICENSE +21 -21
  2. package/README.md +45 -45
  3. package/assets/client/okhttp3/ApiAbstractions.kt +30 -30
  4. package/assets/client/okhttp3/ApiClient.kt +252 -252
  5. package/assets/client/okhttp3/ApiResponse.kt +43 -43
  6. package/assets/client/okhttp3/Errors.kt +21 -21
  7. package/assets/client/okhttp3/PartConfig.kt +11 -11
  8. package/assets/client/okhttp3/RequestConfig.kt +18 -18
  9. package/assets/client/okhttp3/RequestMethod.kt +8 -8
  10. package/assets/client/okhttp3/ResponseExtensions.kt +24 -24
  11. package/assets/client/spring-reactive-web-clients/ApiRequestFile.kt +33 -33
  12. package/esm/src/generators/models/model-generator.d.ts.map +1 -1
  13. package/esm/src/generators/models/model-generator.js +5 -14
  14. package/esm/src/generators/services/okhttp3-clients/okhttp3-client-generator.d.ts.map +1 -1
  15. package/esm/src/generators/services/okhttp3-clients/okhttp3-client-generator.js +40 -47
  16. package/esm/src/generators/services/okhttp3-clients/okhttp3-clients-generator.js +9 -9
  17. package/esm/src/generators/services/spring-controllers/spring-controller-generator.d.ts.map +1 -1
  18. package/esm/src/generators/services/spring-controllers/spring-controller-generator.js +31 -39
  19. package/esm/src/generators/services/spring-reactive-web-clients/spring-reactive-web-client-generator.d.ts.map +1 -1
  20. package/esm/src/generators/services/spring-reactive-web-clients/spring-reactive-web-client-generator.js +16 -25
  21. package/esm/src/utils.d.ts +1 -3
  22. package/esm/src/utils.d.ts.map +1 -1
  23. package/esm/src/utils.js +0 -7
  24. package/package.json +2 -2
  25. package/script/src/generators/models/model-generator.d.ts.map +1 -1
  26. package/script/src/generators/models/model-generator.js +4 -13
  27. package/script/src/generators/services/okhttp3-clients/okhttp3-client-generator.d.ts.map +1 -1
  28. package/script/src/generators/services/okhttp3-clients/okhttp3-client-generator.js +39 -46
  29. package/script/src/generators/services/okhttp3-clients/okhttp3-clients-generator.js +9 -9
  30. package/script/src/generators/services/spring-controllers/spring-controller-generator.d.ts.map +1 -1
  31. package/script/src/generators/services/spring-controllers/spring-controller-generator.js +30 -38
  32. package/script/src/generators/services/spring-reactive-web-clients/spring-reactive-web-client-generator.d.ts.map +1 -1
  33. package/script/src/generators/services/spring-reactive-web-clients/spring-reactive-web-client-generator.js +15 -24
  34. package/script/src/utils.d.ts +1 -3
  35. package/script/src/utils.d.ts.map +1 -1
  36. package/script/src/utils.js +0 -9
  37. package/src/mod.ts +0 -8
  38. package/src/src/assets.ts +0 -9
  39. package/src/src/ast/_index.ts +0 -66
  40. package/src/src/ast/common.ts +0 -1
  41. package/src/src/ast/index.ts +0 -1
  42. package/src/src/ast/node.ts +0 -10
  43. package/src/src/ast/nodes/annotation.ts +0 -79
  44. package/src/src/ast/nodes/argument.ts +0 -62
  45. package/src/src/ast/nodes/call.ts +0 -75
  46. package/src/src/ast/nodes/class.ts +0 -178
  47. package/src/src/ast/nodes/collection-literal.ts +0 -49
  48. package/src/src/ast/nodes/constructor.ts +0 -126
  49. package/src/src/ast/nodes/doc-tag.ts +0 -138
  50. package/src/src/ast/nodes/doc.ts +0 -111
  51. package/src/src/ast/nodes/enum-value.ts +0 -100
  52. package/src/src/ast/nodes/enum.ts +0 -163
  53. package/src/src/ast/nodes/function.ts +0 -178
  54. package/src/src/ast/nodes/generic-parameter.ts +0 -54
  55. package/src/src/ast/nodes/init-block.ts +0 -38
  56. package/src/src/ast/nodes/interface.ts +0 -133
  57. package/src/src/ast/nodes/lambda-type.ts +0 -73
  58. package/src/src/ast/nodes/lambda.ts +0 -74
  59. package/src/src/ast/nodes/object.ts +0 -102
  60. package/src/src/ast/nodes/parameter.ts +0 -118
  61. package/src/src/ast/nodes/property.ts +0 -225
  62. package/src/src/ast/nodes/reference.ts +0 -178
  63. package/src/src/ast/nodes/string.ts +0 -114
  64. package/src/src/ast/nodes/types.ts +0 -23
  65. package/src/src/ast/references/index.ts +0 -10
  66. package/src/src/ast/references/jackson.ts +0 -59
  67. package/src/src/ast/references/jakarta.ts +0 -14
  68. package/src/src/ast/references/java.ts +0 -27
  69. package/src/src/ast/references/kotlin.ts +0 -41
  70. package/src/src/ast/references/kotlinx.ts +0 -14
  71. package/src/src/ast/references/okhttp3.ts +0 -5
  72. package/src/src/ast/references/reactor.ts +0 -5
  73. package/src/src/ast/references/spring-reactive.ts +0 -37
  74. package/src/src/ast/references/spring.ts +0 -86
  75. package/src/src/ast/references/swagger.ts +0 -23
  76. package/src/src/ast/utils/get-kotlin-builder-options.ts +0 -19
  77. package/src/src/ast/utils/to-kt-node.ts +0 -31
  78. package/src/src/ast/utils/write-kt-annotations.ts +0 -15
  79. package/src/src/ast/utils/write-kt-arguments.ts +0 -45
  80. package/src/src/ast/utils/write-kt-enum-values.ts +0 -27
  81. package/src/src/ast/utils/write-kt-generic-parameters.ts +0 -12
  82. package/src/src/ast/utils/write-kt-members.ts +0 -25
  83. package/src/src/ast/utils/write-kt-node.ts +0 -37
  84. package/src/src/ast/utils/write-kt-parameters.ts +0 -25
  85. package/src/src/common-results.ts +0 -4
  86. package/src/src/config.ts +0 -61
  87. package/src/src/file-builder.ts +0 -112
  88. package/src/src/generators/file-generator.ts +0 -29
  89. package/src/src/generators/index.ts +0 -5
  90. package/src/src/generators/models/args.ts +0 -136
  91. package/src/src/generators/models/index.ts +0 -4
  92. package/src/src/generators/models/model-generator.ts +0 -736
  93. package/src/src/generators/models/models-generator.ts +0 -65
  94. package/src/src/generators/models/models.ts +0 -95
  95. package/src/src/generators/services/okhttp3-clients/args.ts +0 -90
  96. package/src/src/generators/services/okhttp3-clients/index.ts +0 -4
  97. package/src/src/generators/services/okhttp3-clients/models.ts +0 -73
  98. package/src/src/generators/services/okhttp3-clients/okhttp3-client-generator.ts +0 -627
  99. package/src/src/generators/services/okhttp3-clients/okhttp3-clients-generator.ts +0 -188
  100. package/src/src/generators/services/okhttp3-clients/refs.ts +0 -59
  101. package/src/src/generators/services/spring-controllers/args.ts +0 -95
  102. package/src/src/generators/services/spring-controllers/index.ts +0 -4
  103. package/src/src/generators/services/spring-controllers/models.ts +0 -76
  104. package/src/src/generators/services/spring-controllers/refs.ts +0 -17
  105. package/src/src/generators/services/spring-controllers/spring-controller-generator.ts +0 -1115
  106. package/src/src/generators/services/spring-controllers/spring-controllers-generator.ts +0 -140
  107. package/src/src/generators/services/spring-reactive-web-clients/args.ts +0 -112
  108. package/src/src/generators/services/spring-reactive-web-clients/index.ts +0 -4
  109. package/src/src/generators/services/spring-reactive-web-clients/models.ts +0 -78
  110. package/src/src/generators/services/spring-reactive-web-clients/refs.ts +0 -11
  111. package/src/src/generators/services/spring-reactive-web-clients/spring-reactive-web-client-generator.ts +0 -641
  112. package/src/src/generators/services/spring-reactive-web-clients/spring-reactive-web-clients-generator.ts +0 -125
  113. package/src/src/import-collection.ts +0 -98
  114. package/src/src/types.ts +0 -3
  115. package/src/src/utils.ts +0 -55
@@ -192,9 +192,9 @@ class DefaultKotlinSpringReactiveWebClientGenerator extends file_generator_js_1.
192
192
  const parameterName = (0, core_1.toCasing)(p.name, ctx.config.parameterNameCasing);
193
193
  const toString = this.getParameterToString(ctx, { endpoint, parameter: p });
194
194
  return p.required && !((_a = p.schema) === null || _a === void 0 ? void 0 : _a.nullable)
195
- ? index_js_1.kt.call(['headers', 'add'], [index_js_1.kt.string(p.name), (0, core_1.builderTemplate) `${parameterName}${toString}`])
195
+ ? index_js_1.kt.call(['headers', 'add'], [index_js_1.kt.string(p.name), parameterName + toString])
196
196
  : index_js_1.kt.call([`${parameterName}?`, 'also'], [
197
- index_js_1.kt.lambda([], index_js_1.kt.call(['headers', 'add'], [index_js_1.kt.string(p.name), (0, core_1.builderTemplate) `it${toString}`]), {
197
+ index_js_1.kt.lambda([], index_js_1.kt.call(['headers', 'add'], [index_js_1.kt.string(p.name), 'it' + toString]), {
198
198
  singleline: true,
199
199
  }),
200
200
  ]);
@@ -249,11 +249,9 @@ class DefaultKotlinSpringReactiveWebClientGenerator extends file_generator_js_1.
249
249
  const parameterName = (0, core_1.toCasing)(p.name, ctx.config.parameterNameCasing);
250
250
  const toString = this.getParameterToString(ctx, { endpoint, parameter: p });
251
251
  return p.required && !((_a = p.schema) === null || _a === void 0 ? void 0 : _a.nullable)
252
- ? index_js_1.kt.call('queryParam', [index_js_1.kt.string(p.name), (0, core_1.builderTemplate) `${parameterName}${toString}`])
252
+ ? index_js_1.kt.call('queryParam', [index_js_1.kt.string(p.name), parameterName + toString])
253
253
  : index_js_1.kt.call([`${parameterName}?`, 'also'], [
254
- index_js_1.kt.lambda([], index_js_1.kt.call('queryParam', [index_js_1.kt.string(p.name), (0, core_1.builderTemplate) `it${toString}`]), {
255
- singleline: true,
256
- }),
254
+ index_js_1.kt.lambda([], index_js_1.kt.call('queryParam', [index_js_1.kt.string(p.name), 'it' + toString]), { singleline: true }),
257
255
  ]);
258
256
  }), '\n');
259
257
  }
@@ -286,14 +284,13 @@ class DefaultKotlinSpringReactiveWebClientGenerator extends file_generator_js_1.
286
284
  return result;
287
285
  }
288
286
  getParameterToString(ctx, args) {
289
- var _a;
287
+ var _a, _b, _c;
290
288
  const { parameter } = args;
291
289
  if (((_a = parameter.schema) === null || _a === void 0 ? void 0 : _a.kind) === 'array') {
292
- const itemEnumSchema = (0, utils_js_1.getArrayItemStringEnumSchema)(parameter.schema);
293
- const itemEnumType = itemEnumSchema && this.getSchemaType(ctx, { schema: itemEnumSchema });
294
- return itemEnumType ? (0, core_1.builderTemplate) `.joinToString(",", transform = ${itemEnumType}::value)` : '.joinToString(",")';
290
+ return '.joinToString()';
295
291
  }
296
- else if ((0, utils_js_1.getStringEnumSchema)(parameter.schema) && this.getSchemaType(ctx, { schema: parameter.schema })) {
292
+ else if (((_b = parameter.schema) === null || _b === void 0 ? void 0 : _b.kind) === 'string' && ((_c = parameter.schema.enum) === null || _c === void 0 ? void 0 : _c.length) &&
293
+ this.getSchemaType(ctx, { schema: parameter.schema })) {
297
294
  return '.value';
298
295
  }
299
296
  else {
@@ -312,19 +309,13 @@ class DefaultKotlinSpringReactiveWebClientGenerator extends file_generator_js_1.
312
309
  });
313
310
  }
314
311
  getParameterDefaultValue(ctx, args) {
315
- const { schema } = args.parameter;
316
- if (args.parameter.required) {
317
- return null;
318
- }
319
- if ((0, utils_js_1.getStringEnumSchema)(schema) && (schema === null || schema === void 0 ? void 0 : schema.default)) {
320
- return (0, core_1.builderTemplate) `${this.getTypeUsage(ctx, { schema, nullable: false })}.${(0, core_1.toCasing)(String(schema.default), ctx.config.enumValueNameCasing)}`;
321
- }
322
- const itemEnumSchema = (0, utils_js_1.getArrayItemStringEnumSchema)(schema);
323
- if (itemEnumSchema && Array.isArray(schema === null || schema === void 0 ? void 0 : schema.default)) {
324
- const itemType = this.getTypeUsage(ctx, { schema: itemEnumSchema, nullable: false });
325
- return index_js_1.kt.call(index_js_1.kt.refs.listOf.infer(), schema.default.map((x) => (0, core_1.builderTemplate) `${itemType}.${(0, core_1.toCasing)(String(x), ctx.config.enumValueNameCasing)}`));
326
- }
327
- return index_js_1.kt.toNode(schema === null || schema === void 0 ? void 0 : schema.default);
312
+ var _a, _b;
313
+ const { parameter } = args;
314
+ return !parameter.required
315
+ ? ((_a = parameter.schema) === null || _a === void 0 ? void 0 : _a.kind) === 'string' && parameter.schema.enum && parameter.schema.default
316
+ ? (0, core_1.builderTemplate) `${this.getTypeUsage(ctx, { schema: parameter.schema, nullable: false })}.${(0, core_1.toCasing)(String(parameter.schema.default), ctx.config.enumValueNameCasing)}`
317
+ : index_js_1.kt.toNode((_b = parameter.schema) === null || _b === void 0 ? void 0 : _b.default)
318
+ : null;
328
319
  }
329
320
  getTypeUsage(ctx, args) {
330
321
  const { schema, nullable, fallback } = args;
@@ -1,8 +1,6 @@
1
- import type { ApiComponent, ApiSchema, Nullable } from '@goast/core';
1
+ import type { ApiComponent, Nullable } from '@goast/core';
2
2
  export declare function toKotlinStringLiteral(value: Nullable<string>): string;
3
3
  export declare function toKotlinPropertyName(value: string): string;
4
4
  export declare function modifyString<TArgs extends unknown[]>(value: string, modifier: string | RegExp | ((value: string, ...args: TArgs) => string) | undefined, ...args: TArgs): string;
5
5
  export declare function getSourceDocLine<T>(component: ApiComponent<T>): string;
6
- export declare function getStringEnumSchema(schema: Nullable<ApiSchema>): ApiSchema<'string'> | undefined;
7
- export declare function getArrayItemStringEnumSchema(schema: Nullable<ApiSchema>): ApiSchema<'string'> | undefined;
8
6
  //# sourceMappingURL=utils.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../src/src/utils.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AAIrE,wBAAgB,qBAAqB,CAAC,KAAK,EAAE,QAAQ,CAAC,MAAM,CAAC,GAAG,MAAM,CAWrE;AAED,wBAAgB,oBAAoB,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAK1D;AAED,wBAAgB,YAAY,CAAC,KAAK,SAAS,OAAO,EAAE,EAClD,KAAK,EAAE,MAAM,EACb,QAAQ,EAAE,MAAM,GAAG,MAAM,GAAG,CAAC,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,IAAI,EAAE,KAAK,KAAK,MAAM,CAAC,GAAG,SAAS,EACnF,GAAG,IAAI,EAAE,KAAK,GACb,MAAM,CAYR;AAED,wBAAgB,gBAAgB,CAAC,CAAC,EAAE,SAAS,EAAE,YAAY,CAAC,CAAC,CAAC,GAAG,MAAM,CAItE;AAED,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,QAAQ,CAAC,SAAS,CAAC,GAAG,SAAS,CAAC,QAAQ,CAAC,GAAG,SAAS,CAEhG;AAED,wBAAgB,4BAA4B,CAAC,MAAM,EAAE,QAAQ,CAAC,SAAS,CAAC,GAAG,SAAS,CAAC,QAAQ,CAAC,GAAG,SAAS,CAEzG"}
1
+ {"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../src/src/utils.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AAI1D,wBAAgB,qBAAqB,CAAC,KAAK,EAAE,QAAQ,CAAC,MAAM,CAAC,GAAG,MAAM,CAWrE;AAED,wBAAgB,oBAAoB,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAK1D;AAED,wBAAgB,YAAY,CAAC,KAAK,SAAS,OAAO,EAAE,EAClD,KAAK,EAAE,MAAM,EACb,QAAQ,EAAE,MAAM,GAAG,MAAM,GAAG,CAAC,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,IAAI,EAAE,KAAK,KAAK,MAAM,CAAC,GAAG,SAAS,EACnF,GAAG,IAAI,EAAE,KAAK,GACb,MAAM,CAYR;AAED,wBAAgB,gBAAgB,CAAC,CAAC,EAAE,SAAS,EAAE,YAAY,CAAC,CAAC,CAAC,GAAG,MAAM,CAItE"}
@@ -4,8 +4,6 @@ exports.toKotlinStringLiteral = toKotlinStringLiteral;
4
4
  exports.toKotlinPropertyName = toKotlinPropertyName;
5
5
  exports.modifyString = modifyString;
6
6
  exports.getSourceDocLine = getSourceDocLine;
7
- exports.getStringEnumSchema = getStringEnumSchema;
8
- exports.getArrayItemStringEnumSchema = getArrayItemStringEnumSchema;
9
7
  const tslib_1 = require("tslib");
10
8
  const node_path_1 = tslib_1.__importDefault(require("node:path"));
11
9
  const node_process_1 = tslib_1.__importDefault(require("node:process"));
@@ -45,10 +43,3 @@ function getSourceDocLine(component) {
45
43
  const { line, col } = component.$src.pos;
46
44
  return `Source: ${file}:${line}:${col} (${component.$src.path})`;
47
45
  }
48
- function getStringEnumSchema(schema) {
49
- var _a;
50
- return (schema === null || schema === void 0 ? void 0 : schema.kind) === 'string' && ((_a = schema.enum) === null || _a === void 0 ? void 0 : _a.length) ? schema : undefined;
51
- }
52
- function getArrayItemStringEnumSchema(schema) {
53
- return (schema === null || schema === void 0 ? void 0 : schema.kind) === 'array' ? getStringEnumSchema(schema.items) : undefined;
54
- }
package/src/mod.ts DELETED
@@ -1,8 +0,0 @@
1
- export * from './src/ast/index.js';
2
- export * from './src/common-results.js';
3
- export * from './src/config.js';
4
- export * from './src/file-builder.js';
5
- export * from './src/generators/index.js';
6
- export * from './src/import-collection.js';
7
- export * from './src/types.js';
8
- export * from './src/utils.js';
package/src/src/assets.ts DELETED
@@ -1,9 +0,0 @@
1
- import { AssetManager } from '@goast/core';
2
- import { pathToFileURL, URL } from 'node:url';
3
-
4
- declare const __filename: string | undefined;
5
- const scriptUrl = typeof __filename === 'undefined' ? import.meta.url : pathToFileURL(__filename);
6
-
7
- const manager = new AssetManager(new URL('../assets/', scriptUrl));
8
- export const getAssetFileContent = manager.getAssetFileContent.bind(manager);
9
- export const copyAssetFile = manager.copyAssetFile.bind(manager);
@@ -1,66 +0,0 @@
1
- export { type KtAccessModifier as AccessModifier } from './common.js';
2
- export { KtNode as Node } from './node.js';
3
- export {
4
- KtAnnotation as Annotation,
5
- ktAnnotation as annotation,
6
- type KtAnnotationTarget as AnnotationTarget,
7
- } from './nodes/annotation.js';
8
- export { KtArgument as Argument, ktArgument as argument } from './nodes/argument.js';
9
- export { KtCall as Call, ktCall as call } from './nodes/call.js';
10
- export {
11
- KtClass as Class,
12
- ktClass as class,
13
- type KtClassKind as ClassKind,
14
- type KtClassMember as ClassMember,
15
- } from './nodes/class.js';
16
- export {
17
- KtCollectionLiteral as CollectionLiteral,
18
- ktCollectionLiteral as collectionLiteral,
19
- } from './nodes/collection-literal.js';
20
- export {
21
- KtConstructor as Constructor,
22
- ktConstructor as constructor,
23
- type KtDelegateTarget as DelegateTarget,
24
- } from './nodes/constructor.js';
25
- export { KtDocTag as DocTag, ktDocTag as docTag } from './nodes/doc-tag.js';
26
- export { KtDoc as Doc, ktDoc as doc } from './nodes/doc.js';
27
- export {
28
- KtEnumValue as EnumValue,
29
- ktEnumValue as enumValue,
30
- type KtEnumValueMember as EnumValueMember,
31
- } from './nodes/enum-value.js';
32
- export { KtEnum as Enum, ktEnum as enum, type KtEnumMember as EnumMember } from './nodes/enum.js';
33
- export { KtFunction as Function, ktFunction as function } from './nodes/function.js';
34
- export {
35
- KtGenericParameter as GenericParameter,
36
- ktGenericParameter as genericParameter,
37
- } from './nodes/generic-parameter.js';
38
- export { KtInitBlock as InitBlock, ktInitBlock as initBlock } from './nodes/init-block.js';
39
- export {
40
- KtInterface as Interface,
41
- ktInterface as interface,
42
- type KtInterfaceMember as InterfaceMember,
43
- } from './nodes/interface.js';
44
- export { KtLambdaType as LambdaType, ktLambdaType as lambdaType } from './nodes/lambda-type.js';
45
- export { KtLambda as Lambda, ktLambda as lambda } from './nodes/lambda.js';
46
- export { KtObject as Object, ktObject as object, type KtObjectMember as ObjectMember } from './nodes/object.js';
47
- export { KtParameter as Parameter, ktParameter as parameter } from './nodes/parameter.js';
48
- export {
49
- KtProperty as Property,
50
- ktProperty as property,
51
- KtPropertyAccessor as PropertyAccessor,
52
- KtPropertyGetter as PropertyGetter,
53
- KtPropertySetter as PropertySetter,
54
- } from './nodes/property.js';
55
- export {
56
- type KtGenericReferenceFactory as GenericReferenceFactory,
57
- KtReference as Reference,
58
- ktReference as reference,
59
- type KtReferenceFactory as ReferenceFactory,
60
- } from './nodes/reference.js';
61
- export { KtString as String, ktString as string } from './nodes/string.js';
62
- export { type KtType as Type, type KtValue as Value } from './nodes/types.js';
63
- export * as refs from './references/index.js';
64
- export { getKotlinBuilderOptions as getBuilderOptions } from './utils/get-kotlin-builder-options.js';
65
- export { toKtNode as toNode } from './utils/to-kt-node.js';
66
- export { writeKtNode as writeNode, writeKtNodes as writeNodes } from './utils/write-kt-node.js';
@@ -1 +0,0 @@
1
- export type KtAccessModifier = 'public' | 'protected' | 'internal' | 'private';
@@ -1 +0,0 @@
1
- export * as kt from './_index.js';
@@ -1,10 +0,0 @@
1
- import { AstNode, type AstNodeOptions, type SourceBuilder } from '@goast/core';
2
-
3
- export abstract class KtNode<TBuilder extends SourceBuilder, TInjects extends string = never> extends AstNode<
4
- TBuilder,
5
- TInjects
6
- > {
7
- constructor(options: AstNodeOptions<typeof AstNode<TBuilder, TInjects>>) {
8
- super(options);
9
- }
10
- }
@@ -1,79 +0,0 @@
1
- import { type AstNodeOptions, notNullish, type Nullable, type Prettify, type SourceBuilder } from '@goast/core';
2
-
3
- import { KtNode } from '../node.js';
4
- import { writeKtAnnotations } from '../utils/write-kt-annotations.js';
5
- import { writeKtNode } from '../utils/write-kt-node.js';
6
- import { type KtArgument, ktArgument } from './argument.js';
7
- import type { KtType, KtValue } from './types.js';
8
-
9
- type Injects = 'class' | 'target' | 'arguments';
10
-
11
- type Options<TBuilder extends SourceBuilder, TInjects extends string = never> = AstNodeOptions<
12
- typeof KtNode<TBuilder, TInjects | Injects>,
13
- {
14
- class: KtType<TBuilder>;
15
- arguments?: Nullable<Nullable<KtArgument<TBuilder> | KtValue<TBuilder>>[]>;
16
- target?: Nullable<KtAnnotationTarget>;
17
- }
18
- >;
19
-
20
- export type KtAnnotationTarget =
21
- | 'file'
22
- | 'property'
23
- | 'field'
24
- | 'get'
25
- | 'set'
26
- | 'receiver'
27
- | 'param'
28
- | 'setparam'
29
- | 'delegate';
30
-
31
- export class KtAnnotation<TBuilder extends SourceBuilder, TInjects extends string = never> extends KtNode<
32
- TBuilder,
33
- TInjects | Injects
34
- > {
35
- public class: KtType<TBuilder>;
36
- public arguments: (KtArgument<TBuilder> | KtValue<TBuilder>)[];
37
- public target: KtAnnotationTarget | null;
38
-
39
- constructor(options: Options<TBuilder, TInjects>) {
40
- super(options);
41
- this.class = options.class;
42
- this.arguments = options.arguments?.filter(notNullish) ?? [];
43
- this.target = options.target ?? null;
44
- }
45
-
46
- protected override onWrite(builder: TBuilder): void {
47
- builder.append('@');
48
-
49
- if (this.target) {
50
- builder.append(this.inject.beforeTarget);
51
- builder.append(this.target);
52
- builder.append(this.inject.afterTarget);
53
- builder.append(':');
54
- }
55
-
56
- builder.append(this.inject.beforeClass);
57
- writeKtNode(builder, this.class);
58
- builder.append(this.inject.afterClass);
59
-
60
- if (this.arguments.length > 0) {
61
- builder.append(this.inject.beforeArguments);
62
- ktArgument.write(builder, this.arguments);
63
- builder.append(this.inject.afterArguments);
64
- }
65
- }
66
- }
67
-
68
- const createAnnotation = <TBuilder extends SourceBuilder>(
69
- $class: Options<TBuilder>['class'],
70
- $arguments?: Options<TBuilder>['arguments'],
71
- options?: Prettify<Omit<Options<TBuilder>, 'class' | 'arguments'>>,
72
- ): KtAnnotation<TBuilder> => new KtAnnotation<TBuilder>({ ...options, class: $class, arguments: $arguments });
73
-
74
- export const ktAnnotation: typeof createAnnotation & { write: typeof writeKtAnnotations } = Object.assign(
75
- createAnnotation,
76
- {
77
- write: writeKtAnnotations,
78
- },
79
- );
@@ -1,62 +0,0 @@
1
- import type { AstNodeOptions, Nullable, Prettify, SourceBuilder } from '@goast/core';
2
-
3
- import { KtNode } from '../node.js';
4
- import { writeKtArguments } from '../utils/write-kt-arguments.js';
5
- import { writeKtNode } from '../utils/write-kt-node.js';
6
- import type { KtValue } from './types.js';
7
-
8
- type Injects = 'name' | 'value';
9
-
10
- type Options<TBuilder extends SourceBuilder, TInjects extends string = never> = AstNodeOptions<
11
- typeof KtNode<TBuilder, TInjects | Injects>,
12
- {
13
- name?: Nullable<string>;
14
- value: KtValue<TBuilder>;
15
- }
16
- >;
17
-
18
- export class KtArgument<TBuilder extends SourceBuilder, TInjects extends string = never> extends KtNode<
19
- TBuilder,
20
- TInjects | Injects
21
- > {
22
- public name: string | null;
23
- public value: KtValue<TBuilder>;
24
-
25
- constructor(options: Options<TBuilder, TInjects>) {
26
- super(options);
27
- this.name = options?.name ?? null;
28
- this.value = options.value;
29
- }
30
-
31
- protected override onWrite(builder: TBuilder): void {
32
- if (this.name) {
33
- builder.append(this.inject.beforeName);
34
- builder.append(this.name);
35
- builder.append(this.inject.afterName);
36
- builder.append(' = ');
37
- }
38
-
39
- builder.append(this.inject.beforeValue);
40
- writeKtNode(builder, this.value);
41
- builder.append(this.inject.afterValue);
42
- }
43
- }
44
-
45
- const createArgument = <TBuilder extends SourceBuilder>(
46
- value: Options<TBuilder>['value'],
47
- options?: Prettify<Omit<Options<TBuilder>, 'value'>>,
48
- ): KtArgument<TBuilder> => new KtArgument<TBuilder>({ ...options, value });
49
-
50
- const createNamedArgument = <TBuilder extends SourceBuilder>(
51
- name: Options<TBuilder>['name'],
52
- value: Options<TBuilder>['value'],
53
- options?: Prettify<Omit<Options<TBuilder>, 'value' | 'name'>>,
54
- ): KtArgument<TBuilder> => new KtArgument<TBuilder>({ ...options, value, name });
55
-
56
- export const ktArgument: typeof createArgument & {
57
- named: typeof createNamedArgument;
58
- write: typeof writeKtArguments;
59
- } = Object.assign(createArgument, {
60
- named: createNamedArgument,
61
- write: writeKtArguments,
62
- });
@@ -1,75 +0,0 @@
1
- import {
2
- type ArrayItem,
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 { writeKtNode, writeKtNodes } from '../utils/write-kt-node.js';
12
- import { type KtArgument, ktArgument } from './argument.js';
13
- import type { KtType, KtValue } from './types.js';
14
-
15
- type Injects = never;
16
-
17
- type Options<TBuilder extends SourceBuilder, TInjects extends string = never> = AstNodeOptions<
18
- typeof KtNode<TBuilder, TInjects | Injects>,
19
- {
20
- path: Nullable<KtType<TBuilder> | KtValue<TBuilder>>[];
21
- arguments?: Nullable<Nullable<KtArgument<TBuilder> | KtValue<TBuilder>>[]>;
22
- infix?: boolean;
23
- }
24
- >;
25
-
26
- export class KtCall<TBuilder extends SourceBuilder, TInjects extends string = never> extends KtNode<
27
- TBuilder,
28
- TInjects | Injects
29
- > {
30
- public path: (KtType<TBuilder> | KtValue<TBuilder>)[];
31
- public arguments: (KtArgument<TBuilder> | KtValue<TBuilder>)[] | null;
32
- public infix: boolean;
33
-
34
- constructor(options: Options<TBuilder, TInjects>) {
35
- super(options);
36
- this.path = options.path.filter(notNullish);
37
- this.arguments = options.arguments?.filter(notNullish) ?? null;
38
- this.infix = options.infix ?? false;
39
- }
40
-
41
- protected override onWrite(builder: TBuilder): void {
42
- if (this.infix && this.arguments?.length === 1 && this.path.length > 1) {
43
- writeKtNodes(builder, this.path.slice(0, 1), { separator: '.' });
44
- builder.append(' ');
45
- writeKtNode(builder, this.path.at(-1));
46
- builder.append(' ');
47
- writeKtNode(builder, this.arguments[0]);
48
- } else {
49
- if (this.path.length > 2) {
50
- writeKtNode(builder, this.path[0]);
51
- builder.ensureCurrentLineEmpty();
52
- builder.indent((builder) => {
53
- builder.append('.');
54
- writeKtNodes(builder, this.path.slice(1), { separator: '\n.' });
55
- });
56
- } else {
57
- writeKtNodes(builder, this.path, { separator: '.' });
58
- }
59
-
60
- if (this.arguments) {
61
- ktArgument.write(builder, this.arguments);
62
- }
63
- }
64
- }
65
- }
66
-
67
- const createCall = <TBuilder extends SourceBuilder>(
68
- path: Options<TBuilder>['path'] | ArrayItem<Options<TBuilder>['path']>,
69
- args?: Options<TBuilder>['arguments'],
70
- options?: Prettify<Omit<Options<TBuilder>, 'path' | 'arguments'>>,
71
- ): KtCall<TBuilder> => new KtCall<TBuilder>({ ...options, path: Array.isArray(path) ? path : [path], arguments: args });
72
-
73
- export const ktCall: typeof createCall & { write: typeof writeKtNodes } = Object.assign(createCall, {
74
- write: writeKtNodes,
75
- });
@@ -1,178 +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 { writeKtNode, writeKtNodes } from '../utils/write-kt-node.js';
16
- import { type KtAnnotation, ktAnnotation } from './annotation.js';
17
- import { ktArgument } from './argument.js';
18
- import type { KtConstructor } from './constructor.js';
19
- import { type KtDoc, ktDoc } from './doc.js';
20
- import type { KtEnum } from './enum.js';
21
- import type { KtFunction } from './function.js';
22
- import { type KtGenericParameter, ktGenericParameter } from './generic-parameter.js';
23
- import { type KtInitBlock, ktInitBlock } from './init-block.js';
24
- import type { KtInterface } from './interface.js';
25
- import type { KtObject } from './object.js';
26
- import type { KtProperty } from './property.js';
27
- import type { KtType } from './types.js';
28
-
29
- type Injects =
30
- | 'doc'
31
- | 'annotations'
32
- | 'modifiers'
33
- | 'name'
34
- | 'generics'
35
- | 'primaryConstructor'
36
- | 'inheritList'
37
- | 'body'
38
- | 'members';
39
-
40
- type Options<TBuilder extends SourceBuilder, TInjects extends string = never> = AstNodeOptions<
41
- typeof KtNode<TBuilder, TInjects | Injects>,
42
- {
43
- doc?: Nullable<KtDoc<TBuilder>>;
44
- annotations?: Nullable<Nullable<KtAnnotation<TBuilder>>[]>;
45
- accessModifier?: Nullable<KtAccessModifier>;
46
- open?: Nullable<boolean>;
47
- abstract?: Nullable<boolean>;
48
- classKind?: Nullable<KtClassKind>;
49
- name: string;
50
- generics?: Nullable<Nullable<KtGenericParameter<TBuilder> | BasicAppendValue<TBuilder>>[]>;
51
- primaryConstructor?: Nullable<KtConstructor<TBuilder>>;
52
- extends?: Nullable<KtType<TBuilder>>;
53
- implements?: Nullable<Nullable<KtType<TBuilder>>[]>;
54
- companionObject?: Nullable<KtObject<TBuilder>>;
55
- members?: Nullable<Nullable<KtClassMember<TBuilder>>[]>;
56
- }
57
- >;
58
-
59
- export type KtClassKind = 'data' | 'value' | 'annotation' | 'sealed';
60
- export type KtClassMember<TBuilder extends SourceBuilder> =
61
- | KtConstructor<TBuilder>
62
- | KtEnum<TBuilder>
63
- | KtInitBlock<TBuilder>
64
- | KtInterface<TBuilder>
65
- | KtProperty<TBuilder>
66
- | KtFunction<TBuilder>
67
- | KtClass<TBuilder>
68
- | AppendValue<TBuilder>;
69
-
70
- export class KtClass<TBuilder extends SourceBuilder, TInjects extends string = never> extends KtNode<
71
- TBuilder,
72
- TInjects | Injects
73
- > {
74
- public doc: KtDoc<TBuilder> | null;
75
- public annotations: KtAnnotation<TBuilder>[];
76
- public accessModifier: KtAccessModifier | null;
77
- public open: boolean;
78
- public abstract: boolean;
79
- public classKind: KtClassKind | null;
80
- public name: string;
81
- public generics: (KtGenericParameter<TBuilder> | BasicAppendValue<TBuilder>)[];
82
- public primaryConstructor: KtConstructor<TBuilder> | null;
83
- public extends: KtType<TBuilder> | null;
84
- public implements: KtType<TBuilder>[];
85
- public members: KtClassMember<TBuilder>[];
86
- public companionObject: Nullable<KtObject<TBuilder>>;
87
-
88
- constructor(options: Options<TBuilder, TInjects>) {
89
- super(options);
90
- this.doc = options.doc ?? null;
91
- this.annotations = options.annotations?.filter(notNullish) ?? [];
92
- this.accessModifier = options.accessModifier ?? null;
93
- this.open = options.open ?? false;
94
- this.abstract = options.abstract ?? false;
95
- this.classKind = options.classKind ?? null;
96
- this.name = options.name;
97
- this.generics = options.generics?.filter(notNullish) ?? [];
98
- this.primaryConstructor = options.primaryConstructor ?? null;
99
- this.extends = options.extends ?? null;
100
- this.implements = options.implements?.filter(notNullish) ?? [];
101
- this.members = options.members?.filter(notNullish) ?? [];
102
- this.companionObject = options.companionObject;
103
- }
104
-
105
- protected override onWrite(builder: TBuilder): void {
106
- builder.append(this.inject.beforeDoc);
107
- ktDoc.get(this.doc, { generics: this.generics, parameters: this.primaryConstructor?.parameters })?.write(builder);
108
- builder.append(this.inject.afterDoc);
109
-
110
- builder.append(this.inject.beforeAnnotations);
111
- ktAnnotation.write(builder, this.annotations, { multiline: true });
112
- builder.append(this.inject.afterAnnotations);
113
-
114
- builder.append(this.inject.beforeModifiers);
115
- if (this.accessModifier) builder.append(this.accessModifier, ' ');
116
- if (this.open) builder.append('open ');
117
- if (this.abstract) builder.append('abstract ');
118
- if (this.classKind) builder.append(this.classKind, ' ');
119
- builder.append(this.inject.afterModifiers);
120
-
121
- builder.append('class ');
122
- builder.append(this.inject.beforeName, this.name, this.inject.afterName);
123
-
124
- builder.append(this.inject.beforeGenerics);
125
- ktGenericParameter.write(builder, this.generics);
126
- builder.append(this.inject.afterGenerics);
127
-
128
- if (this.primaryConstructor) {
129
- builder.append(this.inject.beforePrimaryConstructor);
130
- this.primaryConstructor.writeAsPrimary(builder);
131
- builder.append(this.inject.afterPrimaryConstructor);
132
- }
133
-
134
- if (this.extends || this.implements.length > 0) {
135
- builder.append(' : ');
136
- builder.append(this.inject.beforeInheritList);
137
- writeKtNode(builder, this.extends);
138
- if (this.extends && this.primaryConstructor?.delegateTarget === 'super') {
139
- ktArgument.write(builder, this.primaryConstructor.delegateArguments);
140
- }
141
- if (this.extends && this.implements.length > 0) {
142
- builder.append(', ');
143
- }
144
- writeKtNodes(builder, this.implements, { separator: ', ' });
145
- builder.append(this.inject.afterInheritList);
146
- }
147
-
148
- if (this.members.length > 0 || this.primaryConstructor?.body || this.companionObject) {
149
- builder.append(' ');
150
- builder.append(this.inject.beforeBody);
151
- builder.parenthesize(
152
- '{}',
153
- (b) => {
154
- b.append(this.inject.beforeMembers);
155
- writeKtMembers(b, [
156
- this.companionObject ? createOverwriteProxy(this.companionObject, { companion: true }) : null,
157
- this.primaryConstructor?.body ? ktInitBlock(this.primaryConstructor?.body) : null,
158
- ...this.members,
159
- ]);
160
- b.append(this.inject.afterMembers);
161
- },
162
- { multiline: true },
163
- );
164
- builder.append(this.inject.afterBody);
165
- }
166
-
167
- builder.appendLine();
168
- }
169
- }
170
-
171
- const createClass = <TBuilder extends SourceBuilder>(
172
- name: Options<TBuilder>['name'],
173
- options?: Prettify<Omit<Options<TBuilder>, 'name'>>,
174
- ): KtClass<TBuilder> => new KtClass<TBuilder>({ ...options, name });
175
-
176
- export const ktClass: typeof createClass & { write: typeof writeKtNodes } = Object.assign(createClass, {
177
- write: writeKtNodes,
178
- });
@@ -1,49 +0,0 @@
1
- import { type AstNodeOptions, notNullish, type Nullable, type SourceBuilder } from '@goast/core';
2
-
3
- import { KtNode } from '../node.js';
4
- import { writeKtNodes } from '../utils/write-kt-node.js';
5
- import type { KtValue } from './types.js';
6
-
7
- type Injects = never;
8
-
9
- type Options<TBuilder extends SourceBuilder, TInjects extends string = never> = AstNodeOptions<
10
- typeof KtNode<TBuilder, TInjects | Injects>,
11
- {
12
- elements: Nullable<Nullable<KtValue<TBuilder>>[]>;
13
- }
14
- >;
15
-
16
- export class KtCollectionLiteral<TBuilder extends SourceBuilder, TInjects extends string = never> extends KtNode<
17
- TBuilder,
18
- TInjects | Injects
19
- > {
20
- public elements: KtValue<TBuilder>[];
21
-
22
- constructor(options: Options<TBuilder, TInjects>) {
23
- super(options);
24
- this.elements = options.elements?.filter(notNullish) ?? [];
25
- }
26
-
27
- protected override onWrite(builder: TBuilder): void {
28
- const multiline = this.elements.length > 2;
29
- builder.parenthesize(
30
- '[]',
31
- (b) => {
32
- writeKtNodes(b, this.elements, { separator: multiline ? ',\n' : ', ' });
33
- },
34
- { multiline },
35
- );
36
- }
37
- }
38
-
39
- const createCollectionLiteral = <TBuilder extends SourceBuilder>(
40
- elements: Options<TBuilder>['elements'],
41
- options?: Omit<Options<TBuilder>, 'elements'>,
42
- ): KtCollectionLiteral<TBuilder> => new KtCollectionLiteral<TBuilder>({ ...options, elements });
43
-
44
- export const ktCollectionLiteral: typeof createCollectionLiteral & { write: typeof writeKtNodes } = Object.assign(
45
- createCollectionLiteral,
46
- {
47
- write: writeKtNodes,
48
- },
49
- );