Skip to content

Commit 4099619

Browse files
committed
fix: source maps
1 parent fa35cd5 commit 4099619

File tree

5 files changed

+42
-6
lines changed

5 files changed

+42
-6
lines changed

packages/coverage-v8/src/intercept-new-run-context.ts

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -38,7 +38,6 @@ async function initialize() {
3838
moduleExecutionInfo: undefined,
3939
}) as { result: ScriptCoverageWithOffset[] }
4040

41-
// TODO: Now where do we get source maps
4241
ws.send(JSON.stringify(coverage.result))
4342

4443
await provider.stopCoverage?.({ isolate: true })

packages/coverage-v8/src/provider.ts

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,8 @@ import type { ProxifiedModule } from 'magicast'
33
import type { Profiler } from 'node:inspector'
44
import type { CoverageProvider, ReportContext, TestProject, Vite, Vitest } from 'vitest/node'
55
import { existsSync, promises as fs } from 'node:fs'
6+
import { stripTypeScriptTypes } from 'node:module'
7+
import { extname } from 'node:path'
68
import { fileURLToPath } from 'node:url'
79
// @ts-expect-error -- untyped
810
import { mergeProcessCovs } from '@bcoe/v8-coverage'
@@ -333,6 +335,7 @@ export class V8CoverageProvider extends BaseCoverageProvider implements Coverage
333335
url: string,
334336
onTransform: (filepath: string) => Promise<Vite.TransformResult | undefined | null>,
335337
functions: Profiler.FunctionCoverage[] = [],
338+
context = { transformed: true },
336339
): Promise<{
337340
code: string
338341
map?: Vite.Rollup.SourceMap
@@ -347,16 +350,20 @@ export class V8CoverageProvider extends BaseCoverageProvider implements Coverage
347350
const map = transformResult?.map as Vite.Rollup.SourceMap | undefined
348351
const code = transformResult?.code
349352

350-
if (code == null) {
353+
if (code == null || !context.transformed) {
351354
const filePath = normalize(fileURLToPath(url))
352355

353-
const original = await fs.readFile(filePath, 'utf-8').catch(() => {
356+
let original = await fs.readFile(filePath, 'utf-8').catch(() => {
354357
// If file does not exist construct a dummy source for it.
355358
// These can be files that were generated dynamically during the test run and were removed after it.
356359
const length = findLongestFunctionLength(functions)
357360
return '/'.repeat(length)
358361
})
359362

363+
if (extname(filepath.split('?')[0]) === '.ts') {
364+
original = stripTypeScriptTypes(original)
365+
}
366+
360367
return { code: original }
361368
}
362369

@@ -436,6 +443,7 @@ export class V8CoverageProvider extends BaseCoverageProvider implements Coverage
436443
url,
437444
onTransform,
438445
functions,
446+
{ transformed: startOffset !== 0 },
439447
)
440448

441449
coverageMap.merge(await this.remapCoverage(

test/coverage-test/fixtures/src/worker-or-process.ts

Lines changed: 20 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -15,13 +15,31 @@ function execute(options: Options) {
1515

1616
const result = execute({ left: 10, right: 5 });
1717

18-
// v8 ignore else -- testing coverage hints too
1918
if (isMainThread && process.send) {
19+
// Comment
20+
interface Padding {
21+
left: number;
22+
right: number;
23+
}
24+
// Comment
2025
process.send({ result });
26+
interface Padding2 {
27+
left: number;
28+
right: number;
29+
}
30+
// Comment
2131
}
2232
else if (parentPort) {
33+
// Comment
34+
// Comment
35+
// Comment
36+
// Comment
2337
parentPort.postMessage({ result });
2438
}
2539
else {
26-
throw new Error("Where is this running?")
40+
// Comment
41+
type A = "B"
42+
type B = "C"
43+
// Comment
44+
throw new Error("Where is this running?" as unknown as A | B)
2745
}
Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,10 @@
11
import { test , expect } from "vitest"
22
import { runFork } from "../src/start-fork-and-thread";
33

4-
test("child process", async () => {
4+
test("child process typescript", async () => {
55
const result = await runFork();
66
expect(result).toBe(5);
77
})
8+
9+
test.todo("child process javascript source file")
10+
test.todo("child process transpiled javascript with source maps")

test/coverage-test/test/extended-run-context.v8.test.ts

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,14 @@ test('{ trackProcessAndWorker: true } includes files from child process', async
1919
"<process-cwd>/fixtures/src/worker-or-process.ts",
2020
]
2121
`)
22+
23+
/* See {@link file://./../fixtures/src/worker-or-process.ts} */
24+
const fileCoverage = coverageMap.fileCoverageFor('<process-cwd>/fixtures/src/worker-or-process.ts')
25+
const lines = fileCoverage.getLineCoverage()
26+
27+
expect(lines[25]).toBe(1)
28+
expect(lines[37]).toBe(0)
29+
expect(lines[44]).toBe(0)
2230
})
2331

2432
test.todo('{ trackProcessAndWorker: true } includes files from worker thread')

0 commit comments

Comments
 (0)