Skip to content

Commit

Permalink
chore(deps): update istanbul-lib-source-maps to v5 (vitest-dev#5304)
Browse files Browse the repository at this point in the history
  • Loading branch information
AriPerkkio committed Mar 3, 2024
1 parent 29f98cd commit 072fa8f
Show file tree
Hide file tree
Showing 5 changed files with 87 additions and 43 deletions.
2 changes: 1 addition & 1 deletion packages/coverage-istanbul/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -48,7 +48,7 @@
"istanbul-lib-coverage": "^3.2.2",
"istanbul-lib-instrument": "^6.0.1",
"istanbul-lib-report": "^3.0.1",
"istanbul-lib-source-maps": "^4.0.1",
"istanbul-lib-source-maps": "^5.0.4",
"istanbul-reports": "^3.1.6",
"magicast": "^0.3.3",
"picocolors": "^1.0.0",
Expand Down
2 changes: 1 addition & 1 deletion packages/coverage-v8/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -49,7 +49,7 @@
"debug": "^4.3.4",
"istanbul-lib-coverage": "^3.2.2",
"istanbul-lib-report": "^3.0.1",
"istanbul-lib-source-maps": "^4.0.1",
"istanbul-lib-source-maps": "^5.0.4",
"istanbul-reports": "^3.1.6",
"magic-string": "^0.30.5",
"magicast": "^0.3.3",
Expand Down
1 change: 1 addition & 0 deletions packages/coverage-v8/rollup.config.js
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,7 @@ const external = [
...Object.keys(pkg.dependencies || {}),
...Object.keys(pkg.peerDependencies || {}),
'node:inspector',
'vite',
/^@?vitest(\/|$)/,
]

Expand Down
31 changes: 25 additions & 6 deletions packages/coverage-v8/src/provider.ts
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,7 @@ import { coverageConfigDefaults, defaultExclude, defaultInclude } from 'vitest/c
import { BaseCoverageProvider } from 'vitest/coverage'
import type { AfterSuiteRunMeta, CoverageProvider, CoverageV8Options, ReportContext, ResolvedCoverageOptions } from 'vitest'
import type { Vitest } from 'vitest/node'
import { parseAstAsync } from 'vite'

// @ts-expect-error missing types
import _TestExclude from 'test-exclude'
Expand Down Expand Up @@ -260,7 +261,18 @@ 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 { source, originalSource } = await this.getSources(filename.href, transformResults)

try {
const ast = await parseAstAsync(source, { allowReturnOutsideFunction: true })

// Ignore empty files, e.g. files that contain only typescript types and no runtime code
if (ast.body.length === 0)
return null
}
catch (_) {
// Ignore possible parsing errors
}

const coverage = {
url: filename.href,
Expand All @@ -269,7 +281,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 +293,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 +321,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
Loading

0 comments on commit 072fa8f

Please sign in to comment.