@ploaness/governance 1.8.0 → 1.9.0

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.
@@ -1 +1 @@
1
- {"version":3,"file":"compliance-report-assets.d.ts","sourceRoot":"","sources":["../src/compliance-report-assets.ts"],"names":[],"mappings":"AAEA,kCAAkC;AAClC,MAAM,WAAW,YAAY;IAC3B,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAA;IACvB,QAAQ,CAAC,KAAK,EAAE,QAAQ,GAAG,QAAQ,CAAA;IACnC,kEAAkE;IAClE,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAA;IACvB,sCAAsC;IACtC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;CACtB;AAED;;;;GAIG;AACH,eAAO,MAAM,SAAS,GAAI,OAAO,SAAS,YAAY,EAAE,KAAG,MAO9C,CAAA;AAEb,oGAAoG;AACpG,eAAO,MAAM,YAAY,EAAE,MA2L1B,CAAA;AAED,qGAAqG;AACrG,eAAO,MAAM,aAAa,EAAE,MA4B3B,CAAA"}
1
+ {"version":3,"file":"compliance-report-assets.d.ts","sourceRoot":"","sources":["../src/compliance-report-assets.ts"],"names":[],"mappings":"AAEA,kCAAkC;AAClC,MAAM,WAAW,YAAY;IAC3B,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAA;IACvB,QAAQ,CAAC,KAAK,EAAE,QAAQ,GAAG,QAAQ,CAAA;IACnC,kEAAkE;IAClE,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAA;IACvB,sCAAsC;IACtC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;CACtB;AAED;;;;GAIG;AACH,eAAO,MAAM,SAAS,GAAI,OAAO,SAAS,YAAY,EAAE,KAAG,MAO9C,CAAA;AAEb,oGAAoG;AACpG,eAAO,MAAM,YAAY,EAAE,MAoL1B,CAAA;AAED,qGAAqG;AACrG,eAAO,MAAM,aAAa,EAAE,MA4B3B,CAAA"}
@@ -22,7 +22,7 @@ html{-webkit-text-size-adjust:100%;background:#fff;font-size:16px}
22
22
  body{margin:0;padding:0 0 0 22rem;background:#fff;color:var(--ink);font-family:var(--serif);font-size:17px;
23
23
  line-height:1.6;-webkit-font-smoothing:antialiased;text-rendering:optimizeLegibility;font-kerning:normal;
24
24
  font-feature-settings:"lnum" 1}
25
- table,code,.mono,#toc,.count,.adnum,.figure b{font-feature-settings:"lnum" 1,"tnum" 1}
25
+ table,code,.mono,#toc,.count,.adnum{font-feature-settings:"lnum" 1,"tnum" 1}
26
26
  #header,#content,#footer{max-width:58.5em;margin-left:auto;margin-right:auto;padding-left:1.6em;padding-right:1.6em}
27
27
  #header{padding-top:48px}
28
28
  #header>h1{margin:0;padding:1.1rem 0 0;border-top:6px solid var(--accent);font-family:var(--display);font-size:3em;
@@ -47,9 +47,6 @@ h3{display:flex;gap:.3em;margin:27px 0 .55rem;padding-bottom:.35em;border-bottom
47
47
  font-size:1.36em}
48
48
  h2 .adnum,h3 .adnum{flex:0 0 auto;letter-spacing:.02em}
49
49
  h3 .adnum{font-weight:700;font-size:.86em;align-self:center}
50
- .olist>ol{margin:0 0 1em 1.75em;padding:0;list-style-type:upper-alpha}
51
- .olist li::marker{color:var(--accent)}
52
- .olist li>p{margin:0 0 .9em}
53
50
  .admonitionblock{margin:0 0 1.25em}
54
51
  .admonitionblock>table{width:100%;border:0;border-collapse:separate;background:none}
55
52
  .admonitionblock td.icon{width:3.25em;padding:.5625em .7em .5625em .625em;text-align:center;vertical-align:middle}
@@ -84,16 +81,6 @@ th[aria-sort=ascending]::after{content:" \25B4"}
84
81
  th[aria-sort=descending]::after{content:" \25BE"}
85
82
  .nowrap{white-space:nowrap}
86
83
  .empty{color:var(--muted);font-style:italic;text-align:left}
87
- .figures{display:grid;grid-template-columns:repeat(3,1fr);margin:0 0 1.5em;border:1px solid var(--rule);
88
- border-top:2px solid var(--accent);border-bottom:2px solid var(--accent)}
89
- .figure{padding:.7em .9em .8em;border-right:1px solid var(--rule)}
90
- .figure:nth-child(3n){border-right:0}
91
- .figure:nth-child(n+4){border-top:1px solid var(--hair)}
92
- .figure b{display:block;font-family:var(--serif);font-size:1.9em;font-weight:600;line-height:1.1;color:var(--accent)}
93
- .figure span{display:block;margin-top:.3em;font-size:.85em;line-height:1.3;color:var(--muted);text-align:left}
94
- .figure.good b{color:var(--good)}
95
- .figure.warn b{color:var(--warn)}
96
- .figure.bad b{color:var(--bad)}
97
84
  .stack{display:flex;height:12px;background:var(--hair);margin:.5em 0 .6em}
98
85
  .stack i{display:block;height:100%}
99
86
  .seg-permissive,.fill-permissive{background:var(--permissive)}
@@ -112,7 +99,6 @@ margin:.4em 0 1em;font-size:.94em}
112
99
  .bars .track{display:block;height:8px;background:var(--hair)}
