Use original path from resolved module cache when available.

Fixes #26273
Thanks to @ajafff, for partial fix  and test (#26310)
This commit is contained in:
Sheetal Nandi
2018-08-10 15:23:35 -07:00
parent 46d3caab7c
commit 82d4cccf53
6 changed files with 31 additions and 20 deletions

View File

@@ -427,6 +427,23 @@ namespace ts {
resolution = resolveModuleName("a", "/foo.ts", compilerOptions, host, cache);
assert.isUndefined(resolution.resolvedModule, "lookup in parent directory doesn't hit the cache");
});
it("preserves originalPath on cache hit", () => {
const host = createModuleResolutionHost(
/*hasDirectoryExists*/ true,
{ name: "/linked/index.d.ts", symlinks: ["/app/node_modules/linked/index.d.ts"] },
{ name: "/app/node_modules/linked/package.json", content: '{"version": "0.0.0", "main": "./index"}' },
);
const cache = createModuleResolutionCache("/", (f) => f);
const compilerOptions: CompilerOptions = { moduleResolution: ModuleResolutionKind.NodeJs };
checkResolution(resolveModuleName("linked", "/app/src/app.ts", compilerOptions, host, cache));
checkResolution(resolveModuleName("linked", "/app/lib/main.ts", compilerOptions, host, cache));
function checkResolution(resolution: ResolvedModuleWithFailedLookupLocations) {
checkResolvedModule(resolution.resolvedModule, createResolvedModule("/linked/index.d.ts", /*isExternalLibraryImport*/ true));
assert.strictEqual(resolution.resolvedModule!.originalPath, "/app/node_modules/linked/index.d.ts");
}
});
});
describe("Module resolution - relative imports", () => {

View File

@@ -8415,7 +8415,7 @@ new C();`
expectedTrace.push(`Loading module '${moduleName}' from 'node_modules' folder, target file type 'TypeScript'.`);
getExpectedMissedLocationResolutionTrace(host, expectedTrace, getDirectoryPath(file.path), module, moduleName, /*useNodeModules*/ true, cacheLocation);
expectedTrace.push(`Resolution for module '${moduleName}' was found in cache from location '${cacheLocation}'.`);
getExpectedResolutionTraceFooter(expectedTrace, module, moduleName, /*addRealPathTrace*/ true, /*ignoreModuleFileFound*/ true);
getExpectedResolutionTraceFooter(expectedTrace, module, moduleName, /*addRealPathTrace*/ false, /*ignoreModuleFileFound*/ true);
return expectedTrace;
}