ajsc 5.2.4 → 7.0.0

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 (141) hide show
  1. package/README.md +253 -145
  2. package/dist/converter/BaseConverter.d.ts +283 -0
  3. package/dist/converter/BaseConverter.js +131 -0
  4. package/dist/converter/BaseConverter.js.map +1 -0
  5. package/dist/converter/Emitter.d.ts +35 -0
  6. package/dist/converter/Emitter.js +50 -0
  7. package/dist/converter/Emitter.js.map +1 -0
  8. package/dist/converter/discriminatedUnions.d.ts +47 -0
  9. package/dist/converter/discriminatedUnions.js +168 -0
  10. package/dist/converter/discriminatedUnions.js.map +1 -0
  11. package/dist/converter/formatDefault.d.ts +20 -0
  12. package/dist/converter/formatDefault.js +31 -0
  13. package/dist/converter/formatDefault.js.map +1 -0
  14. package/dist/converter/index.d.ts +2 -0
  15. package/dist/converter/index.js +2 -0
  16. package/dist/converter/index.js.map +1 -0
  17. package/dist/converter/mergeUnions.d.ts +36 -0
  18. package/dist/converter/mergeUnions.js +189 -0
  19. package/dist/converter/mergeUnions.js.map +1 -0
  20. package/dist/converter/naming.d.ts +29 -0
  21. package/dist/converter/naming.js +130 -0
  22. package/dist/converter/naming.js.map +1 -0
  23. package/dist/converter/registry.d.ts +18 -0
  24. package/dist/converter/registry.js +50 -0
  25. package/dist/converter/registry.js.map +1 -0
  26. package/dist/converter/walk.d.ts +9 -0
  27. package/dist/converter/walk.js +40 -0
  28. package/dist/converter/walk.js.map +1 -0
  29. package/dist/index.d.ts +71 -3
  30. package/dist/index.js +63 -3
  31. package/dist/index.js.map +1 -1
  32. package/dist/{JSONSchemaConverter.d.ts → ir/JSONSchemaConverter.d.ts} +1 -1
  33. package/dist/{JSONSchemaConverter.js → ir/JSONSchemaConverter.js} +9 -3
  34. package/dist/ir/JSONSchemaConverter.js.map +1 -0
  35. package/dist/ir/index.d.ts +1 -0
  36. package/dist/ir/index.js +2 -0
  37. package/dist/ir/index.js.map +1 -0
  38. package/dist/kotlin/KotlinBaseConverter.d.ts +18 -0
  39. package/dist/kotlin/KotlinBaseConverter.js +36 -0
  40. package/dist/kotlin/KotlinBaseConverter.js.map +1 -0
  41. package/dist/kotlin/KotlinConverter.d.ts +67 -0
  42. package/dist/kotlin/KotlinConverter.js +140 -0
  43. package/dist/kotlin/KotlinConverter.js.map +1 -0
  44. package/dist/kotlin/annotations.d.ts +26 -0
  45. package/dist/kotlin/annotations.js +35 -0
  46. package/dist/kotlin/annotations.js.map +1 -0
  47. package/dist/kotlin/enums.d.ts +15 -0
  48. package/dist/kotlin/enums.js +58 -0
  49. package/dist/kotlin/enums.js.map +1 -0
  50. package/dist/kotlin/index.d.ts +2 -0
  51. package/dist/kotlin/index.js +3 -0
  52. package/dist/kotlin/index.js.map +1 -0
  53. package/dist/kotlin/objectEmitter.d.ts +12 -0
  54. package/dist/kotlin/objectEmitter.js +74 -0
  55. package/dist/kotlin/objectEmitter.js.map +1 -0
  56. package/dist/kotlin/sealedUnion.d.ts +17 -0
  57. package/dist/kotlin/sealedUnion.js +74 -0
  58. package/dist/kotlin/sealedUnion.js.map +1 -0
  59. package/dist/kotlin/typeMapper.d.ts +17 -0
  60. package/dist/kotlin/typeMapper.js +107 -0
  61. package/dist/kotlin/typeMapper.js.map +1 -0
  62. package/dist/kotlin/unsupported.d.ts +13 -0
  63. package/dist/kotlin/unsupported.js +53 -0
  64. package/dist/kotlin/unsupported.js.map +1 -0
  65. package/dist/swift/SwiftBaseConverter.d.ts +18 -0
  66. package/dist/swift/SwiftBaseConverter.js +38 -0
  67. package/dist/swift/SwiftBaseConverter.js.map +1 -0
  68. package/dist/swift/SwiftConverter.d.ts +60 -0
  69. package/dist/swift/SwiftConverter.js +111 -0
  70. package/dist/swift/SwiftConverter.js.map +1 -0
  71. package/dist/swift/discriminatedEnum.d.ts +18 -0
  72. package/dist/swift/discriminatedEnum.js +99 -0
  73. package/dist/swift/discriminatedEnum.js.map +1 -0
  74. package/dist/swift/enums.d.ts +15 -0
  75. package/dist/swift/enums.js +62 -0
  76. package/dist/swift/enums.js.map +1 -0
  77. package/dist/swift/index.d.ts +2 -0
  78. package/dist/swift/index.js +3 -0
  79. package/dist/swift/index.js.map +1 -0
  80. package/dist/swift/structEmitter.d.ts +12 -0
  81. package/dist/swift/structEmitter.js +70 -0
  82. package/dist/swift/structEmitter.js.map +1 -0
  83. package/dist/swift/typeMapper.d.ts +18 -0
  84. package/dist/swift/typeMapper.js +106 -0
  85. package/dist/swift/typeMapper.js.map +1 -0
  86. package/dist/swift/unsupported.d.ts +19 -0
  87. package/dist/swift/unsupported.js +88 -0
  88. package/dist/swift/unsupported.js.map +1 -0
  89. package/dist/typescript/TypescriptBaseConverter.d.ts +25 -0
  90. package/dist/typescript/TypescriptBaseConverter.js +178 -0
  91. package/dist/typescript/TypescriptBaseConverter.js.map +1 -0
  92. package/dist/typescript/TypescriptConverter.d.ts +74 -0
  93. package/dist/typescript/TypescriptConverter.js +252 -0
  94. package/dist/typescript/TypescriptConverter.js.map +1 -0
  95. package/dist/typescript/index.d.ts +2 -0
  96. package/dist/typescript/index.js +3 -0
  97. package/dist/typescript/index.js.map +1 -0
  98. package/dist/utils/index.d.ts +2 -0
  99. package/dist/utils/index.js +3 -0
  100. package/dist/utils/index.js.map +1 -0
  101. package/package.json +37 -5
  102. package/dist/JSONSchemaConverter.js.map +0 -1
  103. package/dist/JSONSchemaConverter.test.d.ts +0 -1
  104. package/dist/JSONSchemaConverter.test.js +0 -585
  105. package/dist/JSONSchemaConverter.test.js.map +0 -1
  106. package/dist/Typebox.test.d.ts +0 -1
  107. package/dist/Typebox.test.js +0 -88
  108. package/dist/Typebox.test.js.map +0 -1
  109. package/dist/TypescriptBaseConverter.d.ts +0 -75
  110. package/dist/TypescriptBaseConverter.js +0 -321
  111. package/dist/TypescriptBaseConverter.js.map +0 -1
  112. package/dist/TypescriptConverter.additionalProperties.test.d.ts +0 -1
  113. package/dist/TypescriptConverter.additionalProperties.test.js +0 -110
  114. package/dist/TypescriptConverter.additionalProperties.test.js.map +0 -1
  115. package/dist/TypescriptConverter.arrays.test.d.ts +0 -1
  116. package/dist/TypescriptConverter.arrays.test.js +0 -130
  117. package/dist/TypescriptConverter.arrays.test.js.map +0 -1
  118. package/dist/TypescriptConverter.composites.advanced.test.d.ts +0 -1
  119. package/dist/TypescriptConverter.composites.advanced.test.js +0 -1070
  120. package/dist/TypescriptConverter.composites.advanced.test.js.map +0 -1
  121. package/dist/TypescriptConverter.composites.test.d.ts +0 -1
  122. package/dist/TypescriptConverter.composites.test.js +0 -335
  123. package/dist/TypescriptConverter.composites.test.js.map +0 -1
  124. package/dist/TypescriptConverter.d.ts +0 -163
  125. package/dist/TypescriptConverter.js +0 -606
  126. package/dist/TypescriptConverter.js.map +0 -1
  127. package/dist/TypescriptConverter.jsdoc.test.d.ts +0 -1
  128. package/dist/TypescriptConverter.jsdoc.test.js +0 -194
  129. package/dist/TypescriptConverter.jsdoc.test.js.map +0 -1
  130. package/dist/TypescriptConverter.objects.test.d.ts +0 -1
  131. package/dist/TypescriptConverter.objects.test.js +0 -258
  132. package/dist/TypescriptConverter.objects.test.js.map +0 -1
  133. package/dist/TypescriptConverter.options.test.d.ts +0 -1
  134. package/dist/TypescriptConverter.options.test.js +0 -501
  135. package/dist/TypescriptConverter.options.test.js.map +0 -1
  136. package/dist/TypescriptConverter.primitives.test.d.ts +0 -1
  137. package/dist/TypescriptConverter.primitives.test.js +0 -26
  138. package/dist/TypescriptConverter.primitives.test.js.map +0 -1
  139. package/dist/utils/path-utils.test.d.ts +0 -1
  140. package/dist/utils/path-utils.test.js +0 -92
  141. package/dist/utils/path-utils.test.js.map +0 -1
