@beehexa/hexasync-template-report-render 2608.20.18 → 2608.20.31
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/diffCollapse.d.ts +12 -0
- package/dist/diffCollapse.d.ts.map +1 -0
- package/dist/diffCollapse.js +31 -0
- package/dist/diffCollapse.js.map +1 -0
- package/dist/flowChart.d.ts +82 -0
- package/dist/flowChart.d.ts.map +1 -0
- package/dist/flowChart.js +250 -0
- package/dist/flowChart.js.map +1 -0
- package/dist/index.d.ts +17 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +17 -0
- package/dist/index.js.map +1 -0
- package/dist/renderHtml.d.ts +5 -0
- package/dist/renderHtml.d.ts.map +1 -0
- package/dist/renderHtml.js +449 -0
- package/dist/renderHtml.js.map +1 -0
- package/dist/renderMarkdown.d.ts +11 -0
- package/dist/renderMarkdown.d.ts.map +1 -0
- package/dist/renderMarkdown.js +412 -0
- package/dist/renderMarkdown.js.map +1 -0
- package/dist/renderValidation.d.ts +7 -0
- package/dist/renderValidation.d.ts.map +1 -0
- package/dist/renderValidation.js +191 -0
- package/dist/renderValidation.js.map +1 -0
- package/dist/renderValidationHtml.d.ts +7 -0
- package/dist/renderValidationHtml.d.ts.map +1 -0
- package/dist/renderValidationHtml.js +189 -0
- package/dist/renderValidationHtml.js.map +1 -0
- package/package.json +6 -6
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"renderValidation.js","sourceRoot":"","sources":["../src/renderValidation.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import { ValidationReportModel } from '@beehexa/hexasync-template-report-model';
|
|
2
|
+
/**
|
|
3
|
+
* Render the validation report as a self-contained, theme-aware HTML page.
|
|
4
|
+
* Pure string formatting — deterministic, no timestamps. Mirrors renderReportHtml.
|
|
5
|
+
*/
|
|
6
|
+
export declare function renderValidationReportHtml(model: ValidationReportModel): string;
|
|
7
|
+
//# sourceMappingURL=renderValidationHtml.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"renderValidationHtml.d.ts","sourceRoot":"","sources":["../src/renderValidationHtml.ts"],"names":[],"mappings":"AAAA,OAAO,EAEL,qBAAqB,EAEtB,MAAM,yCAAyC,CAAC;AA2EjD;;;GAGG;AACH,wBAAgB,0BAA0B,CACxC,KAAK,EAAE,qBAAqB,GAC3B,MAAM,CAqCR"}
|
|
@@ -0,0 +1,189 @@
|
|
|
1
|
+
import { esc } from './renderHtml.js';
|
|
2
|
+
import { SEVERITY_ORDER } from '@beehexa/hexasync-template-validate';
|
|
3
|
+
import { ruleDocsFor } from '@beehexa/hexasync-template-validate';
|
|
4
|
+
const SEV_LABEL = {
|
|
5
|
+
critical: 'CRITICAL',
|
|
6
|
+
high: 'HIGH',
|
|
7
|
+
major: 'MAJOR',
|
|
8
|
+
medium: 'MEDIUM',
|
|
9
|
+
low: 'LOW',
|
|
10
|
+
'very-low': 'VERY LOW',
|
|
11
|
+
};
|
|
12
|
+
const STYLE = `
|
|
13
|
+
:root { color-scheme: light dark; }
|
|
14
|
+
body { font-family: -apple-system, Segoe UI, Roboto, Helvetica, Arial, sans-serif; margin: 2rem auto; max-width: 1000px; padding: 0 1rem; line-height: 1.45; color: #24292f; }
|
|
15
|
+
h1 { font-size: 1.6rem; } h2 { margin-top: 1.6rem; border-bottom: 1px solid #d0d7de; padding-bottom: .3rem; }
|
|
16
|
+
h3 { margin-top: 1.2rem; font-size: 1.05rem; }
|
|
17
|
+
a { color: #0969da; }
|
|
18
|
+
code { background: #eff1f3; padding: .1rem .3rem; border-radius: 4px; font-size: .85em; }
|
|
19
|
+
.issue { margin: .5rem 0 .8rem; }
|
|
20
|
+
.why { color: #57606a; font-size: .9rem; margin: .15rem 0 0 1.4rem; }
|
|
21
|
+
.ruleid { color: #8b949e; font-size: .8rem; }
|
|
22
|
+
.ruleid a, .ruleid a code { color: #8b949e; text-decoration: none; }
|
|
23
|
+
.ruleid a:hover { text-decoration: underline; }
|
|
24
|
+
.sev { display: inline-block; padding: .05rem .5rem; border-radius: 999px; font-weight: 700; font-size: .75rem; white-space: nowrap; }
|
|
25
|
+
.sev-critical { background: #ffebe9; color: #cf222e; }
|
|
26
|
+
.sev-high { background: #fff1e5; color: #bc4c00; }
|
|
27
|
+
.sev-major { background: #fff8c5; color: #7d4e00; }
|
|
28
|
+
.sev-medium { background: #ddf4ff; color: #0969da; }
|
|
29
|
+
.sev-low { background: #eaeef2; color: #57606a; }
|
|
30
|
+
/* Quieter than LOW on purpose: a deprecation notice should read as a note, not as a problem. */
|
|
31
|
+
.sev-very-low { background: #f6f8fa; color: #6e7781; }
|
|
32
|
+
.ok { background: #dafbe1; color: #116329; padding: .6rem .8rem; border-radius: 6px; display: inline-block; }
|
|
33
|
+
pre { background: #f6f8fa; padding: .6rem .8rem; border-radius: 6px; overflow-x: auto; }
|
|
34
|
+
.appendix { margin-top: 2rem; }
|
|
35
|
+
.appendix h3 { font-size: .95rem; margin-top: 1rem; }
|
|
36
|
+
.rule-doc { margin: .1rem 0 0 1.2rem; color: #57606a; font-size: .9rem; }
|
|
37
|
+
.rule-doc b { color: #24292f; }
|
|
38
|
+
@media (prefers-color-scheme: dark) {
|
|
39
|
+
body { color: #c9d1d9; background: #0d1117; }
|
|
40
|
+
code, pre { background: #161b22; }
|
|
41
|
+
.why, .rule-doc { color: #8b949e; }
|
|
42
|
+
.rule-doc b { color: #c9d1d9; }
|
|
43
|
+
}
|
|
44
|
+
`;
|
|
45
|
+
/** Render a message that may contain `` `...` `` inline-code spans: prose is HTML-escaped,
|
|
46
|
+
* code segments become `<code>` so a literal pattern renders highlighted/monospace. */
|
|
47
|
+
function htmlInline(s) {
|
|
48
|
+
return s
|
|
49
|
+
.split(/(`[^`]*`)/g)
|
|
50
|
+
.map((part) => part.length >= 2 && part.startsWith('`') && part.endsWith('`')
|
|
51
|
+
? `<code>${esc(part.slice(1, -1))}</code>`
|
|
52
|
+
: esc(part))
|
|
53
|
+
.join('');
|
|
54
|
+
}
|
|
55
|
+
function sevPill(s) {
|
|
56
|
+
return `<span class="sev sev-${s}">${SEV_LABEL[s]}</span>`;
|
|
57
|
+
}
|
|
58
|
+
/** Anchor/slug for a rule's appendix entry (matches the Markdown report + the appendix id). */
|
|
59
|
+
function ruleAnchor(ruleId) {
|
|
60
|
+
return ruleId.toLowerCase();
|
|
61
|
+
}
|
|
62
|
+
/** A rule id rendered as a link to its appendix entry. */
|
|
63
|
+
function ruleLinkHtml(ruleId) {
|
|
64
|
+
return `<a href="#${ruleAnchor(ruleId)}"><code>${esc(ruleId)}</code></a>`;
|
|
65
|
+
}
|
|
66
|
+
/**
|
|
67
|
+
* Render the validation report as a self-contained, theme-aware HTML page.
|
|
68
|
+
* Pure string formatting — deterministic, no timestamps. Mirrors renderReportHtml.
|
|
69
|
+
*/
|
|
70
|
+
export function renderValidationReportHtml(model) {
|
|
71
|
+
const body = [];
|
|
72
|
+
body.push(`<h1>Validation Report — ${esc(model.projectTitle)}</h1>`);
|
|
73
|
+
if (model.total === 0) {
|
|
74
|
+
body.push(`<p class="ok">✓ No validation issues — the composed profile passed all enabled validation rules.</p>`);
|
|
75
|
+
return page(model.projectTitle, body.join('\n'));
|
|
76
|
+
}
|
|
77
|
+
const summary = SEVERITY_ORDER.filter((s) => model.counts[s] > 0)
|
|
78
|
+
.map((s) => `${sevPill(s)} ${model.counts[s]}`)
|
|
79
|
+
.join(' ');
|
|
80
|
+
body.push(`<h2>Summary</h2>`);
|
|
81
|
+
body.push(`<p>${summary}</p>`);
|
|
82
|
+
for (const g of model.issuesByComponent) {
|
|
83
|
+
const real = g.issues.filter(isRealIssue);
|
|
84
|
+
if (real.length === 0)
|
|
85
|
+
continue;
|
|
86
|
+
const label = g.sourceLink
|
|
87
|
+
? `<a href="${esc(g.sourceLink)}">${esc(g.idOrKey)}</a>`
|
|
88
|
+
: `<code>${esc(g.idOrKey)}</code>`;
|
|
89
|
+
body.push(`<h3>${esc(g.parentKey)} — ${label}</h3>`);
|
|
90
|
+
for (const i of real)
|
|
91
|
+
body.push(renderIssueHtml(i));
|
|
92
|
+
}
|
|
93
|
+
const crossCutting = model.crossCutting.filter(isRealIssue);
|
|
94
|
+
if (crossCutting.length > 0) {
|
|
95
|
+
body.push(`<h2>Project-wide</h2>`);
|
|
96
|
+
for (const i of crossCutting)
|
|
97
|
+
body.push(renderIssueHtml(i));
|
|
98
|
+
}
|
|
99
|
+
body.push(...renderNoticesHtml(model));
|
|
100
|
+
body.push(...renderAppendixHtml(model));
|
|
101
|
+
return page(model.projectTitle, body.join('\n'));
|
|
102
|
+
}
|
|
103
|
+
/**
|
|
104
|
+
* A finding about CONFIGURATION, as opposed to a migration notice — the same split the Markdown twin makes, and it
|
|
105
|
+
* must stay the same split: two renderers of one report disagreeing about which section a finding belongs in is the
|
|
106
|
+
* class of defect this repo keeps paying for.
|
|
107
|
+
*/
|
|
108
|
+
const isRealIssue = (issue) => issue.severity !== 'very-low';
|
|
109
|
+
/** The trailing notices section. See the Markdown twin's `renderNoticesMd` for why these are gathered, not just sorted last. */
|
|
110
|
+
function renderNoticesHtml(model) {
|
|
111
|
+
const out = [];
|
|
112
|
+
const notices = [];
|
|
113
|
+
for (const g of model.issuesByComponent)
|
|
114
|
+
for (const i of g.issues)
|
|
115
|
+
if (!isRealIssue(i))
|
|
116
|
+
notices.push({ issue: i, where: `${g.parentKey} — ${g.idOrKey}` });
|
|
117
|
+
for (const i of model.crossCutting)
|
|
118
|
+
if (!isRealIssue(i))
|
|
119
|
+
notices.push({ issue: i });
|
|
120
|
+
if (notices.length === 0)
|
|
121
|
+
return out;
|
|
122
|
+
out.push(`<h2>Deprecations & legacy notices</h2>`);
|
|
123
|
+
out.push(`<p class="notice-intro"><em>None of these breaks the profile at runtime.</em> They are here so a template can ` +
|
|
124
|
+
`be migrated before the platform stops carrying the shape — act on them when you next touch the component, ` +
|
|
125
|
+
`not while debugging a run.</p>`);
|
|
126
|
+
for (const { issue, where } of notices) {
|
|
127
|
+
const rendered = renderIssueHtml(issue);
|
|
128
|
+
out.push(where === undefined
|
|
129
|
+
? rendered
|
|
130
|
+
: `${rendered}<p class="notice-where">in <code>${esc(where)}</code></p>`);
|
|
131
|
+
}
|
|
132
|
+
return out;
|
|
133
|
+
}
|
|
134
|
+
/** Appendix: explain every rule that appears in this report. */
|
|
135
|
+
function renderAppendixHtml(model) {
|
|
136
|
+
const ids = [];
|
|
137
|
+
for (const g of model.issuesByComponent)
|
|
138
|
+
for (const i of g.issues)
|
|
139
|
+
ids.push(i.ruleId);
|
|
140
|
+
for (const i of model.crossCutting)
|
|
141
|
+
ids.push(i.ruleId);
|
|
142
|
+
const docs = ruleDocsFor(ids);
|
|
143
|
+
if (docs.length === 0)
|
|
144
|
+
return [];
|
|
145
|
+
const out = [];
|
|
146
|
+
out.push(`<div class="appendix">`);
|
|
147
|
+
out.push(`<h2>Appendix — rule reference</h2>`);
|
|
148
|
+
out.push(`<p>Every rule flagged above, with what it checks and what breaks if it is left unfixed.</p>`);
|
|
149
|
+
for (const { ruleId, doc } of docs) {
|
|
150
|
+
out.push(`<h3 id="${ruleAnchor(ruleId)}"><code>${esc(ruleId)}</code> — ${htmlInline(doc.title)}</h3>`);
|
|
151
|
+
out.push(`<div class="rule-doc"><b>What:</b> ${htmlInline(doc.what)}</div>`);
|
|
152
|
+
out.push(`<div class="rule-doc"><b>Why it matters:</b> ${htmlInline(doc.consequence)}</div>`);
|
|
153
|
+
}
|
|
154
|
+
out.push(`</div>`);
|
|
155
|
+
return out;
|
|
156
|
+
}
|
|
157
|
+
function renderIssueHtml(i) {
|
|
158
|
+
const parts = [];
|
|
159
|
+
parts.push(`<div class="issue">`);
|
|
160
|
+
const link = ruleLinkHtml(i.ruleId);
|
|
161
|
+
// A message may place the rule-id link inline via a `{{rule}}` marker; otherwise the
|
|
162
|
+
// linked rule id trails the headline. Either way the id links to the appendix.
|
|
163
|
+
const headline = i.message.includes('{{rule}}')
|
|
164
|
+
? `${sevPill(i.severity)} <strong>${i.message.split('{{rule}}').map(htmlInline).join(link)}</strong>`
|
|
165
|
+
: `${sevPill(i.severity)} <strong>${htmlInline(i.message)}</strong> <span class="ruleid">${link}</span>`;
|
|
166
|
+
parts.push(headline);
|
|
167
|
+
if (i.why)
|
|
168
|
+
parts.push(`<div class="why">${htmlInline(i.why)}</div>`);
|
|
169
|
+
if (i.snippetDiff)
|
|
170
|
+
parts.push(`<pre>${esc(i.snippetDiff)}</pre>`);
|
|
171
|
+
parts.push(`</div>`);
|
|
172
|
+
return parts.join('\n');
|
|
173
|
+
}
|
|
174
|
+
function page(title, body) {
|
|
175
|
+
return `<!doctype html>
|
|
176
|
+
<html lang="en">
|
|
177
|
+
<head>
|
|
178
|
+
<meta charset="utf-8" />
|
|
179
|
+
<meta name="viewport" content="width=device-width, initial-scale=1" />
|
|
180
|
+
<title>Validation Report — ${esc(title)}</title>
|
|
181
|
+
<style>${STYLE}</style>
|
|
182
|
+
</head>
|
|
183
|
+
<body>
|
|
184
|
+
${body}
|
|
185
|
+
</body>
|
|
186
|
+
</html>
|
|
187
|
+
`;
|
|
188
|
+
}
|
|
189
|
+
//# sourceMappingURL=renderValidationHtml.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"renderValidationHtml.js","sourceRoot":"","sources":["../src/renderValidationHtml.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@beehexa/hexasync-template-report-render",
|
|
3
|
-
"version": "2608.20.
|
|
3
|
+
"version": "2608.20.31",
|
|
4
4
|
"description": "Markdown and HTML renderers for the report models.",
|
|
5
5
|
"license": "SEE LICENSE IN ../../LICENSE",
|
|
6
6
|
"type": "module",
|
|
@@ -20,11 +20,11 @@
|
|
|
20
20
|
"build": "tsc -p tsconfig.build.json"
|
|
21
21
|
},
|
|
22
22
|
"dependencies": {
|
|
23
|
-
"@beehexa/hexasync-template-compose": "2608.20.
|
|
24
|
-
"@beehexa/hexasync-template-frontend-flow": "2608.20.
|
|
25
|
-
"@beehexa/hexasync-template-report-model": "2608.20.
|
|
26
|
-
"@beehexa/hexasync-template-validate": "2608.20.
|
|
27
|
-
"@beehexa/hexasync-template-worker-flow": "2608.20.
|
|
23
|
+
"@beehexa/hexasync-template-compose": "2608.20.31",
|
|
24
|
+
"@beehexa/hexasync-template-frontend-flow": "2608.20.31",
|
|
25
|
+
"@beehexa/hexasync-template-report-model": "2608.20.31",
|
|
26
|
+
"@beehexa/hexasync-template-validate": "2608.20.31",
|
|
27
|
+
"@beehexa/hexasync-template-worker-flow": "2608.20.31"
|
|
28
28
|
},
|
|
29
29
|
"hexasync": {
|
|
30
30
|
"layer": "adapter"
|