Skip to content

Commit

Permalink
fix(coverage): v8 provider to pick source maps without url parameters
Browse files Browse the repository at this point in the history
  • Loading branch information
AriPerkkio committed Jul 19, 2023
1 parent 86b4601 commit c0adc39
Showing 1 changed file with 21 additions and 4 deletions.
25 changes: 21 additions & 4 deletions packages/coverage-v8/src/provider.ts
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,7 @@ import remapping from '@ampproject/remapping'
import { normalize, resolve } from 'pathe'
import c from 'picocolors'
import { provider } from 'std-env'
import { cleanUrl } from 'vite-node/utils'
import type { EncodedSourceMap } from 'vite-node'
import { coverageConfigDefaults, defaultExclude, defaultInclude } from 'vitest/config'
import { BaseCoverageProvider } from 'vitest/coverage'
Expand Down Expand Up @@ -50,6 +51,7 @@ export class V8CoverageProvider extends BaseCoverageProvider implements Coverage
options!: Options
testExclude!: InstanceType<TestExclude>
coverages: Profiler.TakePreciseCoverageReturnType[] = []
fetchCache?: typeof this.ctx.vitenode.fetchCache

initialize(ctx: Vitest) {
const config: CoverageV8Options = ctx.config.coverage
Expand Down Expand Up @@ -210,10 +212,9 @@ export class V8CoverageProvider extends BaseCoverageProvider implements Coverage
sourceMap?: { sourcemap: EncodedSourceMap }
}> {
const filePath = normalize(fileURLToPath(url))
const transformResult = this.ctx.projects
.map(project => project.vitenode.fetchCache.get(filePath)?.result)
.filter(Boolean)
.shift()

await this.prepareFetchCache()
const transformResult = this.fetchCache?.get(filePath)?.result

const map = transformResult?.map
const code = transformResult?.code
Expand Down Expand Up @@ -241,6 +242,22 @@ export class V8CoverageProvider extends BaseCoverageProvider implements Coverage
},
}
}

private async prepareFetchCache() {
if (this.fetchCache)
return

this.fetchCache = new Map()

for (const project of this.ctx.projects) {
for (const [key, value] of project.vitenode.fetchCache.entries()) {
const cleanEntry = cleanUrl(key)

if (!this.fetchCache.has(cleanEntry))
this.fetchCache.set(cleanEntry, value)
}
}
}
}

/**
Expand Down

0 comments on commit c0adc39

Please sign in to comment.