ajsc 5.2.4 → 7.1.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/CHANGELOG.md +103 -0
- package/README.md +303 -144
- package/dist/converter/BaseConverter.d.ts +315 -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 +24 -0
- package/dist/converter/index.js +24 -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 +137 -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 +142 -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 +13 -0
- package/dist/kotlin/index.js +14 -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 +113 -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 +13 -0
- package/dist/swift/index.js +14 -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 +254 -0
- package/dist/typescript/TypescriptConverter.js.map +1 -0
- package/dist/typescript/index.d.ts +12 -0
- package/dist/typescript/index.js +13 -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 +39 -6
- 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,137 @@
|
|
|
1
|
+
import pluralize from "pluralize";
|
|
2
|
+
import { PathUtils } from "../utils/path-utils.js";
|
|
3
|
+
import { toPascalCase } from "../utils/to-pascal-case.js";
|
|
4
|
+
/** Default words that should not be singularized (common programming/API terms). */
|
|
5
|
+
const DEFAULT_UNCOUNTABLE_WORDS = ["data", "metadata"];
|
|
6
|
+
/** Pure helper: singularize a word, respecting uncountable allow-lists. */
|
|
7
|
+
export function singularize(word, extraUncountable) {
|
|
8
|
+
const uncountable = [...DEFAULT_UNCOUNTABLE_WORDS, ...(extraUncountable ?? [])];
|
|
9
|
+
if (uncountable.some((u) => word.toLowerCase().endsWith(u.toLowerCase()))) {
|
|
10
|
+
return word;
|
|
11
|
+
}
|
|
12
|
+
return pluralize.singular(word);
|
|
13
|
+
}
|
|
14
|
+
/** Default ref-type naming configuration shared by all language converters. */
|
|
15
|
+
export function defaultRefTypeNamingConfig() {
|
|
16
|
+
return {
|
|
17
|
+
postfixes: [
|
|
18
|
+
"Type", "Element", "Schema", "Object", "Shape", "Definition",
|
|
19
|
+
"Item", "Entry", "One", "Two", "Three", "Four", "Five",
|
|
20
|
+
"Six", "Seven", "Eight", "Nine", "Ten",
|
|
21
|
+
],
|
|
22
|
+
handleAnySymbol: true,
|
|
23
|
+
stripLeadingAnySymbol: true,
|
|
24
|
+
depluralize: true,
|
|
25
|
+
arrayItemNaming: false,
|
|
26
|
+
};
|
|
27
|
+
}
|
|
28
|
+
/**
|
|
29
|
+
* Returns the effective ref-type naming config for the given context: the
|
|
30
|
+
* default merged shallow with the language profile's `refTypeNamingConfig` overrides.
|
|
31
|
+
*/
|
|
32
|
+
export function getRefTypeNamingConfig(c) {
|
|
33
|
+
return { ...defaultRefTypeNamingConfig(), ...c.languageProfile.refTypeNamingConfig };
|
|
34
|
+
}
|
|
35
|
+
/**
|
|
36
|
+
* Computes a path-derived, collision-free ref type name for a (signature, nodePath) pair.
|
|
37
|
+
*
|
|
38
|
+
* Algorithm:
|
|
39
|
+
* 1. Parse the path into segments and pick the array-item / `*` / regular postfix list.
|
|
40
|
+
* 2. Try increasingly more parent segments combined with each postfix.
|
|
41
|
+
* 3. If a refType already exists for (signature, proposedName), reuse it.
|
|
42
|
+
* 4. If no name is free after exhausting postfixes, fall back to `<base><N>` with a
|
|
43
|
+
* deterministic instance-scoped counter on `c.fallbackCounter`.
|
|
44
|
+
*/
|
|
45
|
+
export function getUniqueRefTypeName(c, signature, nodePath) {
|
|
46
|
+
const config = getRefTypeNamingConfig(c);
|
|
47
|
+
const path = PathUtils.parsePath(nodePath);
|
|
48
|
+
const lastPathItem = nodePath.split(".").slice(-1)[0];
|
|
49
|
+
const isArrayItem = lastPathItem === "0";
|
|
50
|
+
const isAnySymbol = lastPathItem === "*";
|
|
51
|
+
const postFixes = [...config.postfixes];
|
|
52
|
+
if (isArrayItem) {
|
|
53
|
+
if (config.arrayItemNaming !== false) {
|
|
54
|
+
postFixes.unshift(config.arrayItemNaming ?? "Item");
|
|
55
|
+
}
|
|
56
|
+
else {
|
|
57
|
+
postFixes.unshift("");
|
|
58
|
+
}
|
|
59
|
+
// When path is empty (root-level array), use the root schema name as context
|
|
60
|
+
if (path.length === 0 && c.rootName) {
|
|
61
|
+
path.push(c.rootName);
|
|
62
|
+
}
|
|
63
|
+
if (config.depluralize && path.length > 0 && path[path.length - 1]) {
|
|
64
|
+
path[path.length - 1] = singularize(path[path.length - 1], config.uncountableWords);
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
else if (config.handleAnySymbol && isAnySymbol) {
|
|
68
|
+
postFixes.unshift("AnyKey", "AnyProperty", "AnyField", "AnyIdentifier");
|
|
69
|
+
}
|
|
70
|
+
else {
|
|
71
|
+
postFixes.unshift("");
|
|
72
|
+
}
|
|
73
|
+
let pathsSegmentsToInclude = 1;
|
|
74
|
+
let name = "";
|
|
75
|
+
let postFixIndexToTry = 0;
|
|
76
|
+
// Optional caller-supplied prefix prepended to every proposed name. Useful
|
|
77
|
+
// for cross-call disambiguation when emitting multiple schemas into one
|
|
78
|
+
// namespace (see BaseConverterOpts.namePrefix). PascalCased so non-identifier
|
|
79
|
+
// characters in the source value are sanitized.
|
|
80
|
+
const prefix = c.baseOpts?.namePrefix
|
|
81
|
+
? toPascalCase(c.baseOpts.namePrefix)
|
|
82
|
+
: "";
|
|
83
|
+
while (!name) {
|
|
84
|
+
const pathSegment = path.slice(-pathsSegmentsToInclude).map(toPascalCase).join("");
|
|
85
|
+
let proposedName = prefix + pathSegment + postFixes[postFixIndexToTry];
|
|
86
|
+
if (config.stripLeadingAnySymbol && proposedName[0] === "*") {
|
|
87
|
+
proposedName = proposedName.slice(1);
|
|
88
|
+
}
|
|
89
|
+
const foundSignatureMatch = c.refTypes.find((entry) => entry.signature === signature && entry.name === proposedName);
|
|
90
|
+
if (foundSignatureMatch) {
|
|
91
|
+
return foundSignatureMatch.name;
|
|
92
|
+
}
|
|
93
|
+
// Skip empty proposed names (e.g. empty path with no postfix)
|
|
94
|
+
if (!proposedName) {
|
|
95
|
+
postFixIndexToTry++;
|
|
96
|
+
if (postFixIndexToTry >= postFixes.length) {
|
|
97
|
+
do {
|
|
98
|
+
c.fallbackCounter++;
|
|
99
|
+
name = "Type" + c.fallbackCounter;
|
|
100
|
+
} while (c.usedDeclarationNames.has(name));
|
|
101
|
+
}
|
|
102
|
+
continue;
|
|
103
|
+
}
|
|
104
|
+
const nameAlreadyUsed = c.usedDeclarationNames.has(proposedName);
|
|
105
|
+
if (nameAlreadyUsed) {
|
|
106
|
+
pathsSegmentsToInclude++;
|
|
107
|
+
if (pathsSegmentsToInclude >= path.length) {
|
|
108
|
+
postFixIndexToTry++;
|
|
109
|
+
pathsSegmentsToInclude = 1;
|
|
110
|
+
if (postFixIndexToTry === postFixes.length) {
|
|
111
|
+
// Deterministic instance-scoped fallback
|
|
112
|
+
do {
|
|
113
|
+
c.fallbackCounter++;
|
|
114
|
+
name = proposedName + c.fallbackCounter;
|
|
115
|
+
} while (c.usedDeclarationNames.has(name));
|
|
116
|
+
}
|
|
117
|
+
}
|
|
118
|
+
}
|
|
119
|
+
else {
|
|
120
|
+
name = proposedName;
|
|
121
|
+
}
|
|
122
|
+
}
|
|
123
|
+
c.usedDeclarationNames.add(name);
|
|
124
|
+
return name;
|
|
125
|
+
}
|
|
126
|
+
/** Default resolver for a ref-type name from an IR node and signature. */
|
|
127
|
+
export function defaultResolveRefTypeName(c, ir, signature) {
|
|
128
|
+
return getUniqueRefTypeName(c, signature, ir.path);
|
|
129
|
+
}
|
|
130
|
+
/**
|
|
131
|
+
* Returns names of all extracted ref types in declaration order.
|
|
132
|
+
* Subclasses may filter further (e.g. to exclude the root type).
|
|
133
|
+
*/
|
|
134
|
+
export function computeExtractedTypeNames(c) {
|
|
135
|
+
return c.refTypes.map((entry) => entry.name);
|
|
136
|
+
}
|
|
137
|
+
//# sourceMappingURL=naming.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"naming.js","sourceRoot":"","sources":["../../src/converter/naming.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import { IRNode } from "../types.js";
|
|
2
|
+
import type { BaseConverterContext } from "./BaseConverter.js";
|
|
3
|
+
/**
|
|
4
|
+
* Resolves an IR node to its registered ref-type name, registering a new entry
|
|
5
|
+
* if needed. Returns `undefined` when the node has no signature.
|
|
6
|
+
*
|
|
7
|
+
* Behavior:
|
|
8
|
+
* 1. Self-reference: if `ir.name === c.rootName` and `detectSelfReferenceToRoot`
|
|
9
|
+
* is enabled (default true), short-circuits to the root name without registering.
|
|
10
|
+
* 2. Signature dedup: if `languageProfile.shouldReuseExistingSignature(sig)`
|
|
11
|
+
* returns true and an entry already exists for the signature, reuses it.
|
|
12
|
+
* 3. Otherwise resolves a name (via the language profile's `resolveRefTypeName`
|
|
13
|
+
* hook or the default path-derived resolver), then either reuses an existing
|
|
14
|
+
* matching entry or registers a fresh one. Code is generated by calling back
|
|
15
|
+
* into `c.generateObjectType` and assigned via the held entry reference (so
|
|
16
|
+
* recursion sees an entry-in-progress).
|
|
17
|
+
*/
|
|
18
|
+
export declare function getReferencedType(c: BaseConverterContext, ir: IRNode): string | undefined;
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
import { defaultResolveRefTypeName } from "./naming.js";
|
|
2
|
+
/**
|
|
3
|
+
* Resolves an IR node to its registered ref-type name, registering a new entry
|
|
4
|
+
* if needed. Returns `undefined` when the node has no signature.
|
|
5
|
+
*
|
|
6
|
+
* Behavior:
|
|
7
|
+
* 1. Self-reference: if `ir.name === c.rootName` and `detectSelfReferenceToRoot`
|
|
8
|
+
* is enabled (default true), short-circuits to the root name without registering.
|
|
9
|
+
* 2. Signature dedup: if `languageProfile.shouldReuseExistingSignature(sig)`
|
|
10
|
+
* returns true and an entry already exists for the signature, reuses it.
|
|
11
|
+
* 3. Otherwise resolves a name (via the language profile's `resolveRefTypeName`
|
|
12
|
+
* hook or the default path-derived resolver), then either reuses an existing
|
|
13
|
+
* matching entry or registers a fresh one. Code is generated by calling back
|
|
14
|
+
* into `c.generateObjectType` and assigned via the held entry reference (so
|
|
15
|
+
* recursion sees an entry-in-progress).
|
|
16
|
+
*/
|
|
17
|
+
export function getReferencedType(c, ir) {
|
|
18
|
+
const signature = ir.signature;
|
|
19
|
+
if (!signature) {
|
|
20
|
+
return undefined;
|
|
21
|
+
}
|
|
22
|
+
// Self-reference to the root: short-circuit so we don't register a duplicate type.
|
|
23
|
+
if ((c.languageProfile.detectSelfReferenceToRoot ?? true) && ir.name && ir.name === c.rootName) {
|
|
24
|
+
return c.rootName;
|
|
25
|
+
}
|
|
26
|
+
// Hook: allow subclasses to enable signature-only dedup for specific signatures
|
|
27
|
+
if (c.languageProfile.shouldReuseExistingSignature?.(signature) ?? false) {
|
|
28
|
+
const existingBySignature = c.refTypes.find((entry) => entry.signature === signature);
|
|
29
|
+
if (existingBySignature)
|
|
30
|
+
return existingBySignature.name;
|
|
31
|
+
}
|
|
32
|
+
const defaultResolver = () => defaultResolveRefTypeName(c, ir, signature);
|
|
33
|
+
const name = c.languageProfile.resolveRefTypeName?.(ir, signature, defaultResolver)
|
|
34
|
+
?? defaultResolver();
|
|
35
|
+
// Account for recursion: the ref type could have already been created
|
|
36
|
+
const existing = c.refTypes.find((entry) => entry.signature === signature && entry.name === name);
|
|
37
|
+
if (existing) {
|
|
38
|
+
return name;
|
|
39
|
+
}
|
|
40
|
+
// Push entry with empty code placeholder - hold reference for safe assignment
|
|
41
|
+
const entry = { signature, name, code: "", title: ir.title, description: ir.description };
|
|
42
|
+
c.refTypes.push(entry);
|
|
43
|
+
const code = c.generateObjectType(ir, {
|
|
44
|
+
getReferencedType: (node) => getReferencedType(c, node),
|
|
45
|
+
});
|
|
46
|
+
// Safe assignment via direct reference
|
|
47
|
+
entry.code = code;
|
|
48
|
+
return name;
|
|
49
|
+
}
|
|
50
|
+
//# sourceMappingURL=registry.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"registry.js","sourceRoot":"","sources":["../../src/converter/registry.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,yBAAyB,EAAE,MAAM,aAAa,CAAC;AAExD;;;;;;;;;;;;;;GAcG;AACH,MAAM,UAAU,iBAAiB,CAC/B,CAAuB,EACvB,EAAU;IAEV,MAAM,SAAS,GAAG,EAAE,CAAC,SAAS,CAAC;IAE/B,IAAI,CAAC,SAAS,EAAE,CAAC;QACf,OAAO,SAAS,CAAC;IACnB,CAAC;IAED,mFAAmF;IACnF,IAAI,CAAC,CAAC,CAAC,eAAe,CAAC,yBAAyB,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC,IAAI,IAAI,EAAE,CAAC,IAAI,KAAK,CAAC,CAAC,QAAQ,EAAE,CAAC;QAC/F,OAAO,CAAC,CAAC,QAAQ,CAAC;IACpB,CAAC;IAED,gFAAgF;IAChF,IAAI,CAAC,CAAC,eAAe,CAAC,4BAA4B,EAAE,CAAC,SAAS,CAAC,IAAI,KAAK,EAAE,CAAC;QACzE,MAAM,mBAAmB,GAAG,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,SAAS,KAAK,SAAS,CAAC,CAAC;QACtF,IAAI,mBAAmB;YAAE,OAAO,mBAAmB,CAAC,IAAI,CAAC;IAC3D,CAAC;IAED,MAAM,eAAe,GAAG,GAAG,EAAE,CAAC,yBAAyB,CAAC,CAAC,EAAE,EAAE,EAAE,SAAS,CAAC,CAAC;IAC1E,MAAM,IAAI,GAAG,CAAC,CAAC,eAAe,CAAC,kBAAkB,EAAE,CAAC,EAAE,EAAE,SAAS,EAAE,eAAe,CAAC;WAC9E,eAAe,EAAE,CAAC;IAEvB,sEAAsE;IACtE,MAAM,QAAQ,GAAG,CAAC,CAAC,QAAQ,CAAC,IAAI,CAC9B,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,SAAS,KAAK,SAAS,IAAI,KAAK,CAAC,IAAI,KAAK,IAAI,CAChE,CAAC;IACF,IAAI,QAAQ,EAAE,CAAC;QACb,OAAO,IAAI,CAAC;IACd,CAAC;IAED,8EAA8E;IAC9E,MAAM,KAAK,GAAiB,EAAE,SAAS,EAAE,IAAI,EAAE,IAAI,EAAE,EAAE,EAAE,KAAK,EAAE,EAAE,CAAC,KAAK,EAAE,WAAW,EAAE,EAAE,CAAC,WAAW,EAAE,CAAC;IACxG,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IAEvB,MAAM,IAAI,GAAG,CAAC,CAAC,kBAAkB,CAAC,EAAE,EAAE;QACpC,iBAAiB,EAAE,CAAC,IAAY,EAAE,EAAE,CAAC,iBAAiB,CAAC,CAAC,EAAE,IAAI,CAAC;KAChE,CAAC,CAAC;IAEH,uCAAuC;IACvC,KAAK,CAAC,IAAI,GAAG,IAAI,CAAC;IAElB,OAAO,IAAI,CAAC;AACd,CAAC"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import { IRNode } from "../types.js";
|
|
2
|
+
/**
|
|
3
|
+
* Recursively walks an IR tree, visiting each node and optionally replacing it.
|
|
4
|
+
* Returns the (potentially replaced) root node.
|
|
5
|
+
*
|
|
6
|
+
* @param visitor Return an IRNode to replace the current node, or void/null to keep it.
|
|
7
|
+
* @param order 'pre' visits before children; 'post' (default) visits after children.
|
|
8
|
+
*/
|
|
9
|
+
export declare function walkIR(ir: IRNode, visitor: (node: IRNode) => IRNode | void | null, order?: "pre" | "post"): IRNode;
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Recursively walks an IR tree, visiting each node and optionally replacing it.
|
|
3
|
+
* Returns the (potentially replaced) root node.
|
|
4
|
+
*
|
|
5
|
+
* @param visitor Return an IRNode to replace the current node, or void/null to keep it.
|
|
6
|
+
* @param order 'pre' visits before children; 'post' (default) visits after children.
|
|
7
|
+
*/
|
|
8
|
+
export function walkIR(ir, visitor, order = "post") {
|
|
9
|
+
let node = ir;
|
|
10
|
+
if (order === "pre") {
|
|
11
|
+
const result = visitor(node);
|
|
12
|
+
if (result != null)
|
|
13
|
+
node = result;
|
|
14
|
+
}
|
|
15
|
+
if (node.properties) {
|
|
16
|
+
for (const key of Object.keys(node.properties)) {
|
|
17
|
+
node.properties[key] = walkIR(node.properties[key], visitor, order);
|
|
18
|
+
}
|
|
19
|
+
}
|
|
20
|
+
if (node.items) {
|
|
21
|
+
node.items = walkIR(node.items, visitor, order);
|
|
22
|
+
}
|
|
23
|
+
if (node.tupleItems) {
|
|
24
|
+
node.tupleItems = node.tupleItems.map((t) => walkIR(t, visitor, order));
|
|
25
|
+
}
|
|
26
|
+
if (node.options) {
|
|
27
|
+
node.options = node.options.map((o) => walkIR(o, visitor, order));
|
|
28
|
+
}
|
|
29
|
+
if (node.additionalProperties &&
|
|
30
|
+
typeof node.additionalProperties !== "boolean") {
|
|
31
|
+
node.additionalProperties = walkIR(node.additionalProperties, visitor, order);
|
|
32
|
+
}
|
|
33
|
+
if (order === "post") {
|
|
34
|
+
const result = visitor(node);
|
|
35
|
+
if (result != null)
|
|
36
|
+
return result;
|
|
37
|
+
}
|
|
38
|
+
return node;
|
|
39
|
+
}
|
|
40
|
+
//# sourceMappingURL=walk.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"walk.js","sourceRoot":"","sources":["../../src/converter/walk.ts"],"names":[],"mappings":"AAEA;;;;;;GAMG;AACH,MAAM,UAAU,MAAM,CACpB,EAAU,EACV,OAA+C,EAC/C,QAAwB,MAAM;IAE9B,IAAI,IAAI,GAAG,EAAE,CAAC;IAEd,IAAI,KAAK,KAAK,KAAK,EAAE,CAAC;QACpB,MAAM,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;QAC7B,IAAI,MAAM,IAAI,IAAI;YAAE,IAAI,GAAG,MAAM,CAAC;IACpC,CAAC;IAED,IAAI,IAAI,CAAC,UAAU,EAAE,CAAC;QACpB,KAAK,MAAM,GAAG,IAAI,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,EAAE,CAAC;YAC/C,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,GAAG,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,OAAO,EAAE,KAAK,CAAC,CAAC;QACtE,CAAC;IACH,CAAC;IACD,IAAI,IAAI,CAAC,KAAK,EAAE,CAAC;QACf,IAAI,CAAC,KAAK,GAAG,MAAM,CAAC,IAAI,CAAC,KAAK,EAAE,OAAO,EAAE,KAAK,CAAC,CAAC;IAClD,CAAC;IACD,IAAI,IAAI,CAAC,UAAU,EAAE,CAAC;QACpB,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,MAAM,CAAC,CAAC,EAAE,OAAO,EAAE,KAAK,CAAC,CAAC,CAAC;IAC1E,CAAC;IACD,IAAI,IAAI,CAAC,OAAO,EAAE,CAAC;QACjB,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,MAAM,CAAC,CAAC,EAAE,OAAO,EAAE,KAAK,CAAC,CAAC,CAAC;IACpE,CAAC;IACD,IACE,IAAI,CAAC,oBAAoB;QACzB,OAAO,IAAI,CAAC,oBAAoB,KAAK,SAAS,EAC9C,CAAC;QACD,IAAI,CAAC,oBAAoB,GAAG,MAAM,CAChC,IAAI,CAAC,oBAAoB,EACzB,OAAO,EACP,KAAK,CACN,CAAC;IACJ,CAAC;IAED,IAAI,KAAK,KAAK,MAAM,EAAE,CAAC;QACrB,MAAM,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;QAC7B,IAAI,MAAM,IAAI,IAAI;YAAE,OAAO,MAAM,CAAC;IACpC,CAAC;IAED,OAAO,IAAI,CAAC;AACd,CAAC"}
|
package/dist/index.d.ts
CHANGED
|
@@ -1,3 +1,71 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
1
|
+
import type { JSONSchema7Definition } from "json-schema";
|
|
2
|
+
import { type TypescriptConverterOpts } from "./typescript/index.js";
|
|
3
|
+
import { type KotlinConverterOpts } from "./kotlin/index.js";
|
|
4
|
+
import { type SwiftConverterOpts } from "./swift/index.js";
|
|
5
|
+
/**
|
|
6
|
+
* The structured result of emitting source for a JSON Schema.
|
|
7
|
+
*
|
|
8
|
+
* Returned by {@link emitTypescript}, {@link emitKotlin}, and {@link emitSwift}.
|
|
9
|
+
*/
|
|
10
|
+
export interface EmitResult {
|
|
11
|
+
/**
|
|
12
|
+
* The generated source code. Contains type/struct/data-class declarations
|
|
13
|
+
* only — no `import` lines (Kotlin) or module imports (Swift). Consumers
|
|
14
|
+
* assemble the final file by combining {@link imports} with this string.
|
|
15
|
+
*/
|
|
16
|
+
code: string;
|
|
17
|
+
/** Name of the top-level type that the schema's root maps to. */
|
|
18
|
+
rootTypeName: string;
|
|
19
|
+
/**
|
|
20
|
+
* Names of every additional named declaration emitted besides the root —
|
|
21
|
+
* nested object types, enums, sealed-interface variants, and similar.
|
|
22
|
+
* Useful for downstream codegen that wants to reference these by name
|
|
23
|
+
* without parsing the {@link code} string.
|
|
24
|
+
*/
|
|
25
|
+
extractedTypeNames: string[];
|
|
26
|
+
/**
|
|
27
|
+
* Required imports for the emitted code, as fully-qualified module/symbol
|
|
28
|
+
* paths (Kotlin) or module names (Swift). Empty for TypeScript.
|
|
29
|
+
*
|
|
30
|
+
* Format the value into the language's `import` statement at assembly time.
|
|
31
|
+
* Example:
|
|
32
|
+
*
|
|
33
|
+
* const file = [...imports.map((i) => `import ${i}`), "", code].join("\n");
|
|
34
|
+
*/
|
|
35
|
+
imports: string[];
|
|
36
|
+
}
|
|
37
|
+
/**
|
|
38
|
+
* Emits TypeScript source for the given JSON Schema.
|
|
39
|
+
*
|
|
40
|
+
* Wraps {@link TypescriptConverter} with the {@link EmitResult} shape used by
|
|
41
|
+
* the other language emitters. For advanced use (custom subclassing, deep
|
|
42
|
+
* options reuse), import {@link TypescriptConverter} directly from `ajsc/typescript`.
|
|
43
|
+
*/
|
|
44
|
+
export declare function emitTypescript(schema: JSONSchema7Definition, opts?: TypescriptConverterOpts): EmitResult;
|
|
45
|
+
/**
|
|
46
|
+
* Emits Kotlin source for the given JSON Schema.
|
|
47
|
+
*
|
|
48
|
+
* Defaults: `serializer: "kotlinx"` (emits `@Serializable` data classes for
|
|
49
|
+
* use with kotlinx-serialization). Pass `serializer: "none"` for plain types
|
|
50
|
+
* with no annotations.
|
|
51
|
+
*
|
|
52
|
+
* For advanced use (custom subclassing), import {@link KotlinConverter}
|
|
53
|
+
* directly from `ajsc/kotlin`.
|
|
54
|
+
*/
|
|
55
|
+
export declare function emitKotlin(schema: JSONSchema7Definition, opts?: KotlinConverterOpts): EmitResult;
|
|
56
|
+
/**
|
|
57
|
+
* Emits Swift source for the given JSON Schema.
|
|
58
|
+
*
|
|
59
|
+
* Defaults: `serializer: "codable"` (emits `Codable`-conforming structs).
|
|
60
|
+
* Pass `serializer: "none"` for plain types with no Codable conformance.
|
|
61
|
+
*
|
|
62
|
+
* For advanced use (custom subclassing), import {@link SwiftConverter}
|
|
63
|
+
* directly from `ajsc/swift`.
|
|
64
|
+
*/
|
|
65
|
+
export declare function emitSwift(schema: JSONSchema7Definition, opts?: SwiftConverterOpts): EmitResult;
|
|
66
|
+
export { TypescriptConverter } from "./typescript/index.js";
|
|
67
|
+
export type { TypescriptConverterOpts } from "./typescript/index.js";
|
|
68
|
+
export { KotlinConverter } from "./kotlin/index.js";
|
|
69
|
+
export type { KotlinConverterOpts } from "./kotlin/index.js";
|
|
70
|
+
export { SwiftConverter } from "./swift/index.js";
|
|
71
|
+
export type { SwiftConverterOpts } from "./swift/index.js";
|
package/dist/index.js
CHANGED
|
@@ -1,4 +1,64 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
1
|
+
// Top-level entry for ajsc. Convenience function-style API for code generators
|
|
2
|
+
// that want a single call site, plus re-exports of the class-style converters
|
|
3
|
+
// for direct subclassing or advanced use.
|
|
4
|
+
//
|
|
5
|
+
// Most consumers should prefer the function-style API:
|
|
6
|
+
//
|
|
7
|
+
// import { emitKotlin } from "ajsc";
|
|
8
|
+
// const { code, imports, rootTypeName, extractedTypeNames } = emitKotlin(schema);
|
|
9
|
+
//
|
|
10
|
+
// Class-style imports remain available via the language subpaths (`ajsc/kotlin`,
|
|
11
|
+
// `ajsc/swift`, `ajsc/typescript`) for users who need to subclass the converter.
|
|
12
|
+
import { TypescriptConverter, } from "./typescript/index.js";
|
|
13
|
+
import { KotlinConverter, } from "./kotlin/index.js";
|
|
14
|
+
import { SwiftConverter, } from "./swift/index.js";
|
|
15
|
+
function toEmitResult(c) {
|
|
16
|
+
return {
|
|
17
|
+
code: c.code,
|
|
18
|
+
rootTypeName: c.rootTypeName,
|
|
19
|
+
extractedTypeNames: c.extractedTypeNames,
|
|
20
|
+
imports: c.imports,
|
|
21
|
+
};
|
|
22
|
+
}
|
|
23
|
+
/**
|
|
24
|
+
* Emits TypeScript source for the given JSON Schema.
|
|
25
|
+
*
|
|
26
|
+
* Wraps {@link TypescriptConverter} with the {@link EmitResult} shape used by
|
|
27
|
+
* the other language emitters. For advanced use (custom subclassing, deep
|
|
28
|
+
* options reuse), import {@link TypescriptConverter} directly from `ajsc/typescript`.
|
|
29
|
+
*/
|
|
30
|
+
export function emitTypescript(schema, opts) {
|
|
31
|
+
return toEmitResult(new TypescriptConverter(schema, opts));
|
|
32
|
+
}
|
|
33
|
+
/**
|
|
34
|
+
* Emits Kotlin source for the given JSON Schema.
|
|
35
|
+
*
|
|
36
|
+
* Defaults: `serializer: "kotlinx"` (emits `@Serializable` data classes for
|
|
37
|
+
* use with kotlinx-serialization). Pass `serializer: "none"` for plain types
|
|
38
|
+
* with no annotations.
|
|
39
|
+
*
|
|
40
|
+
* For advanced use (custom subclassing), import {@link KotlinConverter}
|
|
41
|
+
* directly from `ajsc/kotlin`.
|
|
42
|
+
*/
|
|
43
|
+
export function emitKotlin(schema, opts) {
|
|
44
|
+
return toEmitResult(new KotlinConverter(schema, opts));
|
|
45
|
+
}
|
|
46
|
+
/**
|
|
47
|
+
* Emits Swift source for the given JSON Schema.
|
|
48
|
+
*
|
|
49
|
+
* Defaults: `serializer: "codable"` (emits `Codable`-conforming structs).
|
|
50
|
+
* Pass `serializer: "none"` for plain types with no Codable conformance.
|
|
51
|
+
*
|
|
52
|
+
* For advanced use (custom subclassing), import {@link SwiftConverter}
|
|
53
|
+
* directly from `ajsc/swift`.
|
|
54
|
+
*/
|
|
55
|
+
export function emitSwift(schema, opts) {
|
|
56
|
+
return toEmitResult(new SwiftConverter(schema, opts));
|
|
57
|
+
}
|
|
58
|
+
// Re-export the converter classes for users who need them directly.
|
|
59
|
+
// Existing consumers using `import { TypescriptConverter } from "ajsc"` continue
|
|
60
|
+
// to work; new consumers should generally prefer `emitTypescript()`.
|
|
61
|
+
export { TypescriptConverter } from "./typescript/index.js";
|
|
62
|
+
export { KotlinConverter } from "./kotlin/index.js";
|
|
63
|
+
export { SwiftConverter } from "./swift/index.js";
|
|
4
64
|
//# sourceMappingURL=index.js.map
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,+EAA+E;AAC/E,8EAA8E;AAC9E,0CAA0C;AAC1C,EAAE;AACF,uDAAuD;AACvD,EAAE;AACF,uCAAuC;AACvC,oFAAoF;AACpF,EAAE;AACF,iFAAiF;AACjF,iFAAiF;AAGjF,OAAO,EACL,mBAAmB,GAEpB,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EACL,eAAe,GAEhB,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EACL,cAAc,GAEf,MAAM,kBAAkB,CAAC;AAsC1B,SAAS,YAAY,CAAC,CAKrB;IACC,OAAO;QACL,IAAI,EAAE,CAAC,CAAC,IAAI;QACZ,YAAY,EAAE,CAAC,CAAC,YAAY;QAC5B,kBAAkB,EAAE,CAAC,CAAC,kBAAkB;QACxC,OAAO,EAAE,CAAC,CAAC,OAAO;KACnB,CAAC;AACJ,CAAC;AAED;;;;;;GAMG;AACH,MAAM,UAAU,cAAc,CAC5B,MAA6B,EAC7B,IAA8B;IAE9B,OAAO,YAAY,CAAC,IAAI,mBAAmB,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC,CAAC;AAC7D,CAAC;AAED;;;;;;;;;GASG;AACH,MAAM,UAAU,UAAU,CACxB,MAA6B,EAC7B,IAA0B;IAE1B,OAAO,YAAY,CAAC,IAAI,eAAe,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC,CAAC;AACzD,CAAC;AAED;;;;;;;;GAQG;AACH,MAAM,UAAU,SAAS,CACvB,MAA6B,EAC7B,IAAyB;IAEzB,OAAO,YAAY,CAAC,IAAI,cAAc,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC,CAAC;AACxD,CAAC;AAED,oEAAoE;AACpE,iFAAiF;AACjF,qEAAqE;AACrE,OAAO,EAAE,mBAAmB,EAAE,MAAM,uBAAuB,CAAC;AAE5D,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AAEpD,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { JSONSchema7Definition } from "json-schema";
|
|
2
|
-
import { ConverterOptions, IRNode, SignatureOccurrences } from "
|
|
2
|
+
import { ConverterOptions, IRNode, SignatureOccurrences } from "../types.js";
|
|
3
3
|
/**
|
|
4
4
|
* JSONSchemaConverter converts a JSON Schema (Draft-07) into an
|
|
5
5
|
* intermediate representation (IR) that can later be transformed
|
|
@@ -262,9 +262,15 @@ export class JSONSchemaConverter {
|
|
|
262
262
|
}
|
|
263
263
|
case "array": {
|
|
264
264
|
const name = this.getTypeName(schema, ctx);
|
|
265
|
-
// Step 1.7: Tuple validation:
|
|
266
|
-
|
|
267
|
-
|
|
265
|
+
// Step 1.7: Tuple validation: positional schemas via legacy
|
|
266
|
+
// `items: [...]` (Draft-07) or modern `prefixItems: [...]`
|
|
267
|
+
// (JSON Schema 2020-12). Both spellings are accepted.
|
|
268
|
+
const tupleSpec = Array.isArray(schema.items)
|
|
269
|
+
? schema.items
|
|
270
|
+
: (schema
|
|
271
|
+
.prefixItems);
|
|
272
|
+
if (tupleSpec) {
|
|
273
|
+
const tupleItems = tupleSpec.map((item, i) => this.convertSchema(item, {
|
|
268
274
|
path: ctx.path ? `${ctx.path}.${i}` : `${i}`,
|
|
269
275
|
}));
|
|
270
276
|
const tupleNode = {
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"JSONSchemaConverter.js","sourceRoot":"","sources":["../../src/ir/JSONSchemaConverter.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export * from "./JSONSchemaConverter.js";
|
package/dist/ir/index.js
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/ir/index.ts"],"names":[],"mappings":"AAAA,cAAc,0BAA0B,CAAC"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import { BaseConverter, GenerateTypeUtils } from "../converter/BaseConverter.js";
|
|
2
|
+
import { IRNode } from "../types.js";
|
|
3
|
+
export declare const KOTLIN_RESERVED: Set<string>;
|
|
4
|
+
/**
|
|
5
|
+
* Converts a JSON property key into a valid Kotlin identifier:
|
|
6
|
+
* - kebab/snake → camelCase
|
|
7
|
+
* - non-identifier chars stripped
|
|
8
|
+
* - leading digit gets `_` prefix
|
|
9
|
+
* - reserved words get `_` suffix
|
|
10
|
+
* - empty result becomes "value"
|
|
11
|
+
*/
|
|
12
|
+
export declare function sanitizeKotlinIdentifier(raw: string): string;
|
|
13
|
+
export declare abstract class KotlinBaseConverter extends BaseConverter {
|
|
14
|
+
/** @internal Mutated by KotlinConverter 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
|
+
}
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
import { BaseConverter } from "../converter/BaseConverter.js";
|
|
2
|
+
export const KOTLIN_RESERVED = new Set([
|
|
3
|
+
"as", "break", "class", "continue", "do", "else", "false", "for", "fun",
|
|
4
|
+
"if", "in", "init", "interface", "is", "null", "object", "package", "return",
|
|
5
|
+
"super", "this", "throw", "true", "try", "typealias", "typeof", "val",
|
|
6
|
+
"var", "when", "while",
|
|
7
|
+
]);
|
|
8
|
+
/**
|
|
9
|
+
* Converts a JSON property key into a valid Kotlin identifier:
|
|
10
|
+
* - kebab/snake → camelCase
|
|
11
|
+
* - non-identifier chars stripped
|
|
12
|
+
* - leading digit gets `_` prefix
|
|
13
|
+
* - reserved words get `_` suffix
|
|
14
|
+
* - empty result becomes "value"
|
|
15
|
+
*/
|
|
16
|
+
export function sanitizeKotlinIdentifier(raw) {
|
|
17
|
+
// kebab/snake → camelCase
|
|
18
|
+
let name = raw.replace(/[-_](.)/g, (_, c) => c.toUpperCase());
|
|
19
|
+
// strip remaining invalid chars
|
|
20
|
+
name = name.replace(/[^a-zA-Z0-9_]/g, "");
|
|
21
|
+
if (!name)
|
|
22
|
+
name = "value";
|
|
23
|
+
if (/^\d/.test(name))
|
|
24
|
+
name = "_" + name;
|
|
25
|
+
if (KOTLIN_RESERVED.has(name))
|
|
26
|
+
name = name + "_";
|
|
27
|
+
return name;
|
|
28
|
+
}
|
|
29
|
+
export class KotlinBaseConverter extends BaseConverter {
|
|
30
|
+
constructor() {
|
|
31
|
+
super(...arguments);
|
|
32
|
+
/** @internal Mutated by KotlinConverter helper modules; not part of the public API. */
|
|
33
|
+
this.importsSet = new Set();
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
//# sourceMappingURL=KotlinBaseConverter.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"KotlinBaseConverter.js","sourceRoot":"","sources":["../../src/kotlin/KotlinBaseConverter.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAqB,MAAM,+BAA+B,CAAC;AAGjF,MAAM,CAAC,MAAM,eAAe,GAAG,IAAI,GAAG,CAAC;IACrC,IAAI,EAAE,OAAO,EAAE,OAAO,EAAE,UAAU,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK;IACvE,IAAI,EAAE,IAAI,EAAE,MAAM,EAAE,WAAW,EAAE,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,SAAS,EAAE,QAAQ;IAC5E,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,WAAW,EAAE,QAAQ,EAAE,KAAK;IACrE,KAAK,EAAE,MAAM,EAAE,OAAO;CACvB,CAAC,CAAC;AAEH;;;;;;;GAOG;AACH,MAAM,UAAU,wBAAwB,CAAC,GAAW;IAClD,0BAA0B;IAC1B,IAAI,IAAI,GAAG,GAAG,CAAC,OAAO,CAAC,UAAU,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAE,CAAY,CAAC,WAAW,EAAE,CAAC,CAAC;IAC1E,gCAAgC;IAChC,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,gBAAgB,EAAE,EAAE,CAAC,CAAC;IAC1C,IAAI,CAAC,IAAI;QAAE,IAAI,GAAG,OAAO,CAAC;IAC1B,IAAI,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC;QAAE,IAAI,GAAG,GAAG,GAAG,IAAI,CAAC;IACxC,IAAI,eAAe,CAAC,GAAG,CAAC,IAAI,CAAC;QAAE,IAAI,GAAG,IAAI,GAAG,GAAG,CAAC;IACjD,OAAO,IAAI,CAAC;AACd,CAAC;AAED,MAAM,OAAgB,mBAAoB,SAAQ,aAAa;IAA/D;;QACE,uFAAuF;QAChF,eAAU,GAAG,IAAI,GAAG,EAAU,CAAC;IAIxC,CAAC;CAAA"}
|
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
import { JSONSchema7Definition } from "json-schema";
|
|
2
|
+
import { ILanguageConverter, IRNode } from "../types.js";
|
|
3
|
+
import { BaseConverterContext, BaseConverterOpts, GenerateTypeUtils, LanguageProfile } from "../converter/BaseConverter.js";
|
|
4
|
+
import { KotlinBaseConverter } from "./KotlinBaseConverter.js";
|
|
5
|
+
export interface KotlinConverterOpts extends BaseConverterOpts {
|
|
6
|
+
serializer?: "kotlinx" | "none";
|
|
7
|
+
packageName?: string;
|
|
8
|
+
}
|
|
9
|
+
/**
|
|
10
|
+
* The state-and-method surface that helper modules in `src/kotlin/` need to
|
|
11
|
+
* operate on a KotlinConverter instance. KotlinConverter implements this;
|
|
12
|
+
* helpers take it as their first argument.
|
|
13
|
+
*
|
|
14
|
+
* @internal
|
|
15
|
+
*/
|
|
16
|
+
export interface KotlinConverterContext extends BaseConverterContext {
|
|
17
|
+
readonly isKotlinx: boolean;
|
|
18
|
+
readonly importsSet: Set<string>;
|
|
19
|
+
readonly contextualNodes: WeakSet<IRNode>;
|
|
20
|
+
readonly docFormatNodes: WeakMap<IRNode, string>;
|
|
21
|
+
readonly propertySerialNames: WeakMap<IRNode, string>;
|
|
22
|
+
readonly enumDecls: Map<string, {
|
|
23
|
+
name: string;
|
|
24
|
+
values: string[];
|
|
25
|
+
}>;
|
|
26
|
+
readonly sealedDecls: string[];
|
|
27
|
+
generateType(ir: IRNode, utils: GenerateTypeUtils): string;
|
|
28
|
+
emitSealedInterface(ir: IRNode, utils: GenerateTypeUtils): string;
|
|
29
|
+
}
|
|
30
|
+
export declare class KotlinConverter extends KotlinBaseConverter implements ILanguageConverter, KotlinConverterContext {
|
|
31
|
+
readonly code: string;
|
|
32
|
+
readonly rootTypeName: string;
|
|
33
|
+
readonly extractedTypeNames: string[];
|
|
34
|
+
readonly imports: string[];
|
|
35
|
+
/** @internal Public for `BaseConverterContext`; treat as protected for subclasses. */
|
|
36
|
+
readonly languageProfile: LanguageProfile;
|
|
37
|
+
/** @internal Mutated by KotlinConverter helper modules; not part of the public API. */
|
|
38
|
+
isKotlinx: boolean;
|
|
39
|
+
/** @internal */
|
|
40
|
+
enumDecls: Map<string, {
|
|
41
|
+
name: string;
|
|
42
|
+
values: string[];
|
|
43
|
+
}>;
|
|
44
|
+
/** @internal */
|
|
45
|
+
propertySerialNames: WeakMap<IRNode, string>;
|
|
46
|
+
/** @internal */
|
|
47
|
+
contextualNodes: WeakSet<IRNode>;
|
|
48
|
+
/** @internal */
|
|
49
|
+
docFormatNodes: WeakMap<IRNode, string>;
|
|
50
|
+
/** @internal */
|
|
51
|
+
sealedDecls: string[];
|
|
52
|
+
constructor(schema: JSONSchema7Definition, opts?: KotlinConverterOpts);
|
|
53
|
+
/** @internal Public for `KotlinConverterContext`; treat as protected for subclasses. */
|
|
54
|
+
generateType(ir: IRNode, utils: GenerateTypeUtils): string;
|
|
55
|
+
/** @internal Public for `BaseConverterContext`; treat as protected for subclasses. */
|
|
56
|
+
generateObjectType(ir: IRNode, utils: GenerateTypeUtils): string;
|
|
57
|
+
/** @internal Public for `KotlinConverterContext`; treat as protected for subclasses. */
|
|
58
|
+
emitSealedInterface(ir: IRNode, utils: GenerateTypeUtils): string;
|
|
59
|
+
/**
|
|
60
|
+
* Assembles the final Kotlin source by joining the (optional) `package` line
|
|
61
|
+
* and a list of top-level declarations with blank-line separators, terminated
|
|
62
|
+
* by a trailing newline. Uses {@link Emitter} for indent/block tracking
|
|
63
|
+
* (Kotlin top-level decls are at indent 0, so this is essentially a join,
|
|
64
|
+
* but keeps assembly consistent with other language emitters).
|
|
65
|
+
*/
|
|
66
|
+
private assembleCode;
|
|
67
|
+
}
|