@vitest/coverage-istanbul 3.2.0-beta.1 → 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.1";
110
+ var version = "3.2.0-beta.3";
111
111
 
112
112
  const debug = createDebug("vitest:coverage");
113
113
  class IstanbulCoverageProvider extends BaseCoverageProvider {
@@ -139,11 +139,18 @@ class IstanbulCoverageProvider extends BaseCoverageProvider {
139
139
  });
140
140
  }
141
141
  onFileTransform(sourceCode, id, pluginCtx) {
142
- if (!this.testExclude.shouldInstrument(id)) {
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"
145
+ if (id.endsWith(".css")) {
146
+ return;
147
+ }
148
+ if (!this.testExclude.shouldInstrument(removeQueryParameters(id))) {
143
149
  return;
144
150
  }
145
151
  const sourceMap = pluginCtx.getCombinedSourcemap();
146
152
  sourceMap.sources = sourceMap.sources.map(removeQueryParameters);
153
+ // Exclude SWC's decorators that are left in source maps
147
154
  sourceCode = sourceCode.replaceAll("_ts_decorate", "/* istanbul ignore next */_ts_decorate");
148
155
  const code = this.instrumenter.instrumentSync(sourceCode, id, sourceMap);
149
156
  const map = this.instrumenter.lastSourceMap();
@@ -164,12 +171,16 @@ class IstanbulCoverageProvider extends BaseCoverageProvider {
164
171
  coverageMapByTransformMode.merge(coverage);
165
172
  },
166
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.
167
176
  const transformedCoverage = await transformCoverage(coverageMapByTransformMode);
168
177
  coverageMap.merge(transformedCoverage);
169
178
  coverageMapByTransformMode = this.createCoverageMap();
170
179
  },
171
180
  onDebug: debug
172
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"
173
184
  if (this.options.all && (allTestsRun || !this.options.cleanOnRerun)) {
174
185
  const coveredFiles = coverageMap.files();
175
186
  const uncoveredCoverage = await this.getCoverageMapForUncoveredFiles(coveredFiles);
@@ -193,6 +204,7 @@ class IstanbulCoverageProvider extends BaseCoverageProvider {
193
204
  this.ctx.logger.log(c.blue(" % ") + c.dim("Coverage report from ") + c.yellow(this.name));
194
205
  }
195
206
  for (const reporter of this.options.reporter) {
207
+ // Type assertion required for custom reporters
196
208
  reports.create(reporter[0], {
197
209
  skipFull: this.options.skipFull,
198
210
  projectRoot: this.ctx.config.root,
@@ -216,6 +228,8 @@ class IstanbulCoverageProvider extends BaseCoverageProvider {
216
228
  const cacheKey = new Date().getTime();
217
229
  const coverageMap = this.createCoverageMap();
218
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
219
233
  for (const [index, filename] of uncoveredFiles.entries()) {
220
234
  let timeout;
221
235
  let start;
@@ -224,7 +238,8 @@ class IstanbulCoverageProvider extends BaseCoverageProvider {
224
238
  timeout = setTimeout(() => debug(c.bgRed(`File "${filename}" is taking longer than 3s`)), 3e3);
225
239
  debug("Uncovered file %d/%d", index, uncoveredFiles.length);
226
240
  }
227
- await transform(`${filename}?v=${cacheKey}`);
241
+ // Make sure file is not served from cache so that instrumenter loads up requested file coverage
242
+ await transform(`${filename}?cache=${cacheKey}`);
228
243
  const lastCoverage = this.instrumenter.lastFileCoverage();
229
244
  coverageMap.addFileCoverage(lastCoverage);
230
245
  if (debug.enabled) {
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.1",
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.1"
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.1"
63
+ "vitest": "3.2.0-beta.3"
64
64
  },
65
65
  "scripts": {
66
66
  "build": "rimraf dist && rollup -c",