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

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-beta.3";
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,6 +150,7 @@ class IstanbulCoverageProvider extends BaseCoverageProvider {
147
150
  }
148
151
  const sourceMap = pluginCtx.getCombinedSourcemap();
149
152
  sourceMap.sources = sourceMap.sources.map(removeQueryParameters);
153
+ // Exclude SWC's decorators that are left in source maps
150
154
  sourceCode = sourceCode.replaceAll("_ts_decorate", "/* istanbul ignore next */_ts_decorate");
151
155
  const code = this.instrumenter.instrumentSync(sourceCode, id, sourceMap);
152
156
  const map = this.instrumenter.lastSourceMap();
@@ -167,12 +171,16 @@ class IstanbulCoverageProvider extends BaseCoverageProvider {
167
171
  coverageMapByTransformMode.merge(coverage);
168
172
  },
169
173
  onFinished: async () => {
174
+ // Source maps can change based on projectName and transform mode.
175
+ // Coverage transform re-uses source maps so we need to separate transforms from each other.
170
176
  const transformedCoverage = await transformCoverage(coverageMapByTransformMode);
171
177
  coverageMap.merge(transformedCoverage);
172
178
  coverageMapByTransformMode = this.createCoverageMap();
173
179
  },
174
180
  onDebug: debug
175
181
  });
182
+ // Include untested files when all tests were run (not a single file re-run)
183
+ // or if previous results are preserved by "cleanOnRerun: false"
176
184
  if (this.options.all && (allTestsRun || !this.options.cleanOnRerun)) {
177
185
  const coveredFiles = coverageMap.files();
178
186
  const uncoveredCoverage = await this.getCoverageMapForUncoveredFiles(coveredFiles);
@@ -196,6 +204,7 @@ class IstanbulCoverageProvider extends BaseCoverageProvider {
196
204
  this.ctx.logger.log(c.blue(" % ") + c.dim("Coverage report from ") + c.yellow(this.name));
197
205
  }
198
206
  for (const reporter of this.options.reporter) {
207
+ // Type assertion required for custom reporters
199
208
  reports.create(reporter[0], {
200
209
  skipFull: this.options.skipFull,
201
210
  projectRoot: this.ctx.config.root,
@@ -219,6 +228,8 @@ class IstanbulCoverageProvider extends BaseCoverageProvider {
219
228
  const cacheKey = new Date().getTime();
220
229
  const coverageMap = this.createCoverageMap();
221
230
  const transform = this.createUncoveredFileTransformer(this.ctx);
231
+ // Note that these cannot be run parallel as synchronous instrumenter.lastFileCoverage
232
+ // returns the coverage of the last transformed file
222
233
  for (const [index, filename] of uncoveredFiles.entries()) {
223
234
  let timeout;
224
235
  let start;
@@ -227,6 +238,7 @@ class IstanbulCoverageProvider extends BaseCoverageProvider {
227
238
  timeout = setTimeout(() => debug(c.bgRed(`File "${filename}" is taking longer than 3s`)), 3e3);
228
239
  debug("Uncovered file %d/%d", index, uncoveredFiles.length);
229
240
  }
241
+ // Make sure file is not served from cache so that instrumenter loads up requested file coverage
230
242
  await transform(`${filename}?cache=${cacheKey}`);
231
243
  const lastCoverage = this.instrumenter.lastFileCoverage();
232
244
  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-beta.3",
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-beta.3"
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-beta.3"
64
64
  },
65
65
  "scripts": {
66
66
  "build": "rimraf dist && rollup -c",