@goast/kotlin 0.5.13-beta.1 → 0.5.14

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 (99) 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/services/okhttp3-clients/okhttp3-client-generator.js +1 -1
  13. package/esm/src/generators/services/spring-controllers/spring-controller-generator.d.ts.map +1 -1
  14. package/esm/src/generators/services/spring-controllers/spring-controller-generator.js +3 -1
  15. package/esm/src/generators/services/spring-reactive-web-clients/spring-reactive-web-client-generator.js +1 -1
  16. package/package.json +1 -1
  17. package/script/src/generators/services/okhttp3-clients/okhttp3-client-generator.js +1 -1
  18. package/script/src/generators/services/spring-controllers/spring-controller-generator.d.ts.map +1 -1
  19. package/script/src/generators/services/spring-controllers/spring-controller-generator.js +3 -1
  20. package/script/src/generators/services/spring-reactive-web-clients/spring-reactive-web-client-generator.js +1 -1
  21. package/src/mod.ts +8 -0
  22. package/src/src/assets.ts +9 -0
  23. package/src/src/ast/_index.ts +66 -0
  24. package/src/src/ast/common.ts +1 -0
  25. package/src/src/ast/index.ts +1 -0
  26. package/src/src/ast/node.ts +10 -0
  27. package/src/src/ast/nodes/annotation.ts +79 -0
  28. package/src/src/ast/nodes/argument.ts +62 -0
  29. package/src/src/ast/nodes/call.ts +75 -0
  30. package/src/src/ast/nodes/class.ts +178 -0
  31. package/src/src/ast/nodes/collection-literal.ts +49 -0
  32. package/src/src/ast/nodes/constructor.ts +126 -0
  33. package/src/src/ast/nodes/doc-tag.ts +138 -0
  34. package/src/src/ast/nodes/doc.ts +111 -0
  35. package/src/src/ast/nodes/enum-value.ts +100 -0
  36. package/src/src/ast/nodes/enum.ts +163 -0
  37. package/src/src/ast/nodes/function.ts +178 -0
  38. package/src/src/ast/nodes/generic-parameter.ts +54 -0
  39. package/src/src/ast/nodes/init-block.ts +38 -0
  40. package/src/src/ast/nodes/interface.ts +133 -0
  41. package/src/src/ast/nodes/lambda-type.ts +73 -0
  42. package/src/src/ast/nodes/lambda.ts +74 -0
  43. package/src/src/ast/nodes/object.ts +102 -0
  44. package/src/src/ast/nodes/parameter.ts +118 -0
  45. package/src/src/ast/nodes/property.ts +225 -0
  46. package/src/src/ast/nodes/reference.ts +178 -0
  47. package/src/src/ast/nodes/string.ts +114 -0
  48. package/src/src/ast/nodes/types.ts +23 -0
  49. package/src/src/ast/references/index.ts +10 -0
  50. package/src/src/ast/references/jackson.ts +59 -0
  51. package/src/src/ast/references/jakarta.ts +14 -0
  52. package/src/src/ast/references/java.ts +27 -0
  53. package/src/src/ast/references/kotlin.ts +41 -0
  54. package/src/src/ast/references/kotlinx.ts +14 -0
  55. package/src/src/ast/references/okhttp3.ts +5 -0
  56. package/src/src/ast/references/reactor.ts +5 -0
  57. package/src/src/ast/references/spring-reactive.ts +37 -0
  58. package/src/src/ast/references/spring.ts +86 -0
  59. package/src/src/ast/references/swagger.ts +23 -0
  60. package/src/src/ast/utils/get-kotlin-builder-options.ts +19 -0
  61. package/src/src/ast/utils/to-kt-node.ts +31 -0
  62. package/src/src/ast/utils/write-kt-annotations.ts +15 -0
  63. package/src/src/ast/utils/write-kt-arguments.ts +45 -0
  64. package/src/src/ast/utils/write-kt-enum-values.ts +27 -0
  65. package/src/src/ast/utils/write-kt-generic-parameters.ts +12 -0
  66. package/src/src/ast/utils/write-kt-members.ts +25 -0
  67. package/src/src/ast/utils/write-kt-node.ts +37 -0
  68. package/src/src/ast/utils/write-kt-parameters.ts +25 -0
  69. package/src/src/common-results.ts +4 -0
  70. package/src/src/config.ts +61 -0
  71. package/src/src/file-builder.ts +112 -0
  72. package/src/src/generators/file-generator.ts +29 -0
  73. package/src/src/generators/index.ts +5 -0
  74. package/src/src/generators/models/args.ts +136 -0
  75. package/src/src/generators/models/index.ts +4 -0
  76. package/src/src/generators/models/model-generator.ts +736 -0
  77. package/src/src/generators/models/models-generator.ts +65 -0
  78. package/src/src/generators/models/models.ts +95 -0
  79. package/src/src/generators/services/okhttp3-clients/args.ts +90 -0
  80. package/src/src/generators/services/okhttp3-clients/index.ts +4 -0
  81. package/src/src/generators/services/okhttp3-clients/models.ts +73 -0
  82. package/src/src/generators/services/okhttp3-clients/okhttp3-client-generator.ts +627 -0
  83. package/src/src/generators/services/okhttp3-clients/okhttp3-clients-generator.ts +188 -0
  84. package/src/src/generators/services/okhttp3-clients/refs.ts +59 -0
  85. package/src/src/generators/services/spring-controllers/args.ts +95 -0
  86. package/src/src/generators/services/spring-controllers/index.ts +4 -0
  87. package/src/src/generators/services/spring-controllers/models.ts +76 -0
  88. package/src/src/generators/services/spring-controllers/refs.ts +17 -0
  89. package/src/src/generators/services/spring-controllers/spring-controller-generator.ts +1122 -0
  90. package/src/src/generators/services/spring-controllers/spring-controllers-generator.ts +140 -0
  91. package/src/src/generators/services/spring-reactive-web-clients/args.ts +112 -0
  92. package/src/src/generators/services/spring-reactive-web-clients/index.ts +4 -0
  93. package/src/src/generators/services/spring-reactive-web-clients/models.ts +78 -0
  94. package/src/src/generators/services/spring-reactive-web-clients/refs.ts +11 -0
  95. package/src/src/generators/services/spring-reactive-web-clients/spring-reactive-web-client-generator.ts +641 -0
  96. package/src/src/generators/services/spring-reactive-web-clients/spring-reactive-web-clients-generator.ts +125 -0
  97. package/src/src/import-collection.ts +98 -0
  98. package/src/src/types.ts +3 -0
  99. package/src/src/utils.ts +55 -0
