ajsc 5.1.0 → 5.2.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/TypescriptBaseConverter.d.ts +7 -0
- package/dist/TypescriptBaseConverter.js +18 -1
- package/dist/TypescriptBaseConverter.js.map +1 -1
- package/dist/TypescriptConverter.composites.advanced.test.d.ts +1 -0
- package/dist/TypescriptConverter.composites.advanced.test.js +924 -0
- package/dist/TypescriptConverter.composites.advanced.test.js.map +1 -0
- package/dist/TypescriptConverter.composites.test.js +42 -12
- package/dist/TypescriptConverter.composites.test.js.map +1 -1
- package/dist/TypescriptConverter.d.ts +41 -0
- package/dist/TypescriptConverter.js +239 -110
- package/dist/TypescriptConverter.js.map +1 -1
- package/package.json +1 -1
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"TypescriptConverter.composites.advanced.test.js","sourceRoot":"","sources":["../src/TypescriptConverter.composites.advanced.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,15 +1,5 @@
|
|
|
1
1
|
import { describe, it, expect } from "vitest";
|
|
2
2
|
import { TypescriptConverter } from "./TypescriptConverter.js";
|
|
3
|
-
describe("TypescriptConverter - unions and intersections", () => {
|
|
4
|
-
it("should convert unions", () => {
|
|
5
|
-
expect(new TypescriptConverter({ type: ["string", "number"] }).code).toMatch(`string | number`);
|
|
6
|
-
});
|
|
7
|
-
it("should convert intersections", () => {
|
|
8
|
-
expect(new TypescriptConverter({
|
|
9
|
-
allOf: [{ type: "string" }, { type: "number" }],
|
|
10
|
-
}).code).toMatch(`string & number`);
|
|
11
|
-
});
|
|
12
|
-
});
|
|
13
3
|
describe("TypescriptConverter - unions and intersections with shared ancestor type merging", () => {
|
|
14
4
|
it("should merge enum unions with same name under shared ancestor", () => {
|
|
15
5
|
expect(new TypescriptConverter({
|
|
@@ -207,8 +197,12 @@ describe("TypescriptConverter - unions and intersections with shared ancestor ty
|
|
|
207
197
|
},
|
|
208
198
|
}, { enumStyle: "enum" }).code;
|
|
209
199
|
// Discriminated union: "kind" has distinct const per option with
|
|
210
|
-
// option-specific properties — should NOT be merged
|
|
211
|
-
|
|
200
|
+
// option-specific properties — should NOT be merged, but enhanced with
|
|
201
|
+
// discriminator-derived names and consolidated enum
|
|
202
|
+
expect(code).toContain('export enum Kind { Circle = "circle", Square = "square" }');
|
|
203
|
+
expect(code).toMatch(/CircleShape \| SquareShape/);
|
|
204
|
+
expect(code).toContain('kind?: Kind.Circle');
|
|
205
|
+
expect(code).toContain('kind?: Kind.Square');
|
|
212
206
|
});
|
|
213
207
|
it("should merge with union-style enums (default enumStyle)", () => {
|
|
214
208
|
const code = new TypescriptConverter({
|
|
@@ -243,6 +237,42 @@ describe("TypescriptConverter - unions and intersections with shared ancestor ty
|
|
|
243
237
|
// With default enumStyle ("union"), merged enums appear as string literal unions
|
|
244
238
|
expect(code).toMatch(`"click" | "hover" | "scroll" | "resize"`);
|
|
245
239
|
});
|
|
240
|
+
it("should not suffix enum name when identical enum appears in tuple and array-of-tuples anyOf branches", () => {
|
|
241
|
+
const code = new TypescriptConverter({
|
|
242
|
+
type: "object",
|
|
243
|
+
properties: {
|
|
244
|
+
sort: {
|
|
245
|
+
description: '[\"key\", \"asc|desc\"] or [[\"key1\", \"asc\"], [\"key2\", \"desc\"]]',
|
|
246
|
+
anyOf: [
|
|
247
|
+
{
|
|
248
|
+
type: "array",
|
|
249
|
+
items: [
|
|
250
|
+
{ type: "string" },
|
|
251
|
+
{ type: "string", enum: ["asc", "desc"] },
|
|
252
|
+
],
|
|
253
|
+
additionalItems: false,
|
|
254
|
+
minItems: 2,
|
|
255
|
+
},
|
|
256
|
+
{
|
|
257
|
+
type: "array",
|
|
258
|
+
items: {
|
|
259
|
+
type: "array",
|
|
260
|
+
items: [
|
|
261
|
+
{ type: "string" },
|
|
262
|
+
{ type: "string", enum: ["asc", "desc"] },
|
|
263
|
+
],
|
|
264
|
+
additionalItems: false,
|
|
265
|
+
minItems: 2,
|
|
266
|
+
},
|
|
267
|
+
},
|
|
268
|
+
],
|
|
269
|
+
},
|
|
270
|
+
},
|
|
271
|
+
}, { enumStyle: "enum" }).code;
|
|
272
|
+
// The enum is identical in both branches — should be "Sort", not "Sort1"
|
|
273
|
+
expect(code).toContain('export enum Sort { Asc = "asc", Desc = "desc" }');
|
|
274
|
+
expect(code).not.toContain("Sort1");
|
|
275
|
+
});
|
|
246
276
|
it("should handle nested anyOf merging (bottom-up)", () => {
|
|
247
277
|
const code = new TypescriptConverter({
|
|
248
278
|
type: "object",
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"TypescriptConverter.composites.test.js","sourceRoot":"","sources":["../src/TypescriptConverter.composites.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,EAAE,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAC9C,OAAO,EAAE,mBAAmB,EAAE,MAAM,0BAA0B,CAAC;AAE/D,QAAQ,CAAC,
|
|
1
|
+
{"version":3,"file":"TypescriptConverter.composites.test.js","sourceRoot":"","sources":["../src/TypescriptConverter.composites.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -53,6 +53,16 @@ export declare class TypescriptConverter extends TypescriptBaseConverter impleme
|
|
|
53
53
|
private enumDeclarations;
|
|
54
54
|
readonly code: string;
|
|
55
55
|
private mergeCounter;
|
|
56
|
+
/**
|
|
57
|
+
* Maps discriminator literal IR nodes to their consolidated enum info.
|
|
58
|
+
* Used by generateLiteralType and preRegisterEnumNames to emit a single
|
|
59
|
+
* consolidated enum and member references instead of single-value enums.
|
|
60
|
+
*/
|
|
61
|
+
private discriminatorInfo;
|
|
62
|
+
/** Maps variant IR nodes to their enhancement-assigned names. */
|
|
63
|
+
private variantNames;
|
|
64
|
+
/** Signatures eligible for cross-variant deduplication. */
|
|
65
|
+
private dedupSignatures;
|
|
56
66
|
constructor(schema: JSONSchema7Definition, opts?: TypescriptConverterOpts);
|
|
57
67
|
protected getRefTypeNamingConfig(): RefTypeNamingConfig;
|
|
58
68
|
/**
|
|
@@ -119,4 +129,35 @@ export declare class TypescriptConverter extends TypescriptBaseConverter impleme
|
|
|
119
129
|
* the same field that should be merged (past/current/future → Timeframe).
|
|
120
130
|
*/
|
|
121
131
|
private isDiscriminatedUnion;
|
|
132
|
+
/**
|
|
133
|
+
* Walks the IR tree and applies discriminated union enhancements
|
|
134
|
+
* to anyOf unions that survived merging.
|
|
135
|
+
*/
|
|
136
|
+
private enhanceDiscriminatedUnions;
|
|
137
|
+
/**
|
|
138
|
+
* Enhances an unmerged anyOf union that has a discriminator property.
|
|
139
|
+
* Sets `ir.name` on each variant to a discriminator-derived name and
|
|
140
|
+
* populates `discriminatorInfo` for consolidated enum emission.
|
|
141
|
+
*/
|
|
142
|
+
private applyDiscriminatedUnionEnhancements;
|
|
143
|
+
/**
|
|
144
|
+
* Collects all property names (in first-seen order) and shared property names
|
|
145
|
+
* across union options.
|
|
146
|
+
*/
|
|
147
|
+
private collectUnionPropertyNames;
|
|
148
|
+
/**
|
|
149
|
+
* Finds the discriminator property among shared properties: a property where
|
|
150
|
+
* each option has a distinct const or single-value-enum string value.
|
|
151
|
+
*/
|
|
152
|
+
private findDiscriminatorProperty;
|
|
153
|
+
/**
|
|
154
|
+
* Extracts a single const string value from an IR node (literal with string
|
|
155
|
+
* value or single-value string enum).
|
|
156
|
+
*/
|
|
157
|
+
private getConstStringValue;
|
|
158
|
+
protected shouldReuseExistingSignature(signature: string): boolean;
|
|
159
|
+
/**
|
|
160
|
+
* Override to use `ir.name` for discriminator-derived variant naming.
|
|
161
|
+
*/
|
|
162
|
+
protected resolveRefTypeName(ir: IRNode, signature: string): string;
|
|
122
163
|
}
|
|
@@ -2,6 +2,45 @@ import { TypescriptBaseConverter, } from "./TypescriptBaseConverter.js";
|
|
|
2
2
|
import { JSONSchemaConverter } from "./JSONSchemaConverter.js";
|
|
3
3
|
import { toPascalCase } from "./utils/to-pascal-case.js";
|
|
4
4
|
import { PathUtils } from "./utils/path-utils.js";
|
|
5
|
+
/**
|
|
6
|
+
* Recursively walks an IR tree, visiting each node and optionally replacing it.
|
|
7
|
+
* Returns the (potentially replaced) root node.
|
|
8
|
+
*
|
|
9
|
+
* @param visitor Return an IRNode to replace the current node, or void/null to keep it.
|
|
10
|
+
* @param order 'pre' visits before children; 'post' (default) visits after children.
|
|
11
|
+
*/
|
|
12
|
+
function walkIR(ir, visitor, order = "post") {
|
|
13
|
+
let node = ir;
|
|
14
|
+
if (order === "pre") {
|
|
15
|
+
const result = visitor(node);
|
|
16
|
+
if (result != null)
|
|
17
|
+
node = result;
|
|
18
|
+
}
|
|
19
|
+
if (node.properties) {
|
|
20
|
+
for (const key of Object.keys(node.properties)) {
|
|
21
|
+
node.properties[key] = walkIR(node.properties[key], visitor, order);
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
if (node.items) {
|
|
25
|
+
node.items = walkIR(node.items, visitor, order);
|
|
26
|
+
}
|
|
27
|
+
if (node.tupleItems) {
|
|
28
|
+
node.tupleItems = node.tupleItems.map((t) => walkIR(t, visitor, order));
|
|
29
|
+
}
|
|
30
|
+
if (node.options) {
|
|
31
|
+
node.options = node.options.map((o) => walkIR(o, visitor, order));
|
|
32
|
+
}
|
|
33
|
+
if (node.additionalProperties &&
|
|
34
|
+
typeof node.additionalProperties !== "boolean") {
|
|
35
|
+
node.additionalProperties = walkIR(node.additionalProperties, visitor, order);
|
|
36
|
+
}
|
|
37
|
+
if (order === "post") {
|
|
38
|
+
const result = visitor(node);
|
|
39
|
+
if (result != null)
|
|
40
|
+
return result;
|
|
41
|
+
}
|
|
42
|
+
return node;
|
|
43
|
+
}
|
|
5
44
|
/**
|
|
6
45
|
* A TypeScript language converter plugin.
|
|
7
46
|
*/
|
|
@@ -15,6 +54,16 @@ export class TypescriptConverter extends TypescriptBaseConverter {
|
|
|
15
54
|
*/
|
|
16
55
|
this.enumDeclarations = new Map();
|
|
17
56
|
this.mergeCounter = 0;
|
|
57
|
+
/**
|
|
58
|
+
* Maps discriminator literal IR nodes to their consolidated enum info.
|
|
59
|
+
* Used by generateLiteralType and preRegisterEnumNames to emit a single
|
|
60
|
+
* consolidated enum and member references instead of single-value enums.
|
|
61
|
+
*/
|
|
62
|
+
this.discriminatorInfo = new Map();
|
|
63
|
+
/** Maps variant IR nodes to their enhancement-assigned names. */
|
|
64
|
+
this.variantNames = new Map();
|
|
65
|
+
/** Signatures eligible for cross-variant deduplication. */
|
|
66
|
+
this.dedupSignatures = new Set();
|
|
18
67
|
this.opts = opts;
|
|
19
68
|
this.inlineTypes = opts?.inlineTypes ?? false;
|
|
20
69
|
this.enumStyle = opts?.enumStyle ?? "union";
|
|
@@ -24,6 +73,7 @@ export class TypescriptConverter extends TypescriptBaseConverter {
|
|
|
24
73
|
// enum pre-registration and type generation, so the downstream
|
|
25
74
|
// pipeline sees merged enums and objects rather than separate variants.
|
|
26
75
|
const irNode = this.mergeCompatibleUnions(this.schemaConverter.irNode);
|
|
76
|
+
this.enhanceDiscriminatedUnions(irNode);
|
|
27
77
|
if (!irNode.name) {
|
|
28
78
|
irNode.name = "Root";
|
|
29
79
|
}
|
|
@@ -45,7 +95,9 @@ export class TypescriptConverter extends TypescriptBaseConverter {
|
|
|
45
95
|
if (!this.inlineTypes) {
|
|
46
96
|
const enumCode = [...this.enumDeclarations.values()]
|
|
47
97
|
.map(({ name, members, description }) => {
|
|
48
|
-
const jsdoc = this.emitJSDoc && description
|
|
98
|
+
const jsdoc = this.emitJSDoc && description
|
|
99
|
+
? `${this.formatJSDoc(description)}\n`
|
|
100
|
+
: "";
|
|
49
101
|
const body = members
|
|
50
102
|
.map(({ key, value }) => `${key} = ${JSON.stringify(value)}`)
|
|
51
103
|
.join(", ");
|
|
@@ -54,12 +106,16 @@ export class TypescriptConverter extends TypescriptBaseConverter {
|
|
|
54
106
|
.join("\n");
|
|
55
107
|
const typeCode = this.refTypes
|
|
56
108
|
.map(([_sig, name, { code, description }]) => {
|
|
57
|
-
const jsdoc = this.emitJSDoc && description
|
|
109
|
+
const jsdoc = this.emitJSDoc && description
|
|
110
|
+
? `${this.formatJSDoc(description)}\n`
|
|
111
|
+
: "";
|
|
58
112
|
return `${jsdoc}export type ${name} = ${code};`;
|
|
59
113
|
})
|
|
60
114
|
.join("\n");
|
|
61
115
|
const allDecls = [enumCode, typeCode].filter(Boolean).join("\n");
|
|
62
|
-
const rootJsdoc = this.emitJSDoc && irNode.description
|
|
116
|
+
const rootJsdoc = this.emitJSDoc && irNode.description
|
|
117
|
+
? `${this.formatJSDoc(irNode.description)}\n`
|
|
118
|
+
: "";
|
|
63
119
|
this.code = `${allDecls}\n\n${rootJsdoc}export type ${rootName} = ${code};\n`;
|
|
64
120
|
}
|
|
65
121
|
else {
|
|
@@ -88,34 +144,22 @@ export class TypescriptConverter extends TypescriptBaseConverter {
|
|
|
88
144
|
* path that runtime generation would encounter.
|
|
89
145
|
*/
|
|
90
146
|
preRegisterEnumNames(ir) {
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
else if (ir.type === "literal" &&
|
|
96
|
-
typeof ir.constraints?.value === "string") {
|
|
97
|
-
this.getOrCreateEnumDeclaration([ir.constraints.value], ir.path, ir.description, ir.title);
|
|
98
|
-
}
|
|
99
|
-
// Recurse in the same order as generateType
|
|
100
|
-
if (ir.properties) {
|
|
101
|
-
for (const prop of Object.values(ir.properties)) {
|
|
102
|
-
this.preRegisterEnumNames(prop);
|
|
147
|
+
walkIR(ir, (node) => {
|
|
148
|
+
if (node.type === "enum" &&
|
|
149
|
+
node.values?.every((v) => typeof v === "string")) {
|
|
150
|
+
this.getOrCreateEnumDeclaration(node.values, node.path, node.description, node.title);
|
|
103
151
|
}
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
}
|
|
115
|
-
if (ir.additionalProperties &&
|
|
116
|
-
typeof ir.additionalProperties !== "boolean") {
|
|
117
|
-
this.preRegisterEnumNames(ir.additionalProperties);
|
|
118
|
-
}
|
|
152
|
+
else if (node.type === "literal" &&
|
|
153
|
+
typeof node.constraints?.value === "string") {
|
|
154
|
+
const discInfo = this.discriminatorInfo.get(node);
|
|
155
|
+
if (discInfo) {
|
|
156
|
+
this.getOrCreateEnumDeclaration(discInfo.allValues, node.path, node.description, node.title);
|
|
157
|
+
}
|
|
158
|
+
else {
|
|
159
|
+
this.getOrCreateEnumDeclaration([node.constraints.value], node.path, node.description, node.title);
|
|
160
|
+
}
|
|
161
|
+
}
|
|
162
|
+
}, "pre");
|
|
119
163
|
}
|
|
120
164
|
generateEnumType(ir) {
|
|
121
165
|
if (this.enumStyle === "enum" &&
|
|
@@ -129,6 +173,11 @@ export class TypescriptConverter extends TypescriptBaseConverter {
|
|
|
129
173
|
if (this.enumStyle === "enum" &&
|
|
130
174
|
!this.inlineTypes &&
|
|
131
175
|
typeof ir.constraints?.value === "string") {
|
|
176
|
+
const discInfo = this.discriminatorInfo.get(ir);
|
|
177
|
+
if (discInfo) {
|
|
178
|
+
const enumName = this.getOrCreateEnumDeclaration(discInfo.allValues, ir.path, ir.description, ir.title);
|
|
179
|
+
return `${enumName}.${this.toEnumMemberName(discInfo.thisValue)}`;
|
|
180
|
+
}
|
|
132
181
|
return this.getOrCreateEnumDeclaration([ir.constraints.value], ir.path, ir.description, ir.title);
|
|
133
182
|
}
|
|
134
183
|
return super.generateLiteralType(ir);
|
|
@@ -168,7 +217,12 @@ export class TypescriptConverter extends TypescriptBaseConverter {
|
|
|
168
217
|
usedMemberNames.add(memberName);
|
|
169
218
|
return { key: memberName, value };
|
|
170
219
|
});
|
|
171
|
-
this.enumDeclarations.set(canonicalKey, {
|
|
220
|
+
this.enumDeclarations.set(canonicalKey, {
|
|
221
|
+
name: enumName,
|
|
222
|
+
members,
|
|
223
|
+
title,
|
|
224
|
+
description,
|
|
225
|
+
});
|
|
172
226
|
return enumName;
|
|
173
227
|
}
|
|
174
228
|
/**
|
|
@@ -178,16 +232,13 @@ export class TypescriptConverter extends TypescriptBaseConverter {
|
|
|
178
232
|
* and falls back to a numeric suffix as a last resort.
|
|
179
233
|
*/
|
|
180
234
|
deriveEnumName(path) {
|
|
181
|
-
const segments = PathUtils.parsePath(path);
|
|
235
|
+
const segments = PathUtils.parsePath(path).filter((x) => !/^\d+$/.test(x));
|
|
182
236
|
if (segments.length === 0) {
|
|
183
237
|
return this.findAvailableName("Value");
|
|
184
238
|
}
|
|
185
239
|
// Try progressively more parent path segments
|
|
186
240
|
for (let count = 1; count <= segments.length; count++) {
|
|
187
|
-
const proposed = segments
|
|
188
|
-
.slice(-count)
|
|
189
|
-
.map(toPascalCase)
|
|
190
|
-
.join("");
|
|
241
|
+
const proposed = segments.slice(-count).map(toPascalCase).join("");
|
|
191
242
|
if (proposed &&
|
|
192
243
|
this.isValidIdentifier(proposed) &&
|
|
193
244
|
!this.usedDeclarationNames.has(proposed)) {
|
|
@@ -230,35 +281,15 @@ export class TypescriptConverter extends TypescriptBaseConverter {
|
|
|
230
281
|
* from some options become optional in the merged type.
|
|
231
282
|
*/
|
|
232
283
|
mergeCompatibleUnions(ir) {
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
|
|
284
|
+
return walkIR(ir, (node) => {
|
|
285
|
+
if (node.type === "union" &&
|
|
286
|
+
node.constraints?.combinator === "anyOf" &&
|
|
287
|
+
node.options &&
|
|
288
|
+
node.options.length > 1) {
|
|
289
|
+
return this.tryMergeObjectUnion(node);
|
|
237
290
|
}
|
|
238
|
-
|
|
239
|
-
|
|
240
|
-
ir.items = this.mergeCompatibleUnions(ir.items);
|
|
241
|
-
}
|
|
242
|
-
if (ir.tupleItems) {
|
|
243
|
-
ir.tupleItems = ir.tupleItems.map((t) => this.mergeCompatibleUnions(t));
|
|
244
|
-
}
|
|
245
|
-
if (ir.options) {
|
|
246
|
-
ir.options = ir.options.map((o) => this.mergeCompatibleUnions(o));
|
|
247
|
-
}
|
|
248
|
-
if (ir.additionalProperties &&
|
|
249
|
-
typeof ir.additionalProperties !== "boolean") {
|
|
250
|
-
ir.additionalProperties = this.mergeCompatibleUnions(ir.additionalProperties);
|
|
251
|
-
}
|
|
252
|
-
// Check if this node is a mergeable anyOf union
|
|
253
|
-
if (ir.type === "union" &&
|
|
254
|
-
ir.constraints?.combinator === "anyOf" &&
|
|
255
|
-
ir.options &&
|
|
256
|
-
ir.options.length > 1) {
|
|
257
|
-
const merged = this.tryMergeObjectUnion(ir);
|
|
258
|
-
if (merged)
|
|
259
|
-
return merged;
|
|
260
|
-
}
|
|
261
|
-
return ir;
|
|
291
|
+
return undefined;
|
|
292
|
+
});
|
|
262
293
|
}
|
|
263
294
|
/**
|
|
264
295
|
* Attempts to merge all options of an anyOf union into a single object type.
|
|
@@ -285,24 +316,12 @@ export class TypescriptConverter extends TypescriptBaseConverter {
|
|
|
285
316
|
}
|
|
286
317
|
}
|
|
287
318
|
// Collect all property names in first-seen order across options
|
|
288
|
-
const allPropNames =
|
|
289
|
-
const seenProps = new Set();
|
|
290
|
-
for (const opt of options) {
|
|
291
|
-
if (opt.properties) {
|
|
292
|
-
for (const key of Object.keys(opt.properties)) {
|
|
293
|
-
if (!seenProps.has(key)) {
|
|
294
|
-
seenProps.add(key);
|
|
295
|
-
allPropNames.push(key);
|
|
296
|
-
}
|
|
297
|
-
}
|
|
298
|
-
}
|
|
299
|
-
}
|
|
319
|
+
const { allPropNames, sharedPropNames } = this.collectUnionPropertyNames(options);
|
|
300
320
|
if (allPropNames.length === 0) {
|
|
301
321
|
return null;
|
|
302
322
|
}
|
|
303
323
|
// Only merge when options share at least one property name —
|
|
304
324
|
// disjoint objects should remain as a union to preserve semantics.
|
|
305
|
-
const sharedPropNames = allPropNames.filter((propName) => options.every((opt) => opt.properties?.[propName] !== undefined));
|
|
306
325
|
if (sharedPropNames.length === 0) {
|
|
307
326
|
return null;
|
|
308
327
|
}
|
|
@@ -334,9 +353,7 @@ export class TypescriptConverter extends TypescriptBaseConverter {
|
|
|
334
353
|
mergedProperties[propName] = merged;
|
|
335
354
|
}
|
|
336
355
|
// Derive a name from the union's path
|
|
337
|
-
const pathSegments = ir.path
|
|
338
|
-
.split(".")
|
|
339
|
-
.filter((x) => !/^\d+$/.test(x));
|
|
356
|
+
const pathSegments = ir.path.split(".").filter((x) => !/^\d+$/.test(x));
|
|
340
357
|
const name = pathSegments[pathSegments.length - 1] || "Merged";
|
|
341
358
|
const merged = {
|
|
342
359
|
type: "object",
|
|
@@ -416,34 +433,9 @@ export class TypescriptConverter extends TypescriptBaseConverter {
|
|
|
416
433
|
if (!hasOptionSpecificProps) {
|
|
417
434
|
return false;
|
|
418
435
|
}
|
|
419
|
-
//
|
|
420
|
-
|
|
421
|
-
|
|
422
|
-
for (const propName of sharedPropNames) {
|
|
423
|
-
const perOptionValues = options.map((opt) => {
|
|
424
|
-
const prop = opt.properties?.[propName];
|
|
425
|
-
if (!prop)
|
|
426
|
-
return undefined;
|
|
427
|
-
if (prop.type === "literal" &&
|
|
428
|
-
typeof prop.constraints?.value === "string") {
|
|
429
|
-
return prop.constraints.value;
|
|
430
|
-
}
|
|
431
|
-
if (prop.type === "enum" &&
|
|
432
|
-
prop.values?.length === 1 &&
|
|
433
|
-
typeof prop.values[0] === "string") {
|
|
434
|
-
return prop.values[0];
|
|
435
|
-
}
|
|
436
|
-
return undefined;
|
|
437
|
-
});
|
|
438
|
-
if (perOptionValues.every((v) => v !== undefined)) {
|
|
439
|
-
const uniqueValues = new Set(perOptionValues);
|
|
440
|
-
if (uniqueValues.size === options.length) {
|
|
441
|
-
hasDiscriminator = true;
|
|
442
|
-
break;
|
|
443
|
-
}
|
|
444
|
-
}
|
|
445
|
-
}
|
|
446
|
-
if (!hasDiscriminator) {
|
|
436
|
+
// Reuse findDiscriminatorProperty instead of inline loop
|
|
437
|
+
const discriminator = this.findDiscriminatorProperty(options, sharedPropNames);
|
|
438
|
+
if (!discriminator) {
|
|
447
439
|
return false;
|
|
448
440
|
}
|
|
449
441
|
// For a true discriminated union, every option must have at least one
|
|
@@ -457,10 +449,147 @@ export class TypescriptConverter extends TypescriptBaseConverter {
|
|
|
457
449
|
if (sharedSet.has(propName))
|
|
458
450
|
return false;
|
|
459
451
|
// Check if this prop appears in any other option
|
|
460
|
-
return !options.some((other) => other !== opt &&
|
|
461
|
-
other.properties?.[propName] !== undefined);
|
|
452
|
+
return !options.some((other) => other !== opt && other.properties?.[propName] !== undefined);
|
|
462
453
|
});
|
|
463
454
|
});
|
|
464
455
|
}
|
|
456
|
+
/**
|
|
457
|
+
* Walks the IR tree and applies discriminated union enhancements
|
|
458
|
+
* to anyOf unions that survived merging.
|
|
459
|
+
*/
|
|
460
|
+
enhanceDiscriminatedUnions(ir) {
|
|
461
|
+
walkIR(ir, (node) => {
|
|
462
|
+
if (node.type === "union" &&
|
|
463
|
+
node.constraints?.combinator === "anyOf" &&
|
|
464
|
+
node.options &&
|
|
465
|
+
node.options.length > 1) {
|
|
466
|
+
this.applyDiscriminatedUnionEnhancements(node);
|
|
467
|
+
}
|
|
468
|
+
});
|
|
469
|
+
}
|
|
470
|
+
/**
|
|
471
|
+
* Enhances an unmerged anyOf union that has a discriminator property.
|
|
472
|
+
* Sets `ir.name` on each variant to a discriminator-derived name and
|
|
473
|
+
* populates `discriminatorInfo` for consolidated enum emission.
|
|
474
|
+
*/
|
|
475
|
+
applyDiscriminatedUnionEnhancements(ir) {
|
|
476
|
+
const options = ir.options;
|
|
477
|
+
if (!options || !options.every((opt) => opt.type === "object"))
|
|
478
|
+
return;
|
|
479
|
+
// Compute shared property names
|
|
480
|
+
const { sharedPropNames } = this.collectUnionPropertyNames(options);
|
|
481
|
+
const discriminator = this.findDiscriminatorProperty(options, sharedPropNames);
|
|
482
|
+
if (!discriminator)
|
|
483
|
+
return;
|
|
484
|
+
// Derive parent context name from the union's path
|
|
485
|
+
const pathSegments = ir.path.split(".").filter((x) => !/^\d+$/.test(x));
|
|
486
|
+
const parentName = pathSegments[pathSegments.length - 1] || "";
|
|
487
|
+
// Collect all discriminator values in order
|
|
488
|
+
const allValues = [];
|
|
489
|
+
for (const opt of options) {
|
|
490
|
+
const val = this.getConstStringValue(opt.properties[discriminator]);
|
|
491
|
+
if (val)
|
|
492
|
+
allValues.push(val);
|
|
493
|
+
}
|
|
494
|
+
// Collect signatures of object/array properties across all variants
|
|
495
|
+
// for cross-variant deduplication. If the same signature appears at
|
|
496
|
+
// different property names across variants, it should be deduplicated.
|
|
497
|
+
const signatureCounts = new Map();
|
|
498
|
+
for (const opt of options) {
|
|
499
|
+
if (!opt.properties)
|
|
500
|
+
continue;
|
|
501
|
+
for (const prop of Object.values(opt.properties)) {
|
|
502
|
+
if (prop.signature) {
|
|
503
|
+
signatureCounts.set(prop.signature, (signatureCounts.get(prop.signature) ?? 0) + 1);
|
|
504
|
+
}
|
|
505
|
+
}
|
|
506
|
+
}
|
|
507
|
+
for (const [sig, count] of signatureCounts) {
|
|
508
|
+
if (count > 1)
|
|
509
|
+
this.dedupSignatures.add(sig);
|
|
510
|
+
}
|
|
511
|
+
for (const opt of options) {
|
|
512
|
+
const val = this.getConstStringValue(opt.properties[discriminator]);
|
|
513
|
+
if (!val)
|
|
514
|
+
continue;
|
|
515
|
+
// Set discriminator-derived variant name
|
|
516
|
+
const variantName = toPascalCase(val) + toPascalCase(parentName);
|
|
517
|
+
opt.name = variantName;
|
|
518
|
+
this.variantNames.set(opt, variantName);
|
|
519
|
+
// Populate discriminator info for consolidated enum emission
|
|
520
|
+
if (this.enumStyle === "enum" && !this.inlineTypes) {
|
|
521
|
+
const discProp = opt.properties[discriminator];
|
|
522
|
+
this.discriminatorInfo.set(discProp, { allValues, thisValue: val });
|
|
523
|
+
}
|
|
524
|
+
}
|
|
525
|
+
}
|
|
526
|
+
/**
|
|
527
|
+
* Collects all property names (in first-seen order) and shared property names
|
|
528
|
+
* across union options.
|
|
529
|
+
*/
|
|
530
|
+
collectUnionPropertyNames(options) {
|
|
531
|
+
const allPropNames = [];
|
|
532
|
+
const seenProps = new Set();
|
|
533
|
+
for (const opt of options) {
|
|
534
|
+
if (opt.properties) {
|
|
535
|
+
for (const key of Object.keys(opt.properties)) {
|
|
536
|
+
if (!seenProps.has(key)) {
|
|
537
|
+
seenProps.add(key);
|
|
538
|
+
allPropNames.push(key);
|
|
539
|
+
}
|
|
540
|
+
}
|
|
541
|
+
}
|
|
542
|
+
}
|
|
543
|
+
const sharedPropNames = allPropNames.filter((propName) => options.every((opt) => opt.properties?.[propName] !== undefined));
|
|
544
|
+
return { allPropNames, sharedPropNames };
|
|
545
|
+
}
|
|
546
|
+
/**
|
|
547
|
+
* Finds the discriminator property among shared properties: a property where
|
|
548
|
+
* each option has a distinct const or single-value-enum string value.
|
|
549
|
+
*/
|
|
550
|
+
findDiscriminatorProperty(options, sharedPropNames) {
|
|
551
|
+
for (const propName of sharedPropNames) {
|
|
552
|
+
const values = options.map((opt) => this.getConstStringValue(opt.properties?.[propName]));
|
|
553
|
+
if (values.every((v) => v !== undefined)) {
|
|
554
|
+
const uniqueValues = new Set(values);
|
|
555
|
+
if (uniqueValues.size === options.length) {
|
|
556
|
+
return propName;
|
|
557
|
+
}
|
|
558
|
+
}
|
|
559
|
+
}
|
|
560
|
+
return null;
|
|
561
|
+
}
|
|
562
|
+
/**
|
|
563
|
+
* Extracts a single const string value from an IR node (literal with string
|
|
564
|
+
* value or single-value string enum).
|
|
565
|
+
*/
|
|
566
|
+
getConstStringValue(ir) {
|
|
567
|
+
if (!ir)
|
|
568
|
+
return undefined;
|
|
569
|
+
if (ir.type === "literal" && typeof ir.constraints?.value === "string") {
|
|
570
|
+
return ir.constraints.value;
|
|
571
|
+
}
|
|
572
|
+
if (ir.type === "enum" &&
|
|
573
|
+
ir.values?.length === 1 &&
|
|
574
|
+
typeof ir.values[0] === "string") {
|
|
575
|
+
return ir.values[0];
|
|
576
|
+
}
|
|
577
|
+
return undefined;
|
|
578
|
+
}
|
|
579
|
+
shouldReuseExistingSignature(signature) {
|
|
580
|
+
return this.dedupSignatures.has(signature);
|
|
581
|
+
}
|
|
582
|
+
/**
|
|
583
|
+
* Override to use `ir.name` for discriminator-derived variant naming.
|
|
584
|
+
*/
|
|
585
|
+
resolveRefTypeName(ir, signature) {
|
|
586
|
+
const variantName = this.variantNames.get(ir);
|
|
587
|
+
if (variantName) {
|
|
588
|
+
const name = this.findAvailableName(variantName);
|
|
589
|
+
this.usedDeclarationNames.add(name);
|
|
590
|
+
return name;
|
|
591
|
+
}
|
|
592
|
+
return super.resolveRefTypeName(ir, signature);
|
|
593
|
+
}
|
|
465
594
|
}
|
|
466
595
|
//# sourceMappingURL=TypescriptConverter.js.map
|