Skip to content

Commit c8e10a9

Browse files
authored
Merge pull request #26296 from ajafff/modulenameresolver-cache
fix moduleNameResolver cache
2 parents 4bb7402 + 3469b62 commit c8e10a9

File tree

3 files changed

+27
-2
lines changed

3 files changed

+27
-2
lines changed

src/compiler/moduleNameResolver.ts

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -401,7 +401,8 @@ namespace ts {
401401
}
402402
directoryPathMap.set(path, result);
403403

404-
const resolvedFileName = result.resolvedModule && result.resolvedModule.resolvedFileName;
404+
const resolvedFileName = result.resolvedModule &&
405+
(result.resolvedModule.originalPath || result.resolvedModule.resolvedFileName);
405406
// find common prefix between directory and resolved file name
406407
// this common prefix should be the shortest path that has the same resolution
407408
// directory: /a/b/c/d/e

src/testRunner/unittests/moduleResolution.ts

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -403,6 +403,30 @@ namespace ts {
403403
checkResolvedModule(resolution.resolvedModule, createResolvedModule(resolvedFileName, /*isExternalLibraryImport*/ true));
404404
});
405405
}
406+
407+
it("uses originalPath for caching", () => {
408+
const host = createModuleResolutionHost(
409+
/*hasDirectoryExists*/ true,
410+
{
411+
name: "/modules/a.ts",
412+
symlinks: ["/sub/node_modules/a/index.ts"],
413+
},
414+
{
415+
name: "/sub/node_modules/a/package.json",
416+
content: '{"version": "0.0.0", "main": "./index"}'
417+
}
418+
);
419+
const compilerOptions: CompilerOptions = { moduleResolution: ModuleResolutionKind.NodeJs };
420+
const cache = createModuleResolutionCache("/", (f) => f);
421+
let resolution = resolveModuleName("a", "/sub/dir/foo.ts", compilerOptions, host, cache);
422+
checkResolvedModule(resolution.resolvedModule, createResolvedModule("/modules/a.ts", /*isExternalLibraryImport*/ true));
423+
424+
resolution = resolveModuleName("a", "/sub/foo.ts", compilerOptions, host, cache);
425+
checkResolvedModule(resolution.resolvedModule, createResolvedModule("/modules/a.ts", /*isExternalLibraryImport*/ true));
426+
427+
resolution = resolveModuleName("a", "/foo.ts", compilerOptions, host, cache);
428+
assert.isUndefined(resolution.resolvedModule, "lookup in parent directory doesn't hit the cache");
429+
});
406430
});
407431

408432
describe("Module resolution - relative imports", () => {

tests/cases/compiler/symbolLinkDeclarationEmitModuleNames.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,4 +22,4 @@ export class BindingKey<T> {
2222
export * from "./src/value-promise";
2323
export * from "./src/bindingkey";
2424

25-
// @link: tests/cases/compiler/monorepo/context -> tests/cases/compiler/monorepo/core/node_modules/@loopback/context
25+
// @link: tests/cases/compiler/monorepo/context -> tests/cases/compiler/monorepo/node_modules/@loopback/context

0 commit comments

Comments
 (0)