@plugjs/plug 0.0.1
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/LICENSE.md +211 -0
- package/NOTICE.md +13 -0
- package/README.md +7 -0
- package/dist/assert.cjs +72 -0
- package/dist/assert.cjs.map +6 -0
- package/dist/assert.mjs +41 -0
- package/dist/assert.mjs.map +6 -0
- package/dist/async.cjs +58 -0
- package/dist/async.cjs.map +6 -0
- package/dist/async.mjs +30 -0
- package/dist/async.mjs.map +6 -0
- package/dist/build.cjs +136 -0
- package/dist/build.cjs.map +6 -0
- package/dist/build.mjs +110 -0
- package/dist/build.mjs.map +6 -0
- package/dist/files.cjs +113 -0
- package/dist/files.cjs.map +6 -0
- package/dist/files.mjs +88 -0
- package/dist/files.mjs.map +6 -0
- package/dist/fork.cjs +177 -0
- package/dist/fork.cjs.map +6 -0
- package/dist/fork.mjs +151 -0
- package/dist/fork.mjs.map +6 -0
- package/dist/helpers.cjs +129 -0
- package/dist/helpers.cjs.map +6 -0
- package/dist/helpers.mjs +97 -0
- package/dist/helpers.mjs.map +6 -0
- package/dist/index.cjs +25 -0
- package/dist/index.cjs.map +6 -0
- package/dist/index.mjs +7 -0
- package/dist/index.mjs.map +6 -0
- package/dist/log/colors.cjs +129 -0
- package/dist/log/colors.cjs.map +6 -0
- package/dist/log/colors.mjs +93 -0
- package/dist/log/colors.mjs.map +6 -0
- package/dist/log/emit.cjs +109 -0
- package/dist/log/emit.cjs.map +6 -0
- package/dist/log/emit.mjs +83 -0
- package/dist/log/emit.mjs.map +6 -0
- package/dist/log/levels.cjs +75 -0
- package/dist/log/levels.cjs.map +6 -0
- package/dist/log/levels.mjs +41 -0
- package/dist/log/levels.mjs.map +6 -0
- package/dist/log/logger.cjs +129 -0
- package/dist/log/logger.cjs.map +6 -0
- package/dist/log/logger.mjs +104 -0
- package/dist/log/logger.mjs.map +6 -0
- package/dist/log/options.cjs +149 -0
- package/dist/log/options.cjs.map +6 -0
- package/dist/log/options.mjs +124 -0
- package/dist/log/options.mjs.map +6 -0
- package/dist/log/report.cjs +284 -0
- package/dist/log/report.cjs.map +6 -0
- package/dist/log/report.mjs +259 -0
- package/dist/log/report.mjs.map +6 -0
- package/dist/log/spinner.cjs +83 -0
- package/dist/log/spinner.cjs.map +6 -0
- package/dist/log/spinner.mjs +57 -0
- package/dist/log/spinner.mjs.map +6 -0
- package/dist/log.cjs +71 -0
- package/dist/log.cjs.map +6 -0
- package/dist/log.mjs +45 -0
- package/dist/log.mjs.map +6 -0
- package/dist/paths.cjs +158 -0
- package/dist/paths.cjs.map +6 -0
- package/dist/paths.mjs +122 -0
- package/dist/paths.mjs.map +6 -0
- package/dist/pipe.cjs +71 -0
- package/dist/pipe.cjs.map +6 -0
- package/dist/pipe.mjs +44 -0
- package/dist/pipe.mjs.map +6 -0
- package/dist/plugs/copy.cjs +95 -0
- package/dist/plugs/copy.cjs.map +6 -0
- package/dist/plugs/copy.mjs +64 -0
- package/dist/plugs/copy.mjs.map +6 -0
- package/dist/plugs/coverage/analysis.cjs +229 -0
- package/dist/plugs/coverage/analysis.cjs.map +6 -0
- package/dist/plugs/coverage/analysis.mjs +202 -0
- package/dist/plugs/coverage/analysis.mjs.map +6 -0
- package/dist/plugs/coverage/report.cjs +215 -0
- package/dist/plugs/coverage/report.cjs.map +6 -0
- package/dist/plugs/coverage/report.mjs +200 -0
- package/dist/plugs/coverage/report.mjs.map +6 -0
- package/dist/plugs/coverage.cjs +142 -0
- package/dist/plugs/coverage.cjs.map +6 -0
- package/dist/plugs/coverage.mjs +117 -0
- package/dist/plugs/coverage.mjs.map +6 -0
- package/dist/plugs/debug.cjs +50 -0
- package/dist/plugs/debug.cjs.map +6 -0
- package/dist/plugs/debug.mjs +25 -0
- package/dist/plugs/debug.mjs.map +6 -0
- package/dist/plugs/esbuild/bundle-locals.cjs +51 -0
- package/dist/plugs/esbuild/bundle-locals.cjs.map +6 -0
- package/dist/plugs/esbuild/bundle-locals.mjs +26 -0
- package/dist/plugs/esbuild/bundle-locals.mjs.map +6 -0
- package/dist/plugs/esbuild/check-dependencies.cjs +140 -0
- package/dist/plugs/esbuild/check-dependencies.cjs.map +6 -0
- package/dist/plugs/esbuild/check-dependencies.mjs +115 -0
- package/dist/plugs/esbuild/check-dependencies.mjs.map +6 -0
- package/dist/plugs/esbuild/fix-extensions.cjs +91 -0
- package/dist/plugs/esbuild/fix-extensions.cjs.map +6 -0
- package/dist/plugs/esbuild/fix-extensions.mjs +60 -0
- package/dist/plugs/esbuild/fix-extensions.mjs.map +6 -0
- package/dist/plugs/esbuild.cjs +109 -0
- package/dist/plugs/esbuild.cjs.map +6 -0
- package/dist/plugs/esbuild.mjs +83 -0
- package/dist/plugs/esbuild.mjs.map +6 -0
- package/dist/plugs/eslint/runner.cjs +91 -0
- package/dist/plugs/eslint/runner.cjs.map +6 -0
- package/dist/plugs/eslint/runner.mjs +68 -0
- package/dist/plugs/eslint/runner.mjs.map +6 -0
- package/dist/plugs/exec.cjs +128 -0
- package/dist/plugs/exec.cjs.map +6 -0
- package/dist/plugs/exec.mjs +96 -0
- package/dist/plugs/exec.mjs.map +6 -0
- package/dist/plugs/filter.cjs +59 -0
- package/dist/plugs/filter.cjs.map +6 -0
- package/dist/plugs/filter.mjs +34 -0
- package/dist/plugs/filter.mjs.map +6 -0
- package/dist/plugs/mocha/reporter.cjs +140 -0
- package/dist/plugs/mocha/reporter.cjs.map +6 -0
- package/dist/plugs/mocha/reporter.mjs +107 -0
- package/dist/plugs/mocha/reporter.mjs.map +6 -0
- package/dist/plugs/mocha/runner.cjs +73 -0
- package/dist/plugs/mocha/runner.cjs.map +6 -0
- package/dist/plugs/mocha/runner.mjs +44 -0
- package/dist/plugs/mocha/runner.mjs.map +6 -0
- package/dist/plugs/tsc/compiler.cjs +74 -0
- package/dist/plugs/tsc/compiler.cjs.map +6 -0
- package/dist/plugs/tsc/compiler.mjs +43 -0
- package/dist/plugs/tsc/compiler.mjs.map +6 -0
- package/dist/plugs/tsc/options.cjs +82 -0
- package/dist/plugs/tsc/options.cjs.map +6 -0
- package/dist/plugs/tsc/options.mjs +51 -0
- package/dist/plugs/tsc/options.mjs.map +6 -0
- package/dist/plugs/tsc/report.cjs +90 -0
- package/dist/plugs/tsc/report.cjs.map +6 -0
- package/dist/plugs/tsc/report.mjs +59 -0
- package/dist/plugs/tsc/report.mjs.map +6 -0
- package/dist/plugs/tsc/runner.cjs +101 -0
- package/dist/plugs/tsc/runner.cjs.map +6 -0
- package/dist/plugs/tsc/runner.mjs +72 -0
- package/dist/plugs/tsc/runner.mjs.map +6 -0
- package/dist/plugs.cjs +31 -0
- package/dist/plugs.cjs.map +6 -0
- package/dist/plugs.mjs +13 -0
- package/dist/plugs.mjs.map +6 -0
- package/dist/run.cjs +95 -0
- package/dist/run.cjs.map +6 -0
- package/dist/run.mjs +70 -0
- package/dist/run.mjs.map +6 -0
- package/dist/task.cjs +39 -0
- package/dist/task.cjs.map +6 -0
- package/dist/task.mjs +14 -0
- package/dist/task.mjs.map +6 -0
- package/dist/utils/asyncfs.cjs +143 -0
- package/dist/utils/asyncfs.cjs.map +6 -0
- package/dist/utils/asyncfs.mjs +83 -0
- package/dist/utils/asyncfs.mjs.map +6 -0
- package/dist/utils/caller.cjs +59 -0
- package/dist/utils/caller.cjs.map +6 -0
- package/dist/utils/caller.mjs +34 -0
- package/dist/utils/caller.mjs.map +6 -0
- package/dist/utils/match.cjs +69 -0
- package/dist/utils/match.cjs.map +6 -0
- package/dist/utils/match.mjs +38 -0
- package/dist/utils/match.mjs.map +6 -0
- package/dist/utils/options.cjs +41 -0
- package/dist/utils/options.cjs.map +6 -0
- package/dist/utils/options.mjs +16 -0
- package/dist/utils/options.mjs.map +6 -0
- package/dist/utils/walk.cjs +104 -0
- package/dist/utils/walk.cjs.map +6 -0
- package/dist/utils/walk.mjs +79 -0
- package/dist/utils/walk.mjs.map +6 -0
- package/extra/cli.mjs +212 -0
- package/extra/ts-loader.mjs +214 -0
- package/extra/webassembly.d.ts +11 -0
- package/package.json +57 -0
- package/src/assert.ts +47 -0
- package/src/async.ts +50 -0
- package/src/files.ts +129 -0
- package/src/fork.ts +263 -0
- package/src/helpers.ts +145 -0
- package/src/index.ts +20 -0
- package/src/log/colors.ts +119 -0
- package/src/log/emit.ts +125 -0
- package/src/log/levels.ts +65 -0
- package/src/log/logger.ts +171 -0
- package/src/log/options.ts +199 -0
- package/src/log/report.ts +433 -0
- package/src/log/spinner.ts +70 -0
- package/src/log.ts +68 -0
- package/src/paths.ts +213 -0
- package/src/pipe.ts +231 -0
- package/src/plugs/copy.ts +113 -0
- package/src/plugs/coverage/analysis.ts +395 -0
- package/src/plugs/coverage/report.ts +337 -0
- package/src/plugs/coverage.ts +194 -0
- package/src/plugs/debug.ts +35 -0
- package/src/plugs/esbuild/bundle-locals.ts +33 -0
- package/src/plugs/esbuild/check-dependencies.ts +158 -0
- package/src/plugs/esbuild/fix-extensions.ts +108 -0
- package/src/plugs/esbuild.ts +128 -0
- package/src/plugs/eslint/runner.ts +112 -0
- package/src/plugs/exec.ts +215 -0
- package/src/plugs/filter.ts +56 -0
- package/src/plugs/mocha/reporter.ts +152 -0
- package/src/plugs/mocha/runner.ts +77 -0
- package/src/plugs/tsc/compiler.ts +66 -0
- package/src/plugs/tsc/options.ts +97 -0
- package/src/plugs/tsc/report.ts +74 -0
- package/src/plugs/tsc/runner.ts +100 -0
- package/src/plugs.ts +33 -0
- package/src/run.ts +160 -0
- package/src/task.ts +26 -0
- package/src/utils/asyncfs.ts +82 -0
- package/src/utils/caller.ts +45 -0
- package/src/utils/match.ts +286 -0
- package/src/utils/options.ts +22 -0
- package/src/utils/walk.ts +136 -0
- package/types/assert.d.ts +18 -0
- package/types/async.d.ts +20 -0
- package/types/build.d.ts +56 -0
- package/types/files.d.ts +44 -0
- package/types/fork.d.ts +57 -0
- package/types/helpers.d.ts +49 -0
- package/types/index.d.ts +14 -0
- package/types/log/colors.d.ts +25 -0
- package/types/log/emit.d.ts +14 -0
- package/types/log/levels.d.ts +52 -0
- package/types/log/logger.d.ts +31 -0
- package/types/log/options.d.ts +40 -0
- package/types/log/report.d.ts +64 -0
- package/types/log/spinner.d.ts +2 -0
- package/types/log.d.ts +10 -0
- package/types/paths.d.ts +76 -0
- package/types/pipe.d.ts +152 -0
- package/types/plugs/copy.d.ts +27 -0
- package/types/plugs/coverage/analysis.d.ts +104 -0
- package/types/plugs/coverage/report.d.ts +53 -0
- package/types/plugs/coverage.d.ts +46 -0
- package/types/plugs/debug.d.ts +14 -0
- package/types/plugs/esbuild/bundle-locals.d.ts +6 -0
- package/types/plugs/esbuild/check-dependencies.d.ts +12 -0
- package/types/plugs/esbuild/fix-extensions.d.ts +29 -0
- package/types/plugs/esbuild.d.ts +24 -0
- package/types/plugs/eslint/runner.d.ts +22 -0
- package/types/plugs/exec.d.ts +90 -0
- package/types/plugs/filter.d.ts +23 -0
- package/types/plugs/mocha/reporter.d.ts +8 -0
- package/types/plugs/mocha/runner.d.ts +34 -0
- package/types/plugs/tsc/compiler.d.ts +24 -0
- package/types/plugs/tsc/options.d.ts +8 -0
- package/types/plugs/tsc/report.d.ts +5 -0
- package/types/plugs/tsc/runner.d.ts +13 -0
- package/types/plugs.d.ts +16 -0
- package/types/run.d.ts +89 -0
- package/types/task.d.ts +15 -0
- package/types/utils/asyncfs.d.ts +37 -0
- package/types/utils/caller.d.ts +7 -0
- package/types/utils/match.d.ts +216 -0
- package/types/utils/options.d.ts +15 -0
- package/types/utils/walk.d.ts +28 -0
|
@@ -0,0 +1,202 @@
|
|
|
1
|
+
// plugs/coverage/analysis.ts
|
|
2
|
+
import { fileURLToPath, pathToFileURL } from "node:url";
|
|
3
|
+
import { SourceMapConsumer } from "source-map";
|
|
4
|
+
import { assert } from "../../assert.mjs";
|
|
5
|
+
import { $gry, $p } from "../../log.mjs";
|
|
6
|
+
import { readFile } from "../../utils/asyncfs.mjs";
|
|
7
|
+
var CoverageAnalyserImpl = class {
|
|
8
|
+
constructor(_log) {
|
|
9
|
+
this._log = _log;
|
|
10
|
+
}
|
|
11
|
+
};
|
|
12
|
+
var CoverageResultAnalyser = class extends CoverageAnalyserImpl {
|
|
13
|
+
constructor(log, _result) {
|
|
14
|
+
super(log);
|
|
15
|
+
this._result = _result;
|
|
16
|
+
const _coverage = [];
|
|
17
|
+
for (const coveredFunction of _result.functions) {
|
|
18
|
+
for (const range of coveredFunction.ranges) {
|
|
19
|
+
for (let i = range.startOffset; i < range.endOffset; i++) {
|
|
20
|
+
_coverage[i] = range.count;
|
|
21
|
+
}
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
this._coverage = _coverage;
|
|
25
|
+
}
|
|
26
|
+
_coverage;
|
|
27
|
+
_lineLengths;
|
|
28
|
+
async init() {
|
|
29
|
+
const filename = fileURLToPath(this._result.url);
|
|
30
|
+
const source = await readFile(filename, "utf-8");
|
|
31
|
+
this._lineLengths = source.split("\n").map((line) => line.length);
|
|
32
|
+
return this;
|
|
33
|
+
}
|
|
34
|
+
destroy() {
|
|
35
|
+
}
|
|
36
|
+
coverage(source, line, column) {
|
|
37
|
+
assert(this._lineLengths, "Analyser not initialized");
|
|
38
|
+
assert(source === this._result.url, `Wrong source ${source} (should be ${this._result.url})`);
|
|
39
|
+
const { _lineLengths, _coverage } = this;
|
|
40
|
+
let offset = 0;
|
|
41
|
+
for (let l = line - 2; l >= 0; l--)
|
|
42
|
+
offset += _lineLengths[l] + 1;
|
|
43
|
+
return _coverage[offset + column] || 0;
|
|
44
|
+
}
|
|
45
|
+
};
|
|
46
|
+
var CoverageSitemapAnalyser = class extends CoverageResultAnalyser {
|
|
47
|
+
constructor(log, result, _sourceMapCache, _sourceMapBias) {
|
|
48
|
+
super(log, result);
|
|
49
|
+
this._sourceMapCache = _sourceMapCache;
|
|
50
|
+
this._sourceMapBias = _sourceMapBias;
|
|
51
|
+
this._lineLengths = _sourceMapCache.lineLengths;
|
|
52
|
+
}
|
|
53
|
+
_preciseMappings = /* @__PURE__ */ new Map();
|
|
54
|
+
_sourceMap;
|
|
55
|
+
_key(source, line, column) {
|
|
56
|
+
return `${line}:${column}:${source}`;
|
|
57
|
+
}
|
|
58
|
+
async init() {
|
|
59
|
+
const sourceMap = this._sourceMapCache.data;
|
|
60
|
+
assert(sourceMap, "Missing source map data from cache");
|
|
61
|
+
this._sourceMap = await new SourceMapConsumer(sourceMap);
|
|
62
|
+
if (this._sourceMapBias === "none") {
|
|
63
|
+
this._sourceMap.eachMapping((m) => {
|
|
64
|
+
const location = { line: m.generatedLine, column: m.generatedColumn };
|
|
65
|
+
const key = this._key(m.source, m.originalLine, m.originalColumn);
|
|
66
|
+
this._preciseMappings.set(key, location);
|
|
67
|
+
});
|
|
68
|
+
}
|
|
69
|
+
return this;
|
|
70
|
+
}
|
|
71
|
+
destroy() {
|
|
72
|
+
this._sourceMap?.destroy();
|
|
73
|
+
}
|
|
74
|
+
coverage(source, line, column) {
|
|
75
|
+
assert(this._sourceMap, "Analyser not initialized");
|
|
76
|
+
if (this._sourceMapBias === "none") {
|
|
77
|
+
const key = this._key(source, line, column);
|
|
78
|
+
const location = this._preciseMappings.get(key);
|
|
79
|
+
if (!location) {
|
|
80
|
+
this._log.debug(`No precise mapping for ${source}:${line}:${column}`);
|
|
81
|
+
return 0;
|
|
82
|
+
} else {
|
|
83
|
+
return super.coverage(this._result.url, location.line, location.column);
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
const bias = this._sourceMapBias === "greatest_lower_bound" ? SourceMapConsumer.GREATEST_LOWER_BOUND : this._sourceMapBias === "least_upper_bound" ? SourceMapConsumer.LEAST_UPPER_BOUND : void 0;
|
|
87
|
+
const generated = this._sourceMap.generatedPositionFor({ source, line, column, bias });
|
|
88
|
+
if (!generated) {
|
|
89
|
+
this._log.debug(`No position generated for ${source}:${line}:${column}`);
|
|
90
|
+
return 0;
|
|
91
|
+
}
|
|
92
|
+
if (generated.line == null) {
|
|
93
|
+
this._log.debug(`No line generated for ${source}:${line}:${column}`);
|
|
94
|
+
return 0;
|
|
95
|
+
}
|
|
96
|
+
if (generated.column == null) {
|
|
97
|
+
this._log.debug(`No column generated for ${source}:${line}:${column}`);
|
|
98
|
+
return 0;
|
|
99
|
+
}
|
|
100
|
+
return super.coverage(this._result.url, generated.line, generated.column);
|
|
101
|
+
}
|
|
102
|
+
};
|
|
103
|
+
function combineCoverage(analysers, source, line, column) {
|
|
104
|
+
let coverage = 0;
|
|
105
|
+
if (!analysers)
|
|
106
|
+
return coverage;
|
|
107
|
+
for (const analyser of analysers) {
|
|
108
|
+
coverage += analyser.coverage(source, line, column);
|
|
109
|
+
}
|
|
110
|
+
return coverage;
|
|
111
|
+
}
|
|
112
|
+
var SourcesCoverageAnalyser = class extends CoverageAnalyserImpl {
|
|
113
|
+
constructor(log, _filename) {
|
|
114
|
+
super(log);
|
|
115
|
+
this._filename = _filename;
|
|
116
|
+
}
|
|
117
|
+
_mappings = /* @__PURE__ */ new Map();
|
|
118
|
+
hasMappings() {
|
|
119
|
+
return this._mappings.size > 0;
|
|
120
|
+
}
|
|
121
|
+
add(source, analyser) {
|
|
122
|
+
const analysers = this._mappings.get(source) || /* @__PURE__ */ new Set();
|
|
123
|
+
analysers.add(analyser);
|
|
124
|
+
this._mappings.set(source, analysers);
|
|
125
|
+
}
|
|
126
|
+
async init() {
|
|
127
|
+
this._log.debug("SourcesCoverageAnalyser", $p(this._filename), $gry(`(${this._mappings.size} mappings)`));
|
|
128
|
+
for (const analysers of this._mappings.values()) {
|
|
129
|
+
for (const analyser of analysers) {
|
|
130
|
+
await analyser.init();
|
|
131
|
+
}
|
|
132
|
+
}
|
|
133
|
+
return this;
|
|
134
|
+
}
|
|
135
|
+
destroy() {
|
|
136
|
+
for (const analysers of this._mappings.values()) {
|
|
137
|
+
for (const analyser of analysers) {
|
|
138
|
+
analyser.destroy();
|
|
139
|
+
}
|
|
140
|
+
}
|
|
141
|
+
}
|
|
142
|
+
coverage(source, line, column) {
|
|
143
|
+
const analysers = this._mappings.get(source);
|
|
144
|
+
return combineCoverage(analysers, source, line, column);
|
|
145
|
+
}
|
|
146
|
+
};
|
|
147
|
+
var CombiningCoverageAnalyser = class extends CoverageAnalyserImpl {
|
|
148
|
+
_analysers = /* @__PURE__ */ new Set();
|
|
149
|
+
add(analyser) {
|
|
150
|
+
this._analysers.add(analyser);
|
|
151
|
+
}
|
|
152
|
+
async init() {
|
|
153
|
+
this._log.debug("CombiningCoverageAnalyser", $gry(`(${this._analysers.size} analysers)`));
|
|
154
|
+
this._log.enter();
|
|
155
|
+
try {
|
|
156
|
+
for (const analyser of this._analysers)
|
|
157
|
+
await analyser.init();
|
|
158
|
+
return this;
|
|
159
|
+
} finally {
|
|
160
|
+
this._log.leave();
|
|
161
|
+
}
|
|
162
|
+
}
|
|
163
|
+
destroy() {
|
|
164
|
+
for (const analyser of this._analysers)
|
|
165
|
+
analyser.destroy();
|
|
166
|
+
}
|
|
167
|
+
coverage(source, line, column) {
|
|
168
|
+
return combineCoverage(this._analysers, source, line, column);
|
|
169
|
+
}
|
|
170
|
+
};
|
|
171
|
+
async function createAnalyser(sourceFiles, coverageFiles, sourceMapBias, log) {
|
|
172
|
+
const urls = sourceFiles.map((path) => pathToFileURL(path).toString());
|
|
173
|
+
const analyser = new CombiningCoverageAnalyser(log);
|
|
174
|
+
for await (const coverageFile of coverageFiles) {
|
|
175
|
+
const coverageFileAnalyser = new SourcesCoverageAnalyser(log, coverageFile);
|
|
176
|
+
log.info("Parsing coverage file", $p(coverageFile));
|
|
177
|
+
const contents = await readFile(coverageFile, "utf-8");
|
|
178
|
+
const coverage = JSON.parse(contents);
|
|
179
|
+
for (const result of coverage.result) {
|
|
180
|
+
const mapping = coverage["source-map-cache"]?.[result.url];
|
|
181
|
+
if (mapping) {
|
|
182
|
+
const matches = urls.filter((url) => mapping.data?.sources.includes(url));
|
|
183
|
+
if (matches.length) {
|
|
184
|
+
const sourceAnalyser = new CoverageSitemapAnalyser(log, result, mapping, sourceMapBias);
|
|
185
|
+
for (const match of matches)
|
|
186
|
+
coverageFileAnalyser.add(match, sourceAnalyser);
|
|
187
|
+
}
|
|
188
|
+
} else if (urls.includes(result.url)) {
|
|
189
|
+
coverageFileAnalyser.add(result.url, new CoverageResultAnalyser(log, result));
|
|
190
|
+
}
|
|
191
|
+
}
|
|
192
|
+
if (coverageFileAnalyser.hasMappings())
|
|
193
|
+
analyser.add(coverageFileAnalyser);
|
|
194
|
+
}
|
|
195
|
+
return await analyser.init();
|
|
196
|
+
}
|
|
197
|
+
export {
|
|
198
|
+
CombiningCoverageAnalyser,
|
|
199
|
+
SourcesCoverageAnalyser,
|
|
200
|
+
createAnalyser
|
|
201
|
+
};
|
|
202
|
+
//# sourceMappingURL=analysis.mjs.map
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../../src/plugs/coverage/analysis.ts"],
|
|
4
|
+
"mappings": "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",
|
|
5
|
+
"names": []
|
|
6
|
+
}
|
|
@@ -0,0 +1,215 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __defProp = Object.defineProperty;
|
|
3
|
+
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
4
|
+
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
5
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
6
|
+
var __export = (target, all) => {
|
|
7
|
+
for (var name in all)
|
|
8
|
+
__defProp(target, name, { get: all[name], enumerable: true });
|
|
9
|
+
};
|
|
10
|
+
var __copyProps = (to, from, except, desc) => {
|
|
11
|
+
if (from && typeof from === "object" || typeof from === "function") {
|
|
12
|
+
for (let key of __getOwnPropNames(from))
|
|
13
|
+
if (!__hasOwnProp.call(to, key) && key !== except)
|
|
14
|
+
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
15
|
+
}
|
|
16
|
+
return to;
|
|
17
|
+
};
|
|
18
|
+
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
19
|
+
|
|
20
|
+
// plugs/coverage/report.ts
|
|
21
|
+
var report_exports = {};
|
|
22
|
+
__export(report_exports, {
|
|
23
|
+
COVERAGE_IGNORED: () => COVERAGE_IGNORED,
|
|
24
|
+
COVERAGE_SKIPPED: () => COVERAGE_SKIPPED,
|
|
25
|
+
coverageReport: () => coverageReport
|
|
26
|
+
});
|
|
27
|
+
module.exports = __toCommonJS(report_exports);
|
|
28
|
+
var import_parser = require("@babel/parser");
|
|
29
|
+
var import_types = require("@babel/types");
|
|
30
|
+
var import_node_url = require("node:url");
|
|
31
|
+
var import_log = require("../../log.cjs");
|
|
32
|
+
var import_asyncfs = require("../../utils/asyncfs.cjs");
|
|
33
|
+
var COVERAGE_SKIPPED = -2;
|
|
34
|
+
var COVERAGE_IGNORED = -1;
|
|
35
|
+
var ignoreRegexp = /(coverage|istanbul)\s+ignore\s+(test|if|else|try|catch|finally|next)(\s|$)/g;
|
|
36
|
+
async function coverageReport(analyser, sourceFiles, log) {
|
|
37
|
+
const results = {};
|
|
38
|
+
const nodes = {
|
|
39
|
+
coveredNodes: 0,
|
|
40
|
+
missingNodes: 0,
|
|
41
|
+
ignoredNodes: 0,
|
|
42
|
+
totalNodes: 0,
|
|
43
|
+
coverage: 0
|
|
44
|
+
};
|
|
45
|
+
for (const file of sourceFiles) {
|
|
46
|
+
const url = (0, import_node_url.pathToFileURL)(file).toString();
|
|
47
|
+
const code = await (0, import_asyncfs.readFile)(file, "utf-8");
|
|
48
|
+
const tree = (0, import_parser.parse)(code, {
|
|
49
|
+
allowImportExportEverywhere: true,
|
|
50
|
+
allowAwaitOutsideFunction: true,
|
|
51
|
+
allowReturnOutsideFunction: true,
|
|
52
|
+
allowSuperOutsideMethod: true,
|
|
53
|
+
allowUndeclaredExports: true,
|
|
54
|
+
attachComment: true,
|
|
55
|
+
errorRecovery: false,
|
|
56
|
+
sourceType: "unambiguous",
|
|
57
|
+
sourceFilename: file,
|
|
58
|
+
startLine: 1,
|
|
59
|
+
startColumn: 0,
|
|
60
|
+
plugins: ["typescript"],
|
|
61
|
+
strictMode: false,
|
|
62
|
+
ranges: false,
|
|
63
|
+
tokens: false,
|
|
64
|
+
createParenthesizedExpressions: true
|
|
65
|
+
});
|
|
66
|
+
const codeCoverage = new Array(code.length).fill(0);
|
|
67
|
+
const nodeCoverage = {
|
|
68
|
+
coveredNodes: 0,
|
|
69
|
+
missingNodes: 0,
|
|
70
|
+
ignoredNodes: 0,
|
|
71
|
+
totalNodes: 0,
|
|
72
|
+
coverage: 0
|
|
73
|
+
};
|
|
74
|
+
const setCodeCoverage = (node, coverage, recursive) => {
|
|
75
|
+
if (!node)
|
|
76
|
+
return;
|
|
77
|
+
if (Array.isArray(node)) {
|
|
78
|
+
for (const n of node)
|
|
79
|
+
setCodeCoverage(n, coverage, recursive);
|
|
80
|
+
return;
|
|
81
|
+
}
|
|
82
|
+
if (node.start != null && node.end != null) {
|
|
83
|
+
for (let i = node.start; i < node.end; i++) {
|
|
84
|
+
codeCoverage[i] = coverage;
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
if (coverage == COVERAGE_IGNORED) {
|
|
88
|
+
nodeCoverage.ignoredNodes++;
|
|
89
|
+
} else if (coverage === 0) {
|
|
90
|
+
nodeCoverage.missingNodes++;
|
|
91
|
+
} else if (coverage > 0) {
|
|
92
|
+
nodeCoverage.coveredNodes++;
|
|
93
|
+
}
|
|
94
|
+
if (!recursive)
|
|
95
|
+
return;
|
|
96
|
+
const keys = import_types.VISITOR_KEYS[node.type] || [];
|
|
97
|
+
for (const key of keys) {
|
|
98
|
+
const value = node[key];
|
|
99
|
+
if (Array.isArray(value)) {
|
|
100
|
+
for (const child of value) {
|
|
101
|
+
setCodeCoverage(child, coverage, true);
|
|
102
|
+
}
|
|
103
|
+
} else if (value) {
|
|
104
|
+
setCodeCoverage(value, coverage, true);
|
|
105
|
+
}
|
|
106
|
+
}
|
|
107
|
+
};
|
|
108
|
+
const visitChildren = (node, depth) => {
|
|
109
|
+
const keys = import_types.VISITOR_KEYS[node.type] || [];
|
|
110
|
+
for (const key of keys) {
|
|
111
|
+
const children = node[key];
|
|
112
|
+
if (Array.isArray(children)) {
|
|
113
|
+
for (const child of children) {
|
|
114
|
+
if (child)
|
|
115
|
+
visitNode(child, depth + 1);
|
|
116
|
+
}
|
|
117
|
+
} else if (children) {
|
|
118
|
+
visitNode(children, depth + 1);
|
|
119
|
+
}
|
|
120
|
+
}
|
|
121
|
+
};
|
|
122
|
+
const maybeIgnoreNode = (condition, node, depth) => {
|
|
123
|
+
if (condition) {
|
|
124
|
+
setCodeCoverage(node, COVERAGE_IGNORED, true);
|
|
125
|
+
} else if (node) {
|
|
126
|
+
visitNode(node, depth);
|
|
127
|
+
}
|
|
128
|
+
};
|
|
129
|
+
const visitNode = (node, depth) => {
|
|
130
|
+
log.trace("-".padStart(depth * 2 + 1, " "), node.type, `${node.loc?.start.line}:${node.loc?.start.column}`);
|
|
131
|
+
if ((0, import_types.isFile)(node))
|
|
132
|
+
return visitChildren(node, depth);
|
|
133
|
+
if ((0, import_types.isProgram)(node))
|
|
134
|
+
return visitChildren(node, depth);
|
|
135
|
+
const ignores = [];
|
|
136
|
+
for (const comment of node.leadingComments || []) {
|
|
137
|
+
for (const match of comment.value.matchAll(ignoreRegexp)) {
|
|
138
|
+
ignores.push(match[2]);
|
|
139
|
+
}
|
|
140
|
+
}
|
|
141
|
+
if (ignores.includes("next"))
|
|
142
|
+
return setCodeCoverage(node, COVERAGE_IGNORED, true);
|
|
143
|
+
if ((0, import_types.isTypeScript)(node)) {
|
|
144
|
+
if ((0, import_types.isTSDeclareMethod)(node))
|
|
145
|
+
return setCodeCoverage(node, COVERAGE_SKIPPED, true);
|
|
146
|
+
if ((0, import_types.isTSTypeReference)(node))
|
|
147
|
+
return setCodeCoverage(node, COVERAGE_SKIPPED, true);
|
|
148
|
+
if ((0, import_types.isDeclaration)(node))
|
|
149
|
+
return setCodeCoverage(node, COVERAGE_SKIPPED, true);
|
|
150
|
+
setCodeCoverage(node, COVERAGE_SKIPPED, false);
|
|
151
|
+
return visitChildren(node, depth);
|
|
152
|
+
}
|
|
153
|
+
if ((0, import_types.isExportDeclaration)(node) && node.exportKind === "type") {
|
|
154
|
+
return setCodeCoverage(node, COVERAGE_SKIPPED, true);
|
|
155
|
+
}
|
|
156
|
+
if ((0, import_types.isImportDeclaration)(node) && node.importKind === "type") {
|
|
157
|
+
return setCodeCoverage(node, COVERAGE_SKIPPED, true);
|
|
158
|
+
}
|
|
159
|
+
let coverage = 0;
|
|
160
|
+
if (node.loc) {
|
|
161
|
+
const { line, column } = node.loc.start;
|
|
162
|
+
const c = analyser.coverage(url, line, column);
|
|
163
|
+
if (c == null)
|
|
164
|
+
log.warn(`No coverage for ${node.type} at ${(0, import_log.$p)(file)}:${line}:${column}`);
|
|
165
|
+
else
|
|
166
|
+
coverage = c;
|
|
167
|
+
}
|
|
168
|
+
setCodeCoverage(node, coverage, false);
|
|
169
|
+
if ((0, import_types.isIfStatement)(node)) {
|
|
170
|
+
maybeIgnoreNode(ignores.includes("test"), node.test, depth + 1);
|
|
171
|
+
maybeIgnoreNode(ignores.includes("if"), node.consequent, depth + 1);
|
|
172
|
+
maybeIgnoreNode(ignores.includes("else"), node.alternate, depth + 1);
|
|
173
|
+
return;
|
|
174
|
+
}
|
|
175
|
+
if ((0, import_types.isTryStatement)(node)) {
|
|
176
|
+
maybeIgnoreNode(ignores.includes("try"), node.block, depth + 1);
|
|
177
|
+
maybeIgnoreNode(ignores.includes("catch"), node.handler, depth + 1);
|
|
178
|
+
maybeIgnoreNode(ignores.includes("finally"), node.finalizer, depth + 1);
|
|
179
|
+
return;
|
|
180
|
+
}
|
|
181
|
+
visitChildren(node, depth);
|
|
182
|
+
};
|
|
183
|
+
codeCoverage.fill(COVERAGE_SKIPPED);
|
|
184
|
+
setCodeCoverage(tree.program.directives, 0, true);
|
|
185
|
+
setCodeCoverage(tree.program.body, 0, true);
|
|
186
|
+
nodeCoverage.coveredNodes = 0;
|
|
187
|
+
nodeCoverage.missingNodes = 0;
|
|
188
|
+
nodeCoverage.ignoredNodes = 0;
|
|
189
|
+
visitChildren(tree.program, -1);
|
|
190
|
+
updateNodeCoverageResult(nodeCoverage);
|
|
191
|
+
nodes.coveredNodes += nodeCoverage.coveredNodes;
|
|
192
|
+
nodes.missingNodes += nodeCoverage.missingNodes;
|
|
193
|
+
nodes.ignoredNodes += nodeCoverage.ignoredNodes;
|
|
194
|
+
nodes.totalNodes += nodeCoverage.totalNodes;
|
|
195
|
+
results[file] = { code, codeCoverage, nodeCoverage };
|
|
196
|
+
}
|
|
197
|
+
updateNodeCoverageResult(nodes);
|
|
198
|
+
return { results, nodes };
|
|
199
|
+
}
|
|
200
|
+
function updateNodeCoverageResult(result) {
|
|
201
|
+
const { coveredNodes, missingNodes, ignoredNodes } = result;
|
|
202
|
+
const totalNodes = result.totalNodes = coveredNodes + missingNodes + ignoredNodes;
|
|
203
|
+
if (totalNodes - ignoredNodes) {
|
|
204
|
+
result.coverage = Math.floor(100 * coveredNodes / (totalNodes - ignoredNodes));
|
|
205
|
+
} else {
|
|
206
|
+
result.coverage = 0;
|
|
207
|
+
}
|
|
208
|
+
}
|
|
209
|
+
// Annotate the CommonJS export names for ESM import in node:
|
|
210
|
+
0 && (module.exports = {
|
|
211
|
+
COVERAGE_IGNORED,
|
|
212
|
+
COVERAGE_SKIPPED,
|
|
213
|
+
coverageReport
|
|
214
|
+
});
|
|
215
|
+
//# sourceMappingURL=report.cjs.map
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../../src/plugs/coverage/report.ts"],
|
|
4
|
+
"mappings": "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",
|
|
5
|
+
"names": []
|
|
6
|
+
}
|
|
@@ -0,0 +1,200 @@
|
|
|
1
|
+
// plugs/coverage/report.ts
|
|
2
|
+
import { parse } from "@babel/parser";
|
|
3
|
+
import {
|
|
4
|
+
isDeclaration,
|
|
5
|
+
isExportDeclaration,
|
|
6
|
+
isFile,
|
|
7
|
+
isIfStatement,
|
|
8
|
+
isImportDeclaration,
|
|
9
|
+
isProgram,
|
|
10
|
+
isTryStatement,
|
|
11
|
+
isTSDeclareMethod,
|
|
12
|
+
isTSTypeReference,
|
|
13
|
+
isTypeScript,
|
|
14
|
+
VISITOR_KEYS
|
|
15
|
+
} from "@babel/types";
|
|
16
|
+
import { pathToFileURL } from "node:url";
|
|
17
|
+
import { $p } from "../../log.mjs";
|
|
18
|
+
import { readFile } from "../../utils/asyncfs.mjs";
|
|
19
|
+
var COVERAGE_SKIPPED = -2;
|
|
20
|
+
var COVERAGE_IGNORED = -1;
|
|
21
|
+
var ignoreRegexp = /(coverage|istanbul)\s+ignore\s+(test|if|else|try|catch|finally|next)(\s|$)/g;
|
|
22
|
+
async function coverageReport(analyser, sourceFiles, log) {
|
|
23
|
+
const results = {};
|
|
24
|
+
const nodes = {
|
|
25
|
+
coveredNodes: 0,
|
|
26
|
+
missingNodes: 0,
|
|
27
|
+
ignoredNodes: 0,
|
|
28
|
+
totalNodes: 0,
|
|
29
|
+
coverage: 0
|
|
30
|
+
};
|
|
31
|
+
for (const file of sourceFiles) {
|
|
32
|
+
const url = pathToFileURL(file).toString();
|
|
33
|
+
const code = await readFile(file, "utf-8");
|
|
34
|
+
const tree = parse(code, {
|
|
35
|
+
allowImportExportEverywhere: true,
|
|
36
|
+
allowAwaitOutsideFunction: true,
|
|
37
|
+
allowReturnOutsideFunction: true,
|
|
38
|
+
allowSuperOutsideMethod: true,
|
|
39
|
+
allowUndeclaredExports: true,
|
|
40
|
+
attachComment: true,
|
|
41
|
+
errorRecovery: false,
|
|
42
|
+
sourceType: "unambiguous",
|
|
43
|
+
sourceFilename: file,
|
|
44
|
+
startLine: 1,
|
|
45
|
+
startColumn: 0,
|
|
46
|
+
plugins: ["typescript"],
|
|
47
|
+
strictMode: false,
|
|
48
|
+
ranges: false,
|
|
49
|
+
tokens: false,
|
|
50
|
+
createParenthesizedExpressions: true
|
|
51
|
+
});
|
|
52
|
+
const codeCoverage = new Array(code.length).fill(0);
|
|
53
|
+
const nodeCoverage = {
|
|
54
|
+
coveredNodes: 0,
|
|
55
|
+
missingNodes: 0,
|
|
56
|
+
ignoredNodes: 0,
|
|
57
|
+
totalNodes: 0,
|
|
58
|
+
coverage: 0
|
|
59
|
+
};
|
|
60
|
+
const setCodeCoverage = (node, coverage, recursive) => {
|
|
61
|
+
if (!node)
|
|
62
|
+
return;
|
|
63
|
+
if (Array.isArray(node)) {
|
|
64
|
+
for (const n of node)
|
|
65
|
+
setCodeCoverage(n, coverage, recursive);
|
|
66
|
+
return;
|
|
67
|
+
}
|
|
68
|
+
if (node.start != null && node.end != null) {
|
|
69
|
+
for (let i = node.start; i < node.end; i++) {
|
|
70
|
+
codeCoverage[i] = coverage;
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
if (coverage == COVERAGE_IGNORED) {
|
|
74
|
+
nodeCoverage.ignoredNodes++;
|
|
75
|
+
} else if (coverage === 0) {
|
|
76
|
+
nodeCoverage.missingNodes++;
|
|
77
|
+
} else if (coverage > 0) {
|
|
78
|
+
nodeCoverage.coveredNodes++;
|
|
79
|
+
}
|
|
80
|
+
if (!recursive)
|
|
81
|
+
return;
|
|
82
|
+
const keys = VISITOR_KEYS[node.type] || [];
|
|
83
|
+
for (const key of keys) {
|
|
84
|
+
const value = node[key];
|
|
85
|
+
if (Array.isArray(value)) {
|
|
86
|
+
for (const child of value) {
|
|
87
|
+
setCodeCoverage(child, coverage, true);
|
|
88
|
+
}
|
|
89
|
+
} else if (value) {
|
|
90
|
+
setCodeCoverage(value, coverage, true);
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
};
|
|
94
|
+
const visitChildren = (node, depth) => {
|
|
95
|
+
const keys = VISITOR_KEYS[node.type] || [];
|
|
96
|
+
for (const key of keys) {
|
|
97
|
+
const children = node[key];
|
|
98
|
+
if (Array.isArray(children)) {
|
|
99
|
+
for (const child of children) {
|
|
100
|
+
if (child)
|
|
101
|
+
visitNode(child, depth + 1);
|
|
102
|
+
}
|
|
103
|
+
} else if (children) {
|
|
104
|
+
visitNode(children, depth + 1);
|
|
105
|
+
}
|
|
106
|
+
}
|
|
107
|
+
};
|
|
108
|
+
const maybeIgnoreNode = (condition, node, depth) => {
|
|
109
|
+
if (condition) {
|
|
110
|
+
setCodeCoverage(node, COVERAGE_IGNORED, true);
|
|
111
|
+
} else if (node) {
|
|
112
|
+
visitNode(node, depth);
|
|
113
|
+
}
|
|
114
|
+
};
|
|
115
|
+
const visitNode = (node, depth) => {
|
|
116
|
+
log.trace("-".padStart(depth * 2 + 1, " "), node.type, `${node.loc?.start.line}:${node.loc?.start.column}`);
|
|
117
|
+
if (isFile(node))
|
|
118
|
+
return visitChildren(node, depth);
|
|
119
|
+
if (isProgram(node))
|
|
120
|
+
return visitChildren(node, depth);
|
|
121
|
+
const ignores = [];
|
|
122
|
+
for (const comment of node.leadingComments || []) {
|
|
123
|
+
for (const match of comment.value.matchAll(ignoreRegexp)) {
|
|
124
|
+
ignores.push(match[2]);
|
|
125
|
+
}
|
|
126
|
+
}
|
|
127
|
+
if (ignores.includes("next"))
|
|
128
|
+
return setCodeCoverage(node, COVERAGE_IGNORED, true);
|
|
129
|
+
if (isTypeScript(node)) {
|
|
130
|
+
if (isTSDeclareMethod(node))
|
|
131
|
+
return setCodeCoverage(node, COVERAGE_SKIPPED, true);
|
|
132
|
+
if (isTSTypeReference(node))
|
|
133
|
+
return setCodeCoverage(node, COVERAGE_SKIPPED, true);
|
|
134
|
+
if (isDeclaration(node))
|
|
135
|
+
return setCodeCoverage(node, COVERAGE_SKIPPED, true);
|
|
136
|
+
setCodeCoverage(node, COVERAGE_SKIPPED, false);
|
|
137
|
+
return visitChildren(node, depth);
|
|
138
|
+
}
|
|
139
|
+
if (isExportDeclaration(node) && node.exportKind === "type") {
|
|
140
|
+
return setCodeCoverage(node, COVERAGE_SKIPPED, true);
|
|
141
|
+
}
|
|
142
|
+
if (isImportDeclaration(node) && node.importKind === "type") {
|
|
143
|
+
return setCodeCoverage(node, COVERAGE_SKIPPED, true);
|
|
144
|
+
}
|
|
145
|
+
let coverage = 0;
|
|
146
|
+
if (node.loc) {
|
|
147
|
+
const { line, column } = node.loc.start;
|
|
148
|
+
const c = analyser.coverage(url, line, column);
|
|
149
|
+
if (c == null)
|
|
150
|
+
log.warn(`No coverage for ${node.type} at ${$p(file)}:${line}:${column}`);
|
|
151
|
+
else
|
|
152
|
+
coverage = c;
|
|
153
|
+
}
|
|
154
|
+
setCodeCoverage(node, coverage, false);
|
|
155
|
+
if (isIfStatement(node)) {
|
|
156
|
+
maybeIgnoreNode(ignores.includes("test"), node.test, depth + 1);
|
|
157
|
+
maybeIgnoreNode(ignores.includes("if"), node.consequent, depth + 1);
|
|
158
|
+
maybeIgnoreNode(ignores.includes("else"), node.alternate, depth + 1);
|
|
159
|
+
return;
|
|
160
|
+
}
|
|
161
|
+
if (isTryStatement(node)) {
|
|
162
|
+
maybeIgnoreNode(ignores.includes("try"), node.block, depth + 1);
|
|
163
|
+
maybeIgnoreNode(ignores.includes("catch"), node.handler, depth + 1);
|
|
164
|
+
maybeIgnoreNode(ignores.includes("finally"), node.finalizer, depth + 1);
|
|
165
|
+
return;
|
|
166
|
+
}
|
|
167
|
+
visitChildren(node, depth);
|
|
168
|
+
};
|
|
169
|
+
codeCoverage.fill(COVERAGE_SKIPPED);
|
|
170
|
+
setCodeCoverage(tree.program.directives, 0, true);
|
|
171
|
+
setCodeCoverage(tree.program.body, 0, true);
|
|
172
|
+
nodeCoverage.coveredNodes = 0;
|
|
173
|
+
nodeCoverage.missingNodes = 0;
|
|
174
|
+
nodeCoverage.ignoredNodes = 0;
|
|
175
|
+
visitChildren(tree.program, -1);
|
|
176
|
+
updateNodeCoverageResult(nodeCoverage);
|
|
177
|
+
nodes.coveredNodes += nodeCoverage.coveredNodes;
|
|
178
|
+
nodes.missingNodes += nodeCoverage.missingNodes;
|
|
179
|
+
nodes.ignoredNodes += nodeCoverage.ignoredNodes;
|
|
180
|
+
nodes.totalNodes += nodeCoverage.totalNodes;
|
|
181
|
+
results[file] = { code, codeCoverage, nodeCoverage };
|
|
182
|
+
}
|
|
183
|
+
updateNodeCoverageResult(nodes);
|
|
184
|
+
return { results, nodes };
|
|
185
|
+
}
|
|
186
|
+
function updateNodeCoverageResult(result) {
|
|
187
|
+
const { coveredNodes, missingNodes, ignoredNodes } = result;
|
|
188
|
+
const totalNodes = result.totalNodes = coveredNodes + missingNodes + ignoredNodes;
|
|
189
|
+
if (totalNodes - ignoredNodes) {
|
|
190
|
+
result.coverage = Math.floor(100 * coveredNodes / (totalNodes - ignoredNodes));
|
|
191
|
+
} else {
|
|
192
|
+
result.coverage = 0;
|
|
193
|
+
}
|
|
194
|
+
}
|
|
195
|
+
export {
|
|
196
|
+
COVERAGE_IGNORED,
|
|
197
|
+
COVERAGE_SKIPPED,
|
|
198
|
+
coverageReport
|
|
199
|
+
};
|
|
200
|
+
//# sourceMappingURL=report.mjs.map
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../../src/plugs/coverage/report.ts"],
|
|
4
|
+
"mappings": "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",
|
|
5
|
+
"names": []
|
|
6
|
+
}
|