From 76a7b4dc7f5e1fdaa40fcb618bf59392a2eeaa19 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ari=20Perkki=C3=B6?= Date: Sat, 29 Mar 2025 20:27:52 +0200 Subject: [PATCH] fix(coverage): `await` profiler calls --- packages/coverage-v8/src/index.ts | 39 ++++++++++++++++++------------- 1 file changed, 23 insertions(+), 16 deletions(-) diff --git a/packages/coverage-v8/src/index.ts b/packages/coverage-v8/src/index.ts index 4a47f5982942..a5bcb16e79c1 100644 --- a/packages/coverage-v8/src/index.ts +++ b/packages/coverage-v8/src/index.ts @@ -10,7 +10,7 @@ const session = new inspector.Session() let enabled = false const mod: CoverageProviderModule = { - startCoverage({ isolate }) { + async startCoverage({ isolate }) { if (isolate === false && enabled) { return } @@ -18,11 +18,13 @@ const mod: CoverageProviderModule = { enabled = true session.connect() - session.post('Profiler.enable') - session.post('Profiler.startPreciseCoverage', { - callCount: true, - detailed: true, - }) + await new Promise(resolve => session.post('Profiler.enable', resolve)) + await new Promise(resolve => + session.post( + 'Profiler.startPreciseCoverage', + { callCount: true, detailed: true }, + resolve, + )) }, takeCoverage(options): Promise<{ result: ScriptCoverageWithOffset[] }> { @@ -32,14 +34,19 @@ const mod: CoverageProviderModule = { return reject(error) } - const result = coverage.result - .filter(filterResult) - .map(res => ({ - ...res, - startOffset: options?.moduleExecutionInfo?.get(fileURLToPath(res.url))?.startOffset || 0, - })) + try { + const result = coverage.result + .filter(filterResult) + .map(res => ({ + ...res, + startOffset: options?.moduleExecutionInfo?.get(fileURLToPath(res.url))?.startOffset || 0, + })) - resolve({ result }) + resolve({ result }) + } + catch (e) { + reject(e) + } }) if (provider === 'stackblitz') { @@ -48,13 +55,13 @@ const mod: CoverageProviderModule = { }) }, - stopCoverage({ isolate }) { + async stopCoverage({ isolate }) { if (isolate === false) { return } - session.post('Profiler.stopPreciseCoverage') - session.post('Profiler.disable') + await new Promise(resolve => session.post('Profiler.stopPreciseCoverage', resolve)) + await new Promise(resolve => session.post('Profiler.disable', resolve)) session.disconnect() },