@tsonic/frontend 0.0.4 → 0.0.5
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/.tsbuildinfo +1 -1
- package/dist/ir/builder/exports.d.ts.map +1 -1
- package/dist/ir/builder/exports.js +8 -6
- package/dist/ir/builder/exports.js.map +1 -1
- package/dist/ir/builder/imports.d.ts.map +1 -1
- package/dist/ir/builder/imports.js +6 -1
- package/dist/ir/builder/imports.js.map +1 -1
- package/dist/ir/builder/statements.d.ts +7 -1
- package/dist/ir/builder/statements.d.ts.map +1 -1
- package/dist/ir/builder/statements.js +18 -5
- package/dist/ir/builder/statements.js.map +1 -1
- package/dist/ir/builder.test.js +10 -5
- package/dist/ir/builder.test.js.map +1 -1
- package/dist/ir/converters/anonymous-synthesis.d.ts +76 -0
- package/dist/ir/converters/anonymous-synthesis.d.ts.map +1 -0
- package/dist/ir/converters/anonymous-synthesis.js +307 -0
- package/dist/ir/converters/anonymous-synthesis.js.map +1 -0
- package/dist/ir/converters/expressions/calls.d.ts.map +1 -1
- package/dist/ir/converters/expressions/calls.js +47 -0
- package/dist/ir/converters/expressions/calls.js.map +1 -1
- package/dist/ir/converters/expressions/collections.d.ts +3 -0
- package/dist/ir/converters/expressions/collections.d.ts.map +1 -1
- package/dist/ir/converters/expressions/collections.js +39 -1
- package/dist/ir/converters/expressions/collections.js.map +1 -1
- package/dist/ir/converters/expressions/functions.d.ts.map +1 -1
- package/dist/ir/converters/expressions/functions.js +49 -4
- package/dist/ir/converters/expressions/functions.js.map +1 -1
- package/dist/ir/converters/statements/control/conditionals.d.ts.map +1 -1
- package/dist/ir/converters/statements/control/conditionals.js +4 -6
- package/dist/ir/converters/statements/control/conditionals.js.map +1 -1
- package/dist/ir/converters/statements/control/loops.js +5 -5
- package/dist/ir/converters/statements/control/loops.js.map +1 -1
- package/dist/ir/converters/statements/declarations/interfaces.d.ts +4 -3
- package/dist/ir/converters/statements/declarations/interfaces.d.ts.map +1 -1
- package/dist/ir/converters/statements/declarations/interfaces.js +55 -1
- package/dist/ir/converters/statements/declarations/interfaces.js.map +1 -1
- package/dist/ir/converters/statements/declarations/type-aliases.d.ts +8 -3
- package/dist/ir/converters/statements/declarations/type-aliases.d.ts.map +1 -1
- package/dist/ir/converters/statements/declarations/type-aliases.js +12 -2
- package/dist/ir/converters/statements/declarations/type-aliases.js.map +1 -1
- package/dist/ir/converters/synthetic-types.d.ts +38 -0
- package/dist/ir/converters/synthetic-types.d.ts.map +1 -0
- package/dist/ir/converters/synthetic-types.js +123 -0
- package/dist/ir/converters/synthetic-types.js.map +1 -0
- package/dist/ir/statement-converter.d.ts +16 -1
- package/dist/ir/statement-converter.d.ts.map +1 -1
- package/dist/ir/statement-converter.js +32 -0
- package/dist/ir/statement-converter.js.map +1 -1
- package/dist/ir/type-converter/index.d.ts +1 -1
- package/dist/ir/type-converter/index.d.ts.map +1 -1
- package/dist/ir/type-converter/index.js +1 -1
- package/dist/ir/type-converter/index.js.map +1 -1
- package/dist/ir/type-converter/inference.d.ts +12 -0
- package/dist/ir/type-converter/inference.d.ts.map +1 -1
- package/dist/ir/type-converter/inference.js +141 -3
- package/dist/ir/type-converter/inference.js.map +1 -1
- package/dist/ir/type-converter/orchestrator.d.ts +2 -2
- package/dist/ir/type-converter/orchestrator.d.ts.map +1 -1
- package/dist/ir/type-converter/orchestrator.js +37 -0
- package/dist/ir/type-converter/orchestrator.js.map +1 -1
- package/dist/ir/type-converter.d.ts +1 -1
- package/dist/ir/type-converter.d.ts.map +1 -1
- package/dist/ir/type-converter.js +1 -1
- package/dist/ir/type-converter.js.map +1 -1
- package/dist/ir/types/expressions.d.ts +8 -0
- package/dist/ir/types/expressions.d.ts.map +1 -1
- package/dist/ir/types/index.d.ts +1 -1
- package/dist/ir/types/index.d.ts.map +1 -1
- package/dist/ir/types/index.js.map +1 -1
- package/dist/ir/types/ir-types.d.ts +14 -1
- package/dist/ir/types/ir-types.d.ts.map +1 -1
- package/dist/ir/types.d.ts +1 -1
- package/dist/ir/types.d.ts.map +1 -1
- package/dist/ir/types.js.map +1 -1
- package/dist/resolver/clr-bindings-resolver.d.ts +9 -0
- package/dist/resolver/clr-bindings-resolver.d.ts.map +1 -1
- package/dist/resolver/clr-bindings-resolver.js +52 -3
- package/dist/resolver/clr-bindings-resolver.js.map +1 -1
- package/dist/types/diagnostic.d.ts +1 -1
- package/dist/types/diagnostic.d.ts.map +1 -1
- package/dist/types/diagnostic.js.map +1 -1
- package/dist/validation/static-safety.d.ts +6 -1
- package/dist/validation/static-safety.d.ts.map +1 -1
- package/dist/validation/static-safety.js +144 -36
- package/dist/validation/static-safety.js.map +1 -1
- package/dist/validation/unsupported-utility-types.d.ts +38 -0
- package/dist/validation/unsupported-utility-types.d.ts.map +1 -0
- package/dist/validation/unsupported-utility-types.js +53 -0
- package/dist/validation/unsupported-utility-types.js.map +1 -0
- package/dist/validator.test.js +304 -14
- package/dist/validator.test.js.map +1 -1
- package/package.json +1 -1
|
@@ -2,8 +2,10 @@
|
|
|
2
2
|
* Collection expression converters (arrays and objects)
|
|
3
3
|
*/
|
|
4
4
|
import * as ts from "typescript";
|
|
5
|
+
import * as path from "path";
|
|
5
6
|
import { getInferredType, getContextualType } from "./helpers.js";
|
|
6
7
|
import { convertExpression } from "../../expression-converter.js";
|
|
8
|
+
import { computeShapeSignature, generateSyntheticName, getOrCreateSyntheticType, checkSynthesisEligibility, } from "../anonymous-synthesis.js";
|
|
7
9
|
/**
|
|
8
10
|
* Convert array literal expression
|
|
9
11
|
*/
|
|
@@ -27,9 +29,14 @@ export const convertArrayLiteral = (node, checker) => {
|
|
|
27
29
|
};
|
|
28
30
|
/**
|
|
29
31
|
* Convert object literal expression
|
|
32
|
+
*
|
|
33
|
+
* If no contextual nominal type exists and the literal is eligible for synthesis,
|
|
34
|
+
* a synthetic type is generated and used as the contextual type.
|
|
30
35
|
*/
|
|
31
36
|
export const convertObjectLiteral = (node, checker) => {
|
|
32
37
|
const properties = [];
|
|
38
|
+
// Track if we have any spreads (needed for emitter IIFE lowering)
|
|
39
|
+
let hasSpreads = false;
|
|
33
40
|
node.properties.forEach((prop) => {
|
|
34
41
|
if (ts.isPropertyAssignment(prop)) {
|
|
35
42
|
const key = ts.isComputedPropertyName(prop.name)
|
|
@@ -53,6 +60,7 @@ export const convertObjectLiteral = (node, checker) => {
|
|
|
53
60
|
});
|
|
54
61
|
}
|
|
55
62
|
else if (ts.isSpreadAssignment(prop)) {
|
|
63
|
+
hasSpreads = true;
|
|
56
64
|
properties.push({
|
|
57
65
|
kind: "spread",
|
|
58
66
|
expression: convertExpression(prop.expression, checker),
|
|
@@ -60,11 +68,41 @@ export const convertObjectLiteral = (node, checker) => {
|
|
|
60
68
|
}
|
|
61
69
|
// Skip getters/setters/methods for now (can add later if needed)
|
|
62
70
|
});
|
|
71
|
+
// Try to get contextual type first
|
|
72
|
+
let contextualType = getContextualType(node, checker);
|
|
73
|
+
// If no contextual type, check if eligible for synthesis
|
|
74
|
+
if (!contextualType) {
|
|
75
|
+
const eligibility = checkSynthesisEligibility(node, checker);
|
|
76
|
+
if (eligibility.eligible) {
|
|
77
|
+
// Get the inferred type from TypeScript
|
|
78
|
+
const tsType = checker.getTypeAtLocation(node);
|
|
79
|
+
// Compute shape signature for deduplication
|
|
80
|
+
const shapeSignature = computeShapeSignature(tsType, checker);
|
|
81
|
+
// Get source file info for synthetic name
|
|
82
|
+
const sourceFile = node.getSourceFile();
|
|
83
|
+
const fileStem = path.basename(sourceFile.fileName, path.extname(sourceFile.fileName));
|
|
84
|
+
const { line, character } = sourceFile.getLineAndCharacterOfPosition(node.getStart());
|
|
85
|
+
// Generate synthetic name
|
|
86
|
+
const syntheticName = generateSyntheticName(fileStem, line + 1, character + 1);
|
|
87
|
+
// Get or create synthetic type (handles deduplication)
|
|
88
|
+
// TODO: Handle generic type parameter capture
|
|
89
|
+
const syntheticEntry = getOrCreateSyntheticType(shapeSignature, syntheticName, tsType, checker, [] // No captured type params for now
|
|
90
|
+
);
|
|
91
|
+
// Create reference to synthetic type
|
|
92
|
+
const syntheticRef = {
|
|
93
|
+
kind: "referenceType",
|
|
94
|
+
name: syntheticEntry.name,
|
|
95
|
+
typeArguments: undefined, // TODO: Add type args if capturing generic params
|
|
96
|
+
};
|
|
97
|
+
contextualType = syntheticRef;
|
|
98
|
+
}
|
|
99
|
+
}
|
|
63
100
|
return {
|
|
64
101
|
kind: "object",
|
|
65
102
|
properties,
|
|
66
103
|
inferredType: getInferredType(node, checker),
|
|
67
|
-
contextualType
|
|
104
|
+
contextualType,
|
|
105
|
+
hasSpreads, // Add flag for emitter to know about spreads
|
|
68
106
|
};
|
|
69
107
|
};
|
|
70
108
|
//# sourceMappingURL=collections.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"collections.js","sourceRoot":"","sources":["../../../../src/ir/converters/expressions/collections.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,MAAM,YAAY,CAAC;
|
|
1
|
+
{"version":3,"file":"collections.js","sourceRoot":"","sources":["../../../../src/ir/converters/expressions/collections.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"functions.d.ts","sourceRoot":"","sources":["../../../../src/ir/converters/expressions/functions.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,MAAM,YAAY,CAAC;AACjC,OAAO,EACL,oBAAoB,EACpB,yBAAyB,
|
|
1
|
+
{"version":3,"file":"functions.d.ts","sourceRoot":"","sources":["../../../../src/ir/converters/expressions/functions.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,MAAM,YAAY,CAAC;AACjC,OAAO,EACL,oBAAoB,EACpB,yBAAyB,EAE1B,MAAM,gBAAgB,CAAC;AAkExB;;GAEG;AACH,eAAO,MAAM,yBAAyB,GACpC,MAAM,EAAE,CAAC,kBAAkB,EAC3B,SAAS,EAAE,CAAC,WAAW,KACtB,oBAeF,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,oBAAoB,GAC/B,MAAM,EAAE,CAAC,aAAa,EACtB,SAAS,EAAE,CAAC,WAAW,KACtB,yBAeF,CAAC"}
|
|
@@ -4,8 +4,53 @@
|
|
|
4
4
|
import * as ts from "typescript";
|
|
5
5
|
import { getInferredType } from "./helpers.js";
|
|
6
6
|
import { convertExpression } from "../../expression-converter.js";
|
|
7
|
-
import {
|
|
8
|
-
import { convertType } from "../../type-converter.js";
|
|
7
|
+
import { convertBlockStatement } from "../../statement-converter.js";
|
|
8
|
+
import { convertType, convertBindingName, inferLambdaParamTypes, } from "../../type-converter.js";
|
|
9
|
+
/**
|
|
10
|
+
* Convert parameters for lambda expressions (arrow functions and function expressions).
|
|
11
|
+
* Uses contextual signature inference for parameters without explicit type annotations.
|
|
12
|
+
*/
|
|
13
|
+
const convertLambdaParameters = (node, checker) => {
|
|
14
|
+
// Get inferred types from contextual signature
|
|
15
|
+
const inference = inferLambdaParamTypes(node, checker);
|
|
16
|
+
return node.parameters.map((param, index) => {
|
|
17
|
+
let passing = "value";
|
|
18
|
+
let actualType = param.type;
|
|
19
|
+
// Detect ref<T>, out<T>, in<T> wrapper types (explicit annotation only)
|
|
20
|
+
if (param.type &&
|
|
21
|
+
ts.isTypeReferenceNode(param.type) &&
|
|
22
|
+
ts.isIdentifier(param.type.typeName)) {
|
|
23
|
+
const typeName = param.type.typeName.text;
|
|
24
|
+
if ((typeName === "ref" || typeName === "out" || typeName === "in") &&
|
|
25
|
+
param.type.typeArguments &&
|
|
26
|
+
param.type.typeArguments.length > 0) {
|
|
27
|
+
passing = typeName === "in" ? "in" : typeName;
|
|
28
|
+
actualType = param.type.typeArguments[0];
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
// Determine the IrType for this parameter
|
|
32
|
+
let irType;
|
|
33
|
+
if (actualType) {
|
|
34
|
+
// Explicit type annotation - use it
|
|
35
|
+
irType = convertType(actualType, checker);
|
|
36
|
+
}
|
|
37
|
+
else if (inference) {
|
|
38
|
+
// No explicit type - use inferred type from contextual signature
|
|
39
|
+
irType = inference.paramTypes[index];
|
|
40
|
+
}
|
|
41
|
+
return {
|
|
42
|
+
kind: "parameter",
|
|
43
|
+
pattern: convertBindingName(param.name),
|
|
44
|
+
type: irType,
|
|
45
|
+
initializer: param.initializer
|
|
46
|
+
? convertExpression(param.initializer, checker)
|
|
47
|
+
: undefined,
|
|
48
|
+
isOptional: !!param.questionToken,
|
|
49
|
+
isRest: !!param.dotDotDotToken,
|
|
50
|
+
passing,
|
|
51
|
+
};
|
|
52
|
+
});
|
|
53
|
+
};
|
|
9
54
|
/**
|
|
10
55
|
* Convert function expression
|
|
11
56
|
*/
|
|
@@ -13,7 +58,7 @@ export const convertFunctionExpression = (node, checker) => {
|
|
|
13
58
|
return {
|
|
14
59
|
kind: "functionExpression",
|
|
15
60
|
name: node.name?.text,
|
|
16
|
-
parameters:
|
|
61
|
+
parameters: convertLambdaParameters(node, checker),
|
|
17
62
|
returnType: node.type ? convertType(node.type, checker) : undefined,
|
|
18
63
|
body: node.body
|
|
19
64
|
? convertBlockStatement(node.body, checker)
|
|
@@ -32,7 +77,7 @@ export const convertArrowFunction = (node, checker) => {
|
|
|
32
77
|
: convertExpression(node.body, checker);
|
|
33
78
|
return {
|
|
34
79
|
kind: "arrowFunction",
|
|
35
|
-
parameters:
|
|
80
|
+
parameters: convertLambdaParameters(node, checker),
|
|
36
81
|
returnType: node.type ? convertType(node.type, checker) : undefined,
|
|
37
82
|
body,
|
|
38
83
|
isAsync: !!node.modifiers?.some((m) => m.kind === ts.SyntaxKind.AsyncKeyword),
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"functions.js","sourceRoot":"","sources":["../../../../src/ir/converters/expressions/functions.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,MAAM,YAAY,CAAC;
|
|
1
|
+
{"version":3,"file":"functions.js","sourceRoot":"","sources":["../../../../src/ir/converters/expressions/functions.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"conditionals.d.ts","sourceRoot":"","sources":["../../../../../src/ir/converters/statements/control/conditionals.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,MAAM,YAAY,CAAC;AACjC,OAAO,
|
|
1
|
+
{"version":3,"file":"conditionals.d.ts","sourceRoot":"","sources":["../../../../../src/ir/converters/statements/control/conditionals.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,MAAM,YAAY,CAAC;AACjC,OAAO,EACL,aAAa,EACb,iBAAiB,EACjB,YAAY,EACb,MAAM,mBAAmB,CAAC;AAQ3B;;GAEG;AACH,eAAO,MAAM,kBAAkB,GAC7B,MAAM,EAAE,CAAC,WAAW,EACpB,SAAS,EAAE,CAAC,WAAW,KACtB,aAYF,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,sBAAsB,GACjC,MAAM,EAAE,CAAC,eAAe,EACxB,SAAS,EAAE,CAAC,WAAW,KACtB,iBAQF,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,iBAAiB,GAC5B,MAAM,EAAE,CAAC,mBAAmB,EAC5B,SAAS,EAAE,CAAC,WAAW,KACtB,YAUF,CAAC"}
|
|
@@ -3,14 +3,14 @@
|
|
|
3
3
|
*/
|
|
4
4
|
import * as ts from "typescript";
|
|
5
5
|
import { convertExpression } from "../../../expression-converter.js";
|
|
6
|
-
import { convertStatement } from "../../../statement-converter.js";
|
|
6
|
+
import { convertStatementSingle, flattenStatementResult, convertStatement, } from "../../../statement-converter.js";
|
|
7
7
|
/**
|
|
8
8
|
* Convert if statement
|
|
9
9
|
*/
|
|
10
10
|
export const convertIfStatement = (node, checker) => {
|
|
11
|
-
const thenStmt =
|
|
11
|
+
const thenStmt = convertStatementSingle(node.thenStatement, checker);
|
|
12
12
|
const elseStmt = node.elseStatement
|
|
13
|
-
?
|
|
13
|
+
? convertStatementSingle(node.elseStatement, checker)
|
|
14
14
|
: undefined;
|
|
15
15
|
return {
|
|
16
16
|
kind: "ifStatement",
|
|
@@ -38,9 +38,7 @@ export const convertSwitchCase = (node, checker) => {
|
|
|
38
38
|
test: ts.isCaseClause(node)
|
|
39
39
|
? convertExpression(node.expression, checker)
|
|
40
40
|
: undefined,
|
|
41
|
-
statements: node.statements
|
|
42
|
-
.map((s) => convertStatement(s, checker))
|
|
43
|
-
.filter((s) => s !== null),
|
|
41
|
+
statements: node.statements.flatMap((s) => flattenStatementResult(convertStatement(s, checker))),
|
|
44
42
|
};
|
|
45
43
|
};
|
|
46
44
|
//# sourceMappingURL=conditionals.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"conditionals.js","sourceRoot":"","sources":["../../../../../src/ir/converters/statements/control/conditionals.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,MAAM,YAAY,CAAC;
|
|
1
|
+
{"version":3,"file":"conditionals.js","sourceRoot":"","sources":["../../../../../src/ir/converters/statements/control/conditionals.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,MAAM,YAAY,CAAC;AAMjC,OAAO,EAAE,iBAAiB,EAAE,MAAM,kCAAkC,CAAC;AACrE,OAAO,EACL,sBAAsB,EACtB,sBAAsB,EACtB,gBAAgB,GACjB,MAAM,iCAAiC,CAAC;AAEzC;;GAEG;AACH,MAAM,CAAC,MAAM,kBAAkB,GAAG,CAChC,IAAoB,EACpB,OAAuB,EACR,EAAE;IACjB,MAAM,QAAQ,GAAG,sBAAsB,CAAC,IAAI,CAAC,aAAa,EAAE,OAAO,CAAC,CAAC;IACrE,MAAM,QAAQ,GAAG,IAAI,CAAC,aAAa;QACjC,CAAC,CAAC,sBAAsB,CAAC,IAAI,CAAC,aAAa,EAAE,OAAO,CAAC;QACrD,CAAC,CAAC,SAAS,CAAC;IAEd,OAAO;QACL,IAAI,EAAE,aAAa;QACnB,SAAS,EAAE,iBAAiB,CAAC,IAAI,CAAC,UAAU,EAAE,OAAO,CAAC;QACtD,aAAa,EAAE,QAAQ,IAAI,EAAE,IAAI,EAAE,gBAAgB,EAAE;QACrD,aAAa,EAAE,QAAQ,IAAI,SAAS;KACrC,CAAC;AACJ,CAAC,CAAC;AAEF;;GAEG;AACH,MAAM,CAAC,MAAM,sBAAsB,GAAG,CACpC,IAAwB,EACxB,OAAuB,EACJ,EAAE;IACrB,OAAO;QACL,IAAI,EAAE,iBAAiB;QACvB,UAAU,EAAE,iBAAiB,CAAC,IAAI,CAAC,UAAU,EAAE,OAAO,CAAC;QACvD,KAAK,EAAE,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE,CAC3C,iBAAiB,CAAC,MAAM,EAAE,OAAO,CAAC,CACnC;KACF,CAAC;AACJ,CAAC,CAAC;AAEF;;GAEG;AACH,MAAM,CAAC,MAAM,iBAAiB,GAAG,CAC/B,IAA4B,EAC5B,OAAuB,EACT,EAAE;IAChB,OAAO;QACL,IAAI,EAAE,YAAY;QAClB,IAAI,EAAE,EAAE,CAAC,YAAY,CAAC,IAAI,CAAC;YACzB,CAAC,CAAC,iBAAiB,CAAC,IAAI,CAAC,UAAU,EAAE,OAAO,CAAC;YAC7C,CAAC,CAAC,SAAS;QACb,UAAU,EAAE,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE,CACxC,sBAAsB,CAAC,gBAAgB,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC,CACrD;KACF,CAAC;AACJ,CAAC,CAAC"}
|
|
@@ -4,13 +4,13 @@
|
|
|
4
4
|
import * as ts from "typescript";
|
|
5
5
|
import { convertExpression } from "../../../expression-converter.js";
|
|
6
6
|
import { convertBindingName } from "../../../type-converter.js";
|
|
7
|
-
import {
|
|
7
|
+
import { convertStatementSingle } from "../../../statement-converter.js";
|
|
8
8
|
import { convertVariableDeclarationList } from "../helpers.js";
|
|
9
9
|
/**
|
|
10
10
|
* Convert while statement
|
|
11
11
|
*/
|
|
12
12
|
export const convertWhileStatement = (node, checker) => {
|
|
13
|
-
const body =
|
|
13
|
+
const body = convertStatementSingle(node.statement, checker);
|
|
14
14
|
return {
|
|
15
15
|
kind: "whileStatement",
|
|
16
16
|
condition: convertExpression(node.expression, checker),
|
|
@@ -21,7 +21,7 @@ export const convertWhileStatement = (node, checker) => {
|
|
|
21
21
|
* Convert for statement
|
|
22
22
|
*/
|
|
23
23
|
export const convertForStatement = (node, checker) => {
|
|
24
|
-
const body =
|
|
24
|
+
const body = convertStatementSingle(node.statement, checker);
|
|
25
25
|
return {
|
|
26
26
|
kind: "forStatement",
|
|
27
27
|
initializer: node.initializer
|
|
@@ -48,7 +48,7 @@ export const convertForOfStatement = (node, checker) => {
|
|
|
48
48
|
const variable = ts.isVariableDeclarationList(node.initializer)
|
|
49
49
|
? convertBindingName(firstDecl?.name ?? ts.factory.createIdentifier("_"))
|
|
50
50
|
: convertBindingName(node.initializer);
|
|
51
|
-
const body =
|
|
51
|
+
const body = convertStatementSingle(node.statement, checker);
|
|
52
52
|
return {
|
|
53
53
|
kind: "forOfStatement",
|
|
54
54
|
variable,
|
|
@@ -62,7 +62,7 @@ export const convertForOfStatement = (node, checker) => {
|
|
|
62
62
|
export const convertForInStatement = (node, checker) => {
|
|
63
63
|
// Note: for...in needs special handling in C# - variable extraction will be handled in emitter
|
|
64
64
|
// We'll need to extract the variable info in the emitter phase
|
|
65
|
-
const body =
|
|
65
|
+
const body = convertStatementSingle(node.statement, checker);
|
|
66
66
|
// Note: for...in needs special handling in C#
|
|
67
67
|
return {
|
|
68
68
|
kind: "forStatement",
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"loops.js","sourceRoot":"","sources":["../../../../../src/ir/converters/statements/control/loops.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,MAAM,YAAY,CAAC;AAMjC,OAAO,EAAE,iBAAiB,EAAE,MAAM,kCAAkC,CAAC;AACrE,OAAO,EAAE,kBAAkB,EAAE,MAAM,4BAA4B,CAAC;AAChE,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"loops.js","sourceRoot":"","sources":["../../../../../src/ir/converters/statements/control/loops.ts"],"names":[],"mappings":"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"}
|
|
@@ -2,14 +2,15 @@
|
|
|
2
2
|
* Interface declaration converter
|
|
3
3
|
*/
|
|
4
4
|
import * as ts from "typescript";
|
|
5
|
-
import { IrInterfaceDeclaration, IrInterfaceMember } from "../../../types.js";
|
|
5
|
+
import { IrInterfaceDeclaration, IrInterfaceMember, IrTypeAliasDeclaration } from "../../../types.js";
|
|
6
6
|
/**
|
|
7
7
|
* Convert interface member
|
|
8
8
|
*/
|
|
9
9
|
export declare const convertInterfaceMember: (node: ts.TypeElement, checker: ts.TypeChecker) => IrInterfaceMember | null;
|
|
10
10
|
/**
|
|
11
11
|
* Convert interface declaration
|
|
12
|
-
* Returns null for marker interfaces that should be filtered out
|
|
12
|
+
* Returns null for marker interfaces that should be filtered out.
|
|
13
|
+
* Returns a type alias for index-signature-only interfaces (lowered to Dictionary).
|
|
13
14
|
*/
|
|
14
|
-
export declare const convertInterfaceDeclaration: (node: ts.InterfaceDeclaration, checker: ts.TypeChecker) => IrInterfaceDeclaration | null;
|
|
15
|
+
export declare const convertInterfaceDeclaration: (node: ts.InterfaceDeclaration, checker: ts.TypeChecker) => IrInterfaceDeclaration | IrTypeAliasDeclaration | null;
|
|
15
16
|
//# sourceMappingURL=interfaces.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"interfaces.d.ts","sourceRoot":"","sources":["../../../../../src/ir/converters/statements/declarations/interfaces.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,MAAM,YAAY,CAAC;AACjC,OAAO,
|
|
1
|
+
{"version":3,"file":"interfaces.d.ts","sourceRoot":"","sources":["../../../../../src/ir/converters/statements/declarations/interfaces.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,MAAM,YAAY,CAAC;AACjC,OAAO,EACL,sBAAsB,EACtB,iBAAiB,EACjB,sBAAsB,EAEvB,MAAM,mBAAmB,CAAC;AAS3B;;GAEG;AACH,eAAO,MAAM,sBAAsB,GACjC,MAAM,EAAE,CAAC,WAAW,EACpB,SAAS,EAAE,CAAC,WAAW,KACtB,iBAAiB,GAAG,IAwBtB,CAAC;AAyFF;;;;GAIG;AACH,eAAO,MAAM,2BAA2B,GACtC,MAAM,EAAE,CAAC,oBAAoB,EAC7B,SAAS,EAAE,CAAC,WAAW,KACtB,sBAAsB,GAAG,sBAAsB,GAAG,IA0DpD,CAAC"}
|
|
@@ -35,6 +35,43 @@ const isStructMarker = (typeRef, checker) => {
|
|
|
35
35
|
const symbol = checker.getSymbolAtLocation(typeRef.expression);
|
|
36
36
|
return symbol?.escapedName === "struct" || symbol?.escapedName === "Struct";
|
|
37
37
|
};
|
|
38
|
+
/**
|
|
39
|
+
* Check if an interface has only index signatures (no property/method members).
|
|
40
|
+
* Returns the dictionary type info if so, undefined otherwise.
|
|
41
|
+
*
|
|
42
|
+
* This handles interfaces like:
|
|
43
|
+
* interface NumberIndexed { [key: number]: string; }
|
|
44
|
+
*
|
|
45
|
+
* These should be lowered to type aliases for Dictionary<K, V>.
|
|
46
|
+
*/
|
|
47
|
+
const extractIndexSignatureOnlyInterface = (node, checker) => {
|
|
48
|
+
const members = node.members;
|
|
49
|
+
// Must have exactly one member
|
|
50
|
+
if (members.length !== 1) {
|
|
51
|
+
return undefined;
|
|
52
|
+
}
|
|
53
|
+
const member = members[0];
|
|
54
|
+
if (!member || !ts.isIndexSignatureDeclaration(member)) {
|
|
55
|
+
return undefined;
|
|
56
|
+
}
|
|
57
|
+
// Extract key type from the index signature parameter
|
|
58
|
+
const param = member.parameters[0];
|
|
59
|
+
if (!param || !param.type) {
|
|
60
|
+
return undefined;
|
|
61
|
+
}
|
|
62
|
+
const keyType = convertType(param.type, checker);
|
|
63
|
+
// Only allow string or number keys (enforced by TSN7413)
|
|
64
|
+
if (keyType.kind !== "primitiveType" ||
|
|
65
|
+
(keyType.name !== "string" && keyType.name !== "number")) {
|
|
66
|
+
return undefined;
|
|
67
|
+
}
|
|
68
|
+
// Extract value type
|
|
69
|
+
if (!member.type) {
|
|
70
|
+
return undefined;
|
|
71
|
+
}
|
|
72
|
+
const valueType = convertType(member.type, checker);
|
|
73
|
+
return { keyType, valueType };
|
|
74
|
+
};
|
|
38
75
|
/**
|
|
39
76
|
* Check if an interface declaration IS the struct marker itself (should be filtered out)
|
|
40
77
|
*/
|
|
@@ -57,13 +94,30 @@ const isMarkerInterface = (node) => {
|
|
|
57
94
|
};
|
|
58
95
|
/**
|
|
59
96
|
* Convert interface declaration
|
|
60
|
-
* Returns null for marker interfaces that should be filtered out
|
|
97
|
+
* Returns null for marker interfaces that should be filtered out.
|
|
98
|
+
* Returns a type alias for index-signature-only interfaces (lowered to Dictionary).
|
|
61
99
|
*/
|
|
62
100
|
export const convertInterfaceDeclaration = (node, checker) => {
|
|
63
101
|
// Filter out marker interfaces completely
|
|
64
102
|
if (isMarkerInterface(node)) {
|
|
65
103
|
return null;
|
|
66
104
|
}
|
|
105
|
+
// Check for index-signature-only interface → lower to type alias for dictionary
|
|
106
|
+
const dictInfo = extractIndexSignatureOnlyInterface(node, checker);
|
|
107
|
+
if (dictInfo) {
|
|
108
|
+
return {
|
|
109
|
+
kind: "typeAliasDeclaration",
|
|
110
|
+
name: node.name.text,
|
|
111
|
+
typeParameters: convertTypeParameters(node.typeParameters, checker),
|
|
112
|
+
type: {
|
|
113
|
+
kind: "dictionaryType",
|
|
114
|
+
keyType: dictInfo.keyType,
|
|
115
|
+
valueType: dictInfo.valueType,
|
|
116
|
+
},
|
|
117
|
+
isExported: hasExportModifier(node),
|
|
118
|
+
isStruct: false,
|
|
119
|
+
};
|
|
120
|
+
}
|
|
67
121
|
// Detect struct marker in extends clause
|
|
68
122
|
let isStruct = false;
|
|
69
123
|
const extendsClause = node.heritageClauses?.find((h) => h.token === ts.SyntaxKind.ExtendsKeyword);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"interfaces.js","sourceRoot":"","sources":["../../../../../src/ir/converters/statements/declarations/interfaces.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,MAAM,YAAY,CAAC;
|
|
1
|
+
{"version":3,"file":"interfaces.js","sourceRoot":"","sources":["../../../../../src/ir/converters/statements/declarations/interfaces.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,MAAM,YAAY,CAAC;AAOjC,OAAO,EAAE,WAAW,EAAE,MAAM,4BAA4B,CAAC;AACzD,OAAO,EACL,iBAAiB,EACjB,mBAAmB,EACnB,qBAAqB,EACrB,iBAAiB,GAClB,MAAM,eAAe,CAAC;AAEvB;;GAEG;AACH,MAAM,CAAC,MAAM,sBAAsB,GAAG,CACpC,IAAoB,EACpB,OAAuB,EACG,EAAE;IAC5B,IAAI,EAAE,CAAC,mBAAmB,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC;QAC9C,OAAO;YACL,IAAI,EAAE,mBAAmB;YACzB,IAAI,EACF,IAAI,CAAC,IAAI,IAAI,EAAE,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,YAAY;YACzE,IAAI,EAAE,WAAW,CAAC,IAAI,CAAC,IAAI,EAAE,OAAO,CAAC;YACrC,UAAU,EAAE,CAAC,CAAC,IAAI,CAAC,aAAa;YAChC,UAAU,EAAE,mBAAmB,CAAC,IAAI,CAAC;SACtC,CAAC;IACJ,CAAC;IAED,IAAI,EAAE,CAAC,iBAAiB,CAAC,IAAI,CAAC,EAAE,CAAC;QAC/B,OAAO;YACL,IAAI,EAAE,iBAAiB;YACvB,IAAI,EACF,IAAI,CAAC,IAAI,IAAI,EAAE,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,YAAY;YACzE,cAAc,EAAE,qBAAqB,CAAC,IAAI,CAAC,cAAc,EAAE,OAAO,CAAC;YACnE,UAAU,EAAE,iBAAiB,CAAC,IAAI,CAAC,UAAU,EAAE,OAAO,CAAC;YACvD,UAAU,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC,SAAS;SACpE,CAAC;IACJ,CAAC;IAED,OAAO,IAAI,CAAC;AACd,CAAC,CAAC;AAEF;;GAEG;AACH,MAAM,cAAc,GAAG,CACrB,OAAuC,EACvC,OAAuB,EACd,EAAE;IACX,MAAM,MAAM,GAAG,OAAO,CAAC,mBAAmB,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC;IAC/D,OAAO,MAAM,EAAE,WAAW,KAAK,QAAQ,IAAI,MAAM,EAAE,WAAW,KAAK,QAAQ,CAAC;AAC9E,CAAC,CAAC;AAEF;;;;;;;;GAQG;AACH,MAAM,kCAAkC,GAAG,CACzC,IAA6B,EAC7B,OAAuB,EAC6B,EAAE;IACtD,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC;IAE7B,+BAA+B;IAC/B,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACzB,OAAO,SAAS,CAAC;IACnB,CAAC;IAED,MAAM,MAAM,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC;IAC1B,IAAI,CAAC,MAAM,IAAI,CAAC,EAAE,CAAC,2BAA2B,CAAC,MAAM,CAAC,EAAE,CAAC;QACvD,OAAO,SAAS,CAAC;IACnB,CAAC;IAED,sDAAsD;IACtD,MAAM,KAAK,GAAG,MAAM,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC;IACnC,IAAI,CAAC,KAAK,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC;QAC1B,OAAO,SAAS,CAAC;IACnB,CAAC;IAED,MAAM,OAAO,GAAG,WAAW,CAAC,KAAK,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;IAEjD,yDAAyD;IACzD,IACE,OAAO,CAAC,IAAI,KAAK,eAAe;QAChC,CAAC,OAAO,CAAC,IAAI,KAAK,QAAQ,IAAI,OAAO,CAAC,IAAI,KAAK,QAAQ,CAAC,EACxD,CAAC;QACD,OAAO,SAAS,CAAC;IACnB,CAAC;IAED,qBAAqB;IACrB,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC;QACjB,OAAO,SAAS,CAAC;IACnB,CAAC;IAED,MAAM,SAAS,GAAG,WAAW,CAAC,MAAM,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;IAEpD,OAAO,EAAE,OAAO,EAAE,SAAS,EAAE,CAAC;AAChC,CAAC,CAAC;AAEF;;GAEG;AACH,MAAM,iBAAiB,GAAG,CAAC,IAA6B,EAAW,EAAE;IACnE,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC;IAC5B,IAAI,IAAI,KAAK,QAAQ,IAAI,IAAI,KAAK,QAAQ,EAAE,CAAC;QAC3C,OAAO,KAAK,CAAC;IACf,CAAC;IAED,4CAA4C;IAC5C,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC;IAC7B,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACzB,OAAO,KAAK,CAAC;IACf,CAAC;IAED,MAAM,MAAM,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC;IAC1B,IAAI,CAAC,MAAM,IAAI,CAAC,EAAE,CAAC,mBAAmB,CAAC,MAAM,CAAC,EAAE,CAAC;QAC/C,OAAO,KAAK,CAAC;IACf,CAAC;IAED,MAAM,UAAU,GACd,MAAM,CAAC,IAAI,IAAI,EAAE,CAAC,YAAY,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC;IACtE,OAAO,UAAU,KAAK,SAAS,CAAC;AAClC,CAAC,CAAC;AAEF;;;;GAIG;AACH,MAAM,CAAC,MAAM,2BAA2B,GAAG,CACzC,IAA6B,EAC7B,OAAuB,EACiC,EAAE;IAC1D,0CAA0C;IAC1C,IAAI,iBAAiB,CAAC,IAAI,CAAC,EAAE,CAAC;QAC5B,OAAO,IAAI,CAAC;IACd,CAAC;IAED,gFAAgF;IAChF,MAAM,QAAQ,GAAG,kCAAkC,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;IACnE,IAAI,QAAQ,EAAE,CAAC;QACb,OAAO;YACL,IAAI,EAAE,sBAAsB;YAC5B,IAAI,EAAE,IAAI,CAAC,IAAI,CAAC,IAAI;YACpB,cAAc,EAAE,qBAAqB,CAAC,IAAI,CAAC,cAAc,EAAE,OAAO,CAAC;YACnE,IAAI,EAAE;gBACJ,IAAI,EAAE,gBAAgB;gBACtB,OAAO,EAAE,QAAQ,CAAC,OAAO;gBACzB,SAAS,EAAE,QAAQ,CAAC,SAAS;aAC9B;YACD,UAAU,EAAE,iBAAiB,CAAC,IAAI,CAAC;YACnC,QAAQ,EAAE,KAAK;SAChB,CAAC;IACJ,CAAC;IACD,yCAAyC;IACzC,IAAI,QAAQ,GAAG,KAAK,CAAC;IACrB,MAAM,aAAa,GAAG,IAAI,CAAC,eAAe,EAAE,IAAI,CAC9C,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,KAAK,EAAE,CAAC,UAAU,CAAC,cAAc,CAChD,CAAC;IACF,MAAM,YAAY,GAChB,aAAa,EAAE,KAAK;SACjB,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE;QACZ,IAAI,cAAc,CAAC,CAAC,EAAE,OAAO,CAAC,EAAE,CAAC;YAC/B,QAAQ,GAAG,IAAI,CAAC;YAChB,OAAO,KAAK,CAAC,CAAC,6BAA6B;QAC7C,CAAC;QACD,OAAO,IAAI,CAAC;IACd,CAAC,CAAC;SACD,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,WAAW,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC,IAAI,EAAE,CAAC;IAE/C,MAAM,UAAU,GAAG,IAAI,CAAC,OAAO;SAC5B,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,sBAAsB,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC;SAC9C,MAAM,CAAC,CAAC,CAAC,EAA0B,EAAE,CAAC,CAAC,KAAK,IAAI,CAAC,CAAC;IAErD,kDAAkD;IAClD,MAAM,YAAY,GAAG,QAAQ;QAC3B,CAAC,CAAC,UAAU,CAAC,MAAM,CACf,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,mBAAmB,IAAI,CAAC,CAAC,IAAI,KAAK,SAAS,CAC9D;QACH,CAAC,CAAC,UAAU,CAAC;IAEf,OAAO;QACL,IAAI,EAAE,sBAAsB;QAC5B,IAAI,EAAE,IAAI,CAAC,IAAI,CAAC,IAAI;QACpB,cAAc,EAAE,qBAAqB,CAAC,IAAI,CAAC,cAAc,EAAE,OAAO,CAAC;QACnE,OAAO,EAAE,YAAY;QACrB,OAAO,EAAE,YAAY;QACrB,UAAU,EAAE,iBAAiB,CAAC,IAAI,CAAC;QACnC,QAAQ;KACT,CAAC;AACJ,CAAC,CAAC"}
|
|
@@ -2,9 +2,14 @@
|
|
|
2
2
|
* Type alias declaration converter
|
|
3
3
|
*/
|
|
4
4
|
import * as ts from "typescript";
|
|
5
|
-
import {
|
|
5
|
+
import { IrStatement } from "../../../types.js";
|
|
6
6
|
/**
|
|
7
|
-
* Convert type alias declaration
|
|
7
|
+
* Convert type alias declaration.
|
|
8
|
+
*
|
|
9
|
+
* If the type alias is a union of object literals, this generates synthetic
|
|
10
|
+
* interface declarations and rewrites the type alias to reference them.
|
|
11
|
+
*
|
|
12
|
+
* @returns Array of statements: [synthetic interfaces..., type alias]
|
|
8
13
|
*/
|
|
9
|
-
export declare const convertTypeAliasDeclaration: (node: ts.TypeAliasDeclaration, checker: ts.TypeChecker) =>
|
|
14
|
+
export declare const convertTypeAliasDeclaration: (node: ts.TypeAliasDeclaration, checker: ts.TypeChecker) => readonly IrStatement[];
|
|
10
15
|
//# sourceMappingURL=type-aliases.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"type-aliases.d.ts","sourceRoot":"","sources":["../../../../../src/ir/converters/statements/declarations/type-aliases.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,MAAM,YAAY,CAAC;AACjC,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"type-aliases.d.ts","sourceRoot":"","sources":["../../../../../src/ir/converters/statements/declarations/type-aliases.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,MAAM,YAAY,CAAC;AACjC,OAAO,EAAE,WAAW,EAA0B,MAAM,mBAAmB,CAAC;AAKxE;;;;;;;GAOG;AACH,eAAO,MAAM,2BAA2B,GACtC,MAAM,EAAE,CAAC,oBAAoB,EAC7B,SAAS,EAAE,CAAC,WAAW,KACtB,SAAS,WAAW,EAetB,CAAC"}
|
|
@@ -3,11 +3,17 @@
|
|
|
3
3
|
*/
|
|
4
4
|
import { convertType } from "../../../type-converter.js";
|
|
5
5
|
import { hasExportModifier, convertTypeParameters } from "../helpers.js";
|
|
6
|
+
import { processTypeAliasForSynthetics } from "../../synthetic-types.js";
|
|
6
7
|
/**
|
|
7
|
-
* Convert type alias declaration
|
|
8
|
+
* Convert type alias declaration.
|
|
9
|
+
*
|
|
10
|
+
* If the type alias is a union of object literals, this generates synthetic
|
|
11
|
+
* interface declarations and rewrites the type alias to reference them.
|
|
12
|
+
*
|
|
13
|
+
* @returns Array of statements: [synthetic interfaces..., type alias]
|
|
8
14
|
*/
|
|
9
15
|
export const convertTypeAliasDeclaration = (node, checker) => {
|
|
10
|
-
|
|
16
|
+
const baseAlias = {
|
|
11
17
|
kind: "typeAliasDeclaration",
|
|
12
18
|
name: node.name.text,
|
|
13
19
|
typeParameters: convertTypeParameters(node.typeParameters, checker),
|
|
@@ -15,5 +21,9 @@ export const convertTypeAliasDeclaration = (node, checker) => {
|
|
|
15
21
|
isExported: hasExportModifier(node),
|
|
16
22
|
isStruct: false, // Type aliases are not structs by default
|
|
17
23
|
};
|
|
24
|
+
// Process for synthetic type generation (union of object literals)
|
|
25
|
+
const result = processTypeAliasForSynthetics(baseAlias);
|
|
26
|
+
// Return synthetics first, then the (possibly rewritten) type alias
|
|
27
|
+
return [...result.syntheticInterfaces, result.typeAlias];
|
|
18
28
|
};
|
|
19
29
|
//# sourceMappingURL=type-aliases.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"type-aliases.js","sourceRoot":"","sources":["../../../../../src/ir/converters/statements/declarations/type-aliases.ts"],"names":[],"mappings":"AAAA;;GAEG;AAIH,OAAO,EAAE,WAAW,EAAE,MAAM,4BAA4B,CAAC;AACzD,OAAO,EAAE,iBAAiB,EAAE,qBAAqB,EAAE,MAAM,eAAe,CAAC;AAEzE
|
|
1
|
+
{"version":3,"file":"type-aliases.js","sourceRoot":"","sources":["../../../../../src/ir/converters/statements/declarations/type-aliases.ts"],"names":[],"mappings":"AAAA;;GAEG;AAIH,OAAO,EAAE,WAAW,EAAE,MAAM,4BAA4B,CAAC;AACzD,OAAO,EAAE,iBAAiB,EAAE,qBAAqB,EAAE,MAAM,eAAe,CAAC;AACzE,OAAO,EAAE,6BAA6B,EAAE,MAAM,0BAA0B,CAAC;AAEzE;;;;;;;GAOG;AACH,MAAM,CAAC,MAAM,2BAA2B,GAAG,CACzC,IAA6B,EAC7B,OAAuB,EACC,EAAE;IAC1B,MAAM,SAAS,GAA2B;QACxC,IAAI,EAAE,sBAAsB;QAC5B,IAAI,EAAE,IAAI,CAAC,IAAI,CAAC,IAAI;QACpB,cAAc,EAAE,qBAAqB,CAAC,IAAI,CAAC,cAAc,EAAE,OAAO,CAAC;QACnE,IAAI,EAAE,WAAW,CAAC,IAAI,CAAC,IAAI,EAAE,OAAO,CAAC;QACrC,UAAU,EAAE,iBAAiB,CAAC,IAAI,CAAC;QACnC,QAAQ,EAAE,KAAK,EAAE,0CAA0C;KAC5D,CAAC;IAEF,mEAAmE;IACnE,MAAM,MAAM,GAAG,6BAA6B,CAAC,SAAS,CAAC,CAAC;IAExD,oEAAoE;IACpE,OAAO,CAAC,GAAG,MAAM,CAAC,mBAAmB,EAAE,MAAM,CAAC,SAAS,CAAC,CAAC;AAC3D,CAAC,CAAC"}
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Synthetic Type Generation for Union-of-Object-Literals
|
|
3
|
+
*
|
|
4
|
+
* When a type alias contains a union of object literal types, we generate
|
|
5
|
+
* synthetic nominal interfaces for each object member. This enables:
|
|
6
|
+
* - TSN7403 compliance (object literals have contextual nominal types)
|
|
7
|
+
* - Proper C# emission (nominal types instead of anonymous objects)
|
|
8
|
+
*
|
|
9
|
+
* Example:
|
|
10
|
+
* type Result<T, E> = { ok: true; value: T } | { ok: false; error: E };
|
|
11
|
+
*
|
|
12
|
+
* Generates:
|
|
13
|
+
* interface Result__0<T, E> { ok: true; value: T }
|
|
14
|
+
* interface Result__1<T, E> { ok: false; error: E }
|
|
15
|
+
* type Result<T, E> = Result__0<T, E> | Result__1<T, E>
|
|
16
|
+
*/
|
|
17
|
+
import { IrInterfaceDeclaration, IrTypeAliasDeclaration } from "../types.js";
|
|
18
|
+
/**
|
|
19
|
+
* Result of processing a type alias for synthetic type generation
|
|
20
|
+
*/
|
|
21
|
+
export type SyntheticTypeResult = {
|
|
22
|
+
/** The (possibly rewritten) type alias declaration */
|
|
23
|
+
readonly typeAlias: IrTypeAliasDeclaration;
|
|
24
|
+
/** Generated synthetic interface declarations (empty if no rewriting needed) */
|
|
25
|
+
readonly syntheticInterfaces: readonly IrInterfaceDeclaration[];
|
|
26
|
+
};
|
|
27
|
+
/**
|
|
28
|
+
* Process a type alias declaration and generate synthetic interfaces if needed.
|
|
29
|
+
*
|
|
30
|
+
* If the type alias is a union containing object literal types, this will:
|
|
31
|
+
* 1. Generate a synthetic interface for each object literal member
|
|
32
|
+
* 2. Rewrite the union to use reference types to the synthetics
|
|
33
|
+
* 3. Return both the rewritten alias and the synthetic interfaces
|
|
34
|
+
*
|
|
35
|
+
* If no object literals are found, returns the original alias unchanged.
|
|
36
|
+
*/
|
|
37
|
+
export declare const processTypeAliasForSynthetics: (typeAlias: IrTypeAliasDeclaration) => SyntheticTypeResult;
|
|
38
|
+
//# sourceMappingURL=synthetic-types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"synthetic-types.d.ts","sourceRoot":"","sources":["../../../src/ir/converters/synthetic-types.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAEH,OAAO,EAIL,sBAAsB,EACtB,sBAAsB,EAGvB,MAAM,aAAa,CAAC;AAErB;;GAEG;AACH,MAAM,MAAM,mBAAmB,GAAG;IAChC,sDAAsD;IACtD,QAAQ,CAAC,SAAS,EAAE,sBAAsB,CAAC;IAC3C,gFAAgF;IAChF,QAAQ,CAAC,mBAAmB,EAAE,SAAS,sBAAsB,EAAE,CAAC;CACjE,CAAC;AAyEF;;;;;;;;;GASG;AACH,eAAO,MAAM,6BAA6B,GACxC,WAAW,sBAAsB,KAChC,mBA2DF,CAAC"}
|