@holmdigital/engine 1.4.7 → 1.4.8

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/README.md CHANGED
@@ -24,7 +24,7 @@ It handles the heavy lifting of:
24
24
  - **Configurable Severity Threshold**: Fail CI only on critical/high issues (configurable).
25
25
  - **Rich Metadata**: Includes scan duration, page title, language, and version info.
26
26
  - **Pseudo-Automation**: Automatically generates Playwright/Puppeteer test scripts for manual verification steps.
27
- - **PDF Reporting**: Generates beautiful, compliant PDF reports out of the box.
27
+ - **PDF Reporting**: Generates beautiful, compliant PDF reports with severity-sorted violations, HTML error counts, and `@HolmDigital/engine` branding.
28
28
  - **TypeScript**: Written in TypeScript with full type definitions included.
29
29
 
30
30
  ## Installation
@@ -34,6 +34,7 @@ var en_default = {
34
34
  critical_issues: "Critical Issues",
35
35
  high_issues: "High Issues",
36
36
  total_issues: "Total Issues",
37
+ html_errors: "HTML Errors",
37
38
  detailed_violations: "Detailed Violations",
38
39
  prescriptive_fix: "\u{1F4A1} Prescriptive Fix",
39
40
  use: "Use",
@@ -70,6 +71,7 @@ var sv_default = {
70
71
  critical_issues: "Kritiska fel",
71
72
  high_issues: "Allvarliga fel",
72
73
  total_issues: "Antal brister",
74
+ html_errors: "HTML-fel",
73
75
  detailed_violations: "Detaljerade brister",
74
76
  prescriptive_fix: "\u{1F4A1} Preskriptiv L\xF6sning",
75
77
  use: "Anv\xE4nd",
@@ -106,6 +108,7 @@ var de_default = {
106
108
  critical_issues: "Kritische Probleme",
107
109
  high_issues: "Hohe Probleme",
108
110
  total_issues: "Gesamtprobleme",
111
+ html_errors: "HTML-Fehler",
109
112
  detailed_violations: "Detaillierte Verst\xF6\xDFe",
110
113
  prescriptive_fix: "\u{1F4A1} Vorschriftsm\xE4\xDFige L\xF6sung",
111
114
  use: "Verwenden",
@@ -142,6 +145,7 @@ var fr_default = {
142
145
  critical_issues: "Probl\xE8mes Critiques",
143
146
  high_issues: "Probl\xE8mes Importants",
144
147
  total_issues: "Total des Probl\xE8mes",
148
+ html_errors: "Erreurs HTML",
145
149
  detailed_violations: "Violations D\xE9taill\xE9es",
146
150
  prescriptive_fix: "\u{1F4A1} Solution Prescriptive",
147
151
  use: "Utiliser",
@@ -178,6 +182,7 @@ var es_default = {
178
182
  critical_issues: "Problemas Cr\xEDticos",
179
183
  high_issues: "Problemas Altos",
180
184
  total_issues: "Problemas Totales",
185
+ html_errors: "Errores HTML",
181
186
  detailed_violations: "Violaciones Detalladas",
182
187
  prescriptive_fix: "\u{1F4A1} Soluci\xF3n Prescriptiva",
183
188
  use: "Usar",
@@ -214,6 +219,7 @@ var nl_default = {
214
219
  critical_issues: "Kritieke problemen",
215
220
  high_issues: "Hoge prioriteit problemen",
216
221
  total_issues: "Totaal aantal problemen",
222
+ html_errors: "HTML-fouten",
217
223
  detailed_violations: "Gedetailleerde overtredingen",
218
224
  prescriptive_fix: "\u{1F4A1} Voorgeschreven oplossing",
219
225
  use: "Gebruik",
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  __require
3
- } from "./chunk-WUJZMECK.mjs";
3
+ } from "./chunk-BKI2FFUX.mjs";
4
4
 
5
5
  // src/core/virtual-dom.ts
6
6
  var VirtualDOMBuilder = class {
@@ -254,7 +254,7 @@ var RegulatoryScanner = class {
254
254
  async enrichResults(axeResults) {
255
255
  const reports = [];
256
256
  const { searchRulesByTags, generateRegulatoryReport } = await import("@holmdigital/standards");
257
- const { getCurrentLang } = await import("./i18n-IVBZL57L.mjs");
257
+ const { getCurrentLang } = await import("./i18n-M6ATDHUS.mjs");
258
258
  const lang = getCurrentLang();
259
259
  for (const violation of axeResults.violations) {
260
260
  let report = generateRegulatoryReport(violation.id, lang);
package/dist/cli/index.js CHANGED
@@ -62,6 +62,7 @@ var init_en = __esm({
62
62
  critical_issues: "Critical Issues",
63
63
  high_issues: "High Issues",
64
64
  total_issues: "Total Issues",
65
+ html_errors: "HTML Errors",
65
66
  detailed_violations: "Detailed Violations",
66
67
  prescriptive_fix: "\u{1F4A1} Prescriptive Fix",
67
68
  use: "Use",
@@ -103,6 +104,7 @@ var init_sv = __esm({
103
104
  critical_issues: "Kritiska fel",
104
105
  high_issues: "Allvarliga fel",
105
106
  total_issues: "Antal brister",
107
+ html_errors: "HTML-fel",
106
108
  detailed_violations: "Detaljerade brister",
107
109
  prescriptive_fix: "\u{1F4A1} Preskriptiv L\xF6sning",
108
110
  use: "Anv\xE4nd",
@@ -144,6 +146,7 @@ var init_de = __esm({
144
146
  critical_issues: "Kritische Probleme",
145
147
  high_issues: "Hohe Probleme",
146
148
  total_issues: "Gesamtprobleme",
149
+ html_errors: "HTML-Fehler",
147
150
  detailed_violations: "Detaillierte Verst\xF6\xDFe",
148
151
  prescriptive_fix: "\u{1F4A1} Vorschriftsm\xE4\xDFige L\xF6sung",
149
152
  use: "Verwenden",
@@ -185,6 +188,7 @@ var init_fr = __esm({
185
188
  critical_issues: "Probl\xE8mes Critiques",
186
189
  high_issues: "Probl\xE8mes Importants",
187
190
  total_issues: "Total des Probl\xE8mes",
191
+ html_errors: "Erreurs HTML",
188
192
  detailed_violations: "Violations D\xE9taill\xE9es",
189
193
  prescriptive_fix: "\u{1F4A1} Solution Prescriptive",
190
194
  use: "Utiliser",
@@ -226,6 +230,7 @@ var init_es = __esm({
226
230
  critical_issues: "Problemas Cr\xEDticos",
227
231
  high_issues: "Problemas Altos",
228
232
  total_issues: "Problemas Totales",
233
+ html_errors: "Errores HTML",
229
234
  detailed_violations: "Violaciones Detalladas",
230
235
  prescriptive_fix: "\u{1F4A1} Soluci\xF3n Prescriptiva",
231
236
  use: "Usar",
@@ -267,6 +272,7 @@ var init_nl = __esm({
267
272
  critical_issues: "Kritieke problemen",
268
273
  high_issues: "Hoge prioriteit problemen",
269
274
  total_issues: "Totaal aantal problemen",
275
+ html_errors: "HTML-fouten",
270
276
  detailed_violations: "Gedetailleerde overtredingen",
271
277
  prescriptive_fix: "\u{1F4A1} Voorgeschreven oplossing",
272
278
  use: "Gebruik",
@@ -792,6 +798,7 @@ init_i18n();
792
798
  function generateReportHTML(result) {
793
799
  const criticalCount = result.stats.critical;
794
800
  const highCount = result.stats.high;
801
+ const htmlErrorsCount = result.htmlValidation?.errors?.length ?? 0;
795
802
  const scoreColor = result.score > 90 ? "#16a34a" : result.score > 70 ? "#eab308" : "#dc2626";
796
803
  const formatDate = (dateString) => {
797
804
  return new Date(dateString).toLocaleDateString(getCurrentLang() === "sv" ? "sv-SE" : "en-US", {
@@ -845,7 +852,7 @@ function generateReportHTML(result) {
845
852
  }
846
853
  .summary-grid {
847
854
  display: grid;
848
- grid-template-columns: repeat(4, 1fr);
855
+ grid-template-columns: repeat(5, 1fr);
849
856
  gap: 1.5rem;
850
857
  margin-bottom: 3rem;
851
858
  }
@@ -864,6 +871,7 @@ function generateReportHTML(result) {
864
871
  color: #64748b;
865
872
  margin-bottom: 0.5rem;
866
873
  font-weight: 500;
874
+ min-height: 2.5rem;
867
875
  }
868
876
  .metric-value {
869
877
  font-size: 2rem;
@@ -944,7 +952,7 @@ function generateReportHTML(result) {
944
952
  </head>
945
953
  <body>
946
954
  <div class="header">
947
- <div class="brand">Holm<span>Digital</span></div>
955
+ <div class="brand">@HolmDigital/<span>engine</span></div>
948
956
  <div class="meta">
949
957
  <div>${t("report.scan_target", { url: result.url })}</div>
950
958
  <div>${t("report.generated", { date: formatDate(result.timestamp) })}</div>
@@ -968,11 +976,20 @@ function generateReportHTML(result) {
968
976
  <div class="metric-label">${t("report.total_issues")}</div>
969
977
  <div class="metric-value">${result.stats.total}</div>
970
978
  </div>
979
+ <div class="card">
980
+ <div class="metric-label">${t("report.html_errors")}</div>
981
+ <div class="metric-value" style="color: ${htmlErrorsCount > 0 ? "#9333ea" : "#16a34a"};">${htmlErrorsCount}</div>
982
+ </div>
971
983
  </div>
972
984
 
973
985
  <div class="section-title">${t("report.detailed_violations")}</div>
974
986
 
975
- ${result.reports.map((report) => {
987
+ ${[...result.reports].sort((a, b) => {
988
+ const severityOrder = { critical: 0, high: 1, medium: 2, low: 3 };
989
+ const aRisk = a.holmdigitalInsight.diggRisk.toLowerCase();
990
+ const bRisk = b.holmdigitalInsight.diggRisk.toLowerCase();
991
+ return (severityOrder[aRisk] ?? 4) - (severityOrder[bRisk] ?? 4);
992
+ }).map((report) => {
976
993
  const riskClass = `badge-${report.holmdigitalInsight.diggRisk}`;
977
994
  return `
978
995
  <div class="violation-card">
@@ -2,12 +2,12 @@
2
2
  import {
3
3
  PseudoAutomationEngine,
4
4
  RegulatoryScanner
5
- } from "../chunk-2JUTUKQY.mjs";
5
+ } from "../chunk-GKQRHFIT.mjs";
6
6
  import {
7
7
  getCurrentLang,
8
8
  setLanguage,
9
9
  t
10
- } from "../chunk-WUJZMECK.mjs";
10
+ } from "../chunk-BKI2FFUX.mjs";
11
11
 
12
12
  // src/cli/index.ts
13
13
  import { Command } from "commander";
@@ -18,6 +18,7 @@ import ora from "ora";
18
18
  function generateReportHTML(result) {
19
19
  const criticalCount = result.stats.critical;
20
20
  const highCount = result.stats.high;
21
+ const htmlErrorsCount = result.htmlValidation?.errors?.length ?? 0;
21
22
  const scoreColor = result.score > 90 ? "#16a34a" : result.score > 70 ? "#eab308" : "#dc2626";
22
23
  const formatDate = (dateString) => {
23
24
  return new Date(dateString).toLocaleDateString(getCurrentLang() === "sv" ? "sv-SE" : "en-US", {
@@ -71,7 +72,7 @@ function generateReportHTML(result) {
71
72
  }
72
73
  .summary-grid {
73
74
  display: grid;
74
- grid-template-columns: repeat(4, 1fr);
75
+ grid-template-columns: repeat(5, 1fr);
75
76
  gap: 1.5rem;
76
77
  margin-bottom: 3rem;
77
78
  }
@@ -90,6 +91,7 @@ function generateReportHTML(result) {
90
91
  color: #64748b;
91
92
  margin-bottom: 0.5rem;
92
93
  font-weight: 500;
94
+ min-height: 2.5rem;
93
95
  }
94
96
  .metric-value {
95
97
  font-size: 2rem;
@@ -170,7 +172,7 @@ function generateReportHTML(result) {
170
172
  </head>
171
173
  <body>
172
174
  <div class="header">
173
- <div class="brand">Holm<span>Digital</span></div>
175
+ <div class="brand">@HolmDigital/<span>engine</span></div>
174
176
  <div class="meta">
175
177
  <div>${t("report.scan_target", { url: result.url })}</div>
176
178
  <div>${t("report.generated", { date: formatDate(result.timestamp) })}</div>
@@ -194,11 +196,20 @@ function generateReportHTML(result) {
194
196
  <div class="metric-label">${t("report.total_issues")}</div>
195
197
  <div class="metric-value">${result.stats.total}</div>
196
198
  </div>
199
+ <div class="card">
200
+ <div class="metric-label">${t("report.html_errors")}</div>
201
+ <div class="metric-value" style="color: ${htmlErrorsCount > 0 ? "#9333ea" : "#16a34a"};">${htmlErrorsCount}</div>
202
+ </div>
197
203
  </div>
198
204
 
199
205
  <div class="section-title">${t("report.detailed_violations")}</div>
200
206
 
201
- ${result.reports.map((report) => {
207
+ ${[...result.reports].sort((a, b) => {
208
+ const severityOrder = { critical: 0, high: 1, medium: 2, low: 3 };
209
+ const aRisk = a.holmdigitalInsight.diggRisk.toLowerCase();
210
+ const bRisk = b.holmdigitalInsight.diggRisk.toLowerCase();
211
+ return (severityOrder[aRisk] ?? 4) - (severityOrder[bRisk] ?? 4);
212
+ }).map((report) => {
202
213
  const riskClass = `badge-${report.holmdigitalInsight.diggRisk}`;
203
214
  return `
204
215
  <div class="violation-card">
@@ -2,7 +2,7 @@ import {
2
2
  getCurrentLang,
3
3
  setLanguage,
4
4
  t
5
- } from "./chunk-WUJZMECK.mjs";
5
+ } from "./chunk-BKI2FFUX.mjs";
6
6
  export {
7
7
  getCurrentLang,
8
8
  setLanguage,
package/dist/index.d.mts CHANGED
@@ -123,6 +123,7 @@ var report = {
123
123
  critical_issues: "Critical Issues",
124
124
  high_issues: "High Issues",
125
125
  total_issues: "Total Issues",
126
+ html_errors: "HTML Errors",
126
127
  detailed_violations: "Detailed Violations",
127
128
  prescriptive_fix: "💡 Prescriptive Fix",
128
129
  use: "Use",
package/dist/index.d.ts CHANGED
@@ -123,6 +123,7 @@ var report = {
123
123
  critical_issues: "Critical Issues",
124
124
  high_issues: "High Issues",
125
125
  total_issues: "Total Issues",
126
+ html_errors: "HTML Errors",
126
127
  detailed_violations: "Detailed Violations",
127
128
  prescriptive_fix: "💡 Prescriptive Fix",
128
129
  use: "Use",
package/dist/index.js CHANGED
@@ -62,6 +62,7 @@ var init_en = __esm({
62
62
  critical_issues: "Critical Issues",
63
63
  high_issues: "High Issues",
64
64
  total_issues: "Total Issues",
65
+ html_errors: "HTML Errors",
65
66
  detailed_violations: "Detailed Violations",
66
67
  prescriptive_fix: "\u{1F4A1} Prescriptive Fix",
67
68
  use: "Use",
@@ -103,6 +104,7 @@ var init_sv = __esm({
103
104
  critical_issues: "Kritiska fel",
104
105
  high_issues: "Allvarliga fel",
105
106
  total_issues: "Antal brister",
107
+ html_errors: "HTML-fel",
106
108
  detailed_violations: "Detaljerade brister",
107
109
  prescriptive_fix: "\u{1F4A1} Preskriptiv L\xF6sning",
108
110
  use: "Anv\xE4nd",
@@ -144,6 +146,7 @@ var init_de = __esm({
144
146
  critical_issues: "Kritische Probleme",
145
147
  high_issues: "Hohe Probleme",
146
148
  total_issues: "Gesamtprobleme",
149
+ html_errors: "HTML-Fehler",
147
150
  detailed_violations: "Detaillierte Verst\xF6\xDFe",
148
151
  prescriptive_fix: "\u{1F4A1} Vorschriftsm\xE4\xDFige L\xF6sung",
149
152
  use: "Verwenden",
@@ -185,6 +188,7 @@ var init_fr = __esm({
185
188
  critical_issues: "Probl\xE8mes Critiques",
186
189
  high_issues: "Probl\xE8mes Importants",
187
190
  total_issues: "Total des Probl\xE8mes",
191
+ html_errors: "Erreurs HTML",
188
192
  detailed_violations: "Violations D\xE9taill\xE9es",
189
193
  prescriptive_fix: "\u{1F4A1} Solution Prescriptive",
190
194
  use: "Utiliser",
@@ -226,6 +230,7 @@ var init_es = __esm({
226
230
  critical_issues: "Problemas Cr\xEDticos",
227
231
  high_issues: "Problemas Altos",
228
232
  total_issues: "Problemas Totales",
233
+ html_errors: "Errores HTML",
229
234
  detailed_violations: "Violaciones Detalladas",
230
235
  prescriptive_fix: "\u{1F4A1} Soluci\xF3n Prescriptiva",
231
236
  use: "Usar",
@@ -267,6 +272,7 @@ var init_nl = __esm({
267
272
  critical_issues: "Kritieke problemen",
268
273
  high_issues: "Hoge prioriteit problemen",
269
274
  total_issues: "Totaal aantal problemen",
275
+ html_errors: "HTML-fouten",
270
276
  detailed_violations: "Gedetailleerde overtredingen",
271
277
  prescriptive_fix: "\u{1F4A1} Voorgeschreven oplossing",
272
278
  use: "Gebruik",
package/dist/index.mjs CHANGED
@@ -2,12 +2,12 @@ import {
2
2
  PseudoAutomationEngine,
3
3
  RegulatoryScanner,
4
4
  VirtualDOMBuilder
5
- } from "./chunk-2JUTUKQY.mjs";
5
+ } from "./chunk-GKQRHFIT.mjs";
6
6
  import {
7
7
  getCurrentLang,
8
8
  setLanguage,
9
9
  t
10
- } from "./chunk-WUJZMECK.mjs";
10
+ } from "./chunk-BKI2FFUX.mjs";
11
11
  export {
12
12
  PseudoAutomationEngine,
13
13
  RegulatoryScanner,
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@holmdigital/engine",
3
- "version": "1.4.7",
3
+ "version": "1.4.8",
4
4
  "private": false,
5
5
  "publishConfig": {
6
6
  "access": "public",