@tsonic/emitter 0.0.3 → 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/adapter-generator.d.ts.map +1 -1
- package/dist/adapter-generator.js +3 -2
- package/dist/adapter-generator.js.map +1 -1
- package/dist/array.test.js +1 -1
- package/dist/array.test.js.map +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 +9 -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/identifiers.d.ts +23 -0
- package/dist/emitter-types/identifiers.d.ts.map +1 -0
- package/dist/emitter-types/identifiers.js +164 -0
- package/dist/emitter-types/identifiers.js.map +1 -0
- package/dist/emitter-types/index.d.ts +3 -2
- package/dist/emitter-types/index.d.ts.map +1 -1
- package/dist/emitter-types/index.js +2 -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/access.d.ts.map +1 -1
- package/dist/expressions/access.js +14 -7
- package/dist/expressions/access.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/identifiers.d.ts.map +1 -1
- package/dist/expressions/identifiers.js +3 -2
- package/dist/expressions/identifiers.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/inline-types.d.ts.map +1 -1
- package/dist/statements/classes/inline-types.js +3 -1
- package/dist/statements/classes/inline-types.js.map +1 -1
- package/dist/statements/classes/members/methods.d.ts.map +1 -1
- package/dist/statements/classes/members/methods.js +22 -8
- package/dist/statements/classes/members/methods.js.map +1 -1
- package/dist/statements/classes/members/properties.d.ts.map +1 -1
- package/dist/statements/classes/members/properties.js +3 -2
- package/dist/statements/classes/members/properties.js.map +1 -1
- package/dist/statements/classes/parameters.d.ts.map +1 -1
- package/dist/statements/classes/parameters.js +4 -3
- package/dist/statements/classes/parameters.js.map +1 -1
- package/dist/statements/classes/properties.d.ts.map +1 -1
- package/dist/statements/classes/properties.js +5 -4
- package/dist/statements/classes/properties.js.map +1 -1
- package/dist/statements/control/loops.d.ts.map +1 -1
- package/dist/statements/control/loops.js +5 -2
- package/dist/statements/control/loops.js.map +1 -1
- package/dist/statements/declarations/classes.d.ts.map +1 -1
- package/dist/statements/declarations/classes.js +14 -7
- package/dist/statements/declarations/classes.js.map +1 -1
- package/dist/statements/declarations/enums.d.ts.map +1 -1
- package/dist/statements/declarations/enums.js +8 -4
- package/dist/statements/declarations/enums.js.map +1 -1
- package/dist/statements/declarations/functions.d.ts.map +1 -1
- package/dist/statements/declarations/functions.js +20 -6
- package/dist/statements/declarations/functions.js.map +1 -1
- package/dist/statements/declarations/interfaces.d.ts.map +1 -1
- package/dist/statements/declarations/interfaces.js +2 -1
- package/dist/statements/declarations/interfaces.js.map +1 -1
- package/dist/statements/declarations/type-aliases.d.ts.map +1 -1
- package/dist/statements/declarations/type-aliases.js +3 -2
- package/dist/statements/declarations/type-aliases.js.map +1 -1
- package/dist/statements/declarations/variables.d.ts.map +1 -1
- package/dist/statements/declarations/variables.js +7 -5
- package/dist/statements/declarations/variables.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
package/dist/core/imports.js
CHANGED
|
@@ -52,7 +52,7 @@ export const processImports = (imports, context, module) => {
|
|
|
52
52
|
const actualExportName = reexportSource?.sourceName ?? exportName;
|
|
53
53
|
const targetModule = moduleMap.get(actualSourcePath);
|
|
54
54
|
if (targetModule) {
|
|
55
|
-
const binding = createImportBinding(spec, targetModule.namespace, targetModule.className, actualExportName);
|
|
55
|
+
const binding = createImportBinding(spec, targetModule.namespace, targetModule.className, actualExportName, targetModule.hasTypeCollision);
|
|
56
56
|
if (binding) {
|
|
57
57
|
importBindings.set(binding.localName, binding.importBinding);
|
|
58
58
|
}
|
|
@@ -127,9 +127,13 @@ const createClrImportBinding = (spec, namespace) => {
|
|
|
127
127
|
* - Value imports: clrName is the container global:: FQN, member is the export name
|
|
128
128
|
* - Namespace imports: clrName is the container global:: FQN
|
|
129
129
|
*/
|
|
130
|
-
const createImportBinding = (spec, namespace, containerClassName, resolvedExportName) => {
|
|
130
|
+
const createImportBinding = (spec, namespace, containerClassName, resolvedExportName, hasTypeCollision = false) => {
|
|
131
131
|
const localName = spec.localName;
|
|
132
|
-
|
|
132
|
+
// Value exports live in ClassName__Module when there's a type collision, otherwise in ClassName
|
|
133
|
+
const valueContainerName = hasTypeCollision
|
|
134
|
+
? `${containerClassName}__Module`
|
|
135
|
+
: containerClassName;
|
|
136
|
+
const valueContainerFqn = `global::${namespace}.${valueContainerName}`;
|
|
133
137
|
if (spec.kind === "named") {
|
|
134
138
|
// Use isType from frontend (determined by TS checker)
|
|
135
139
|
const isType = spec.isType === true;
|
|
@@ -145,35 +149,35 @@ const createImportBinding = (spec, namespace, containerClassName, resolvedExport
|
|
|
145
149
|
};
|
|
146
150
|
}
|
|
147
151
|
else {
|
|
148
|
-
// Value import: clrName is container, member is the export name
|
|
152
|
+
// Value import: clrName is the value container, member is the export name
|
|
149
153
|
return {
|
|
150
154
|
localName,
|
|
151
155
|
importBinding: {
|
|
152
156
|
kind: "value",
|
|
153
|
-
clrName:
|
|
157
|
+
clrName: valueContainerFqn,
|
|
154
158
|
member: resolvedExportName,
|
|
155
159
|
},
|
|
156
160
|
};
|
|
157
161
|
}
|
|
158
162
|
}
|
|
159
163
|
if (spec.kind === "default") {
|
|
160
|
-
// Default export binds to the container class
|
|
164
|
+
// Default export binds to the value container class
|
|
161
165
|
// TODO: Consider adding diagnostic for unsupported default exports
|
|
162
166
|
return {
|
|
163
167
|
localName,
|
|
164
168
|
importBinding: {
|
|
165
169
|
kind: "value",
|
|
166
|
-
clrName:
|
|
170
|
+
clrName: valueContainerFqn,
|
|
167
171
|
},
|
|
168
172
|
};
|
|
169
173
|
}
|
|
170
174
|
if (spec.kind === "namespace") {
|
|
171
|
-
// Namespace imports (import * as M) - bind to the container class
|
|
175
|
+
// Namespace imports (import * as M) - bind to the value container class
|
|
172
176
|
return {
|
|
173
177
|
localName,
|
|
174
178
|
importBinding: {
|
|
175
179
|
kind: "namespace",
|
|
176
|
-
clrName:
|
|
180
|
+
clrName: valueContainerFqn,
|
|
177
181
|
},
|
|
178
182
|
};
|
|
179
183
|
}
|
package/dist/core/imports.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"imports.js","sourceRoot":"","sources":["../../src/core/imports.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAIH,OAAO,EAAE,iBAAiB,EAAE,MAAM,iBAAiB,CAAC;AAEpD;;;;;;;;GAQG;AACH,MAAM,CAAC,MAAM,cAAc,GAAG,CAC5B,OAA4B,EAC5B,OAAuB,EACvB,MAAgB,EACA,EAAE;IAClB,MAAM,cAAc,GAAG,IAAI,GAAG,EAAyB,CAAC;IAExD,MAAM,cAAc,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE;QACjD,0DAA0D;QAC1D,IAAI,GAAG,CAAC,KAAK,IAAI,GAAG,CAAC,iBAAiB,EAAE,CAAC;YACvC,KAAK,MAAM,IAAI,IAAI,GAAG,CAAC,UAAU,EAAE,CAAC;gBAClC,MAAM,OAAO,GAAG,sBAAsB,CAAC,IAAI,EAAE,GAAG,CAAC,iBAAiB,CAAC,CAAC;gBACpE,IAAI,OAAO,EAAE,CAAC;oBACZ,cAAc,CAAC,GAAG,CAAC,OAAO,CAAC,SAAS,EAAE,OAAO,CAAC,aAAa,CAAC,CAAC;gBAC/D,CAAC;YACH,CAAC;YACD,OAAO,GAAG,CAAC;QACb,CAAC;QAED,IAAI,GAAG,CAAC,OAAO,EAAE,CAAC;YAChB,qEAAqE;YACrE,uCAAuC;YACvC,MAAM,SAAS,GAAG,GAAG,CAAC,OAAO,CAAC,SAAS,CAAC;YACxC,MAAM,SAAS,GAAG,GAAG,CAAC,OAAO,CAAC,SAAS,CAAC;YACxC,IAAI,SAAS,EAAE,CAAC;gBACd,MAAM,UAAU,GAAG,iBAAiB,CAAC,MAAM,CAAC,QAAQ,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;gBAElE,iEAAiE;gBACjE,KAAK,MAAM,IAAI,IAAI,GAAG,CAAC,UAAU,EAAE,CAAC;oBAClC,MAAM,UAAU,GACd,IAAI,CAAC,IAAI,KAAK,OAAO;wBACnB,CAAC,CAAC,IAAI,CAAC,IAAI;wBACX,CAAC,CAAC,IAAI,CAAC,IAAI,KAAK,SAAS;4BACvB,CAAC,CAAC,EAAE;4BACJ,CAAC,CAAC,EAAE,CAAC;oBAEX,uDAAuD;oBACvD,MAAM,WAAW,GAAG,GAAG,UAAU,IAAI,UAAU,EAAE,CAAC;oBAClD,MAAM,cAAc,GAAG,SAAS,EAAE,GAAG,CAAC,WAAW,CAAC,CAAC;oBAEnD,qCAAqC;oBACrC,MAAM,gBAAgB,GAAG,cAAc,EAAE,UAAU,IAAI,UAAU,CAAC;oBAClE,MAAM,gBAAgB,GAAG,cAAc,EAAE,UAAU,IAAI,UAAU,CAAC;oBAClE,MAAM,YAAY,GAAG,SAAS,CAAC,GAAG,CAAC,gBAAgB,CAAC,CAAC;oBAErD,IAAI,YAAY,EAAE,CAAC;wBACjB,MAAM,OAAO,GAAG,mBAAmB,CACjC,IAAI,EACJ,YAAY,CAAC,SAAS,EACtB,YAAY,CAAC,SAAS,EACtB,gBAAgB,
|
|
1
|
+
{"version":3,"file":"imports.js","sourceRoot":"","sources":["../../src/core/imports.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,19 @@
|
|
|
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
|
+
import type { IrModule } from "@tsonic/frontend";
|
|
8
|
+
import type { LocalTypeInfo } from "../types.js";
|
|
9
|
+
/**
|
|
10
|
+
* Build the localTypes map from a module's body statements.
|
|
11
|
+
*
|
|
12
|
+
* Scans all statements for class, interface, and typeAlias declarations
|
|
13
|
+
* and indexes them by name for property type lookup.
|
|
14
|
+
*
|
|
15
|
+
* @param module The IR module to scan
|
|
16
|
+
* @returns Map from type name to LocalTypeInfo
|
|
17
|
+
*/
|
|
18
|
+
export declare const buildLocalTypes: (module: IrModule) => ReadonlyMap<string, LocalTypeInfo>;
|
|
19
|
+
//# sourceMappingURL=local-types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"local-types.d.ts","sourceRoot":"","sources":["../../src/core/local-types.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EACV,QAAQ,EAKT,MAAM,kBAAkB,CAAC;AAC1B,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAEjD;;;;;;;;GAQG;AACH,eAAO,MAAM,eAAe,GAC1B,QAAQ,QAAQ,KACf,WAAW,CAAC,MAAM,EAAE,aAAa,CAWnC,CAAC"}
|
|
@@ -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":"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"}
|
|
@@ -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;
|
|
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"}
|
|
@@ -4,6 +4,7 @@
|
|
|
4
4
|
import { indent, getIndent, withStatic } from "../../types.js";
|
|
5
5
|
import { emitStatement } from "../../statement-emitter.js";
|
|
6
6
|
import { emitExport } from "../exports.js";
|
|
7
|
+
import { escapeCSharpIdentifier } from "../../emitter-types/index.js";
|
|
7
8
|
/**
|
|
8
9
|
* Check if there's a namespace-level class with the same name as the module
|
|
9
10
|
*/
|
|
@@ -14,13 +15,19 @@ export const hasMatchingClassName = (declarations, className) => {
|
|
|
14
15
|
};
|
|
15
16
|
/**
|
|
16
17
|
* Emit static container class for module-level members
|
|
18
|
+
* @param useModuleSuffix - If true, adds __Module suffix to avoid collision with namespace-level types
|
|
17
19
|
*/
|
|
18
|
-
export const emitStaticContainer = (module, members, baseContext, hasInheritance) => {
|
|
20
|
+
export const emitStaticContainer = (module, members, baseContext, hasInheritance, useModuleSuffix = false) => {
|
|
19
21
|
const classContext = withStatic(indent(baseContext), true);
|
|
20
22
|
const bodyContext = indent(classContext);
|
|
21
23
|
const ind = getIndent(classContext);
|
|
22
24
|
const containerParts = [];
|
|
23
|
-
|
|
25
|
+
const escapedClassName = escapeCSharpIdentifier(module.className);
|
|
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}`);
|
|
24
31
|
containerParts.push(`${ind}{`);
|
|
25
32
|
const bodyParts = [];
|
|
26
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;
|
|
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":"AAAA;;GAEG;AAaH;;;;;GAKG;AACH,MAAM,CAAC,MAAM,oBAAoB,GAAG,CAAC,QAAgB,EAAU,EAAE;IAC/D,oBAAoB;IACpB,IAAI,UAAU,GAAG,QAAQ,CAAC,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;IAE9C,uBAAuB;IACvB,IAAI,UAAU,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC;QAC/B,UAAU,GAAG,UAAU,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;IACvC,CAAC;IAED,2CAA2C;IAC3C,MAAM,QAAQ,GAAa,EAAE,CAAC;IAC9B,KAAK,MAAM,OAAO,IAAI,UAAU,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC;QAC5C,IAAI,OAAO,KAAK,EAAE,IAAI,OAAO,KAAK,GAAG,EAAE,CAAC;YACtC,SAAS,CAAC,mCAAmC;QAC/C,CAAC;aAAM,IAAI,OAAO,KAAK,IAAI,EAAE,CAAC;YAC5B,QAAQ,CAAC,GAAG,EAAE,CAAC,CAAC,sBAAsB;QACxC,CAAC;aAAM,CAAC;YACN,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QACzB,CAAC;IACH,CAAC;IAED,OAAO,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AAC5B,CAAC,CAAC;AAaF;;;;GAIG;AACH,MAAM,CAAC,MAAM,cAAc,GAAG,CAC5B,OAA4B,EACX,EAAE;IACnB,MAAM,GAAG,GAAG,IAAI,GAAG,EAA0B,CAAC;IAC9C,MAAM,MAAM,GAAiB,EAAE,CAAC;IAEhC,6DAA6D;IAC7D,MAAM,WAAW,GAAG,IAAI,GAAG,EAAsB,CAAC;IAClD,KAAK,MAAM,MAAM,IAAI,OAAO,EAAE,CAAC;QAC7B,MAAM,QAAQ,GAAG,WAAW,CAAC,GAAG,CAAC,MAAM,CAAC,SAAS,CAAC,IAAI,EAAE,CAAC;QACzD,WAAW,CAAC,GAAG,CAAC,MAAM,CAAC,SAAS,EAAE,CAAC,GAAG,QAAQ,EAAE,MAAM,CAAC,CAAC,CAAC;IAC3D,CAAC;IAED,6CAA6C;IAC7C,KAAK,MAAM,CAAC,SAAS,EAAE,SAAS,CAAC,IAAI,WAAW,EAAE,CAAC;QACjD,MAAM,WAAW,GAAG,IAAI,GAAG,EAAsB,CAAC;QAClD,KAAK,MAAM,MAAM,IAAI,SAAS,EAAE,CAAC;YAC/B,MAAM,QAAQ,GAAG,WAAW,CAAC,GAAG,CAAC,MAAM,CAAC,SAAS,CAAC,IAAI,EAAE,CAAC;YACzD,WAAW,CAAC,GAAG,CAAC,MAAM,CAAC,SAAS,EAAE,CAAC,GAAG,QAAQ,EAAE,MAAM,CAAC,CAAC,CAAC;QAC3D,CAAC;QAED,oBAAoB;QACpB,KAAK,MAAM,CAAC,SAAS,EAAE,SAAS,CAAC,IAAI,WAAW,EAAE,CAAC;YACjD,IAAI,SAAS,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBACzB,MAAM,SAAS,GAAG,SAAS;qBACxB,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,GAAG,CAAC;qBAC9C,IAAI,CAAC,OAAO,CAAC,CAAC;gBACjB,MAAM,CAAC,IAAI,CAAC;oBACV,IAAI,EAAE,SAAS;oBACf,OAAO,EAAE,4CAA4C,SAAS,uBAAuB,SAAS,mBAAmB,SAAS,qBAAqB;oBAC/I,QAAQ,EAAE,OAAO;iBAClB,CAAC,CAAC;YACL,CAAC;QACH,CAAC;IACH,CAAC;IAED,IAAI,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACtB,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC;IAC/B,CAAC;IAED,gBAAgB;IAChB,KAAK,MAAM,MAAM,IAAI,OAAO,EAAE,CAAC;QAC7B,MAAM,aAAa,GAAG,oBAAoB,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;QAE5D,uFAAuF;QACvF,oEAAoE;QACpE,MAAM,gBAAgB,GAAG,MAAM,CAAC,IAAI,CAAC,IAAI,CACvC,CAAC,IAAI,EAAE,EAAE,CACP,CAAC,IAAI,CAAC,IAAI,KAAK,kBAAkB;YAC/B,IAAI,CAAC,IAAI,KAAK,sBAAsB,CAAC;YACvC,IAAI,CAAC,IAAI,KAAK,MAAM,CAAC,SAAS,CACjC,CAAC;QAEF,GAAG,CAAC,GAAG,CAAC,aAAa,EAAE;YACrB,SAAS,EAAE,MAAM,CAAC,SAAS;YAC3B,SAAS,EAAE,MAAM,CAAC,SAAS;YAC3B,QAAQ,EAAE,aAAa;YACvB,gBAAgB;SACjB,CAAC,CAAC;IACL,CAAC;IAED,uBAAuB;IACvB,MAAM,SAAS,GAAG,cAAc,CAAC,OAAO,CAAC,CAAC;IAE1C,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,EAAE,SAAS,EAAE,CAAC;AAC7C,CAAC,CAAC;AAEF;;;GAGG;AACH,MAAM,cAAc,GAAG,CAAC,OAA4B,EAAa,EAAE;IACjE,MAAM,SAAS,GAAG,IAAI,GAAG,EAAwB,CAAC;IAElD,qCAAqC;IACrC,KAAK,MAAM,MAAM,IAAI,OAAO,EAAE,CAAC;QAC7B,MAAM,UAAU,GAAG,oBAAoB,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;QAEzD,KAAK,MAAM,GAAG,IAAI,MAAM,CAAC,OAAO,EAAE,CAAC;YACjC,IAAI,GAAG,CAAC,IAAI,KAAK,UAAU,EAAE,CAAC;gBAC5B,iCAAiC;gBACjC,MAAM,UAAU,GAAG,iBAAiB,CAAC,MAAM,CAAC,QAAQ,EAAE,GAAG,CAAC,UAAU,CAAC,CAAC;gBACtE,MAAM,GAAG,GAAG,GAAG,UAAU,IAAI,GAAG,CAAC,IAAI,EAAE,CAAC;gBACxC,SAAS,CAAC,GAAG,CAAC,GAAG,EAAE;oBACjB,UAAU,EAAE,UAAU;oBACtB,UAAU,EAAE,GAAG,CAAC,YAAY;iBAC7B,CAAC,CAAC;YACL,CAAC;QACH,CAAC;IACH,CAAC;IAED,6CAA6C;IAC7C,8FAA8F;IAC9F,MAAM,iBAAiB,GAAG,GAAY,EAAE;QACtC,IAAI,OAAO,GAAG,KAAK,CAAC;QAEpB,KAAK,MAAM,CAAC,GAAG,EAAE,MAAM,CAAC,IAAI,SAAS,EAAE,CAAC;YACtC,MAAM,aAAa,GAAG,GAAG,MAAM,CAAC,UAAU,IAAI,MAAM,CAAC,UAAU,EAAE,CAAC;YAClE,MAAM,gBAAgB,GAAG,SAAS,CAAC,GAAG,CAAC,aAAa,CAAC,CAAC;YAEtD,IAAI,gBAAgB,EAAE,CAAC;gBACrB,wEAAwE;gBACxE,SAAS,CAAC,GAAG,CAAC,GAAG,EAAE,gBAAgB,CAAC,CAAC;gBACrC,OAAO,GAAG,IAAI,CAAC;YACjB,CAAC;QACH,CAAC;QAED,OAAO,OAAO,CAAC;IACjB,CAAC,CAAC;IAEF,8EAA8E;IAC9E,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,iBAAiB,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC;QACnD,iBAAiB;IACnB,CAAC;IAED,OAAO,SAAS,CAAC;AACnB,CAAC,CAAC;AAEF;;GAEG;AACH,MAAM,CAAC,MAAM,iBAAiB,GAAG,CAC/B,eAAuB,EACvB,YAAoB,EACZ,EAAE;IACV,8BAA8B;IAC9B,MAAM,gBAAgB,GAAG,oBAAoB,CAAC,eAAe,CAAC,CAAC;IAE/D,gCAAgC;IAChC,MAAM,SAAS,GAAG,gBAAgB,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC;IACpD,MAAM,UAAU,GAAG,SAAS,IAAI,CAAC,CAAC,CAAC,CAAC,gBAAgB,CAAC,KAAK,CAAC,CAAC,EAAE,SAAS,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;IAE9E,0BAA0B;IAC1B,IAAI,MAAM,GAAG,YAAY,CAAC,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;IAE9C,kCAAkC;IAClC,IAAI,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC;QAC3B,MAAM,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;IAC/B,CAAC;IAED,wBAAwB;IACxB,IAAI,YAAoB,CAAC;IACzB,IAAI,MAAM,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC;QAC5B,iCAAiC;QACjC,YAAY,GAAG,UAAU;YACvB,CAAC,CAAC,GAAG,UAAU,IAAI,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE;YACpC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;IACtB,CAAC;SAAM,IAAI,MAAM,CAAC,UAAU,CAAC,KAAK,CAAC,EAAE,CAAC;QACpC,mBAAmB;QACnB,MAAM,KAAK,GAAG,UAAU,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;QACpC,IAAI,SAAS,GAAG,MAAM,CAAC;QACvB,OAAO,SAAS,CAAC,UAAU,CAAC,KAAK,CAAC,EAAE,CAAC;YACnC,KAAK,CAAC,GAAG,EAAE,CAAC;YACZ,SAAS,GAAG,SAAS,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;QACjC,CAAC;QACD,YAAY;YACV,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,SAAS,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC;IACrE,CAAC;SAAM,IAAI,MAAM,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;QAClC,uCAAuC;QACvC,YAAY,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;IACjC,CAAC;SAAM,CAAC;QACN,wCAAwC;QACxC,YAAY,GAAG,UAAU,CAAC,CAAC,CAAC,GAAG,UAAU,IAAI,MAAM,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC;IACjE,CAAC;IAED,0BAA0B;IAC1B,OAAO,oBAAoB,CAAC,YAAY,CAAC,CAAC;AAC5C,CAAC,CAAC"}
|
|
@@ -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"}
|