@holmdigital/engine 2.1.1 → 2.1.3

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,3 +1,7 @@
1
+ import {
2
+ __require
3
+ } from "./chunk-Y6FXYEAI.mjs";
4
+
1
5
  // src/core/virtual-dom.ts
2
6
  var VirtualDOMBuilder = class {
3
7
  page;
@@ -131,6 +135,28 @@ var HtmlValidator = class {
131
135
  };
132
136
 
133
137
  // src/core/regulatory-scanner.ts
138
+ import { readFileSync } from "fs";
139
+ import { resolve, dirname } from "path";
140
+ import { fileURLToPath } from "url";
141
+ function getEngineVersion() {
142
+ try {
143
+ const dir = typeof __dirname !== "undefined" ? __dirname : dirname(fileURLToPath(import.meta.url));
144
+ const pkgPath = resolve(dir, "..", "package.json");
145
+ const pkg = JSON.parse(readFileSync(pkgPath, "utf-8"));
146
+ return pkg.version;
147
+ } catch {
148
+ return "2.1.1";
149
+ }
150
+ }
151
+ function getStandardsVersion() {
152
+ try {
153
+ const stdPath = __require.resolve("@holmdigital/standards/package.json");
154
+ const pkg = JSON.parse(readFileSync(stdPath, "utf-8"));
155
+ return pkg.version;
156
+ } catch {
157
+ return "unknown";
158
+ }
159
+ }
134
160
  var RegulatoryScanner = class {
135
161
  browser = null;
136
162
  options;
@@ -178,7 +204,7 @@ var RegulatoryScanner = class {
178
204
  retries--;
179
205
  if (retries === 0) throw e;
180
206
  this.log(`Navigation failed, retrying... (${retries} attempts left)`);
181
- await new Promise((resolve) => setTimeout(resolve, 2e3));
207
+ await new Promise((resolve2) => setTimeout(resolve2, 2e3));
182
208
  }
183
209
  }
184
210
  try {
@@ -253,7 +279,7 @@ var RegulatoryScanner = class {
253
279
  async enrichResults(axeResults) {
254
280
  const reports = [];
255
281
  const { searchRulesByTags, generateRegulatoryReport, getConvergenceRule } = await import("@holmdigital/standards");
256
- const { getCurrentLang } = await import("./i18n-VBP5BVTT.mjs");
282
+ const { getCurrentLang } = await import("./i18n-JLPALD7H.mjs");
257
283
  const lang = getCurrentLang();
258
284
  for (const violation of axeResults.violations) {
259
285
  let report = generateRegulatoryReport(violation.id, lang);
@@ -344,9 +370,9 @@ var RegulatoryScanner = class {
344
370
  break;
345
371
  }
346
372
  const metadata = {
347
- engineVersion: "1.4.7",
373
+ engineVersion: getEngineVersion(),
348
374
  axeCoreVersion: axeCore.version || "4.10.2",
349
- standardsVersion: "1.2.2",
375
+ standardsVersion: getStandardsVersion(),
350
376
  scanDuration,
351
377
  pageTitle,
352
378
  pageLanguage
@@ -721,6 +747,7 @@ async function generateStatement(result, outputPath, lang = "en", format = "html
721
747
 
722
748
  export {
723
749
  VirtualDOMBuilder,
750
+ getEngineVersion,
724
751
  RegulatoryScanner,
725
752
  PseudoAutomationEngine,
726
753
  generateBadgeUrl,
@@ -0,0 +1,10 @@
1
+ var __require = /* @__PURE__ */ ((x) => typeof require !== "undefined" ? require : typeof Proxy !== "undefined" ? new Proxy(x, {
2
+ get: (a, b) => (typeof require !== "undefined" ? require : a)[b]
3
+ }) : x)(function(x) {
4
+ if (typeof require !== "undefined") return require.apply(this, arguments);
5
+ throw Error('Dynamic require of "' + x + '" is not supported');
6
+ });
7
+
8
+ export {
9
+ __require
10
+ };
package/dist/cli/index.js CHANGED
@@ -766,6 +766,29 @@ var HtmlValidator = class {
766
766
  };
767
767
 
768
768
  // src/core/regulatory-scanner.ts
769
+ var import_node_fs = require("fs");
770
+ var import_node_path = require("path");
771
+ var import_node_url = require("url");
772
+ var import_meta = {};
773
+ function getEngineVersion() {
774
+ try {
775
+ const dir = typeof __dirname !== "undefined" ? __dirname : (0, import_node_path.dirname)((0, import_node_url.fileURLToPath)(import_meta.url));
776
+ const pkgPath = (0, import_node_path.resolve)(dir, "..", "package.json");
777
+ const pkg = JSON.parse((0, import_node_fs.readFileSync)(pkgPath, "utf-8"));
778
+ return pkg.version;
779
+ } catch {
780
+ return "2.1.1";
781
+ }
782
+ }
783
+ function getStandardsVersion() {
784
+ try {
785
+ const stdPath = require.resolve("@holmdigital/standards/package.json");
786
+ const pkg = JSON.parse((0, import_node_fs.readFileSync)(stdPath, "utf-8"));
787
+ return pkg.version;
788
+ } catch {
789
+ return "unknown";
790
+ }
791
+ }
769
792
  var RegulatoryScanner = class {
770
793
  browser = null;
771
794
  options;
@@ -813,7 +836,7 @@ var RegulatoryScanner = class {
813
836
  retries--;
814
837
  if (retries === 0) throw e;
815
838
  this.log(`Navigation failed, retrying... (${retries} attempts left)`);
816
- await new Promise((resolve) => setTimeout(resolve, 2e3));
839
+ await new Promise((resolve2) => setTimeout(resolve2, 2e3));
817
840
  }
818
841
  }
819
842
  try {
@@ -979,9 +1002,9 @@ var RegulatoryScanner = class {
979
1002
  break;
980
1003
  }
981
1004
  const metadata = {
982
- engineVersion: "1.4.7",
1005
+ engineVersion: getEngineVersion(),
983
1006
  axeCoreVersion: import_axe_core.default.version || "4.10.2",
984
- standardsVersion: "1.2.2",
1007
+ standardsVersion: getStandardsVersion(),
985
1008
  scanDuration,
986
1009
  pageTitle,
987
1010
  pageLanguage
@@ -1674,7 +1697,6 @@ async function generateStatement(result, outputPath, lang = "en", format = "html
1674
1697
  init_i18n();
1675
1698
 
1676
1699
  // src/cli/cloud-client.ts
1677
- var ENGINE_VERSION = "1.4.4";
1678
1700
  function transformToCloudPayload(result) {
1679
1701
  const violations = result.reports.map((report) => {
1680
1702
  const firstNode = report.failingNodes?.[0];
@@ -1697,7 +1719,7 @@ function transformToCloudPayload(result) {
1697
1719
  serious_count: result.stats.high,
1698
1720
  moderate_count: result.stats.medium,
1699
1721
  minor_count: result.stats.low,
1700
- engine_version: ENGINE_VERSION,
1722
+ engine_version: getEngineVersion(),
1701
1723
  violations
1702
1724
  };
1703
1725
  }
@@ -1763,7 +1785,7 @@ function isValidUrl(urlString) {
1763
1785
  }
1764
1786
  }
1765
1787
  var program = new import_commander.Command();
1766
- program.name("hd-a11y-scan").description("HolmDigital Regulatory Scanner").version("0.1.0");
1788
+ program.name("hd-a11y-scan").description("HolmDigital Regulatory Scanner").version(getEngineVersion());
1767
1789
  program.argument("<url>", "URL to scan").option("--lang <code>", "Language code (en, sv)").option("--ci", "Run in CI/CD mode (exit code 1 on critical failures)").option("--generate-tests", "Generate Pseudo-Automation tests").option("--json", "Output as JSON").option("--junit <path>", "Generate JUnit XML report").option("--pdf <path>", "Generate PDF report to path").option("--statement <path>", "Generate accessibility statement HTML to path").option("--format <type>", "Output format for statement (html, md)", "html").option("--viewport <size>", 'Set viewport (e.g. "mobile", "desktop", "1024x768")').option("--threshold <level>", "Severity threshold (critical, high, medium, low)").option("--api-key <key>", "API key for HolmDigital Cloud").option("--cloud-url <url>", "Cloud API URL").option("--invalid-https-cert", "Allow scanning on pages with invalid https certificate").option("--email <email>", "Contact email for accessibility statement").option("--phone <number>", "Contact phone number for accessibility statement").option("--org <name>", "Organization name for accessibility statement").option("--response-time <time>", "Expected response time for accessibility statement").option("--country <code>", "Country code for accessibility statement enforcement body").option("--publish-date <date>", "Publish date for the website (YYYY-MM-DD)").action(async (url, cliOptions) => {
1768
1790
  const explorer = (0, import_cosmiconfig.cosmiconfig)("a11y");
1769
1791
  const configResult = await explorer.search();
@@ -5,13 +5,15 @@ import {
5
5
  generateBadgeMarkdown,
6
6
  generateBadgeUrl,
7
7
  generateStatement,
8
- generateStatementContent
9
- } from "../chunk-JEA4LJ7Q.mjs";
8
+ generateStatementContent,
9
+ getEngineVersion
10
+ } from "../chunk-H5MBYTT7.mjs";
10
11
  import {
11
12
  getCurrentLang,
12
13
  setLanguage,
13
14
  t
14
15
  } from "../chunk-32WU5BD6.mjs";
16
+ import "../chunk-Y6FXYEAI.mjs";
15
17
 
16
18
  // src/cli/index.ts
17
19
  import { Command } from "commander";
@@ -334,7 +336,6 @@ async function generatePDF(htmlContent, outputPath) {
334
336
  }
335
337
 
336
338
  // src/cli/cloud-client.ts
337
- var ENGINE_VERSION = "1.4.4";
338
339
  function transformToCloudPayload(result) {
339
340
  const violations = result.reports.map((report) => {
340
341
  const firstNode = report.failingNodes?.[0];
@@ -357,7 +358,7 @@ function transformToCloudPayload(result) {
357
358
  serious_count: result.stats.high,
358
359
  moderate_count: result.stats.medium,
359
360
  minor_count: result.stats.low,
360
- engine_version: ENGINE_VERSION,
361
+ engine_version: getEngineVersion(),
361
362
  violations
362
363
  };
363
364
  }
@@ -423,7 +424,7 @@ function isValidUrl(urlString) {
423
424
  }
424
425
  }
425
426
  var program = new Command();
426
- program.name("hd-a11y-scan").description("HolmDigital Regulatory Scanner").version("0.1.0");
427
+ program.name("hd-a11y-scan").description("HolmDigital Regulatory Scanner").version(getEngineVersion());
427
428
  program.argument("<url>", "URL to scan").option("--lang <code>", "Language code (en, sv)").option("--ci", "Run in CI/CD mode (exit code 1 on critical failures)").option("--generate-tests", "Generate Pseudo-Automation tests").option("--json", "Output as JSON").option("--junit <path>", "Generate JUnit XML report").option("--pdf <path>", "Generate PDF report to path").option("--statement <path>", "Generate accessibility statement HTML to path").option("--format <type>", "Output format for statement (html, md)", "html").option("--viewport <size>", 'Set viewport (e.g. "mobile", "desktop", "1024x768")').option("--threshold <level>", "Severity threshold (critical, high, medium, low)").option("--api-key <key>", "API key for HolmDigital Cloud").option("--cloud-url <url>", "Cloud API URL").option("--invalid-https-cert", "Allow scanning on pages with invalid https certificate").option("--email <email>", "Contact email for accessibility statement").option("--phone <number>", "Contact phone number for accessibility statement").option("--org <name>", "Organization name for accessibility statement").option("--response-time <time>", "Expected response time for accessibility statement").option("--country <code>", "Country code for accessibility statement enforcement body").option("--publish-date <date>", "Publish date for the website (YYYY-MM-DD)").action(async (url, cliOptions) => {
428
429
  const explorer = cosmiconfig("a11y");
429
430
  const configResult = await explorer.search();
@@ -617,11 +618,11 @@ program.argument("<url>", "URL to scan").option("--lang <code>", "Language code
617
618
  }
618
619
  }
619
620
  if (options.ci && result.reports.length > 0) {
620
- const { generateGitHubActionsAnnotations } = await import("../github-actions-CGWJSLMB.mjs");
621
+ const { generateGitHubActionsAnnotations } = await import("../github-actions-DYED2EIL.mjs");
621
622
  generateGitHubActionsAnnotations(result.reports);
622
623
  }
623
624
  if (options.junit) {
624
- const { generateJUnitXML } = await import("../junit-generator-6ITTV4W5.mjs");
625
+ const { generateJUnitXML } = await import("../junit-generator-QIUEEUXW.mjs");
625
626
  const fs = await import("fs/promises");
626
627
  const xml = generateJUnitXML(result);
627
628
  await fs.writeFile(options.junit, xml);
@@ -28,9 +28,7 @@
28
28
  "content": "{Dette websted er fuldt ud i overensstemmelse med loven om webtilgængelighed./Dette websted er delvist i overensstemmelse med loven om webtilgængelighed på grund af de mangler, der er beskrevet nedenfor./Dette websted er ikke i overensstemmelse med loven om webtilgængelighed. Utilgængelige dele er beskrevet nedenfor.}"
29
29
  },
30
30
  {
31
- "id": "non-accessible",
32
- "title": "Indhold, der ikke er tilgængeligt",
33
- "content": "Det indhold, der er beskrevet nedenfor, er på den ene eller anden måde ikke helt tilgængeligt.\n\n[\n### Manglende overholdelse af lovkravene\n{<mangler>}\n]"
31
+ "content": "Det indhold, der er beskrevet nedenfor, er på den ene eller anden måde ikke helt tilgængeligt.\n\n[\n**Manglende overholdelse af lovkravene**\n\n{<mangler>}\n]"
34
32
  },
35
33
  {
36
34
  "id": "testing",
@@ -10,7 +10,7 @@
10
10
  {
11
11
  "id": "what-to-do",
12
12
  "title": "Nicht barrierefreie Inhalte",
13
- "content": "Die nachstehend aufgeführten Inhalte sind aus den folgenden Gründen nicht barrierefrei:\n\n[\n### Unvereinbarkeit mit den Barrierefreiheitsanforderungen\n{<mängel>}\n]\n\n[Unsere normale Antwortzeit beträgt {<svarstid>}.]\n\n[Sie können uns auch wie folgt kontaktieren:\n\n* E-Mail an {<e-mailadresse>}\n* Telefon {<telefonnummer>}]"
13
+ "content": "Die nachstehend aufgeführten Inhalte sind aus den folgenden Gründen nicht barrierefrei:\n\n[\n**Unvereinbarkeit mit den Barrierefreiheitsanforderungen**\n\n{<mängel>}\n]\n\n[Unsere normale Antwortzeit beträgt {<svarstid>}.]\n\n[Sie können uns auch wie folgt kontaktieren:\n\n* E-Mail an {<e-mailadresse>}\n* Telefon {<telefonnummer>}]"
14
14
  },
15
15
  {
16
16
  "id": "reporting",
@@ -28,9 +28,7 @@
28
28
  "content": "{This website is fully compliant with the accessibility regulations./This website is partially compliant with the accessibility regulations, due to the non-compliances listed below./This website is not compliant with the accessibility regulations. The non-accessible sections are listed below.}"
29
29
  },
30
30
  {
31
- "id": "non-accessible",
32
- "title": "Non-accessible content",
33
- "content": "The content described below is, in one way or another, not fully accessible.\n\n[\n### Non-compliance with the accessibility regulations\n\n{<issues>}\n]"
31
+ "content": "The content described below is, in one way or another, not fully accessible.\n\n[\n**Non-compliance with the accessibility regulations**\n\n{<issues>}\n]"
34
32
  },
35
33
  {
36
34
  "id": "testing",
@@ -10,7 +10,7 @@
10
10
  {
11
11
  "id": "what-to-do",
12
12
  "title": "Contenido no accesible",
13
- "content": "El contenido que se recoge a continuación no es accesible por los siguientes motivos:\n\n[\n### Falta de conformidad con el estándar\n{<deficiencias>}\n]\n\n[Nuestro tiempo de respuesta normal es de {<svarstid>}.]\n\n[También puede contactar con nosotros de las siguientes maneras:\n\n* enviar un correo electrónico a {<e-mailadresse>}\n* llamar al {<telefoonnummer>}]"
13
+ "content": "El contenido que se recoge a continuación no es accesible por los siguientes motivos:\n\n[\n**Falta de conformidad con el estándar**\n\n{<deficiencias>}\n]\n\n[Nuestro tiempo de respuesta normal es de {<svarstid>}.]\n\n[También puede contactar con nosotros de las siguientes maneras:\n\n* enviar un correo electrónico a {<e-mailadresse>}\n* llamar al {<telefoonnummer>}]"
14
14
  },
15
15
  {
16
16
  "id": "reporting",
@@ -28,9 +28,7 @@
28
28
  "content": "{Tämä verkkosivusto on täysin digitaalisten palvelujen tarjoamisesta annetun lain mukainen./Tämä verkkosivusto on osittain digitaalisten palvelujen tarjoamisesta annetun lain mukainen jäljempänä mainittujen puutteiden vuoksi./Tämä verkkosivusto ei ole digitaalisten palvelujen tarjoamisesta annetun lain mukainen. Puutteelliset osat on kuvattu jäljempänä.}"
29
29
  },
30
30
  {
31
- "id": "non-accessible",
32
- "title": "Saavutettavuusvaatimusten vastainen sisältö",
33
- "content": "Jäljempänä mainittu sisältö ei ole täysin saavutettavaa.\n\n[\n### Puutteet lain vaatimusten täyttämisessä\n{<puutteet>}\n]"
31
+ "content": "Jäljempänä mainittu sisältö ei ole täysin saavutettavaa.\n\n[\n**Puutteet lain vaatimusten täyttämisessä**\n\n{<puutteet>}\n]"
34
32
  },
35
33
  {
36
34
  "id": "testing",
@@ -10,7 +10,7 @@
10
10
  {
11
11
  "id": "what-to-do",
12
12
  "title": "Contenus non accessibles",
13
- "content": "Les contenus listés ci-dessous ne sont pas accessibles pour les raisons suivantes :\n\n[\n### Non-conformité avec le RGAA\n{<défauts>}\n]\n\n[Notre délai de réponse habituel est de {<svarstid>}.]\n\n[Vous pouvez également nous contacter des manières suivantes :\n\n* envoyer un e-mail à {<e-mailadresse>}\n* appeler le {<telefoonnummer>}]"
13
+ "content": "Les contenus listés ci-dessous ne sont pas accessibles pour les raisons suivantes :\n\n[\n**Non-conformité avec le RGAA**\n\n{<défauts>}\n]\n\n[Notre délai de réponse habituel est de {<svarstid>}.]\n\n[Vous pouvez également nous contacter des manières suivantes :\n\n* envoyer un e-mail à {<e-mailadresse>}\n* appeler le {<telefoonnummer>}]"
14
14
  },
15
15
  {
16
16
  "id": "reporting",
@@ -28,9 +28,7 @@
28
28
  "content": "{Deze website is volledig in overeenstemming met de wet digitale toegankelijkheid overheid./Deze website is gedeeltelijk in overeenstemming met de wet digitale toegankelijkheid overheid, vanwege de hieronder beschreven gebreken./Deze website is niet in overeenstemming met de wet digitale toegankelijkheid overheid. De niet-toegankelijke delen worden hieronder beschreven.}"
29
29
  },
30
30
  {
31
- "id": "non-accessible",
32
- "title": "Inhoud die niet toegankelijk is",
33
- "content": "De hieronder beschreven inhoud is op de een of andere manier niet volledig toegankelijk.\n\n[\n### Niet-naleving van de wettelijke eisen\n{<gebreken>}\n]"
31
+ "content": "De hieronder beschreven inhoud is op de een of andere manier niet volledig toegankelijk.\n\n[\n**Niet-naleving van de wettelijke eisen**\n\n{<gebreken>}\n]"
34
32
  },
35
33
  {
36
34
  "id": "testing",
@@ -28,9 +28,7 @@
28
28
  "content": "{Dette nettstedet er helt i samsvar med lov om universell utforming av IKT-løsninger./Dette nettstedet er delvis i samsvar med lov om universell utforming av IKT-løsninger, på grunn av manglene beskrevet nedenfor./Dette nettstedet er ikke i samsvar med lov om universell utforming av IKT-løsninger. Utilgjengelige deler er beskrevet nedenfor.}"
29
29
  },
30
30
  {
31
- "id": "non-accessible",
32
- "title": "Innhold som ikke er tilgjengelig",
33
- "content": "Innholdet som er beskrevet nedenfor er på en eller annen måte ikke fullt ut tilgjengelig.\n\n[\n### Manglende samsvar med lovkravene\n{<mangler>}\n]"
31
+ "content": "Innholdet som er beskrevet nedenfor er på en eller annen måte ikke fullt ut tilgjengelig.\n\n[\n**Manglende samsvar med lovkravene**\n\n{<mangler>}\n]"
34
32
  },
35
33
  {
36
34
  "id": "testing",
@@ -28,9 +28,7 @@
28
28
  "content": "{Den här webbplatsen är helt förenlig med lagen om tillgänglighet till digital offentlig service./Den här webbplatsen är delvis förenlig med lagen om tillgänglighet till digital offentlig service, på grund av de brister som beskrivs nedan./Den här webbplatsen är inte förenlig med lagen om tillgänglighet till digital offentlig service. Otillgängliga delar beskrivs nedan.}"
29
29
  },
30
30
  {
31
- "id": "non-accessible",
32
- "title": "Innehåll som inte är tillgängligt",
33
- "content": "Det innehåll som beskrivs nedan är på ett eller annat sätt inte helt tillgängligt.\n\n[\n### Bristande förenlighet med lagkraven\n{<brister>}\n]"
31
+ "content": "Det innehåll som beskrivs nedan är på ett eller annat sätt inte helt tillgängligt.\n\n[\n**Bristande förenlighet med lagkraven**\n\n{<brister>}\n]"
34
32
  },
35
33
  {
36
34
  "id": "testing",
@@ -1,3 +1,5 @@
1
+ import "./chunk-Y6FXYEAI.mjs";
2
+
1
3
  // src/reporting/github-actions.ts
2
4
  function generateGitHubActionsAnnotations(reports) {
3
5
  reports.forEach((report) => {
@@ -3,6 +3,7 @@ import {
3
3
  setLanguage,
4
4
  t
5
5
  } from "./chunk-32WU5BD6.mjs";
6
+ import "./chunk-Y6FXYEAI.mjs";
6
7
  export {
7
8
  getCurrentLang,
8
9
  setLanguage,
package/dist/index.d.mts CHANGED
@@ -12,6 +12,7 @@ interface ValidationResult {
12
12
  }>;
13
13
  }
14
14
 
15
+ declare function getEngineVersion(): string;
15
16
  interface ScannerOptions {
16
17
  url: string;
17
18
  headless?: boolean;
@@ -163,4 +164,4 @@ interface StatementMetadata {
163
164
  declare function generateStatementContent(result: ScanResult, lang?: string, format?: 'html' | 'md' | 'markdown', metadata?: StatementMetadata): Promise<string>;
164
165
  declare function generateStatement(result: ScanResult, outputPath: string, lang?: string, format?: 'html' | 'md' | 'markdown', metadata?: StatementMetadata): Promise<void>;
165
166
 
166
- export { PseudoAutomationEngine, RegulatoryScanner, type ScanMetadata, type ScanResult, type ScannerOptions, type StatementMetadata, VirtualDOMBuilder, type VirtualDOMConfig, type VirtualNode, generateStatement, generateStatementContent, getCurrentLang, setLanguage, t };
167
+ export { PseudoAutomationEngine, RegulatoryScanner, type ScanMetadata, type ScanResult, type ScannerOptions, type StatementMetadata, VirtualDOMBuilder, type VirtualDOMConfig, type VirtualNode, generateStatement, generateStatementContent, getCurrentLang, getEngineVersion, setLanguage, t };
package/dist/index.d.ts CHANGED
@@ -12,6 +12,7 @@ interface ValidationResult {
12
12
  }>;
13
13
  }
14
14
 
15
+ declare function getEngineVersion(): string;
15
16
  interface ScannerOptions {
16
17
  url: string;
17
18
  headless?: boolean;
@@ -163,4 +164,4 @@ interface StatementMetadata {
163
164
  declare function generateStatementContent(result: ScanResult, lang?: string, format?: 'html' | 'md' | 'markdown', metadata?: StatementMetadata): Promise<string>;
164
165
  declare function generateStatement(result: ScanResult, outputPath: string, lang?: string, format?: 'html' | 'md' | 'markdown', metadata?: StatementMetadata): Promise<void>;
165
166
 
166
- export { PseudoAutomationEngine, RegulatoryScanner, type ScanMetadata, type ScanResult, type ScannerOptions, type StatementMetadata, VirtualDOMBuilder, type VirtualDOMConfig, type VirtualNode, generateStatement, generateStatementContent, getCurrentLang, setLanguage, t };
167
+ export { PseudoAutomationEngine, RegulatoryScanner, type ScanMetadata, type ScanResult, type ScannerOptions, type StatementMetadata, VirtualDOMBuilder, type VirtualDOMConfig, type VirtualNode, generateStatement, generateStatementContent, getCurrentLang, getEngineVersion, setLanguage, t };
package/dist/index.js CHANGED
@@ -523,6 +523,7 @@ __export(index_exports, {
523
523
  generateStatement: () => generateStatement,
524
524
  generateStatementContent: () => generateStatementContent,
525
525
  getCurrentLang: () => getCurrentLang,
526
+ getEngineVersion: () => getEngineVersion,
526
527
  setLanguage: () => setLanguage,
527
528
  t: () => t
528
529
  });
@@ -661,6 +662,29 @@ var HtmlValidator = class {
661
662
  };
662
663
 
663
664
  // src/core/regulatory-scanner.ts
665
+ var import_node_fs = require("fs");
666
+ var import_node_path = require("path");
667
+ var import_node_url = require("url");
668
+ var import_meta = {};
669
+ function getEngineVersion() {
670
+ try {
671
+ const dir = typeof __dirname !== "undefined" ? __dirname : (0, import_node_path.dirname)((0, import_node_url.fileURLToPath)(import_meta.url));
672
+ const pkgPath = (0, import_node_path.resolve)(dir, "..", "package.json");
673
+ const pkg = JSON.parse((0, import_node_fs.readFileSync)(pkgPath, "utf-8"));
674
+ return pkg.version;
675
+ } catch {
676
+ return "2.1.1";
677
+ }
678
+ }
679
+ function getStandardsVersion() {
680
+ try {
681
+ const stdPath = require.resolve("@holmdigital/standards/package.json");
682
+ const pkg = JSON.parse((0, import_node_fs.readFileSync)(stdPath, "utf-8"));
683
+ return pkg.version;
684
+ } catch {
685
+ return "unknown";
686
+ }
687
+ }
664
688
  var RegulatoryScanner = class {
665
689
  browser = null;
666
690
  options;
@@ -708,7 +732,7 @@ var RegulatoryScanner = class {
708
732
  retries--;
709
733
  if (retries === 0) throw e;
710
734
  this.log(`Navigation failed, retrying... (${retries} attempts left)`);
711
- await new Promise((resolve) => setTimeout(resolve, 2e3));
735
+ await new Promise((resolve2) => setTimeout(resolve2, 2e3));
712
736
  }
713
737
  }
714
738
  try {
@@ -874,9 +898,9 @@ var RegulatoryScanner = class {
874
898
  break;
875
899
  }
876
900
  const metadata = {
877
- engineVersion: "1.4.7",
901
+ engineVersion: getEngineVersion(),
878
902
  axeCoreVersion: import_axe_core.default.version || "4.10.2",
879
- standardsVersion: "1.2.2",
903
+ standardsVersion: getStandardsVersion(),
880
904
  scanDuration,
881
905
  pageTitle,
882
906
  pageLanguage
@@ -1254,6 +1278,7 @@ async function generateStatement(result, outputPath, lang = "en", format = "html
1254
1278
  generateStatement,
1255
1279
  generateStatementContent,
1256
1280
  getCurrentLang,
1281
+ getEngineVersion,
1257
1282
  setLanguage,
1258
1283
  t
1259
1284
  });
package/dist/index.mjs CHANGED
@@ -3,13 +3,15 @@ import {
3
3
  RegulatoryScanner,
4
4
  VirtualDOMBuilder,
5
5
  generateStatement,
6
- generateStatementContent
7
- } from "./chunk-JEA4LJ7Q.mjs";
6
+ generateStatementContent,
7
+ getEngineVersion
8
+ } from "./chunk-H5MBYTT7.mjs";
8
9
  import {
9
10
  getCurrentLang,
10
11
  setLanguage,
11
12
  t
12
13
  } from "./chunk-32WU5BD6.mjs";
14
+ import "./chunk-Y6FXYEAI.mjs";
13
15
  export {
14
16
  PseudoAutomationEngine,
15
17
  RegulatoryScanner,
@@ -17,6 +19,7 @@ export {
17
19
  generateStatement,
18
20
  generateStatementContent,
19
21
  getCurrentLang,
22
+ getEngineVersion,
20
23
  setLanguage,
21
24
  t
22
25
  };
@@ -1,3 +1,5 @@
1
+ import "./chunk-Y6FXYEAI.mjs";
2
+
1
3
  // src/reporting/junit-generator.ts
2
4
  function generateJUnitXML(result) {
3
5
  const { url, reports, stats, metadata } = result;
@@ -28,9 +28,7 @@
28
28
  "content": "{Dette websted er fuldt ud i overensstemmelse med loven om webtilgængelighed./Dette websted er delvist i overensstemmelse med loven om webtilgængelighed på grund af de mangler, der er beskrevet nedenfor./Dette websted er ikke i overensstemmelse med loven om webtilgængelighed. Utilgængelige dele er beskrevet nedenfor.}"
29
29
  },
30
30
  {
31
- "id": "non-accessible",
32
- "title": "Indhold, der ikke er tilgængeligt",
33
- "content": "Det indhold, der er beskrevet nedenfor, er på den ene eller anden måde ikke helt tilgængeligt.\n\n[\n### Manglende overholdelse af lovkravene\n{<mangler>}\n]"
31
+ "content": "Det indhold, der er beskrevet nedenfor, er på den ene eller anden måde ikke helt tilgængeligt.\n\n[\n**Manglende overholdelse af lovkravene**\n\n{<mangler>}\n]"
34
32
  },
35
33
  {
36
34
  "id": "testing",
@@ -10,7 +10,7 @@
10
10
  {
11
11
  "id": "what-to-do",
12
12
  "title": "Nicht barrierefreie Inhalte",
13
- "content": "Die nachstehend aufgeführten Inhalte sind aus den folgenden Gründen nicht barrierefrei:\n\n[\n### Unvereinbarkeit mit den Barrierefreiheitsanforderungen\n{<mängel>}\n]\n\n[Unsere normale Antwortzeit beträgt {<svarstid>}.]\n\n[Sie können uns auch wie folgt kontaktieren:\n\n* E-Mail an {<e-mailadresse>}\n* Telefon {<telefonnummer>}]"
13
+ "content": "Die nachstehend aufgeführten Inhalte sind aus den folgenden Gründen nicht barrierefrei:\n\n[\n**Unvereinbarkeit mit den Barrierefreiheitsanforderungen**\n\n{<mängel>}\n]\n\n[Unsere normale Antwortzeit beträgt {<svarstid>}.]\n\n[Sie können uns auch wie folgt kontaktieren:\n\n* E-Mail an {<e-mailadresse>}\n* Telefon {<telefonnummer>}]"
14
14
  },
15
15
  {
16
16
  "id": "reporting",
@@ -28,9 +28,7 @@
28
28
  "content": "{This website is fully compliant with the accessibility regulations./This website is partially compliant with the accessibility regulations, due to the non-compliances listed below./This website is not compliant with the accessibility regulations. The non-accessible sections are listed below.}"
29
29
  },
30
30
  {
31
- "id": "non-accessible",
32
- "title": "Non-accessible content",
33
- "content": "The content described below is, in one way or another, not fully accessible.\n\n[\n### Non-compliance with the accessibility regulations\n\n{<issues>}\n]"
31
+ "content": "The content described below is, in one way or another, not fully accessible.\n\n[\n**Non-compliance with the accessibility regulations**\n\n{<issues>}\n]"
34
32
  },
35
33
  {
36
34
  "id": "testing",
@@ -10,7 +10,7 @@
10
10
  {
11
11
  "id": "what-to-do",
12
12
  "title": "Contenido no accesible",
13
- "content": "El contenido que se recoge a continuación no es accesible por los siguientes motivos:\n\n[\n### Falta de conformidad con el estándar\n{<deficiencias>}\n]\n\n[Nuestro tiempo de respuesta normal es de {<svarstid>}.]\n\n[También puede contactar con nosotros de las siguientes maneras:\n\n* enviar un correo electrónico a {<e-mailadresse>}\n* llamar al {<telefoonnummer>}]"
13
+ "content": "El contenido que se recoge a continuación no es accesible por los siguientes motivos:\n\n[\n**Falta de conformidad con el estándar**\n\n{<deficiencias>}\n]\n\n[Nuestro tiempo de respuesta normal es de {<svarstid>}.]\n\n[También puede contactar con nosotros de las siguientes maneras:\n\n* enviar un correo electrónico a {<e-mailadresse>}\n* llamar al {<telefoonnummer>}]"
14
14
  },
15
15
  {
16
16
  "id": "reporting",
@@ -28,9 +28,7 @@
28
28
  "content": "{Tämä verkkosivusto on täysin digitaalisten palvelujen tarjoamisesta annetun lain mukainen./Tämä verkkosivusto on osittain digitaalisten palvelujen tarjoamisesta annetun lain mukainen jäljempänä mainittujen puutteiden vuoksi./Tämä verkkosivusto ei ole digitaalisten palvelujen tarjoamisesta annetun lain mukainen. Puutteelliset osat on kuvattu jäljempänä.}"
29
29
  },
30
30
  {
31
- "id": "non-accessible",
32
- "title": "Saavutettavuusvaatimusten vastainen sisältö",
33
- "content": "Jäljempänä mainittu sisältö ei ole täysin saavutettavaa.\n\n[\n### Puutteet lain vaatimusten täyttämisessä\n{<puutteet>}\n]"
31
+ "content": "Jäljempänä mainittu sisältö ei ole täysin saavutettavaa.\n\n[\n**Puutteet lain vaatimusten täyttämisessä**\n\n{<puutteet>}\n]"
34
32
  },
35
33
  {
36
34
  "id": "testing",
@@ -10,7 +10,7 @@
10
10
  {
11
11
  "id": "what-to-do",
12
12
  "title": "Contenus non accessibles",
13
- "content": "Les contenus listés ci-dessous ne sont pas accessibles pour les raisons suivantes :\n\n[\n### Non-conformité avec le RGAA\n{<défauts>}\n]\n\n[Notre délai de réponse habituel est de {<svarstid>}.]\n\n[Vous pouvez également nous contacter des manières suivantes :\n\n* envoyer un e-mail à {<e-mailadresse>}\n* appeler le {<telefoonnummer>}]"
13
+ "content": "Les contenus listés ci-dessous ne sont pas accessibles pour les raisons suivantes :\n\n[\n**Non-conformité avec le RGAA**\n\n{<défauts>}\n]\n\n[Notre délai de réponse habituel est de {<svarstid>}.]\n\n[Vous pouvez également nous contacter des manières suivantes :\n\n* envoyer un e-mail à {<e-mailadresse>}\n* appeler le {<telefoonnummer>}]"
14
14
  },
15
15
  {
16
16
  "id": "reporting",
@@ -28,9 +28,7 @@
28
28
  "content": "{Deze website is volledig in overeenstemming met de wet digitale toegankelijkheid overheid./Deze website is gedeeltelijk in overeenstemming met de wet digitale toegankelijkheid overheid, vanwege de hieronder beschreven gebreken./Deze website is niet in overeenstemming met de wet digitale toegankelijkheid overheid. De niet-toegankelijke delen worden hieronder beschreven.}"
29
29
  },
30
30
  {
31
- "id": "non-accessible",
32
- "title": "Inhoud die niet toegankelijk is",
33
- "content": "De hieronder beschreven inhoud is op de een of andere manier niet volledig toegankelijk.\n\n[\n### Niet-naleving van de wettelijke eisen\n{<gebreken>}\n]"
31
+ "content": "De hieronder beschreven inhoud is op de een of andere manier niet volledig toegankelijk.\n\n[\n**Niet-naleving van de wettelijke eisen**\n\n{<gebreken>}\n]"
34
32
  },
35
33
  {
36
34
  "id": "testing",
@@ -28,9 +28,7 @@
28
28
  "content": "{Dette nettstedet er helt i samsvar med lov om universell utforming av IKT-løsninger./Dette nettstedet er delvis i samsvar med lov om universell utforming av IKT-løsninger, på grunn av manglene beskrevet nedenfor./Dette nettstedet er ikke i samsvar med lov om universell utforming av IKT-løsninger. Utilgjengelige deler er beskrevet nedenfor.}"
29
29
  },
30
30
  {
31
- "id": "non-accessible",
32
- "title": "Innhold som ikke er tilgjengelig",
33
- "content": "Innholdet som er beskrevet nedenfor er på en eller annen måte ikke fullt ut tilgjengelig.\n\n[\n### Manglende samsvar med lovkravene\n{<mangler>}\n]"
31
+ "content": "Innholdet som er beskrevet nedenfor er på en eller annen måte ikke fullt ut tilgjengelig.\n\n[\n**Manglende samsvar med lovkravene**\n\n{<mangler>}\n]"
34
32
  },
35
33
  {
36
34
  "id": "testing",
@@ -28,9 +28,7 @@
28
28
  "content": "{Den här webbplatsen är helt förenlig med lagen om tillgänglighet till digital offentlig service./Den här webbplatsen är delvis förenlig med lagen om tillgänglighet till digital offentlig service, på grund av de brister som beskrivs nedan./Den här webbplatsen är inte förenlig med lagen om tillgänglighet till digital offentlig service. Otillgängliga delar beskrivs nedan.}"
29
29
  },
30
30
  {
31
- "id": "non-accessible",
32
- "title": "Innehåll som inte är tillgängligt",
33
- "content": "Det innehåll som beskrivs nedan är på ett eller annat sätt inte helt tillgängligt.\n\n[\n### Bristande förenlighet med lagkraven\n{<brister>}\n]"
31
+ "content": "Det innehåll som beskrivs nedan är på ett eller annat sätt inte helt tillgängligt.\n\n[\n**Bristande förenlighet med lagkraven**\n\n{<brister>}\n]"
34
32
  },
35
33
  {
36
34
  "id": "testing",
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@holmdigital/engine",
3
- "version": "2.1.1",
3
+ "version": "2.1.3",
4
4
  "private": false,
5
5
  "publishConfig": {
6
6
  "access": "public"
@@ -60,7 +60,7 @@
60
60
  "author": "Holm Digital AB",
61
61
  "license": "MIT",
62
62
  "dependencies": {
63
- "@holmdigital/components": "^2.1.0",
63
+ "@holmdigital/components": "^2.1.1",
64
64
  "@holmdigital/standards": "*",
65
65
  "axe-core": "4.10.2",
66
66
  "chalk": "^5.3.0",