@@ -84,7 +84,11 @@ namespace ts {
8484 return { fileName : resolved . path , packageId : resolved . packageId } ;
8585 }
8686
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+ }
8892 return {
8993 resolvedModule : resolved && { resolvedFileName : resolved . path , originalPath : resolved . originalPath === true ? undefined : resolved . originalPath , extension : resolved . extension , isExternalLibraryImport, packageId : resolved . packageId } ,
9094 failedLookupLocations
@@ -96,6 +100,7 @@ namespace ts {
96100 compilerOptions : CompilerOptions ;
97101 traceEnabled : boolean ;
98102 failedLookupLocations : Push < string > ;
103+ resultFromCache ?: ResolvedModuleWithFailedLookupLocations ;
99104 }
100105
101106 /** Just the fields that we use for module resolution. */
@@ -926,11 +931,7 @@ namespace ts {
926931 const state : ModuleResolutionState = { compilerOptions, host, traceEnabled, failedLookupLocations } ;
927932
928933 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 ) ;
934935
935936 function tryResolve ( extensions : Extensions ) : SearchResult < { resolved : Resolved , isExternalLibraryImport : boolean } > {
936937 const loader : ResolutionKindSpecificLoader = ( extensions , candidate , onlyRecordFailures , state ) => nodeLoadModuleByRelativeName ( extensions , candidate , onlyRecordFailures , state , /*considerPackageJson*/ true ) ;
@@ -1435,7 +1436,7 @@ namespace ts {
14351436 if ( state . traceEnabled ) {
14361437 trace ( state . host , Diagnostics . Resolution_for_module_0_was_found_in_cache_from_location_1 , moduleName , containingDirectory ) ;
14371438 }
1438- state . failedLookupLocations . push ( ... result . failedLookupLocations ) ;
1439+ state . resultFromCache = result ;
14391440 return { value : result . resolvedModule && { path : result . resolvedModule . resolvedFileName , originalPath : result . resolvedModule . originalPath || true , extension : result . resolvedModule . extension , packageId : result . resolvedModule . packageId } } ;
14401441 }
14411442 }
@@ -1448,7 +1449,7 @@ namespace ts {
14481449
14491450 const resolved = tryResolve ( Extensions . TypeScript ) || tryResolve ( Extensions . JavaScript ) ;
14501451 // 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 ) ;
14521453
14531454 function tryResolve ( extensions : Extensions ) : SearchResult < Resolved > {
14541455 const resolvedUsingSettings = tryLoadModuleUsingOptionalResolutionSettings ( extensions , moduleName , containingDirectory , loadModuleFromFileNoPackageId , state ) ;
@@ -1495,7 +1496,7 @@ namespace ts {
14951496 const failedLookupLocations : string [ ] = [ ] ;
14961497 const state : ModuleResolutionState = { compilerOptions, host, traceEnabled, failedLookupLocations } ;
14971498 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 ) ;
14991500 }
15001501
15011502 /**
0 commit comments