Skip to content

Commit 340867b

Browse files
committed
Make the module resolution cache apis for updating compiler options or clearing it
1 parent 06f25c0 commit 340867b

File tree

5 files changed

+48
-16
lines changed

5 files changed

+48
-16
lines changed

src/compiler/moduleNameResolver.ts

Lines changed: 31 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -444,6 +444,12 @@ namespace ts {
444444
export interface ModuleResolutionCache extends NonRelativeModuleNameResolutionCache {
445445
getOrCreateCacheForDirectory(directoryName: string, redirectedReference?: ResolvedProjectReference): Map<ResolvedModuleWithFailedLookupLocations>;
446446
/*@internal*/ directoryToModuleNameMap: CacheWithRedirects<ESMap<string, ResolvedModuleWithFailedLookupLocations>>;
447+
clear(): void;
448+
/**
449+
* Updates with the current compilerOptions the cache will operate with.
450+
* This updates the redirects map as well if needed so module resolutions are cached if they can across the projects
451+
*/
452+
update(options: CompilerOptions): void;
447453
}
448454

449455
/**
@@ -528,7 +534,31 @@ namespace ts {
528534
currentDirectory: string,
529535
getCanonicalFileName: GetCanonicalFileName): ModuleResolutionCache {
530536

531-
return { getOrCreateCacheForDirectory, getOrCreateCacheForModuleName, directoryToModuleNameMap, moduleNameToDirectoryMap };
537+
return {
538+
getOrCreateCacheForDirectory,
539+
getOrCreateCacheForModuleName,
540+
directoryToModuleNameMap,
541+
moduleNameToDirectoryMap,
542+
clear,
543+
update,
544+
};
545+
546+
function clear() {
547+
directoryToModuleNameMap.clear();
548+
moduleNameToDirectoryMap.clear();
549+
}
550+
551+
function update(options: CompilerOptions) {
552+
if (!options.configFile) return;
553+
const ref: ResolvedProjectReference = {
554+
sourceFile: options.configFile,
555+
commandLine: { options } as ParsedCommandLine
556+
};
557+
directoryToModuleNameMap.setOwnMap(directoryToModuleNameMap.getOrCreateMapOfCacheRedirects(ref));
558+
moduleNameToDirectoryMap.setOwnMap(moduleNameToDirectoryMap.getOrCreateMapOfCacheRedirects(ref));
559+
directoryToModuleNameMap.setOwnOptions(options);
560+
moduleNameToDirectoryMap.setOwnOptions(options);
561+
}
532562

533563
function getOrCreateCacheForDirectory(directoryName: string, redirectedReference?: ResolvedProjectReference) {
534564
const path = toPath(directoryName, currentDirectory, getCanonicalFileName);

src/compiler/resolutionCache.ts

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -284,8 +284,7 @@ namespace ts {
284284
}
285285

286286
function clearPerDirectoryResolutions() {
287-
perDirectoryResolvedModuleNames.clear();
288-
nonRelativeModuleNameCache.clear();
287+
moduleResolutionCache.clear();
289288
perDirectoryResolvedTypeReferenceDirectives.clear();
290289
nonRelativeExternalModuleResolutions.forEach(watchFailedLookupLocationOfNonRelativeModuleResolutions);
291290
nonRelativeExternalModuleResolutions.clear();

src/compiler/tsbuildPublic.ts

Lines changed: 4 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -558,10 +558,7 @@ namespace ts {
558558
compilerHost.getSourceFile = cache.originalGetSourceFile;
559559
state.readFileWithCache = cache.originalReadFileWithCache;
560560
extendedConfigCache.clear();
561-
if (moduleResolutionCache) {
562-
moduleResolutionCache.directoryToModuleNameMap.clear();
563-
moduleResolutionCache.moduleNameToDirectoryMap.clear();
564-
}
561+
moduleResolutionCache?.clear();
565562
state.cache = undefined;
566563
}
567564

@@ -1321,20 +1318,14 @@ namespace ts {
13211318
Debug.assert(moduleResolutionCache.moduleNameToDirectoryMap.redirectsMap.size === 0);
13221319
moduleResolutionCache.directoryToModuleNameMap.redirectsMap.set(projPath, moduleResolutionCache.directoryToModuleNameMap.ownMap);
13231320
moduleResolutionCache.moduleNameToDirectoryMap.redirectsMap.set(projPath, moduleResolutionCache.moduleNameToDirectoryMap.ownMap);
1321+
moduleResolutionCache.directoryToModuleNameMap.setOwnOptions(config.options);
1322+
moduleResolutionCache.moduleNameToDirectoryMap.setOwnOptions(config.options);
13241323
}
13251324
else {
13261325
// Set correct own map
13271326
Debug.assert(moduleResolutionCache.moduleNameToDirectoryMap.redirectsMap.size > 0);
1328-
1329-
const ref: ResolvedProjectReference = {
1330-
sourceFile: config.options.configFile!,
1331-
commandLine: config
1332-
};
1333-
moduleResolutionCache.directoryToModuleNameMap.setOwnMap(moduleResolutionCache.directoryToModuleNameMap.getOrCreateMapOfCacheRedirects(ref));
1334-
moduleResolutionCache.moduleNameToDirectoryMap.setOwnMap(moduleResolutionCache.moduleNameToDirectoryMap.getOrCreateMapOfCacheRedirects(ref));
1327+
moduleResolutionCache.update(config.options);
13351328
}
1336-
moduleResolutionCache.directoryToModuleNameMap.setOwnOptions(config.options);
1337-
moduleResolutionCache.moduleNameToDirectoryMap.setOwnOptions(config.options);
13381329
}
13391330

13401331
function checkConfigFileUpToDateStatus(state: SolutionBuilderState, configFile: string, oldestOutputFileTime: Date, oldestOutputFileName: string): Status.OutOfDateWithSelf | undefined {

tests/baselines/reference/api/tsserverlibrary.d.ts

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4729,6 +4729,12 @@ declare namespace ts {
47294729
*/
47304730
interface ModuleResolutionCache extends NonRelativeModuleNameResolutionCache {
47314731
getOrCreateCacheForDirectory(directoryName: string, redirectedReference?: ResolvedProjectReference): Map<ResolvedModuleWithFailedLookupLocations>;
4732+
clear(): void;
4733+
/**
4734+
* Updates with the current compilerOptions the cache will operate with.
4735+
* This updates the redirects map as well if needed so module resolutions are cached if they can across the projects
4736+
*/
4737+
update(options: CompilerOptions): void;
47324738
}
47334739
/**
47344740
* Stored map from non-relative module name to a table: directory -> result of module lookup in this directory

tests/baselines/reference/api/typescript.d.ts

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4729,6 +4729,12 @@ declare namespace ts {
47294729
*/
47304730
interface ModuleResolutionCache extends NonRelativeModuleNameResolutionCache {
47314731
getOrCreateCacheForDirectory(directoryName: string, redirectedReference?: ResolvedProjectReference): Map<ResolvedModuleWithFailedLookupLocations>;
4732+
clear(): void;
4733+
/**
4734+
* Updates with the current compilerOptions the cache will operate with.
4735+
* This updates the redirects map as well if needed so module resolutions are cached if they can across the projects
4736+
*/
4737+
update(options: CompilerOptions): void;
47324738
}
47334739
/**
47344740
* Stored map from non-relative module name to a table: directory -> result of module lookup in this directory

0 commit comments

Comments
 (0)