Skip to content

Commit 3264b64

Browse files
committed
Reuse map if module resolution is same for redirected and own files
1 parent 4b81e37 commit 3264b64

File tree

3 files changed

+13
-7
lines changed

3 files changed

+13
-7
lines changed

src/compiler/moduleNameResolver.ts

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -436,10 +436,10 @@ namespace ts {
436436
set(directory: string, result: ResolvedModuleWithFailedLookupLocations): void;
437437
}
438438

439-
export function createModuleResolutionCache(currentDirectory: string, getCanonicalFileName: (s: string) => string): ModuleResolutionCache {
439+
export function createModuleResolutionCache(currentDirectory: string, getCanonicalFileName: (s: string) => string, options?: CompilerOptions): ModuleResolutionCache {
440440
return createModuleResolutionCacheWithMaps(
441-
createCacheWithRedirects(),
442-
createCacheWithRedirects(),
441+
createCacheWithRedirects(options),
442+
createCacheWithRedirects(options),
443443
currentDirectory,
444444
getCanonicalFileName
445445
);
@@ -454,7 +454,7 @@ namespace ts {
454454
}
455455

456456
/*@internal*/
457-
export function createCacheWithRedirects<T>(): CacheWithRedirects<T> {
457+
export function createCacheWithRedirects<T>(options?: CompilerOptions): CacheWithRedirects<T> {
458458
const ownMap: Map<T> = createMap();
459459
const redirectsMap: Map<Map<T>> = createMap();
460460
return {
@@ -471,7 +471,8 @@ namespace ts {
471471
const path = redirectedReference.sourceFile.path;
472472
let redirects = redirectsMap.get(path);
473473
if (!redirects) {
474-
redirects = createMap();
474+
// Reuse map if redirected reference map uses same resolution
475+
redirects = !options || optionsHaveModuleResolutionChanges(options, redirectedReference.commandLine.options) ? createMap() : ownMap;
475476
redirectsMap.set(path, redirects);
476477
}
477478
return redirects;

src/compiler/program.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -773,7 +773,7 @@ namespace ts {
773773
});
774774
}
775775
else {
776-
moduleResolutionCache = createModuleResolutionCache(currentDirectory, x => host.getCanonicalFileName(x));
776+
moduleResolutionCache = createModuleResolutionCache(currentDirectory, x => host.getCanonicalFileName(x), options);
777777
const loader = (moduleName: string, containingFile: string, redirectedReference: ResolvedProjectReference | undefined) => resolveModuleName(moduleName, containingFile, options, host, moduleResolutionCache, redirectedReference).resolvedModule!; // TODO: GH#18217
778778
resolveModuleNamesWorker = (moduleNames, containingFile, _reusedNames, redirectedReference) => loadWithLocalCache<ResolvedModuleFull>(Debug.assertEachDefined(moduleNames), containingFile, redirectedReference, loader);
779779
}

src/compiler/utilities.ts

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -101,7 +101,12 @@ namespace ts {
101101
}
102102

103103
export function changesAffectModuleResolution(oldOptions: CompilerOptions, newOptions: CompilerOptions): boolean {
104-
return oldOptions.configFilePath !== newOptions.configFilePath || moduleResolutionOptionDeclarations.some(o =>
104+
return oldOptions.configFilePath !== newOptions.configFilePath ||
105+
optionsHaveModuleResolutionChanges(oldOptions, newOptions);
106+
}
107+
108+
export function optionsHaveModuleResolutionChanges(oldOptions: CompilerOptions, newOptions: CompilerOptions) {
109+
return moduleResolutionOptionDeclarations.some(o =>
105110
!isJsonEqual(getCompilerOptionValue(oldOptions, o), getCompilerOptionValue(newOptions, o)));
106111
}
107112

0 commit comments

Comments
 (0)