Skip to content

Commit 7446370

Browse files
authoredJan 9, 2023
fix(coverage): validate extension, when reporting c8 coverage (#2626)
* fix: validate extension, when reporting coverage * refactor: cleanup
1 parent fed1cd6 commit 7446370

File tree

3 files changed

+1356
-213
lines changed

3 files changed

+1356
-213
lines changed
 

‎packages/coverage-c8/package.json

+1
Original file line numberDiff line numberDiff line change
@@ -46,6 +46,7 @@
4646
"vitest": "workspace:*"
4747
},
4848
"devDependencies": {
49+
"pathe": "^0.2.0",
4950
"vite-node": "workspace:*"
5051
}
5152
}

‎packages/coverage-c8/src/provider.ts

+12-2
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@ import { existsSync, promises as fs } from 'fs'
22
import _url from 'url'
33
import type { Profiler } from 'inspector'
44
import { takeCoverage } from 'v8'
5-
import { resolve } from 'pathe'
5+
import { extname, resolve } from 'pathe'
66
import type { RawSourceMap } from 'vite-node'
77
import { configDefaults } from 'vitest/config'
88
// eslint-disable-next-line no-restricted-imports
@@ -53,6 +53,7 @@ export class C8CoverageProvider implements CoverageProvider {
5353

5454
// add source maps
5555
const sourceMapMeta: Record<SourceMapMeta['url'], MapAndSource> = {}
56+
const extensions = Array.isArray(this.options.extension) ? this.options.extension : [this.options.extension]
5657

5758
const entries = Array
5859
.from(this.ctx.vitenode.fetchCache.entries())
@@ -62,10 +63,13 @@ export class C8CoverageProvider implements CoverageProvider {
6263
return null
6364

6465
const filepath = file.split('?')[0]
66+
const url = _url.pathToFileURL(filepath).href
67+
const extension = extname(file) || extname(url)
6568

6669
return {
6770
filepath,
68-
url: _url.pathToFileURL(filepath).href,
71+
url,
72+
extension,
6973
map: result.map,
7074
source: result.code,
7175
}
@@ -74,6 +78,9 @@ export class C8CoverageProvider implements CoverageProvider {
7478
if (!entry)
7579
return false
7680

81+
if (!extensions.includes(entry.extension))
82+
return false
83+
7784
// Mappings and sourcesContent are needed for C8 to work
7885
return (
7986
entry.map.mappings.length > 0
@@ -84,6 +91,9 @@ export class C8CoverageProvider implements CoverageProvider {
8491
}) as SourceMapMeta[]
8592

8693
await Promise.all(entries.map(async ({ url, source, map, filepath }) => {
94+
if (url in sourceMapMeta)
95+
return
96+
8797
let code: string | undefined
8898
try {
8999
code = (await fs.readFile(filepath)).toString()

‎pnpm-lock.yaml

+1,343-211
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

0 commit comments

Comments
 (0)
Please sign in to comment.