@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
package/dist/program/creation.js
CHANGED
|
@@ -9,7 +9,7 @@ import { defaultTsConfig } from "./config.js";
|
|
|
9
9
|
import { loadDotnetMetadata } from "./metadata.js";
|
|
10
10
|
import { loadBindings } from "./bindings.js";
|
|
11
11
|
import { collectTsDiagnostics } from "./diagnostics.js";
|
|
12
|
-
import {
|
|
12
|
+
import { createClrBindingsResolver } from "../resolver/clr-bindings-resolver.js";
|
|
13
13
|
/**
|
|
14
14
|
* Recursively scan a directory for .d.ts files
|
|
15
15
|
*/
|
|
@@ -122,24 +122,25 @@ export const createProgram = (filePaths, options) => {
|
|
|
122
122
|
host.getSourceFile = (fileName, languageVersion, onError, shouldCreateNewSourceFile) => {
|
|
123
123
|
// Check if this is a .NET namespace being imported
|
|
124
124
|
const baseName = path.basename(fileName, path.extname(fileName));
|
|
125
|
-
|
|
125
|
+
const declarationPath = namespaceFiles.get(baseName);
|
|
126
|
+
if (declarationPath !== undefined && fileName.endsWith(".ts")) {
|
|
126
127
|
// Create a virtual source file that exports from the actual declaration
|
|
127
|
-
const declarationPath = namespaceFiles.get(baseName);
|
|
128
128
|
const virtualContent = `export * from '${declarationPath.replace(/\.d\.ts$/, "")}';`;
|
|
129
129
|
return ts.createSourceFile(fileName, virtualContent, languageVersion, true);
|
|
130
130
|
}
|
|
131
131
|
return originalGetSourceFile.call(host, fileName, languageVersion, onError, shouldCreateNewSourceFile);
|
|
132
132
|
};
|
|
133
133
|
// Override resolveModuleNames to handle .NET imports
|
|
134
|
-
|
|
134
|
+
const hostWithResolve = host;
|
|
135
|
+
hostWithResolve.resolveModuleNames = (moduleNames, containingFile) => {
|
|
135
136
|
return moduleNames.map((moduleName) => {
|
|
136
137
|
// Debug log
|
|
137
138
|
if (options.verbose) {
|
|
138
139
|
console.log(`Resolving module: ${moduleName} from ${containingFile}`);
|
|
139
140
|
}
|
|
140
141
|
// Check if this is a .NET namespace
|
|
141
|
-
|
|
142
|
-
|
|
142
|
+
const resolvedFile = namespaceFiles.get(moduleName);
|
|
143
|
+
if (resolvedFile !== undefined) {
|
|
143
144
|
if (options.verbose) {
|
|
144
145
|
console.log(` Resolved .NET namespace ${moduleName} to ${resolvedFile}`);
|
|
145
146
|
}
|
|
@@ -165,8 +166,9 @@ export const createProgram = (filePaths, options) => {
|
|
|
165
166
|
const metadata = loadDotnetMetadata(typeRoots);
|
|
166
167
|
// Load binding manifests (from typeRoots - for ambient globals)
|
|
167
168
|
const bindings = loadBindings(typeRoots);
|
|
168
|
-
// Create resolver for import-driven
|
|
169
|
-
|
|
169
|
+
// Create resolver for import-driven CLR namespace discovery
|
|
170
|
+
// Uses projectRoot (not sourceRoot) to resolve packages from node_modules
|
|
171
|
+
const clrResolver = createClrBindingsResolver(options.projectRoot);
|
|
170
172
|
return ok({
|
|
171
173
|
program,
|
|
172
174
|
checker: program.getTypeChecker(),
|
|
@@ -174,7 +176,7 @@ export const createProgram = (filePaths, options) => {
|
|
|
174
176
|
sourceFiles,
|
|
175
177
|
metadata,
|
|
176
178
|
bindings,
|
|
177
|
-
|
|
179
|
+
clrResolver,
|
|
178
180
|
});
|
|
179
181
|
};
|
|
180
182
|
//# sourceMappingURL=creation.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"creation.js","sourceRoot":"","sources":["../../src/program/creation.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,MAAM,YAAY,CAAC;AACjC,OAAO,KAAK,IAAI,MAAM,WAAW,CAAC;AAClC,OAAO,KAAK,EAAE,MAAM,SAAS,CAAC;AAC9B,OAAO,EAAU,EAAE,EAAE,KAAK,EAAE,MAAM,oBAAoB,CAAC;AAGvD,OAAO,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAC9C,OAAO,EAAE,kBAAkB,EAAE,MAAM,eAAe,CAAC;AACnD,OAAO,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAC7C,OAAO,EAAE,oBAAoB,EAAE,MAAM,kBAAkB,CAAC;AACxD,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"creation.js","sourceRoot":"","sources":["../../src/program/creation.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"dependency-graph.d.ts","sourceRoot":"","sources":["../../src/program/dependency-graph.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAIH,OAAO,EAAE,MAAM,EAAa,MAAM,oBAAoB,CAAC;AACvD,OAAO,EAAE,UAAU,EAAoB,MAAM,wBAAwB,CAAC;AACtE,OAAO,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAG1C,OAAO,EAAE,eAAe,
|
|
1
|
+
{"version":3,"file":"dependency-graph.d.ts","sourceRoot":"","sources":["../../src/program/dependency-graph.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAIH,OAAO,EAAE,MAAM,EAAa,MAAM,oBAAoB,CAAC;AACvD,OAAO,EAAE,UAAU,EAAoB,MAAM,wBAAwB,CAAC;AACtE,OAAO,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAG1C,OAAO,EAAE,eAAe,EAAiB,MAAM,YAAY,CAAC;AAG5D,MAAM,MAAM,2BAA2B,GAAG;IACxC,QAAQ,CAAC,OAAO,EAAE,SAAS,QAAQ,EAAE,CAAC;IACtC,QAAQ,CAAC,WAAW,EAAE,QAAQ,CAAC;CAChC,CAAC;AAwFF;;;;GAIG;AACH,eAAO,MAAM,0BAA0B,GACrC,WAAW,MAAM,EACjB,SAAS,eAAe,KACvB,MAAM,CAAC,2BAA2B,EAAE,SAAS,UAAU,EAAE,CA+M3D,CAAC"}
|
|
@@ -8,6 +8,54 @@ import { ok, error } from "../types/result.js";
|
|
|
8
8
|
import { createDiagnostic } from "../types/diagnostic.js";
|
|
9
9
|
import { buildIrModule } from "../ir/builder/orchestrator.js";
|
|
10
10
|
import { createProgram, createCompilerOptions } from "./creation.js";
|
|
11
|
+
import { loadAllDiscoveredBindings } from "./bindings.js";
|
|
12
|
+
/**
|
|
13
|
+
* Scan all source files for import statements and discover CLR bindings.
|
|
14
|
+
* This must be called BEFORE IR building to ensure bindings are loaded.
|
|
15
|
+
*
|
|
16
|
+
* Returns set of binding paths that were discovered.
|
|
17
|
+
*/
|
|
18
|
+
const discoverAndLoadClrBindings = (program, verbose) => {
|
|
19
|
+
const bindingPaths = new Set();
|
|
20
|
+
if (verbose) {
|
|
21
|
+
console.log(`[CLR Bindings] Scanning ${program.sourceFiles.length} source files`);
|
|
22
|
+
}
|
|
23
|
+
for (const sourceFile of program.sourceFiles) {
|
|
24
|
+
if (verbose) {
|
|
25
|
+
console.log(`[CLR Bindings] Scanning: ${sourceFile.fileName}`);
|
|
26
|
+
}
|
|
27
|
+
ts.forEachChild(sourceFile, (node) => {
|
|
28
|
+
if (ts.isImportDeclaration(node) &&
|
|
29
|
+
ts.isStringLiteral(node.moduleSpecifier)) {
|
|
30
|
+
const moduleSpecifier = node.moduleSpecifier.text;
|
|
31
|
+
if (verbose) {
|
|
32
|
+
console.log(`[CLR Bindings] Found import: ${moduleSpecifier}`);
|
|
33
|
+
}
|
|
34
|
+
// Use the resolver to check if this is a CLR import
|
|
35
|
+
const resolution = program.clrResolver.resolve(moduleSpecifier);
|
|
36
|
+
if (resolution.isClr) {
|
|
37
|
+
if (verbose) {
|
|
38
|
+
console.log(`[CLR Bindings] CLR import detected: ${resolution.bindingsPath}`);
|
|
39
|
+
}
|
|
40
|
+
bindingPaths.add(resolution.bindingsPath);
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
});
|
|
44
|
+
}
|
|
45
|
+
// Load all discovered bindings into the registry
|
|
46
|
+
if (bindingPaths.size > 0) {
|
|
47
|
+
if (verbose) {
|
|
48
|
+
console.log(`[CLR Bindings] Loading ${bindingPaths.size} binding files...`);
|
|
49
|
+
}
|
|
50
|
+
loadAllDiscoveredBindings(program.bindings, bindingPaths);
|
|
51
|
+
if (verbose) {
|
|
52
|
+
console.log(`[CLR Bindings] Bindings loaded successfully`);
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
else if (verbose) {
|
|
56
|
+
console.log(`[CLR Bindings] No CLR bindings discovered`);
|
|
57
|
+
}
|
|
58
|
+
};
|
|
11
59
|
/**
|
|
12
60
|
* Extract module specifier from import or re-export declaration
|
|
13
61
|
* Returns the module specifier string literal, or null if not applicable
|
|
@@ -46,6 +94,8 @@ export const buildModuleDependencyGraph = (entryFile, options) => {
|
|
|
46
94
|
// First pass: discover all files
|
|
47
95
|
while (queue.length > 0) {
|
|
48
96
|
const currentFile = queue.shift();
|
|
97
|
+
if (currentFile === undefined)
|
|
98
|
+
continue;
|
|
49
99
|
// Dedup by realpath (handles symlinks, relative paths)
|
|
50
100
|
const realPath = ts.sys.realpath?.(currentFile) ?? currentFile;
|
|
51
101
|
if (visited.has(realPath)) {
|
|
@@ -130,6 +180,9 @@ export const buildModuleDependencyGraph = (entryFile, options) => {
|
|
|
130
180
|
return error(programResult.error.diagnostics);
|
|
131
181
|
}
|
|
132
182
|
const tsonicProgram = programResult.value;
|
|
183
|
+
// Load CLR bindings before IR building
|
|
184
|
+
// This scans all imports and loads their bindings upfront
|
|
185
|
+
discoverAndLoadClrBindings(tsonicProgram, options.verbose);
|
|
133
186
|
// Third pass: Build IR for all discovered modules
|
|
134
187
|
const modules = [];
|
|
135
188
|
for (const filePath of allDiscoveredFiles) {
|
|
@@ -157,7 +210,18 @@ export const buildModuleDependencyGraph = (entryFile, options) => {
|
|
|
157
210
|
// Entry module is the first one (after sorting, it should be the entry file)
|
|
158
211
|
// But let's find it by matching the entry file path
|
|
159
212
|
const entryRelative = relative(sourceRootAbs, entryAbs).replace(/\\/g, "/");
|
|
160
|
-
const
|
|
213
|
+
const foundEntryModule = modules.find((m) => m.filePath === entryRelative);
|
|
214
|
+
const entryModule = foundEntryModule ?? modules[0];
|
|
215
|
+
if (entryModule === undefined) {
|
|
216
|
+
return error([
|
|
217
|
+
createDiagnostic("TSN1001", "error", "No modules found in the project", {
|
|
218
|
+
file: entryAbs,
|
|
219
|
+
line: 1,
|
|
220
|
+
column: 1,
|
|
221
|
+
length: 1,
|
|
222
|
+
}),
|
|
223
|
+
]);
|
|
224
|
+
}
|
|
161
225
|
return ok({
|
|
162
226
|
modules,
|
|
163
227
|
entryModule,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"dependency-graph.js","sourceRoot":"","sources":["../../src/program/dependency-graph.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,MAAM,YAAY,CAAC;AACjC,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAE,MAAM,MAAM,CAAC;AACzC,OAAO,EAAU,EAAE,EAAE,KAAK,EAAE,MAAM,oBAAoB,CAAC;AACvD,OAAO,EAAc,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AAEtE,OAAO,EAAE,aAAa,EAAE,MAAM,+BAA+B,CAAC;AAC9D,OAAO,EAAE,aAAa,EAAE,qBAAqB,EAAE,MAAM,eAAe,CAAC;
|
|
1
|
+
{"version":3,"file":"dependency-graph.js","sourceRoot":"","sources":["../../src/program/dependency-graph.ts"],"names":[],"mappings":"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"}
|
package/dist/program/types.d.ts
CHANGED
|
@@ -4,9 +4,10 @@
|
|
|
4
4
|
import * as ts from "typescript";
|
|
5
5
|
import { DotnetMetadataRegistry } from "../dotnet-metadata.js";
|
|
6
6
|
import { BindingRegistry } from "./bindings.js";
|
|
7
|
-
import {
|
|
7
|
+
import { ClrBindingsResolver } from "../resolver/clr-bindings-resolver.js";
|
|
8
8
|
export type RuntimeMode = "js" | "dotnet";
|
|
9
9
|
export type CompilerOptions = {
|
|
10
|
+
readonly projectRoot: string;
|
|
10
11
|
readonly sourceRoot: string;
|
|
11
12
|
readonly rootNamespace: string;
|
|
12
13
|
readonly strict?: boolean;
|
|
@@ -29,7 +30,7 @@ export type TsonicProgram = {
|
|
|
29
30
|
readonly sourceFiles: readonly ts.SourceFile[];
|
|
30
31
|
readonly metadata: DotnetMetadataRegistry;
|
|
31
32
|
readonly bindings: BindingRegistry;
|
|
32
|
-
/** Resolver for
|
|
33
|
-
readonly
|
|
33
|
+
/** Resolver for CLR namespace imports (import-driven discovery) */
|
|
34
|
+
readonly clrResolver: ClrBindingsResolver;
|
|
34
35
|
};
|
|
35
36
|
//# sourceMappingURL=types.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/program/types.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,MAAM,YAAY,CAAC;AACjC,OAAO,EAAE,sBAAsB,EAAE,MAAM,uBAAuB,CAAC;AAC/D,OAAO,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AAChD,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/program/types.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,MAAM,YAAY,CAAC;AACjC,OAAO,EAAE,sBAAsB,EAAE,MAAM,uBAAuB,CAAC;AAC/D,OAAO,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AAChD,OAAO,EAAE,mBAAmB,EAAE,MAAM,sCAAsC,CAAC;AAE3E,MAAM,MAAM,WAAW,GAAG,IAAI,GAAG,QAAQ,CAAC;AAE1C,MAAM,MAAM,eAAe,GAAG;IAC5B,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAC;IAC/B,QAAQ,CAAC,MAAM,CAAC,EAAE,OAAO,CAAC;IAC1B,QAAQ,CAAC,SAAS,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IACvC,QAAQ,CAAC,OAAO,CAAC,EAAE,OAAO,CAAC;IAC3B,+EAA+E;IAC/E,QAAQ,CAAC,cAAc,CAAC,EAAE,OAAO,CAAC;IAClC;;;;;OAKG;IACH,QAAQ,CAAC,OAAO,CAAC,EAAE,WAAW,CAAC;CAChC,CAAC;AAEF,MAAM,MAAM,aAAa,GAAG;IAC1B,QAAQ,CAAC,OAAO,EAAE,EAAE,CAAC,OAAO,CAAC;IAC7B,QAAQ,CAAC,OAAO,EAAE,EAAE,CAAC,WAAW,CAAC;IACjC,QAAQ,CAAC,OAAO,EAAE,eAAe,CAAC;IAClC,QAAQ,CAAC,WAAW,EAAE,SAAS,EAAE,CAAC,UAAU,EAAE,CAAC;IAC/C,QAAQ,CAAC,QAAQ,EAAE,sBAAsB,CAAC;IAC1C,QAAQ,CAAC,QAAQ,EAAE,eAAe,CAAC;IACnC,mEAAmE;IACnE,QAAQ,CAAC,WAAW,EAAE,mBAAmB,CAAC;CAC3C,CAAC"}
|
|
@@ -0,0 +1,93 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* CLR bindings resolution for package imports
|
|
3
|
+
*
|
|
4
|
+
* Determines if an import specifier refers to a CLR namespace by checking
|
|
5
|
+
* if bindings.json exists in the package's namespace directory.
|
|
6
|
+
*
|
|
7
|
+
* This is the ONLY mechanism for detecting CLR imports - no heuristics,
|
|
8
|
+
* no special-casing for any particular package. Any package that provides
|
|
9
|
+
* bindings.json in its namespace directories will be recognized.
|
|
10
|
+
*/
|
|
11
|
+
/**
|
|
12
|
+
* Result of resolving a CLR import
|
|
13
|
+
*/
|
|
14
|
+
export type ResolvedClrImport = {
|
|
15
|
+
readonly isClr: true;
|
|
16
|
+
readonly packageName: string;
|
|
17
|
+
readonly resolvedNamespace: string;
|
|
18
|
+
readonly bindingsPath: string;
|
|
19
|
+
readonly metadataPath: string | undefined;
|
|
20
|
+
readonly assembly: string | undefined;
|
|
21
|
+
} | {
|
|
22
|
+
readonly isClr: false;
|
|
23
|
+
};
|
|
24
|
+
/**
|
|
25
|
+
* Resolver for CLR namespace imports
|
|
26
|
+
*
|
|
27
|
+
* An import is a CLR namespace import iff:
|
|
28
|
+
* - It's a package import with a subpath (e.g., @scope/pkg/Namespace)
|
|
29
|
+
* - The package contains bindings.json in that subpath directory
|
|
30
|
+
*
|
|
31
|
+
* This works for any bindings provider package.
|
|
32
|
+
*/
|
|
33
|
+
export declare class ClrBindingsResolver {
|
|
34
|
+
private readonly pkgRootCache;
|
|
35
|
+
private readonly bindingsExistsCache;
|
|
36
|
+
private readonly namespaceCache;
|
|
37
|
+
private readonly assemblyCache;
|
|
38
|
+
private readonly require;
|
|
39
|
+
constructor(baseDir: string);
|
|
40
|
+
/**
|
|
41
|
+
* Resolve an import specifier to determine if it's a CLR namespace import
|
|
42
|
+
*/
|
|
43
|
+
resolve(moduleSpecifier: string): ResolvedClrImport;
|
|
44
|
+
/**
|
|
45
|
+
* Parse a module specifier into package name and subpath
|
|
46
|
+
*
|
|
47
|
+
* Examples:
|
|
48
|
+
* - "@scope/pkg/System.IO" -> { packageName: "@scope/pkg", subpath: "System.IO" }
|
|
49
|
+
* - "mypkg/Namespace" -> { packageName: "mypkg", subpath: "Namespace" }
|
|
50
|
+
* - "@scope/pkg" -> null (no subpath)
|
|
51
|
+
* - "mypkg" -> null (no subpath)
|
|
52
|
+
*/
|
|
53
|
+
private parseModuleSpecifier;
|
|
54
|
+
/**
|
|
55
|
+
* Resolve package root directory using Node resolution
|
|
56
|
+
*
|
|
57
|
+
* Uses require.resolve to find the package's package.json,
|
|
58
|
+
* then returns the directory containing it.
|
|
59
|
+
*/
|
|
60
|
+
private resolvePkgRoot;
|
|
61
|
+
/**
|
|
62
|
+
* Check if bindings.json exists at the given path (cached)
|
|
63
|
+
*/
|
|
64
|
+
private hasBindings;
|
|
65
|
+
/**
|
|
66
|
+
* Extract the namespace from a bindings.json file (cached).
|
|
67
|
+
* Falls back to the subpath if namespace cannot be extracted.
|
|
68
|
+
*
|
|
69
|
+
* This reads the 'namespace' field from tsbindgen format files,
|
|
70
|
+
* which is the authoritative CLR namespace for the binding.
|
|
71
|
+
*/
|
|
72
|
+
private extractNamespace;
|
|
73
|
+
/**
|
|
74
|
+
* Extract the assembly name from a bindings.json file (cached).
|
|
75
|
+
* Looks at the first type's assemblyName field.
|
|
76
|
+
*
|
|
77
|
+
* This provides the assembly name for reference in .csproj files.
|
|
78
|
+
*/
|
|
79
|
+
private extractAssembly;
|
|
80
|
+
/**
|
|
81
|
+
* Check if a file exists (not cached - used for optional files)
|
|
82
|
+
*/
|
|
83
|
+
private fileExists;
|
|
84
|
+
/**
|
|
85
|
+
* Get all discovered binding paths (for loading)
|
|
86
|
+
*/
|
|
87
|
+
getDiscoveredBindingPaths(): ReadonlySet<string>;
|
|
88
|
+
}
|
|
89
|
+
/**
|
|
90
|
+
* Create a resolver instance for a given source root
|
|
91
|
+
*/
|
|
92
|
+
export declare const createClrBindingsResolver: (sourceRoot: string) => ClrBindingsResolver;
|
|
93
|
+
//# sourceMappingURL=clr-bindings-resolver.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"clr-bindings-resolver.d.ts","sourceRoot":"","sources":["../../src/resolver/clr-bindings-resolver.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAMH;;GAEG;AACH,MAAM,MAAM,iBAAiB,GACzB;IACE,QAAQ,CAAC,KAAK,EAAE,IAAI,CAAC;IACrB,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,iBAAiB,EAAE,MAAM,CAAC;IACnC,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;IAC9B,QAAQ,CAAC,YAAY,EAAE,MAAM,GAAG,SAAS,CAAC;IAC1C,QAAQ,CAAC,QAAQ,EAAE,MAAM,GAAG,SAAS,CAAC;CACvC,GACD;IACE,QAAQ,CAAC,KAAK,EAAE,KAAK,CAAC;CACvB,CAAC;AAUN;;;;;;;;GAQG;AACH,qBAAa,mBAAmB;IAE9B,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAoC;IAGjE,OAAO,CAAC,QAAQ,CAAC,mBAAmB,CAA8B;IAGlE,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAoC;IAGnE,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAoC;IAGlE,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAmC;gBAE/C,OAAO,EAAE,MAAM;IAK3B;;OAEG;IACH,OAAO,CAAC,eAAe,EAAE,MAAM,GAAG,iBAAiB;IA+DnD;;;;;;;;OAQG;IACH,OAAO,CAAC,oBAAoB;IAoB5B;;;;;OAKG;IACH,OAAO,CAAC,cAAc;IAwCtB;;OAEG;IACH,OAAO,CAAC,WAAW;IAWnB;;;;;;OAMG;IACH,OAAO,CAAC,gBAAgB;IAiCxB;;;;;OAKG;IACH,OAAO,CAAC,eAAe;IAsCvB;;OAEG;IACH,OAAO,CAAC,UAAU;IAIlB;;OAEG;IACH,yBAAyB,IAAI,WAAW,CAAC,MAAM,CAAC;CASjD;AAED;;GAEG;AACH,eAAO,MAAM,yBAAyB,GACpC,YAAY,MAAM,KACjB,mBAEF,CAAC"}
|
|
@@ -1,30 +1,35 @@
|
|
|
1
1
|
/**
|
|
2
|
-
*
|
|
2
|
+
* CLR bindings resolution for package imports
|
|
3
3
|
*
|
|
4
4
|
* Determines if an import specifier refers to a CLR namespace by checking
|
|
5
5
|
* if bindings.json exists in the package's namespace directory.
|
|
6
6
|
*
|
|
7
|
-
* This is the ONLY mechanism for detecting
|
|
8
|
-
* no special-casing for
|
|
7
|
+
* This is the ONLY mechanism for detecting CLR imports - no heuristics,
|
|
8
|
+
* no special-casing for any particular package. Any package that provides
|
|
9
|
+
* bindings.json in its namespace directories will be recognized.
|
|
9
10
|
*/
|
|
10
|
-
import { existsSync } from "node:fs";
|
|
11
|
+
import { existsSync, readFileSync } from "node:fs";
|
|
11
12
|
import { dirname, join } from "node:path";
|
|
12
13
|
import { createRequire } from "node:module";
|
|
13
14
|
/**
|
|
14
|
-
* Resolver for
|
|
15
|
+
* Resolver for CLR namespace imports
|
|
15
16
|
*
|
|
16
17
|
* An import is a CLR namespace import iff:
|
|
17
18
|
* - It's a package import with a subpath (e.g., @scope/pkg/Namespace)
|
|
18
19
|
* - The package contains bindings.json in that subpath directory
|
|
19
20
|
*
|
|
20
|
-
* This works for any bindings provider package
|
|
21
|
+
* This works for any bindings provider package.
|
|
21
22
|
*/
|
|
22
|
-
export class
|
|
23
|
+
export class ClrBindingsResolver {
|
|
23
24
|
constructor(baseDir) {
|
|
24
25
|
// Cache: packageName -> packageRoot (or null if not found)
|
|
25
26
|
this.pkgRootCache = new Map();
|
|
26
27
|
// Cache: absolute bindingsPath -> exists
|
|
27
28
|
this.bindingsExistsCache = new Map();
|
|
29
|
+
// Cache: absolute bindingsPath -> namespace (extracted from bindings.json)
|
|
30
|
+
this.namespaceCache = new Map();
|
|
31
|
+
// Cache: absolute bindingsPath -> assembly (extracted from bindings.json types)
|
|
32
|
+
this.assemblyCache = new Map();
|
|
28
33
|
// Create a require function that resolves relative to baseDir
|
|
29
34
|
this.require = createRequire(join(baseDir, "package.json"));
|
|
30
35
|
}
|
|
@@ -34,47 +39,58 @@ export class DotNetImportResolver {
|
|
|
34
39
|
resolve(moduleSpecifier) {
|
|
35
40
|
// Skip local imports
|
|
36
41
|
if (moduleSpecifier.startsWith(".") || moduleSpecifier.startsWith("/")) {
|
|
37
|
-
return {
|
|
42
|
+
return { isClr: false };
|
|
38
43
|
}
|
|
39
44
|
// Parse the specifier into package name and subpath
|
|
40
45
|
const parsed = this.parseModuleSpecifier(moduleSpecifier);
|
|
41
46
|
if (!parsed) {
|
|
42
|
-
return {
|
|
47
|
+
return { isClr: false };
|
|
43
48
|
}
|
|
44
49
|
const { packageName, subpath } = parsed;
|
|
45
|
-
// No subpath means it's not a namespace import (e.g., just "@
|
|
50
|
+
// No subpath means it's not a namespace import (e.g., just "@scope/pkg")
|
|
46
51
|
if (!subpath) {
|
|
47
|
-
return {
|
|
52
|
+
return { isClr: false };
|
|
48
53
|
}
|
|
49
54
|
// Resolve package root using Node resolution
|
|
50
55
|
const pkgRoot = this.resolvePkgRoot(packageName);
|
|
51
56
|
if (!pkgRoot) {
|
|
52
|
-
return {
|
|
57
|
+
return { isClr: false };
|
|
53
58
|
}
|
|
59
|
+
// Strip .js extension from subpath (e.g., "nodejs.js" -> "nodejs")
|
|
60
|
+
// This allows imports like "@tsonic/nodejs/nodejs.js" to find "nodejs/bindings.json"
|
|
61
|
+
const namespaceDir = subpath.endsWith(".js")
|
|
62
|
+
? subpath.slice(0, -3)
|
|
63
|
+
: subpath;
|
|
54
64
|
// Check if bindings.json exists in the namespace directory
|
|
55
|
-
const bindingsPath = join(pkgRoot,
|
|
65
|
+
const bindingsPath = join(pkgRoot, namespaceDir, "bindings.json");
|
|
56
66
|
if (!this.hasBindings(bindingsPath)) {
|
|
57
|
-
return {
|
|
67
|
+
return { isClr: false };
|
|
58
68
|
}
|
|
69
|
+
// Extract namespace from bindings.json (tsbindgen format)
|
|
70
|
+
// This is the authoritative namespace, not the subpath
|
|
71
|
+
const resolvedNamespace = this.extractNamespace(bindingsPath, namespaceDir);
|
|
59
72
|
// Check for optional metadata.json
|
|
60
|
-
const metadataPath = join(pkgRoot,
|
|
73
|
+
const metadataPath = join(pkgRoot, namespaceDir, "internal", "metadata.json");
|
|
61
74
|
const hasMetadata = this.fileExists(metadataPath);
|
|
75
|
+
// Extract assembly name from bindings.json types
|
|
76
|
+
const assembly = this.extractAssembly(bindingsPath);
|
|
62
77
|
return {
|
|
63
|
-
|
|
78
|
+
isClr: true,
|
|
64
79
|
packageName,
|
|
65
|
-
resolvedNamespace
|
|
80
|
+
resolvedNamespace,
|
|
66
81
|
bindingsPath,
|
|
67
82
|
metadataPath: hasMetadata ? metadataPath : undefined,
|
|
83
|
+
assembly,
|
|
68
84
|
};
|
|
69
85
|
}
|
|
70
86
|
/**
|
|
71
87
|
* Parse a module specifier into package name and subpath
|
|
72
88
|
*
|
|
73
89
|
* Examples:
|
|
74
|
-
* - "@
|
|
75
|
-
* - "
|
|
76
|
-
* - "@
|
|
77
|
-
* - "
|
|
90
|
+
* - "@scope/pkg/System.IO" -> { packageName: "@scope/pkg", subpath: "System.IO" }
|
|
91
|
+
* - "mypkg/Namespace" -> { packageName: "mypkg", subpath: "Namespace" }
|
|
92
|
+
* - "@scope/pkg" -> null (no subpath)
|
|
93
|
+
* - "mypkg" -> null (no subpath)
|
|
78
94
|
*/
|
|
79
95
|
parseModuleSpecifier(spec) {
|
|
80
96
|
if (spec.startsWith("@")) {
|
|
@@ -155,6 +171,80 @@ export class DotNetImportResolver {
|
|
|
155
171
|
this.bindingsExistsCache.set(bindingsPath, exists);
|
|
156
172
|
return exists;
|
|
157
173
|
}
|
|
174
|
+
/**
|
|
175
|
+
* Extract the namespace from a bindings.json file (cached).
|
|
176
|
+
* Falls back to the subpath if namespace cannot be extracted.
|
|
177
|
+
*
|
|
178
|
+
* This reads the 'namespace' field from tsbindgen format files,
|
|
179
|
+
* which is the authoritative CLR namespace for the binding.
|
|
180
|
+
*/
|
|
181
|
+
extractNamespace(bindingsPath, fallback) {
|
|
182
|
+
const cached = this.namespaceCache.get(bindingsPath);
|
|
183
|
+
if (cached !== undefined) {
|
|
184
|
+
return cached ?? fallback;
|
|
185
|
+
}
|
|
186
|
+
try {
|
|
187
|
+
const content = readFileSync(bindingsPath, "utf-8");
|
|
188
|
+
const parsed = JSON.parse(content);
|
|
189
|
+
// Check for tsbindgen format: { namespace: string, types: [...] }
|
|
190
|
+
if (parsed !== null &&
|
|
191
|
+
typeof parsed === "object" &&
|
|
192
|
+
"namespace" in parsed &&
|
|
193
|
+
typeof parsed.namespace === "string") {
|
|
194
|
+
const namespace = parsed
|
|
195
|
+
.namespace;
|
|
196
|
+
this.namespaceCache.set(bindingsPath, namespace);
|
|
197
|
+
return namespace;
|
|
198
|
+
}
|
|
199
|
+
// No namespace found, cache null and fall back
|
|
200
|
+
this.namespaceCache.set(bindingsPath, null);
|
|
201
|
+
return fallback;
|
|
202
|
+
}
|
|
203
|
+
catch {
|
|
204
|
+
// Failed to read/parse, cache null and fall back
|
|
205
|
+
this.namespaceCache.set(bindingsPath, null);
|
|
206
|
+
return fallback;
|
|
207
|
+
}
|
|
208
|
+
}
|
|
209
|
+
/**
|
|
210
|
+
* Extract the assembly name from a bindings.json file (cached).
|
|
211
|
+
* Looks at the first type's assemblyName field.
|
|
212
|
+
*
|
|
213
|
+
* This provides the assembly name for reference in .csproj files.
|
|
214
|
+
*/
|
|
215
|
+
extractAssembly(bindingsPath) {
|
|
216
|
+
const cached = this.assemblyCache.get(bindingsPath);
|
|
217
|
+
if (cached !== undefined) {
|
|
218
|
+
return cached ?? undefined;
|
|
219
|
+
}
|
|
220
|
+
try {
|
|
221
|
+
const content = readFileSync(bindingsPath, "utf-8");
|
|
222
|
+
const parsed = JSON.parse(content);
|
|
223
|
+
// Check for tsbindgen format: { namespace: string, types: [...] }
|
|
224
|
+
if (parsed !== null &&
|
|
225
|
+
typeof parsed === "object" &&
|
|
226
|
+
"types" in parsed &&
|
|
227
|
+
Array.isArray(parsed.types)) {
|
|
228
|
+
const types = parsed.types;
|
|
229
|
+
if (types.length > 0) {
|
|
230
|
+
const firstType = types[0];
|
|
231
|
+
if (typeof firstType.assemblyName === "string") {
|
|
232
|
+
const assembly = firstType.assemblyName;
|
|
233
|
+
this.assemblyCache.set(bindingsPath, assembly);
|
|
234
|
+
return assembly;
|
|
235
|
+
}
|
|
236
|
+
}
|
|
237
|
+
}
|
|
238
|
+
// No assembly found, cache null
|
|
239
|
+
this.assemblyCache.set(bindingsPath, null);
|
|
240
|
+
return undefined;
|
|
241
|
+
}
|
|
242
|
+
catch {
|
|
243
|
+
// Failed to read/parse, cache null
|
|
244
|
+
this.assemblyCache.set(bindingsPath, null);
|
|
245
|
+
return undefined;
|
|
246
|
+
}
|
|
247
|
+
}
|
|
158
248
|
/**
|
|
159
249
|
* Check if a file exists (not cached - used for optional files)
|
|
160
250
|
*/
|
|
@@ -177,7 +267,7 @@ export class DotNetImportResolver {
|
|
|
177
267
|
/**
|
|
178
268
|
* Create a resolver instance for a given source root
|
|
179
269
|
*/
|
|
180
|
-
export const
|
|
181
|
-
return new
|
|
270
|
+
export const createClrBindingsResolver = (sourceRoot) => {
|
|
271
|
+
return new ClrBindingsResolver(sourceRoot);
|
|
182
272
|
};
|
|
183
|
-
//# sourceMappingURL=
|
|
273
|
+
//# sourceMappingURL=clr-bindings-resolver.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"clr-bindings-resolver.js","sourceRoot":"","sources":["../../src/resolver/clr-bindings-resolver.ts"],"names":[],"mappings":"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"}
|
|
@@ -4,17 +4,17 @@
|
|
|
4
4
|
import { Result } from "../types/result.js";
|
|
5
5
|
import { Diagnostic } from "../types/diagnostic.js";
|
|
6
6
|
import { ResolvedModule } from "./types.js";
|
|
7
|
-
import {
|
|
7
|
+
import { ClrBindingsResolver } from "./clr-bindings-resolver.js";
|
|
8
8
|
/**
|
|
9
9
|
* Resolve import specifier to module
|
|
10
10
|
*/
|
|
11
|
-
export declare const resolveImport: (importSpecifier: string, containingFile: string, sourceRoot: string,
|
|
11
|
+
export declare const resolveImport: (importSpecifier: string, containingFile: string, sourceRoot: string, clrResolver?: ClrBindingsResolver) => Result<ResolvedModule, Diagnostic>;
|
|
12
12
|
/**
|
|
13
13
|
* Resolve local import with ESM rules
|
|
14
14
|
*/
|
|
15
15
|
export declare const resolveLocalImport: (importSpecifier: string, containingFile: string, sourceRoot: string) => Result<ResolvedModule, Diagnostic>;
|
|
16
16
|
/**
|
|
17
|
-
* Resolve
|
|
17
|
+
* Resolve CLR import (namespace validation)
|
|
18
18
|
*/
|
|
19
|
-
export declare const
|
|
19
|
+
export declare const resolveClrImport: (importSpecifier: string) => Result<ResolvedModule, Diagnostic>;
|
|
20
20
|
//# sourceMappingURL=import-resolution.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"import-resolution.d.ts","sourceRoot":"","sources":["../../src/resolver/import-resolution.ts"],"names":[],"mappings":"AAAA;;GAEG;AAIH,OAAO,EAAE,MAAM,EAAa,MAAM,oBAAoB,CAAC;AACvD,OAAO,EAAE,UAAU,EAAoB,MAAM,wBAAwB,CAAC;AAEtE,OAAO,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAE5C,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"import-resolution.d.ts","sourceRoot":"","sources":["../../src/resolver/import-resolution.ts"],"names":[],"mappings":"AAAA;;GAEG;AAIH,OAAO,EAAE,MAAM,EAAa,MAAM,oBAAoB,CAAC;AACvD,OAAO,EAAE,UAAU,EAAoB,MAAM,wBAAwB,CAAC;AAEtE,OAAO,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAE5C,OAAO,EAAE,mBAAmB,EAAE,MAAM,4BAA4B,CAAC;AAEjE;;GAEG;AACH,eAAO,MAAM,aAAa,GACxB,iBAAiB,MAAM,EACvB,gBAAgB,MAAM,EACtB,YAAY,MAAM,EAClB,cAAc,mBAAmB,KAChC,MAAM,CAAC,cAAc,EAAE,UAAU,CAqDnC,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,kBAAkB,GAC7B,iBAAiB,MAAM,EACvB,gBAAgB,MAAM,EACtB,YAAY,MAAM,KACjB,MAAM,CAAC,cAAc,EAAE,UAAU,CA+DnC,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,gBAAgB,GAC3B,iBAAiB,MAAM,KACtB,MAAM,CAAC,cAAc,EAAE,UAAU,CAuBnC,CAAC"}
|