113
100
  .bars .fill{display:block;height:100%}
114
101
  .bars .count{color:var(--muted);text-align:right}
115
- .severities{display:flex;flex-wrap:wrap;gap:.4em 1.4em;margin:.3em 0 1em;padding:0;list-style:none}
116
102
  .sev,.chip{display:inline-block;padding:0 .45em;border:1px solid;font-family:var(--serif);font-size:.82em;
117
103
  font-weight:600;letter-spacing:.02em;line-height:1.5;white-space:nowrap}
118
104
  .sev{text-transform:capitalize;color:#3c434e;border-color:#c3cbd6;background:#f3f5f8}
@@ -128,7 +114,16 @@ font-weight:600;letter-spacing:.02em;line-height:1.5;white-space:nowrap}
128
114
  .statements li::before{position:absolute;left:.1em;top:.1em;font-weight:700}
129
115
  .statements li.pass::before{content:"\2713";color:var(--good)}
130
116
  .statements li.fail::before{content:"\2717";color:var(--bad)}
131
- .statements li.info::before{content:"\2139";color:var(--accent)}
117
+ .statements.verdict{margin:1.2em 0 1.4em;font-size:1.15em;line-height:1.4}
118
+ .statements.verdict li{padding-bottom:.45em;text-align:left;hyphens:manual}
119
+ .status-open{color:var(--bad);background:var(--bad-bg);border-color:#e3b7b2}
120
+ .status-mitigated{color:var(--good);background:var(--good-bg);border-color:#a9cdb4}
121
+ a.plain,a.plain:hover{border:0;background:none}
122
+ .plan{margin:0 0 1.6em}
123
+ .plan>.title{margin:0;font-family:var(--display);font-weight:600;font-size:1.05em;color:var(--accent);text-align:left}
124
+ .plan-subject{margin:.15em 0 .5em;font-style:italic;color:var(--muted);text-align:left}
125
+ table.tableblock.facts.plan td:first-child{width:26%;text-align:left;vertical-align:top}
126
+ table.tableblock.facts.plan td{vertical-align:top;text-align:left}
132
127
  .ids{display:flex;flex-wrap:wrap;gap:.45em;margin:.2em 0 1.2em;padding:0;list-style:none}
133
128
  .ids li{max-width:100%}
134
129
  .downloads{display:flex;flex-wrap:wrap;gap:.6em;margin:0 0 .9em}
@@ -173,9 +168,7 @@ font-size:.85em}
173
168
  @media (max-width:1100px){body{padding-left:0}#toc{position:static;width:auto;border-right:0;
174
169
  border-bottom:1px solid var(--hair);padding:1.2rem 1.4rem;margin:1.2em 0}}
