@@ -783,10 +783,7 @@ namespace ts {
783
783
diagnostics . removeKey ( resolved ) ;
784
784
}
785
785
786
- if ( addProjToQueue ( resolved , reloadLevel ) ) {
787
- // TODO: instead of adding the dependent project to queue right away postpone this
788
- queueBuildForDownstreamReferences ( resolved ) ;
789
- }
786
+ addProjToQueue ( resolved , reloadLevel ) ;
790
787
}
791
788
792
789
/**
@@ -797,10 +794,8 @@ namespace ts {
797
794
if ( value === undefined ) {
798
795
projectPendingBuild . setValue ( proj , reloadLevel || ConfigFileProgramReloadLevel . None ) ;
799
796
invalidatedProjectQueue . push ( proj ) ;
800
- return true ;
801
797
}
802
-
803
- if ( value < ( reloadLevel || ConfigFileProgramReloadLevel . None ) ) {
798
+ else if ( value < ( reloadLevel || ConfigFileProgramReloadLevel . None ) ) {
804
799
projectPendingBuild . setValue ( proj , reloadLevel || ConfigFileProgramReloadLevel . None ) ;
805
800
}
806
801
}
@@ -823,20 +818,6 @@ namespace ts {
823
818
return ! ! projectPendingBuild . getSize ( ) ;
824
819
}
825
820
826
- // Mark all downstream projects of this one needing to be built "later"
827
- function queueBuildForDownstreamReferences ( root : ResolvedConfigFileName ) {
828
- const dependencyGraph = getGlobalDependencyGraph ( ) ;
829
- const referencingProjects = dependencyGraph . referencingProjectsMap . getValue ( root ) ;
830
- if ( ! referencingProjects ) return ;
831
- // Always use build order to queue projects
832
- for ( const project of dependencyGraph . buildQueue ) {
833
- // Can skip circular references
834
- if ( referencingProjects . hasKey ( project ) && addProjToQueue ( project ) ) {
835
- queueBuildForDownstreamReferences ( project ) ;
836
- }
837
- }
838
- }
839
-
840
821
function scheduleBuildInvalidatedProject ( ) {
841
822
if ( ! hostWithWatch . setTimeout || ! hostWithWatch . clearTimeout ) {
842
823
return ;
@@ -910,7 +891,20 @@ namespace ts {
910
891
return ;
911
892
}
912
893
913
- buildSingleProject ( resolved ) ;
894
+ const buildResult = buildSingleProject ( resolved ) ;
895
+ // If declaration output changed then only queue in build for downstream projects
896
+ if ( ! ( buildResult & BuildResultFlags . DeclarationOutputUnchanged ) ) {
897
+ const dependencyGraph = getGlobalDependencyGraph ( ) ;
898
+ const referencingProjects = dependencyGraph . referencingProjectsMap . getValue ( resolved ) ;
899
+ if ( ! referencingProjects ) return ;
900
+ // Always use build order to queue projects
901
+ for ( const project of dependencyGraph . buildQueue ) {
902
+ // Can skip circular references
903
+ if ( referencingProjects . hasKey ( project ) ) {
904
+ addProjToQueue ( project ) ;
905
+ }
906
+ }
907
+ }
914
908
}
915
909
916
910
function createDependencyGraph ( roots : ResolvedConfigFileName [ ] ) : DependencyGraph {
@@ -928,7 +922,7 @@ namespace ts {
928
922
referencingProjectsMap
929
923
} ;
930
924
931
- function visit ( projPath : ResolvedConfigFileName , inCircularContext = false ) {
925
+ function visit ( projPath : ResolvedConfigFileName , inCircularContext ?: boolean ) {
932
926
// Already visited
933
927
if ( permanentMarks . hasKey ( projPath ) ) return ;
934
928
// Circular
@@ -1032,14 +1026,13 @@ namespace ts {
1032
1026
let anyDtsChanged = false ;
1033
1027
program . emit ( /*targetSourceFile*/ undefined , ( fileName , content , writeBom , onError ) => {
1034
1028
let priorChangeTime : Date | undefined ;
1035
-
1036
- if ( ! anyDtsChanged && isDeclarationFile ( fileName ) && host . fileExists ( fileName ) ) {
1037
- if ( host . readFile ( fileName ) === content ) {
1038
- // Check for unchanged .d.ts files
1039
- resultFlags &= ~ BuildResultFlags . DeclarationOutputUnchanged ;
1029
+ if ( ! anyDtsChanged && isDeclarationFile ( fileName ) ) {
1030
+ // Check for unchanged .d.ts files
1031
+ if ( host . fileExists ( fileName ) && host . readFile ( fileName ) === content ) {
1040
1032
priorChangeTime = host . getModifiedTime ( fileName ) ;
1041
1033
}
1042
1034
else {
1035
+ resultFlags &= ~ BuildResultFlags . DeclarationOutputUnchanged ;
1043
1036
anyDtsChanged = true ;
1044
1037
}
1045
1038
}
0 commit comments