@@ -400,6 +400,10 @@ namespace ts {
400
400
const compilerHost = createCompilerHostFromProgramHost ( host , ( ) => projectCompilerOptions ) ;
401
401
setGetSourceFileAsHashVersioned ( compilerHost , host ) ;
402
402
403
+ compilerHost . resolveModuleNames = maybeBind ( host , host . resolveModuleNames ) ;
404
+ compilerHost . resolveTypeReferenceDirectives = maybeBind ( host , host . resolveTypeReferenceDirectives ) ;
405
+ let moduleResolutionCache = ! compilerHost . resolveModuleNames ? createModuleResolutionCache ( currentDirectory , getCanonicalFileName ) : undefined ;
406
+
403
407
const buildInfoChecked = createFileMap < true > ( toPath ) ;
404
408
405
409
// Watch state
@@ -1097,6 +1101,30 @@ namespace ts {
1097
1101
1098
1102
// TODO: handle resolve module name to cache result in project reference redirect
1099
1103
projectCompilerOptions = configFile . options ;
1104
+ // Update module resolution cache if needed
1105
+ if ( moduleResolutionCache ) {
1106
+ const projPath = toPath ( proj ) ;
1107
+ if ( moduleResolutionCache . directoryToModuleNameMap . redirectsMap . size === 0 ) {
1108
+ // The own map will be for projectCompilerOptions
1109
+ Debug . assert ( moduleResolutionCache . moduleNameToDirectoryMap . redirectsMap . size === 0 ) ;
1110
+ moduleResolutionCache . directoryToModuleNameMap . redirectsMap . set ( projPath , moduleResolutionCache . directoryToModuleNameMap . ownMap ) ;
1111
+ moduleResolutionCache . moduleNameToDirectoryMap . redirectsMap . set ( projPath , moduleResolutionCache . moduleNameToDirectoryMap . ownMap ) ;
1112
+ }
1113
+ else {
1114
+ // Set correct own map
1115
+ Debug . assert ( moduleResolutionCache . moduleNameToDirectoryMap . redirectsMap . size > 0 ) ;
1116
+
1117
+ const ref : ResolvedProjectReference = {
1118
+ sourceFile : projectCompilerOptions . configFile ! ,
1119
+ commandLine : configFile
1120
+ } ;
1121
+ moduleResolutionCache . directoryToModuleNameMap . setOwnMap ( moduleResolutionCache . directoryToModuleNameMap . getOrCreateMapOfCacheRedirects ( ref ) ) ;
1122
+ moduleResolutionCache . moduleNameToDirectoryMap . setOwnMap ( moduleResolutionCache . moduleNameToDirectoryMap . getOrCreateMapOfCacheRedirects ( ref ) ) ;
1123
+ }
1124
+ moduleResolutionCache . directoryToModuleNameMap . setOwnOptions ( projectCompilerOptions ) ;
1125
+ moduleResolutionCache . moduleNameToDirectoryMap . setOwnOptions ( projectCompilerOptions ) ;
1126
+ }
1127
+
1100
1128
const program = host . createProgram (
1101
1129
configFile . fileNames ,
1102
1130
configFile . options ,
@@ -1368,6 +1396,13 @@ namespace ts {
1368
1396
readFileWithCache = newReadFileWithCache ;
1369
1397
compilerHost . getSourceFile = getSourceFileWithCache ! ;
1370
1398
1399
+ const originalResolveModuleNames = compilerHost . resolveModuleNames ;
1400
+ if ( ! compilerHost . resolveModuleNames ) {
1401
+ const loader = ( moduleName : string , containingFile : string , redirectedReference : ResolvedProjectReference | undefined ) => resolveModuleName ( moduleName , containingFile , projectCompilerOptions , compilerHost , moduleResolutionCache , redirectedReference ) . resolvedModule ! ;
1402
+ compilerHost . resolveModuleNames = ( moduleNames , containingFile , _reusedNames , redirectedReference ) =>
1403
+ loadWithLocalCache < ResolvedModuleFull > ( Debug . assertEachDefined ( moduleNames ) , containingFile , redirectedReference , loader ) ;
1404
+ }
1405
+
1371
1406
const graph = getGlobalDependencyGraph ( ) ;
1372
1407
reportBuildQueue ( graph ) ;
1373
1408
let anyFailed = false ;
@@ -1428,6 +1463,8 @@ namespace ts {
1428
1463
host . writeFile = originalWriteFile ;
1429
1464
compilerHost . getSourceFile = savedGetSourceFile ;
1430
1465
readFileWithCache = savedReadFileWithCache ;
1466
+ compilerHost . resolveModuleNames = originalResolveModuleNames ;
1467
+ moduleResolutionCache = undefined ;
1431
1468
return anyFailed ? ExitStatus . DiagnosticsPresent_OutputsSkipped : ExitStatus . Success ;
1432
1469
}
1433
1470
0 commit comments