@@ -84,7 +84,11 @@ namespace ts {
84
84
return { fileName : resolved . path , packageId : resolved . packageId } ;
85
85
}
86
86
87
- function createResolvedModuleWithFailedLookupLocations ( resolved : Resolved | undefined , isExternalLibraryImport : boolean , failedLookupLocations : string [ ] ) : ResolvedModuleWithFailedLookupLocations {
87
+ function createResolvedModuleWithFailedLookupLocations ( resolved : Resolved | undefined , isExternalLibraryImport : boolean | undefined , failedLookupLocations : string [ ] , resultFromCache : ResolvedModuleWithFailedLookupLocations | undefined ) : ResolvedModuleWithFailedLookupLocations {
88
+ if ( resultFromCache ) {
89
+ resultFromCache . failedLookupLocations . push ( ...failedLookupLocations ) ;
90
+ return resultFromCache ;
91
+ }
88
92
return {
89
93
resolvedModule : resolved && { resolvedFileName : resolved . path , originalPath : resolved . originalPath === true ? undefined : resolved . originalPath , extension : resolved . extension , isExternalLibraryImport, packageId : resolved . packageId } ,
90
94
failedLookupLocations
@@ -96,6 +100,7 @@ namespace ts {
96
100
compilerOptions : CompilerOptions ;
97
101
traceEnabled : boolean ;
98
102
failedLookupLocations : Push < string > ;
103
+ resultFromCache ?: ResolvedModuleWithFailedLookupLocations ;
99
104
}
100
105
101
106
/** Just the fields that we use for module resolution. */
@@ -926,11 +931,7 @@ namespace ts {
926
931
const state : ModuleResolutionState = { compilerOptions, host, traceEnabled, failedLookupLocations } ;
927
932
928
933
const result = forEach ( extensions , ext => tryResolve ( ext ) ) ;
929
- if ( result && result . value ) {
930
- const { resolved, isExternalLibraryImport } = result . value ;
931
- return createResolvedModuleWithFailedLookupLocations ( resolved , isExternalLibraryImport , failedLookupLocations ) ;
932
- }
933
- return { resolvedModule : undefined , failedLookupLocations } ;
934
+ return createResolvedModuleWithFailedLookupLocations ( result ?. value ?. resolved , result ?. value ?. isExternalLibraryImport , failedLookupLocations , state . resultFromCache ) ;
934
935
935
936
function tryResolve ( extensions : Extensions ) : SearchResult < { resolved : Resolved , isExternalLibraryImport : boolean } > {
936
937
const loader : ResolutionKindSpecificLoader = ( extensions , candidate , onlyRecordFailures , state ) => nodeLoadModuleByRelativeName ( extensions , candidate , onlyRecordFailures , state , /*considerPackageJson*/ true ) ;
@@ -1435,7 +1436,7 @@ namespace ts {
1435
1436
if ( state . traceEnabled ) {
1436
1437
trace ( state . host , Diagnostics . Resolution_for_module_0_was_found_in_cache_from_location_1 , moduleName , containingDirectory ) ;
1437
1438
}
1438
- state . failedLookupLocations . push ( ... result . failedLookupLocations ) ;
1439
+ state . resultFromCache = result ;
1439
1440
return { value : result . resolvedModule && { path : result . resolvedModule . resolvedFileName , originalPath : result . resolvedModule . originalPath || true , extension : result . resolvedModule . extension , packageId : result . resolvedModule . packageId } } ;
1440
1441
}
1441
1442
}
@@ -1448,7 +1449,7 @@ namespace ts {
1448
1449
1449
1450
const resolved = tryResolve ( Extensions . TypeScript ) || tryResolve ( Extensions . JavaScript ) ;
1450
1451
// No originalPath because classic resolution doesn't resolve realPath
1451
- return createResolvedModuleWithFailedLookupLocations ( resolved && resolved . value , /*isExternalLibraryImport*/ false , failedLookupLocations ) ;
1452
+ return createResolvedModuleWithFailedLookupLocations ( resolved && resolved . value , /*isExternalLibraryImport*/ false , failedLookupLocations , state . resultFromCache ) ;
1452
1453
1453
1454
function tryResolve ( extensions : Extensions ) : SearchResult < Resolved > {
1454
1455
const resolvedUsingSettings = tryLoadModuleUsingOptionalResolutionSettings ( extensions , moduleName , containingDirectory , loadModuleFromFileNoPackageId , state ) ;
@@ -1495,7 +1496,7 @@ namespace ts {
1495
1496
const failedLookupLocations : string [ ] = [ ] ;
1496
1497
const state : ModuleResolutionState = { compilerOptions, host, traceEnabled, failedLookupLocations } ;
1497
1498
const resolved = loadModuleFromImmediateNodeModulesDirectory ( Extensions . DtsOnly , moduleName , globalCache , state , /*typesScopeOnly*/ false ) ;
1498
- return createResolvedModuleWithFailedLookupLocations ( resolved , /*isExternalLibraryImport*/ true , failedLookupLocations ) ;
1499
+ return createResolvedModuleWithFailedLookupLocations ( resolved , /*isExternalLibraryImport*/ true , failedLookupLocations , state . resultFromCache ) ;
1499
1500
}
1500
1501
1501
1502
/**
0 commit comments