Merge pull request #26296 from ajafff/modulenameresolver-cache

fix moduleNameResolver cache
This commit is contained in:
Sheetal Nandi 2018-08-10 14:36:54 -07:00 committed by GitHub
commit c8e10a9a66
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 27 additions and 2 deletions

View File

@ -401,7 +401,8 @@ namespace ts {
}
directoryPathMap.set(path, result);
const resolvedFileName = result.resolvedModule && result.resolvedModule.resolvedFileName;
const resolvedFileName = result.resolvedModule &&
(result.resolvedModule.originalPath || result.resolvedModule.resolvedFileName);
// find common prefix between directory and resolved file name
// this common prefix should be the shortest path that has the same resolution
// directory: /a/b/c/d/e

View File

@ -403,6 +403,30 @@ namespace ts {
checkResolvedModule(resolution.resolvedModule, createResolvedModule(resolvedFileName, /*isExternalLibraryImport*/ true));
});
}
it("uses originalPath for caching", () => {
const host = createModuleResolutionHost(
/*hasDirectoryExists*/ true,
{
name: "/modules/a.ts",
symlinks: ["/sub/node_modules/a/index.ts"],
},
{
name: "/sub/node_modules/a/package.json",
content: '{"version": "0.0.0", "main": "./index"}'
}
);
const compilerOptions: CompilerOptions = { moduleResolution: ModuleResolutionKind.NodeJs };
const cache = createModuleResolutionCache("/", (f) => f);
let resolution = resolveModuleName("a", "/sub/dir/foo.ts", compilerOptions, host, cache);
checkResolvedModule(resolution.resolvedModule, createResolvedModule("/modules/a.ts", /*isExternalLibraryImport*/ true));
resolution = resolveModuleName("a", "/sub/foo.ts", compilerOptions, host, cache);
checkResolvedModule(resolution.resolvedModule, createResolvedModule("/modules/a.ts", /*isExternalLibraryImport*/ true));
resolution = resolveModuleName("a", "/foo.ts", compilerOptions, host, cache);
assert.isUndefined(resolution.resolvedModule, "lookup in parent directory doesn't hit the cache");
});
});
describe("Module resolution - relative imports", () => {

View File

@ -22,4 +22,4 @@ export class BindingKey<T> {
export * from "./src/value-promise";
export * from "./src/bindingkey";
// @link: tests/cases/compiler/monorepo/context -> tests/cases/compiler/monorepo/core/node_modules/@loopback/context
// @link: tests/cases/compiler/monorepo/context -> tests/cases/compiler/monorepo/node_modules/@loopback/context