Skip to content

Commit fdb2e79

Browse files
authored
fix(typecheck): handle re-runs outside tsc (#8920)
1 parent 6240d51 commit fdb2e79

File tree

2 files changed

+16
-4
lines changed

2 files changed

+16
-4
lines changed

packages/vitest/src/node/pool.ts

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -222,7 +222,11 @@ export function createPool(ctx: Vitest): ProcessPool {
222222
runTests: (files, invalidates) => executeTests('run', files, invalidates),
223223
collectTests: (files, invalidates) => executeTests('collect', files, invalidates),
224224
async close() {
225-
await Promise.all([pool.close(), browserPool?.close?.()])
225+
await Promise.all([
226+
pool.close(),
227+
browserPool?.close?.(),
228+
...ctx.projects.map(project => project.typechecker?.stop()),
229+
])
226230
},
227231
}
228232
}

packages/vitest/src/node/pools/workers/typecheckWorker.ts

Lines changed: 11 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -93,7 +93,6 @@ async function onMessage(message: WorkerRequest, project: TestProject): Promise<
9393

9494
case 'stop': {
9595
await runPromise
96-
await project.typechecker?.stop()
9796
return { type: 'stopped', __vitest_worker_response__ }
9897
}
9998
}
@@ -221,8 +220,9 @@ function createRunner(vitest: Vitest) {
221220

222221
const files = specs.map(spec => spec.filepath)
223222
const promise = createDefer<void>()
223+
224224
// check that watcher actually triggered rerun
225-
const _p = new Promise<boolean>((resolve) => {
225+
const triggered = await new Promise<boolean>((resolve) => {
226226
const _i = setInterval(() => {
227227
if (!project.typechecker || rerunTriggered.has(project)) {
228228
resolve(true)
@@ -234,15 +234,23 @@ function createRunner(vitest: Vitest) {
234234
clearInterval(_i)
235235
}, 500).unref()
236236
})
237-
const triggered = await _p
237+
238+
// Re-run but wasn't triggered by tsc
239+
if (promisesMap.has(project) && !triggered) {
240+
return promisesMap.get(project)
241+
}
242+
238243
if (project.typechecker && !triggered) {
239244
const testFiles = project.typechecker.getTestFiles()
245+
240246
for (const file of testFiles) {
241247
await vitest._testRun.enqueued(project, file)
242248
}
249+
243250
await vitest._testRun.collected(project, testFiles)
244251
await onParseEnd(project, project.typechecker.getResult())
245252
}
253+
246254
promises.push(promise)
247255
promisesMap.set(project, promise)
248256
promises.push(startTypechecker(project, files))

0 commit comments

Comments
 (0)