@vyuhlabs/dxkit 2.3.0 → 2.3.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/CHANGELOG.md +138 -0
- package/dist/analyzers/bom/index.d.ts.map +1 -1
- package/dist/analyzers/bom/index.js +78 -2
- package/dist/analyzers/bom/index.js.map +1 -1
- package/dist/analyzers/bom/pm-signals.d.ts +63 -0
- package/dist/analyzers/bom/pm-signals.d.ts.map +1 -0
- package/dist/analyzers/bom/pm-signals.js +200 -0
- package/dist/analyzers/bom/pm-signals.js.map +1 -0
- package/dist/analyzers/tools/tool-registry.d.ts +10 -7
- package/dist/analyzers/tools/tool-registry.d.ts.map +1 -1
- package/dist/analyzers/tools/tool-registry.js +63 -32
- package/dist/analyzers/tools/tool-registry.js.map +1 -1
- package/dist/analyzers/xlsx/bom.d.ts +29 -18
- package/dist/analyzers/xlsx/bom.d.ts.map +1 -1
- package/dist/analyzers/xlsx/bom.js +386 -71
- package/dist/analyzers/xlsx/bom.js.map +1 -1
- package/dist/tools-cli.d.ts.map +1 -1
- package/dist/tools-cli.js +10 -4
- package/dist/tools-cli.js.map +1 -1
- package/package.json +1 -1
|
@@ -1,22 +1,35 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
/**
|
|
3
|
-
* XLSX converter — bom report.
|
|
3
|
+
* XLSX converter — bom report (2.3.2 PM-grade restructure).
|
|
4
4
|
*
|
|
5
|
-
*
|
|
6
|
-
* file is a drop-in replacement for the customer's hand-built sheet,
|
|
7
|
-
* but cols 11/12/13 are now mechanically populated from the joined
|
|
8
|
-
* dep-vuln data:
|
|
9
|
-
* - col 11 "Criticality of usage of this version" — max severity
|
|
10
|
-
* across the package's advisories ("Critical (3 vulns)") or
|
|
11
|
-
* blank when no known vulns.
|
|
12
|
-
* - col 12 "Vulnerability Issues" — semicolon-joined advisory list
|
|
13
|
-
* ("GHSA-XXXX: title; CVE-YYYY: title; ..."). Truncated per
|
|
14
|
-
* advisory to keep the cell readable.
|
|
15
|
-
* - col 13 "Resolution" — the bom entry's `upgradeAdvice` (Tier-1
|
|
16
|
-
* "PROPOSAL: Upgrade to ..." or "No fix available — ...").
|
|
5
|
+
* Produces a 4-sheet workbook tuned for a PM / security reviewer:
|
|
17
6
|
*
|
|
18
|
-
*
|
|
19
|
-
*
|
|
7
|
+
* 1. `Executive Summary` — KV grid on one screen: totals, severity
|
|
8
|
+
* breakdown, top upgrade, license-class counts, staleness counts,
|
|
9
|
+
* tool provenance, analysis time.
|
|
10
|
+
*
|
|
11
|
+
* 2. `Triage` — top 10 findings ranked by composite riskScore, with
|
|
12
|
+
* PM-friendly columns (Priority / Risk / Severity / KEV / Reach /
|
|
13
|
+
* Package@Version / Advisory / CVSS / EPSS / Upgrade to / Effort /
|
|
14
|
+
* Rationale). Sort key is `riskScore desc`; ties resolve by
|
|
15
|
+
* severity then package name. The list shown here is the same
|
|
16
|
+
* one the markdown's "This Week's Triage" section surfaces, so
|
|
17
|
+
* markdown + xlsx tell the same story.
|
|
18
|
+
*
|
|
19
|
+
* 3. `Inventory` — legacy 15-col customer-format sheet with 4 columns
|
|
20
|
+
* appended (cols 16–19): Risk / KEV / Reachable / EPSS. Sorting
|
|
21
|
+
* by col 16 desc gives the same triage order as sheet 2; the
|
|
22
|
+
* legacy cols 1–15 stay byte-identical to the pre-2.3.2 format
|
|
23
|
+
* for reviewers who have hand-built dashboards on specific cells.
|
|
24
|
+
*
|
|
25
|
+
* 4. `License Breakdown` — pivot: license type × count × risk class
|
|
26
|
+
* × sample packages. Lets a PM filter for "copyleft-strong" or
|
|
27
|
+
* "unknown" licenses without eyeballing the full inventory.
|
|
28
|
+
*
|
|
29
|
+
* All derivations (license class, staleness tier, effort estimate)
|
|
30
|
+
* live in `src/analyzers/bom/pm-signals.ts` so the markdown renderer
|
|
31
|
+
* shares the same classification logic — PM sees consistent labels
|
|
32
|
+
* regardless of which report surface they're reading.
|
|
20
33
|
*/
|
|
21
34
|
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
22
35
|
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
@@ -24,17 +37,46 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
24
37
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
25
38
|
exports.toBomXlsx = toBomXlsx;
|
|
26
39
|
const exceljs_1 = __importDefault(require("exceljs"));
|
|
40
|
+
const pm_signals_1 = require("../bom/pm-signals");
|
|
27
41
|
const licenses_1 = require("./licenses");
|
|
28
|
-
/** Excel's hard per-cell character limit.
|
|
29
|
-
* (e.g. octokit ReDoS write-ups) blow past this when concatenated
|
|
30
|
-
* across 5+ vulns on the same package. */
|
|
42
|
+
/** Excel's hard per-cell character limit. */
|
|
31
43
|
const EXCEL_CELL_MAX = 32767;
|
|
32
|
-
/** Per-advisory truncation in
|
|
33
|
-
* and well under the per-cell limit even on packages with 10+ vulns. */
|
|
44
|
+
/** Per-advisory truncation in the legacy "Vulnerability Issues" cell. */
|
|
34
45
|
const ADVISORY_SUMMARY_MAX = 200;
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
46
|
+
const SEV_RANK = {
|
|
47
|
+
critical: 0,
|
|
48
|
+
high: 1,
|
|
49
|
+
medium: 2,
|
|
50
|
+
low: 3,
|
|
51
|
+
};
|
|
52
|
+
const SEV_LABEL = {
|
|
53
|
+
critical: 'Critical',
|
|
54
|
+
high: 'High',
|
|
55
|
+
medium: 'Medium',
|
|
56
|
+
low: 'Low',
|
|
57
|
+
};
|
|
58
|
+
const LICENSE_CLASS_LABEL = {
|
|
59
|
+
permissive: 'Permissive',
|
|
60
|
+
'copyleft-weak': 'Copyleft (weak)',
|
|
61
|
+
'copyleft-strong': 'Copyleft (strong)',
|
|
62
|
+
proprietary: 'Proprietary',
|
|
63
|
+
unknown: 'Unknown',
|
|
64
|
+
};
|
|
65
|
+
const STALENESS_LABEL = {
|
|
66
|
+
fresh: 'Fresh (< 1y)',
|
|
67
|
+
aging: 'Aging (1–3y)',
|
|
68
|
+
stale: 'Stale (≥ 3y)',
|
|
69
|
+
unknown: 'Unknown',
|
|
70
|
+
};
|
|
71
|
+
const EFFORT_LABEL = {
|
|
72
|
+
trivial: 'Trivial (patch bump)',
|
|
73
|
+
moderate: 'Moderate (minor bump)',
|
|
74
|
+
major: 'Major (breaking)',
|
|
75
|
+
blocked: 'Blocked (no fix)',
|
|
76
|
+
};
|
|
77
|
+
/** XML 1.0 forbids most C0 control chars; Excel refuses to open a sheet
|
|
78
|
+
* containing them. Same scrub as licenses.ts, inlined here so the xlsx
|
|
79
|
+
* write boundary owns the rule. */
|
|
38
80
|
function xlsxSafe(v) {
|
|
39
81
|
if (!v)
|
|
40
82
|
return '';
|
|
@@ -51,54 +93,266 @@ function xlsxSafe(v) {
|
|
|
51
93
|
}
|
|
52
94
|
return s;
|
|
53
95
|
}
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
96
|
+
function pct(n) {
|
|
97
|
+
return typeof n === 'number' ? `${(n * 100).toFixed(2)}%` : '—';
|
|
98
|
+
}
|
|
99
|
+
function maxRiskAcrossVulns(e) {
|
|
100
|
+
let best = -1;
|
|
101
|
+
for (const v of e.vulns) {
|
|
102
|
+
if (typeof v.riskScore === 'number' && v.riskScore > best)
|
|
103
|
+
best = v.riskScore;
|
|
104
|
+
}
|
|
105
|
+
return best;
|
|
106
|
+
}
|
|
107
|
+
function maxCvssAcrossVulns(e) {
|
|
108
|
+
let best = -1;
|
|
109
|
+
for (const v of e.vulns) {
|
|
110
|
+
if (typeof v.cvssScore === 'number' && v.cvssScore > best)
|
|
111
|
+
best = v.cvssScore;
|
|
112
|
+
}
|
|
113
|
+
return best;
|
|
114
|
+
}
|
|
115
|
+
function maxEpssAcrossVulns(e) {
|
|
116
|
+
let best = -1;
|
|
117
|
+
for (const v of e.vulns) {
|
|
118
|
+
if (typeof v.epssScore === 'number' && v.epssScore > best)
|
|
119
|
+
best = v.epssScore;
|
|
120
|
+
}
|
|
121
|
+
return best;
|
|
122
|
+
}
|
|
123
|
+
function anyKev(e) {
|
|
124
|
+
return e.vulns.some((v) => v.kev === true);
|
|
125
|
+
}
|
|
126
|
+
function anyReachable(e) {
|
|
127
|
+
let sawTrue = false;
|
|
128
|
+
let sawFalse = false;
|
|
129
|
+
for (const v of e.vulns) {
|
|
130
|
+
if (v.reachable === true)
|
|
131
|
+
sawTrue = true;
|
|
132
|
+
else if (v.reachable === false)
|
|
133
|
+
sawFalse = true;
|
|
134
|
+
}
|
|
135
|
+
if (sawTrue)
|
|
136
|
+
return 'yes';
|
|
137
|
+
if (sawFalse)
|
|
138
|
+
return 'no';
|
|
139
|
+
return 'unknown';
|
|
140
|
+
}
|
|
60
141
|
/**
|
|
61
|
-
* Render a `BomReport` as
|
|
62
|
-
* bytes. Sort matches the licenses converter (alphabetical by package)
|
|
63
|
-
* for diff-stable output across runs.
|
|
142
|
+
* Render a `BomReport` as a multi-sheet XLSX workbook.
|
|
64
143
|
*/
|
|
65
144
|
async function toBomXlsx(report) {
|
|
66
145
|
const wb = new exceljs_1.default.Workbook();
|
|
67
146
|
wb.creator = 'vyuh-dxkit';
|
|
68
147
|
wb.created = new Date(report.analyzedAt);
|
|
69
|
-
|
|
70
|
-
|
|
148
|
+
writeExecutiveSummary(wb, report);
|
|
149
|
+
writeTriage(wb, report);
|
|
150
|
+
writeInventory(wb, report);
|
|
151
|
+
writeLicenseBreakdown(wb, report);
|
|
152
|
+
const buf = await wb.xlsx.writeBuffer();
|
|
153
|
+
return Buffer.from(buf);
|
|
154
|
+
}
|
|
155
|
+
// ─── Sheet 1: Executive Summary ─────────────────────────────────────────────
|
|
156
|
+
function writeExecutiveSummary(wb, report) {
|
|
157
|
+
const ws = wb.addWorksheet('Executive Summary');
|
|
158
|
+
ws.columns = [
|
|
159
|
+
{ header: '', key: 'label', width: 42 },
|
|
160
|
+
{ header: '', key: 'value', width: 60 },
|
|
161
|
+
];
|
|
162
|
+
const s = report.summary;
|
|
163
|
+
const now = new Date();
|
|
164
|
+
// Top-line identity
|
|
165
|
+
ws.addRow(['Repository', report.repo]);
|
|
166
|
+
ws.addRow(['Branch', `${report.branch} (${report.commitSha})`]);
|
|
167
|
+
ws.addRow(['Scan date', report.analyzedAt.slice(0, 10)]);
|
|
168
|
+
ws.addRow([
|
|
169
|
+
'Scope',
|
|
170
|
+
s.filter === 'top-level'
|
|
171
|
+
? `Top-level packages only (${s.totalPackages} of ${s.unfilteredTotalPackages} installed)`
|
|
172
|
+
: `All installed packages (${s.totalPackages})`,
|
|
173
|
+
]);
|
|
174
|
+
if (s.projectRoots.length > 1) {
|
|
175
|
+
ws.addRow(['Project roots', `${s.projectRoots.length} — ${s.projectRoots.join(', ')}`]);
|
|
176
|
+
}
|
|
177
|
+
ws.addRow([]);
|
|
178
|
+
// Risk posture
|
|
179
|
+
ws.addRow(['Risk posture', '']).font = { bold: true };
|
|
180
|
+
ws.addRow(['Vulnerable packages', `${s.vulnerablePackages} (of ${s.totalPackages})`]);
|
|
181
|
+
ws.addRow(['Total advisories', `${s.totalAdvisories}`]);
|
|
182
|
+
ws.addRow([
|
|
183
|
+
'Severity breakdown (worst-of-package)',
|
|
184
|
+
`Critical ${s.bySeverity.critical} · High ${s.bySeverity.high} · Medium ${s.bySeverity.medium} · Low ${s.bySeverity.low}`,
|
|
185
|
+
]);
|
|
186
|
+
// Highest-risk advisory + top upgrade
|
|
187
|
+
const triage = buildTriageRows(report);
|
|
188
|
+
if (triage.length > 0) {
|
|
189
|
+
const top = triage[0];
|
|
190
|
+
ws.addRow([
|
|
191
|
+
'Top ship-blocker',
|
|
192
|
+
`${top.packageAtVersion} — ${top.advisoryId} (Risk ${top.risk.toFixed(0)})`,
|
|
193
|
+
]);
|
|
194
|
+
}
|
|
195
|
+
else {
|
|
196
|
+
ws.addRow(['Top ship-blocker', 'None — no advisory crossed the moderate-risk threshold']);
|
|
197
|
+
}
|
|
198
|
+
// byTopLevelDep: the single upgrade with the biggest blast-radius win
|
|
199
|
+
const rollupEntries = Object.entries(s.byTopLevelDep).sort((a, b) => SEV_RANK[a[1].maxSeverity] - SEV_RANK[b[1].maxSeverity] ||
|
|
200
|
+
b[1].advisoryCount - a[1].advisoryCount);
|
|
201
|
+
if (rollupEntries.length > 0) {
|
|
202
|
+
const [name, r] = rollupEntries[0];
|
|
203
|
+
ws.addRow([
|
|
204
|
+
'Highest-leverage upgrade',
|
|
205
|
+
`${name} — resolves up to ${r.advisoryCount} transitive advisories (worst ${SEV_LABEL[r.maxSeverity]})`,
|
|
206
|
+
]);
|
|
207
|
+
}
|
|
208
|
+
ws.addRow([]);
|
|
209
|
+
// License risk
|
|
210
|
+
ws.addRow(['License risk', '']).font = { bold: true };
|
|
211
|
+
const licBuckets = new Map();
|
|
212
|
+
for (const e of report.entries) {
|
|
213
|
+
const c = (0, pm_signals_1.licenseClass)(e.licenseType);
|
|
214
|
+
licBuckets.set(c, (licBuckets.get(c) ?? 0) + 1);
|
|
215
|
+
}
|
|
216
|
+
for (const c of [
|
|
217
|
+
'permissive',
|
|
218
|
+
'copyleft-weak',
|
|
219
|
+
'copyleft-strong',
|
|
220
|
+
'proprietary',
|
|
221
|
+
'unknown',
|
|
222
|
+
]) {
|
|
223
|
+
ws.addRow([LICENSE_CLASS_LABEL[c], licBuckets.get(c) ?? 0]);
|
|
224
|
+
}
|
|
225
|
+
ws.addRow([]);
|
|
226
|
+
// Staleness
|
|
227
|
+
ws.addRow(['Staleness', '']).font = { bold: true };
|
|
228
|
+
const staleBuckets = new Map();
|
|
229
|
+
for (const e of report.entries) {
|
|
230
|
+
const t = (0, pm_signals_1.stalenessTier)(e.releaseDate, now);
|
|
231
|
+
staleBuckets.set(t, (staleBuckets.get(t) ?? 0) + 1);
|
|
232
|
+
}
|
|
233
|
+
for (const t of ['fresh', 'aging', 'stale', 'unknown']) {
|
|
234
|
+
ws.addRow([STALENESS_LABEL[t], staleBuckets.get(t) ?? 0]);
|
|
235
|
+
}
|
|
236
|
+
ws.addRow([]);
|
|
237
|
+
// Tools + provenance
|
|
238
|
+
ws.addRow(['Tools used', report.toolsUsed.join(', ') || '(none)']);
|
|
239
|
+
if (report.toolsUnavailable.length > 0) {
|
|
240
|
+
ws.addRow(['Tools unavailable', report.toolsUnavailable.join(', ')]);
|
|
241
|
+
}
|
|
242
|
+
ws.addRow(['Schema version', report.schemaVersion]);
|
|
243
|
+
// Bold the label column
|
|
244
|
+
for (let i = 1; i <= ws.rowCount; i++) {
|
|
245
|
+
const cell = ws.getRow(i).getCell(1);
|
|
246
|
+
if (!cell.font?.bold)
|
|
247
|
+
cell.font = { bold: true };
|
|
248
|
+
}
|
|
249
|
+
}
|
|
250
|
+
function buildTriageRows(report, limit = 10, minRisk = 15) {
|
|
251
|
+
const flat = [];
|
|
252
|
+
for (const e of report.entries) {
|
|
253
|
+
if (e.vulns.length === 0)
|
|
254
|
+
continue;
|
|
255
|
+
const effort = (0, pm_signals_1.effortEstimate)(e);
|
|
256
|
+
for (const v of e.vulns) {
|
|
257
|
+
if (typeof v.riskScore !== 'number' || v.riskScore < minRisk)
|
|
258
|
+
continue;
|
|
259
|
+
const rationale = buildRationale(v);
|
|
260
|
+
flat.push({
|
|
261
|
+
risk: v.riskScore,
|
|
262
|
+
severity: v.severity,
|
|
263
|
+
kev: v.kev === true,
|
|
264
|
+
reachable: v.reachable === true ? 'yes' : v.reachable === false ? 'no' : 'unknown',
|
|
265
|
+
packageAtVersion: `${e.package}@${e.version}`,
|
|
266
|
+
advisoryId: v.id,
|
|
267
|
+
cvss: v.cvssScore,
|
|
268
|
+
epss: v.epssScore,
|
|
269
|
+
fix: v.fixedVersion ?? e.upgradeAdvice.replace(/^PROPOSAL:\s*/, '') ?? undefined,
|
|
270
|
+
effort,
|
|
271
|
+
rationale,
|
|
272
|
+
});
|
|
273
|
+
}
|
|
274
|
+
}
|
|
275
|
+
flat.sort((a, b) => b.risk - a.risk ||
|
|
276
|
+
SEV_RANK[a.severity] - SEV_RANK[b.severity] ||
|
|
277
|
+
a.packageAtVersion.localeCompare(b.packageAtVersion));
|
|
278
|
+
return flat.slice(0, limit);
|
|
279
|
+
}
|
|
280
|
+
function buildRationale(v) {
|
|
281
|
+
const parts = [];
|
|
282
|
+
if (v.kev)
|
|
283
|
+
parts.push('KEV');
|
|
284
|
+
if (v.reachable === true)
|
|
285
|
+
parts.push('reachable');
|
|
286
|
+
if (v.reachable === false)
|
|
287
|
+
parts.push('not reachable');
|
|
288
|
+
if (typeof v.cvssScore === 'number')
|
|
289
|
+
parts.push(`CVSS ${v.cvssScore.toFixed(1)}`);
|
|
290
|
+
if (typeof v.epssScore === 'number' && v.epssScore >= 0.01) {
|
|
291
|
+
parts.push(`EPSS ${(v.epssScore * 100).toFixed(1)}%`);
|
|
292
|
+
}
|
|
293
|
+
return parts.length > 0 ? parts.join(', ') : '—';
|
|
294
|
+
}
|
|
295
|
+
function writeTriage(wb, report) {
|
|
296
|
+
const ws = wb.addWorksheet('Triage');
|
|
297
|
+
ws.columns = [
|
|
298
|
+
{ header: 'Priority', key: 'priority', width: 10 },
|
|
299
|
+
{ header: 'Risk', key: 'risk', width: 8 },
|
|
300
|
+
{ header: 'Severity', key: 'severity', width: 12 },
|
|
301
|
+
{ header: 'KEV', key: 'kev', width: 6 },
|
|
302
|
+
{ header: 'Reachable', key: 'reachable', width: 12 },
|
|
303
|
+
{ header: 'Package@Version', key: 'pkg', width: 40 },
|
|
304
|
+
{ header: 'Advisory', key: 'id', width: 24 },
|
|
305
|
+
{ header: 'CVSS', key: 'cvss', width: 8 },
|
|
306
|
+
{ header: 'EPSS', key: 'epss', width: 10 },
|
|
307
|
+
{ header: 'Upgrade to', key: 'fix', width: 14 },
|
|
308
|
+
{ header: 'Effort', key: 'effort', width: 22 },
|
|
309
|
+
{ header: 'Rationale', key: 'rationale', width: 42 },
|
|
310
|
+
];
|
|
311
|
+
ws.getRow(1).font = { bold: true };
|
|
312
|
+
const triage = buildTriageRows(report);
|
|
313
|
+
triage.forEach((t, i) => {
|
|
314
|
+
ws.addRow({
|
|
315
|
+
priority: i + 1,
|
|
316
|
+
risk: Math.round(t.risk),
|
|
317
|
+
severity: SEV_LABEL[t.severity],
|
|
318
|
+
kev: t.kev ? '⚠' : '',
|
|
319
|
+
reachable: t.reachable,
|
|
320
|
+
pkg: t.packageAtVersion,
|
|
321
|
+
id: t.advisoryId,
|
|
322
|
+
cvss: typeof t.cvss === 'number' ? t.cvss.toFixed(1) : '—',
|
|
323
|
+
epss: pct(t.epss),
|
|
324
|
+
fix: t.fix ? xlsxSafe(t.fix) : '—',
|
|
325
|
+
effort: EFFORT_LABEL[t.effort],
|
|
326
|
+
rationale: t.rationale,
|
|
327
|
+
});
|
|
328
|
+
});
|
|
329
|
+
if (triage.length === 0) {
|
|
330
|
+
ws.addRow({
|
|
331
|
+
priority: '—',
|
|
332
|
+
rationale: 'No advisories crossed the moderate-risk threshold (Risk ≥ 15).',
|
|
333
|
+
});
|
|
334
|
+
}
|
|
335
|
+
}
|
|
336
|
+
// ─── Sheet 3: Inventory (legacy 15 + 4 appended) ────────────────────────────
|
|
337
|
+
function writeInventory(wb, report) {
|
|
338
|
+
const ws = wb.addWorksheet('Inventory');
|
|
339
|
+
// Append the 4 PM-signal columns to the legacy header.
|
|
340
|
+
const header = [...licenses_1.BOM_COLUMNS, 'Risk', 'KEV', 'Reachable', 'EPSS'];
|
|
341
|
+
ws.addRow(header);
|
|
71
342
|
ws.getRow(1).font = { bold: true };
|
|
72
343
|
const reportDate = report.analyzedAt.slice(0, 10);
|
|
73
344
|
const rows = [...report.entries].sort((a, b) => a.package.localeCompare(b.package));
|
|
74
|
-
// Non-vulnerable rows still need a signal in cols 11/12/13 so a reviewer
|
|
75
|
-
// can distinguish "scanned, clean" from "not scanned / unknown". Blank
|
|
76
|
-
// leaves the same ambiguity the customer's hand-built sheet had.
|
|
77
345
|
const NO_VULNS_CRITICALITY = 'None';
|
|
78
346
|
const NO_VULNS_ISSUES = 'None';
|
|
79
347
|
const NO_VULNS_RESOLUTION = 'No action required';
|
|
80
348
|
for (const e of rows) {
|
|
81
|
-
// col 11: severity badge + count, e.g. "Critical (3 vulns)".
|
|
82
349
|
const criticality = e.maxSeverity
|
|
83
350
|
? `${SEV_LABEL[e.maxSeverity]} (${e.vulns.length} vuln${e.vulns.length === 1 ? '' : 's'})`
|
|
84
351
|
: NO_VULNS_CRITICALITY;
|
|
85
|
-
// col 12: per-advisory list. "ID: summary" with summary truncated
|
|
86
|
-
// per entry. Sorted by severity within the package so the most
|
|
87
|
-
// serious issues appear first when the cell is rendered.
|
|
88
|
-
const SEV_RANK = {
|
|
89
|
-
critical: 0,
|
|
90
|
-
high: 1,
|
|
91
|
-
medium: 2,
|
|
92
|
-
low: 3,
|
|
93
|
-
};
|
|
94
352
|
const sortedVulns = [...e.vulns].sort((a, b) => SEV_RANK[a.severity] - SEV_RANK[b.severity] || a.id.localeCompare(b.id));
|
|
95
353
|
const vulnLines = sortedVulns.map((v) => {
|
|
96
354
|
const title = (v.summary ?? '').replace(/\s+/g, ' ').trim().slice(0, ADVISORY_SUMMARY_MAX);
|
|
97
355
|
const cvss = v.cvssScore !== undefined ? ` [CVSS ${v.cvssScore.toFixed(1)}]` : '';
|
|
98
|
-
// Top-level attribution: tells the reviewer which direct manifest
|
|
99
|
-
// dep to upgrade. Missing when the pack couldn't parse the graph
|
|
100
|
-
// (e.g. TS repo with no lockfile) — silent in that case so the
|
|
101
|
-
// column stays clean.
|
|
102
356
|
const tops = v.topLevelDep ?? [];
|
|
103
357
|
let via = '';
|
|
104
358
|
if (tops.length === 1)
|
|
@@ -109,32 +363,93 @@ async function toBomXlsx(report) {
|
|
|
109
363
|
});
|
|
110
364
|
const vulnerabilityIssues = e.vulns.length === 0 ? NO_VULNS_ISSUES : vulnLines.join('; ');
|
|
111
365
|
const resolution = e.vulns.length === 0 ? NO_VULNS_RESOLUTION : e.upgradeAdvice;
|
|
366
|
+
// PM signals — appended cols 16–19. Use max-across-vulns for sortability.
|
|
367
|
+
const risk = maxRiskAcrossVulns(e);
|
|
368
|
+
const cvssMax = maxCvssAcrossVulns(e);
|
|
369
|
+
const epssMax = maxEpssAcrossVulns(e);
|
|
370
|
+
const kevCell = anyKev(e) ? 'Yes' : '';
|
|
371
|
+
const reachCell = anyReachable(e);
|
|
112
372
|
ws.addRow([
|
|
113
|
-
xlsxSafe(e.package),
|
|
114
|
-
xlsxSafe(e.version),
|
|
115
|
-
xlsxSafe(e.description),
|
|
116
|
-
'Dependency',
|
|
117
|
-
`Reported ${reportDate}`,
|
|
118
|
-
xlsxSafe(e.sourceUrl),
|
|
119
|
-
xlsxSafe(e.licenseType),
|
|
120
|
-
xlsxSafe(e.licenseText),
|
|
121
|
-
xlsxSafe(e.supplier),
|
|
122
|
-
xlsxSafe(e.releaseDate ? e.releaseDate.slice(0, 10) : ''),
|
|
123
|
-
xlsxSafe(criticality),
|
|
124
|
-
xlsxSafe(vulnerabilityIssues),
|
|
125
|
-
xlsxSafe(resolution),
|
|
126
|
-
'',
|
|
127
|
-
`${e.package}@${e.version}`,
|
|
373
|
+
xlsxSafe(e.package),
|
|
374
|
+
xlsxSafe(e.version),
|
|
375
|
+
xlsxSafe(e.description),
|
|
376
|
+
'Dependency',
|
|
377
|
+
`Reported ${reportDate}`,
|
|
378
|
+
xlsxSafe(e.sourceUrl),
|
|
379
|
+
xlsxSafe(e.licenseType),
|
|
380
|
+
xlsxSafe(e.licenseText),
|
|
381
|
+
xlsxSafe(e.supplier),
|
|
382
|
+
xlsxSafe(e.releaseDate ? e.releaseDate.slice(0, 10) : ''),
|
|
383
|
+
xlsxSafe(criticality),
|
|
384
|
+
xlsxSafe(vulnerabilityIssues),
|
|
385
|
+
xlsxSafe(resolution),
|
|
386
|
+
'',
|
|
387
|
+
`${e.package}@${e.version}`,
|
|
388
|
+
// 16–19: PM-signals (numeric so sort asc/desc works correctly)
|
|
389
|
+
risk >= 0 ? Math.round(risk) : '',
|
|
390
|
+
kevCell,
|
|
391
|
+
reachCell === 'unknown' ? '' : reachCell,
|
|
392
|
+
epssMax >= 0 ? pct(epssMax) : '',
|
|
393
|
+
// Keep CVSS-max for power users; col 20 is an extra that helps
|
|
394
|
+
// pivot tables without cluttering the main table.
|
|
395
|
+
cvssMax >= 0 ? cvssMax.toFixed(1) : '',
|
|
128
396
|
]);
|
|
129
397
|
}
|
|
130
|
-
//
|
|
131
|
-
|
|
132
|
-
const widths = [30, 14, 50, 14, 18, 50, 18, 50, 24, 18, 22, 50, 40, 12, 40];
|
|
398
|
+
// Legacy widths (15 cols) + PM-signal widths (4 + 1 for cvss-max).
|
|
399
|
+
const widths = [30, 14, 50, 14, 18, 50, 18, 50, 24, 18, 22, 50, 40, 12, 40, 8, 6, 12, 10, 8];
|
|
133
400
|
ws.columns.forEach((col, i) => {
|
|
134
401
|
if (col && widths[i])
|
|
135
402
|
col.width = widths[i];
|
|
136
403
|
});
|
|
137
|
-
|
|
138
|
-
|
|
404
|
+
// Header for the bonus col 20 (CVSS max)
|
|
405
|
+
ws.getRow(1).getCell(20).value = 'CVSS (max)';
|
|
406
|
+
ws.getRow(1).getCell(20).font = { bold: true };
|
|
407
|
+
}
|
|
408
|
+
// ─── Sheet 4: License Breakdown ─────────────────────────────────────────────
|
|
409
|
+
function writeLicenseBreakdown(wb, report) {
|
|
410
|
+
const ws = wb.addWorksheet('License Breakdown');
|
|
411
|
+
ws.columns = [
|
|
412
|
+
{ header: 'License', key: 'license', width: 30 },
|
|
413
|
+
{ header: 'Class', key: 'class', width: 22 },
|
|
414
|
+
{ header: 'Count', key: 'count', width: 8 },
|
|
415
|
+
{ header: 'Sample packages', key: 'samples', width: 80 },
|
|
416
|
+
];
|
|
417
|
+
ws.getRow(1).font = { bold: true };
|
|
418
|
+
// Group entries by license type, remember up to 5 sample package names
|
|
419
|
+
const buckets = new Map();
|
|
420
|
+
for (const e of report.entries) {
|
|
421
|
+
const lic = e.licenseType || '(empty)';
|
|
422
|
+
const list = buckets.get(lic) ?? [];
|
|
423
|
+
list.push(e.package);
|
|
424
|
+
buckets.set(lic, list);
|
|
425
|
+
}
|
|
426
|
+
// Sort: worst class first (copyleft-strong), then count desc, then name
|
|
427
|
+
const rows = [...buckets.entries()]
|
|
428
|
+
.map(([lic, pkgs]) => ({
|
|
429
|
+
license: lic,
|
|
430
|
+
cls: (0, pm_signals_1.licenseClass)(lic),
|
|
431
|
+
count: pkgs.length,
|
|
432
|
+
samples: pkgs.slice(0, 5).join(', ') + (pkgs.length > 5 ? `, +${pkgs.length - 5} more` : ''),
|
|
433
|
+
}))
|
|
434
|
+
.sort((a, b) => {
|
|
435
|
+
const classRank = {
|
|
436
|
+
'copyleft-strong': 0,
|
|
437
|
+
'copyleft-weak': 1,
|
|
438
|
+
proprietary: 2,
|
|
439
|
+
unknown: 3,
|
|
440
|
+
permissive: 4,
|
|
441
|
+
};
|
|
442
|
+
return (classRank[a.cls] - classRank[b.cls] ||
|
|
443
|
+
b.count - a.count ||
|
|
444
|
+
a.license.localeCompare(b.license));
|
|
445
|
+
});
|
|
446
|
+
for (const r of rows) {
|
|
447
|
+
ws.addRow({
|
|
448
|
+
license: r.license,
|
|
449
|
+
class: LICENSE_CLASS_LABEL[r.cls],
|
|
450
|
+
count: r.count,
|
|
451
|
+
samples: r.samples,
|
|
452
|
+
});
|
|
453
|
+
}
|
|
139
454
|
}
|
|
140
455
|
//# sourceMappingURL=bom.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"bom.js","sourceRoot":"","sources":["../../../src/analyzers/xlsx/bom.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"bom.js","sourceRoot":"","sources":["../../../src/analyzers/xlsx/bom.ts"],"names":[],"mappings":"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"}
|
package/dist/tools-cli.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tools-cli.d.ts","sourceRoot":"","sources":["../src/tools-cli.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"tools-cli.d.ts","sourceRoot":"","sources":["../src/tools-cli.ts"],"names":[],"mappings":"AAsNA,wBAAsB,eAAe,CACnC,UAAU,EAAE,MAAM,EAClB,UAAU,EAAE,MAAM,GAAG,SAAS,EAC9B,OAAO,EAAE,OAAO,GACf,OAAO,CAAC,IAAI,CAAC,CAYf"}
|
package/dist/tools-cli.js
CHANGED
|
@@ -172,7 +172,13 @@ async function runInstall(targetPath, autoYes) {
|
|
|
172
172
|
logger.info(`Running: ${cmd}`);
|
|
173
173
|
const result = runInstallCmd(cmd);
|
|
174
174
|
if (result.success) {
|
|
175
|
-
// Verify install worked
|
|
175
|
+
// Verify install worked. An install command can legitimately
|
|
176
|
+
// exit 0 without producing the binary — e.g. the vitest-coverage
|
|
177
|
+
// guard no-ops when vitest isn't a target-repo dep. Treat
|
|
178
|
+
// "exit 0 + tool still missing" as a skip, not a failure: the
|
|
179
|
+
// script ran cleanly, we just didn't get the binary we wanted.
|
|
180
|
+
// Real install failures surface through the `result.success ===
|
|
181
|
+
// false` branch below (non-zero exit).
|
|
176
182
|
const recheck = (0, tool_registry_1.findTool)(def, targetPath);
|
|
177
183
|
if (recheck.available) {
|
|
178
184
|
results.push({ name: s.name, status: 'installed' });
|
|
@@ -181,10 +187,10 @@ async function runInstall(targetPath, autoYes) {
|
|
|
181
187
|
else {
|
|
182
188
|
results.push({
|
|
183
189
|
name: s.name,
|
|
184
|
-
status: '
|
|
185
|
-
msg: 'install command
|
|
190
|
+
status: 'skipped',
|
|
191
|
+
msg: 'install command exited 0 without producing the binary (likely a guarded no-op)',
|
|
186
192
|
});
|
|
187
|
-
logger.
|
|
193
|
+
logger.dim(`${s.name} skipped — install command exited cleanly without installing`);
|
|
188
194
|
}
|
|
189
195
|
}
|
|
190
196
|
else {
|
package/dist/tools-cli.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tools-cli.js","sourceRoot":"","sources":["../src/tools-cli.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
|
1
|
+
{"version":3,"file":"tools-cli.js","sourceRoot":"","sources":["../src/tools-cli.ts"],"names":[],"mappings":"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"}
|