@vitest/coverage-v8 2.0.0-beta.1 → 2.0.0-beta.11
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.d.ts +1 -0
- package/dist/index.js +8 -4
- package/dist/provider.d.ts +5 -1
- package/dist/provider.js +195 -78
- package/package.json +7 -7
package/dist/index.d.ts
CHANGED
package/dist/index.js
CHANGED
@@ -13,13 +13,15 @@ function startCoverage() {
|
|
13
13
|
async function takeCoverage() {
|
14
14
|
return new Promise((resolve, reject) => {
|
15
15
|
session.post("Profiler.takePreciseCoverage", async (error, coverage) => {
|
16
|
-
if (error)
|
16
|
+
if (error) {
|
17
17
|
return reject(error);
|
18
|
+
}
|
18
19
|
const result = coverage.result.filter(filterResult);
|
19
20
|
resolve({ result });
|
20
21
|
});
|
21
|
-
if (provider === "stackblitz")
|
22
|
+
if (provider === "stackblitz") {
|
22
23
|
resolve({ result: [] });
|
24
|
+
}
|
23
25
|
});
|
24
26
|
}
|
25
27
|
function stopCoverage() {
|
@@ -28,10 +30,12 @@ function stopCoverage() {
|
|
28
30
|
session.disconnect();
|
29
31
|
}
|
30
32
|
function filterResult(coverage) {
|
31
|
-
if (!coverage.url.startsWith("file://"))
|
33
|
+
if (!coverage.url.startsWith("file://")) {
|
32
34
|
return false;
|
33
|
-
|
35
|
+
}
|
36
|
+
if (coverage.url.includes("/node_modules/")) {
|
34
37
|
return false;
|
38
|
+
}
|
35
39
|
return true;
|
36
40
|
}
|
37
41
|
|
package/dist/provider.d.ts
CHANGED
@@ -1,3 +1,4 @@
|
|
1
|
+
import { CoverageMap } from 'istanbul-lib-coverage';
|
1
2
|
import { BaseCoverageProvider } from 'vitest/coverage';
|
2
3
|
import { CoverageProvider, AfterSuiteRunMeta, ReportContext, ResolvedCoverageOptions } from 'vitest';
|
3
4
|
import { Vitest } from 'vitest/node';
|
@@ -32,7 +33,10 @@ declare class V8CoverageProvider extends BaseCoverageProvider implements Coverag
|
|
32
33
|
resolveOptions(): Options;
|
33
34
|
clean(clean?: boolean): Promise<void>;
|
34
35
|
onAfterSuiteRun({ coverage, transformMode, projectName }: AfterSuiteRunMeta): void;
|
35
|
-
|
36
|
+
generateCoverage({ allTestsRun }: ReportContext): Promise<CoverageMap>;
|
37
|
+
reportCoverage(coverageMap: unknown, { allTestsRun }: ReportContext): Promise<void>;
|
38
|
+
generateReports(coverageMap: CoverageMap, allTestsRun?: boolean): Promise<void>;
|
39
|
+
mergeReports(coverageMaps: unknown[]): Promise<void>;
|
36
40
|
private getUntestedFiles;
|
37
41
|
private getSources;
|
38
42
|
private convertCoverage;
|
package/dist/provider.js
CHANGED
@@ -1,4 +1,4 @@
|
|
1
|
-
import { existsSync, promises as promises$1, writeFileSync } from 'node:fs';
|
1
|
+
import { existsSync, promises as promises$1, readdirSync, writeFileSync } from 'node:fs';
|
2
2
|
import { pathToFileURL, fileURLToPath as fileURLToPath$1 } from 'node:url';
|
3
3
|
import require$$0 from 'assert';
|
4
4
|
import require$$2 from 'util';
|
@@ -2186,10 +2186,9 @@ const isAbsolute = function(p) {
|
|
2186
2186
|
const isWindows = process.platform === "win32";
|
2187
2187
|
const drive = isWindows ? process.cwd()[0] : null;
|
2188
2188
|
drive ? drive === drive.toUpperCase() ? drive.toLowerCase() : drive.toUpperCase() : null;
|
2189
|
-
const
|
2190
|
-
const hashRE = /#.*$/s;
|
2189
|
+
const postfixRE = /[?#].*$/;
|
2191
2190
|
function cleanUrl(url) {
|
2192
|
-
return url.replace(
|
2191
|
+
return url.replace(postfixRE, "");
|
2193
2192
|
}
|
2194
2193
|
/* @__PURE__ */ new Set([
|
2195
2194
|
...builtinModules,
|
@@ -2210,7 +2209,7 @@ function cleanUrl(url) {
|
|
2210
2209
|
|
2211
2210
|
const WRAPPER_LENGTH = 185;
|
2212
2211
|
const VITE_EXPORTS_LINE_PATTERN = /Object\.defineProperty\(__vite_ssr_exports__.*\n/g;
|
2213
|
-
const DECORATOR_METADATA_PATTERN = /_ts_metadata\("design:paramtypes", \[[^\]]
|
2212
|
+
const DECORATOR_METADATA_PATTERN = /_ts_metadata\("design:paramtypes", \[[^\]]*\]\),*/g;
|
2214
2213
|
const DEFAULT_PROJECT = Symbol.for("default-project");
|
2215
2214
|
const debug = createDebug("vitest:coverage");
|
2216
2215
|
let uniqueId = 0;
|
@@ -2231,8 +2230,13 @@ class V8CoverageProvider extends BaseCoverageProvider {
|
|
2231
2230
|
...config,
|
2232
2231
|
// Resolved fields
|
2233
2232
|
provider: "v8",
|
2234
|
-
reporter: this.resolveReporters(
|
2235
|
-
|
2233
|
+
reporter: this.resolveReporters(
|
2234
|
+
config.reporter || coverageConfigDefaults.reporter
|
2235
|
+
),
|
2236
|
+
reportsDirectory: resolve(
|
2237
|
+
ctx.config.root,
|
2238
|
+
config.reportsDirectory || coverageConfigDefaults.reportsDirectory
|
2239
|
+
),
|
2236
2240
|
thresholds: config.thresholds && {
|
2237
2241
|
...config.thresholds,
|
2238
2242
|
lines: config.thresholds["100"] ? 100 : config.thresholds.lines,
|
@@ -2251,16 +2255,29 @@ class V8CoverageProvider extends BaseCoverageProvider {
|
|
2251
2255
|
});
|
2252
2256
|
const shard = this.ctx.config.shard;
|
2253
2257
|
const tempDirectory = `.tmp${shard ? `-${shard.index}-${shard.count}` : ""}`;
|
2254
|
-
this.coverageFilesDirectory = resolve(
|
2258
|
+
this.coverageFilesDirectory = resolve(
|
2259
|
+
this.options.reportsDirectory,
|
2260
|
+
tempDirectory
|
2261
|
+
);
|
2255
2262
|
}
|
2256
2263
|
resolveOptions() {
|
2257
2264
|
return this.options;
|
2258
2265
|
}
|
2259
2266
|
async clean(clean = true) {
|
2260
|
-
if (clean && existsSync(this.options.reportsDirectory))
|
2261
|
-
await promises$1.rm(this.options.reportsDirectory, {
|
2262
|
-
|
2263
|
-
|
2267
|
+
if (clean && existsSync(this.options.reportsDirectory)) {
|
2268
|
+
await promises$1.rm(this.options.reportsDirectory, {
|
2269
|
+
recursive: true,
|
2270
|
+
force: true,
|
2271
|
+
maxRetries: 10
|
2272
|
+
});
|
2273
|
+
}
|
2274
|
+
if (existsSync(this.coverageFilesDirectory)) {
|
2275
|
+
await promises$1.rm(this.coverageFilesDirectory, {
|
2276
|
+
recursive: true,
|
2277
|
+
force: true,
|
2278
|
+
maxRetries: 10
|
2279
|
+
});
|
2280
|
+
}
|
2264
2281
|
await promises$1.mkdir(this.coverageFilesDirectory, { recursive: true });
|
2265
2282
|
this.coverageFiles = /* @__PURE__ */ new Map();
|
2266
2283
|
this.pendingPromises = [];
|
@@ -2271,41 +2288,57 @@ class V8CoverageProvider extends BaseCoverageProvider {
|
|
2271
2288
|
* backwards compatibility is a breaking change.
|
2272
2289
|
*/
|
2273
2290
|
onAfterSuiteRun({ coverage, transformMode, projectName }) {
|
2274
|
-
if (transformMode !== "web" && transformMode !== "ssr")
|
2291
|
+
if (transformMode !== "web" && transformMode !== "ssr") {
|
2275
2292
|
throw new Error(`Invalid transform mode: ${transformMode}`);
|
2293
|
+
}
|
2276
2294
|
let entry = this.coverageFiles.get(projectName || DEFAULT_PROJECT);
|
2277
2295
|
if (!entry) {
|
2278
2296
|
entry = { web: [], ssr: [] };
|
2279
2297
|
this.coverageFiles.set(projectName || DEFAULT_PROJECT, entry);
|
2280
2298
|
}
|
2281
|
-
const filename = resolve(
|
2299
|
+
const filename = resolve(
|
2300
|
+
this.coverageFilesDirectory,
|
2301
|
+
`coverage-${uniqueId++}.json`
|
2302
|
+
);
|
2282
2303
|
entry[transformMode].push(filename);
|
2283
2304
|
const promise = promises$1.writeFile(filename, JSON.stringify(coverage), "utf-8");
|
2284
2305
|
this.pendingPromises.push(promise);
|
2285
2306
|
}
|
2286
|
-
async
|
2287
|
-
if (provider === "stackblitz")
|
2288
|
-
this.ctx.logger.log(c.blue(" % ") + c.yellow("@vitest/coverage-v8 does not work on Stackblitz. Report will be empty."));
|
2307
|
+
async generateCoverage({ allTestsRun }) {
|
2289
2308
|
const coverageMap = libCoverage.createCoverageMap({});
|
2290
2309
|
let index = 0;
|
2291
2310
|
const total = this.pendingPromises.length;
|
2292
2311
|
await Promise.all(this.pendingPromises);
|
2293
2312
|
this.pendingPromises = [];
|
2294
|
-
for (const [
|
2295
|
-
|
2313
|
+
for (const [
|
2314
|
+
projectName,
|
2315
|
+
coveragePerProject
|
2316
|
+
] of this.coverageFiles.entries()) {
|
2317
|
+
for (const [transformMode, filenames] of Object.entries(
|
2318
|
+
coveragePerProject
|
2319
|
+
)) {
|
2296
2320
|
let merged = { result: [] };
|
2297
|
-
for (const chunk of this.toSlices(
|
2321
|
+
for (const chunk of this.toSlices(
|
2322
|
+
filenames,
|
2323
|
+
this.options.processingConcurrency
|
2324
|
+
)) {
|
2298
2325
|
if (debug.enabled) {
|
2299
2326
|
index += chunk.length;
|
2300
2327
|
debug("Covered files %d/%d", index, total);
|
2301
2328
|
}
|
2302
|
-
await Promise.all(
|
2303
|
-
|
2304
|
-
|
2305
|
-
|
2306
|
-
|
2329
|
+
await Promise.all(
|
2330
|
+
chunk.map(async (filename) => {
|
2331
|
+
const contents = await promises$1.readFile(filename, "utf-8");
|
2332
|
+
const coverage = JSON.parse(contents);
|
2333
|
+
merged = mergeProcessCovs([merged, coverage]);
|
2334
|
+
})
|
2335
|
+
);
|
2307
2336
|
}
|
2308
|
-
const converted = await this.convertCoverage(
|
2337
|
+
const converted = await this.convertCoverage(
|
2338
|
+
merged,
|
2339
|
+
projectName,
|
2340
|
+
transformMode
|
2341
|
+
);
|
2309
2342
|
const transformedCoverage = await transformCoverage(converted);
|
2310
2343
|
coverageMap.merge(transformedCoverage);
|
2311
2344
|
}
|
@@ -2316,13 +2349,40 @@ class V8CoverageProvider extends BaseCoverageProvider {
|
|
2316
2349
|
const converted = await this.convertCoverage(untestedCoverage);
|
2317
2350
|
coverageMap.merge(await transformCoverage(converted));
|
2318
2351
|
}
|
2352
|
+
return coverageMap;
|
2353
|
+
}
|
2354
|
+
async reportCoverage(coverageMap, { allTestsRun }) {
|
2355
|
+
if (provider === "stackblitz") {
|
2356
|
+
this.ctx.logger.log(
|
2357
|
+
c.blue(" % ") + c.yellow(
|
2358
|
+
"@vitest/coverage-v8 does not work on Stackblitz. Report will be empty."
|
2359
|
+
)
|
2360
|
+
);
|
2361
|
+
}
|
2362
|
+
await this.generateReports(
|
2363
|
+
coverageMap || libCoverage.createCoverageMap({}),
|
2364
|
+
allTestsRun
|
2365
|
+
);
|
2366
|
+
const keepResults = !this.options.cleanOnRerun && this.ctx.config.watch;
|
2367
|
+
if (!keepResults) {
|
2368
|
+
this.coverageFiles = /* @__PURE__ */ new Map();
|
2369
|
+
await promises$1.rm(this.coverageFilesDirectory, { recursive: true });
|
2370
|
+
if (readdirSync(this.options.reportsDirectory).length === 0) {
|
2371
|
+
await promises$1.rm(this.options.reportsDirectory, { recursive: true });
|
2372
|
+
}
|
2373
|
+
}
|
2374
|
+
}
|
2375
|
+
async generateReports(coverageMap, allTestsRun) {
|
2319
2376
|
const context = libReport.createContext({
|
2320
2377
|
dir: this.options.reportsDirectory,
|
2321
2378
|
coverageMap,
|
2322
2379
|
watermarks: this.options.watermarks
|
2323
2380
|
});
|
2324
|
-
if (this.hasTerminalReporter(this.options.reporter))
|
2325
|
-
this.ctx.logger.log(
|
2381
|
+
if (this.hasTerminalReporter(this.options.reporter)) {
|
2382
|
+
this.ctx.logger.log(
|
2383
|
+
c.blue(" % ") + c.dim("Coverage report from ") + c.yellow(this.name)
|
2384
|
+
);
|
2385
|
+
}
|
2326
2386
|
for (const reporter of this.options.reporter) {
|
2327
2387
|
reports.create(reporter[0], {
|
2328
2388
|
skipFull: this.options.skipFull,
|
@@ -2342,62 +2402,95 @@ class V8CoverageProvider extends BaseCoverageProvider {
|
|
2342
2402
|
perFile: this.options.thresholds.perFile
|
2343
2403
|
});
|
2344
2404
|
if (this.options.thresholds.autoUpdate && allTestsRun) {
|
2345
|
-
if (!this.ctx.server.config.configFile)
|
2346
|
-
throw new Error(
|
2405
|
+
if (!this.ctx.server.config.configFile) {
|
2406
|
+
throw new Error(
|
2407
|
+
'Missing configurationFile. The "coverage.thresholds.autoUpdate" can only be enabled when configuration file is used.'
|
2408
|
+
);
|
2409
|
+
}
|
2347
2410
|
const configFilePath = this.ctx.server.config.configFile;
|
2348
|
-
const configModule = parseModule(
|
2411
|
+
const configModule = parseModule(
|
2412
|
+
await promises$1.readFile(configFilePath, "utf8")
|
2413
|
+
);
|
2349
2414
|
this.updateThresholds({
|
2350
2415
|
thresholds: resolvedThresholds,
|
2351
2416
|
perFile: this.options.thresholds.perFile,
|
2352
2417
|
configurationFile: configModule,
|
2353
|
-
onUpdate: () => writeFileSync(
|
2418
|
+
onUpdate: () => writeFileSync(
|
2419
|
+
configFilePath,
|
2420
|
+
configModule.generate().code,
|
2421
|
+
"utf-8"
|
2422
|
+
)
|
2354
2423
|
});
|
2355
2424
|
}
|
2356
2425
|
}
|
2357
|
-
|
2358
|
-
|
2359
|
-
|
2360
|
-
|
2426
|
+
}
|
2427
|
+
async mergeReports(coverageMaps) {
|
2428
|
+
const coverageMap = libCoverage.createCoverageMap({});
|
2429
|
+
for (const coverage of coverageMaps) {
|
2430
|
+
coverageMap.merge(coverage);
|
2361
2431
|
}
|
2432
|
+
await this.generateReports(coverageMap, true);
|
2362
2433
|
}
|
2363
2434
|
async getUntestedFiles(testedFiles) {
|
2364
|
-
const transformResults = normalizeTransformResults(
|
2435
|
+
const transformResults = normalizeTransformResults(
|
2436
|
+
this.ctx.vitenode.fetchCache
|
2437
|
+
);
|
2365
2438
|
const allFiles = await this.testExclude.glob(this.ctx.config.root);
|
2366
|
-
let includedFiles = allFiles.map(
|
2367
|
-
|
2368
|
-
|
2439
|
+
let includedFiles = allFiles.map(
|
2440
|
+
(file) => resolve(this.ctx.config.root, file)
|
2441
|
+
);
|
2442
|
+
if (this.ctx.config.changed) {
|
2443
|
+
includedFiles = (this.ctx.config.related || []).filter(
|
2444
|
+
(file) => includedFiles.includes(file)
|
2445
|
+
);
|
2446
|
+
}
|
2369
2447
|
const uncoveredFiles = includedFiles.map((file) => pathToFileURL(file)).filter((file) => !testedFiles.includes(file.pathname));
|
2370
2448
|
let merged = { result: [] };
|
2371
2449
|
let index = 0;
|
2372
|
-
for (const chunk of this.toSlices(
|
2450
|
+
for (const chunk of this.toSlices(
|
2451
|
+
uncoveredFiles,
|
2452
|
+
this.options.processingConcurrency
|
2453
|
+
)) {
|
2373
2454
|
if (debug.enabled) {
|
2374
2455
|
index += chunk.length;
|
2375
2456
|
debug("Uncovered files %d/%d", index, uncoveredFiles.length);
|
2376
2457
|
}
|
2377
|
-
const coverages = await Promise.all(
|
2378
|
-
|
2379
|
-
|
2380
|
-
|
2381
|
-
|
2382
|
-
|
2383
|
-
|
2384
|
-
|
2385
|
-
|
2386
|
-
|
2387
|
-
|
2388
|
-
|
2389
|
-
|
2390
|
-
|
2391
|
-
|
2392
|
-
|
2393
|
-
|
2394
|
-
|
2395
|
-
|
2396
|
-
|
2397
|
-
|
2458
|
+
const coverages = await Promise.all(
|
2459
|
+
chunk.map(async (filename) => {
|
2460
|
+
const { originalSource, source } = await this.getSources(
|
2461
|
+
filename.href,
|
2462
|
+
transformResults
|
2463
|
+
);
|
2464
|
+
if (source && stripLiteral(source).trim() === "") {
|
2465
|
+
return null;
|
2466
|
+
}
|
2467
|
+
const coverage = {
|
2468
|
+
url: filename.href,
|
2469
|
+
scriptId: "0",
|
2470
|
+
// Create a made up function to mark whole file as uncovered. Note that this does not exist in source maps.
|
2471
|
+
functions: [
|
2472
|
+
{
|
2473
|
+
ranges: [
|
2474
|
+
{
|
2475
|
+
startOffset: 0,
|
2476
|
+
endOffset: originalSource.length,
|
2477
|
+
count: 0
|
2478
|
+
}
|
2479
|
+
],
|
2480
|
+
isBlockCoverage: true,
|
2481
|
+
// This is magical value that indicates an empty report: https://github.com/istanbuljs/v8-to-istanbul/blob/fca5e6a9e6ef38a9cdc3a178d5a6cf9ef82e6cab/lib/v8-to-istanbul.js#LL131C40-L131C40
|
2482
|
+
functionName: "(empty-report)"
|
2483
|
+
}
|
2484
|
+
]
|
2485
|
+
};
|
2486
|
+
return { result: [coverage] };
|
2487
|
+
})
|
2488
|
+
);
|
2398
2489
|
merged = mergeProcessCovs([
|
2399
2490
|
merged,
|
2400
|
-
...coverages.filter(
|
2491
|
+
...coverages.filter(
|
2492
|
+
(cov) => cov != null
|
2493
|
+
)
|
2401
2494
|
]);
|
2402
2495
|
}
|
2403
2496
|
return merged;
|
@@ -2424,8 +2517,9 @@ class V8CoverageProvider extends BaseCoverageProvider {
|
|
2424
2517
|
};
|
2425
2518
|
}
|
2426
2519
|
const sources = [url];
|
2427
|
-
if (map.sources && map.sources[0] && !url.endsWith(map.sources[0]))
|
2520
|
+
if (map.sources && map.sources[0] && !url.endsWith(map.sources[0])) {
|
2428
2521
|
sources[0] = new URL(map.sources[0], url).href;
|
2522
|
+
}
|
2429
2523
|
return {
|
2430
2524
|
isExecuted,
|
2431
2525
|
originalSource: sourcesContent,
|
@@ -2444,22 +2538,39 @@ class V8CoverageProvider extends BaseCoverageProvider {
|
|
2444
2538
|
const viteNode = this.ctx.projects.find((project) => project.getName() === projectName)?.vitenode || this.ctx.vitenode;
|
2445
2539
|
const fetchCache = transformMode ? viteNode.fetchCaches[transformMode] : viteNode.fetchCache;
|
2446
2540
|
const transformResults = normalizeTransformResults(fetchCache);
|
2447
|
-
const scriptCoverages = coverage.result.filter(
|
2541
|
+
const scriptCoverages = coverage.result.filter(
|
2542
|
+
(result) => this.testExclude.shouldInstrument(fileURLToPath$1(result.url))
|
2543
|
+
);
|
2448
2544
|
const coverageMap = libCoverage.createCoverageMap({});
|
2449
2545
|
let index = 0;
|
2450
|
-
for (const chunk of this.toSlices(
|
2546
|
+
for (const chunk of this.toSlices(
|
2547
|
+
scriptCoverages,
|
2548
|
+
this.options.processingConcurrency
|
2549
|
+
)) {
|
2451
2550
|
if (debug.enabled) {
|
2452
2551
|
index += chunk.length;
|
2453
2552
|
debug("Converting %d/%d", index, scriptCoverages.length);
|
2454
2553
|
}
|
2455
|
-
await Promise.all(
|
2456
|
-
|
2457
|
-
|
2458
|
-
|
2459
|
-
|
2460
|
-
|
2461
|
-
|
2462
|
-
|
2554
|
+
await Promise.all(
|
2555
|
+
chunk.map(async ({ url, functions }) => {
|
2556
|
+
const sources = await this.getSources(
|
2557
|
+
url,
|
2558
|
+
transformResults,
|
2559
|
+
functions
|
2560
|
+
);
|
2561
|
+
const wrapperLength = sources.isExecuted ? WRAPPER_LENGTH : 0;
|
2562
|
+
const converter = v8ToIstanbul$1(
|
2563
|
+
url,
|
2564
|
+
wrapperLength,
|
2565
|
+
sources,
|
2566
|
+
void 0,
|
2567
|
+
this.options.ignoreEmptyLines
|
2568
|
+
);
|
2569
|
+
await converter.load();
|
2570
|
+
converter.applyCoverage(functions);
|
2571
|
+
coverageMap.merge(converter.toIstanbul());
|
2572
|
+
})
|
2573
|
+
);
|
2463
2574
|
}
|
2464
2575
|
return coverageMap;
|
2465
2576
|
}
|
@@ -2469,10 +2580,12 @@ async function transformCoverage(coverageMap) {
|
|
2469
2580
|
return await sourceMapStore.transformCoverage(coverageMap);
|
2470
2581
|
}
|
2471
2582
|
function excludeGeneratedCode(source, map) {
|
2472
|
-
if (!source)
|
2583
|
+
if (!source) {
|
2473
2584
|
return map;
|
2474
|
-
|
2585
|
+
}
|
2586
|
+
if (!source.match(VITE_EXPORTS_LINE_PATTERN) && !source.match(DECORATOR_METADATA_PATTERN)) {
|
2475
2587
|
return map;
|
2588
|
+
}
|
2476
2589
|
const trimmed = new MagicString(source);
|
2477
2590
|
trimmed.replaceAll(VITE_EXPORTS_LINE_PATTERN, "\n");
|
2478
2591
|
trimmed.replaceAll(DECORATOR_METADATA_PATTERN, (match) => "\n".repeat(match.split("\n").length - 1));
|
@@ -2485,7 +2598,10 @@ function excludeGeneratedCode(source, map) {
|
|
2485
2598
|
}
|
2486
2599
|
function findLongestFunctionLength(functions) {
|
2487
2600
|
return functions.reduce((previous, current) => {
|
2488
|
-
const maxEndOffset = current.ranges.reduce(
|
2601
|
+
const maxEndOffset = current.ranges.reduce(
|
2602
|
+
(endOffset, range) => Math.max(endOffset, range.endOffset),
|
2603
|
+
0
|
2604
|
+
);
|
2489
2605
|
return Math.max(previous, maxEndOffset);
|
2490
2606
|
}, 0);
|
2491
2607
|
}
|
@@ -2493,8 +2609,9 @@ function normalizeTransformResults(fetchCache) {
|
|
2493
2609
|
const normalized = /* @__PURE__ */ new Map();
|
2494
2610
|
for (const [key, value] of fetchCache.entries()) {
|
2495
2611
|
const cleanEntry = cleanUrl(key);
|
2496
|
-
if (!normalized.has(cleanEntry))
|
2612
|
+
if (!normalized.has(cleanEntry)) {
|
2497
2613
|
normalized.set(cleanEntry, value.result);
|
2614
|
+
}
|
2498
2615
|
}
|
2499
2616
|
return normalized;
|
2500
2617
|
}
|
package/package.json
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
{
|
2
2
|
"name": "@vitest/coverage-v8",
|
3
3
|
"type": "module",
|
4
|
-
"version": "2.0.0-beta.
|
4
|
+
"version": "2.0.0-beta.11",
|
5
5
|
"description": "V8 coverage provider for Vitest",
|
6
6
|
"author": "Anthony Fu <anthonyfu117@hotmail.com>",
|
7
7
|
"license": "MIT",
|
@@ -37,22 +37,22 @@
|
|
37
37
|
"dist"
|
38
38
|
],
|
39
39
|
"peerDependencies": {
|
40
|
-
"vitest": "2.0.0-beta.
|
40
|
+
"vitest": "2.0.0-beta.11"
|
41
41
|
},
|
42
42
|
"dependencies": {
|
43
43
|
"@ampproject/remapping": "^2.3.0",
|
44
44
|
"@bcoe/v8-coverage": "^0.2.3",
|
45
|
-
"debug": "^4.3.
|
45
|
+
"debug": "^4.3.5",
|
46
46
|
"istanbul-lib-coverage": "^3.2.2",
|
47
47
|
"istanbul-lib-report": "^3.0.1",
|
48
48
|
"istanbul-lib-source-maps": "^5.0.4",
|
49
49
|
"istanbul-reports": "^3.1.7",
|
50
50
|
"magic-string": "^0.30.10",
|
51
51
|
"magicast": "^0.3.4",
|
52
|
-
"picocolors": "^1.0.
|
52
|
+
"picocolors": "^1.0.1",
|
53
53
|
"std-env": "^3.7.0",
|
54
54
|
"strip-literal": "^2.1.0",
|
55
|
-
"test-exclude": "^
|
55
|
+
"test-exclude": "^7.0.1"
|
56
56
|
},
|
57
57
|
"devDependencies": {
|
58
58
|
"@types/debug": "^4.1.12",
|
@@ -62,8 +62,8 @@
|
|
62
62
|
"@types/istanbul-reports": "^3.0.4",
|
63
63
|
"pathe": "^1.1.2",
|
64
64
|
"v8-to-istanbul": "^9.2.0",
|
65
|
-
"
|
66
|
-
"
|
65
|
+
"vite-node": "2.0.0-beta.11",
|
66
|
+
"vitest": "2.0.0-beta.11"
|
67
67
|
},
|
68
68
|
"scripts": {
|
69
69
|
"build": "rimraf dist && rollup -c",
|