@vitest/coverage-istanbul 2.1.0 → 2.1.2

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.
@@ -4,9 +4,25 @@ import { CoverageMap } from 'istanbul-lib-coverage';
4
4
  import { Instrumenter } from 'istanbul-lib-instrument';
5
5
 
6
6
  type Options = ResolvedCoverageOptions<'istanbul'>;
7
- type Filename = string;
8
- type CoverageFilesByTransformMode = Record<AfterSuiteRunMeta['transformMode'], Filename[]>;
9
- type ProjectName = NonNullable<AfterSuiteRunMeta['projectName']> | typeof DEFAULT_PROJECT;
7
+ /**
8
+ * Holds info about raw coverage results that are stored on file system:
9
+ *
10
+ * ```json
11
+ * "project-a": {
12
+ * "web": {
13
+ * "tests/math.test.ts": "coverage-1.json",
14
+ * "tests/utils.test.ts": "coverage-2.json",
15
+ * // ^^^^^^^^^^^^^^^ Raw coverage on file system
16
+ * },
17
+ * "ssr": { ... },
18
+ * "browser": { ... },
19
+ * },
20
+ * "project-b": ...
21
+ * ```
22
+ */
23
+ type CoverageFiles = Map<NonNullable<AfterSuiteRunMeta['projectName']> | typeof DEFAULT_PROJECT, Record<AfterSuiteRunMeta['transformMode'], {
24
+ [TestFilenames: string]: string;
25
+ }>>;
10
26
  interface TestExclude {
11
27
  new (opts: {
12
28
  cwd?: string | string[];
@@ -27,7 +43,7 @@ declare class IstanbulCoverageProvider extends BaseCoverageProvider implements C
27
43
  options: Options;
28
44
  instrumenter: Instrumenter;
29
45
  testExclude: InstanceType<TestExclude>;
30
- coverageFiles: Map<ProjectName, CoverageFilesByTransformMode>;
46
+ coverageFiles: CoverageFiles;
31
47
  coverageFilesDirectory: string;
32
48
  pendingPromises: Promise<void>[];
33
49
  initialize(ctx: Vitest): void;
@@ -36,10 +52,12 @@ declare class IstanbulCoverageProvider extends BaseCoverageProvider implements C
36
52
  code: string;
37
53
  map: any;
38
54
  } | undefined;
39
- onAfterSuiteRun({ coverage, transformMode, projectName }: AfterSuiteRunMeta): void;
55
+ onAfterSuiteRun({ coverage, transformMode, projectName, testFiles }: AfterSuiteRunMeta): void;
40
56
  clean(clean?: boolean): Promise<void>;
41
57
  generateCoverage({ allTestsRun }: ReportContext): Promise<CoverageMap>;
42
58
  reportCoverage(coverageMap: unknown, { allTestsRun }: ReportContext): Promise<void>;
59
+ private cleanAfterRun;
60
+ onTestFailure(): Promise<void>;
43
61
  generateReports(coverageMap: CoverageMap, allTestsRun: boolean | undefined): Promise<void>;
44
62
  mergeReports(coverageMaps: unknown[]): Promise<void>;
45
63
  private getCoverageMapForUncoveredFiles;
package/dist/provider.js CHANGED
@@ -108,7 +108,7 @@ const isAbsolute = function(p) {
108
108
  return _IS_ABSOLUTE_RE.test(p);
109
109
  };
110
110
 
111
- var version = "2.1.0";
111
+ var version = "2.1.2";
112
112
 
113
113
  const DEFAULT_PROJECT = Symbol.for("default-project");
114
114
  const debug = createDebug("vitest:coverage");
@@ -214,7 +214,7 @@ Update your dependencies and make sure the versions match.`
214
214
  * Note that adding new entries here and requiring on those without
215
215
  * backwards compatibility is a breaking change.
216
216
  */
217
- onAfterSuiteRun({ coverage, transformMode, projectName }) {
217
+ onAfterSuiteRun({ coverage, transformMode, projectName, testFiles }) {
218
218
  if (!coverage) {
219
219
  return;
220
220
  }
@@ -223,14 +223,15 @@ Update your dependencies and make sure the versions match.`
223
223
  }
224
224
  let entry = this.coverageFiles.get(projectName || DEFAULT_PROJECT);
225
225
  if (!entry) {
226
- entry = { web: [], ssr: [], browser: [] };
226
+ entry = { web: {}, ssr: {}, browser: {} };
227
227
  this.coverageFiles.set(projectName || DEFAULT_PROJECT, entry);
228
228
  }
229
+ const testFilenames = testFiles.join();
229
230
  const filename = resolve(
230
231
  this.coverageFilesDirectory,
231
232
  `coverage-${uniqueId++}.json`
232
233
  );
233
- entry[transformMode].push(filename);
234
+ entry[transformMode][testFilenames] = filename;
234
235
  const promise = promises.writeFile(filename, JSON.stringify(coverage), "utf-8");
235
236
  this.pendingPromises.push(promise);
236
237
  }
