|
| 1 | +import type { CoverageMapData } from 'istanbul-lib-coverage' |
| 2 | +import type { CoverageProviderModule } from 'vitest/node' |
1 | 3 | import type { IstanbulCoverageProvider } from './provider' |
2 | 4 | import { COVERAGE_STORE_KEY } from './constants' |
3 | 5 |
|
4 | | -export async function getProvider(): Promise<IstanbulCoverageProvider> { |
5 | | - // to not bundle the provider |
6 | | - const providerPath = './provider.js' |
7 | | - const { IstanbulCoverageProvider } = (await import( |
8 | | - /* @vite-ignore */ |
9 | | - providerPath |
10 | | - )) as typeof import('./provider') |
11 | | - return new IstanbulCoverageProvider() |
12 | | -} |
13 | | - |
14 | | -export function takeCoverage(): any { |
15 | | - // @ts-expect-error -- untyped global |
16 | | - const coverage = globalThis[COVERAGE_STORE_KEY] |
| 6 | +export default { |
| 7 | + takeCoverage() { |
| 8 | + // @ts-expect-error -- untyped global |
| 9 | + return globalThis[COVERAGE_STORE_KEY] |
| 10 | + }, |
17 | 11 |
|
18 | 12 | // Reset coverage map to prevent duplicate results if this is called twice in row |
19 | | - // @ts-expect-error -- untyped global |
20 | | - globalThis[COVERAGE_STORE_KEY] = {} |
| 13 | + startCoverage() { |
| 14 | + // @ts-expect-error -- untyped global |
| 15 | + const coverageMap = globalThis[COVERAGE_STORE_KEY] as CoverageMapData |
| 16 | + |
| 17 | + // When isolated, there are no previous results |
| 18 | + if (!coverageMap) { |
| 19 | + return |
| 20 | + } |
| 21 | + |
| 22 | + for (const filename in coverageMap) { |
| 23 | + const branches = coverageMap[filename].b |
| 24 | + |
| 25 | + for (const key in branches) { |
| 26 | + branches[key] = branches[key].map(() => 0) |
| 27 | + } |
| 28 | + |
| 29 | + for (const metric of ['f', 's'] as const) { |
| 30 | + const entry = coverageMap[filename][metric] |
21 | 31 |
|
22 | | - return coverage |
23 | | -} |
| 32 | + for (const key in entry) { |
| 33 | + entry[key] = 0 |
| 34 | + } |
| 35 | + } |
| 36 | + } |
| 37 | + }, |
24 | 38 |
|
25 | | -const _default: { |
26 | | - getProvider: () => Promise<IstanbulCoverageProvider> |
27 | | - takeCoverage: () => any |
28 | | -} = { |
29 | | - getProvider, |
30 | | - takeCoverage, |
31 | | -} |
| 39 | + async getProvider(): Promise<IstanbulCoverageProvider> { |
| 40 | + // to not bundle the provider |
| 41 | + const providerPath = './provider.js' |
| 42 | + const { IstanbulCoverageProvider } = (await import( |
| 43 | + /* @vite-ignore */ |
| 44 | + providerPath |
| 45 | + )) as typeof import('./provider') |
32 | 46 |
|
33 | | -export default _default |
| 47 | + return new IstanbulCoverageProvider() |
| 48 | + }, |
| 49 | +} satisfies CoverageProviderModule |
0 commit comments