@@ -594,7 +594,7 @@ namespace ts {
594
594
let diagnosticsProducingTypeChecker : TypeChecker ;
595
595
let noDiagnosticsTypeChecker : TypeChecker ;
596
596
let classifiableNames : UnderscoreEscapedMap < true > ;
597
- let unmodifiedSourceFilesWithAmbientModules : SourceFile [ ] | undefined ;
597
+ const ambientModuleNameToUnmodifiedFileName = createMap < string > ( ) ;
598
598
599
599
const cachedSemanticDiagnosticsForFile : DiagnosticCache < Diagnostic > = { } ;
600
600
const cachedDeclarationDiagnosticsForFile : DiagnosticCache < DiagnosticWithLocation > = { } ;
@@ -1006,16 +1006,14 @@ namespace ts {
1006
1006
}
1007
1007
1008
1008
// at least one of declarations should come from non-modified source file
1009
- const firstUnmodifiedFile = unmodifiedSourceFilesWithAmbientModules && unmodifiedSourceFilesWithAmbientModules . find (
1010
- f => contains ( f . ambientModuleNames , moduleName )
1011
- ) ;
1009
+ const unmodifiedFile = ambientModuleNameToUnmodifiedFileName . get ( moduleName ) ;
1012
1010
1013
- if ( ! firstUnmodifiedFile ) {
1011
+ if ( ! unmodifiedFile ) {
1014
1012
return false ;
1015
1013
}
1016
1014
1017
1015
if ( isTraceEnabled ( options , host ) ) {
1018
- trace ( host , Diagnostics . Module_0_was_resolved_as_ambient_module_declared_in_1_since_this_file_was_not_modified , moduleName , firstUnmodifiedFile . fileName ) ;
1016
+ trace ( host , Diagnostics . Module_0_was_resolved_as_ambient_module_declared_in_1_since_this_file_was_not_modified , moduleName , unmodifiedFile ) ;
1019
1017
}
1020
1018
return true ;
1021
1019
}
@@ -1204,7 +1202,13 @@ namespace ts {
1204
1202
}
1205
1203
1206
1204
const modifiedFiles = modifiedSourceFiles . map ( f => f . oldFile ) ;
1207
- unmodifiedSourceFilesWithAmbientModules = oldSourceFiles . filter ( ( f ) => ! ! f . ambientModuleNames . length && ! contains ( modifiedFiles , f ) ) ;
1205
+ for ( const oldFile of oldSourceFiles ) {
1206
+ if ( ! contains ( modifiedFiles , oldFile ) ) {
1207
+ for ( const moduleName of oldFile . ambientModuleNames ) {
1208
+ ambientModuleNameToUnmodifiedFileName . set ( moduleName , oldFile . fileName ) ;
1209
+ }
1210
+ }
1211
+ }
1208
1212
// try to verify results of module resolution
1209
1213
for ( const { oldFile : oldSourceFile , newFile : newSourceFile } of modifiedSourceFiles ) {
1210
1214
const newSourceFilePath = getNormalizedAbsolutePath ( newSourceFile . originalFileName , currentDirectory ) ;
0 commit comments