@@ -151,7 +151,7 @@ namespace ts {
151151 const toImport = oldFromNew !== undefined
152152 // If we're at the new location (file was already renamed), need to redo module resolution starting from the old location.
153153 // TODO:GH#18217
154- ? getSourceFileToImportFromResolved ( resolveModuleName ( importLiteral . text , oldImportFromPath , program . getCompilerOptions ( ) , host as ModuleResolutionHost ) , oldToNew , host )
154+ ? getSourceFileToImportFromResolved ( resolveModuleName ( importLiteral . text , oldImportFromPath , program . getCompilerOptions ( ) , host as ModuleResolutionHost ) , oldToNew )
155155 : getSourceFileToImport ( importedModuleSymbol , importLiteral , sourceFile , program , host , oldToNew ) ;
156156
157157 // Need an update if the imported file moved, or the importing file moved and was using a relative path.
@@ -192,28 +192,35 @@ namespace ts {
192192 const resolved = host . resolveModuleNames
193193 ? host . getResolvedModuleWithFailedLookupLocationsFromCache && host . getResolvedModuleWithFailedLookupLocationsFromCache ( importLiteral . text , importingSourceFile . fileName )
194194 : program . getResolvedModuleWithFailedLookupLocationsFromCache ( importLiteral . text , importingSourceFile . fileName ) ;
195- return getSourceFileToImportFromResolved ( resolved , oldToNew , host ) ;
195+ return getSourceFileToImportFromResolved ( resolved , oldToNew ) ;
196196 }
197197 }
198198
199- function getSourceFileToImportFromResolved ( resolved : ResolvedModuleWithFailedLookupLocations | undefined , oldToNew : PathUpdater , host : LanguageServiceHost ) : ToImport | undefined {
199+ function getSourceFileToImportFromResolved ( resolved : ResolvedModuleWithFailedLookupLocations | undefined , oldToNew : PathUpdater ) : ToImport | undefined {
200200 // Search through all locations looking for a moved file, and only then test already existing files.
201201 // This is because if `a.ts` is compiled to `a.js` and `a.ts` is moved, we don't want to resolve anything to `a.js`, but to `a.ts`'s new location.
202- return tryEach ( tryGetNewFile ) || tryEach ( tryGetOldFile ) ;
202+ if ( ! resolved ) return undefined ;
203203
204- function tryEach ( cb : ( oldFileName : string ) => ToImport | undefined ) : ToImport | undefined {
205- return resolved && (
206- ( resolved . resolvedModule && cb ( resolved . resolvedModule . resolvedFileName ) ) || firstDefined ( resolved . failedLookupLocations , cb ) ) ;
204+ // First try resolved module
205+ if ( resolved . resolvedModule ) {
206+ const result = tryChange ( resolved . resolvedModule . resolvedFileName ) ;
207+ if ( result ) return result ;
207208 }
208209
209- function tryGetNewFile ( oldFileName : string ) : ToImport | undefined {
210- const newFileName = oldToNew ( oldFileName ) ;
211- return newFileName !== undefined && host . fileExists ! ( newFileName ) ? { newFileName, updated : true } : undefined ; // TODO: GH#18217
210+ // Then failed lookups except package.json since we dont want to touch them (only included ts/js files)
211+ const result = forEach ( resolved . failedLookupLocations , tryChangeWithIgnoringPackageJson ) ;
212+ if ( result ) return result ;
213+
214+ // If nothing changed, then result is resolved module file thats not updated
215+ return resolved . resolvedModule && { newFileName : resolved . resolvedModule . resolvedFileName , updated : false } ;
216+
217+ function tryChangeWithIgnoringPackageJson ( oldFileName : string ) {
218+ return ! endsWith ( oldFileName , "/package.json" ) ? tryChange ( oldFileName ) : undefined ;
212219 }
213220
214- function tryGetOldFile ( oldFileName : string ) : ToImport | undefined {
221+ function tryChange ( oldFileName : string ) {
215222 const newFileName = oldToNew ( oldFileName ) ;
216- return host . fileExists ! ( oldFileName ) ? newFileName !== undefined ? { newFileName, updated : true } : { newFileName : oldFileName , updated : false } : undefined ; // TODO: GH#18217
223+ return newFileName && { newFileName, updated : true } ;
217224 }
218225 }
219226
0 commit comments