Skip to content

Commit

Permalink
fix(coverage): v8 to ignore type-only files
Browse files Browse the repository at this point in the history
  • Loading branch information
AriPerkkio committed Mar 3, 2024
1 parent 14ee16d commit ef21bca
Show file tree
Hide file tree
Showing 2 changed files with 22 additions and 6 deletions.
25 changes: 19 additions & 6 deletions packages/coverage-v8/src/provider.ts
Expand Up @@ -260,7 +260,13 @@ export class V8CoverageProvider extends BaseCoverageProvider implements Coverage
}

const coverages = await Promise.all(chunk.map(async (filename) => {
const { source } = await this.getSources(filename.href, transformResults)
const transformResult = await this.ctx.vitenode.transformRequest(filename.pathname).catch(() => {})

// Ignore empty files, e.g. files that contain only typescript types and no runtime code
if (transformResult?.code.trim().startsWith('//# sourceMappingSource='))
return null

const { originalSource } = await this.getSources(filename.href, transformResults)

const coverage = {
url: filename.href,
Expand All @@ -269,7 +275,7 @@ export class V8CoverageProvider extends BaseCoverageProvider implements Coverage
functions: [{
ranges: [{
startOffset: 0,
endOffset: source.length,
endOffset: originalSource.length,
count: 0,
}],
isBlockCoverage: true,
Expand All @@ -281,15 +287,18 @@ export class V8CoverageProvider extends BaseCoverageProvider implements Coverage
return { result: [coverage] }
}))

merged = mergeProcessCovs([merged, ...coverages])
merged = mergeProcessCovs([
merged,
...coverages.filter((cov): cov is NonNullable<typeof cov> => cov != null),
])
}

return merged
}

private async getSources(url: string, transformResults: TransformResults, functions: Profiler.FunctionCoverage[] = []): Promise<{
source: string
originalSource?: string
originalSource: string
sourceMap?: { sourcemap: EncodedSourceMap }
}> {
const filePath = normalize(fileURLToPath(url))
Expand All @@ -306,8 +315,12 @@ export class V8CoverageProvider extends BaseCoverageProvider implements Coverage
})

// These can be uncovered files included by "all: true" or files that are loaded outside vite-node
if (!map)
return { source: code || sourcesContent }
if (!map) {
return {
source: code || sourcesContent,
originalSource: sourcesContent,
}
}

return {
originalSource: sourcesContent,
Expand Down
3 changes: 3 additions & 0 deletions test/coverage-test/src/types.ts
@@ -0,0 +1,3 @@
export type First = 'This' | 'file' | 'should'

export type Second = 'be' | 'excluded' | 'from' | 'report'

0 comments on commit ef21bca

Please sign in to comment.