@beehexa/hexasync-template-report-render 2608.8.3 → 2608.20.18
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 +6 -4
- package/dist/diffCollapse.d.ts +0 -12
- package/dist/diffCollapse.d.ts.map +0 -1
- package/dist/diffCollapse.js +0 -31
- package/dist/diffCollapse.js.map +0 -1
- package/dist/flowChart.d.ts +0 -51
- package/dist/flowChart.d.ts.map +0 -1
- package/dist/flowChart.js +0 -445
- package/dist/flowChart.js.map +0 -1
- package/dist/index.d.ts +0 -17
- package/dist/index.d.ts.map +0 -1
- package/dist/index.js +0 -17
- package/dist/index.js.map +0 -1
- package/dist/renderHtml.d.ts +0 -5
- package/dist/renderHtml.d.ts.map +0 -1
- package/dist/renderHtml.js +0 -449
- package/dist/renderHtml.js.map +0 -1
- package/dist/renderMarkdown.d.ts +0 -11
- package/dist/renderMarkdown.d.ts.map +0 -1
- package/dist/renderMarkdown.js +0 -412
- package/dist/renderMarkdown.js.map +0 -1
- package/dist/renderValidation.d.ts +0 -7
- package/dist/renderValidation.d.ts.map +0 -1
- package/dist/renderValidation.js +0 -140
- package/dist/renderValidation.js.map +0 -1
- package/dist/renderValidationHtml.d.ts +0 -7
- package/dist/renderValidationHtml.d.ts.map +0 -1
- package/dist/renderValidationHtml.js +0 -150
- package/dist/renderValidationHtml.js.map +0 -1
|
@@ -1,150 +0,0 @@
|
|
|
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
|
-
};
|
|
11
|
-
const STYLE = `
|
|
12
|
-
:root { color-scheme: light dark; }
|
|
13
|
-
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; }
|
|
14
|
-
h1 { font-size: 1.6rem; } h2 { margin-top: 1.6rem; border-bottom: 1px solid #d0d7de; padding-bottom: .3rem; }
|
|
15
|
-
h3 { margin-top: 1.2rem; font-size: 1.05rem; }
|
|
16
|
-
a { color: #0969da; }
|
|
17
|
-
code { background: #eff1f3; padding: .1rem .3rem; border-radius: 4px; font-size: .85em; }
|
|
18
|
-
.issue { margin: .5rem 0 .8rem; }
|
|
19
|
-
.why { color: #57606a; font-size: .9rem; margin: .15rem 0 0 1.4rem; }
|
|
20
|
-
.ruleid { color: #8b949e; font-size: .8rem; }
|
|
21
|
-
.ruleid a, .ruleid a code { color: #8b949e; text-decoration: none; }
|
|
22
|
-
.ruleid a:hover { text-decoration: underline; }
|
|
23
|
-
.sev { display: inline-block; padding: .05rem .5rem; border-radius: 999px; font-weight: 700; font-size: .75rem; white-space: nowrap; }
|
|
24
|
-
.sev-critical { background: #ffebe9; color: #cf222e; }
|
|
25
|
-
.sev-high { background: #fff1e5; color: #bc4c00; }
|
|
26
|
-
.sev-major { background: #fff8c5; color: #7d4e00; }
|
|
27
|
-
.sev-medium { background: #ddf4ff; color: #0969da; }
|
|
28
|
-
.sev-low { background: #eaeef2; color: #57606a; }
|
|
29
|
-
.ok { background: #dafbe1; color: #116329; padding: .6rem .8rem; border-radius: 6px; display: inline-block; }
|
|
30
|
-
pre { background: #f6f8fa; padding: .6rem .8rem; border-radius: 6px; overflow-x: auto; }
|
|
31
|
-
.appendix { margin-top: 2rem; }
|
|
32
|
-
.appendix h3 { font-size: .95rem; margin-top: 1rem; }
|
|
33
|
-
.rule-doc { margin: .1rem 0 0 1.2rem; color: #57606a; font-size: .9rem; }
|
|
34
|
-
.rule-doc b { color: #24292f; }
|
|
35
|
-
@media (prefers-color-scheme: dark) {
|
|
36
|
-
body { color: #c9d1d9; background: #0d1117; }
|
|
37
|
-
code, pre { background: #161b22; }
|
|
38
|
-
.why, .rule-doc { color: #8b949e; }
|
|
39
|
-
.rule-doc b { color: #c9d1d9; }
|
|
40
|
-
}
|
|
41
|
-
`;
|
|
42
|
-
/** Render a message that may contain `` `...` `` inline-code spans: prose is HTML-escaped,
|
|
43
|
-
* code segments become `<code>` so a literal pattern renders highlighted/monospace. */
|
|
44
|
-
function htmlInline(s) {
|
|
45
|
-
return s
|
|
46
|
-
.split(/(`[^`]*`)/g)
|
|
47
|
-
.map((part) => part.length >= 2 && part.startsWith('`') && part.endsWith('`')
|
|
48
|
-
? `<code>${esc(part.slice(1, -1))}</code>`
|
|
49
|
-
: esc(part))
|
|
50
|
-
.join('');
|
|
51
|
-
}
|
|
52
|
-
function sevPill(s) {
|
|
53
|
-
return `<span class="sev sev-${s}">${SEV_LABEL[s]}</span>`;
|
|
54
|
-
}
|
|
55
|
-
/** Anchor/slug for a rule's appendix entry (matches the Markdown report + the appendix id). */
|
|
56
|
-
function ruleAnchor(ruleId) {
|
|
57
|
-
return ruleId.toLowerCase();
|
|
58
|
-
}
|
|
59
|
-
/** A rule id rendered as a link to its appendix entry. */
|
|
60
|
-
function ruleLinkHtml(ruleId) {
|
|
61
|
-
return `<a href="#${ruleAnchor(ruleId)}"><code>${esc(ruleId)}</code></a>`;
|
|
62
|
-
}
|
|
63
|
-
/**
|
|
64
|
-
* Render the validation report as a self-contained, theme-aware HTML page.
|
|
65
|
-
* Pure string formatting — deterministic, no timestamps. Mirrors renderReportHtml.
|
|
66
|
-
*/
|
|
67
|
-
export function renderValidationReportHtml(model) {
|
|
68
|
-
const body = [];
|
|
69
|
-
body.push(`<h1>Validation Report — ${esc(model.projectTitle)}</h1>`);
|
|
70
|
-
if (model.total === 0) {
|
|
71
|
-
body.push(`<p class="ok">✓ No validation issues — the composed profile passed all enabled validation rules.</p>`);
|
|
72
|
-
return page(model.projectTitle, body.join('\n'));
|
|
73
|
-
}
|
|
74
|
-
const summary = SEVERITY_ORDER.filter((s) => model.counts[s] > 0)
|
|
75
|
-
.map((s) => `${sevPill(s)} ${model.counts[s]}`)
|
|
76
|
-
.join(' ');
|
|
77
|
-
body.push(`<h2>Summary</h2>`);
|
|
78
|
-
body.push(`<p>${summary}</p>`);
|
|
79
|
-
for (const g of model.issuesByComponent) {
|
|
80
|
-
const label = g.sourceLink
|
|
81
|
-
? `<a href="${esc(g.sourceLink)}">${esc(g.idOrKey)}</a>`
|
|
82
|
-
: `<code>${esc(g.idOrKey)}</code>`;
|
|
83
|
-
body.push(`<h3>${esc(g.parentKey)} — ${label}</h3>`);
|
|
84
|
-
for (const i of g.issues)
|
|
85
|
-
body.push(renderIssueHtml(i));
|
|
86
|
-
}
|
|
87
|
-
if (model.crossCutting.length > 0) {
|
|
88
|
-
body.push(`<h2>Project-wide</h2>`);
|
|
89
|
-
for (const i of model.crossCutting)
|
|
90
|
-
body.push(renderIssueHtml(i));
|
|
91
|
-
}
|
|
92
|
-
body.push(...renderAppendixHtml(model));
|
|
93
|
-
return page(model.projectTitle, body.join('\n'));
|
|
94
|
-
}
|
|
95
|
-
/** Appendix: explain every rule that appears in this report. */
|
|
96
|
-
function renderAppendixHtml(model) {
|
|
97
|
-
const ids = [];
|
|
98
|
-
for (const g of model.issuesByComponent)
|
|
99
|
-
for (const i of g.issues)
|
|
100
|
-
ids.push(i.ruleId);
|
|
101
|
-
for (const i of model.crossCutting)
|
|
102
|
-
ids.push(i.ruleId);
|
|
103
|
-
const docs = ruleDocsFor(ids);
|
|
104
|
-
if (docs.length === 0)
|
|
105
|
-
return [];
|
|
106
|
-
const out = [];
|
|
107
|
-
out.push(`<div class="appendix">`);
|
|
108
|
-
out.push(`<h2>Appendix — rule reference</h2>`);
|
|
109
|
-
out.push(`<p>Every rule flagged above, with what it checks and what breaks if it is left unfixed.</p>`);
|
|
110
|
-
for (const { ruleId, doc } of docs) {
|
|
111
|
-
out.push(`<h3 id="${ruleAnchor(ruleId)}"><code>${esc(ruleId)}</code> — ${htmlInline(doc.title)}</h3>`);
|
|
112
|
-
out.push(`<div class="rule-doc"><b>What:</b> ${htmlInline(doc.what)}</div>`);
|
|
113
|
-
out.push(`<div class="rule-doc"><b>Why it matters:</b> ${htmlInline(doc.consequence)}</div>`);
|
|
114
|
-
}
|
|
115
|
-
out.push(`</div>`);
|
|
116
|
-
return out;
|
|
117
|
-
}
|
|
118
|
-
function renderIssueHtml(i) {
|
|
119
|
-
const parts = [];
|
|
120
|
-
parts.push(`<div class="issue">`);
|
|
121
|
-
const link = ruleLinkHtml(i.ruleId);
|
|
122
|
-
// A message may place the rule-id link inline via a `{{rule}}` marker; otherwise the
|
|
123
|
-
// linked rule id trails the headline. Either way the id links to the appendix.
|
|
124
|
-
const headline = i.message.includes('{{rule}}')
|
|
125
|
-
? `${sevPill(i.severity)} <strong>${i.message.split('{{rule}}').map(htmlInline).join(link)}</strong>`
|
|
126
|
-
: `${sevPill(i.severity)} <strong>${htmlInline(i.message)}</strong> <span class="ruleid">${link}</span>`;
|
|
127
|
-
parts.push(headline);
|
|
128
|
-
if (i.why)
|
|
129
|
-
parts.push(`<div class="why">${htmlInline(i.why)}</div>`);
|
|
130
|
-
if (i.snippetDiff)
|
|
131
|
-
parts.push(`<pre>${esc(i.snippetDiff)}</pre>`);
|
|
132
|
-
parts.push(`</div>`);
|
|
133
|
-
return parts.join('\n');
|
|
134
|
-
}
|
|
135
|
-
function page(title, body) {
|
|
136
|
-
return `<!doctype html>
|
|
137
|
-
<html lang="en">
|
|
138
|
-
<head>
|
|
139
|
-
<meta charset="utf-8" />
|
|
140
|
-
<meta name="viewport" content="width=device-width, initial-scale=1" />
|
|
141
|
-
<title>Validation Report — ${esc(title)}</title>
|
|
142
|
-
<style>${STYLE}</style>
|
|
143
|
-
</head>
|
|
144
|
-
<body>
|
|
145
|
-
${body}
|
|
146
|
-
</body>
|
|
147
|
-
</html>
|
|
148
|
-
`;
|
|
149
|
-
}
|
|
150
|
-
//# sourceMappingURL=renderValidationHtml.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"renderValidationHtml.js","sourceRoot":"","sources":["../src/renderValidationHtml.ts"],"names":[],"mappings":"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"}
|