@gnuechtel/shared-coverage 2.0.0-13785541676 → 2.0.0-13788467110
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/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@gnuechtel/shared-coverage",
|
|
3
|
-
"version": "2.0.0-
|
|
3
|
+
"version": "2.0.0-13788467110",
|
|
4
4
|
"description": "Shared coverage functions for gnuechtel projects",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"repository": {
|
|
@@ -11,7 +11,7 @@
|
|
|
11
11
|
"dependencies": {
|
|
12
12
|
"tslib": "^2.3.0",
|
|
13
13
|
"uuid": "^9.0.0",
|
|
14
|
-
"@gnuechtel/shared-util": "2.0.0-
|
|
14
|
+
"@gnuechtel/shared-util": "2.0.0-13788467110"
|
|
15
15
|
},
|
|
16
16
|
"peerDependencies": {
|
|
17
17
|
"nyc": "^17.1.0",
|
|
@@ -46,6 +46,11 @@ function createIstanbulCoverageReports() {
|
|
|
46
46
|
const nycrcJson = fs.existsSync(nycrcJsonFilename) ? JSON.parse(fs.readFileSync(nycrcJsonFilename, 'utf8')) : {};
|
|
47
47
|
const nycOptions = Object.assign({}, defaultNycOptions, nycrcJson);
|
|
48
48
|
const NYC = loadNycConstructor();
|
|
49
|
+
// Patch coverage files to fill source map gaps before nyc processes them.
|
|
50
|
+
// Vite's JSX transpiler (OXC) omits source map entries for closing bracket positions,
|
|
51
|
+
// which causes istanbul-lib-source-maps to drop files when it can't resolve statement
|
|
52
|
+
// end positions. Filling those gaps allows the remapping to succeed.
|
|
53
|
+
patchCoverageFilesForSourceMapGaps(path.join(rootDirectory, '.nyc_output'));
|
|
49
54
|
console.log('Creating istanbul coverage reports: %o', nycOptions);
|
|
50
55
|
// Use nyc to convert Istanbul coverage JSON to different output formats
|
|
51
56
|
const nyc = new NYC(nycOptions);
|
|
@@ -53,6 +58,141 @@ function createIstanbulCoverageReports() {
|
|
|
53
58
|
console.log('Coverage reports created');
|
|
54
59
|
});
|
|
55
60
|
}
|
|
61
|
+
/**
|
|
62
|
+
* Patches coverage JSON files in the nyc output directory to fill gaps in inputSourceMap
|
|
63
|
+
* between consecutively mapped lines. This is necessary when the JSX transpiler (OXC/Rolldown)
|
|
64
|
+
* omits source map entries for closing tag positions, which would otherwise cause
|
|
65
|
+
* istanbul-lib-source-maps to drop entire files from the coverage report.
|
|
66
|
+
*/
|
|
67
|
+
function patchCoverageFilesForSourceMapGaps(nycOutputDir) {
|
|
68
|
+
if (!fs.existsSync(nycOutputDir))
|
|
69
|
+
return;
|
|
70
|
+
let TraceMap;
|
|
71
|
+
let eachMapping;
|
|
72
|
+
let GenMapping;
|
|
73
|
+
let addMappingFn;
|
|
74
|
+
let toEncodedMapFn;
|
|
75
|
+
try {
|
|
76
|
+
// These packages are transitively available via istanbul-lib-source-maps
|
|
77
|
+
// eslint-disable-next-line @typescript-eslint/no-var-requires
|
|
78
|
+
const traceMapping = require('@jridgewell/trace-mapping');
|
|
79
|
+
// eslint-disable-next-line @typescript-eslint/no-var-requires
|
|
80
|
+
const genMapping = require('@jridgewell/gen-mapping');
|
|
81
|
+
TraceMap = traceMapping.TraceMap;
|
|
82
|
+
eachMapping = traceMapping.eachMapping;
|
|
83
|
+
GenMapping = genMapping.GenMapping;
|
|
84
|
+
addMappingFn = genMapping.addMapping;
|
|
85
|
+
toEncodedMapFn = genMapping.toEncodedMap;
|
|
86
|
+
}
|
|
87
|
+
catch (_a) {
|
|
88
|
+
return; // packages unavailable, skip patching
|
|
89
|
+
}
|
|
90
|
+
const files = fs
|
|
91
|
+
.readdirSync(nycOutputDir)
|
|
92
|
+
.filter((f) => f.endsWith('.json') && !fs.statSync(path.join(nycOutputDir, f)).isDirectory());
|
|
93
|
+
for (const file of files) {
|
|
94
|
+
const filePath = path.join(nycOutputDir, file);
|
|
95
|
+
let coverageData;
|
|
96
|
+
try {
|
|
97
|
+
coverageData = JSON.parse(fs.readFileSync(filePath, 'utf8'));
|
|
98
|
+
}
|
|
99
|
+
catch (_b) {
|
|
100
|
+
continue;
|
|
101
|
+
}
|
|
102
|
+
let changed = false;
|
|
103
|
+
for (const entry of Object.values(coverageData)) {
|
|
104
|
+
if (!entry || typeof entry !== 'object' || !entry.inputSourceMap)
|
|
105
|
+
continue;
|
|
106
|
+
const patched = fillSourceMapGaps(entry, TraceMap, eachMapping, GenMapping, addMappingFn, toEncodedMapFn);
|
|
107
|
+
if (patched) {
|
|
108
|
+
entry.inputSourceMap = patched;
|
|
109
|
+
changed = true;
|
|
110
|
+
}
|
|
111
|
+
}
|
|
112
|
+
if (changed) {
|
|
113
|
+
fs.writeFileSync(filePath, JSON.stringify(coverageData), 'utf8');
|
|
114
|
+
}
|
|
115
|
+
}
|
|
116
|
+
}
|
|
117
|
+
function fillSourceMapGaps(entry, TraceMap, eachMapping, GenMapping, addMappingFn, toEncodedMapFn) {
|
|
118
|
+
var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m;
|
|
119
|
+
const sm = entry.inputSourceMap;
|
|
120
|
+
if (!sm)
|
|
121
|
+
return null;
|
|
122
|
+
const traceMap = new TraceMap(sm);
|
|
123
|
+
// Track the last known original position for each mapped generated line
|
|
124
|
+
const lastMappingByLine = new Map();
|
|
125
|
+
eachMapping(traceMap, (m) => {
|
|
126
|
+
if (m.source !== null && m.originalLine !== null && m.originalColumn !== null) {
|
|
127
|
+
const current = lastMappingByLine.get(m.generatedLine);
|
|
128
|
+
if (!current || m.generatedColumn > current.col) {
|
|
129
|
+
lastMappingByLine.set(m.generatedLine, { line: m.originalLine, col: m.originalColumn, source: m.source });
|
|
130
|
+
}
|
|
131
|
+
}
|
|
132
|
+
});
|
|
133
|
+
if (lastMappingByLine.size === 0)
|
|
134
|
+
return null;
|
|
135
|
+
const sortedMappedLines = [...lastMappingByLine.keys()].sort((a, b) => a - b);
|
|
136
|
+
const lastMappedLine = sortedMappedLines[sortedMappedLines.length - 1];
|
|
137
|
+
// Collect all end lines referenced by statements, functions, and branches
|
|
138
|
+
const neededLines = new Set();
|
|
139
|
+
for (const loc of Object.values((_a = entry.statementMap) !== null && _a !== void 0 ? _a : {})) {
|
|
140
|
+
if ((_b = loc.end) === null || _b === void 0 ? void 0 : _b.line)
|
|
141
|
+
neededLines.add(loc.end.line);
|
|
142
|
+
}
|
|
143
|
+
for (const fn of Object.values((_c = entry.fnMap) !== null && _c !== void 0 ? _c : {})) {
|
|
144
|
+
if ((_e = (_d = fn.loc) === null || _d === void 0 ? void 0 : _d.end) === null || _e === void 0 ? void 0 : _e.line)
|
|
145
|
+
neededLines.add(fn.loc.end.line);
|
|
146
|
+
if ((_g = (_f = fn.decl) === null || _f === void 0 ? void 0 : _f.end) === null || _g === void 0 ? void 0 : _g.line)
|
|
147
|
+
neededLines.add(fn.decl.end.line);
|
|
148
|
+
}
|
|
149
|
+
for (const branch of Object.values((_h = entry.branchMap) !== null && _h !== void 0 ? _h : {})) {
|
|
150
|
+
if ((_k = (_j = branch.loc) === null || _j === void 0 ? void 0 : _j.end) === null || _k === void 0 ? void 0 : _k.line)
|
|
151
|
+
neededLines.add(branch.loc.end.line);
|
|
152
|
+
for (const loc of (_l = branch.locations) !== null && _l !== void 0 ? _l : []) {
|
|
153
|
+
if ((_m = loc.end) === null || _m === void 0 ? void 0 : _m.line)
|
|
154
|
+
neededLines.add(loc.end.line);
|
|
155
|
+
}
|
|
156
|
+
}
|
|
157
|
+
// Only fill gaps for lines that are between two consecutive mapped lines (not after the last).
|
|
158
|
+
// Lines after the last mapped line are typically transpiler-injected code (e.g. React Fast Refresh)
|
|
159
|
+
// that should remain unmapped so they are excluded from the remapped coverage.
|
|
160
|
+
const unmappedNeeded = [...neededLines].filter((l) => !lastMappingByLine.has(l) && l < lastMappedLine);
|
|
161
|
+
if (unmappedNeeded.length === 0)
|
|
162
|
+
return null;
|
|
163
|
+
// Build a new source map with existing mappings plus gap-filler entries
|
|
164
|
+
const gen = new GenMapping();
|
|
165
|
+
eachMapping(traceMap, (m) => {
|
|
166
|
+
var _a;
|
|
167
|
+
if (m.source !== null && m.originalLine !== null && m.originalColumn !== null) {
|
|
168
|
+
addMappingFn(gen, {
|
|
169
|
+
generated: { line: m.generatedLine, column: m.generatedColumn },
|
|
170
|
+
source: m.source,
|
|
171
|
+
original: { line: m.originalLine, column: m.originalColumn },
|
|
172
|
+
name: (_a = m.name) !== null && _a !== void 0 ? _a : undefined,
|
|
173
|
+
});
|
|
174
|
+
}
|
|
175
|
+
});
|
|
176
|
+
for (const neededLine of unmappedNeeded) {
|
|
177
|
+
// Find the nearest preceding mapped line
|
|
178
|
+
let lastMapLine = null;
|
|
179
|
+
for (const ml of sortedMappedLines) {
|
|
180
|
+
if (ml < neededLine)
|
|
181
|
+
lastMapLine = ml;
|
|
182
|
+
else
|
|
183
|
+
break;
|
|
184
|
+
}
|
|
185
|
+
if (lastMapLine === null)
|
|
186
|
+
continue;
|
|
187
|
+
const lastMap = lastMappingByLine.get(lastMapLine);
|
|
188
|
+
addMappingFn(gen, {
|
|
189
|
+
generated: { line: neededLine, column: 0 },
|
|
190
|
+
source: lastMap.source,
|
|
191
|
+
original: { line: lastMap.line, column: lastMap.col },
|
|
192
|
+
});
|
|
193
|
+
}
|
|
194
|
+
return toEncodedMapFn(gen);
|
|
195
|
+
}
|
|
56
196
|
function loadNycConstructor() {
|
|
57
197
|
try {
|
|
58
198
|
// eslint-disable-next-line @typescript-eslint/no-var-requires
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"create-istanbul-coverage-reports.js","sourceRoot":"","sources":["../../../../../libs/shared-coverage/src/lib/create-istanbul-coverage-reports.ts"],"names":[],"mappings":";;AAoCA,
|
|
1
|
+
{"version":3,"file":"create-istanbul-coverage-reports.js","sourceRoot":"","sources":["../../../../../libs/shared-coverage/src/lib/create-istanbul-coverage-reports.ts"],"names":[],"mappings":"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"}
|