@vitest/coverage-istanbul 3.2.0-beta.2 → 3.2.0

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.js CHANGED
@@ -2,10 +2,13 @@ import { C as COVERAGE_STORE_KEY } from './constants-BCJfMgEg.js';
2
2
 
3
3
  const mod = {
4
4
  takeCoverage() {
5
+ // @ts-expect-error -- untyped global
5
6
  return globalThis[COVERAGE_STORE_KEY];
6
7
  },
7
8
  startCoverage() {
9
+ // @ts-expect-error -- untyped global
8
10
  const coverageMap = globalThis[COVERAGE_STORE_KEY];
11
+ // When isolated, there are no previous results
9
12
  if (!coverageMap) {
10
13
  return;
11
14
  }
@@ -23,6 +26,7 @@ const mod = {
23
26
  }
24
27
  },
25
28
  async getProvider() {
29
+ // to not bundle the provider
26
30
  const providerPath = "./provider.js";
27
31
  const { IstanbulCoverageProvider } = await import(
28
32
  /* @vite-ignore */
package/dist/provider.js CHANGED
@@ -107,7 +107,7 @@ const isAbsolute = function(p) {
107
107
  return _IS_ABSOLUTE_RE.test(p);
108
108
  };
109
109
 
110
- var version = "3.2.0-beta.2";
110
+ var version = "3.2.0";
111
111
 
112
112
  const debug = createDebug("vitest:coverage");
113
113
  class IstanbulCoverageProvider extends BaseCoverageProvider {
@@ -139,6 +139,9 @@ class IstanbulCoverageProvider extends BaseCoverageProvider {
139
139
  });
140
140
  }
141
141
  onFileTransform(sourceCode, id, pluginCtx) {
142
+ // Istanbul/babel cannot instrument CSS - e.g. Vue imports end up here.
143
+ // File extension itself is .vue, but it contains CSS.
144
+ // e.g. "Example.vue?vue&type=style&index=0&scoped=f7f04e08&lang.css"
142
145
  if (id.endsWith(".css")) {
143
146
  return;
144
147
  }
@@ -147,7 +150,7 @@ class IstanbulCoverageProvider extends BaseCoverageProvider {
147
150
  }
148
151
  const sourceMap = pluginCtx.getCombinedSourcemap();
149
152
  sourceMap.sources = sourceMap.sources.map(removeQueryParameters);
150
- sourceCode = sourceCode.replaceAll("_ts_decorate", "/* istanbul ignore next */_ts_decorate");
153
+ sourceCode = sourceCode.replaceAll("_ts_decorate", "/* istanbul ignore next */_ts_decorate").replaceAll(/(if +\(import\.meta\.vitest\))/g, "/* istanbul ignore next */ $1");
151
154
  const code = this.instrumenter.instrumentSync(sourceCode, id, sourceMap);
152
155
  const map = this.instrumenter.lastSourceMap();
153
156
  return {
@@ -167,12 +170,16 @@ class IstanbulCoverageProvider extends BaseCoverageProvider {
167
170
  coverageMapByTransformMode.merge(coverage);
168
171
  },
169
172
  onFinished: async () => {
173
+ // Source maps can change based on projectName and transform mode.
174
+ // Coverage transform re-uses source maps so we need to separate transforms from each other.
170
175
  const transformedCoverage = await transformCoverage(coverageMapByTransformMode);
171
176
  coverageMap.merge(transformedCoverage);
172
177
  coverageMapByTransformMode = this.createCoverageMap();
173
178
  },
174
179
  onDebug: debug
175
180
  });
181
+ // Include untested files when all tests were run (not a single file re-run)
182
+ // or if previous results are preserved by "cleanOnRerun: false"
176
183
  if (this.options.all && (allTestsRun || !this.options.cleanOnRerun)) {
177
184
  const coveredFiles = coverageMap.files();
178
185
  const uncoveredCoverage = await this.getCoverageMapForUncoveredFiles(coveredFiles);
@@ -196,6 +203,7 @@ class IstanbulCoverageProvider extends BaseCoverageProvider {
196
203
  this.ctx.logger.log(c.blue(" % ") + c.dim("Coverage report from ") + c.yellow(this.name));
197
204
  }
198
205
  for (const reporter of this.options.reporter) {
206
+ // Type assertion required for custom reporters
199
207
  reports.create(reporter[0], {
200
208
  skipFull: this.options.skipFull,
201
209
  projectRoot: this.ctx.config.root,
@@ -219,6 +227,8 @@ class IstanbulCoverageProvider extends BaseCoverageProvider {
219
227
  const cacheKey = new Date().getTime();
220
228
  const coverageMap = this.createCoverageMap();
221
229
  const transform = this.createUncoveredFileTransformer(this.ctx);
230
+ // Note that these cannot be run parallel as synchronous instrumenter.lastFileCoverage
231
+ // returns the coverage of the last transformed file
222
232
  for (const [index, filename] of uncoveredFiles.entries()) {
223
233
  let timeout;
224
234
  let start;
@@ -227,6 +237,7 @@ class IstanbulCoverageProvider extends BaseCoverageProvider {
227
237
  timeout = setTimeout(() => debug(c.bgRed(`File "${filename}" is taking longer than 3s`)), 3e3);
228
238
  debug("Uncovered file %d/%d", index, uncoveredFiles.length);
229
239
  }
240
+ // Make sure file is not served from cache so that instrumenter loads up requested file coverage
230
241
  await transform(`${filename}?cache=${cacheKey}`);
231
242
  const lastCoverage = this.instrumenter.lastFileCoverage();
232
243
  coverageMap.addFileCoverage(lastCoverage);
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@vitest/coverage-istanbul",
3
3
  "type": "module",
4
- "version": "3.2.0-beta.2",
4
+ "version": "3.2.0",
5
5
  "description": "Istanbul coverage provider for Vitest",
6
6
  "author": "Anthony Fu <anthonyfu117@hotmail.com>",
7
7
  "license": "MIT",
@@ -37,11 +37,11 @@
37
37
  "dist"
38
38
  ],
39
39
  "peerDependencies": {
40
- "vitest": "3.2.0-beta.2"
40
+ "vitest": "3.2.0"
41
41
  },
42
42
  "dependencies": {
43
43
  "@istanbuljs/schema": "^0.1.3",
44
- "debug": "^4.4.0",
44
+ "debug": "^4.4.1",
45
45
  "istanbul-lib-coverage": "^3.2.2",
46
46
  "istanbul-lib-instrument": "^6.0.3",
47
47
  "istanbul-lib-report": "^3.0.1",
@@ -60,7 +60,7 @@
60
60
  "@types/istanbul-reports": "^3.0.4",
61
61
  "@types/test-exclude": "^6.0.2",
62
62
  "pathe": "^2.0.3",
63
- "vitest": "3.2.0-beta.2"
63
+ "vitest": "3.2.0"
64
64
  },
65
65
  "scripts": {
66
66
  "build": "rimraf dist && rollup -c",