@@ -1,18 +1,18 @@
1
- package @PACKAGE_NAME@
2
-
3
- /**
4
- * Defines a config object for a given request.
5
- * NOTE: This object doesn't include 'body' because it
6
- * allows for caching of the constructed object
7
- * for many request definitions.
8
- * NOTE: Headers is a Map<String,String> because rfc2616 defines
9
- * multi-valued headers as csv-only.
10
- */
11
- data class RequestConfig<T>(
12
- val method: RequestMethod,
13
- val path: String,
14
- val headers: MutableMap<String, String> = mutableMapOf(),
15
- val query: MutableMap<String, List<String>> = mutableMapOf(),
16
- val requiresAuthentication: Boolean,
17
- val body: T? = null
18
- )
1
+ package @PACKAGE_NAME@
2
+
3
+ /**
4
+ * Defines a config object for a given request.
5
+ * NOTE: This object doesn't include 'body' because it
6
+ * allows for caching of the constructed object
7
+ * for many request definitions.
8
+ * NOTE: Headers is a Map<String,String> because rfc2616 defines
9
+ * multi-valued headers as csv-only.
10
+ */
11
+ data class RequestConfig<T>(
12
+ val method: RequestMethod,
13
+ val path: String,
14
+ val headers: MutableMap<String, String> = mutableMapOf(),
15
+ val query: MutableMap<String, List<String>> = mutableMapOf(),
16
+ val requiresAuthentication: Boolean,
17
+ val body: T? = null
18
+ )
@@ -1,8 +1,8 @@
1
- package @PACKAGE_NAME@
2
-
3
- /**
4
- * Provides enumerated HTTP verbs
5
- */
6
- enum class RequestMethod {
7
- GET, DELETE, HEAD, OPTIONS, PATCH, POST, PUT
8
- }
1
+ package @PACKAGE_NAME@
2
+
3
+ /**
4
+ * Provides enumerated HTTP verbs
5
+ */
6
+ enum class RequestMethod {
7
+ GET, DELETE, HEAD, OPTIONS, PATCH, POST, PUT
8
+ }
@@ -1,24 +1,24 @@
1
- package @PACKAGE_NAME@
2
-
3
- import okhttp3.Response
4
-
5
- /**
6
- * Provides an extension to evaluation whether the response is a 1xx code
7
- */
8
- val Response.isInformational: Boolean get() = this.code in 100..199
9
-
10
- /**
11
- * Provides an extension to evaluation whether the response is a 3xx code
12
- */
13
- @Suppress("EXTENSION_SHADOWED_BY_MEMBER")
14
- val Response.isRedirect: Boolean get() = this.code in 300..399
15
-
16
- /**
17
- * Provides an extension to evaluation whether the response is a 4xx code
18
- */
19
- val Response.isClientError: Boolean get() = this.code in 400..499
20
-
21
- /**
22
- * Provides an extension to evaluation whether the response is a 5xx (Standard) through 999 (non-standard) code
23
- */
24
- val Response.isServerError: Boolean get() = this.code in 500..999
1
+ package @PACKAGE_NAME@
2
+
3
+ import okhttp3.Response
4
+
5
+ /**
6
+ * Provides an extension to evaluation whether the response is a 1xx code
7
+ */
8
+ val Response.isInformational: Boolean get() = this.code in 100..199
9
+
10
+ /**
11
+ * Provides an extension to evaluation whether the response is a 3xx code
12
+ */
13
+ @Suppress("EXTENSION_SHADOWED_BY_MEMBER")
14
+ val Response.isRedirect: Boolean get() = this.code in 300..399
15
+
16
+ /**
17
+ * Provides an extension to evaluation whether the response is a 4xx code
18
+ */
19
+ val Response.isClientError: Boolean get() = this.code in 400..499
20
+
21
+ /**
22
+ * Provides an extension to evaluation whether the response is a 5xx (Standard) through 999 (non-standard) code
23
+ */
24
+ val Response.isServerError: Boolean get() = this.code in 500..999
@@ -1,33 +1,33 @@
1
- package @PACKAGE_NAME@
2
-
3
- import org.springframework.core.io.buffer.DataBuffer
4
- import org.springframework.http.MediaType
5
- import org.springframework.http.client.MultipartBodyBuilder
6
- import org.springframework.http.codec.multipart.FilePart
7
- import java.io.File
8
-
9
- interface ApiRequestFile {
10
- companion object {
11
- fun from(file: File): ApiRequestFile =
12
- object : ApiRequestFile {
13
- override fun addToBuilder(builder: MultipartBodyBuilder) {
14
- builder
15
- .part("file", file)
16
- .filename(file.name)
17
- .contentType(MediaType.APPLICATION_OCTET_STREAM)
18
- }
19
- }
20
-
21
- fun from(filePart: FilePart): ApiRequestFile =
22
- object : ApiRequestFile {
23
- override fun addToBuilder(builder: MultipartBodyBuilder) {
24
- builder
25
- .asyncPart("file", filePart.content(), DataBuffer::class.java)
26
- .filename(filePart.filename())
27
- .contentType(filePart.headers().contentType ?: MediaType.APPLICATION_OCTET_STREAM)
28
- }
29
- }
30
- }
31
-
32
- fun addToBuilder(builder: MultipartBodyBuilder)
33
- }
1
+ package @PACKAGE_NAME@
2
+
3
+ import org.springframework.core.io.buffer.DataBuffer
4
+ import org.springframework.http.MediaType
5
+ import org.springframework.http.client.MultipartBodyBuilder
6
+ import org.springframework.http.codec.multipart.FilePart
7
+ import java.io.File
8
+
9
+ interface ApiRequestFile {
10
+ companion object {
11
+ fun from(file: File): ApiRequestFile =
12
+ object : ApiRequestFile {
13
+ override fun addToBuilder(builder: MultipartBodyBuilder) {
14
+ builder
15
+ .part("file", file)
16
+ .filename(file.name)
17
+ .contentType(MediaType.APPLICATION_OCTET_STREAM)
18
+ }
19
+ }
20
+
21
+ fun from(filePart: FilePart): ApiRequestFile =
22
+ object : ApiRequestFile {
23
+ override fun addToBuilder(builder: MultipartBodyBuilder) {
24
+ builder
25
+ .asyncPart("file", filePart.content(), DataBuffer::class.java)
26
+ .filename(filePart.filename())
27
+ .contentType(filePart.headers().contentType ?: MediaType.APPLICATION_OCTET_STREAM)
28
+ }
29
+ }
30
+ }
31
+
32
+ fun addToBuilder(builder: MultipartBodyBuilder)
33
+ }
@@ -250,7 +250,7 @@ export class DefaultKotlinOkHttp3Generator extends KotlinFileGenerator {
250
250
  if (((_a = parameter.schema) === null || _a === void 0 ? void 0 : _a.kind) === 'array') {
251
251
  const itemEnumSchema = getArrayItemStringEnumSchema(parameter.schema);
252
252
  const itemEnumType = itemEnumSchema && this.getSchemaType(ctx, { schema: itemEnumSchema });
253
- return itemEnumType ? s `.joinToString(transform = ${itemEnumType}::value)` : '.joinToString()';
253
+ return itemEnumType ? s `.joinToString(",", transform = ${itemEnumType}::value)` : '.joinToString(",")';
254
254
  }
255
255
  else if (getStringEnumSchema(parameter.schema) && this.getSchemaType(ctx, { schema: parameter.schema })) {
256
256
  return '.value';
@@ -1 +1 @@
1
- {"version":3,"file":"spring-controller-generator.d.ts","sourceRoot":"","sources":["../../../../../src/src/generators/services/spring-controllers/spring-controller-generator.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"spring-controller-generator.d.ts","sourceRoot":"","sources":["../../../../../src/src/generators/services/spring-controllers/spring-controller-generator.ts"],"names":[],"mappings":"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"}
@@ -218,7 +218,9 @@ export class DefaultKotlinSpringControllerGenerator extends KotlinFileGenerator
218
218
  result.annotations.push(kt.annotation(kt.refs.jakarta.valid()));
219
219
  }
220
220
  if (parameter.target === 'body' && !parameter.multipart) {
221
- result.annotations.push(kt.annotation(kt.refs.spring.requestBody()));
221
+ // A bare @RequestBody is required as far as Spring is concerned, so an optional body has to say so in the
222
+ // annotation too - the nullable parameter type alone still answers 400 when the body is missing.
223
+ result.annotations.push(kt.annotation(kt.refs.spring.requestBody(), parameter.required ? [] : [kt.argument.named('required', parameter.required)]));
222
224
  }
223
225
  if (parameter.target === 'query') {
224
226
  const annotation = kt.annotation(kt.refs.spring.requestParam(), [
@@ -288,7 +288,7 @@ export class DefaultKotlinSpringReactiveWebClientGenerator extends KotlinFileGen
288
288
  if (((_a = parameter.schema) === null || _a === void 0 ? void 0 : _a.kind) === 'array') {
289
289
  const itemEnumSchema = getArrayItemStringEnumSchema(parameter.schema);
290
290
  const itemEnumType = itemEnumSchema && this.getSchemaType(ctx, { schema: itemEnumSchema });
291
- return itemEnumType ? s `.joinToString(transform = ${itemEnumType}::value)` : '.joinToString()';
291
+ return itemEnumType ? s `.joinToString(",", transform = ${itemEnumType}::value)` : '.joinToString(",")';
292
292
  }
293
293
  else if (getStringEnumSchema(parameter.schema) && this.getSchemaType(ctx, { schema: parameter.schema })) {
294
294
  return '.value';
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@goast/kotlin",
3
- "version": "0.5.13-beta.1",
3
+ "version": "0.5.14",
4
4
  "description": "Provides gOAst generators for generating Kotlin code from OpenAPI specifications.",
5
5
  "author": {
6
6
  "name": "Marc Schmidt (MaSch0212)",
@@ -253,7 +253,7 @@ class DefaultKotlinOkHttp3Generator extends file_generator_js_1.KotlinFileGenera
253
253
  if (((_a = parameter.schema) === null || _a === void 0 ? void 0 : _a.kind) === 'array') {
254
254
  const itemEnumSchema = (0, utils_js_1.getArrayItemStringEnumSchema)(parameter.schema);
255
255
  const itemEnumType = itemEnumSchema && this.getSchemaType(ctx, { schema: itemEnumSchema });
256
- return itemEnumType ? (0, core_1.builderTemplate) `.joinToString(transform = ${itemEnumType}::value)` : '.joinToString()';
256
+ return itemEnumType ? (0, core_1.builderTemplate) `.joinToString(",", transform = ${itemEnumType}::value)` : '.joinToString(",")';
257
257
  }
258
258
  else if ((0, utils_js_1.getStringEnumSchema)(parameter.schema) && this.getSchemaType(ctx, { schema: parameter.schema })) {
259
259
  return '.value';
@@ -1 +1 @@
1
- {"version":3,"file":"spring-controller-generator.d.ts","sourceRoot":"","sources":["../../../../../src/src/generators/services/spring-controllers/spring-controller-generator.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"spring-controller-generator.d.ts","sourceRoot":"","sources":["../../../../../src/src/generators/services/spring-controllers/spring-controller-generator.ts"],"names":[],"mappings":"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"}
@@ -222,7 +222,9 @@ class DefaultKotlinSpringControllerGenerator extends file_generator_js_1.KotlinF
222
222
  result.annotations.push(index_js_1.kt.annotation(index_js_1.kt.refs.jakarta.valid()));
223
223
  }
224
224
  if (parameter.target === 'body' && !parameter.multipart) {
225
- result.annotations.push(index_js_1.kt.annotation(index_js_1.kt.refs.spring.requestBody()));
225
+ // A bare @RequestBody is required as far as Spring is concerned, so an optional body has to say so in the
226
+ // annotation too - the nullable parameter type alone still answers 400 when the body is missing.
227
+ result.annotations.push(index_js_1.kt.annotation(index_js_1.kt.refs.spring.requestBody(), parameter.required ? [] : [index_js_1.kt.argument.named('required', parameter.required)]));
226
228
  }
227
229
  if (parameter.target === 'query') {
228
230
  const annotation = index_js_1.kt.annotation(index_js_1.kt.refs.spring.requestParam(), [
@@ -291,7 +291,7 @@ class DefaultKotlinSpringReactiveWebClientGenerator extends file_generator_js_1.
291
291
  if (((_a = parameter.schema) === null || _a === void 0 ? void 0 : _a.kind) === 'array') {
292
292
  const itemEnumSchema = (0, utils_js_1.getArrayItemStringEnumSchema)(parameter.schema);
293
293
  const itemEnumType = itemEnumSchema && this.getSchemaType(ctx, { schema: itemEnumSchema });
294
- return itemEnumType ? (0, core_1.builderTemplate) `.joinToString(transform = ${itemEnumType}::value)` : '.joinToString()';
294
+ return itemEnumType ? (0, core_1.builderTemplate) `.joinToString(",", transform = ${itemEnumType}::value)` : '.joinToString(",")';
295
295
  }
296
296
  else if ((0, utils_js_1.getStringEnumSchema)(parameter.schema) && this.getSchemaType(ctx, { schema: parameter.schema })) {
297
297
  return '.value';
package/src/mod.ts ADDED
@@ -0,0 +1,8 @@
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';
@@ -0,0 +1,9 @@
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);
@@ -0,0 +1,66 @@
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';
@@ -0,0 +1 @@
1
+ export type KtAccessModifier = 'public' | 'protected' | 'internal' | 'private';
@@ -0,0 +1 @@
1
+ export * as kt from './_index.js';
@@ -0,0 +1,10 @@
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
+ }
@@ -0,0 +1,79 @@
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
+ );
@@ -0,0 +1,62 @@
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
+ });
@@ -0,0 +1,75 @@
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
+ });