@vitest/coverage-istanbul 3.0.9 → 3.1.0-beta.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.
- package/dist/index.js +29 -30
- package/dist/provider.js +118 -131
- package/package.json +3 -3
package/dist/index.js
CHANGED
@@ -1,36 +1,35 @@
|
|
1
1
|
import { C as COVERAGE_STORE_KEY } from './constants-BCJfMgEg.js';
|
2
2
|
|
3
3
|
const mod = {
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
}
|
4
|
+
takeCoverage() {
|
5
|
+
return globalThis[COVERAGE_STORE_KEY];
|
6
|
+
},
|
7
|
+
startCoverage() {
|
8
|
+
const coverageMap = globalThis[COVERAGE_STORE_KEY];
|
9
|
+
if (!coverageMap) {
|
10
|
+
return;
|
11
|
+
}
|
12
|
+
for (const filename in coverageMap) {
|
13
|
+
const branches = coverageMap[filename].b;
|
14
|
+
for (const key in branches) {
|
15
|
+
branches[key] = branches[key].map(() => 0);
|
16
|
+
}
|
17
|
+
for (const metric of ["f", "s"]) {
|
18
|
+
const entry = coverageMap[filename][metric];
|
19
|
+
for (const key in entry) {
|
20
|
+
entry[key] = 0;
|
21
|
+
}
|
22
|
+
}
|
23
|
+
}
|
24
|
+
},
|
25
|
+
async getProvider() {
|
26
|
+
const providerPath = "./provider.js";
|
27
|
+
const { IstanbulCoverageProvider } = await import(
|
28
|
+
/* @vite-ignore */
|
29
|
+
providerPath
|
30
|
+
);
|
31
|
+
return new IstanbulCoverageProvider();
|
32
|
+
}
|
34
33
|
};
|
35
34
|
|
36
35
|
export { mod as default };
|
package/dist/provider.js
CHANGED
@@ -107,144 +107,131 @@ const isAbsolute = function(p) {
|
|
107
107
|
return _IS_ABSOLUTE_RE.test(p);
|
108
108
|
};
|
109
109
|
|
110
|
-
var version = "3.0.
|
110
|
+
var version = "3.1.0-beta.2";
|
111
111
|
|
112
112
|
const debug = createDebug("vitest:coverage");
|
113
113
|
class IstanbulCoverageProvider extends BaseCoverageProvider {
|
114
|
-
|
115
|
-
|
116
|
-
|
117
|
-
|
118
|
-
|
119
|
-
|
120
|
-
|
121
|
-
|
122
|
-
|
123
|
-
|
124
|
-
|
125
|
-
|
126
|
-
|
127
|
-
|
128
|
-
|
129
|
-
|
130
|
-
|
131
|
-
|
132
|
-
|
133
|
-
|
134
|
-
|
135
|
-
|
136
|
-
|
137
|
-
|
138
|
-
|
139
|
-
|
140
|
-
|
141
|
-
|
142
|
-
|
143
|
-
|
144
|
-
|
145
|
-
|
146
|
-
|
147
|
-
|
148
|
-
|
149
|
-
|
150
|
-
|
151
|
-
|
152
|
-
|
153
|
-
|
154
|
-
|
155
|
-
|
156
|
-
|
157
|
-
|
158
|
-
|
159
|
-
|
160
|
-
|
161
|
-
|
162
|
-
|
163
|
-
|
164
|
-
|
165
|
-
|
166
|
-
|
167
|
-
|
168
|
-
|
169
|
-
|
170
|
-
|
171
|
-
|
172
|
-
|
173
|
-
|
174
|
-
|
175
|
-
|
176
|
-
|
177
|
-
|
178
|
-
|
179
|
-
|
180
|
-
|
181
|
-
|
182
|
-
|
183
|
-
|
184
|
-
|
185
|
-
|
186
|
-
|
187
|
-
|
188
|
-
|
189
|
-
|
190
|
-
|
191
|
-
|
192
|
-
|
193
|
-
|
194
|
-
|
195
|
-
|
196
|
-
|
197
|
-
|
198
|
-
|
199
|
-
|
200
|
-
|
201
|
-
|
202
|
-
|
203
|
-
|
204
|
-
|
205
|
-
|
206
|
-
|
207
|
-
|
208
|
-
|
209
|
-
|
210
|
-
|
211
|
-
|
212
|
-
|
213
|
-
|
214
|
-
|
215
|
-
|
216
|
-
|
217
|
-
|
218
|
-
|
219
|
-
|
220
|
-
|
221
|
-
|
222
|
-
|
223
|
-
);
|
224
|
-
if (this.ctx.config.changed) {
|
225
|
-
includedFiles = (this.ctx.config.related || []).filter(
|
226
|
-
(file) => includedFiles.includes(file)
|
227
|
-
);
|
228
|
-
}
|
229
|
-
const uncoveredFiles = includedFiles.filter((file) => !coveredFiles.includes(file)).sort();
|
230
|
-
const cacheKey = (/* @__PURE__ */ new Date()).getTime();
|
231
|
-
const coverageMap = this.createCoverageMap();
|
232
|
-
const transform = this.createUncoveredFileTransformer(this.ctx);
|
233
|
-
for (const [index, filename] of uncoveredFiles.entries()) {
|
234
|
-
debug("Uncovered file %s %d/%d", filename, index, uncoveredFiles.length);
|
235
|
-
await transform(`${filename}?v=${cacheKey}`);
|
236
|
-
const lastCoverage = this.instrumenter.lastFileCoverage();
|
237
|
-
coverageMap.addFileCoverage(lastCoverage);
|
238
|
-
}
|
239
|
-
return coverageMap;
|
240
|
-
}
|
114
|
+
name = "istanbul";
|
115
|
+
version = version;
|
116
|
+
instrumenter;
|
117
|
+
testExclude;
|
118
|
+
initialize(ctx) {
|
119
|
+
this._initialize(ctx);
|
120
|
+
this.testExclude = new TestExclude({
|
121
|
+
cwd: ctx.config.root,
|
122
|
+
include: this.options.include,
|
123
|
+
exclude: this.options.exclude,
|
124
|
+
excludeNodeModules: true,
|
125
|
+
extension: this.options.extension,
|
126
|
+
relativePath: !this.options.allowExternal
|
127
|
+
});
|
128
|
+
this.instrumenter = createInstrumenter({
|
129
|
+
produceSourceMap: true,
|
130
|
+
autoWrap: false,
|
131
|
+
esModules: true,
|
132
|
+
compact: false,
|
133
|
+
coverageVariable: COVERAGE_STORE_KEY,
|
134
|
+
coverageGlobalScope: "globalThis",
|
135
|
+
coverageGlobalScopeFunc: false,
|
136
|
+
ignoreClassMethods: this.options.ignoreClassMethods,
|
137
|
+
parserPlugins: [...defaults.instrumenter.parserPlugins, ["importAttributes", { deprecatedAssertSyntax: true }]],
|
138
|
+
generatorOpts: { importAttributesKeyword: "with" }
|
139
|
+
});
|
140
|
+
}
|
141
|
+
onFileTransform(sourceCode, id, pluginCtx) {
|
142
|
+
if (!this.testExclude.shouldInstrument(id)) {
|
143
|
+
return;
|
144
|
+
}
|
145
|
+
const sourceMap = pluginCtx.getCombinedSourcemap();
|
146
|
+
sourceMap.sources = sourceMap.sources.map(removeQueryParameters);
|
147
|
+
sourceCode = sourceCode.replaceAll("_ts_decorate", "/* istanbul ignore next */_ts_decorate");
|
148
|
+
const code = this.instrumenter.instrumentSync(sourceCode, id, sourceMap);
|
149
|
+
const map = this.instrumenter.lastSourceMap();
|
150
|
+
return {
|
151
|
+
code,
|
152
|
+
map
|
153
|
+
};
|
154
|
+
}
|
155
|
+
createCoverageMap() {
|
156
|
+
return libCoverage.createCoverageMap({});
|
157
|
+
}
|
158
|
+
async generateCoverage({ allTestsRun }) {
|
159
|
+
const coverageMap = this.createCoverageMap();
|
160
|
+
let coverageMapByTransformMode = this.createCoverageMap();
|
161
|
+
await this.readCoverageFiles({
|
162
|
+
onFileRead(coverage) {
|
163
|
+
coverageMapByTransformMode.merge(coverage);
|
164
|
+
},
|
165
|
+
onFinished: async () => {
|
166
|
+
const transformedCoverage = await transformCoverage(coverageMapByTransformMode);
|
167
|
+
coverageMap.merge(transformedCoverage);
|
168
|
+
coverageMapByTransformMode = this.createCoverageMap();
|
169
|
+
},
|
170
|
+
onDebug: debug
|
171
|
+
});
|
172
|
+
if (this.options.all && (allTestsRun || !this.options.cleanOnRerun)) {
|
173
|
+
const coveredFiles = coverageMap.files();
|
174
|
+
const uncoveredCoverage = await this.getCoverageMapForUncoveredFiles(coveredFiles);
|
175
|
+
coverageMap.merge(await transformCoverage(uncoveredCoverage));
|
176
|
+
}
|
177
|
+
if (this.options.excludeAfterRemap) {
|
178
|
+
coverageMap.filter((filename) => this.testExclude.shouldInstrument(filename));
|
179
|
+
}
|
180
|
+
return coverageMap;
|
181
|
+
}
|
182
|
+
async generateReports(coverageMap, allTestsRun) {
|
183
|
+
const context = libReport.createContext({
|
184
|
+
dir: this.options.reportsDirectory,
|
185
|
+
coverageMap,
|
186
|
+
watermarks: this.options.watermarks
|
187
|
+
});
|
188
|
+
if (this.hasTerminalReporter(this.options.reporter)) {
|
189
|
+
this.ctx.logger.log(c.blue(" % ") + c.dim("Coverage report from ") + c.yellow(this.name));
|
190
|
+
}
|
191
|
+
for (const reporter of this.options.reporter) {
|
192
|
+
reports.create(reporter[0], {
|
193
|
+
skipFull: this.options.skipFull,
|
194
|
+
projectRoot: this.ctx.config.root,
|
195
|
+
...reporter[1]
|
196
|
+
}).execute(context);
|
197
|
+
}
|
198
|
+
if (this.options.thresholds) {
|
199
|
+
await this.reportThresholds(coverageMap, allTestsRun);
|
200
|
+
}
|
201
|
+
}
|
202
|
+
async parseConfigModule(configFilePath) {
|
203
|
+
return parseModule(await promises.readFile(configFilePath, "utf8"));
|
204
|
+
}
|
205
|
+
async getCoverageMapForUncoveredFiles(coveredFiles) {
|
206
|
+
const allFiles = await this.testExclude.glob(this.ctx.config.root);
|
207
|
+
let includedFiles = allFiles.map((file) => resolve(this.ctx.config.root, file));
|
208
|
+
if (this.ctx.config.changed) {
|
209
|
+
includedFiles = (this.ctx.config.related || []).filter((file) => includedFiles.includes(file));
|
210
|
+
}
|
211
|
+
const uncoveredFiles = includedFiles.filter((file) => !coveredFiles.includes(file)).sort();
|
212
|
+
const cacheKey = new Date().getTime();
|
213
|
+
const coverageMap = this.createCoverageMap();
|
214
|
+
const transform = this.createUncoveredFileTransformer(this.ctx);
|
215
|
+
for (const [index, filename] of uncoveredFiles.entries()) {
|
216
|
+
debug("Uncovered file %s %d/%d", filename, index, uncoveredFiles.length);
|
217
|
+
await transform(`${filename}?v=${cacheKey}`);
|
218
|
+
const lastCoverage = this.instrumenter.lastFileCoverage();
|
219
|
+
coverageMap.addFileCoverage(lastCoverage);
|
220
|
+
}
|
221
|
+
return coverageMap;
|
222
|
+
}
|
241
223
|
}
|
242
224
|
async function transformCoverage(coverageMap) {
|
243
|
-
|
244
|
-
|
225
|
+
const sourceMapStore = libSourceMaps.createSourceMapStore();
|
226
|
+
return await sourceMapStore.transformCoverage(coverageMap);
|
245
227
|
}
|
228
|
+
/**
|
229
|
+
* Remove possible query parameters from filenames
|
230
|
+
* - From `/src/components/Header.component.ts?vue&type=script&src=true&lang.ts`
|
231
|
+
* - To `/src/components/Header.component.ts`
|
232
|
+
*/
|
246
233
|
function removeQueryParameters(filename) {
|
247
|
-
|
234
|
+
return filename.split("?")[0];
|
248
235
|
}
|
249
236
|
|
250
237
|
export { IstanbulCoverageProvider };
|
package/package.json
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
{
|
2
2
|
"name": "@vitest/coverage-istanbul",
|
3
3
|
"type": "module",
|
4
|
-
"version": "3.0.
|
4
|
+
"version": "3.1.0-beta.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": "3.0.
|
40
|
+
"vitest": "3.1.0-beta.2"
|
41
41
|
},
|
42
42
|
"dependencies": {
|
43
43
|
"@istanbuljs/schema": "^0.1.3",
|
@@ -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.0.
|
63
|
+
"vitest": "3.1.0-beta.2"
|
64
64
|
},
|
65
65
|
"scripts": {
|
66
66
|
"build": "rimraf dist && rollup -c",
|