@@ -260,12 +261,13 @@ Update your dependencies and make sure the versions match.`
260
261
  await Promise.all(this.pendingPromises);
261
262
  this.pendingPromises = [];
262
263
  for (const coveragePerProject of this.coverageFiles.values()) {
263
- for (const filenames of [
264
+ for (const coverageByTestfiles of [
264
265
  coveragePerProject.ssr,
265
266
  coveragePerProject.web,
266
267
  coveragePerProject.browser
267
268
  ]) {
268
269
  const coverageMapByTransformMode = libCoverage.createCoverageMap({});
270
+ const filenames = Object.values(coverageByTestfiles);
269
271
  for (const chunk of this.toSlices(
270
272
  filenames,
271
273
  this.options.processingConcurrency
@@ -288,7 +290,7 @@ Update your dependencies and make sure the versions match.`
288
290
  coverageMap.merge(transformedCoverage);
289
291
  }
290
292
  }
291
- if (this.options.all && allTestsRun) {
293
+ if (this.options.all && (allTestsRun || !this.options.cleanOnRerun)) {
292
294
  const coveredFiles = coverageMap.files();
293
295
  const uncoveredCoverage = await this.getCoverageMapForUncoveredFiles(
294
296
  coveredFiles
@@ -307,11 +309,19 @@ Update your dependencies and make sure the versions match.`
307
309
  );
308
310
  const keepResults = !this.options.cleanOnRerun && this.ctx.config.watch;
309
311
  if (!keepResults) {
310
- this.coverageFiles = /* @__PURE__ */ new Map();
311
- await promises.rm(this.coverageFilesDirectory, { recursive: true });
312
- if (readdirSync(this.options.reportsDirectory).length === 0) {
313
- await promises.rm(this.options.reportsDirectory, { recursive: true });
314
- }
312
+ await this.cleanAfterRun();
313
+ }
314
+ }
315
+ async cleanAfterRun() {
316
+ this.coverageFiles = /* @__PURE__ */ new Map();
317
+ await promises.rm(this.coverageFilesDirectory, { recursive: true });
318
+ if (readdirSync(this.options.reportsDirectory).length === 0) {
319
+ await promises.rm(this.options.reportsDirectory, { recursive: true });
320
+ }
321
+ }
322
+ async onTestFailure() {
323
+ if (!this.options.reportOnFailure) {
324
+ await this.cleanAfterRun();
315
325
  }
316
326
  }
317
327
  async generateReports(coverageMap, allTestsRun) {
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@vitest/coverage-istanbul",
3
3
  "type": "module",
4
- "version": "2.1.0",
4
+ "version": "2.1.2",
5
5
  "description": "Istanbul coverage provider for Vitest",
6
6
  "author": "Anthony Fu <anthonyfu117@hotmail.com>",
7
7
  "license": "MIT",
@@ -37,7 +37,7 @@
37
37
  "dist"
38
38
  ],
39
39
  "peerDependencies": {
40
- "vitest": "2.1.0"
40
+ "vitest": "2.1.2"
41
41
  },
42
42
  "dependencies": {
43
43
  "@istanbuljs/schema": "^0.1.3",
@@ -59,7 +59,7 @@
59
59
  "@types/istanbul-lib-source-maps": "^4.0.4",
60
60
  "@types/istanbul-reports": "^3.0.4",
61
61
  "pathe": "^1.1.2",
62
- "vitest": "2.1.0"
62
+ "vitest": "2.1.2"
63
63
  },
64
64
  "scripts": {
65
65
  "build": "rimraf dist && rollup -c",