@@ -133,8 +133,10 @@ namespace ts {
133
133
export interface SolutionBuilder < T extends BuilderProgram > {
134
134
build ( project ?: string , cancellationToken ?: CancellationToken ) : ExitStatus ;
135
135
clean ( project ?: string ) : ExitStatus ;
136
+ cleanResolutions ( project ?: string ) : ExitStatus ;
136
137
buildReferences ( project : string , cancellationToken ?: CancellationToken ) : ExitStatus ;
137
138
cleanReferences ( project ?: string ) : ExitStatus ;
139
+ cleanResolutionsOfReferences ( project ?: string ) : ExitStatus ;
138
140
getNextInvalidatedProject ( cancellationToken ?: CancellationToken ) : InvalidatedProject < T > | undefined ;
139
141
140
142
// Currently used for testing but can be made public if needed:
@@ -1726,6 +1728,38 @@ namespace ts {
1726
1728
return ExitStatus . Success ;
1727
1729
}
1728
1730
1731
+ function cleanResolutions ( state : SolutionBuilderState , project ?: string , onlyReferences ?: boolean ) {
1732
+ const buildOrder = getBuildOrderFor ( state , project , onlyReferences ) ;
1733
+ if ( ! buildOrder ) return ExitStatus . InvalidProject_OutputsSkipped ;
1734
+
1735
+ if ( isCircularBuildOrder ( buildOrder ) ) {
1736
+ reportErrors ( state , buildOrder . circularDiagnostics ) ;
1737
+ state . host . reportErrorSummary ?.( getErrorCountForSummary ( buildOrder . circularDiagnostics ) ) ;
1738
+ return ExitStatus . ProjectReferenceCycle_OutputsSkipped ;
1739
+ }
1740
+
1741
+ let diagnostics = 0 ;
1742
+ for ( const proj of buildOrder ) {
1743
+ const resolvedPath = toResolvedConfigFilePath ( state , proj ) ;
1744
+ const parsed = parseConfigFile ( state , proj , resolvedPath ) ;
1745
+ if ( parsed ) {
1746
+ diagnostics += cleanResolutionsOfTsBuildInfoAndReportError (
1747
+ parsed . options ,
1748
+ state . compilerHost ,
1749
+ err => state . host . reportDiagnostic ( err ) ,
1750
+ state . writeFileName ,
1751
+ ) ;
1752
+ }
1753
+ else {
1754
+ // File has gone missing; fine to ignore here
1755
+ reportParseConfigFileDiagnostic ( state , resolvedPath ) ;
1756
+ }
1757
+ }
1758
+
1759
+ state . host . reportErrorSummary ?.( diagnostics ) ;
1760
+ return diagnostics ? ExitStatus . DiagnosticsPresent_OutputsGenerated : ExitStatus . Success ;
1761
+ }
1762
+
1729
1763
function invalidateProject ( state : SolutionBuilderState , resolved : ResolvedConfigFilePath , reloadLevel : ConfigFileProgramReloadLevel ) {
1730
1764
// If host implements getParsedCommandLine, we cant get list of files from parseConfigFileHost
1731
1765
if ( state . host . getParsedCommandLine && reloadLevel === ConfigFileProgramReloadLevel . Partial ) {
@@ -1884,8 +1918,10 @@ namespace ts {
1884
1918
return {
1885
1919
build : ( project , cancellationToken ) => build ( state , project , cancellationToken ) ,
1886
1920
clean : project => clean ( state , project ) ,
1921
+ cleanResolutions : project => cleanResolutions ( state , project ) ,
1887
1922
buildReferences : ( project , cancellationToken ) => build ( state , project , cancellationToken , /*onlyReferences*/ true ) ,
1888
1923
cleanReferences : project => clean ( state , project , /*onlyReferences*/ true ) ,
1924
+ cleanResolutionsOfReferences : project => cleanResolutions ( state , project , /*onlyReferences*/ true ) ,
1889
1925
getNextInvalidatedProject : cancellationToken => {
1890
1926
setupInitialBuild ( state , cancellationToken ) ;
1891
1927
return getNextInvalidatedProject ( state , getBuildOrder ( state ) , /*reportQueue*/ false ) ;
0 commit comments