Skip to content

Commit 78b6090

Browse files
authored
fix: add new files to list of dependencies in project references (#709)
1 parent 74a6afa commit 78b6090

File tree

3 files changed

+37
-21
lines changed

3 files changed

+37
-21
lines changed

src/typescript/worker/get-dependencies-worker.ts

Lines changed: 7 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -2,21 +2,20 @@ import type { FilesChange } from '../../files-change';
22
import type { FilesMatch } from '../../files-match';
33
import { exposeRpc } from '../../rpc';
44

5-
import { didConfigFileChanged, didRootFilesChanged, invalidateConfig } from './lib/config';
5+
import {
6+
didConfigFileChanged,
7+
didDependenciesProbablyChanged,
8+
invalidateConfig,
9+
} from './lib/config';
610
import { getDependencies, invalidateDependencies } from './lib/dependencies';
711
import { system } from './lib/system';
812

9-
const getDependenciesWorker = ({
10-
changedFiles = [],
11-
deletedFiles = [],
12-
}: FilesChange): FilesMatch => {
13+
const getDependenciesWorker = (change: FilesChange): FilesMatch => {
1314
system.invalidateCache();
1415

15-
if (didConfigFileChanged({ changedFiles, deletedFiles })) {
16+
if (didConfigFileChanged(change) || didDependenciesProbablyChanged(getDependencies(), change)) {
1617
invalidateConfig();
1718
invalidateDependencies();
18-
} else if (didRootFilesChanged()) {
19-
invalidateDependencies();
2019
}
2120

2221
return getDependencies();

src/typescript/worker/get-issues-worker.ts

Lines changed: 15 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -5,11 +5,12 @@ import { exposeRpc } from '../../rpc';
55
import { invalidateArtifacts, registerArtifacts } from './lib/artifacts';
66
import {
77
didConfigFileChanged,
8+
didDependenciesProbablyChanged,
89
didRootFilesChanged,
910
getParseConfigIssues,
1011
invalidateConfig,
1112
} from './lib/config';
12-
import { invalidateDependencies } from './lib/dependencies';
13+
import { getDependencies, invalidateDependencies } from './lib/dependencies';
1314
import { getIssues, invalidateDiagnostics } from './lib/diagnostics';
1415
import {
1516
disablePerformanceIfNeeded,
@@ -28,15 +29,12 @@ import { dumpTracingLegendIfNeeded } from './lib/tracing';
2829
import { invalidateTsBuildInfo } from './lib/tsbuildinfo';
2930
import { config } from './lib/worker-config';
3031

31-
const getIssuesWorker = async (
32-
{ changedFiles = [], deletedFiles = [] }: FilesChange,
33-
watching: boolean
34-
): Promise<Issue[]> => {
32+
const getIssuesWorker = async (change: FilesChange, watching: boolean): Promise<Issue[]> => {
3533
system.invalidateCache();
36-
invalidateDependencies();
3734

38-
if (didConfigFileChanged({ changedFiles, deletedFiles })) {
35+
if (didConfigFileChanged(change)) {
3936
invalidateConfig();
37+
invalidateDependencies();
4038
invalidateArtifacts();
4139
invalidateDiagnostics();
4240

@@ -45,11 +43,15 @@ const getIssuesWorker = async (
4543
invalidateSolutionBuilder(true);
4644

4745
invalidateTsBuildInfo();
48-
} else if (didRootFilesChanged()) {
46+
} else if (didDependenciesProbablyChanged(getDependencies(), change)) {
47+
invalidateConfig();
48+
invalidateDependencies();
4949
invalidateArtifacts();
5050

51-
invalidateWatchProgramRootFileNames();
52-
invalidateSolutionBuilder();
51+
if (didRootFilesChanged()) {
52+
invalidateWatchProgramRootFileNames();
53+
invalidateSolutionBuilder();
54+
}
5355
}
5456

5557
registerArtifacts();
@@ -71,11 +73,11 @@ const getIssuesWorker = async (
7173
}
7274

7375
// simulate file system events
74-
changedFiles.forEach((changedFile) => {
76+
change.changedFiles?.forEach((changedFile) => {
7577
system?.invokeFileChanged(changedFile);
7678
});
77-
deletedFiles.forEach((removedFile) => {
78-
system?.invokeFileDeleted(removedFile);
79+
change.deletedFiles?.forEach((deletedFile) => {
80+
system?.invokeFileDeleted(deletedFile);
7981
});
8082

8183
// wait for all queued events to be processed

src/typescript/worker/lib/config.ts

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@ import * as path from 'path';
33
import type * as ts from 'typescript';
44

55
import type { FilesChange } from '../../../files-change';
6+
import type { FilesMatch } from '../../../files-match';
67
import type { Issue } from '../../../issue';
78
import { forwardSlash } from '../../../utils/path/forward-slash';
89
import type { TypeScriptConfigOverwrite } from '../../type-script-config-overwrite';
@@ -171,6 +172,20 @@ export function didConfigFileChanged({ changedFiles = [], deletedFiles = [] }: F
171172
.includes(path.normalize(config.configFile));
172173
}
173174

175+
export function didDependenciesProbablyChanged(
176+
dependencies: FilesMatch,
177+
{ changedFiles = [], deletedFiles = [] }: FilesChange
178+
) {
179+
const didSomeDependencyHasBeenAdded = changedFiles.some(
180+
(changeFile) => !dependencies.files.includes(changeFile)
181+
);
182+
const didSomeDependencyHasBeenDeleted = deletedFiles.some((deletedFile) =>
183+
dependencies.files.includes(deletedFile)
184+
);
185+
186+
return didSomeDependencyHasBeenAdded || didSomeDependencyHasBeenDeleted;
187+
}
188+
174189
export function didRootFilesChanged() {
175190
const [prevConfig, nextConfig] = parseNextConfig();
176191

0 commit comments

Comments
 (0)