Skip to content

Commit

Permalink
fix(coverage): validate extension, when reporting c8 coverage (#2626)
Browse files Browse the repository at this point in the history
* fix: validate extension, when reporting coverage

* refactor: cleanup
  • Loading branch information
sheremet-va committed Jan 9, 2023
1 parent fed1cd6 commit 7446370
Show file tree
Hide file tree
Showing 3 changed files with 1,356 additions and 213 deletions.
1 change: 1 addition & 0 deletions packages/coverage-c8/package.json
Expand Up @@ -46,6 +46,7 @@
"vitest": "workspace:*"
},
"devDependencies": {
"pathe": "^0.2.0",
"vite-node": "workspace:*"
}
}
14 changes: 12 additions & 2 deletions packages/coverage-c8/src/provider.ts
Expand Up @@ -2,7 +2,7 @@ import { existsSync, promises as fs } from 'fs'
import _url from 'url'
import type { Profiler } from 'inspector'
import { takeCoverage } from 'v8'
import { resolve } from 'pathe'
import { extname, resolve } from 'pathe'
import type { RawSourceMap } from 'vite-node'
import { configDefaults } from 'vitest/config'
// eslint-disable-next-line no-restricted-imports
Expand Down Expand Up @@ -53,6 +53,7 @@ export class C8CoverageProvider implements CoverageProvider {

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

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

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

return {
filepath,
url: _url.pathToFileURL(filepath).href,
url,
extension,
map: result.map,
source: result.code,
}
Expand All @@ -74,6 +78,9 @@ export class C8CoverageProvider implements CoverageProvider {
if (!entry)
return false

if (!extensions.includes(entry.extension))
return false

// Mappings and sourcesContent are needed for C8 to work
return (
entry.map.mappings.length > 0
Expand All @@ -84,6 +91,9 @@ export class C8CoverageProvider implements CoverageProvider {
}) as SourceMapMeta[]

await Promise.all(entries.map(async ({ url, source, map, filepath }) => {
if (url in sourceMapMeta)
return

let code: string | undefined
try {
code = (await fs.readFile(filepath)).toString()
Expand Down

0 comments on commit 7446370

Please sign in to comment.