@tsonic/frontend 0.0.2 → 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/graph/extraction/imports.js +3 -3
- package/dist/graph/extraction/imports.js.map +1 -1
- package/dist/ir/binding-resolution.test.js +8 -3
- package/dist/ir/binding-resolution.test.js.map +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 +3 -3
- package/dist/ir/builder/imports.d.ts.map +1 -1
- package/dist/ir/builder/imports.js +16 -9
- package/dist/ir/builder/imports.js.map +1 -1
- package/dist/ir/builder/orchestrator.js +1 -1
- package/dist/ir/builder/orchestrator.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 +20 -10
- 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/access.d.ts.map +1 -1
- package/dist/ir/converters/expressions/access.js +48 -1
- package/dist/ir/converters/expressions/access.js.map +1 -1
- 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/expressions/helpers.d.ts.map +1 -1
- package/dist/ir/converters/expressions/helpers.js +8 -1
- package/dist/ir/converters/expressions/helpers.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/hierarchical-bindings-e2e.test.js +8 -3
- package/dist/ir/hierarchical-bindings-e2e.test.js.map +1 -1
- 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 +145 -6
- package/dist/ir/type-converter/inference.js.map +1 -1
- package/dist/ir/type-converter/objects.d.ts.map +1 -1
- package/dist/ir/type-converter/objects.js +3 -2
- package/dist/ir/type-converter/objects.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/references.d.ts.map +1 -1
- package/dist/ir/type-converter/references.js +16 -5
- package/dist/ir/type-converter/references.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 +24 -1
- package/dist/ir/types/ir-types.d.ts.map +1 -1
- package/dist/ir/types/module.d.ts +1 -1
- package/dist/ir/types/module.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/program/bindings.d.ts +51 -3
- package/dist/program/bindings.d.ts.map +1 -1
- package/dist/program/bindings.js +181 -19
- package/dist/program/bindings.js.map +1 -1
- package/dist/program/creation.d.ts.map +1 -1
- package/dist/program/creation.js +11 -9
- package/dist/program/creation.js.map +1 -1
- package/dist/program/dependency-graph.d.ts.map +1 -1
- package/dist/program/dependency-graph.js +65 -1
- package/dist/program/dependency-graph.js.map +1 -1
- package/dist/program/types.d.ts +4 -3
- package/dist/program/types.d.ts.map +1 -1
- package/dist/resolver/clr-bindings-resolver.d.ts +93 -0
- package/dist/resolver/clr-bindings-resolver.d.ts.map +1 -0
- package/dist/resolver/{dotnet-import-resolver.js → clr-bindings-resolver.js} +114 -24
- package/dist/resolver/clr-bindings-resolver.js.map +1 -0
- package/dist/resolver/import-resolution.d.ts +4 -4
- package/dist/resolver/import-resolution.d.ts.map +1 -1
- package/dist/resolver/import-resolution.js +17 -17
- package/dist/resolver/import-resolution.js.map +1 -1
- package/dist/resolver/index.d.ts +2 -2
- package/dist/resolver/index.d.ts.map +1 -1
- package/dist/resolver/index.js +2 -2
- package/dist/resolver/index.js.map +1 -1
- package/dist/resolver/types.d.ts +1 -1
- package/dist/resolver/types.d.ts.map +1 -1
- package/dist/resolver.d.ts +2 -2
- package/dist/resolver.d.ts.map +1 -1
- package/dist/resolver.js +1 -1
- package/dist/resolver.js.map +1 -1
- package/dist/resolver.test.js +1 -1
- package/dist/resolver.test.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/types/metadata.d.ts +1 -1
- package/dist/types/metadata.d.ts.map +1 -1
- package/dist/types/module.d.ts +1 -1
- package/dist/types/module.d.ts.map +1 -1
- package/dist/types/parameter-modifiers.d.ts.map +1 -1
- package/dist/types/parameter-modifiers.js +7 -3
- package/dist/types/parameter-modifiers.js.map +1 -1
- package/dist/types/support-types.test.js +6 -3
- package/dist/types/support-types.test.js.map +1 -1
- package/dist/validation/imports.js +1 -1
- package/dist/validation/imports.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 +146 -38
- 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 +307 -16
- package/dist/validator.test.js.map +1 -1
- package/package.json +1 -1
- package/dist/ir/type-converter/clr-type-resolver.d.ts +0 -15
- package/dist/ir/type-converter/clr-type-resolver.d.ts.map +0 -1
- package/dist/ir/type-converter/clr-type-resolver.js +0 -120
- package/dist/ir/type-converter/clr-type-resolver.js.map +0 -1
- package/dist/resolver/dotnet-import-resolver.d.ts +0 -74
- package/dist/resolver/dotnet-import-resolver.d.ts.map +0 -1
- package/dist/resolver/dotnet-import-resolver.js.map +0 -1
- package/dist/types/test-debug.d.ts.map +0 -1
- package/dist/types/test-debug.js.map +0 -1
- package/dist/validation/aot-safety.d.ts +0 -24
- package/dist/validation/aot-safety.d.ts.map +0 -1
- package/dist/validation/aot-safety.js +0 -114
- package/dist/validation/aot-safety.js.map +0 -1
|
@@ -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":"helpers.d.ts","sourceRoot":"","sources":["../../../../src/ir/converters/expressions/helpers.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,MAAM,YAAY,CAAC;AACjC,OAAO,EAAE,MAAM,EAAE,MAAM,gBAAgB,CAAC;AAGxC;;;;GAIG;AACH,eAAO,MAAM,eAAe,GAC1B,MAAM,EAAE,CAAC,IAAI,EACb,SAAS,EAAE,CAAC,WAAW,KACtB,MAAM,GAAG,
|
|
1
|
+
{"version":3,"file":"helpers.d.ts","sourceRoot":"","sources":["../../../../src/ir/converters/expressions/helpers.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,MAAM,YAAY,CAAC;AACjC,OAAO,EAAE,MAAM,EAAE,MAAM,gBAAgB,CAAC;AAGxC;;;;GAIG;AACH,eAAO,MAAM,eAAe,GAC1B,MAAM,EAAE,CAAC,IAAI,EACb,SAAS,EAAE,CAAC,WAAW,KACtB,MAAM,GAAG,SA4BX,CAAC;AAEF;;;GAGG;AACH,eAAO,MAAM,oBAAoB,GAC/B,MAAM,EAAE,CAAC,cAAc,GAAG,EAAE,CAAC,aAAa,EAC1C,SAAS,EAAE,CAAC,WAAW,KACtB,SAAS,MAAM,EAAE,GAAG,SAoCtB,CAAC;AAEF;;;GAGG;AACH,eAAO,MAAM,6BAA6B,GACxC,MAAM,EAAE,CAAC,cAAc,GAAG,EAAE,CAAC,aAAa,EAC1C,SAAS,EAAE,CAAC,WAAW,KACtB,OA0CF,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,qBAAqB,GAChC,OAAO,EAAE,CAAC,mBAAmB,KAC5B,MA8CF,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,oBAAoB,GAC/B,OAAO,EAAE,CAAC,mBAAmB,KAC5B,OAKF,CAAC;AAEF;;;;;;;GAOG;AACH,eAAO,MAAM,iBAAiB,GAC5B,MAAM,EAAE,CAAC,UAAU,EACnB,SAAS,EAAE,CAAC,WAAW,KACtB,MAAM,GAAG,SAwCX,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,qBAAqB,GAChC,MAAM,EAAE,CAAC,UAAU,EACnB,SAAS,EAAE,CAAC,WAAW,KACtB,MAAM,GAAG,SAMX,CAAC"}
|
|
@@ -16,8 +16,15 @@ export const getInferredType = (node, checker) => {
|
|
|
16
16
|
const expr = ts.isExpression(node) ? node : undefined;
|
|
17
17
|
const contextualType = expr ? checker.getContextualType(expr) : undefined;
|
|
18
18
|
const tsType = contextualType ?? checker.getTypeAtLocation(node);
|
|
19
|
+
// First try typeToTypeNode for simple types
|
|
19
20
|
const typeNode = checker.typeToTypeNode(tsType, node, ts.NodeBuilderFlags.None);
|
|
20
|
-
|
|
21
|
+
// If typeNode conversion works, use convertType
|
|
22
|
+
if (typeNode) {
|
|
23
|
+
return convertType(typeNode, checker);
|
|
24
|
+
}
|
|
25
|
+
// Fallback: use convertTsTypeToIr directly for complex types
|
|
26
|
+
// This handles intersection types like List_1$instance<T> that can't be converted to TypeNodes
|
|
27
|
+
return convertTsTypeToIr(tsType, checker);
|
|
21
28
|
}
|
|
22
29
|
catch {
|
|
23
30
|
// If type extraction fails, return undefined
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"helpers.js","sourceRoot":"","sources":["../../../../src/ir/converters/expressions/helpers.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,MAAM,YAAY,CAAC;AAEjC,OAAO,EAAE,WAAW,EAAE,iBAAiB,EAAE,MAAM,yBAAyB,CAAC;AAEzE;;;;GAIG;AACH,MAAM,CAAC,MAAM,eAAe,GAAG,CAC7B,IAAa,EACb,OAAuB,EACH,EAAE;IACtB,IAAI,CAAC;QACH,8EAA8E;QAC9E,iFAAiF;QACjF,qDAAqD;QACrD,MAAM,IAAI,GAAG,EAAE,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC;QACtD,MAAM,cAAc,GAAG,IAAI,CAAC,CAAC,CAAC,OAAO,CAAC,iBAAiB,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;QAC1E,MAAM,MAAM,GAAG,cAAc,IAAI,OAAO,CAAC,iBAAiB,CAAC,IAAI,CAAC,CAAC;QAEjE,MAAM,QAAQ,GAAG,OAAO,CAAC,cAAc,CACrC,MAAM,EACN,IAAI,EACJ,EAAE,CAAC,gBAAgB,CAAC,IAAI,CACzB,CAAC;
|
|
1
|
+
{"version":3,"file":"helpers.js","sourceRoot":"","sources":["../../../../src/ir/converters/expressions/helpers.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"}
|
|
@@ -0,0 +1,123 @@
|
|
|
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
|
+
/**
|
|
18
|
+
* Check if a type is an object type (inline object literal)
|
|
19
|
+
*/
|
|
20
|
+
const isObjectType = (type) => type.kind === "objectType";
|
|
21
|
+
/**
|
|
22
|
+
* Check if a union type contains any object literal types
|
|
23
|
+
*/
|
|
24
|
+
const unionContainsObjectTypes = (union) => union.types.some(isObjectType);
|
|
25
|
+
/**
|
|
26
|
+
* Generate a synthetic interface name for a union member
|
|
27
|
+
*
|
|
28
|
+
* Format: {AliasName}__{index}
|
|
29
|
+
* Example: Result__0, Result__1
|
|
30
|
+
*/
|
|
31
|
+
const generateSyntheticName = (aliasName, index) => `${aliasName}__${index}`;
|
|
32
|
+
/**
|
|
33
|
+
* Create type arguments from type parameters (for referencing synthetics)
|
|
34
|
+
*
|
|
35
|
+
* Example: [T, E] type params -> [{ kind: "typeParameterType", name: "T" }, ...]
|
|
36
|
+
*/
|
|
37
|
+
const typeParamsToTypeArgs = (typeParams) => {
|
|
38
|
+
if (!typeParams || typeParams.length === 0) {
|
|
39
|
+
return undefined;
|
|
40
|
+
}
|
|
41
|
+
return typeParams.map((tp) => ({
|
|
42
|
+
kind: "typeParameterType",
|
|
43
|
+
name: tp.name,
|
|
44
|
+
}));
|
|
45
|
+
};
|
|
46
|
+
/**
|
|
47
|
+
* Create a synthetic interface declaration from an object type
|
|
48
|
+
*/
|
|
49
|
+
const createSyntheticInterface = (objectType, name, typeParameters, isExported) => ({
|
|
50
|
+
kind: "interfaceDeclaration",
|
|
51
|
+
name,
|
|
52
|
+
typeParameters,
|
|
53
|
+
extends: [],
|
|
54
|
+
members: objectType.members,
|
|
55
|
+
isExported,
|
|
56
|
+
isStruct: false,
|
|
57
|
+
});
|
|
58
|
+
/**
|
|
59
|
+
* Create a reference type to a synthetic interface
|
|
60
|
+
*/
|
|
61
|
+
const createSyntheticReference = (name, typeArgs) => ({
|
|
62
|
+
kind: "referenceType",
|
|
63
|
+
name,
|
|
64
|
+
typeArguments: typeArgs,
|
|
65
|
+
});
|
|
66
|
+
/**
|
|
67
|
+
* Process a type alias declaration and generate synthetic interfaces if needed.
|
|
68
|
+
*
|
|
69
|
+
* If the type alias is a union containing object literal types, this will:
|
|
70
|
+
* 1. Generate a synthetic interface for each object literal member
|
|
71
|
+
* 2. Rewrite the union to use reference types to the synthetics
|
|
72
|
+
* 3. Return both the rewritten alias and the synthetic interfaces
|
|
73
|
+
*
|
|
74
|
+
* If no object literals are found, returns the original alias unchanged.
|
|
75
|
+
*/
|
|
76
|
+
export const processTypeAliasForSynthetics = (typeAlias) => {
|
|
77
|
+
const { type, name, typeParameters, isExported } = typeAlias;
|
|
78
|
+
// Only process union types
|
|
79
|
+
if (type.kind !== "unionType") {
|
|
80
|
+
return { typeAlias, syntheticInterfaces: [] };
|
|
81
|
+
}
|
|
82
|
+
const union = type;
|
|
83
|
+
// Check if union contains any object types
|
|
84
|
+
if (!unionContainsObjectTypes(union)) {
|
|
85
|
+
return { typeAlias, syntheticInterfaces: [] };
|
|
86
|
+
}
|
|
87
|
+
// Generate synthetic interfaces and rewrite union members
|
|
88
|
+
const syntheticInterfaces = [];
|
|
89
|
+
const rewrittenUnionTypes = [];
|
|
90
|
+
const typeArgs = typeParamsToTypeArgs(typeParameters);
|
|
91
|
+
let objectIndex = 0;
|
|
92
|
+
for (const memberType of union.types) {
|
|
93
|
+
if (isObjectType(memberType)) {
|
|
94
|
+
// Generate synthetic interface for this object type
|
|
95
|
+
const syntheticName = generateSyntheticName(name, objectIndex);
|
|
96
|
+
const syntheticInterface = createSyntheticInterface(memberType, syntheticName, typeParameters, isExported // Synthetic interfaces inherit export status
|
|
97
|
+
);
|
|
98
|
+
syntheticInterfaces.push(syntheticInterface);
|
|
99
|
+
// Replace object type with reference to synthetic
|
|
100
|
+
const reference = createSyntheticReference(syntheticName, typeArgs);
|
|
101
|
+
rewrittenUnionTypes.push(reference);
|
|
102
|
+
objectIndex++;
|
|
103
|
+
}
|
|
104
|
+
else {
|
|
105
|
+
// Keep non-object types as-is
|
|
106
|
+
rewrittenUnionTypes.push(memberType);
|
|
107
|
+
}
|
|
108
|
+
}
|
|
109
|
+
// Create rewritten type alias with new union
|
|
110
|
+
const rewrittenUnion = {
|
|
111
|
+
kind: "unionType",
|
|
112
|
+
types: rewrittenUnionTypes,
|
|
113
|
+
};
|
|
114
|
+
const rewrittenAlias = {
|
|
115
|
+
...typeAlias,
|
|
116
|
+
type: rewrittenUnion,
|
|
117
|
+
};
|
|
118
|
+
return {
|
|
119
|
+
typeAlias: rewrittenAlias,
|
|
120
|
+
syntheticInterfaces,
|
|
121
|
+
};
|
|
122
|
+
};
|
|
123
|
+
//# sourceMappingURL=synthetic-types.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"synthetic-types.js","sourceRoot":"","sources":["../../../src/ir/converters/synthetic-types.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAsBH;;GAEG;AACH,MAAM,YAAY,GAAG,CAAC,IAAY,EAAwB,EAAE,CAC1D,IAAI,CAAC,IAAI,KAAK,YAAY,CAAC;AAE7B;;GAEG;AACH,MAAM,wBAAwB,GAAG,CAAC,KAAkB,EAAW,EAAE,CAC/D,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;AAEjC;;;;;GAKG;AACH,MAAM,qBAAqB,GAAG,CAAC,SAAiB,EAAE,KAAa,EAAU,EAAE,CACzE,GAAG,SAAS,KAAK,KAAK,EAAE,CAAC;AAE3B;;;;GAIG;AACH,MAAM,oBAAoB,GAAG,CAC3B,UAAkD,EACnB,EAAE;IACjC,IAAI,CAAC,UAAU,IAAI,UAAU,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC3C,OAAO,SAAS,CAAC;IACnB,CAAC;IAED,OAAO,UAAU,CAAC,GAAG,CACnB,CAAC,EAAE,EAAU,EAAE,CAAC,CAAC;QACf,IAAI,EAAE,mBAAmB;QACzB,IAAI,EAAE,EAAE,CAAC,IAAI;KACd,CAAC,CACH,CAAC;AACJ,CAAC,CAAC;AAEF;;GAEG;AACH,MAAM,wBAAwB,GAAG,CAC/B,UAAwB,EACxB,IAAY,EACZ,cAAsD,EACtD,UAAmB,EACK,EAAE,CAAC,CAAC;IAC5B,IAAI,EAAE,sBAAsB;IAC5B,IAAI;IACJ,cAAc;IACd,OAAO,EAAE,EAAE;IACX,OAAO,EAAE,UAAU,CAAC,OAAO;IAC3B,UAAU;IACV,QAAQ,EAAE,KAAK;CAChB,CAAC,CAAC;AAEH;;GAEG;AACH,MAAM,wBAAwB,GAAG,CAC/B,IAAY,EACZ,QAAuC,EACtB,EAAE,CAAC,CAAC;IACrB,IAAI,EAAE,eAAe;IACrB,IAAI;IACJ,aAAa,EAAE,QAAQ;CACxB,CAAC,CAAC;AAEH;;;;;;;;;GASG;AACH,MAAM,CAAC,MAAM,6BAA6B,GAAG,CAC3C,SAAiC,EACZ,EAAE;IACvB,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,cAAc,EAAE,UAAU,EAAE,GAAG,SAAS,CAAC;IAE7D,2BAA2B;IAC3B,IAAI,IAAI,CAAC,IAAI,KAAK,WAAW,EAAE,CAAC;QAC9B,OAAO,EAAE,SAAS,EAAE,mBAAmB,EAAE,EAAE,EAAE,CAAC;IAChD,CAAC;IAED,MAAM,KAAK,GAAG,IAAmB,CAAC;IAElC,2CAA2C;IAC3C,IAAI,CAAC,wBAAwB,CAAC,KAAK,CAAC,EAAE,CAAC;QACrC,OAAO,EAAE,SAAS,EAAE,mBAAmB,EAAE,EAAE,EAAE,CAAC;IAChD,CAAC;IAED,0DAA0D;IAC1D,MAAM,mBAAmB,GAA6B,EAAE,CAAC;IACzD,MAAM,mBAAmB,GAAa,EAAE,CAAC;IACzC,MAAM,QAAQ,GAAG,oBAAoB,CAAC,cAAc,CAAC,CAAC;IAEtD,IAAI,WAAW,GAAG,CAAC,CAAC;IACpB,KAAK,MAAM,UAAU,IAAI,KAAK,CAAC,KAAK,EAAE,CAAC;QACrC,IAAI,YAAY,CAAC,UAAU,CAAC,EAAE,CAAC;YAC7B,oDAAoD;YACpD,MAAM,aAAa,GAAG,qBAAqB,CAAC,IAAI,EAAE,WAAW,CAAC,CAAC;YAC/D,MAAM,kBAAkB,GAAG,wBAAwB,CACjD,UAAU,EACV,aAAa,EACb,cAAc,EACd,UAAU,CAAC,6CAA6C;aACzD,CAAC;YACF,mBAAmB,CAAC,IAAI,CAAC,kBAAkB,CAAC,CAAC;YAE7C,kDAAkD;YAClD,MAAM,SAAS,GAAG,wBAAwB,CAAC,aAAa,EAAE,QAAQ,CAAC,CAAC;YACpE,mBAAmB,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;YAEpC,WAAW,EAAE,CAAC;QAChB,CAAC;aAAM,CAAC;YACN,8BAA8B;YAC9B,mBAAmB,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;QACvC,CAAC;IACH,CAAC;IAED,6CAA6C;IAC7C,MAAM,cAAc,GAAgB;QAClC,IAAI,EAAE,WAAW;QACjB,KAAK,EAAE,mBAAmB;KAC3B,CAAC;IAEF,MAAM,cAAc,GAA2B;QAC7C,GAAG,SAAS;QACZ,IAAI,EAAE,cAAc;KACrB,CAAC;IAEF,OAAO;QACL,SAAS,EAAE,cAAc;QACzB,mBAAmB;KACpB,CAAC;AACJ,CAAC,CAAC"}
|