@@ -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