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.
- package/README.md +253 -145
- package/dist/converter/BaseConverter.d.ts +283 -0
- package/dist/converter/BaseConverter.js +131 -0
- package/dist/converter/BaseConverter.js.map +1 -0
- package/dist/converter/Emitter.d.ts +35 -0
- package/dist/converter/Emitter.js +50 -0
- package/dist/converter/Emitter.js.map +1 -0
- package/dist/converter/discriminatedUnions.d.ts +47 -0
- package/dist/converter/discriminatedUnions.js +168 -0
- package/dist/converter/discriminatedUnions.js.map +1 -0
- package/dist/converter/formatDefault.d.ts +20 -0
- package/dist/converter/formatDefault.js +31 -0
- package/dist/converter/formatDefault.js.map +1 -0
- package/dist/converter/index.d.ts +2 -0
- package/dist/converter/index.js +2 -0
- package/dist/converter/index.js.map +1 -0
- package/dist/converter/mergeUnions.d.ts +36 -0
- package/dist/converter/mergeUnions.js +189 -0
- package/dist/converter/mergeUnions.js.map +1 -0
- package/dist/converter/naming.d.ts +29 -0
- package/dist/converter/naming.js +130 -0
- package/dist/converter/naming.js.map +1 -0
- package/dist/converter/registry.d.ts +18 -0
- package/dist/converter/registry.js +50 -0
- package/dist/converter/registry.js.map +1 -0
- package/dist/converter/walk.d.ts +9 -0
- package/dist/converter/walk.js +40 -0
- package/dist/converter/walk.js.map +1 -0
- package/dist/index.d.ts +71 -3
- package/dist/index.js +63 -3
- package/dist/index.js.map +1 -1
- package/dist/{JSONSchemaConverter.d.ts → ir/JSONSchemaConverter.d.ts} +1 -1
- package/dist/{JSONSchemaConverter.js → ir/JSONSchemaConverter.js} +9 -3
- package/dist/ir/JSONSchemaConverter.js.map +1 -0
- package/dist/ir/index.d.ts +1 -0
- package/dist/ir/index.js +2 -0
- package/dist/ir/index.js.map +1 -0
- package/dist/kotlin/KotlinBaseConverter.d.ts +18 -0
- package/dist/kotlin/KotlinBaseConverter.js +36 -0
- package/dist/kotlin/KotlinBaseConverter.js.map +1 -0
- package/dist/kotlin/KotlinConverter.d.ts +67 -0
- package/dist/kotlin/KotlinConverter.js +140 -0
- package/dist/kotlin/KotlinConverter.js.map +1 -0
- package/dist/kotlin/annotations.d.ts +26 -0
- package/dist/kotlin/annotations.js +35 -0
- package/dist/kotlin/annotations.js.map +1 -0
- package/dist/kotlin/enums.d.ts +15 -0
- package/dist/kotlin/enums.js +58 -0
- package/dist/kotlin/enums.js.map +1 -0
- package/dist/kotlin/index.d.ts +2 -0
- package/dist/kotlin/index.js +3 -0
- package/dist/kotlin/index.js.map +1 -0
- package/dist/kotlin/objectEmitter.d.ts +12 -0
- package/dist/kotlin/objectEmitter.js +74 -0
- package/dist/kotlin/objectEmitter.js.map +1 -0
- package/dist/kotlin/sealedUnion.d.ts +17 -0
- package/dist/kotlin/sealedUnion.js +74 -0
- package/dist/kotlin/sealedUnion.js.map +1 -0
- package/dist/kotlin/typeMapper.d.ts +17 -0
- package/dist/kotlin/typeMapper.js +107 -0
- package/dist/kotlin/typeMapper.js.map +1 -0
- package/dist/kotlin/unsupported.d.ts +13 -0
- package/dist/kotlin/unsupported.js +53 -0
- package/dist/kotlin/unsupported.js.map +1 -0
- package/dist/swift/SwiftBaseConverter.d.ts +18 -0
- package/dist/swift/SwiftBaseConverter.js +38 -0
- package/dist/swift/SwiftBaseConverter.js.map +1 -0
- package/dist/swift/SwiftConverter.d.ts +60 -0
- package/dist/swift/SwiftConverter.js +111 -0
- package/dist/swift/SwiftConverter.js.map +1 -0
- package/dist/swift/discriminatedEnum.d.ts +18 -0
- package/dist/swift/discriminatedEnum.js +99 -0
- package/dist/swift/discriminatedEnum.js.map +1 -0
- package/dist/swift/enums.d.ts +15 -0
- package/dist/swift/enums.js +62 -0
- package/dist/swift/enums.js.map +1 -0
- package/dist/swift/index.d.ts +2 -0
- package/dist/swift/index.js +3 -0
- package/dist/swift/index.js.map +1 -0
- package/dist/swift/structEmitter.d.ts +12 -0
- package/dist/swift/structEmitter.js +70 -0
- package/dist/swift/structEmitter.js.map +1 -0
- package/dist/swift/typeMapper.d.ts +18 -0
- package/dist/swift/typeMapper.js +106 -0
- package/dist/swift/typeMapper.js.map +1 -0
- package/dist/swift/unsupported.d.ts +19 -0
- package/dist/swift/unsupported.js +88 -0
- package/dist/swift/unsupported.js.map +1 -0
- package/dist/typescript/TypescriptBaseConverter.d.ts +25 -0
- package/dist/typescript/TypescriptBaseConverter.js +178 -0
- package/dist/typescript/TypescriptBaseConverter.js.map +1 -0
- package/dist/typescript/TypescriptConverter.d.ts +74 -0
- package/dist/typescript/TypescriptConverter.js +252 -0
- package/dist/typescript/TypescriptConverter.js.map +1 -0
- package/dist/typescript/index.d.ts +2 -0
- package/dist/typescript/index.js +3 -0
- package/dist/typescript/index.js.map +1 -0
- package/dist/utils/index.d.ts +2 -0
- package/dist/utils/index.js +3 -0
- package/dist/utils/index.js.map +1 -0
- package/package.json +37 -5
- package/dist/JSONSchemaConverter.js.map +0 -1
- package/dist/JSONSchemaConverter.test.d.ts +0 -1
- package/dist/JSONSchemaConverter.test.js +0 -585
- package/dist/JSONSchemaConverter.test.js.map +0 -1
- package/dist/Typebox.test.d.ts +0 -1
- package/dist/Typebox.test.js +0 -88
- package/dist/Typebox.test.js.map +0 -1
- package/dist/TypescriptBaseConverter.d.ts +0 -75
- package/dist/TypescriptBaseConverter.js +0 -321
- package/dist/TypescriptBaseConverter.js.map +0 -1
- package/dist/TypescriptConverter.additionalProperties.test.d.ts +0 -1
- package/dist/TypescriptConverter.additionalProperties.test.js +0 -110
- package/dist/TypescriptConverter.additionalProperties.test.js.map +0 -1
- package/dist/TypescriptConverter.arrays.test.d.ts +0 -1
- package/dist/TypescriptConverter.arrays.test.js +0 -130
- package/dist/TypescriptConverter.arrays.test.js.map +0 -1
- package/dist/TypescriptConverter.composites.advanced.test.d.ts +0 -1
- package/dist/TypescriptConverter.composites.advanced.test.js +0 -1070
- package/dist/TypescriptConverter.composites.advanced.test.js.map +0 -1
- package/dist/TypescriptConverter.composites.test.d.ts +0 -1
- package/dist/TypescriptConverter.composites.test.js +0 -335
- package/dist/TypescriptConverter.composites.test.js.map +0 -1
- package/dist/TypescriptConverter.d.ts +0 -163
- package/dist/TypescriptConverter.js +0 -606
- package/dist/TypescriptConverter.js.map +0 -1
- package/dist/TypescriptConverter.jsdoc.test.d.ts +0 -1
- package/dist/TypescriptConverter.jsdoc.test.js +0 -194
- package/dist/TypescriptConverter.jsdoc.test.js.map +0 -1
- package/dist/TypescriptConverter.objects.test.d.ts +0 -1
- package/dist/TypescriptConverter.objects.test.js +0 -258
- package/dist/TypescriptConverter.objects.test.js.map +0 -1
- package/dist/TypescriptConverter.options.test.d.ts +0 -1
- package/dist/TypescriptConverter.options.test.js +0 -501
- package/dist/TypescriptConverter.options.test.js.map +0 -1
- package/dist/TypescriptConverter.primitives.test.d.ts +0 -1
- package/dist/TypescriptConverter.primitives.test.js +0 -26
- package/dist/TypescriptConverter.primitives.test.js.map +0 -1
- package/dist/utils/path-utils.test.d.ts +0 -1
- package/dist/utils/path-utils.test.js +0 -92
- 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 @@
|
|
|
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":"AACA,OAAO,EAAE,sBAAsB,EAAE,MAAM,+BAA+B,CAAC;AAEvE,OAAO,EAAE,wBAAwB,EAAE,MAAM,0BAA0B,CAAC;AACpE,OAAO,EAAE,kBAAkB,EAAE,MAAM,iBAAiB,CAAC;AAErD,OAAO,EAAE,oBAAoB,EAAE,oBAAoB,EAAE,yBAAyB,EAAE,MAAM,kBAAkB,CAAC;AAEzG,gFAAgF;AAChF,MAAM,UAAU,kBAAkB,CAAC,IAAY;IAC7C,IAAI,CAAC,IAAI,CAAC,QAAQ;QAAE,OAAO,IAAI,CAAC;IAChC,IAAI,IAAI,CAAC,IAAI,KAAK,OAAO,IAAI,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,MAAM,CAAC,EAAE,CAAC;QAC1E,OAAO,IAAI,CAAC;IACd,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,wBAAwB,CACtC,CAAyB,EACzB,EAAU,EACV,KAAwB;IAExB,yEAAyE;IACzE,IAAI,EAAE,CAAC,oBAAoB,IAAI,OAAO,EAAE,CAAC,oBAAoB,KAAK,SAAS,EAAE,CAAC;QAC5E,MAAM,MAAM,GAAG,kBAAkB,CAAC,CAAC,EAAE,EAAE,CAAC,oBAAoB,EAAE,KAAK,CAAC,CAAC;QACrE,MAAM,IAAI,GAAG,gDAAgD,MAAM,iBAAiB,CAAC;QACrF,iGAAiG;QACjG,IAAI,EAAE,CAAC,SAAS,EAAE,CAAC;YACjB,MAAM,KAAK,GAAG,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,SAAS,KAAK,EAAE,CAAC,SAAS,CAAC,CAAC;YACnE,IAAI,KAAK;gBAAE,KAAK,CAAC,GAAG,GAAG,IAAI,CAAC;QAC9B,CAAC;QACD,0EAA0E;QAC1E,IAAI,EAAE,CAAC,IAAI,KAAK,CAAC,CAAC,QAAQ,EAAE,CAAC;YAC3B,CAAC,CAAC,OAAO,GAAG,IAAI,CAAC;QACnB,CAAC;IACH,CAAC;IAED,IAAI,CAAC,EAAE,CAAC,UAAU,IAAI,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC9D,OAAO,IAAI,CAAC;IACd,CAAC;IAED,MAAM,KAAK,GAAG,MAAM,CAAC,OAAO,CAAC,EAAE,CAAC,UAAU,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,EAAE,IAAI,CAAC,EAAE,EAAE;QAC9D,MAAM,IAAI,GAAG,wBAAwB,CAAC,GAAG,CAAC,CAAC;QAC3C,IAAI,IAAI,KAAK,GAAG,IAAI,CAAC,CAAC,SAAS,EAAE,CAAC;YAChC,CAAC,CAAC,mBAAmB,CAAC,GAAG,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC;YACrC,CAAC,CAAC,UAAU,CAAC,GAAG,CAAC,yBAAyB,CAAC,UAAU,CAAC,CAAC;QACzD,CAAC;QACD,MAAM,IAAI,GAAG,kBAAkB,CAAC,CAAC,EAAE,IAAI,EAAE,KAAK,CAAC,CAAC;QAChD,MAAM,QAAQ,GAAG,kBAAkB,CAAC,IAAI,CAAC,CAAC;QAC1C,MAAM,GAAG,GAAG,sBAAsB,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;QACtD,+GAA+G;QAC/G,IAAI,MAAc,CAAC;QACnB,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC;YACnB,MAAM,GAAG,GAAG,KAAK,SAAS,CAAC,CAAC,CAAC,OAAO,GAAG,EAAE,CAAC,CAAC,CAAC,UAAU,CAAC;QACzD,CAAC;aAAM,IAAI,QAAQ,EAAE,CAAC;YACpB,MAAM,GAAG,GAAG,KAAK,SAAS,CAAC,CAAC,CAAC,OAAO,GAAG,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC;QAClD,CAAC;aAAM,CAAC;YACN,MAAM,GAAG,GAAG,KAAK,SAAS,CAAC,CAAC,CAAC,MAAM,GAAG,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QAChD,CAAC;QACD,MAAM,WAAW,GAAa,EAAE,CAAC;QACjC,IAAI,CAAC,CAAC,cAAc,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC;YAC/B,WAAW,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC,cAAc,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QACrE,CAAC;QACD,IAAI,CAAC,CAAC,mBAAmB,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC;YACpC,WAAW,CAAC,IAAI,CAAC,KAAK,oBAAoB,CAAC,CAAC,CAAC,mBAAmB,CAAC,GAAG,CAAC,IAAI,CAAE,CAAC,EAAE,CAAC,CAAC;QAClF,CAAC;QACD,IAAI,CAAC,CAAC,eAAe,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC;YAChC,WAAW,CAAC,IAAI,CAAC,KAAK,oBAAoB,EAAE,EAAE,CAAC,CAAC;QAClD,CAAC;QACD,MAAM,SAAS,GAAG,WAAW,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC;QAC9E,OAAO,GAAG,SAAS,SAAS,IAAI,KAAK,IAAI,GAAG,MAAM,EAAE,CAAC;IACvD,CAAC,CAAC,CAAC;IAEH,OAAO,MAAM,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC;AACvC,CAAC"}
|
|
@@ -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":"AAEA,OAAO,EAAE,wBAAwB,EAAE,MAAM,oBAAoB,CAAC;AAE9D,OAAO,EAAE,sBAAsB,EAAE,oBAAoB,EAAE,gCAAgC,EAAE,yBAAyB,EAAE,MAAM,kBAAkB,CAAC;AAE7I;;;;GAIG;AACH,MAAM,UAAU,mBAAmB,CACjC,CAAyB,EACzB,EAAU,EACV,KAAwB;IAExB,MAAM,SAAS,GAAG,gBAAgB,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;IAC1C,IAAI,CAAC,CAAC,oBAAoB,CAAC,GAAG,CAAC,SAAS,CAAC,IAAI,uBAAuB,CAAC,CAAC,EAAE,SAAS,CAAC,EAAE,CAAC;QACnF,kDAAkD;QAClD,OAAO,SAAS,CAAC;IACnB,CAAC;IACD,CAAC,CAAC,oBAAoB,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;IAEtC,MAAM,OAAO,GAAG,EAAE,CAAC,OAAQ,CAAC;IAC5B,MAAM,aAAa,GAAG,CAAC,CAAC,yBAAyB,CAC/C,OAAO,EACP,CAAC,CAAC,yBAAyB,CAAC,OAAO,CAAC,CAAC,eAAe,CACrD,CAAC;IACF,IAAI,CAAC,aAAa;QAAE,OAAO,KAAK,CAAC;IAEjC,KAAK,MAAM,GAAG,IAAI,OAAO,EAAE,CAAC;QAC1B,MAAM,WAAW,GAAG,CAAC,CAAC,YAAY,CAAC,GAAG,CAAC,GAAG,CAAE,CAAC;QAC7C,IACE,CAAC,CAAC,oBAAoB,CAAC,GAAG,CAAC,WAAW,CAAC;YACvC,uBAAuB,CAAC,CAAC,EAAE,WAAW,CAAC,EACvC,CAAC;YACD,SAAS;QACX,CAAC;QACD,CAAC,CAAC,oBAAoB,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC;QACxC,MAAM,SAAS,GAAG,CAAC,CAAC,mBAAmB,CAAC,GAAG,CAAC,UAAW,CAAC,aAAa,CAAC,CAAC,CAAC;QACxE,MAAM,MAAM,GAAG,CAAC,CAAC,uBAAuB,CAAC,GAAG,EAAE,aAAa,CAAC,CAAC;QAC7D,MAAM,IAAI,GAAG,wBAAwB,CAAC,CAAC,EAAE,MAAM,EAAE,KAAK,CAAC,CAAC;QAExD,MAAM,WAAW,GAAa,EAAE,CAAC;QACjC,IAAI,CAAC,CAAC,SAAS,EAAE,CAAC;YAChB,WAAW,CAAC,IAAI,CAAC,sBAAsB,EAAE,CAAC,CAAC;YAC3C,CAAC,CAAC,UAAU,CAAC,GAAG,CAAC,yBAAyB,CAAC,YAAY,CAAC,CAAC;YACzD,IAAI,SAAS,EAAE,CAAC;gBACd,WAAW,CAAC,IAAI,CAAC,oBAAoB,CAAC,SAAS,CAAC,CAAC,CAAC;gBAClD,CAAC,CAAC,UAAU,CAAC,GAAG,CAAC,yBAAyB,CAAC,UAAU,CAAC,CAAC;YACzD,CAAC;QACH,CAAC;QACD,MAAM,SAAS,GAAG,WAAW,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC;QAC9E,CAAC,CAAC,WAAW,CAAC,IAAI,CAChB,GAAG,SAAS,cAAc,WAAW,GAAG,IAAI,MAAM,SAAS,EAAE,CAC9D,CAAC;IACJ,CAAC;IAED,MAAM,gBAAgB,GAAa,EAAE,CAAC;IACtC,IAAI,CAAC,CAAC,SAAS,EAAE,CAAC;QAChB,gBAAgB,CAAC,IAAI,CAAC,sBAAsB,EAAE,CAAC,CAAC;QAChD,gBAAgB,CAAC,IAAI,CAAC,gCAAgC,CAAC,aAAa,CAAC,CAAC,CAAC;QACvE,CAAC,CAAC,UAAU,CAAC,GAAG,CAAC,yBAAyB,CAAC,YAAY,CAAC,CAAC;QACzD,CAAC,CAAC,UAAU,CAAC,GAAG,CAAC,yBAAyB,CAAC,sBAAsB,CAAC,CAAC;IACrE,CAAC;IACD,MAAM,cAAc,GAClB,gBAAgB,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,gBAAgB,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC;IACxE,CAAC,CAAC,WAAW,CAAC,IAAI,CAAC,GAAG,cAAc,oBAAoB,SAAS,EAAE,CAAC,CAAC;IAErE,OAAO,SAAS,CAAC;AACnB,CAAC;AAED,oEAAoE;AACpE,MAAM,UAAU,gBAAgB,CAAC,CAAyB,EAAE,EAAU;IACpE,IAAI,EAAE,CAAC,IAAI;QAAE,OAAO,EAAE,CAAC,IAAI,CAAC;IAC5B,IAAI,EAAE,CAAC,KAAK;QAAE,OAAO,EAAE,CAAC,KAAK,CAAC;IAC9B,MAAM,QAAQ,GAAG,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;IACpE,MAAM,QAAQ,GACZ,QAAQ;SACL,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;SAClD,IAAI,CAAC,EAAE,CAAC,IAAI,OAAO,CAAC;IACzB,OAAO,CAAC,CAAC,iBAAiB,CAAC,QAAQ,CAAC,CAAC;AACvC,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,uBAAuB,CAAC,CAAyB,EAAE,IAAY;IAC7E,OAAO,CAAC,CAAC,WAAW,CAAC,IAAI,CACvB,CAAC,CAAC,EAAE,EAAE,CACJ,CAAC,CAAC,QAAQ,CAAC,cAAc,IAAI,GAAG,CAAC;QACjC,CAAC,CAAC,QAAQ,CAAC,cAAc,IAAI,GAAG,CAAC;QACjC,CAAC,CAAC,QAAQ,CAAC,oBAAoB,IAAI,EAAE,CAAC,CACzC,CAAC;AACJ,CAAC"}
|
|
@@ -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
|
+
}
|