@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
|
@@ -8,7 +8,7 @@ import * as ts from "typescript";
|
|
|
8
8
|
import { buildIrModule } from "./builder.js";
|
|
9
9
|
import { DotnetMetadataRegistry } from "../dotnet-metadata.js";
|
|
10
10
|
import { BindingRegistry } from "../program/bindings.js";
|
|
11
|
-
import {
|
|
11
|
+
import { createClrBindingsResolver } from "../resolver/clr-bindings-resolver.js";
|
|
12
12
|
describe("Hierarchical Bindings End-to-End", () => {
|
|
13
13
|
it("should resolve hierarchical bindings in IR for member access chain", () => {
|
|
14
14
|
// TypeScript source with systemLinq.enumerable.selectMany
|
|
@@ -71,11 +71,16 @@ describe("Hierarchical Bindings End-to-End", () => {
|
|
|
71
71
|
const testProgram = {
|
|
72
72
|
program,
|
|
73
73
|
checker: program.getTypeChecker(),
|
|
74
|
-
options: {
|
|
74
|
+
options: {
|
|
75
|
+
projectRoot: "/test",
|
|
76
|
+
sourceRoot: "/test",
|
|
77
|
+
rootNamespace: "TestApp",
|
|
78
|
+
strict: true,
|
|
79
|
+
},
|
|
75
80
|
sourceFiles: [sourceFile],
|
|
76
81
|
metadata: new DotnetMetadataRegistry(),
|
|
77
82
|
bindings,
|
|
78
|
-
|
|
83
|
+
clrResolver: createClrBindingsResolver("/test"),
|
|
79
84
|
};
|
|
80
85
|
// Build IR
|
|
81
86
|
const irResult = buildIrModule(sourceFile, testProgram, {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"hierarchical-bindings-e2e.test.js","sourceRoot":"","sources":["../../src/ir/hierarchical-bindings-e2e.test.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,QAAQ,EAAE,EAAE,EAAE,MAAM,OAAO,CAAC;AACrC,OAAO,EAAE,MAAM,EAAE,MAAM,MAAM,CAAC;AAC9B,OAAO,KAAK,EAAE,MAAM,YAAY,CAAC;AACjC,OAAO,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAC7C,OAAO,EAAE,sBAAsB,EAAE,MAAM,uBAAuB,CAAC;AAC/D,OAAO,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AACzD,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"hierarchical-bindings-e2e.test.js","sourceRoot":"","sources":["../../src/ir/hierarchical-bindings-e2e.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -4,10 +4,25 @@
|
|
|
4
4
|
*/
|
|
5
5
|
import * as ts from "typescript";
|
|
6
6
|
import { IrStatement } from "./types.js";
|
|
7
|
+
/**
|
|
8
|
+
* Result type for statement conversion.
|
|
9
|
+
* Some converters (like type aliases with synthetic types) return multiple statements.
|
|
10
|
+
*/
|
|
11
|
+
export type ConvertStatementResult = IrStatement | readonly IrStatement[] | null;
|
|
7
12
|
/**
|
|
8
13
|
* Main statement converter dispatcher
|
|
9
14
|
*/
|
|
10
|
-
export declare const convertStatement: (node: ts.Node, checker: ts.TypeChecker) =>
|
|
15
|
+
export declare const convertStatement: (node: ts.Node, checker: ts.TypeChecker) => ConvertStatementResult;
|
|
16
|
+
/**
|
|
17
|
+
* Flatten a convert statement result into an array of statements.
|
|
18
|
+
* Handles both single statements and arrays.
|
|
19
|
+
*/
|
|
20
|
+
export declare const flattenStatementResult: (result: ConvertStatementResult) => readonly IrStatement[];
|
|
21
|
+
/**
|
|
22
|
+
* Convert a statement and return a single statement (for contexts where arrays not expected).
|
|
23
|
+
* Type aliases inside control flow will return the first statement (usually the only one).
|
|
24
|
+
*/
|
|
25
|
+
export declare const convertStatementSingle: (node: ts.Node, checker: ts.TypeChecker) => IrStatement | null;
|
|
11
26
|
export { convertBlockStatement } from "./converters/statements/control.js";
|
|
12
27
|
export { convertParameters } from "./converters/statements/helpers.js";
|
|
13
28
|
export { setMetadataRegistry, setBindingRegistry, } from "./converters/statements/declarations.js";
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"statement-converter.d.ts","sourceRoot":"","sources":["../../src/ir/statement-converter.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,MAAM,YAAY,CAAC;AACjC,OAAO,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAwBzC;;GAEG;AACH,eAAO,MAAM,gBAAgB,GAC3B,MAAM,EAAE,CAAC,IAAI,EACb,SAAS,EAAE,CAAC,WAAW,KACtB,WAAW,GAAG,
|
|
1
|
+
{"version":3,"file":"statement-converter.d.ts","sourceRoot":"","sources":["../../src/ir/statement-converter.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,MAAM,YAAY,CAAC;AACjC,OAAO,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAwBzC;;;GAGG;AACH,MAAM,MAAM,sBAAsB,GAC9B,WAAW,GACX,SAAS,WAAW,EAAE,GACtB,IAAI,CAAC;AAET;;GAEG;AACH,eAAO,MAAM,gBAAgB,GAC3B,MAAM,EAAE,CAAC,IAAI,EACb,SAAS,EAAE,CAAC,WAAW,KACtB,sBAoFF,CAAC;AAEF;;;GAGG;AACH,eAAO,MAAM,sBAAsB,GACjC,QAAQ,sBAAsB,KAC7B,SAAS,WAAW,EAStB,CAAC;AAEF;;;GAGG;AACH,eAAO,MAAM,sBAAsB,GACjC,MAAM,EAAE,CAAC,IAAI,EACb,SAAS,EAAE,CAAC,WAAW,KACtB,WAAW,GAAG,IAYhB,CAAC;AAGF,OAAO,EAAE,qBAAqB,EAAE,MAAM,oCAAoC,CAAC;AAC3E,OAAO,EAAE,iBAAiB,EAAE,MAAM,oCAAoC,CAAC;AACvE,OAAO,EACL,mBAAmB,EACnB,kBAAkB,GACnB,MAAM,yCAAyC,CAAC"}
|
|
@@ -26,6 +26,7 @@ export const convertStatement = (node, checker) => {
|
|
|
26
26
|
if (ts.isEnumDeclaration(node)) {
|
|
27
27
|
return convertEnumDeclaration(node, checker);
|
|
28
28
|
}
|
|
29
|
+
// Type alias declarations may return multiple statements (synthetic interfaces + alias)
|
|
29
30
|
if (ts.isTypeAliasDeclaration(node)) {
|
|
30
31
|
return convertTypeAliasDeclaration(node, checker);
|
|
31
32
|
}
|
|
@@ -93,6 +94,37 @@ export const convertStatement = (node, checker) => {
|
|
|
93
94
|
}
|
|
94
95
|
return null;
|
|
95
96
|
};
|
|
97
|
+
/**
|
|
98
|
+
* Flatten a convert statement result into an array of statements.
|
|
99
|
+
* Handles both single statements and arrays.
|
|
100
|
+
*/
|
|
101
|
+
export const flattenStatementResult = (result) => {
|
|
102
|
+
if (result === null) {
|
|
103
|
+
return [];
|
|
104
|
+
}
|
|
105
|
+
if (Array.isArray(result)) {
|
|
106
|
+
return result;
|
|
107
|
+
}
|
|
108
|
+
// At this point, result is IrStatement (not array, not null)
|
|
109
|
+
return [result];
|
|
110
|
+
};
|
|
111
|
+
/**
|
|
112
|
+
* Convert a statement and return a single statement (for contexts where arrays not expected).
|
|
113
|
+
* Type aliases inside control flow will return the first statement (usually the only one).
|
|
114
|
+
*/
|
|
115
|
+
export const convertStatementSingle = (node, checker) => {
|
|
116
|
+
const result = convertStatement(node, checker);
|
|
117
|
+
if (result === null) {
|
|
118
|
+
return null;
|
|
119
|
+
}
|
|
120
|
+
if (Array.isArray(result)) {
|
|
121
|
+
// In control flow contexts, we expect single statements
|
|
122
|
+
// Return first statement (type aliases in control flow are rare)
|
|
123
|
+
return result[0] ?? null;
|
|
124
|
+
}
|
|
125
|
+
// At this point, result is IrStatement (not array, not null)
|
|
126
|
+
return result;
|
|
127
|
+
};
|
|
96
128
|
// Re-export commonly used functions for backward compatibility
|
|
97
129
|
export { convertBlockStatement } from "./converters/statements/control.js";
|
|
98
130
|
export { convertParameters } from "./converters/statements/helpers.js";
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"statement-converter.js","sourceRoot":"","sources":["../../src/ir/statement-converter.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,MAAM,YAAY,CAAC;AAEjC,OAAO,EAAE,iBAAiB,EAAE,MAAM,2BAA2B,CAAC;AAE9D,6CAA6C;AAC7C,OAAO,EACL,wBAAwB,EACxB,0BAA0B,EAC1B,uBAAuB,EACvB,2BAA2B,EAC3B,sBAAsB,EACtB,2BAA2B,GAC5B,MAAM,yCAAyC,CAAC;AAEjD,OAAO,EACL,kBAAkB,EAClB,qBAAqB,EACrB,mBAAmB,EACnB,qBAAqB,EACrB,qBAAqB,EACrB,sBAAsB,EACtB,mBAAmB,EACnB,qBAAqB,GACtB,MAAM,oCAAoC,CAAC;
|
|
1
|
+
{"version":3,"file":"statement-converter.js","sourceRoot":"","sources":["../../src/ir/statement-converter.ts"],"names":[],"mappings":"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"}
|
|
@@ -3,5 +3,5 @@
|
|
|
3
3
|
*/
|
|
4
4
|
export { convertType, convertFunctionType, convertObjectType, } from "./converter.js";
|
|
5
5
|
export { convertBindingName } from "./patterns.js";
|
|
6
|
-
export { inferType, convertTsTypeToIr } from "./inference.js";
|
|
6
|
+
export { inferType, convertTsTypeToIr, inferLambdaParamTypes, type LambdaParamInferenceResult, } from "./inference.js";
|
|
7
7
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/ir/type-converter/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EACL,WAAW,EACX,mBAAmB,EACnB,iBAAiB,GAClB,MAAM,gBAAgB,CAAC;AACxB,OAAO,EAAE,kBAAkB,EAAE,MAAM,eAAe,CAAC;AACnD,OAAO,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/ir/type-converter/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EACL,WAAW,EACX,mBAAmB,EACnB,iBAAiB,GAClB,MAAM,gBAAgB,CAAC;AACxB,OAAO,EAAE,kBAAkB,EAAE,MAAM,eAAe,CAAC;AACnD,OAAO,EACL,SAAS,EACT,iBAAiB,EACjB,qBAAqB,EACrB,KAAK,0BAA0B,GAChC,MAAM,gBAAgB,CAAC"}
|
|
@@ -3,5 +3,5 @@
|
|
|
3
3
|
*/
|
|
4
4
|
export { convertType, convertFunctionType, convertObjectType, } from "./converter.js";
|
|
5
5
|
export { convertBindingName } from "./patterns.js";
|
|
6
|
-
export { inferType, convertTsTypeToIr } from "./inference.js";
|
|
6
|
+
export { inferType, convertTsTypeToIr, inferLambdaParamTypes, } from "./inference.js";
|
|
7
7
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/ir/type-converter/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EACL,WAAW,EACX,mBAAmB,EACnB,iBAAiB,GAClB,MAAM,gBAAgB,CAAC;AACxB,OAAO,EAAE,kBAAkB,EAAE,MAAM,eAAe,CAAC;AACnD,OAAO,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/ir/type-converter/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EACL,WAAW,EACX,mBAAmB,EACnB,iBAAiB,GAClB,MAAM,gBAAgB,CAAC;AACxB,OAAO,EAAE,kBAAkB,EAAE,MAAM,eAAe,CAAC;AACnD,OAAO,EACL,SAAS,EACT,iBAAiB,EACjB,qBAAqB,GAEtB,MAAM,gBAAgB,CAAC"}
|
|
@@ -4,9 +4,21 @@
|
|
|
4
4
|
* This uses the TypeChecker to get the inferred type and converts it to IR.
|
|
5
5
|
* Used for declarations without explicit type annotations where the type
|
|
6
6
|
* must be inferred from the initializer.
|
|
7
|
+
*
|
|
8
|
+
* Also provides contextual signature inference for lambda parameters.
|
|
7
9
|
*/
|
|
8
10
|
import * as ts from "typescript";
|
|
9
11
|
import type { IrType } from "../types.js";
|
|
12
|
+
/**
|
|
13
|
+
* Result of inferring lambda parameter types from contextual signature.
|
|
14
|
+
* Returns array of IrType (one per parameter) if all params can be inferred,
|
|
15
|
+
* or undefined if inference fails for any parameter.
|
|
16
|
+
*/
|
|
17
|
+
export type LambdaParamInferenceResult = {
|
|
18
|
+
readonly paramTypes: readonly (IrType | undefined)[];
|
|
19
|
+
readonly allInferred: boolean;
|
|
20
|
+
};
|
|
21
|
+
export declare const inferLambdaParamTypes: (node: ts.ArrowFunction | ts.FunctionExpression, checker: ts.TypeChecker) => LambdaParamInferenceResult | undefined;
|
|
10
22
|
/**
|
|
11
23
|
* Infer IR type from a declaration node using the TypeChecker.
|
|
12
24
|
* Returns undefined for complex types that cannot be easily represented.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"inference.d.ts","sourceRoot":"","sources":["../../../src/ir/type-converter/inference.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"inference.d.ts","sourceRoot":"","sources":["../../../src/ir/type-converter/inference.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,KAAK,EAAE,MAAM,YAAY,CAAC;AACjC,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAG1C;;;;GAIG;AACH,MAAM,MAAM,0BAA0B,GAAG;IACvC,QAAQ,CAAC,UAAU,EAAE,SAAS,CAAC,MAAM,GAAG,SAAS,CAAC,EAAE,CAAC;IACrD,QAAQ,CAAC,WAAW,EAAE,OAAO,CAAC;CAC/B,CAAC;AA4CF,eAAO,MAAM,qBAAqB,GAChC,MAAM,EAAE,CAAC,aAAa,GAAG,EAAE,CAAC,kBAAkB,EAC9C,SAAS,EAAE,CAAC,WAAW,KACtB,0BAA0B,GAAG,SAkG/B,CAAC;AAEF;;;GAGG;AACH,eAAO,MAAM,SAAS,GACpB,MAAM,EAAE,CAAC,mBAAmB,GAAG,EAAE,CAAC,mBAAmB,EACrD,SAAS,EAAE,CAAC,WAAW,KACtB,MAAM,GAAG,SAGX,CAAC;AAEF;;;GAGG;AACH,eAAO,MAAM,iBAAiB,GAC5B,MAAM,EAAE,CAAC,IAAI,EACb,SAAS,EAAE,CAAC,WAAW,KACtB,MAAM,GAAG,SAiHX,CAAC"}
|
|
@@ -4,8 +4,126 @@
|
|
|
4
4
|
* This uses the TypeChecker to get the inferred type and converts it to IR.
|
|
5
5
|
* Used for declarations without explicit type annotations where the type
|
|
6
6
|
* must be inferred from the initializer.
|
|
7
|
+
*
|
|
8
|
+
* Also provides contextual signature inference for lambda parameters.
|
|
7
9
|
*/
|
|
8
10
|
import * as ts from "typescript";
|
|
11
|
+
import { convertType } from "./converter.js";
|
|
12
|
+
/**
|
|
13
|
+
* Infer parameter types for a lambda (arrow function or function expression)
|
|
14
|
+
* from its contextual signature.
|
|
15
|
+
*
|
|
16
|
+
* Uses checker.getContextualType() + getCallSignatures() to find the contextual
|
|
17
|
+
* signature for the lambda.
|
|
18
|
+
*
|
|
19
|
+
* Returns undefined if no contextual signature exists (free-floating lambda).
|
|
20
|
+
* Returns paramTypes array where each element is IrType if inferred, or undefined if not.
|
|
21
|
+
*/
|
|
22
|
+
/**
|
|
23
|
+
* Extract the non-nullish callable type from a contextual type.
|
|
24
|
+
* For optional callbacks like sort's comparator, the contextual type is
|
|
25
|
+
* `((a: T, b: T) => number) | undefined`. We need to extract the function type.
|
|
26
|
+
*/
|
|
27
|
+
const extractCallableType = (type) => {
|
|
28
|
+
// If type has call signatures directly, use it
|
|
29
|
+
if (type.getCallSignatures().length > 0) {
|
|
30
|
+
return type;
|
|
31
|
+
}
|
|
32
|
+
// If it's a union, try to find a callable member (excluding undefined/null)
|
|
33
|
+
if (type.flags & ts.TypeFlags.Union) {
|
|
34
|
+
const unionType = type;
|
|
35
|
+
for (const member of unionType.types) {
|
|
36
|
+
// Skip undefined and null
|
|
37
|
+
if (member.flags & ts.TypeFlags.Undefined ||
|
|
38
|
+
member.flags & ts.TypeFlags.Null) {
|
|
39
|
+
continue;
|
|
40
|
+
}
|
|
41
|
+
// Check if this member has call signatures
|
|
42
|
+
if (member.getCallSignatures().length > 0) {
|
|
43
|
+
return member;
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
return undefined;
|
|
48
|
+
};
|
|
49
|
+
export const inferLambdaParamTypes = (node, checker) => {
|
|
50
|
+
// Get contextual type for the lambda
|
|
51
|
+
const contextualType = checker.getContextualType(node);
|
|
52
|
+
if (!contextualType) {
|
|
53
|
+
return undefined; // No contextual type - can't infer
|
|
54
|
+
}
|
|
55
|
+
// Extract callable type (handles union with undefined for optional callbacks)
|
|
56
|
+
const callableType = extractCallableType(contextualType);
|
|
57
|
+
if (!callableType) {
|
|
58
|
+
return undefined; // No callable type found
|
|
59
|
+
}
|
|
60
|
+
// Get call signatures from callable type
|
|
61
|
+
const signatures = callableType.getCallSignatures();
|
|
62
|
+
if (signatures.length === 0) {
|
|
63
|
+
return undefined; // No call signature - can't infer
|
|
64
|
+
}
|
|
65
|
+
// Pick signature that can cover lambda arity (avoid overload mismatches)
|
|
66
|
+
const signature = signatures.find((s) => s.getParameters().length >= node.parameters.length) ?? signatures[0];
|
|
67
|
+
if (!signature) {
|
|
68
|
+
return undefined;
|
|
69
|
+
}
|
|
70
|
+
const sigParams = signature.getParameters();
|
|
71
|
+
const paramTypes = [];
|
|
72
|
+
let allInferred = true;
|
|
73
|
+
for (let i = 0; i < node.parameters.length; i++) {
|
|
74
|
+
const param = node.parameters[i];
|
|
75
|
+
if (!param) {
|
|
76
|
+
paramTypes.push(undefined);
|
|
77
|
+
allInferred = false;
|
|
78
|
+
continue;
|
|
79
|
+
}
|
|
80
|
+
// If param has explicit type annotation, don't need inference
|
|
81
|
+
if (param.type) {
|
|
82
|
+
paramTypes.push(undefined); // Will use explicit type
|
|
83
|
+
continue;
|
|
84
|
+
}
|
|
85
|
+
// Get the corresponding signature parameter
|
|
86
|
+
const sigParam = sigParams[i];
|
|
87
|
+
if (!sigParam) {
|
|
88
|
+
// Lambda has more params than signature provides
|
|
89
|
+
paramTypes.push(undefined);
|
|
90
|
+
allInferred = false;
|
|
91
|
+
continue;
|
|
92
|
+
}
|
|
93
|
+
// Get the TS type for this parameter from the signature
|
|
94
|
+
const tsType = checker.getTypeOfSymbolAtLocation(sigParam, sigParam.valueDeclaration ?? node);
|
|
95
|
+
// A1: Contextual any/unknown from lib.d.ts is acceptable - map to unknownType
|
|
96
|
+
// This enables Promise executor inference where reject has `any`
|
|
97
|
+
if (tsType.flags & (ts.TypeFlags.Any | ts.TypeFlags.Unknown)) {
|
|
98
|
+
paramTypes.push({ kind: "unknownType" });
|
|
99
|
+
continue; // Don't set allInferred=false - we did infer something safe
|
|
100
|
+
}
|
|
101
|
+
// A2: Prefer typeToTypeNode → convertType (handles function types)
|
|
102
|
+
// convertTsTypeToIr returns undefined for callable signatures
|
|
103
|
+
const typeNode = checker.typeToTypeNode(tsType, param ?? node, ts.NodeBuilderFlags.None);
|
|
104
|
+
let irType;
|
|
105
|
+
if (typeNode) {
|
|
106
|
+
// Guard: if typeToTypeNode produced AnyKeyword, use unknownType
|
|
107
|
+
if (typeNode.kind === ts.SyntaxKind.AnyKeyword) {
|
|
108
|
+
irType = { kind: "unknownType" };
|
|
109
|
+
}
|
|
110
|
+
else {
|
|
111
|
+
irType = convertType(typeNode, checker);
|
|
112
|
+
// Extra safety: if convertType somehow produced anyType, coerce to unknownType
|
|
113
|
+
if (irType && irType.kind === "anyType") {
|
|
114
|
+
irType = { kind: "unknownType" };
|
|
115
|
+
}
|
|
116
|
+
}
|
|
117
|
+
}
|
|
118
|
+
else {
|
|
119
|
+
// Fallback to convertTsTypeToIr for cases TS can't produce a node
|
|
120
|
+
irType = convertTsTypeToIr(tsType, checker);
|
|
121
|
+
}
|
|
122
|
+
// Final fallback: use unknownType rather than failing inference
|
|
123
|
+
paramTypes.push(irType ?? { kind: "unknownType" });
|
|
124
|
+
}
|
|
125
|
+
return { paramTypes, allInferred };
|
|
126
|
+
};
|
|
9
127
|
/**
|
|
10
128
|
* Infer IR type from a declaration node using the TypeChecker.
|
|
11
129
|
* Returns undefined for complex types that cannot be easily represented.
|
|
@@ -44,8 +162,9 @@ export const convertTsTypeToIr = (type, checker) => {
|
|
|
44
162
|
// Check for array type
|
|
45
163
|
if (checker.isArrayType(type)) {
|
|
46
164
|
const typeArgs = checker.getTypeArguments(type);
|
|
47
|
-
|
|
48
|
-
|
|
165
|
+
const firstArg = typeArgs[0];
|
|
166
|
+
if (firstArg !== undefined) {
|
|
167
|
+
const elementType = convertTsTypeToIr(firstArg, checker);
|
|
49
168
|
if (elementType) {
|
|
50
169
|
return { kind: "arrayType", elementType };
|
|
51
170
|
}
|
|
@@ -89,15 +208,35 @@ export const convertTsTypeToIr = (type, checker) => {
|
|
|
89
208
|
if (flags & ts.TypeFlags.TypeParameter) {
|
|
90
209
|
const typeParam = type;
|
|
91
210
|
const name = typeParam.symbol?.name ?? "T";
|
|
92
|
-
return { kind: "
|
|
211
|
+
return { kind: "typeParameterType", name };
|
|
93
212
|
}
|
|
94
213
|
// Any and unknown
|
|
95
214
|
if (flags & ts.TypeFlags.Any || flags & ts.TypeFlags.Unknown) {
|
|
96
215
|
return { kind: "anyType" };
|
|
97
216
|
}
|
|
98
|
-
// Union
|
|
99
|
-
if (flags & ts.TypeFlags.Union
|
|
100
|
-
|
|
217
|
+
// Union types - convert each member, require all to succeed
|
|
218
|
+
if (flags & ts.TypeFlags.Union) {
|
|
219
|
+
const unionType = type;
|
|
220
|
+
const memberTypes = unionType.types
|
|
221
|
+
.map((t) => convertTsTypeToIr(t, checker))
|
|
222
|
+
.filter((t) => t !== undefined);
|
|
223
|
+
// If any member failed conversion, return undefined (keep TSN7405 strict)
|
|
224
|
+
if (memberTypes.length !== unionType.types.length) {
|
|
225
|
+
return undefined;
|
|
226
|
+
}
|
|
227
|
+
return { kind: "unionType", types: memberTypes };
|
|
228
|
+
}
|
|
229
|
+
// Intersection types - convert each member, require all to succeed
|
|
230
|
+
if (flags & ts.TypeFlags.Intersection) {
|
|
231
|
+
const intersectionType = type;
|
|
232
|
+
const memberTypes = intersectionType.types
|
|
233
|
+
.map((t) => convertTsTypeToIr(t, checker))
|
|
234
|
+
.filter((t) => t !== undefined);
|
|
235
|
+
// If any member failed conversion, return undefined (keep TSN7405 strict)
|
|
236
|
+
if (memberTypes.length !== intersectionType.types.length) {
|
|
237
|
+
return undefined;
|
|
238
|
+
}
|
|
239
|
+
return { kind: "intersectionType", types: memberTypes };
|
|
101
240
|
}
|
|
102
241
|
return undefined;
|
|
103
242
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"inference.js","sourceRoot":"","sources":["../../../src/ir/type-converter/inference.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"inference.js","sourceRoot":"","sources":["../../../src/ir/type-converter/inference.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"objects.d.ts","sourceRoot":"","sources":["../../../src/ir/type-converter/objects.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,MAAM,YAAY,CAAC;AACjC,OAAO,EACL,MAAM,EACN,YAAY,EACZ,gBAAgB,EAIjB,MAAM,aAAa,CAAC;AAGrB;;;;;;;;GAQG;AACH,eAAO,MAAM,iBAAiB,GAC5B,MAAM,EAAE,CAAC,eAAe,EACxB,SAAS,EAAE,CAAC,WAAW,EACvB,aAAa,CAAC,IAAI,EAAE,EAAE,CAAC,QAAQ,EAAE,OAAO,EAAE,EAAE,CAAC,WAAW,KAAK,MAAM,KAClE,YAAY,GAAG,
|
|
1
|
+
{"version":3,"file":"objects.d.ts","sourceRoot":"","sources":["../../../src/ir/type-converter/objects.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,MAAM,YAAY,CAAC;AACjC,OAAO,EACL,MAAM,EACN,YAAY,EACZ,gBAAgB,EAIjB,MAAM,aAAa,CAAC;AAGrB;;;;;;;;GAQG;AACH,eAAO,MAAM,iBAAiB,GAC5B,MAAM,EAAE,CAAC,eAAe,EACxB,SAAS,EAAE,CAAC,WAAW,EACvB,aAAa,CAAC,IAAI,EAAE,EAAE,CAAC,QAAQ,EAAE,OAAO,EAAE,EAAE,CAAC,WAAW,KAAK,MAAM,KAClE,YAAY,GAAG,gBAgEjB,CAAC"}
|
|
@@ -17,9 +17,10 @@ export const convertObjectType = (node, checker, convertType) => {
|
|
|
17
17
|
const indexSignatures = node.members.filter(ts.isIndexSignatureDeclaration);
|
|
18
18
|
const otherMembers = node.members.filter((m) => !ts.isIndexSignatureDeclaration(m));
|
|
19
19
|
// If ONLY index signature(s) exist, convert to dictionary type
|
|
20
|
-
|
|
20
|
+
const firstIndexSig = indexSignatures[0];
|
|
21
|
+
if (firstIndexSig !== undefined && otherMembers.length === 0) {
|
|
21
22
|
// Use the first index signature (TypeScript allows multiple, but we take first)
|
|
22
|
-
const indexSig =
|
|
23
|
+
const indexSig = firstIndexSig;
|
|
23
24
|
const keyParam = indexSig.parameters[0];
|
|
24
25
|
// Determine key type from parameter type
|
|
25
26
|
const keyType = keyParam?.type
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"objects.js","sourceRoot":"","sources":["../../../src/ir/type-converter/objects.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,MAAM,YAAY,CAAC;AASjC,OAAO,EAAE,iBAAiB,IAAI,8BAA8B,EAAE,MAAM,2BAA2B,CAAC;AAEhG;;;;;;;;GAQG;AACH,MAAM,CAAC,MAAM,iBAAiB,GAAG,CAC/B,IAAwB,EACxB,OAAuB,EACvB,WAAmE,EAClC,EAAE;IACnC,yDAAyD;IACzD,MAAM,eAAe,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC,2BAA2B,CAAC,CAAC;IAC5E,MAAM,YAAY,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,CACtC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC,2BAA2B,CAAC,CAAC,CAAC,CAC1C,CAAC;IAEF,+DAA+D;IAC/D,
|
|
1
|
+
{"version":3,"file":"objects.js","sourceRoot":"","sources":["../../../src/ir/type-converter/objects.ts"],"names":[],"mappings":"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"}
|
|
@@ -2,12 +2,12 @@
|
|
|
2
2
|
* Type conversion orchestrator
|
|
3
3
|
*/
|
|
4
4
|
import * as ts from "typescript";
|
|
5
|
-
import { IrType, IrFunctionType, IrObjectType, IrDictionaryType } from "../types.js";
|
|
5
|
+
import { IrType, IrFunctionType, IrObjectType, IrDictionaryType, IrTupleType } from "../types.js";
|
|
6
6
|
/**
|
|
7
7
|
* Convert TypeScript type node to IR type
|
|
8
8
|
*/
|
|
9
9
|
export declare const convertType: (typeNode: ts.TypeNode, checker: ts.TypeChecker) => IrType;
|
|
10
10
|
export { convertFunctionType } from "./functions.js";
|
|
11
11
|
export { convertObjectType } from "./objects.js";
|
|
12
|
-
export type { IrFunctionType, IrObjectType, IrDictionaryType };
|
|
12
|
+
export type { IrFunctionType, IrObjectType, IrDictionaryType, IrTupleType };
|
|
13
13
|
//# sourceMappingURL=orchestrator.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"orchestrator.d.ts","sourceRoot":"","sources":["../../../src/ir/type-converter/orchestrator.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,MAAM,YAAY,CAAC;AACjC,OAAO,EACL,MAAM,EACN,cAAc,EACd,YAAY,EACZ,gBAAgB,
|
|
1
|
+
{"version":3,"file":"orchestrator.d.ts","sourceRoot":"","sources":["../../../src/ir/type-converter/orchestrator.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,MAAM,YAAY,CAAC;AACjC,OAAO,EACL,MAAM,EACN,cAAc,EACd,YAAY,EACZ,gBAAgB,EAChB,WAAW,EACZ,MAAM,aAAa,CAAC;AAYrB;;GAEG;AACH,eAAO,MAAM,WAAW,GACtB,UAAU,EAAE,CAAC,QAAQ,EACrB,SAAS,EAAE,CAAC,WAAW,KACtB,MA4FF,CAAC;AAGF,OAAO,EAAE,mBAAmB,EAAE,MAAM,gBAAgB,CAAC;AACrD,OAAO,EAAE,iBAAiB,EAAE,MAAM,cAAc,CAAC;AAGjD,YAAY,EAAE,cAAc,EAAE,YAAY,EAAE,gBAAgB,EAAE,WAAW,EAAE,CAAC"}
|
|
@@ -26,6 +26,38 @@ export const convertType = (typeNode, checker) => {
|
|
|
26
26
|
if (ts.isArrayTypeNode(typeNode)) {
|
|
27
27
|
return convertArrayType(typeNode, checker, convertType);
|
|
28
28
|
}
|
|
29
|
+
// Tuple types
|
|
30
|
+
if (ts.isTupleTypeNode(typeNode)) {
|
|
31
|
+
// Check for rest elements - not fully supported in C# ValueTuple
|
|
32
|
+
const hasRest = typeNode.elements.some((el) => ts.isRestTypeNode(el));
|
|
33
|
+
if (hasRest) {
|
|
34
|
+
// If tuple is just [...T[]] (pure variadic), treat as array type
|
|
35
|
+
// If tuple has both fixed and rest elements, fall through to anyType
|
|
36
|
+
// (TODO: add proper diagnostic for mixed variadic tuples)
|
|
37
|
+
const firstElement = typeNode.elements[0];
|
|
38
|
+
if (typeNode.elements.length === 1 &&
|
|
39
|
+
firstElement &&
|
|
40
|
+
ts.isRestTypeNode(firstElement)) {
|
|
41
|
+
if (ts.isArrayTypeNode(firstElement.type)) {
|
|
42
|
+
// [...T[]] → T[]
|
|
43
|
+
return {
|
|
44
|
+
kind: "arrayType",
|
|
45
|
+
elementType: convertType(firstElement.type.elementType, checker),
|
|
46
|
+
};
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
// Mixed variadic tuples not supported - fall through to anyType
|
|
50
|
+
return { kind: "anyType" };
|
|
51
|
+
}
|
|
52
|
+
const elementTypes = typeNode.elements.map((element) => {
|
|
53
|
+
// Handle named tuple elements (e.g., [name: string, age: number])
|
|
54
|
+
if (ts.isNamedTupleMember(element)) {
|
|
55
|
+
return convertType(element.type, checker);
|
|
56
|
+
}
|
|
57
|
+
return convertType(element, checker);
|
|
58
|
+
});
|
|
59
|
+
return { kind: "tupleType", elementTypes };
|
|
60
|
+
}
|
|
29
61
|
// Function types
|
|
30
62
|
if (ts.isFunctionTypeNode(typeNode)) {
|
|
31
63
|
return convertFunctionType(typeNode, checker, convertType);
|
|
@@ -50,6 +82,11 @@ export const convertType = (typeNode, checker) => {
|
|
|
50
82
|
if (ts.isParenthesizedTypeNode(typeNode)) {
|
|
51
83
|
return convertType(typeNode.type, checker);
|
|
52
84
|
}
|
|
85
|
+
// Type predicate return types: (x is T) has no direct C# type-level equivalent.
|
|
86
|
+
// MVP: lower to boolean so we can emit valid C# and avoid anyType/ICE.
|
|
87
|
+
if (ts.isTypePredicateNode(typeNode)) {
|
|
88
|
+
return { kind: "primitiveType", name: "boolean" };
|
|
89
|
+
}
|
|
53
90
|
// Default to any type for unsupported types
|
|
54
91
|
return { kind: "anyType" };
|
|
55
92
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"orchestrator.js","sourceRoot":"","sources":["../../../src/ir/type-converter/orchestrator.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,MAAM,YAAY,CAAC;
|
|
1
|
+
{"version":3,"file":"orchestrator.js","sourceRoot":"","sources":["../../../src/ir/type-converter/orchestrator.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"references.d.ts","sourceRoot":"","sources":["../../../src/ir/type-converter/references.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,MAAM,YAAY,CAAC;AACjC,OAAO,EAAE,MAAM,EAAoB,MAAM,aAAa,CAAC;AAIvD;;;GAGG;AACH,eAAO,MAAM,oBAAoB,GAC/B,MAAM,EAAE,CAAC,iBAAiB,EAC1B,SAAS,EAAE,CAAC,WAAW,EACvB,aAAa,CAAC,IAAI,EAAE,EAAE,CAAC,QAAQ,EAAE,OAAO,EAAE,EAAE,CAAC,WAAW,KAAK,MAAM,KAClE,
|
|
1
|
+
{"version":3,"file":"references.d.ts","sourceRoot":"","sources":["../../../src/ir/type-converter/references.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,MAAM,YAAY,CAAC;AACjC,OAAO,EAAE,MAAM,EAAoB,MAAM,aAAa,CAAC;AAIvD;;;GAGG;AACH,eAAO,MAAM,oBAAoB,GAC/B,MAAM,EAAE,CAAC,iBAAiB,EAC1B,SAAS,EAAE,CAAC,WAAW,EACvB,aAAa,CAAC,IAAI,EAAE,EAAE,CAAC,QAAQ,EAAE,OAAO,EAAE,EAAE,CAAC,WAAW,KAAK,MAAM,KAClE,MA0DF,CAAC"}
|
|
@@ -17,9 +17,12 @@ export const convertTypeReference = (node, checker, convertType) => {
|
|
|
17
17
|
return getPrimitiveType(typeName);
|
|
18
18
|
}
|
|
19
19
|
// Check for Record<K, V> utility type → convert to IrDictionaryType
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
20
|
+
const typeArgsForRecord = node.typeArguments;
|
|
21
|
+
const keyTypeNode = typeArgsForRecord?.[0];
|
|
22
|
+
const valueTypeNode = typeArgsForRecord?.[1];
|
|
23
|
+
if (typeName === "Record" && keyTypeNode && valueTypeNode) {
|
|
24
|
+
const keyType = convertType(keyTypeNode, checker);
|
|
25
|
+
const valueType = convertType(valueTypeNode, checker);
|
|
23
26
|
return {
|
|
24
27
|
kind: "dictionaryType",
|
|
25
28
|
keyType,
|
|
@@ -29,10 +32,12 @@ export const convertTypeReference = (node, checker, convertType) => {
|
|
|
29
32
|
// Check if this is a parameter modifier type (ref/out/In) from @tsonic/types
|
|
30
33
|
const registry = getParameterModifierRegistry();
|
|
31
34
|
const modifierKind = registry.getParameterModifierKind(typeName);
|
|
32
|
-
|
|
35
|
+
const typeArgsForModifier = node.typeArguments;
|
|
36
|
+
const firstModifierArg = typeArgsForModifier?.[0];
|
|
37
|
+
if (modifierKind && firstModifierArg !== undefined) {
|
|
33
38
|
// This is ref<T>, out<T>, or In<T> from @tsonic/types
|
|
34
39
|
// Convert it to a special IR type that preserves the modifier
|
|
35
|
-
const wrappedType = convertType(
|
|
40
|
+
const wrappedType = convertType(firstModifierArg, checker);
|
|
36
41
|
return {
|
|
37
42
|
kind: "referenceType",
|
|
38
43
|
name: typeName,
|
|
@@ -41,6 +46,12 @@ export const convertTypeReference = (node, checker, convertType) => {
|
|
|
41
46
|
parameterModifier: modifierKind,
|
|
42
47
|
};
|
|
43
48
|
}
|
|
49
|
+
// Check if this is a type parameter reference (e.g., T in Container<T>)
|
|
50
|
+
// Use the type checker to determine if the reference resolves to a type parameter
|
|
51
|
+
const type = checker.getTypeAtLocation(node);
|
|
52
|
+
if (type.flags & ts.TypeFlags.TypeParameter) {
|
|
53
|
+
return { kind: "typeParameterType", name: typeName };
|
|
54
|
+
}
|
|
44
55
|
// Reference type (user-defined or library)
|
|
45
56
|
return {
|
|
46
57
|
kind: "referenceType",
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"references.js","sourceRoot":"","sources":["../../../src/ir/type-converter/references.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,MAAM,YAAY,CAAC;AAEjC,OAAO,EAAE,mBAAmB,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAC;AACxE,OAAO,EAAE,4BAA4B,EAAE,MAAM,oCAAoC,CAAC;AAElF;;;GAGG;AACH,MAAM,CAAC,MAAM,oBAAoB,GAAG,CAClC,IAA0B,EAC1B,OAAuB,EACvB,WAAmE,EAC3D,EAAE;IACV,MAAM,QAAQ,GAAG,EAAE,CAAC,YAAY,CAAC,IAAI,CAAC,QAAQ,CAAC;QAC7C,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI;QACpB,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,OAAO,EAAE,CAAC;IAE5B,iCAAiC;IACjC,IAAI,mBAAmB,CAAC,QAAQ,CAAC,EAAE,CAAC;QAClC,OAAO,gBAAgB,CAAC,QAAQ,CAAC,CAAC;IACpC,CAAC;IAED,oEAAoE;IACpE,
|
|
1
|
+
{"version":3,"file":"references.js","sourceRoot":"","sources":["../../../src/ir/type-converter/references.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,MAAM,YAAY,CAAC;AAEjC,OAAO,EAAE,mBAAmB,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAC;AACxE,OAAO,EAAE,4BAA4B,EAAE,MAAM,oCAAoC,CAAC;AAElF;;;GAGG;AACH,MAAM,CAAC,MAAM,oBAAoB,GAAG,CAClC,IAA0B,EAC1B,OAAuB,EACvB,WAAmE,EAC3D,EAAE;IACV,MAAM,QAAQ,GAAG,EAAE,CAAC,YAAY,CAAC,IAAI,CAAC,QAAQ,CAAC;QAC7C,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI;QACpB,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,OAAO,EAAE,CAAC;IAE5B,iCAAiC;IACjC,IAAI,mBAAmB,CAAC,QAAQ,CAAC,EAAE,CAAC;QAClC,OAAO,gBAAgB,CAAC,QAAQ,CAAC,CAAC;IACpC,CAAC;IAED,oEAAoE;IACpE,MAAM,iBAAiB,GAAG,IAAI,CAAC,aAAa,CAAC;IAC7C,MAAM,WAAW,GAAG,iBAAiB,EAAE,CAAC,CAAC,CAAC,CAAC;IAC3C,MAAM,aAAa,GAAG,iBAAiB,EAAE,CAAC,CAAC,CAAC,CAAC;IAC7C,IAAI,QAAQ,KAAK,QAAQ,IAAI,WAAW,IAAI,aAAa,EAAE,CAAC;QAC1D,MAAM,OAAO,GAAG,WAAW,CAAC,WAAW,EAAE,OAAO,CAAC,CAAC;QAClD,MAAM,SAAS,GAAG,WAAW,CAAC,aAAa,EAAE,OAAO,CAAC,CAAC;QAEtD,OAAO;YACL,IAAI,EAAE,gBAAgB;YACtB,OAAO;YACP,SAAS;SACU,CAAC;IACxB,CAAC;IAED,6EAA6E;IAC7E,MAAM,QAAQ,GAAG,4BAA4B,EAAE,CAAC;IAChD,MAAM,YAAY,GAAG,QAAQ,CAAC,wBAAwB,CAAC,QAAQ,CAAC,CAAC;IAEjE,MAAM,mBAAmB,GAAG,IAAI,CAAC,aAAa,CAAC;IAC/C,MAAM,gBAAgB,GAAG,mBAAmB,EAAE,CAAC,CAAC,CAAC,CAAC;IAClD,IAAI,YAAY,IAAI,gBAAgB,KAAK,SAAS,EAAE,CAAC;QACnD,sDAAsD;QACtD,8DAA8D;QAC9D,MAAM,WAAW,GAAG,WAAW,CAAC,gBAAgB,EAAE,OAAO,CAAC,CAAC;QAE3D,OAAO;YACL,IAAI,EAAE,eAAe;YACrB,IAAI,EAAE,QAAQ;YACd,aAAa,EAAE,CAAC,WAAW,CAAC;YAC5B,wDAAwD;YACxD,iBAAiB,EAAE,YAAY;SACyB,CAAC;IAC7D,CAAC;IAED,wEAAwE;IACxE,kFAAkF;IAClF,MAAM,IAAI,GAAG,OAAO,CAAC,iBAAiB,CAAC,IAAI,CAAC,CAAC;IAC7C,IAAI,IAAI,CAAC,KAAK,GAAG,EAAE,CAAC,SAAS,CAAC,aAAa,EAAE,CAAC;QAC5C,OAAO,EAAE,IAAI,EAAE,mBAAmB,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC;IACvD,CAAC;IAED,2CAA2C;IAC3C,OAAO;QACL,IAAI,EAAE,eAAe;QACrB,IAAI,EAAE,QAAQ;QACd,aAAa,EAAE,IAAI,CAAC,aAAa,EAAE,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,WAAW,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC;KACvE,CAAC;AACJ,CAAC,CAAC"}
|
|
@@ -2,5 +2,5 @@
|
|
|
2
2
|
* Type converter - TypeScript types to IR types
|
|
3
3
|
* Main dispatcher - re-exports from type-converter/ subdirectory
|
|
4
4
|
*/
|
|
5
|
-
export { convertType, convertFunctionType, convertObjectType, convertBindingName, inferType, convertTsTypeToIr, } from "./type-converter/index.js";
|
|
5
|
+
export { convertType, convertFunctionType, convertObjectType, convertBindingName, inferType, convertTsTypeToIr, inferLambdaParamTypes, type LambdaParamInferenceResult, } from "./type-converter/index.js";
|
|
6
6
|
//# sourceMappingURL=type-converter.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"type-converter.d.ts","sourceRoot":"","sources":["../../src/ir/type-converter.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EACL,WAAW,EACX,mBAAmB,EACnB,iBAAiB,EACjB,kBAAkB,EAClB,SAAS,EACT,iBAAiB,
|
|
1
|
+
{"version":3,"file":"type-converter.d.ts","sourceRoot":"","sources":["../../src/ir/type-converter.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EACL,WAAW,EACX,mBAAmB,EACnB,iBAAiB,EACjB,kBAAkB,EAClB,SAAS,EACT,iBAAiB,EACjB,qBAAqB,EACrB,KAAK,0BAA0B,GAChC,MAAM,2BAA2B,CAAC"}
|