175
170
  @media (max-width:640px){body{font-size:16px}#header>h1{font-size:2.2em}h2{font-size:1.55em}h3{font-size:1.2em}
176
- .figures{grid-template-columns:repeat(2,1fr)}.figure:nth-child(n){border-right:1px solid var(--rule);border-top:0}
177
- .figure:nth-child(2n){border-right:0}.figure:nth-child(n+3){border-top:1px solid var(--hair)}
178
- .bars{grid-template-columns:1fr max-content}.bars .track{grid-column:1 / -1}.olist>ol{margin-left:1.4em}}
171
+ .bars{grid-template-columns:1fr max-content}.bars .track{grid-column:1 / -1}}
179
172
  @page{size:A4;margin:16mm 16mm 18mm;
180
173
  @bottom-center{content:counter(page);font:8.5pt "Source Serif 4",Georgia,serif;color:#1b1f26;
181
174
  border-top:1px solid #e2e6ec;vertical-align:middle}}
@@ -192,7 +185,7 @@ border-top:1px solid #e2e6ec;vertical-align:middle}}
192
185
  #content{margin-top:16pt}h2{border-top:0;padding-top:0;margin-top:20pt;break-after:avoid}h3{border-bottom:0;
193
186
  padding-bottom:0;break-after:avoid}.controls,.downloads{display:none}.table-wrap{overflow:visible}
194
187
  a{color:inherit;border:0}table.tableblock{font-size:8.6pt}table.tableblock th,table.tableblock td{padding:.3em .5em}
195
- tr,.figure,.admonitionblock,table.facts{break-inside:avoid}.notice>.title,.notice-packages{break-after:avoid}
188
+ tr,.admonitionblock,table.facts,.plan{break-inside:avoid}.notice>.title,.notice-packages{break-after:avoid}
196
189
  .notice{break-inside:avoid}
197
190
  .license-text{columns:2;column-gap:7mm;font-size:7.4pt;line-height:1.35;background:none;border:0;padding:0}
198
191
  #footer{margin-top:16pt;padding:6pt 0 0}}
@@ -1 +1 @@
1
- {"version":3,"file":"compliance-report-assets.js","sourceRoot":"","sources":["../src/compliance-report-assets.ts"],"names":[],"mappings":"AAAA,iHAAiH;AAYjH;;;;GAIG;AACH,MAAM,CAAC,MAAM,SAAS,GAAG,CAAC,KAA8B,EAAU,EAAE,CAClE,KAAK;KACF,GAAG,CACF,CAAC,IAAkB,EAAU,EAAE,CAC7B,2BAA2B,IAAI,CAAC,MAAM,gBAAgB,IAAI,CAAC,KAAK,gBAAgB,IAAI,CAAC,MAAM,GAAG;IAC9F,qDAAqD,IAAI,CAAC,IAAI,oBAAoB,CACrF;KACA,IAAI,CAAC,EAAE,CAAC,CAAA;AAEb,oGAAoG;AACpG,MAAM,CAAC,MAAM,YAAY,GAAW,MAAM,CAAC,GAAG,CAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA2L7C,CAAA;AAED,qGAAqG;AACrG,MAAM,CAAC,MAAM,aAAa,GAAW;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA4BpC,CAAA"}
1
+ {"version":3,"file":"compliance-report-assets.js","sourceRoot":"","sources":["../src/compliance-report-assets.ts"],"names":[],"mappings":"AAAA,iHAAiH;AAYjH;;;;GAIG;AACH,MAAM,CAAC,MAAM,SAAS,GAAG,CAAC,KAA8B,EAAU,EAAE,CAClE,KAAK;KACF,GAAG,CACF,CAAC,IAAkB,EAAU,EAAE,CAC7B,2BAA2B,IAAI,CAAC,MAAM,gBAAgB,IAAI,CAAC,KAAK,gBAAgB,IAAI,CAAC,MAAM,GAAG;IAC9F,qDAAqD,IAAI,CAAC,IAAI,oBAAoB,CACrF;KACA,IAAI,CAAC,EAAE,CAAC,CAAA;AAEb,oGAAoG;AACpG,MAAM,CAAC,MAAM,YAAY,GAAW,MAAM,CAAC,GAAG,CAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAoL7C,CAAA;AAED,qGAAqG;AACrG,MAAM,CAAC,MAAM,aAAa,GAAW;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA4BpC,CAAA"}
@@ -1 +1 @@
1
- {"version":3,"file":"compliance-report-html.d.ts","sourceRoot":"","sources":["../src/compliance-report-html.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,gBAAgB,EAA2D,MAAM,wBAAwB,CAAA;AACvH,OAAO,EAAE,KAAK,YAAY,EAA0C,MAAM,+BAA+B,CAAA;AA6BzG,sDAAsD;AACtD,MAAM,WAAW,iBAAiB;IAChC,2FAA2F;IAC3F,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;IACrB,0FAA0F;IAC1F,QAAQ,CAAC,KAAK,EAAE,SAAS,YAAY,EAAE,CAAA;CACxC;AAseD;;;;;;GAMG;AACH,eAAO,MAAM,sBAAsB,GACjC,QAAQ,gBAAgB,EACxB,aAAa,iBAAiB,EAC9B,UAAU,MAAM,KACf,MAqBW,CAAA"}
1
+ {"version":3,"file":"compliance-report-html.d.ts","sourceRoot":"","sources":["../src/compliance-report-html.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,gBAAgB,EAA4D,MAAM,wBAAwB,CAAA;AACxH,OAAO,EAAE,KAAK,YAAY,EAA0C,MAAM,+BAA+B,CAAA;AA6BzG,sDAAsD;AACtD,MAAM,WAAW,iBAAiB;IAChC,2FAA2F;IAC3F,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;IACrB,0FAA0F;IAC1F,QAAQ,CAAC,KAAK,EAAE,SAAS,YAAY,EAAE,CAAA;CACxC;AAycD;;;;;;GAMG;AACH,eAAO,MAAM,sBAAsB,GACjC,QAAQ,gBAAgB,EACxB,aAAa,iBAAiB,EAC9B,UAAU,MAAM,KACf,MAqBW,CAAA"}
@@ -1,7 +1,7 @@
1
- // Render the compliance report as one self-contained HTML document: no external asset, so the file is
1
+ // Render the open source software report as one self-contained HTML document: no external asset, so the file is
2
2
  // the whole deliverable whether it is opened offline, attached to a message, or printed to PDF.
3
3
  import { fontFaces, REPORT_SCRIPT, REPORT_STYLE } from './compliance-report-assets.js';
4
- import { admonition, CLASS_LABELS, CLASSES, cells, classChip, code, embeddedJson, escapeHtml, facts, formatCount, idList, inventoryCsv, lettered, nowrap, packageLink, percentOf, plural, relationLabel, scopeLabel, severityChip, table, versionLabel, } from './compliance-report-markup.js';
4
+ import { admonition, CLASS_LABELS, CLASSES, cells, classChip, code, embeddedJson, escapeHtml, facts, formatCount, idList, inventoryCsv, nowrap, packageLink, paragraphs, percentOf, plural, relationLabel, scopeLabel, severityChip, table, versionLabel, } from './compliance-report-markup.js';
5
5
  import { section, sectionReference, subheading, tableOfContents } from './compliance-report-outline.js';
6
6
  const SHORT_COMMIT = 12;
7
7
  const CHART_LICENSES = 10;
@@ -11,41 +11,116 @@ const draftNotice = (report) => report.draftReasons.length === 0
11
11
  : admonition('warning', `<p>This report is a draft and must not be treated as release evidence. ${report.draftReasons
12
12
  .map((reason) => escapeHtml(reason))
13
13
  .join(' ')}</p>`);
14
- const verdictNotice = (report) => {
15
- const threshold = escapeHtml(report.vulnerabilities.threshold);
16
- return report.isCompliant
17
- ? admonition('ok', '<p><strong>Compliant.</strong> Every dependency is licensed within the stated policy, and no known ' +
18
- `vulnerability at or above ${threshold} severity stands unresolved.</p>`)
19
- : admonition('fail', '<p><strong>Not compliant</strong>. At least one dependency is outside the license policy, or a known ' +
20
- `vulnerability at or above ${threshold} severity stands unresolved. The sections below name each one.</p>`);
14
+ const statement = (outcome, text) => `<li class="${outcome}">${text}</li>`;
15
+ const verdictOf = (isPassing) => (isPassing ? 'pass' : 'fail');
16
+ // The verb that agrees with a counted subject: "1 package version has", "2 package versions have".
17
+ const agreeing = (count, one, several) => (count === 1 ? one : several);
18
+ const severityOf = (entry) => entry.advisory.severity.toLowerCase();
19
+ const countAt = (entries, severity) => entries.filter((entry) => severityOf(entry) === severity).length;
20
+ // "1 high, 2 low", most severe first, which is the order the advisories are already listed in.
21
+ const severityBreakdown = (entries) => [...new Set(entries.map((entry) => severityOf(entry)))]
22
+ .map((severity) => `${formatCount(countAt(entries, severity))} ${escapeHtml(severity)}`)
23
+ .join(', ');
24
+ const licenseStatement = (report) => {
25
+ const outside = report.classCounts.refused;
26
+ return statement(verdictOf(outside === 0), outside === 0
27
+ ? `All ${plural(report.packages.length, 'package version')} have a license within the policy.`
28
+ : `${plural(outside, 'package version')} ${agreeing(outside, 'has', 'have')} a license outside the policy. ` +
29
+ `Each is listed in ${sectionReference('review-outside')}.`);
21
30
  };
22
- const header = () => `<div id="header"><h1>Open Source Software Compliance Report</h1>${tableOfContents()}</div>`;
23
- const opening = (report) => `<div id="preamble">${draftNotice(report)}${verdictNotice(report)}${facts([
31
+ const openStatement = (report, mitigatedCount) => {
32
+ const open = report.advisories.filter((entry) => entry.mitigation === undefined);
33
+ if (open.length > 0) {
34
+ return statement('fail', `${plural(open.length, 'vulnerability', 'vulnerabilities')} (${severityBreakdown(open)}) ` +
35
+ `${agreeing(open.length, 'is', 'are')} open, with no mitigation plan. ` +
36
+ `Each is listed in ${sectionReference('advisories-all')}.`);
37
+ }
38
+ return statement('pass', mitigatedCount === 0 ? 'No known vulnerabilities.' : 'No open vulnerabilities.');
39
+ };
40
+ const vulnerabilityStatements = (report) => {
41
+ const mitigated = report.advisories.filter((entry) => entry.mitigation !== undefined);
42
+ const stale = report.vulnerabilities.deadEntries.length;
43
+ return [
44
+ openStatement(report, mitigated.length),
45
+ ...(mitigated.length > 0
46
+ ? [
47
+ statement('pass', `${plural(mitigated.length, 'vulnerability', 'vulnerabilities')} (${severityBreakdown(mitigated)}) ` +
48
+ `${agreeing(mitigated.length, 'is mitigated, with a', 'are mitigated, each with a')} ` +
49
+ `mitigation plan in ${sectionReference('advisories-plans')}.`),
50
+ ]
51
+ : []),
52
+ ...(stale > 0
53
+ ? [
54
+ statement('fail', `${plural(stale, 'recorded mitigation')} ${agreeing(stale, 'matches', 'match')} no current ` +
55
+ `vulnerability. Each is listed in ${sectionReference('advisories-stale')}.`),
56
+ ]
57
+ : []),
58
+ ];
59
+ };
60
+ const verdict = (report) => `<ul class="statements verdict">${[licenseStatement(report), ...vulnerabilityStatements(report)].join('')}</ul>`;
61
+ const preamble = (report) => `<div id="preamble">${draftNotice(report)}${verdict(report)}${facts([
24
62
  ['Project', escapeHtml(report.projectName)],
25
63
  ...(report.projectDescription === undefined
26
64
  ? []
27
65
  : [['Description', escapeHtml(report.projectDescription)]]),
28
66
  ['Source commit', code(report.source.commit)],
29
67
  ['Report generated', escapeHtml(report.generatedAt)],
30
- ['Advisory data as of', escapeHtml(report.auditedAt)],
31
- ['Package versions', formatCount(report.packages.length)],
32
- ['Software bill of materials', `CycloneDX 1.6, ${plural(report.sbom.components, 'component')}`],
68
+ ['Vulnerability data as of', escapeHtml(report.auditedAt)],
33
69
  ])}</div>`;
34
- const figure = (value, label, tone) => `<div class="figure ${tone}"><b>${formatCount(value)}</b><span>${escapeHtml(label)}</span></div>`;
35
- const toneOf = (count, whenPresent) => (count > 0 ? whenPresent : 'good');
36
- const keyFigures = (report) => {
37
- const total = report.packages.length;
38
- const open = report.vulnerabilities.unsuppressed.length;
39
- const weak = report.classCounts['weak-copyleft'];
40
- const refused = report.classCounts.refused;
41
- return `<div class="figures">${[
42
- figure(total, 'package versions in the resolved set', 'plain'),
43
- figure(report.productionCount, 'in the production dependency graph', 'plain'),
44
- figure(total - report.productionCount, 'used only for development and build', 'plain'),
45
- figure(weak, 'under a weak copyleft license', toneOf(weak, 'warn')),
46
- figure(refused, 'licenses outside the policy', toneOf(refused, 'bad')),
47
- figure(open, `open vulnerabilities at or above ${report.vulnerabilities.threshold}`, toneOf(open, 'bad')),
48
- ].join('')}</div>`;
70
+ // The verdict precedes the contents, so a reader who opens only the first page reads it.
71
+ const header = (report) => `<div id="header"><h1>Open Source Software Report</h1>${preamble(report)}${tableOfContents()}</div>`;
72
+ const advisoryLink = (advisory) => advisory.url?.startsWith('https://') === true
73
+ ? `<a href="${escapeHtml(advisory.url)}" rel="noreferrer noopener">${nowrap(code(advisory.id))}</a>`
74
+ : nowrap(code(advisory.id));
75
+ const aliasLine = (advisory) => advisory.aliases.length > 0 ? `<br><span class="mono">${escapeHtml(advisory.aliases.join(', '))}</span>` : '';
76
+ const planId = (index) => `plan-${String(index + 1)}`;
77
+ const statusOf = (entry, planIndex) => entry.mitigation === undefined
78
+ ? '<span class="chip status-open">Open</span>'
79
+ : `<a class="plain" href="#${planId(planIndex)}"><span class="chip status-mitigated">Mitigated</span></a>`;
80
+ const ADVISORY_HEADINGS = ['Severity', 'Advisory', 'Package', 'Scope', 'Status'];
81
+ const advisoryRow = (entry, mitigated) => {
82
+ const status = statusOf(entry, mitigated.indexOf(entry));
83
+ return cells([
84
+ severityChip(entry.advisory.severity),
85
+ `${advisoryLink(entry.advisory)}${aliasLine(entry.advisory)}<br>${escapeHtml(entry.advisory.title)}`,
86
+ escapeHtml(entry.advisory.packageName),
87
+ nowrap(entry.isProduction ? 'Production' : 'Development'),
88
+ nowrap(status),
89
+ ]);
90
+ };
91
+ const plan = (entry, index) => {
92
+ const addedOn = escapeHtml(entry.mitigation?.addedOn ?? '');
93
+ const recorded = `<span class="mono">${nowrap(addedOn)}</span>` + (entry.isHarnessMitigation ? ' by the build harness' : '');
94
+ return (`<div class="plan" id="${planId(index)}"><p class="title">${severityChip(entry.advisory.severity)} ` +
95
+ `${nowrap(code(entry.advisory.id))} in ${escapeHtml(entry.advisory.packageName)}</p>` +
96
+ `<p class="plan-subject">${escapeHtml(entry.advisory.title)}</p>` +
97
+ facts([
98
+ ['Why it can&#39;t be exploited here', escapeHtml(entry.mitigation?.reason ?? '')],
99
+ ['Mitigation plan', escapeHtml(entry.mitigation?.mitigation ?? '')],
100
+ ['Recorded', recorded],
101
+ ], 'plan') +
102
+ '</div>');
103
+ };
104
+ const listItem = (text) => `<li>${escapeHtml(text)}</li>`;
105
+ const staleMitigations = (entries) => entries.length > 0
106
+ ? `<ul>${entries.map((entry) => listItem(entry)).join('')}</ul>`
107
+ : '<p class="empty">Every recorded mitigation matches a current vulnerability.</p>';
108
+ const vulnerabilities = (report) => {
109
+ const mitigated = report.advisories.filter((entry) => entry.mitigation !== undefined);
110
+ return section('vulnerabilities', paragraphs([
111
+ 'Every installed package, development tools included, was checked against the GitHub Advisory Database ' +
112
+ `at ${escapeHtml(report.auditedAt)}.`,
113
+ 'Each vulnerability is either open, which fails the build, or mitigated, which means the project recorded ' +
114
+ 'why it can&#39;t be exploited here and a mitigation plan.',
115
+ ]) +
116
+ subheading('advisories-all') +
117
+ table(ADVISORY_HEADINGS, report.advisories.map((entry) => advisoryRow(entry, mitigated)), 'No known vulnerability was reported.') +
118
+ subheading('advisories-plans') +
119
+ (mitigated.length > 0
120
+ ? mitigated.map((entry, index) => plan(entry, index)).join('')
121
+ : '<p class="empty">No vulnerability needs a mitigation plan.</p>') +
122
+ subheading('advisories-stale') +
123
+ staleMitigations(report.vulnerabilities.deadEntries));
49
124
  };
50
125
  const classStack = (report) => {
51
126
  const total = report.packages.length;
@@ -67,87 +142,6 @@ const licenseBars = (report) => {
67
142
  ...(rest.length > 0 ? [bar(plural(rest.length, 'other license'), restCount, largest, 'other')] : []),
68
143
  ].join('')}</div>`;
69
144
  };
70
- const severityRow = (counts) => `<ul class="severities">${counts
71
- .map((entry) => `<li>${severityChip(entry.severity)} ${formatCount(entry.count)}</li>`)
72
- .join('')}</ul>`;
73
- const statement = (outcome, text) => `<li class="${outcome}">${text}</li>`;
74
- const verdictOf = (isPassing) => (isPassing ? 'pass' : 'fail');
75
- const licenseFinding = (report) => statement(verdictOf(report.classCounts.refused === 0), report.classCounts.refused === 0
76
- ? `All ${plural(report.packages.length, 'package version')} declare a license the policy admits.`
77
- : `${plural(report.classCounts.refused, 'package version')} declare a license outside the policy.`);
78
- const vulnerabilityFindings = (report) => {
79
- const open = report.vulnerabilities.unsuppressed.length;
80
- const threshold = escapeHtml(report.vulnerabilities.threshold);
81
- const excused = report.vulnerabilities.suppressed.length;
82
- const stale = report.vulnerabilities.deadEntries.length;
83
- const excusedVerb = excused === 1 ? 'is' : 'are';
84
- return [
85
- statement(verdictOf(open === 0), open === 0
86
- ? `No known vulnerability at or above ${threshold} severity stands unresolved across ` +
87
- `${plural(report.advisoryRecords, 'advisory record')}.`
88
- : `${plural(open, 'known vulnerability', 'known vulnerabilities')} at or above ${threshold} severity ` +
89
- 'stand unresolved.'),
90
- statement(verdictOf(stale === 0), stale === 0
91
- ? `${plural(excused, 'advisory', 'advisories')} at or above the threshold ${excusedVerb} excused by a ` +
92
- 'recorded, justified and dated exception.'
93
- : `${plural(stale, 'recorded exception')} no longer match any finding.`),
94
- ];
95
- };
96
- const noticeFinding = (report) => statement('info', `${plural(report.notices.length, 'distinct license text')} reproduced for the production dependencies.` +
97
- (report.withoutNotice.length === 0
98
- ? ''
99
- : ` ${plural(report.withoutNotice.length, 'production package version')} ship no license file and are ` +
100
- `attributed by their declared license in ${sectionReference('inventory')}.`));
101
- const findings = (report) => `<ul class="statements">${[
102
- licenseFinding(report),
103
- statement('info', `${plural(report.classCounts['weak-copyleft'], 'package version')} carry a weak copyleft license. Each is ` +
104
- `listed with its scope in ${sectionReference('copyleft')}.`),
105
- ...vulnerabilityFindings(report),
106
- noticeFinding(report),
107
- ].join('')}</ul>`;
108
- const summary = (report) => section('summary', lettered([
109
- 'This section states what the report establishes, in one view.',
110
- 'Every figure is computed from the installed dependency tree of the source commit named above, with the ' +
111
- 'same data the project build uses to pass or fail.',
112
- ]) +
113
- subheading('key-figures') +
114
- keyFigures(report) +
115
- subheading('license-classes') +
116
- classStack(report) +
117
- subheading('common-licenses') +
118
- licenseBars(report) +
119
- subheading('severities') +
120
- severityRow(report.severityCounts) +
121
- subheading('findings') +
122
- findings(report));
123
- const policy = (report) => section('policy', lettered([
124
- 'This section states the policy the build enforces, rendered from the same definition the license check reads.',
125
- 'A license is identified by its Software Package Data Exchange (SPDX) identifier.',
126
- 'In a compound expression, an OR is satisfied by any admitted alternative, because the recipient may choose ' +
127
- 'it, and an AND requires every part.',
128
- ]) +
129
- subheading('policy-permissive') +
130
- lettered([
131
- `The policy admits ${plural(report.policy.permissive.length, 'license')} with no copyleft obligation.`,
132
- `Attribution, where the license requires it, is satisfied by ${sectionReference('notices')}.`,
133
- ]) +
134
- idList(report.policy.permissive) +
135
- subheading('policy-weak-copyleft') +
136
- lettered([
137
- `The policy admits ${plural(report.policy.weakCopyleft.length, 'license')} only for dependencies used ` +
138
- 'unmodified.',
139
- 'File-level copyleft, as in the Mozilla, Eclipse, and Common Development and Distribution licenses, ' +
140
- 'doesn&#39;t extend to the project&#39;s own source when the component is used as published.',
141
- 'Neither does library-level copyleft, as in the GNU Lesser General Public License.',
142
- ]) +
143
- idList(report.policy.weakCopyleft) +
144
- subheading('policy-outside') +
145
- lettered([
146
- 'Every other license is outside the policy, including strong copyleft such as the GNU General ' +
147
- 'Public License and the GNU Affero General Public License, licenses that restrict the field of use, and ' +
148
- 'any package whose license can&#39;t be resolved.',
149
- 'A single such package fails the build.',
150
- ]));
151
145
  const REVIEW_HEADINGS = ['Package', 'Version', 'License', 'Scope', 'Relation'];
152
146
  const reviewRow = (row) => {
153
147
  const version = nowrap(escapeHtml(versionLabel(row)));
@@ -159,58 +153,51 @@ const reviewRow = (row) => {
159
153
  nowrap(relationLabel(row)),
160
154
  ]);
161
155
  };
162
- const copyleft = (report) => section('copyleft', lettered([
163
- 'This section lists every package version whose license carries any copyleft condition.',
164
- 'The policy admits weak copyleft only for components used unmodified.',
165
- 'Production components are part of the distributed application. Development components are build, test and ' +
166
- 'analysis tools that aren&#39;t distributed with it.',
167
- ]) +
168
- subheading('review-weak-copyleft') +
169
- table(REVIEW_HEADINGS, report.copyleft.map((row) => reviewRow(row)), 'No dependency carries a weak copyleft license.') +
170
- subheading('review-outside') +
171
- table(REVIEW_HEADINGS, report.refused.map((row) => reviewRow(row)), 'No dependency declares a license outside the policy.'));
172
- const advisoryLink = (advisory) => advisory.url?.startsWith('https://') === true
173
- ? `<a href="${escapeHtml(advisory.url)}" rel="noreferrer noopener">${nowrap(code(advisory.id))}</a>`
174
- : nowrap(code(advisory.id));
175
- const aliasLine = (advisory) => advisory.aliases.length > 0 ? `<br><span class="mono">${escapeHtml(advisory.aliases.join(', '))}</span>` : '';
176
- const advisoryCells = (advisory) => [
177
- severityChip(advisory.severity),
178
- `${advisoryLink(advisory)}${aliasLine(advisory)}<br>${escapeHtml(advisory.title)}`,
179
- escapeHtml(advisory.packageName),
180
- ];
181
- const ADVISORY_HEADINGS = ['Severity', 'Advisory', 'Package'];
182
- const excusedRow = (entry) => cells([
183
- ...advisoryCells(entry.advisory),
184
- escapeHtml(entry.exception.reason) +
185
- (entry.isHarnessException ? '<br><span class="empty">Recorded by the build harness.</span>' : ''),
186
- `<span class="mono">${nowrap(escapeHtml(entry.exception.addedOn))}</span>`,
187
- ]);
188
- const listItem = (text) => `<li>${escapeHtml(text)}</li>`;
189
- const staleExceptions = (entries) => entries.length > 0
190
- ? `<ul>${entries.map((entry) => listItem(entry)).join('')}</ul>`
191
- : '<p class="empty">Every recorded exception still matches a finding.</p>';
192
- const vulnerabilityIntroduction = (report) => lettered([
193
- 'Every package in the resolved set, development tools included, was checked against the npm registry ' +
194
- 'advisory service, which publishes the GitHub Advisory Database.',
195
- `The query ran at ${escapeHtml(report.auditedAt)} and returned ` +
196
- `${plural(report.advisoryRecords, 'advisory record')}.`,
197
- `The build fails on any advisory at or above <strong>${escapeHtml(report.vulnerabilities.threshold)}</strong> ` +
198
- 'severity unless a recorded exception explains why the project can&#39;t reach it.',
199
- 'Unlike the rest of this report, this section reflects the database at the time of the query and can change ' +
200
- 'for the same source.',
201
- ]);
202
- const vulnerabilities = (report) => {
203
- const { threshold, unsuppressed, suppressed, belowThreshold, deadEntries } = report.vulnerabilities;
204
- return section('vulnerabilities', vulnerabilityIntroduction(report) +
205
- subheading('advisories-open') +
206
- table(ADVISORY_HEADINGS, unsuppressed.map((advisory) => cells(advisoryCells(advisory))), `No advisory at or above ${threshold} severity stands unresolved.`) +
207
- subheading('advisories-excused') +
208
- table([...ADVISORY_HEADINGS, "Why it isn't reachable", 'Recorded'], suppressed.map((entry) => excusedRow(entry)), 'No exception is in use.') +
209
- subheading('advisories-stale') +
210
- staleExceptions(deadEntries) +
211
- subheading('advisories-below') +
212
- table(ADVISORY_HEADINGS, belowThreshold.map((advisory) => cells(advisoryCells(advisory))), 'No advisory below the threshold was reported.'));
156
+ const licenses = (report) => {
157
+ const total = report.packages.length;
158
+ return section('licenses', paragraphs([
159
+ `${plural(total, 'package version')} ${agreeing(total, 'is', 'are')} installed, ` +
160
+ `${formatCount(report.productionCount)} in the production dependency graph and ` +
161
+ `${formatCount(total - report.productionCount)} used only for development and build.`,
162
+ `Each license is judged against the policy in ${sectionReference('policy')}.`,
163
+ ]) +
164
+ subheading('license-classes') +
165
+ classStack(report) +
166
+ subheading('common-licenses') +
167
+ licenseBars(report) +
168
+ subheading('review-weak-copyleft') +
169
+ paragraphs([
170
+ 'The policy admits weak copyleft only for components used unmodified. Development components are build, ' +
171
+ 'test and analysis tools that aren&#39;t distributed with the application.',
172
+ ]) +
173
+ table(REVIEW_HEADINGS, report.copyleft.map((row) => reviewRow(row)), 'No dependency carries a weak copyleft license.') +
174
+ subheading('review-outside') +
175
+ table(REVIEW_HEADINGS, report.refused.map((row) => reviewRow(row)), 'No dependency declares a license outside the policy.'));
213
176
  };
177
+ const policy = (report) => section('policy', paragraphs([
178
+ 'The build enforces this policy, rendered from the same definition the license check reads. A license is ' +
179
+ 'identified by its Software Package Data Exchange (SPDX) identifier. In a compound expression, an OR is ' +
180
+ 'satisfied by any admitted alternative, and an AND requires every part.',
181
+ ]) +
182
+ subheading('policy-permissive') +
183
+ paragraphs([
184
+ `The policy admits ${plural(report.policy.permissive.length, 'license')} with no copyleft obligation. ` +
185
+ `Attribution, where the license requires it, is satisfied by ${sectionReference('notices')}.`,
186
+ ]) +
187
+ idList(report.policy.permissive) +
188
+ subheading('policy-weak-copyleft') +
189
+ paragraphs([
190
+ `The policy admits ${plural(report.policy.weakCopyleft.length, 'license')} only for dependencies used ` +
191
+ 'unmodified. Their copyleft, whether file-level or library-level, doesn&#39;t extend to the ' +
192
+ 'project&#39;s own source when the component is used as published.',
193
+ ]) +
194
+ idList(report.policy.weakCopyleft) +
195
+ subheading('policy-outside') +
196
+ paragraphs([
197
+ 'Every other license is outside the policy, including strong copyleft such as the GNU General ' +
198
+ 'Public License, licenses that restrict the field of use, and any package whose license can&#39;t be ' +
199
+ 'resolved. A single such package fails the build.',
200
+ ]));
214
201
  const inventoryRow = (row) => `<tr data-scope="${row.isProduction ? 'production' : 'development'}" data-class="${row.licenseClass}">` +
215
202
  `<td>${packageLink(row)}</td><td class="mono nowrap">${escapeHtml(versionLabel(row))}</td>` +
216
203
  `<td>${code(row.license)}</td><td>${classChip(row.licenseClass)}</td>` +
@@ -230,7 +217,7 @@ const inventoryControls = (fileStem) => '<div class="downloads">' +
230
217
  CLASSES.map((licenseClass) => classOption(licenseClass)).join('') +
231
218
  '</select><output id="filter-count" aria-live="polite"></output></div>';
232
219
  const INVENTORY_HEADINGS = ['Package', 'Version', 'License', 'Class', 'Scope', 'Relation'];
233
- const inventory = (report, fileStem) => section('inventory', lettered([
220
+ const inventory = (report, fileStem) => section('inventory', paragraphs([
234
221
  `This section lists every installed package version, ${plural(report.packages.length, 'row')}, with the ` +
235
222
  'license its installed manifest declares.',
236
223
  'Scope is production when the version is reachable from a production dependency of any workspace package, ' +
@@ -277,12 +264,12 @@ const noticeGroup = (group, index) => `<div class="notice" id="notice-${String(i
277
264
  .map((block) => licenseBlock(block))
278
265
  .join('')}</div></div>`;
279
266
  const missingNotices = (report) => report.withoutNotice.length > 0
280
- ? lettered([
267
+ ? paragraphs([
281
268
  'These production package versions ship no license file.',
282
269
  `Their declared license is listed in ${sectionReference('inventory')}, and no text is invented for them.`,
283
270
  ]) + idList(report.withoutNotice)
284
271
  : '<p class="empty">Every production package version ships a license file.</p>';
285
- const notices = (report) => section('notices', lettered([
272
+ const notices = (report) => section('notices', paragraphs([
286
273
  'This section reproduces the license and notice files shipped by each production dependency, from the ' +
287
274
  'installed package.',
288
275
  'The words are unchanged. Only the fixed-width line breaks and the Markdown markers of the original files ' +
@@ -300,7 +287,7 @@ const notices = (report) => section('notices', lettered([
300
287
  // A digest is read as one value, so it is set in the code face without a chip, which would split in two
301
288
  // where the value wraps.
302
289
  const digest = (value) => `<span class="digest">${escapeHtml(value)}</span>`;
303
- const provenance = (report) => section('provenance', lettered([
290
+ const provenance = (report) => section('provenance', paragraphs([
304
291
  'This report is generated by the build, not written by hand.',
305
292
  'It reads the same installed dependency tree, license policy and advisory data that the license and ' +
306
293
  'vulnerability checks of the build use to pass or fail, so the report and the verdict can&#39;t disagree.',
@@ -318,18 +305,16 @@ const provenance = (report) => section('provenance', lettered([
318
305
  ['Regenerate', code('pnpm exec ploaness compliance-report')],
319
306
  ]) +
320
307
  subheading('provenance-scope') +
321
- lettered([
308
+ paragraphs([
322
309
  'The report covers every package the pnpm workspace resolves, for every workspace package, including ' +
323
310
  'development and build tools.',
324
311
  'A license is the one the installed package manifest declares.',
325
312
  'The embedded SBOM lists the same resolved set with its dependency graph.',
326
313
  ]));
327
314
  const body = (report, fileStem) => [
328
- opening(report),
329
- summary(report),
330
- policy(report),
331
- copyleft(report),
332
315
  vulnerabilities(report),
316
+ licenses(report),
317
+ policy(report),
333
318
  inventory(report, fileStem),
334
319
  notices(report),
335
320
  provenance(report),
@@ -345,10 +330,10 @@ export const renderComplianceReport = (report, attachments, fileStem) => [
345
330
  '<!doctype html>',
346
331
  '<html lang="en">',
347
332
  '<head><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1">',
348
- `<title>Open source compliance report - ${escapeHtml(report.projectName)}</title>`,
333
+ `<title>Open source software report - ${escapeHtml(report.projectName)}</title>`,
349
334
  `<style>${fontFaces(attachments.fonts)}${REPORT_STYLE}</style></head>`,
350
335
  '<body class="article toc2 toc-left">',
351
- header(),
336
+ header(report),
352
337
  '<div id="content">',
353
338
  ...body(report, fileStem),
354
339
  '</div>',
@@ -1 +1 @@
1
- {"version":3,"file":"compliance-report-html.js","sourceRoot":"","sources":["../src/compliance-report-html.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"compliance-report-html.js","sourceRoot":"","sources":["../src/compliance-report-html.ts"],"names":[],"mappings":"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"}