@@ -0,0 +1 @@
1
+ {"version":3,"file":"KotlinConverter.js","sourceRoot":"","sources":["../../src/kotlin/KotlinConverter.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,26 @@
1
+ /**
2
+ * Pure helpers for constructing Kotlin annotation strings.
3
+ *
4
+ * Centralizes the literal text used across the Kotlin emitter modules so
5
+ * that adding a new annotation, changing import FQNs, or tightening the
6
+ * string format only happens in one place.
7
+ *
8
+ * All helpers are pure: no state, no side effects. Callers add the
9
+ * corresponding import to `importsSet` themselves (the FQNs are exposed
10
+ * via `KOTLIN_ANNOTATION_IMPORTS`).
11
+ */
12
+ /** `@Serializable` */
13
+ export declare function serializableAnnotation(): string;
14
+ /** `@SerialName("<value>")` */
15
+ export declare function serialNameAnnotation(value: string): string;
16
+ /** `@Contextual` */
17
+ export declare function contextualAnnotation(): string;
18
+ /** `@JsonClassDiscriminator("<field>")` */
19
+ export declare function jsonClassDiscriminatorAnnotation(field: string): string;
20
+ /** Fully qualified import paths for each annotation. */
21
+ export declare const KOTLIN_ANNOTATION_IMPORTS: {
22
+ readonly serializable: "kotlinx.serialization.Serializable";
23
+ readonly serialName: "kotlinx.serialization.SerialName";
24
+ readonly contextual: "kotlinx.serialization.Contextual";
25
+ readonly jsonClassDiscriminator: "kotlinx.serialization.json.JsonClassDiscriminator";
26
+ };
@@ -0,0 +1,35 @@
1
+ /**
2
+ * Pure helpers for constructing Kotlin annotation strings.
3
+ *
4
+ * Centralizes the literal text used across the Kotlin emitter modules so
5
+ * that adding a new annotation, changing import FQNs, or tightening the
6
+ * string format only happens in one place.
7
+ *
8
+ * All helpers are pure: no state, no side effects. Callers add the
9
+ * corresponding import to `importsSet` themselves (the FQNs are exposed
10
+ * via `KOTLIN_ANNOTATION_IMPORTS`).
11
+ */
12
+ /** `@Serializable` */
13
+ export function serializableAnnotation() {
14
+ return "@Serializable";
15
+ }
16
+ /** `@SerialName("<value>")` */
17
+ export function serialNameAnnotation(value) {
18
+ return `@SerialName("${value}")`;
19
+ }
20
+ /** `@Contextual` */
21
+ export function contextualAnnotation() {
22
+ return "@Contextual";
23
+ }
24
+ /** `@JsonClassDiscriminator("<field>")` */
25
+ export function jsonClassDiscriminatorAnnotation(field) {
26
+ return `@JsonClassDiscriminator("${field}")`;
27
+ }
28
+ /** Fully qualified import paths for each annotation. */
29
+ export const KOTLIN_ANNOTATION_IMPORTS = {
30
+ serializable: "kotlinx.serialization.Serializable",
31
+ serialName: "kotlinx.serialization.SerialName",
32
+ contextual: "kotlinx.serialization.Contextual",
33
+ jsonClassDiscriminator: "kotlinx.serialization.json.JsonClassDiscriminator",
34
+ };
35
+ //# sourceMappingURL=annotations.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"annotations.js","sourceRoot":"","sources":["../../src/kotlin/annotations.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,sBAAsB;AACtB,MAAM,UAAU,sBAAsB;IACpC,OAAO,eAAe,CAAC;AACzB,CAAC;AAED,+BAA+B;AAC/B,MAAM,UAAU,oBAAoB,CAAC,KAAa;IAChD,OAAO,gBAAgB,KAAK,IAAI,CAAC;AACnC,CAAC;AAED,oBAAoB;AACpB,MAAM,UAAU,oBAAoB;IAClC,OAAO,aAAa,CAAC;AACvB,CAAC;AAED,2CAA2C;AAC3C,MAAM,UAAU,gCAAgC,CAAC,KAAa;IAC5D,OAAO,4BAA4B,KAAK,IAAI,CAAC;AAC/C,CAAC;AAED,wDAAwD;AACxD,MAAM,CAAC,MAAM,yBAAyB,GAAG;IACvC,YAAY,EAAE,oCAAoC;IAClD,UAAU,EAAE,kCAAkC;IAC9C,UAAU,EAAE,kCAAkC;IAC9C,sBAAsB,EAAE,mDAAmD;CACnE,CAAC"}
@@ -0,0 +1,15 @@
1
+ import type { KotlinConverterContext } from "./KotlinConverter.js";
2
+ /**
3
+ * Returns or creates a Kotlin enum class declaration name for a given set of
4
+ * string values, deduplicating by sorted-values key. Tracks the declaration
5
+ * for later emission via {@link buildEnumDeclarations}.
6
+ */
7
+ export declare function getOrCreateEnumDecl(c: KotlinConverterContext, values: string[], path: string): string;
8
+ /** Sanitizes a JSON enum value into a Kotlin enum member name (UPPER_SNAKE_CASE). */
9
+ export declare function toEnumMemberName(value: string): string;
10
+ /**
11
+ * Builds Kotlin `enum class` declarations from the converter's accumulated
12
+ * `enumDecls` map. Used for both nested enums (rendered alongside data
13
+ * classes) and root-level enum schemas (where the root IS the enum).
14
+ */
15
+ export declare function buildEnumDeclarations(c: KotlinConverterContext): string[];
@@ -0,0 +1,58 @@
1
+ import { toPascalCase } from "../utils/to-pascal-case.js";
2
+ import { serializableAnnotation, serialNameAnnotation, KOTLIN_ANNOTATION_IMPORTS } from "./annotations.js";
3
+ /**
4
+ * Returns or creates a Kotlin enum class declaration name for a given set of
5
+ * string values, deduplicating by sorted-values key. Tracks the declaration
6
+ * for later emission via {@link buildEnumDeclarations}.
7
+ */
8
+ export function getOrCreateEnumDecl(c, values, path) {
9
+ const key = JSON.stringify([...values].sort());
10
+ const existing = c.enumDecls.get(key);
11
+ if (existing)
12
+ return existing.name;
13
+ const segments = path.split(".").filter((x) => !/^\d+$/.test(x));
14
+ const baseName = segments.map((s) => toPascalCase(s)).join("") || "Value";
15
+ const name = c.findAvailableName(baseName);
16
+ c.usedDeclarationNames.add(name);
17
+ c.enumDecls.set(key, { name, values });
18
+ return name;
19
+ }
20
+ /** Sanitizes a JSON enum value into a Kotlin enum member name (UPPER_SNAKE_CASE). */
21
+ export function toEnumMemberName(value) {
22
+ let n = value.toUpperCase().replace(/[^A-Z0-9]/g, "_").replace(/^_+|_+$/g, "");
23
+ if (!n)
24
+ n = "VALUE";
25
+ if (/^\d/.test(n))
26
+ n = "_" + n;
27
+ return n;
28
+ }
29
+ /**
30
+ * Builds Kotlin `enum class` declarations from the converter's accumulated
31
+ * `enumDecls` map. Used for both nested enums (rendered alongside data
32
+ * classes) and root-level enum schemas (where the root IS the enum).
33
+ */
34
+ export function buildEnumDeclarations(c) {
35
+ return [...c.enumDecls.values()].map(({ name, values }) => {
36
+ const usedMembers = new Set();
37
+ const members = values.map((v) => {
38
+ let m = toEnumMemberName(v);
39
+ const base = m;
40
+ let i = 2;
41
+ while (usedMembers.has(m)) {
42
+ m = base + i;
43
+ i++;
44
+ }
45
+ usedMembers.add(m);
46
+ if (c.isKotlinx && m !== v) {
47
+ c.importsSet.add(KOTLIN_ANNOTATION_IMPORTS.serialName);
48
+ return `${serialNameAnnotation(v)} ${m}`;
49
+ }
50
+ return m;
51
+ });
52
+ const classAnn = c.isKotlinx ? serializableAnnotation() + "\n" : "";
53
+ if (c.isKotlinx)
54
+ c.importsSet.add(KOTLIN_ANNOTATION_IMPORTS.serializable);
55
+ return `${classAnn}enum class ${name} { ${members.join(", ")} }`;
56
+ });
57
+ }
58
+ //# sourceMappingURL=enums.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"enums.js","sourceRoot":"","sources":["../../src/kotlin/enums.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export * from "./KotlinBaseConverter.js";
2
+ export * from "./KotlinConverter.js";
@@ -0,0 +1,3 @@
1
+ export * from "./KotlinBaseConverter.js";
2
+ export * from "./KotlinConverter.js";
3
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/kotlin/index.ts"],"names":[],"mappings":"AAAA,cAAc,0BAA0B,CAAC;AACzC,cAAc,sBAAsB,CAAC"}
@@ -0,0 +1,12 @@
1
+ import { GenerateTypeUtils } from "../converter/BaseConverter.js";
2
+ import { IRNode } from "../types.js";
3
+ import type { KotlinConverterContext } from "./KotlinConverter.js";
4
+ /** Returns true if the property is optional or its type union includes null. */
5
+ export declare function isPropertyNullable(prop: IRNode): boolean;
6
+ /**
7
+ * Emits a Kotlin data-class constructor body for an object IR node, including
8
+ * KDoc comments for unmodelled `additionalProperties`, per-property
9
+ * `@SerialName`/`@Contextual` annotations, and nullable/default-value suffixes
10
+ * driven by `required` and union-includes-null analysis.
11
+ */
12
+ export declare function generateKotlinObjectType(c: KotlinConverterContext, ir: IRNode, utils: GenerateTypeUtils): string;
@@ -0,0 +1,74 @@
1
+ import { formatPrimitiveDefault } from "../converter/formatDefault.js";
2
+ import { sanitizeKotlinIdentifier } from "./KotlinBaseConverter.js";
3
+ import { generateKotlinType } from "./typeMapper.js";
4
+ import { serialNameAnnotation, contextualAnnotation, KOTLIN_ANNOTATION_IMPORTS } from "./annotations.js";
5
+ /** Returns true if the property is optional or its type union includes null. */
6
+ export function isPropertyNullable(prop) {
7
+ if (!prop.required)
8
+ return true;
9
+ if (prop.type === "union" && prop.options?.some((o) => o.type === "null")) {
10
+ return true;
11
+ }
12
+ return false;
13
+ }
14
+ /**
15
+ * Emits a Kotlin data-class constructor body for an object IR node, including
16
+ * KDoc comments for unmodelled `additionalProperties`, per-property
17
+ * `@SerialName`/`@Contextual` annotations, and nullable/default-value suffixes
18
+ * driven by `required` and union-includes-null analysis.
19
+ */
20
+ export function generateKotlinObjectType(c, ir, utils) {
21
+ // Record additionalProperties doc note for the declaration emission step
22
+ if (ir.additionalProperties && typeof ir.additionalProperties !== "boolean") {
23
+ const apType = generateKotlinType(c, ir.additionalProperties, utils);
24
+ const note = `Note: schema permits additional keys of type ${apType} — not modeled.`;
25
+ // For ref types: signature was set; find the latest registered refTypes entry for this signature
26
+ if (ir.signature) {
27
+ const entry = c.refTypes.find((e) => e.signature === ir.signature);
28
+ if (entry)
29
+ entry.doc = note;
30
+ }
31
+ // For root: ir.name === c.rootName at this point if root has no signature
32
+ if (ir.name === c.rootName) {
33
+ c.rootDoc = note;
34
+ }
35
+ }
36
+ if (!ir.properties || Object.keys(ir.properties).length === 0) {
37
+ return "()";
38
+ }
39
+ const lines = Object.entries(ir.properties).map(([key, prop]) => {
40
+ const name = sanitizeKotlinIdentifier(key);
41
+ if (name !== key && c.isKotlinx) {
42
+ c.propertySerialNames.set(prop, key);
43
+ c.importsSet.add(KOTLIN_ANNOTATION_IMPORTS.serialName);
44
+ }
45
+ const type = generateKotlinType(c, prop, utils);
46
+ const nullable = isPropertyNullable(prop);
47
+ const def = formatPrimitiveDefault(prop.defaultValue);
48
+ // Optional (not required) → ? = <default|null>. Required-but-nullable → ? (no default unless schema-provided).
49
+ let suffix;
50
+ if (!prop.required) {
51
+ suffix = def !== undefined ? `? = ${def}` : "? = null";
52
+ }
53
+ else if (nullable) {
54
+ suffix = def !== undefined ? `? = ${def}` : "?";
55
+ }
56
+ else {
57
+ suffix = def !== undefined ? ` = ${def}` : "";
58
+ }
59
+ const annotations = [];
60
+ if (c.docFormatNodes.has(prop)) {
61
+ annotations.push(` /** @format ${c.docFormatNodes.get(prop)} */`);
62
+ }
63
+ if (c.propertySerialNames.has(prop)) {
64
+ annotations.push(` ${serialNameAnnotation(c.propertySerialNames.get(prop))}`);
65
+ }
66
+ if (c.contextualNodes.has(prop)) {
67
+ annotations.push(` ${contextualAnnotation()}`);
68
+ }
69
+ const annPrefix = annotations.length > 0 ? annotations.join("\n") + "\n" : "";
70
+ return `${annPrefix} val ${name}: ${type}${suffix}`;
71
+ });
72
+ return `(\n${lines.join(",\n")},\n)`;
73
+ }
74
+ //# sourceMappingURL=objectEmitter.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"objectEmitter.js","sourceRoot":"","sources":["../../src/kotlin/objectEmitter.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,17 @@
1
+ import { GenerateTypeUtils } from "../converter/BaseConverter.js";
2
+ import { IRNode } from "../types.js";
3
+ import type { KotlinConverterContext } from "./KotlinConverter.js";
4
+ /**
5
+ * Emits a Kotlin `sealed interface` plus per-variant `data class` declarations
6
+ * for a discriminated union, registering them in `c.sealedDecls`. Idempotent
7
+ * for nested visits: re-emitting the same interface or variant short-circuits.
8
+ */
9
+ export declare function emitSealedInterface(c: KotlinConverterContext, ir: IRNode, utils: GenerateTypeUtils): string;
10
+ /** Derives the Kotlin sealed-interface name for a union IR node. */
11
+ export declare function deriveSealedName(c: KotlinConverterContext, ir: IRNode): string;
12
+ /**
13
+ * Substring-scans `c.sealedDecls` for an existing declaration matching the
14
+ * given name. Used to detect prior emission so the orchestrator can skip the
15
+ * regular ref-types path for sealed variants.
16
+ */
17
+ export declare function sealedDeclsContainsName(c: KotlinConverterContext, name: string): boolean;
@@ -0,0 +1,74 @@
1
+ import { generateKotlinObjectType } from "./objectEmitter.js";
2
+ import { serializableAnnotation, serialNameAnnotation, jsonClassDiscriminatorAnnotation, KOTLIN_ANNOTATION_IMPORTS } from "./annotations.js";
3
+ /**
4
+ * Emits a Kotlin `sealed interface` plus per-variant `data class` declarations
5
+ * for a discriminated union, registering them in `c.sealedDecls`. Idempotent
6
+ * for nested visits: re-emitting the same interface or variant short-circuits.
7
+ */
8
+ export function emitSealedInterface(c, ir, utils) {
9
+ const ifaceName = deriveSealedName(c, ir);
10
+ if (c.usedDeclarationNames.has(ifaceName) && sealedDeclsContainsName(c, ifaceName)) {
11
+ // already emitted (idempotency for nested visits)
12
+ return ifaceName;
13
+ }
14
+ c.usedDeclarationNames.add(ifaceName);
15
+ const options = ir.options;
16
+ const discriminator = c.findDiscriminatorProperty(options, c.collectUnionPropertyNames(options).sharedPropNames);
17
+ if (!discriminator)
18
+ return "Any";
19
+ for (const opt of options) {
20
+ const variantName = c.variantNames.get(opt);
21
+ if (c.usedDeclarationNames.has(variantName) &&
22
+ sealedDeclsContainsName(c, variantName)) {
23
+ continue;
24
+ }
25
+ c.usedDeclarationNames.add(variantName);
26
+ const discValue = c.getConstStringValue(opt.properties[discriminator]);
27
+ const tempIR = c.stripDiscriminatorField(opt, discriminator);
28
+ const body = generateKotlinObjectType(c, tempIR, utils);
29
+ const annotations = [];
30
+ if (c.isKotlinx) {
31
+ annotations.push(serializableAnnotation());
32
+ c.importsSet.add(KOTLIN_ANNOTATION_IMPORTS.serializable);
33
+ if (discValue) {
34
+ annotations.push(serialNameAnnotation(discValue));
35
+ c.importsSet.add(KOTLIN_ANNOTATION_IMPORTS.serialName);
36
+ }
37
+ }
38
+ const annPrefix = annotations.length > 0 ? annotations.join("\n") + "\n" : "";
39
+ c.sealedDecls.push(`${annPrefix}data class ${variantName}${body} : ${ifaceName}`);
40
+ }
41
+ const ifaceAnnotations = [];
42
+ if (c.isKotlinx) {
43
+ ifaceAnnotations.push(serializableAnnotation());
44
+ ifaceAnnotations.push(jsonClassDiscriminatorAnnotation(discriminator));
45
+ c.importsSet.add(KOTLIN_ANNOTATION_IMPORTS.serializable);
46
+ c.importsSet.add(KOTLIN_ANNOTATION_IMPORTS.jsonClassDiscriminator);
47
+ }
48
+ const ifaceAnnPrefix = ifaceAnnotations.length > 0 ? ifaceAnnotations.join("\n") + "\n" : "";
49
+ c.sealedDecls.push(`${ifaceAnnPrefix}sealed interface ${ifaceName}`);
50
+ return ifaceName;
51
+ }
52
+ /** Derives the Kotlin sealed-interface name for a union IR node. */
53
+ export function deriveSealedName(c, ir) {
54
+ if (ir.name)
55
+ return ir.name;
56
+ if (ir.title)
57
+ return ir.title;
58
+ const segments = ir.path.split(".").filter((x) => !/^\d+$/.test(x));
59
+ const baseName = segments
60
+ .map((s) => s.charAt(0).toUpperCase() + s.slice(1))
61
+ .join("") || "Union";
62
+ return c.findAvailableName(baseName);
63
+ }
64
+ /**
65
+ * Substring-scans `c.sealedDecls` for an existing declaration matching the
66
+ * given name. Used to detect prior emission so the orchestrator can skip the
67
+ * regular ref-types path for sealed variants.
68
+ */
69
+ export function sealedDeclsContainsName(c, name) {
70
+ return c.sealedDecls.some((d) => d.includes(`data class ${name}(`) ||
71
+ d.includes(`data class ${name} `) ||
72
+ d.includes(`sealed interface ${name}`));
73
+ }
74
+ //# sourceMappingURL=sealedUnion.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sealedUnion.js","sourceRoot":"","sources":["../../src/kotlin/sealedUnion.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,17 @@
1
+ import { GenerateTypeUtils } from "../converter/BaseConverter.js";
2
+ import { IRNode } from "../types.js";
3
+ import type { KotlinConverterContext } from "./KotlinConverter.js";
4
+ export declare const PRIMITIVES: Record<string, string>;
5
+ export declare const FORMAT_MAP: Record<string, {
6
+ type: string;
7
+ import: string;
8
+ needsContextual: boolean;
9
+ }>;
10
+ export declare const STRING_DOC_FORMATS: Set<string>;
11
+ /**
12
+ * Maps an IRNode to its Kotlin type expression. Handles primitives, formatted
13
+ * strings (with `@Contextual` and KDoc tracking), arrays, tuples (Pair/Triple),
14
+ * referenced object types, string enums, literals, and unions (T | null
15
+ * unwrapping, sealed-interface dispatch, unsupported-union policy).
16
+ */
17
+ export declare function generateKotlinType(c: KotlinConverterContext, ir: IRNode, utils: GenerateTypeUtils): string;
@@ -0,0 +1,107 @@
1
+ import { getOrCreateEnumDecl } from "./enums.js";
2
+ import { handleUnsupportedUnion } from "./unsupported.js";
3
+ export const PRIMITIVES = {
4
+ string: "String",
5
+ integer: "Long",
6
+ number: "Double",
7
+ boolean: "Boolean",
8
+ null: "Unit",
9
+ };
10
+ export const FORMAT_MAP = {
11
+ "date-time": { type: "Instant", import: "java.time.Instant", needsContextual: true },
12
+ "date": { type: "LocalDate", import: "java.time.LocalDate", needsContextual: true },
13
+ "time": { type: "LocalTime", import: "java.time.LocalTime", needsContextual: true },
14
+ "uuid": { type: "UUID", import: "java.util.UUID", needsContextual: true },
15
+ "uri": { type: "URI", import: "java.net.URI", needsContextual: true },
16
+ };
17
+ export const STRING_DOC_FORMATS = new Set(["email", "hostname", "ipv4", "ipv6"]);
18
+ /**
19
+ * Maps an IRNode to its Kotlin type expression. Handles primitives, formatted
20
+ * strings (with `@Contextual` and KDoc tracking), arrays, tuples (Pair/Triple),
21
+ * referenced object types, string enums, literals, and unions (T | null
22
+ * unwrapping, sealed-interface dispatch, unsupported-union policy).
23
+ */
24
+ export function generateKotlinType(c, ir, utils) {
25
+ switch (ir.type) {
26
+ case "string": {
27
+ const fmt = ir.constraints?.format;
28
+ if (fmt && FORMAT_MAP[fmt]) {
29
+ const m = FORMAT_MAP[fmt];
30
+ c.importsSet.add(m.import);
31
+ if (c.isKotlinx && m.needsContextual) {
32
+ c.importsSet.add("kotlinx.serialization.Contextual");
33
+ c.contextualNodes.add(ir);
34
+ }
35
+ return m.type;
36
+ }
37
+ if (fmt && STRING_DOC_FORMATS.has(fmt)) {
38
+ c.docFormatNodes.set(ir, fmt);
39
+ }
40
+ return "String";
41
+ }
42
+ case "integer": {
43
+ const fmt = ir.constraints?.format;
44
+ if (fmt === "int32")
45
+ return "Int";
46
+ return PRIMITIVES.integer;
47
+ }
48
+ case "number":
49
+ case "boolean":
50
+ case "null":
51
+ return PRIMITIVES[ir.type];
52
+ case "array":
53
+ return `List<${ir.items ? generateKotlinType(c, ir.items, utils) : "Any"}>`;
54
+ case "tuple": {
55
+ const items = ir.tupleItems ?? [];
56
+ if (items.length === 2) {
57
+ return `Pair<${generateKotlinType(c, items[0], utils)}, ${generateKotlinType(c, items[1], utils)}>`;
58
+ }
59
+ if (items.length === 3) {
60
+ return `Triple<${items.map((i) => generateKotlinType(c, i, utils)).join(", ")}>`;
61
+ }
62
+ throw new Error(`Unsupported: Kotlin tuple of length ${items.length} at "${ir.path}"; only Pair (2) and Triple (3) are supported.`);
63
+ }
64
+ case "object": {
65
+ const ref = utils.getReferencedType(ir);
66
+ if (ref)
67
+ return ref;
68
+ return "Any";
69
+ }
70
+ case "enum": {
71
+ if (ir.values?.every((v) => typeof v === "string")) {
72
+ return getOrCreateEnumDecl(c, ir.values, ir.path);
73
+ }
74
+ // fall through to Any for non-string enums (rare)
75
+ return "Any";
76
+ }
77
+ case "literal": {
78
+ const v = ir.constraints?.value;
79
+ if (typeof v === "string")
80
+ return "String";
81
+ if (typeof v === "boolean")
82
+ return "Boolean";
83
+ if (typeof v === "number") {
84
+ return Number.isInteger(v) ? "Long" : "Double";
85
+ }
86
+ if (v === null)
87
+ return "Unit";
88
+ return "Any";
89
+ }
90
+ case "union": {
91
+ // T | null → unwrap, mark nullable at the property level
92
+ const non = ir.options?.filter((o) => o.type !== "null") ?? [];
93
+ if (non.length === 1)
94
+ return generateKotlinType(c, non[0], utils);
95
+ // Discriminated union: enhanceDiscriminatedUnions populated variantNames
96
+ if (ir.options?.length &&
97
+ ir.options.every((o) => c.variantNames.has(o))) {
98
+ return c.emitSealedInterface(ir, utils);
99
+ }
100
+ // Untagged union — apply unsupportedUnions policy
101
+ return handleUnsupportedUnion(c, ir);
102
+ }
103
+ default:
104
+ return "Any";
105
+ }
106
+ }
107
+ //# sourceMappingURL=typeMapper.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"typeMapper.js","sourceRoot":"","sources":["../../src/kotlin/typeMapper.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,13 @@
1
+ import { IRNode } from "../types.js";
2
+ import type { KotlinConverterContext } from "./KotlinConverter.js";
3
+ /**
4
+ * Applies the `unsupportedUnions` policy for an untagged union that survived
5
+ * merging and has no usable discriminator.
6
+ */
7
+ export declare function handleUnsupportedUnion(c: KotlinConverterContext, ir: IRNode): string;
8
+ /**
9
+ * Pre-emission guard pass that throws on JSON Schema features Kotlin codegen
10
+ * does not support: `not` and `patternProperties`. These are NOT silenced by
11
+ * `unsupportedUnions: 'fallback'`.
12
+ */
13
+ export declare function guardUnsupportedKeywords(_c: KotlinConverterContext, root: IRNode): void;
@@ -0,0 +1,53 @@
1
+ /**
2
+ * Applies the `unsupportedUnions` policy for an untagged union that survived
3
+ * merging and has no usable discriminator.
4
+ */
5
+ export function handleUnsupportedUnion(c, ir) {
6
+ const policy = c.baseOpts?.unsupportedUnions ?? "throw";
7
+ if (policy === "throw") {
8
+ const opts = ir.options?.map((o) => o.type).join(", ") ?? "?";
9
+ throw new Error(`Unsupported: untagged union at "${ir.path}"\n` +
10
+ ` options: [${opts}]\n` +
11
+ ` Add a discriminator property with a const per variant, or set unsupportedUnions:'fallback' to emit JsonElement.`);
12
+ }
13
+ // fallback
14
+ if (c.isKotlinx) {
15
+ c.importsSet.add("kotlinx.serialization.json.JsonElement");
16
+ return "JsonElement";
17
+ }
18
+ return "Any";
19
+ }
20
+ /**
21
+ * Pre-emission guard pass that throws on JSON Schema features Kotlin codegen
22
+ * does not support: `not` and `patternProperties`. These are NOT silenced by
23
+ * `unsupportedUnions: 'fallback'`.
24
+ */
25
+ export function guardUnsupportedKeywords(_c, root) {
26
+ const walk = (n) => {
27
+ if (n.not) {
28
+ throw new Error(`Unsupported: \`not\` keyword at "${n.path}".`);
29
+ }
30
+ if (n.patternProperties &&
31
+ Object.keys(n.patternProperties).length > 0) {
32
+ throw new Error(`Unsupported: patternProperties at "${n.path}".`);
33
+ }
34
+ if (n.properties) {
35
+ for (const k of Object.keys(n.properties))
36
+ walk(n.properties[k]);
37
+ }
38
+ if (n.items)
39
+ walk(n.items);
40
+ if (n.tupleItems)
41
+ for (const t of n.tupleItems)
42
+ walk(t);
43
+ if (n.options)
44
+ for (const o of n.options)
45
+ walk(o);
46
+ if (n.additionalProperties &&
47
+ typeof n.additionalProperties !== "boolean") {
48
+ walk(n.additionalProperties);
49
+ }
50
+ };
51
+ walk(root);
52
+ }
53
+ //# sourceMappingURL=unsupported.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"unsupported.js","sourceRoot":"","sources":["../../src/kotlin/unsupported.ts"],"names":[],"mappings":"AAGA;;;GAGG;AACH,MAAM,UAAU,sBAAsB,CAAC,CAAyB,EAAE,EAAU;IAC1E,MAAM,MAAM,GAAG,CAAC,CAAC,QAAQ,EAAE,iBAAiB,IAAI,OAAO,CAAC;IACxD,IAAI,MAAM,KAAK,OAAO,EAAE,CAAC;QACvB,MAAM,IAAI,GAAG,EAAE,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,GAAG,CAAC;QAC9D,MAAM,IAAI,KAAK,CACb,mCAAmC,EAAE,CAAC,IAAI,KAAK;YAC7C,eAAe,IAAI,KAAK;YACxB,mHAAmH,CACtH,CAAC;IACJ,CAAC;IACD,WAAW;IACX,IAAI,CAAC,CAAC,SAAS,EAAE,CAAC;QAChB,CAAC,CAAC,UAAU,CAAC,GAAG,CAAC,wCAAwC,CAAC,CAAC;QAC3D,OAAO,aAAa,CAAC;IACvB,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,wBAAwB,CAAC,EAA0B,EAAE,IAAY;IAC/E,MAAM,IAAI,GAAG,CAAC,CAAS,EAAQ,EAAE;QAC/B,IAAI,CAAC,CAAC,GAAG,EAAE,CAAC;YACV,MAAM,IAAI,KAAK,CAAC,oCAAoC,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC;QAClE,CAAC;QACD,IACE,CAAC,CAAC,iBAAiB;YACnB,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,iBAAiB,CAAC,CAAC,MAAM,GAAG,CAAC,EAC3C,CAAC;YACD,MAAM,IAAI,KAAK,CAAC,sCAAsC,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC;QACpE,CAAC;QACD,IAAI,CAAC,CAAC,UAAU,EAAE,CAAC;YACjB,KAAK,MAAM,CAAC,IAAI,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,UAAU,CAAC;gBAAE,IAAI,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC;QACnE,CAAC;QACD,IAAI,CAAC,CAAC,KAAK;YAAE,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC;QAC3B,IAAI,CAAC,CAAC,UAAU;YAAE,KAAK,MAAM,CAAC,IAAI,CAAC,CAAC,UAAU;gBAAE,IAAI,CAAC,CAAC,CAAC,CAAC;QACxD,IAAI,CAAC,CAAC,OAAO;YAAE,KAAK,MAAM,CAAC,IAAI,CAAC,CAAC,OAAO;gBAAE,IAAI,CAAC,CAAC,CAAC,CAAC;QAClD,IACE,CAAC,CAAC,oBAAoB;YACtB,OAAO,CAAC,CAAC,oBAAoB,KAAK,SAAS,EAC3C,CAAC;YACD,IAAI,CAAC,CAAC,CAAC,oBAAoB,CAAC,CAAC;QAC/B,CAAC;IACH,CAAC,CAAC;IACF,IAAI,CAAC,IAAI,CAAC,CAAC;AACb,CAAC"}
@@ -0,0 +1,18 @@
1
+ import { BaseConverter, GenerateTypeUtils } from "../converter/BaseConverter.js";
2
+ import { IRNode } from "../types.js";
3
+ export declare const SWIFT_RESERVED: Set<string>;
4
+ /**
5
+ * Converts a JSON property key to a valid Swift identifier:
6
+ * - kebab/snake → camelCase
7
+ * - non-identifier chars stripped
8
+ * - leading digit gets `_` prefix
9
+ * - reserved words wrapped in backticks
10
+ * - empty result becomes "value"
11
+ */
12
+ export declare function sanitizeSwiftIdentifier(raw: string): string;
13
+ export declare abstract class SwiftBaseConverter extends BaseConverter {
14
+ /** @internal Mutated by SwiftConverter helper modules; not part of the public API. */
15
+ importsSet: Set<string>;
16
+ /** @internal Public for `BaseConverterContext`; treat as protected for subclasses. */
17
+ abstract generateObjectType(ir: IRNode, utils: GenerateTypeUtils): string;
18
+ }