@tsonic/emitter 0.0.4 → 0.0.6
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/core/imports.d.ts.map +1 -1
- package/dist/core/imports.js +13 -9
- package/dist/core/imports.js.map +1 -1
- package/dist/core/local-types.d.ts +19 -0
- package/dist/core/local-types.d.ts.map +1 -0
- package/dist/core/local-types.js +77 -0
- package/dist/core/local-types.js.map +1 -0
- package/dist/core/module-emitter/orchestrator.d.ts.map +1 -1
- package/dist/core/module-emitter/orchestrator.js +11 -4
- package/dist/core/module-emitter/orchestrator.js.map +1 -1
- package/dist/core/module-emitter/static-container.d.ts +2 -1
- package/dist/core/module-emitter/static-container.d.ts.map +1 -1
- package/dist/core/module-emitter/static-container.js +7 -2
- package/dist/core/module-emitter/static-container.js.map +1 -1
- package/dist/core/module-map.d.ts.map +1 -1
- package/dist/core/module-map.js +6 -0
- package/dist/core/module-map.js.map +1 -1
- package/dist/core/type-resolution.d.ts +47 -0
- package/dist/core/type-resolution.d.ts.map +1 -0
- package/dist/core/type-resolution.js +283 -0
- package/dist/core/type-resolution.js.map +1 -0
- package/dist/core/type-resolution.test.d.ts +5 -0
- package/dist/core/type-resolution.test.d.ts.map +1 -0
- package/dist/core/type-resolution.test.js +271 -0
- package/dist/core/type-resolution.test.js.map +1 -0
- package/dist/emitter-types/context.d.ts +29 -0
- package/dist/emitter-types/context.d.ts.map +1 -1
- package/dist/emitter-types/context.js +39 -0
- package/dist/emitter-types/context.js.map +1 -1
- package/dist/emitter-types/core.d.ts +31 -0
- package/dist/emitter-types/core.d.ts.map +1 -1
- package/dist/emitter-types/index.d.ts +2 -2
- package/dist/emitter-types/index.d.ts.map +1 -1
- package/dist/emitter-types/index.js +1 -1
- package/dist/emitter-types/index.js.map +1 -1
- package/dist/expression-emitter.d.ts.map +1 -1
- package/dist/expression-emitter.js +5 -5
- package/dist/expression-emitter.js.map +1 -1
- package/dist/expressions/collections.d.ts +5 -1
- package/dist/expressions/collections.d.ts.map +1 -1
- package/dist/expressions/collections.js +19 -8
- package/dist/expressions/collections.js.map +1 -1
- package/dist/expressions/literals.d.ts +2 -1
- package/dist/expressions/literals.d.ts.map +1 -1
- package/dist/expressions/literals.js +10 -1
- package/dist/expressions/literals.js.map +1 -1
- package/dist/expressions/literals.test.d.ts +5 -0
- package/dist/expressions/literals.test.d.ts.map +1 -0
- package/dist/expressions/literals.test.js +155 -0
- package/dist/expressions/literals.test.js.map +1 -0
- package/dist/expressions/operators.d.ts +5 -1
- package/dist/expressions/operators.d.ts.map +1 -1
- package/dist/expressions/operators.js +8 -3
- package/dist/expressions/operators.js.map +1 -1
- package/dist/statements/blocks.d.ts +1 -0
- package/dist/statements/blocks.d.ts.map +1 -1
- package/dist/statements/blocks.js +3 -1
- package/dist/statements/blocks.js.map +1 -1
- package/dist/statements/classes/members/methods.d.ts.map +1 -1
- package/dist/statements/classes/members/methods.js +14 -4
- package/dist/statements/classes/members/methods.js.map +1 -1
- package/dist/statements/declarations/classes.d.ts.map +1 -1
- package/dist/statements/declarations/classes.js +8 -3
- package/dist/statements/declarations/classes.js.map +1 -1
- package/dist/statements/declarations/functions.d.ts.map +1 -1
- package/dist/statements/declarations/functions.js +14 -4
- package/dist/statements/declarations/functions.js.map +1 -1
- package/dist/types/emitter.d.ts.map +1 -1
- package/dist/types/emitter.js +3 -0
- package/dist/types/emitter.js.map +1 -1
- package/dist/types.d.ts +2 -2
- package/dist/types.d.ts.map +1 -1
- package/dist/types.js +1 -1
- package/dist/types.js.map +1 -1
- package/package.json +2 -2
|
@@ -0,0 +1,77 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Local type indexing for property type lookup
|
|
3
|
+
*
|
|
4
|
+
* Builds a map of locally-defined types (classes, interfaces, type aliases)
|
|
5
|
+
* for use in property type resolution during emission.
|
|
6
|
+
*/
|
|
7
|
+
/**
|
|
8
|
+
* Build the localTypes map from a module's body statements.
|
|
9
|
+
*
|
|
10
|
+
* Scans all statements for class, interface, and typeAlias declarations
|
|
11
|
+
* and indexes them by name for property type lookup.
|
|
12
|
+
*
|
|
13
|
+
* @param module The IR module to scan
|
|
14
|
+
* @returns Map from type name to LocalTypeInfo
|
|
15
|
+
*/
|
|
16
|
+
export const buildLocalTypes = (module) => {
|
|
17
|
+
const localTypes = new Map();
|
|
18
|
+
for (const stmt of module.body) {
|
|
19
|
+
const info = extractLocalTypeInfo(stmt);
|
|
20
|
+
if (info) {
|
|
21
|
+
localTypes.set(info.name, info.info);
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
return localTypes;
|
|
25
|
+
};
|
|
26
|
+
/**
|
|
27
|
+
* Extract LocalTypeInfo from a statement if it's a type declaration.
|
|
28
|
+
* Returns undefined for non-type statements.
|
|
29
|
+
*/
|
|
30
|
+
const extractLocalTypeInfo = (stmt) => {
|
|
31
|
+
switch (stmt.kind) {
|
|
32
|
+
case "classDeclaration":
|
|
33
|
+
return {
|
|
34
|
+
name: stmt.name,
|
|
35
|
+
info: buildClassInfo(stmt),
|
|
36
|
+
};
|
|
37
|
+
case "interfaceDeclaration":
|
|
38
|
+
return {
|
|
39
|
+
name: stmt.name,
|
|
40
|
+
info: buildInterfaceInfo(stmt),
|
|
41
|
+
};
|
|
42
|
+
case "typeAliasDeclaration":
|
|
43
|
+
return {
|
|
44
|
+
name: stmt.name,
|
|
45
|
+
info: buildTypeAliasInfo(stmt),
|
|
46
|
+
};
|
|
47
|
+
default:
|
|
48
|
+
return undefined;
|
|
49
|
+
}
|
|
50
|
+
};
|
|
51
|
+
/**
|
|
52
|
+
* Build LocalTypeInfo for a class declaration
|
|
53
|
+
*/
|
|
54
|
+
const buildClassInfo = (stmt) => ({
|
|
55
|
+
kind: "class",
|
|
56
|
+
typeParameters: stmt.typeParameters?.map((tp) => tp.name) ?? [],
|
|
57
|
+
members: stmt.members,
|
|
58
|
+
implements: stmt.implements,
|
|
59
|
+
});
|
|
60
|
+
/**
|
|
61
|
+
* Build LocalTypeInfo for an interface declaration
|
|
62
|
+
*/
|
|
63
|
+
const buildInterfaceInfo = (stmt) => ({
|
|
64
|
+
kind: "interface",
|
|
65
|
+
typeParameters: stmt.typeParameters?.map((tp) => tp.name) ?? [],
|
|
66
|
+
members: stmt.members,
|
|
67
|
+
extends: stmt.extends,
|
|
68
|
+
});
|
|
69
|
+
/**
|
|
70
|
+
* Build LocalTypeInfo for a type alias declaration
|
|
71
|
+
*/
|
|
72
|
+
const buildTypeAliasInfo = (stmt) => ({
|
|
73
|
+
kind: "typeAlias",
|
|
74
|
+
typeParameters: stmt.typeParameters?.map((tp) => tp.name) ?? [],
|
|
75
|
+
type: stmt.type,
|
|
76
|
+
});
|
|
77
|
+
//# sourceMappingURL=local-types.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"local-types.js","sourceRoot":"","sources":["../../src/core/local-types.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAWH;;;;;;;;GAQG;AACH,MAAM,CAAC,MAAM,eAAe,GAAG,CAC7B,MAAgB,EACoB,EAAE;IACtC,MAAM,UAAU,GAAG,IAAI,GAAG,EAAyB,CAAC;IAEpD,KAAK,MAAM,IAAI,IAAI,MAAM,CAAC,IAAI,EAAE,CAAC;QAC/B,MAAM,IAAI,GAAG,oBAAoB,CAAC,IAAI,CAAC,CAAC;QACxC,IAAI,IAAI,EAAE,CAAC;YACT,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC;QACvC,CAAC;IACH,CAAC;IAED,OAAO,UAAU,CAAC;AACpB,CAAC,CAAC;AAEF;;;GAGG;AACH,MAAM,oBAAoB,GAAG,CAC3B,IAAiB,EACkC,EAAE;IACrD,QAAQ,IAAI,CAAC,IAAI,EAAE,CAAC;QAClB,KAAK,kBAAkB;YACrB,OAAO;gBACL,IAAI,EAAE,IAAI,CAAC,IAAI;gBACf,IAAI,EAAE,cAAc,CAAC,IAAI,CAAC;aAC3B,CAAC;QAEJ,KAAK,sBAAsB;YACzB,OAAO;gBACL,IAAI,EAAE,IAAI,CAAC,IAAI;gBACf,IAAI,EAAE,kBAAkB,CAAC,IAAI,CAAC;aAC/B,CAAC;QAEJ,KAAK,sBAAsB;YACzB,OAAO;gBACL,IAAI,EAAE,IAAI,CAAC,IAAI;gBACf,IAAI,EAAE,kBAAkB,CAAC,IAAI,CAAC;aAC/B,CAAC;QAEJ;YACE,OAAO,SAAS,CAAC;IACrB,CAAC;AACH,CAAC,CAAC;AAEF;;GAEG;AACH,MAAM,cAAc,GAAG,CAAC,IAAwB,EAAiB,EAAE,CAAC,CAAC;IACnE,IAAI,EAAE,OAAO;IACb,cAAc,EAAE,IAAI,CAAC,cAAc,EAAE,GAAG,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,IAAI,CAAC,IAAI,EAAE;IAC/D,OAAO,EAAE,IAAI,CAAC,OAAO;IACrB,UAAU,EAAE,IAAI,CAAC,UAAU;CAC5B,CAAC,CAAC;AAEH;;GAEG;AACH,MAAM,kBAAkB,GAAG,CAAC,IAA4B,EAAiB,EAAE,CAAC,CAAC;IAC3E,IAAI,EAAE,WAAW;IACjB,cAAc,EAAE,IAAI,CAAC,cAAc,EAAE,GAAG,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,IAAI,CAAC,IAAI,EAAE;IAC/D,OAAO,EAAE,IAAI,CAAC,OAAO;IACrB,OAAO,EAAE,IAAI,CAAC,OAAO;CACtB,CAAC,CAAC;AAEH;;GAEG;AACH,MAAM,kBAAkB,GAAG,CAAC,IAA4B,EAAiB,EAAE,CAAC,CAAC;IAC3E,IAAI,EAAE,WAAW;IACjB,cAAc,EAAE,IAAI,CAAC,cAAc,EAAE,GAAG,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,IAAI,CAAC,IAAI,EAAE;IAC/D,IAAI,EAAE,IAAI,CAAC,IAAI;CAChB,CAAC,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"orchestrator.d.ts","sourceRoot":"","sources":["../../../src/core/module-emitter/orchestrator.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAC5C,OAAO,EAAE,cAAc,EAAiB,MAAM,gBAAgB,CAAC;
|
|
1
|
+
{"version":3,"file":"orchestrator.d.ts","sourceRoot":"","sources":["../../../src/core/module-emitter/orchestrator.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAC5C,OAAO,EAAE,cAAc,EAAiB,MAAM,gBAAgB,CAAC;AAoB/D;;GAEG;AACH,eAAO,MAAM,UAAU,GACrB,QAAQ,QAAQ,EAChB,UAAS,OAAO,CAAC,cAAc,CAAM,KACpC,MA6EF,CAAC"}
|
|
@@ -8,6 +8,7 @@ import { generateGeneratorExchanges } from "../../generator-exchange.js";
|
|
|
8
8
|
import { defaultOptions } from "../options.js";
|
|
9
9
|
import { collectTypeParameters } from "../type-params.js";
|
|
10
10
|
import { processImports } from "../imports.js";
|
|
11
|
+
import { buildLocalTypes } from "../local-types.js";
|
|
11
12
|
import { generateHeader } from "./header.js";
|
|
12
13
|
import { separateStatements } from "./separation.js";
|
|
13
14
|
import { emitNamespaceDeclarations } from "./namespace.js";
|
|
@@ -18,7 +19,10 @@ import { assembleOutput } from "./assembly.js";
|
|
|
18
19
|
*/
|
|
19
20
|
export const emitModule = (module, options = {}) => {
|
|
20
21
|
const finalOptions = { ...defaultOptions, ...options };
|
|
21
|
-
const
|
|
22
|
+
const baseContext = createContext(finalOptions);
|
|
23
|
+
// Build local type index for property type lookup
|
|
24
|
+
const localTypes = buildLocalTypes(module);
|
|
25
|
+
const context = { ...baseContext, localTypes };
|
|
22
26
|
// Generate file header
|
|
23
27
|
const header = generateHeader(module, finalOptions);
|
|
24
28
|
// Process imports to collect using statements
|
|
@@ -35,12 +39,15 @@ export const emitModule = (module, options = {}) => {
|
|
|
35
39
|
const { namespaceLevelDecls, staticContainerMembers, hasInheritance } = separateStatements(module);
|
|
36
40
|
// Emit namespace-level declarations (classes, interfaces)
|
|
37
41
|
const namespaceResult = emitNamespaceDeclarations(namespaceLevelDecls, exchangesContext, hasInheritance);
|
|
38
|
-
// Emit static container class
|
|
42
|
+
// Emit static container class if there are any static members
|
|
43
|
+
// Use __Module suffix when there's a name collision with namespace-level declarations
|
|
39
44
|
let staticContainerCode = "";
|
|
40
45
|
let finalContext = namespaceResult.context;
|
|
41
|
-
if (
|
|
46
|
+
if (staticContainerMembers.length > 0) {
|
|
47
|
+
const hasCollision = hasMatchingClassName(namespaceLevelDecls, module.className);
|
|
42
48
|
const containerResult = emitStaticContainer(module, staticContainerMembers, namespaceResult.context, // Use context from namespace declarations to preserve usings
|
|
43
|
-
hasInheritance
|
|
49
|
+
hasInheritance, hasCollision // Add __Module suffix only when there's a name collision
|
|
50
|
+
);
|
|
44
51
|
staticContainerCode = containerResult.code;
|
|
45
52
|
finalContext = containerResult.context;
|
|
46
53
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"orchestrator.js","sourceRoot":"","sources":["../../../src/core/module-emitter/orchestrator.ts"],"names":[],"mappings":"AAAA;;GAEG;AAGH,OAAO,EAAkB,aAAa,EAAE,MAAM,gBAAgB,CAAC;AAC/D,OAAO,EAAE,0BAA0B,EAAE,MAAM,4BAA4B,CAAC;AACxE,OAAO,EACL,sBAAsB,EACtB,uBAAuB,GACxB,MAAM,mCAAmC,CAAC;AAC3C,OAAO,EAAE,0BAA0B,EAAE,MAAM,6BAA6B,CAAC;AACzE,OAAO,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AAC/C,OAAO,EAAE,qBAAqB,EAAE,MAAM,mBAAmB,CAAC;AAC1D,OAAO,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AAC/C,OAAO,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAC7C,OAAO,EAAE,kBAAkB,EAAE,MAAM,iBAAiB,CAAC;AACrD,OAAO,EAAE,yBAAyB,EAAE,MAAM,gBAAgB,CAAC;AAC3D,OAAO,EACL,mBAAmB,EACnB,oBAAoB,GACrB,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EAAE,cAAc,EAAsB,MAAM,eAAe,CAAC;AAEnE;;GAEG;AACH,MAAM,CAAC,MAAM,UAAU,GAAG,CACxB,MAAgB,EAChB,UAAmC,EAAE,EAC7B,EAAE;IACV,MAAM,YAAY,GAAmB,EAAE,GAAG,cAAc,EAAE,GAAG,OAAO,EAAE,CAAC;IACvE,MAAM,
|
|
1
|
+
{"version":3,"file":"orchestrator.js","sourceRoot":"","sources":["../../../src/core/module-emitter/orchestrator.ts"],"names":[],"mappings":"AAAA;;GAEG;AAGH,OAAO,EAAkB,aAAa,EAAE,MAAM,gBAAgB,CAAC;AAC/D,OAAO,EAAE,0BAA0B,EAAE,MAAM,4BAA4B,CAAC;AACxE,OAAO,EACL,sBAAsB,EACtB,uBAAuB,GACxB,MAAM,mCAAmC,CAAC;AAC3C,OAAO,EAAE,0BAA0B,EAAE,MAAM,6BAA6B,CAAC;AACzE,OAAO,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AAC/C,OAAO,EAAE,qBAAqB,EAAE,MAAM,mBAAmB,CAAC;AAC1D,OAAO,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AAC/C,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AACpD,OAAO,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAC7C,OAAO,EAAE,kBAAkB,EAAE,MAAM,iBAAiB,CAAC;AACrD,OAAO,EAAE,yBAAyB,EAAE,MAAM,gBAAgB,CAAC;AAC3D,OAAO,EACL,mBAAmB,EACnB,oBAAoB,GACrB,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EAAE,cAAc,EAAsB,MAAM,eAAe,CAAC;AAEnE;;GAEG;AACH,MAAM,CAAC,MAAM,UAAU,GAAG,CACxB,MAAgB,EAChB,UAAmC,EAAE,EAC7B,EAAE;IACV,MAAM,YAAY,GAAmB,EAAE,GAAG,cAAc,EAAE,GAAG,OAAO,EAAE,CAAC;IACvE,MAAM,WAAW,GAAG,aAAa,CAAC,YAAY,CAAC,CAAC;IAEhD,kDAAkD;IAClD,MAAM,UAAU,GAAG,eAAe,CAAC,MAAM,CAAC,CAAC;IAC3C,MAAM,OAAO,GAAG,EAAE,GAAG,WAAW,EAAE,UAAU,EAAE,CAAC;IAE/C,uBAAuB;IACvB,MAAM,MAAM,GAAG,cAAc,CAAC,MAAM,EAAE,YAAY,CAAC,CAAC;IAEpD,8CAA8C;IAC9C,MAAM,gBAAgB,GAAG,cAAc,CAAC,MAAM,CAAC,OAAO,EAAE,OAAO,EAAE,MAAM,CAAC,CAAC;IAEzE,gDAAgD;IAChD,MAAM,UAAU,GAAG,qBAAqB,CAAC,MAAM,CAAC,CAAC;IACjD,MAAM,CAAC,YAAY,EAAE,eAAe,CAAC,GAAG,0BAA0B,CAChE,UAAU,EACV,gBAAgB,CACjB,CAAC;IAEF,8DAA8D;IAC9D,MAAM,eAAe,GAAG,sBAAsB,CAAC,MAAM,CAAC,CAAC;IACvD,MAAM,CAAC,mBAAmB,EAAE,sBAAsB,CAAC,GAAG,uBAAuB,CAC3E,eAAe,EACf,eAAe,CAChB,CAAC;IAEF,2CAA2C;IAC3C,MAAM,CAAC,aAAa,EAAE,gBAAgB,CAAC,GAAG,0BAA0B,CAClE,MAAM,EACN,sBAAsB,CACvB,CAAC;IAEF,sEAAsE;IACtE,MAAM,EAAE,mBAAmB,EAAE,sBAAsB,EAAE,cAAc,EAAE,GACnE,kBAAkB,CAAC,MAAM,CAAC,CAAC;IAE7B,0DAA0D;IAC1D,MAAM,eAAe,GAAG,yBAAyB,CAC/C,mBAAmB,EACnB,gBAAgB,EAChB,cAAc,CACf,CAAC;IAEF,8DAA8D;IAC9D,sFAAsF;IACtF,IAAI,mBAAmB,GAAG,EAAE,CAAC;IAC7B,IAAI,YAAY,GAAG,eAAe,CAAC,OAAO,CAAC;IAE3C,IAAI,sBAAsB,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACtC,MAAM,YAAY,GAAG,oBAAoB,CACvC,mBAAmB,EACnB,MAAM,CAAC,SAAS,CACjB,CAAC;QACF,MAAM,eAAe,GAAG,mBAAmB,CACzC,MAAM,EACN,sBAAsB,EACtB,eAAe,CAAC,OAAO,EAAE,6DAA6D;QACtF,cAAc,EACd,YAAY,CAAC,yDAAyD;SACvE,CAAC;QACF,mBAAmB,GAAG,eAAe,CAAC,IAAI,CAAC;QAC3C,YAAY,GAAG,eAAe,CAAC,OAAO,CAAC;IACzC,CAAC;IAED,wBAAwB;IACxB,MAAM,KAAK,GAAkB;QAC3B,MAAM;QACN,YAAY;QACZ,mBAAmB;QACnB,aAAa;QACb,kBAAkB,EAAE,eAAe,CAAC,IAAI;QACxC,mBAAmB;KACpB,CAAC;IAEF,OAAO,cAAc,CAAC,MAAM,EAAE,KAAK,EAAE,YAAY,CAAC,CAAC;AACrD,CAAC,CAAC"}
|
|
@@ -13,6 +13,7 @@ export type StaticContainerResult = {
|
|
|
13
13
|
export declare const hasMatchingClassName: (declarations: readonly IrStatement[], className: string) => boolean;
|
|
14
14
|
/**
|
|
15
15
|
* Emit static container class for module-level members
|
|
16
|
+
* @param useModuleSuffix - If true, adds __Module suffix to avoid collision with namespace-level types
|
|
16
17
|
*/
|
|
17
|
-
export declare const emitStaticContainer: (module: IrModule, members: readonly IrStatement[], baseContext: EmitterContext, hasInheritance: boolean) => StaticContainerResult;
|
|
18
|
+
export declare const emitStaticContainer: (module: IrModule, members: readonly IrStatement[], baseContext: EmitterContext, hasInheritance: boolean, useModuleSuffix?: boolean) => StaticContainerResult;
|
|
18
19
|
//# sourceMappingURL=static-container.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"static-container.d.ts","sourceRoot":"","sources":["../../../src/core/module-emitter/static-container.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,QAAQ,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AACzD,OAAO,EAAE,cAAc,EAAiC,MAAM,gBAAgB,CAAC;AAK/E,MAAM,MAAM,qBAAqB,GAAG;IAClC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,OAAO,EAAE,cAAc,CAAC;CAClC,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,oBAAoB,GAC/B,cAAc,SAAS,WAAW,EAAE,EACpC,WAAW,MAAM,KAChB,OAOF,CAAC;AAEF
|
|
1
|
+
{"version":3,"file":"static-container.d.ts","sourceRoot":"","sources":["../../../src/core/module-emitter/static-container.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,QAAQ,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AACzD,OAAO,EAAE,cAAc,EAAiC,MAAM,gBAAgB,CAAC;AAK/E,MAAM,MAAM,qBAAqB,GAAG;IAClC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,OAAO,EAAE,cAAc,CAAC;CAClC,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,oBAAoB,GAC/B,cAAc,SAAS,WAAW,EAAE,EACpC,WAAW,MAAM,KAChB,OAOF,CAAC;AAEF;;;GAGG;AACH,eAAO,MAAM,mBAAmB,GAC9B,QAAQ,QAAQ,EAChB,SAAS,SAAS,WAAW,EAAE,EAC/B,aAAa,cAAc,EAC3B,gBAAgB,OAAO,EACvB,kBAAiB,OAAe,KAC/B,qBA0CF,CAAC"}
|
|
@@ -15,14 +15,19 @@ export const hasMatchingClassName = (declarations, className) => {
|
|
|
15
15
|
};
|
|
16
16
|
/**
|
|
17
17
|
* Emit static container class for module-level members
|
|
18
|
+
* @param useModuleSuffix - If true, adds __Module suffix to avoid collision with namespace-level types
|
|
18
19
|
*/
|
|
19
|
-
export const emitStaticContainer = (module, members, baseContext, hasInheritance) => {
|
|
20
|
+
export const emitStaticContainer = (module, members, baseContext, hasInheritance, useModuleSuffix = false) => {
|
|
20
21
|
const classContext = withStatic(indent(baseContext), true);
|
|
21
22
|
const bodyContext = indent(classContext);
|
|
22
23
|
const ind = getIndent(classContext);
|
|
23
24
|
const containerParts = [];
|
|
24
25
|
const escapedClassName = escapeCSharpIdentifier(module.className);
|
|
25
|
-
|
|
26
|
+
// Use __Module suffix when there's a collision with namespace-level type declarations
|
|
27
|
+
const containerName = useModuleSuffix
|
|
28
|
+
? `${escapedClassName}__Module`
|
|
29
|
+
: escapedClassName;
|
|
30
|
+
containerParts.push(`${ind}public static class ${containerName}`);
|
|
26
31
|
containerParts.push(`${ind}{`);
|
|
27
32
|
const bodyParts = [];
|
|
28
33
|
let bodyCurrentContext = bodyContext;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"static-container.js","sourceRoot":"","sources":["../../../src/core/module-emitter/static-container.ts"],"names":[],"mappings":"AAAA;;GAEG;AAGH,OAAO,EAAkB,MAAM,EAAE,SAAS,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAC;AAC/E,OAAO,EAAE,aAAa,EAAE,MAAM,4BAA4B,CAAC;AAC3D,OAAO,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAC3C,OAAO,EAAE,sBAAsB,EAAE,MAAM,8BAA8B,CAAC;AAOtE;;GAEG;AACH,MAAM,CAAC,MAAM,oBAAoB,GAAG,CAClC,YAAoC,EACpC,SAAiB,EACR,EAAE;IACX,OAAO,YAAY,CAAC,IAAI,CACtB,CAAC,IAAI,EAAE,EAAE,CACP,CAAC,IAAI,CAAC,IAAI,KAAK,kBAAkB;QAC/B,IAAI,CAAC,IAAI,KAAK,sBAAsB,CAAC;QACvC,IAAI,CAAC,IAAI,KAAK,SAAS,CAC1B,CAAC;AACJ,CAAC,CAAC;AAEF
|
|
1
|
+
{"version":3,"file":"static-container.js","sourceRoot":"","sources":["../../../src/core/module-emitter/static-container.ts"],"names":[],"mappings":"AAAA;;GAEG;AAGH,OAAO,EAAkB,MAAM,EAAE,SAAS,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAC;AAC/E,OAAO,EAAE,aAAa,EAAE,MAAM,4BAA4B,CAAC;AAC3D,OAAO,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAC3C,OAAO,EAAE,sBAAsB,EAAE,MAAM,8BAA8B,CAAC;AAOtE;;GAEG;AACH,MAAM,CAAC,MAAM,oBAAoB,GAAG,CAClC,YAAoC,EACpC,SAAiB,EACR,EAAE;IACX,OAAO,YAAY,CAAC,IAAI,CACtB,CAAC,IAAI,EAAE,EAAE,CACP,CAAC,IAAI,CAAC,IAAI,KAAK,kBAAkB;QAC/B,IAAI,CAAC,IAAI,KAAK,sBAAsB,CAAC;QACvC,IAAI,CAAC,IAAI,KAAK,SAAS,CAC1B,CAAC;AACJ,CAAC,CAAC;AAEF;;;GAGG;AACH,MAAM,CAAC,MAAM,mBAAmB,GAAG,CACjC,MAAgB,EAChB,OAA+B,EAC/B,WAA2B,EAC3B,cAAuB,EACvB,kBAA2B,KAAK,EACT,EAAE;IACzB,MAAM,YAAY,GAAG,UAAU,CAAC,MAAM,CAAC,WAAW,CAAC,EAAE,IAAI,CAAC,CAAC;IAC3D,MAAM,WAAW,GAAG,MAAM,CAAC,YAAY,CAAC,CAAC;IACzC,MAAM,GAAG,GAAG,SAAS,CAAC,YAAY,CAAC,CAAC;IAEpC,MAAM,cAAc,GAAa,EAAE,CAAC;IACpC,MAAM,gBAAgB,GAAG,sBAAsB,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;IAClE,sFAAsF;IACtF,MAAM,aAAa,GAAG,eAAe;QACnC,CAAC,CAAC,GAAG,gBAAgB,UAAU;QAC/B,CAAC,CAAC,gBAAgB,CAAC;IACrB,cAAc,CAAC,IAAI,CAAC,GAAG,GAAG,uBAAuB,aAAa,EAAE,CAAC,CAAC;IAClE,cAAc,CAAC,IAAI,CAAC,GAAG,GAAG,GAAG,CAAC,CAAC;IAE/B,MAAM,SAAS,GAAa,EAAE,CAAC;IAC/B,IAAI,kBAAkB,GAAG,WAAW,CAAC;IAErC,KAAK,MAAM,IAAI,IAAI,OAAO,EAAE,CAAC;QAC3B,MAAM,CAAC,IAAI,EAAE,UAAU,CAAC,GAAG,aAAa,CAAC,IAAI,EAAE,kBAAkB,CAAC,CAAC;QACnE,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACrB,kBAAkB,GAAG,UAAU,CAAC;IAClC,CAAC;IAED,0BAA0B;IAC1B,KAAK,MAAM,GAAG,IAAI,MAAM,CAAC,OAAO,EAAE,CAAC;QACjC,MAAM,UAAU,GAAG,UAAU,CAAC,GAAG,EAAE,kBAAkB,CAAC,CAAC;QACvD,IAAI,UAAU,CAAC,CAAC,CAAC,EAAE,CAAC;YAClB,SAAS,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC;YAC9B,kBAAkB,GAAG,UAAU,CAAC,CAAC,CAAC,CAAC;QACrC,CAAC;IACH,CAAC;IAED,IAAI,SAAS,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACzB,cAAc,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC;IAC9C,CAAC;IAED,cAAc,CAAC,IAAI,CAAC,GAAG,GAAG,GAAG,CAAC,CAAC;IAE/B,OAAO;QACL,IAAI,EAAE,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC;QAC/B,OAAO,EAAE,EAAE,GAAG,kBAAkB,EAAE,cAAc,EAAE;KACnD,CAAC;AACJ,CAAC,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"module-map.d.ts","sourceRoot":"","sources":["../../src/core/module-map.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,QAAQ,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AACxD,OAAO,KAAK,EACV,cAAc,EACd,SAAS,EACT,YAAY,EACZ,SAAS,EACV,MAAM,0BAA0B,CAAC;AAGlC,YAAY,EAAE,cAAc,EAAE,SAAS,EAAE,YAAY,EAAE,SAAS,EAAE,CAAC;AAEnE;;;;;GAKG;AACH,eAAO,MAAM,oBAAoB,GAAI,UAAU,MAAM,KAAG,MAsBvD,CAAC;AAEF;;GAEG;AACH,MAAM,MAAM,eAAe,GACvB;IACE,QAAQ,CAAC,EAAE,EAAE,IAAI,CAAC;IAClB,QAAQ,CAAC,KAAK,EAAE,SAAS,CAAC;IAC1B,QAAQ,CAAC,SAAS,EAAE,SAAS,CAAC;CAC/B,GACD;IAAE,QAAQ,CAAC,EAAE,EAAE,KAAK,CAAC;IAAC,QAAQ,CAAC,MAAM,EAAE,SAAS,UAAU,EAAE,CAAA;CAAE,CAAC;AAEnE;;;;GAIG;AACH,eAAO,MAAM,cAAc,GACzB,SAAS,SAAS,QAAQ,EAAE,KAC3B,
|
|
1
|
+
{"version":3,"file":"module-map.d.ts","sourceRoot":"","sources":["../../src/core/module-map.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,QAAQ,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AACxD,OAAO,KAAK,EACV,cAAc,EACd,SAAS,EACT,YAAY,EACZ,SAAS,EACV,MAAM,0BAA0B,CAAC;AAGlC,YAAY,EAAE,cAAc,EAAE,SAAS,EAAE,YAAY,EAAE,SAAS,EAAE,CAAC;AAEnE;;;;;GAKG;AACH,eAAO,MAAM,oBAAoB,GAAI,UAAU,MAAM,KAAG,MAsBvD,CAAC;AAEF;;GAEG;AACH,MAAM,MAAM,eAAe,GACvB;IACE,QAAQ,CAAC,EAAE,EAAE,IAAI,CAAC;IAClB,QAAQ,CAAC,KAAK,EAAE,SAAS,CAAC;IAC1B,QAAQ,CAAC,SAAS,EAAE,SAAS,CAAC;CAC/B,GACD;IAAE,QAAQ,CAAC,EAAE,EAAE,KAAK,CAAC;IAAC,QAAQ,CAAC,MAAM,EAAE,SAAS,UAAU,EAAE,CAAA;CAAE,CAAC;AAEnE;;;;GAIG;AACH,eAAO,MAAM,cAAc,GACzB,SAAS,SAAS,QAAQ,EAAE,KAC3B,eA+DF,CAAC;AAqDF;;GAEG;AACH,eAAO,MAAM,iBAAiB,GAC5B,iBAAiB,MAAM,EACvB,cAAc,MAAM,KACnB,MA2CF,CAAC"}
|
package/dist/core/module-map.js
CHANGED
|
@@ -70,10 +70,16 @@ export const buildModuleMap = (modules) => {
|
|
|
70
70
|
// Build the map
|
|
71
71
|
for (const module of modules) {
|
|
72
72
|
const canonicalPath = canonicalizeFilePath(module.filePath);
|
|
73
|
+
// Check if module has a type declaration (class/interface) with same name as className
|
|
74
|
+
// This determines whether value imports need to use __Module suffix
|
|
75
|
+
const hasTypeCollision = module.body.some((stmt) => (stmt.kind === "classDeclaration" ||
|
|
76
|
+
stmt.kind === "interfaceDeclaration") &&
|
|
77
|
+
stmt.name === module.className);
|
|
73
78
|
map.set(canonicalPath, {
|
|
74
79
|
namespace: module.namespace,
|
|
75
80
|
className: module.className,
|
|
76
81
|
filePath: canonicalPath,
|
|
82
|
+
hasTypeCollision,
|
|
77
83
|
});
|
|
78
84
|
}
|
|
79
85
|
// Build the export map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"module-map.js","sourceRoot":"","sources":["../../src/core/module-map.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"module-map.js","sourceRoot":"","sources":["../../src/core/module-map.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Type resolution helpers for generic null/default handling
|
|
3
|
+
*
|
|
4
|
+
* Provides:
|
|
5
|
+
* - containsTypeParameter: Check if type contains any type parameter
|
|
6
|
+
* - substituteTypeArgs: Substitute type arguments into a type
|
|
7
|
+
* - getPropertyType: Look up property type from contextual type
|
|
8
|
+
*/
|
|
9
|
+
import type { IrType } from "@tsonic/frontend";
|
|
10
|
+
import type { EmitterContext } from "../types.js";
|
|
11
|
+
/**
|
|
12
|
+
* Check if a type contains any type parameter.
|
|
13
|
+
*
|
|
14
|
+
* Uses both:
|
|
15
|
+
* 1. New IR kind "typeParameterType" (preferred)
|
|
16
|
+
* 2. Legacy detection via typeParams set (compatibility during migration)
|
|
17
|
+
*
|
|
18
|
+
* @param type - The IR type to check
|
|
19
|
+
* @param typeParams - Set of type parameter names in current scope
|
|
20
|
+
* @returns true if the type contains a type parameter
|
|
21
|
+
*/
|
|
22
|
+
export declare const containsTypeParameter: (type: IrType, typeParams: ReadonlySet<string>) => boolean;
|
|
23
|
+
/**
|
|
24
|
+
* Substitute type arguments into a type.
|
|
25
|
+
*
|
|
26
|
+
* @param type - The type to substitute into
|
|
27
|
+
* @param typeParamNames - List of type parameter names (in order)
|
|
28
|
+
* @param typeArgs - List of type arguments (in order, parallel to typeParamNames)
|
|
29
|
+
* @returns The type with type parameters substituted
|
|
30
|
+
*/
|
|
31
|
+
export declare const substituteTypeArgs: (type: IrType, typeParamNames: readonly string[], typeArgs: readonly IrType[]) => IrType;
|
|
32
|
+
/**
|
|
33
|
+
* Look up property type from a contextual type.
|
|
34
|
+
*
|
|
35
|
+
* This handles:
|
|
36
|
+
* - Local types (class/interface/typeAlias) via localTypes map
|
|
37
|
+
* - Type alias chasing (follows alias.type until reaching a concrete type)
|
|
38
|
+
* - Interface extends resolution (searches base interfaces)
|
|
39
|
+
* - Generic type argument substitution
|
|
40
|
+
*
|
|
41
|
+
* @param contextualType - The contextual type (e.g., Result<T>)
|
|
42
|
+
* @param propertyName - The property name to look up
|
|
43
|
+
* @param context - Emitter context with localTypes
|
|
44
|
+
* @returns The property type after substitution, or undefined if not found
|
|
45
|
+
*/
|
|
46
|
+
export declare const getPropertyType: (contextualType: IrType | undefined, propertyName: string, context: EmitterContext) => IrType | undefined;
|
|
47
|
+
//# sourceMappingURL=type-resolution.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"type-resolution.d.ts","sourceRoot":"","sources":["../../src/core/type-resolution.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,KAAK,EACV,MAAM,EAGP,MAAM,kBAAkB,CAAC;AAC1B,OAAO,KAAK,EAAiB,cAAc,EAAE,MAAM,aAAa,CAAC;AAEjE;;;;;;;;;;GAUG;AACH,eAAO,MAAM,qBAAqB,GAChC,MAAM,MAAM,EACZ,YAAY,WAAW,CAAC,MAAM,CAAC,KAC9B,OAuEF,CAAC;AAEF;;;;;;;GAOG;AACH,eAAO,MAAM,kBAAkB,GAC7B,MAAM,MAAM,EACZ,gBAAgB,SAAS,MAAM,EAAE,EACjC,UAAU,SAAS,MAAM,EAAE,KAC1B,MAYF,CAAC;AAyGF;;;;;;;;;;;;;GAaG;AACH,eAAO,MAAM,eAAe,GAC1B,gBAAgB,MAAM,GAAG,SAAS,EAClC,cAAc,MAAM,EACpB,SAAS,cAAc,KACtB,MAAM,GAAG,SAWX,CAAC"}
|
|
@@ -0,0 +1,283 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Type resolution helpers for generic null/default handling
|
|
3
|
+
*
|
|
4
|
+
* Provides:
|
|
5
|
+
* - containsTypeParameter: Check if type contains any type parameter
|
|
6
|
+
* - substituteTypeArgs: Substitute type arguments into a type
|
|
7
|
+
* - getPropertyType: Look up property type from contextual type
|
|
8
|
+
*/
|
|
9
|
+
/**
|
|
10
|
+
* Check if a type contains any type parameter.
|
|
11
|
+
*
|
|
12
|
+
* Uses both:
|
|
13
|
+
* 1. New IR kind "typeParameterType" (preferred)
|
|
14
|
+
* 2. Legacy detection via typeParams set (compatibility during migration)
|
|
15
|
+
*
|
|
16
|
+
* @param type - The IR type to check
|
|
17
|
+
* @param typeParams - Set of type parameter names in current scope
|
|
18
|
+
* @returns true if the type contains a type parameter
|
|
19
|
+
*/
|
|
20
|
+
export const containsTypeParameter = (type, typeParams) => {
|
|
21
|
+
switch (type.kind) {
|
|
22
|
+
case "typeParameterType":
|
|
23
|
+
// New IR kind - always a type parameter
|
|
24
|
+
return true;
|
|
25
|
+
case "referenceType":
|
|
26
|
+
// Legacy compatibility: check if name is in typeParams set
|
|
27
|
+
if (typeParams.has(type.name)) {
|
|
28
|
+
return true;
|
|
29
|
+
}
|
|
30
|
+
// Recurse into type arguments
|
|
31
|
+
if (type.typeArguments) {
|
|
32
|
+
return type.typeArguments.some((arg) => containsTypeParameter(arg, typeParams));
|
|
33
|
+
}
|
|
34
|
+
return false;
|
|
35
|
+
case "arrayType":
|
|
36
|
+
return containsTypeParameter(type.elementType, typeParams);
|
|
37
|
+
case "dictionaryType":
|
|
38
|
+
return (containsTypeParameter(type.keyType, typeParams) ||
|
|
39
|
+
containsTypeParameter(type.valueType, typeParams));
|
|
40
|
+
case "unionType":
|
|
41
|
+
case "intersectionType":
|
|
42
|
+
return type.types.some((t) => containsTypeParameter(t, typeParams));
|
|
43
|
+
case "functionType":
|
|
44
|
+
if (containsTypeParameter(type.returnType, typeParams)) {
|
|
45
|
+
return true;
|
|
46
|
+
}
|
|
47
|
+
return type.parameters.some((p) => p.type && containsTypeParameter(p.type, typeParams));
|
|
48
|
+
case "objectType":
|
|
49
|
+
return type.members.some((m) => {
|
|
50
|
+
if (m.kind === "propertySignature") {
|
|
51
|
+
return containsTypeParameter(m.type, typeParams);
|
|
52
|
+
}
|
|
53
|
+
if (m.kind === "methodSignature") {
|
|
54
|
+
if (m.returnType && containsTypeParameter(m.returnType, typeParams)) {
|
|
55
|
+
return true;
|
|
56
|
+
}
|
|
57
|
+
return m.parameters.some((p) => p.type && containsTypeParameter(p.type, typeParams));
|
|
58
|
+
}
|
|
59
|
+
return false;
|
|
60
|
+
});
|
|
61
|
+
case "primitiveType":
|
|
62
|
+
case "literalType":
|
|
63
|
+
case "anyType":
|
|
64
|
+
case "unknownType":
|
|
65
|
+
case "voidType":
|
|
66
|
+
case "neverType":
|
|
67
|
+
return false;
|
|
68
|
+
default: {
|
|
69
|
+
// Exhaustive check - this will error if a new IR type kind is added
|
|
70
|
+
const exhaustive = type;
|
|
71
|
+
void exhaustive;
|
|
72
|
+
return false;
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
};
|
|
76
|
+
/**
|
|
77
|
+
* Substitute type arguments into a type.
|
|
78
|
+
*
|
|
79
|
+
* @param type - The type to substitute into
|
|
80
|
+
* @param typeParamNames - List of type parameter names (in order)
|
|
81
|
+
* @param typeArgs - List of type arguments (in order, parallel to typeParamNames)
|
|
82
|
+
* @returns The type with type parameters substituted
|
|
83
|
+
*/
|
|
84
|
+
export const substituteTypeArgs = (type, typeParamNames, typeArgs) => {
|
|
85
|
+
// Build mapping from name to type
|
|
86
|
+
const mapping = new Map();
|
|
87
|
+
for (let i = 0; i < typeParamNames.length && i < typeArgs.length; i++) {
|
|
88
|
+
const name = typeParamNames[i];
|
|
89
|
+
const arg = typeArgs[i];
|
|
90
|
+
if (name !== undefined && arg !== undefined) {
|
|
91
|
+
mapping.set(name, arg);
|
|
92
|
+
}
|
|
93
|
+
}
|
|
94
|
+
return substituteType(type, mapping);
|
|
95
|
+
};
|
|
96
|
+
/**
|
|
97
|
+
* Internal helper for type substitution
|
|
98
|
+
*/
|
|
99
|
+
const substituteType = (type, mapping) => {
|
|
100
|
+
switch (type.kind) {
|
|
101
|
+
case "typeParameterType": {
|
|
102
|
+
const substitution = mapping.get(type.name);
|
|
103
|
+
return substitution ?? type;
|
|
104
|
+
}
|
|
105
|
+
case "referenceType": {
|
|
106
|
+
// Check if this is a type parameter (legacy representation)
|
|
107
|
+
const substitution = mapping.get(type.name);
|
|
108
|
+
if (substitution && !type.typeArguments) {
|
|
109
|
+
return substitution;
|
|
110
|
+
}
|
|
111
|
+
// Recurse into type arguments
|
|
112
|
+
if (type.typeArguments) {
|
|
113
|
+
return {
|
|
114
|
+
...type,
|
|
115
|
+
typeArguments: type.typeArguments.map((arg) => substituteType(arg, mapping)),
|
|
116
|
+
};
|
|
117
|
+
}
|
|
118
|
+
return type;
|
|
119
|
+
}
|
|
120
|
+
case "arrayType":
|
|
121
|
+
return {
|
|
122
|
+
...type,
|
|
123
|
+
elementType: substituteType(type.elementType, mapping),
|
|
124
|
+
};
|
|
125
|
+
case "dictionaryType":
|
|
126
|
+
return {
|
|
127
|
+
...type,
|
|
128
|
+
keyType: substituteType(type.keyType, mapping),
|
|
129
|
+
valueType: substituteType(type.valueType, mapping),
|
|
130
|
+
};
|
|
131
|
+
case "unionType":
|
|
132
|
+
return {
|
|
133
|
+
...type,
|
|
134
|
+
types: type.types.map((t) => substituteType(t, mapping)),
|
|
135
|
+
};
|
|
136
|
+
case "intersectionType":
|
|
137
|
+
return {
|
|
138
|
+
...type,
|
|
139
|
+
types: type.types.map((t) => substituteType(t, mapping)),
|
|
140
|
+
};
|
|
141
|
+
case "functionType":
|
|
142
|
+
return {
|
|
143
|
+
...type,
|
|
144
|
+
returnType: substituteType(type.returnType, mapping),
|
|
145
|
+
parameters: type.parameters.map((p) => p.type ? { ...p, type: substituteType(p.type, mapping) } : p),
|
|
146
|
+
};
|
|
147
|
+
case "objectType":
|
|
148
|
+
return {
|
|
149
|
+
...type,
|
|
150
|
+
members: type.members.map((m) => {
|
|
151
|
+
if (m.kind === "propertySignature") {
|
|
152
|
+
return { ...m, type: substituteType(m.type, mapping) };
|
|
153
|
+
}
|
|
154
|
+
if (m.kind === "methodSignature") {
|
|
155
|
+
return {
|
|
156
|
+
...m,
|
|
157
|
+
returnType: m.returnType
|
|
158
|
+
? substituteType(m.returnType, mapping)
|
|
159
|
+
: undefined,
|
|
160
|
+
parameters: m.parameters.map((p) => p.type ? { ...p, type: substituteType(p.type, mapping) } : p),
|
|
161
|
+
};
|
|
162
|
+
}
|
|
163
|
+
return m;
|
|
164
|
+
}),
|
|
165
|
+
};
|
|
166
|
+
case "primitiveType":
|
|
167
|
+
case "literalType":
|
|
168
|
+
case "anyType":
|
|
169
|
+
case "unknownType":
|
|
170
|
+
case "voidType":
|
|
171
|
+
case "neverType":
|
|
172
|
+
return type;
|
|
173
|
+
default: {
|
|
174
|
+
const exhaustive = type;
|
|
175
|
+
void exhaustive;
|
|
176
|
+
return type;
|
|
177
|
+
}
|
|
178
|
+
}
|
|
179
|
+
};
|
|
180
|
+
/**
|
|
181
|
+
* Look up property type from a contextual type.
|
|
182
|
+
*
|
|
183
|
+
* This handles:
|
|
184
|
+
* - Local types (class/interface/typeAlias) via localTypes map
|
|
185
|
+
* - Type alias chasing (follows alias.type until reaching a concrete type)
|
|
186
|
+
* - Interface extends resolution (searches base interfaces)
|
|
187
|
+
* - Generic type argument substitution
|
|
188
|
+
*
|
|
189
|
+
* @param contextualType - The contextual type (e.g., Result<T>)
|
|
190
|
+
* @param propertyName - The property name to look up
|
|
191
|
+
* @param context - Emitter context with localTypes
|
|
192
|
+
* @returns The property type after substitution, or undefined if not found
|
|
193
|
+
*/
|
|
194
|
+
export const getPropertyType = (contextualType, propertyName, context) => {
|
|
195
|
+
if (!contextualType || !context.localTypes) {
|
|
196
|
+
return undefined;
|
|
197
|
+
}
|
|
198
|
+
return resolvePropertyType(contextualType, propertyName, context.localTypes, []);
|
|
199
|
+
};
|
|
200
|
+
/**
|
|
201
|
+
* Internal helper for property type resolution with cycle detection
|
|
202
|
+
*/
|
|
203
|
+
const resolvePropertyType = (type, propertyName, localTypes, visitedTypes) => {
|
|
204
|
+
// Handle reference types (most common case)
|
|
205
|
+
if (type.kind === "referenceType") {
|
|
206
|
+
const typeInfo = localTypes.get(type.name);
|
|
207
|
+
if (!typeInfo) {
|
|
208
|
+
// External type - cannot resolve property type
|
|
209
|
+
return undefined;
|
|
210
|
+
}
|
|
211
|
+
// Prevent cycles
|
|
212
|
+
if (visitedTypes.includes(type.name)) {
|
|
213
|
+
return undefined;
|
|
214
|
+
}
|
|
215
|
+
const newVisited = [...visitedTypes, type.name];
|
|
216
|
+
// Chase type alias
|
|
217
|
+
if (typeInfo.kind === "typeAlias") {
|
|
218
|
+
const substituted = type.typeArguments
|
|
219
|
+
? substituteTypeArgs(typeInfo.type, typeInfo.typeParameters, type.typeArguments)
|
|
220
|
+
: typeInfo.type;
|
|
221
|
+
return resolvePropertyType(substituted, propertyName, localTypes, newVisited);
|
|
222
|
+
}
|
|
223
|
+
// Look up property in interface
|
|
224
|
+
if (typeInfo.kind === "interface") {
|
|
225
|
+
// Search own members first
|
|
226
|
+
const prop = findPropertyInMembers(typeInfo.members, propertyName);
|
|
227
|
+
if (prop) {
|
|
228
|
+
return type.typeArguments
|
|
229
|
+
? substituteTypeArgs(prop, typeInfo.typeParameters, type.typeArguments)
|
|
230
|
+
: prop;
|
|
231
|
+
}
|
|
232
|
+
// Search extended interfaces
|
|
233
|
+
for (const base of typeInfo.extends) {
|
|
234
|
+
const baseProp = resolvePropertyType(base, propertyName, localTypes, newVisited);
|
|
235
|
+
if (baseProp) {
|
|
236
|
+
return type.typeArguments
|
|
237
|
+
? substituteTypeArgs(baseProp, typeInfo.typeParameters, type.typeArguments)
|
|
238
|
+
: baseProp;
|
|
239
|
+
}
|
|
240
|
+
}
|
|
241
|
+
return undefined;
|
|
242
|
+
}
|
|
243
|
+
// Look up property in class
|
|
244
|
+
if (typeInfo.kind === "class") {
|
|
245
|
+
const prop = findPropertyInClassMembers(typeInfo.members, propertyName);
|
|
246
|
+
if (prop) {
|
|
247
|
+
return type.typeArguments
|
|
248
|
+
? substituteTypeArgs(prop, typeInfo.typeParameters, type.typeArguments)
|
|
249
|
+
: prop;
|
|
250
|
+
}
|
|
251
|
+
return undefined;
|
|
252
|
+
}
|
|
253
|
+
return undefined;
|
|
254
|
+
}
|
|
255
|
+
// Handle object types directly
|
|
256
|
+
if (type.kind === "objectType") {
|
|
257
|
+
return findPropertyInMembers(type.members, propertyName);
|
|
258
|
+
}
|
|
259
|
+
return undefined;
|
|
260
|
+
};
|
|
261
|
+
/**
|
|
262
|
+
* Find property type in interface members
|
|
263
|
+
*/
|
|
264
|
+
const findPropertyInMembers = (members, propertyName) => {
|
|
265
|
+
for (const member of members) {
|
|
266
|
+
if (member.kind === "propertySignature" && member.name === propertyName) {
|
|
267
|
+
return member.type;
|
|
268
|
+
}
|
|
269
|
+
}
|
|
270
|
+
return undefined;
|
|
271
|
+
};
|
|
272
|
+
/**
|
|
273
|
+
* Find property type in class members
|
|
274
|
+
*/
|
|
275
|
+
const findPropertyInClassMembers = (members, propertyName) => {
|
|
276
|
+
for (const member of members) {
|
|
277
|
+
if (member.kind === "propertyDeclaration" && member.name === propertyName) {
|
|
278
|
+
return member.type;
|
|
279
|
+
}
|
|
280
|
+
}
|
|
281
|
+
return undefined;
|
|
282
|
+
};
|
|
283
|
+
//# sourceMappingURL=type-resolution.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"type-resolution.js","sourceRoot":"","sources":["../../src/core/type-resolution.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"type-resolution.test.d.ts","sourceRoot":"","sources":["../../src/core/type-resolution.test.ts"],"names":[],"mappings":"AAAA;;GAEG"}
|