@qualweb/cli 0.6.40 → 0.7.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.
Files changed (87) hide show
  1. package/dist/cli.d.ts +2 -0
  2. package/dist/cli.d.ts.map +1 -0
  3. package/dist/cli.js +36 -0
  4. package/dist/cli.js.map +1 -0
  5. package/dist/lib/commands/listActRules.d.ts +3 -0
  6. package/dist/lib/commands/listActRules.d.ts.map +1 -0
  7. package/dist/lib/commands/listActRules.js +18 -0
  8. package/dist/lib/commands/listActRules.js.map +1 -0
  9. package/dist/lib/commands/listBestPractices.d.ts +3 -0
  10. package/dist/lib/commands/listBestPractices.d.ts.map +1 -0
  11. package/dist/lib/commands/listBestPractices.js +21 -0
  12. package/dist/lib/commands/listBestPractices.js.map +1 -0
  13. package/dist/lib/commands/listWcagTechniques.d.ts +3 -0
  14. package/dist/lib/commands/listWcagTechniques.d.ts.map +1 -0
  15. package/dist/lib/commands/listWcagTechniques.js +18 -0
  16. package/dist/lib/commands/listWcagTechniques.js.map +1 -0
  17. package/dist/lib/evaluateAction.d.ts +3 -0
  18. package/dist/lib/evaluateAction.d.ts.map +1 -0
  19. package/dist/lib/evaluateAction.js +157 -0
  20. package/dist/lib/evaluateAction.js.map +1 -0
  21. package/dist/lib/options/actRules.d.ts +10 -0
  22. package/dist/lib/options/actRules.d.ts.map +1 -0
  23. package/dist/lib/options/actRules.js +66 -0
  24. package/dist/lib/options/actRules.js.map +1 -0
  25. package/dist/lib/options/bestPractices.d.ts +8 -0
  26. package/dist/lib/options/bestPractices.d.ts.map +1 -0
  27. package/dist/lib/options/bestPractices.js +55 -0
  28. package/dist/lib/options/bestPractices.js.map +1 -0
  29. package/dist/lib/options/input.d.ts +8 -0
  30. package/dist/lib/options/input.d.ts.map +1 -0
  31. package/dist/lib/options/input.js +27 -0
  32. package/dist/lib/options/input.js.map +1 -0
  33. package/dist/lib/options/output.d.ts +11 -0
  34. package/dist/lib/options/output.d.ts.map +1 -0
  35. package/dist/lib/options/output.js +21 -0
  36. package/dist/lib/options/output.js.map +1 -0
  37. package/dist/lib/options/puppeteer.d.ts +9 -0
  38. package/dist/lib/options/puppeteer.d.ts.map +1 -0
  39. package/dist/lib/options/puppeteer.js +24 -0
  40. package/dist/lib/options/puppeteer.js.map +1 -0
  41. package/dist/lib/options/viewport.d.ts +12 -0
  42. package/dist/lib/options/viewport.d.ts.map +1 -0
  43. package/dist/lib/options/viewport.js +26 -0
  44. package/dist/lib/options/viewport.js.map +1 -0
  45. package/dist/lib/options/wcagTechniques.d.ts +10 -0
  46. package/dist/lib/options/wcagTechniques.d.ts.map +1 -0
  47. package/dist/lib/options/wcagTechniques.js +63 -0
  48. package/dist/lib/options/wcagTechniques.js.map +1 -0
  49. package/dist/lib/types.d.ts +22 -0
  50. package/dist/lib/types.d.ts.map +1 -0
  51. package/dist/lib/types.js +27 -0
  52. package/dist/lib/types.js.map +1 -0
  53. package/package.json +17 -22
  54. package/bin/cli.js +0 -16
  55. package/dist/index.d.ts +0 -3
  56. package/dist/index.d.ts.map +0 -1
  57. package/dist/index.js +0 -73
  58. package/dist/index.js.map +0 -1
  59. package/dist/lib/act-rules.options.json +0 -151
  60. package/dist/lib/actParser.d.ts +0 -6
  61. package/dist/lib/actParser.d.ts.map +0 -1
  62. package/dist/lib/actParser.js +0 -69
  63. package/dist/lib/actParser.js.map +0 -1
  64. package/dist/lib/bpParser.d.ts +0 -6
  65. package/dist/lib/bpParser.d.ts.map +0 -1
  66. package/dist/lib/bpParser.js +0 -53
  67. package/dist/lib/bpParser.js.map +0 -1
  68. package/dist/lib/fileUtils.d.ts +0 -20
  69. package/dist/lib/fileUtils.d.ts.map +0 -1
  70. package/dist/lib/fileUtils.js +0 -48
  71. package/dist/lib/fileUtils.js.map +0 -1
  72. package/dist/lib/options.d.ts +0 -156
  73. package/dist/lib/options.d.ts.map +0 -1
  74. package/dist/lib/options.js +0 -299
  75. package/dist/lib/options.js.map +0 -1
  76. package/dist/lib/parser.d.ts +0 -5
  77. package/dist/lib/parser.d.ts.map +0 -1
  78. package/dist/lib/parser.js +0 -133
  79. package/dist/lib/parser.js.map +0 -1
  80. package/dist/lib/parserUtils.d.ts +0 -9
  81. package/dist/lib/parserUtils.d.ts.map +0 -1
  82. package/dist/lib/parserUtils.js +0 -69
  83. package/dist/lib/parserUtils.js.map +0 -1
  84. package/dist/lib/wcagParser.d.ts +0 -6
  85. package/dist/lib/wcagParser.d.ts.map +0 -1
  86. package/dist/lib/wcagParser.js +0 -69
  87. package/dist/lib/wcagParser.js.map +0 -1
package/dist/cli.d.ts ADDED
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=cli.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cli.d.ts","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":""}
package/dist/cli.js ADDED
@@ -0,0 +1,36 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const commander_1 = require("commander");
4
+ const types_1 = require("./lib/types");
5
+ const actRules_1 = require("./lib/options/actRules");
6
+ const bestPractices_1 = require("./lib/options/bestPractices");
7
+ const wcagTechniques_1 = require("./lib/options/wcagTechniques");
8
+ const output_1 = require("./lib/options/output");
9
+ const input_1 = require("./lib/options/input");
10
+ const viewport_1 = require("./lib/options/viewport");
11
+ const puppeteer_1 = require("./lib/options/puppeteer");
12
+ const listActRules_1 = require("./lib/commands/listActRules");
13
+ const listWcagTechniques_1 = require("./lib/commands/listWcagTechniques");
14
+ const listBestPractices_1 = require("./lib/commands/listBestPractices");
15
+ const evaluateAction_1 = require("./lib/evaluateAction");
16
+ async function main() {
17
+ const program = new commander_1.Command('qualweb-cli');
18
+ (0, input_1.addInputOptionsToCommand)(program);
19
+ const moduleToRunOption = new commander_1.Option('-m, --module <modules...>', 'Modules to run')
20
+ .choices(Object.values(types_1.ModuleOptionsEnum))
21
+ .default([]);
22
+ program.addOption(moduleToRunOption);
23
+ (0, viewport_1.addViewportOptions)(program);
24
+ (0, puppeteer_1.addPuppeteerOptions)(program);
25
+ (0, output_1.addOutputOptions)(program);
26
+ (0, actRules_1.addActRuleOptionsToCommand)(program);
27
+ (0, wcagTechniques_1.addWcagTechniqueOptionsToCommand)(program);
28
+ (0, bestPractices_1.addBestPracticeOptionsToCommand)(program);
29
+ program.addCommand(listActRules_1.ListActRulesCommand);
30
+ program.addCommand(listWcagTechniques_1.ListWcagTechniquesCommand);
31
+ program.addCommand(listBestPractices_1.ListBestPracticesCommand);
32
+ program.action(evaluateAction_1.EvaluateAction);
33
+ await program.parseAsync();
34
+ }
35
+ main();
36
+ //# sourceMappingURL=cli.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":";;AAAA,yCAA4C;AAE5C,uCAAgD;AAEhD,qDAAoE;AACpE,+DAA8E;AAC9E,iEAAgF;AAChF,iDAAwD;AACxD,+CAA+D;AAC/D,qDAA4D;AAC5D,uDAA8D;AAE9D,8DAAkE;AAClE,0EAA8E;AAC9E,wEAA4E;AAC5E,yDAAsD;AAEtD,KAAK,UAAU,IAAI;IAGjB,MAAM,OAAO,GAAG,IAAI,mBAAO,CAAC,aAAa,CAAC,CAAC;IAK3C,IAAA,gCAAwB,EAAC,OAAO,CAAC,CAAC;IAGlC,MAAM,iBAAiB,GAAG,IAAI,kBAAM,CAAC,2BAA2B,EAAE,gBAAgB,CAAC;SAEhF,OAAO,CAAC,MAAM,CAAC,MAAM,CAAC,yBAAiB,CAAC,CAAC;SACzC,OAAO,CAAC,EAAE,CAAC,CACX;IACH,OAAO,CAAC,SAAS,CAAC,iBAAiB,CAAC,CAAC;IAGrC,IAAA,6BAAkB,EAAC,OAAO,CAAC,CAAC;IAG5B,IAAA,+BAAmB,EAAC,OAAO,CAAC,CAAC;IAG7B,IAAA,yBAAgB,EAAC,OAAO,CAAC,CAAC;IAG1B,IAAA,qCAA0B,EAAC,OAAO,CAAC,CAAC;IACpC,IAAA,iDAAgC,EAAC,OAAO,CAAC,CAAC;IAC1C,IAAA,+CAA+B,EAAC,OAAO,CAAC,CAAC;IAIzC,OAAO,CAAC,UAAU,CAAC,kCAAmB,CAAC,CAAC;IACxC,OAAO,CAAC,UAAU,CAAC,8CAAyB,CAAC,CAAC;IAC9C,OAAO,CAAC,UAAU,CAAC,4CAAwB,CAAC,CAAC;IAI7C,OAAO,CAAC,MAAM,CAAC,+BAAc,CAAC,CAAC;IAI/B,MAAM,OAAO,CAAC,UAAU,EAAE,CAAC;AAC7B,CAAC;AAED,IAAI,EAAE,CAAC"}
@@ -0,0 +1,3 @@
1
+ import { Command } from 'commander';
2
+ export declare const ListActRulesCommand: Command;
3
+ //# sourceMappingURL=listActRules.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"listActRules.d.ts","sourceRoot":"","sources":["../../../src/lib/commands/listActRules.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAIpC,eAAO,MAAM,mBAAmB,SAU5B,CACD"}
@@ -0,0 +1,18 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.ListActRulesCommand = void 0;
7
+ const commander_1 = require("commander");
8
+ const rules_json_1 = __importDefault(require("@qualweb/act-rules/lib/rules.json"));
9
+ exports.ListActRulesCommand = new commander_1.Command('list-act-rules')
10
+ .description('Lists all the ACT rules known to this program and exits.')
11
+ .action(() => {
12
+ console.info('ACT rules:');
13
+ for (const rule of Object.values(rules_json_1.default)) {
14
+ console.info(`${rule.code} (${rule.mapping}) - ${rule.name}`);
15
+ }
16
+ process.exit(0);
17
+ });
18
+ //# sourceMappingURL=listActRules.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"listActRules.js","sourceRoot":"","sources":["../../../src/lib/commands/listActRules.ts"],"names":[],"mappings":";;;;;;AAAA,yCAAoC;AAEpC,mFAA6D;AAEhD,QAAA,mBAAmB,GAAG,IAAI,mBAAO,CAAC,gBAAgB,CAAC;KAC7D,WAAW,CAAC,0DAA0D,CAAC;KACvE,MAAM,CAAC,GAAG,EAAE;IACX,OAAO,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;IAE3B,KAAK,MAAM,IAAI,IAAI,MAAM,CAAC,MAAM,CAAC,oBAAY,CAAC,EAAE,CAAC;QAC/C,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,IAAI,KAAK,IAAI,CAAC,OAAO,OAAO,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC;IAChE,CAAC;IAED,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC,CAAC,CACD"}
@@ -0,0 +1,3 @@
1
+ import { Command } from 'commander';
2
+ export declare const ListBestPracticesCommand: Command;
3
+ //# sourceMappingURL=listBestPractices.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"listBestPractices.d.ts","sourceRoot":"","sources":["../../../src/lib/commands/listBestPractices.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAIpC,eAAO,MAAM,wBAAwB,SAajC,CACD"}
@@ -0,0 +1,21 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.ListBestPracticesCommand = void 0;
7
+ const commander_1 = require("commander");
8
+ const bestPractices_json_1 = __importDefault(require("@qualweb/best-practices/lib/bestPractices.json"));
9
+ exports.ListBestPracticesCommand = new commander_1.Command('list-best-practices')
10
+ .description('Lists all the best practices known to this program and exits.')
11
+ .action(() => {
12
+ console.info('Best Practices:');
13
+ for (const rule of Object.values(bestPractices_json_1.default)) {
14
+ if ('mapping' in rule)
15
+ console.info(`${rule.code} (${rule.mapping}) - ${rule.name}`);
16
+ else
17
+ console.info(`${rule.code} - ${rule.name}`);
18
+ }
19
+ process.exit(0);
20
+ });
21
+ //# sourceMappingURL=listBestPractices.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"listBestPractices.js","sourceRoot":"","sources":["../../../src/lib/commands/listBestPractices.ts"],"names":[],"mappings":";;;;;;AAAA,yCAAoC;AAEpC,wGAA+E;AAElE,QAAA,wBAAwB,GAAG,IAAI,mBAAO,CAAC,qBAAqB,CAAC;KACvE,WAAW,CAAC,+DAA+D,CAAC;KAC5E,MAAM,CAAC,GAAG,EAAE;IACX,OAAO,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC;IAEhC,KAAK,MAAM,IAAI,IAAI,MAAM,CAAC,MAAM,CAAC,4BAAiB,CAAC,EAAE,CAAC;QACpD,IAAI,SAAS,IAAI,IAAI;YACnB,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,IAAI,KAAK,IAAI,CAAC,OAAO,OAAO,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC;;YAE9D,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,IAAI,MAAM,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC;IAChD,CAAC;IAED,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC,CAAC,CACD"}
@@ -0,0 +1,3 @@
1
+ import { Command } from 'commander';
2
+ export declare const ListWcagTechniquesCommand: Command;
3
+ //# sourceMappingURL=listWcagTechniques.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"listWcagTechniques.d.ts","sourceRoot":"","sources":["../../../src/lib/commands/listWcagTechniques.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAIpC,eAAO,MAAM,yBAAyB,SAUlC,CACD"}
@@ -0,0 +1,18 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.ListWcagTechniquesCommand = void 0;
7
+ const commander_1 = require("commander");
8
+ const techniques_json_1 = __importDefault(require("@qualweb/wcag-techniques/lib/techniques.json"));
9
+ exports.ListWcagTechniquesCommand = new commander_1.Command('list-wcag-techniques')
10
+ .description('Lists all the WCAG techniques known to this program and exits.')
11
+ .action(() => {
12
+ console.info('WCAG techniques:');
13
+ for (const rule of Object.values(techniques_json_1.default)) {
14
+ console.info(`${rule.code} (${rule.mapping}) - ${rule.name}`);
15
+ }
16
+ process.exit(0);
17
+ });
18
+ //# sourceMappingURL=listWcagTechniques.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"listWcagTechniques.js","sourceRoot":"","sources":["../../../src/lib/commands/listWcagTechniques.ts"],"names":[],"mappings":";;;;;;AAAA,yCAAoC;AAEpC,mGAA8E;AAEjE,QAAA,yBAAyB,GAAG,IAAI,mBAAO,CAAC,sBAAsB,CAAC;KACzE,WAAW,CAAC,gEAAgE,CAAC;KAC7E,MAAM,CAAC,GAAG,EAAE;IACX,OAAO,CAAC,IAAI,CAAC,kBAAkB,CAAC,CAAC;IAEjC,KAAK,MAAM,IAAI,IAAI,MAAM,CAAC,MAAM,CAAC,yBAAkB,CAAC,EAAE,CAAC;QACrD,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,IAAI,KAAK,IAAI,CAAC,OAAO,OAAO,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC;IAChE,CAAC;IAED,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC,CAAC,CACD"}
@@ -0,0 +1,3 @@
1
+ import { Command } from 'commander';
2
+ export declare function EvaluateAction(this: Command): Promise<void>;
3
+ //# sourceMappingURL=evaluateAction.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"evaluateAction.d.ts","sourceRoot":"","sources":["../../src/lib/evaluateAction.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,OAAO,EAA8B,MAAM,WAAW,CAAC;AAmQhE,wBAAsB,cAAc,CAAC,IAAI,EAAE,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC,CAgDjE"}
@@ -0,0 +1,157 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.EvaluateAction = EvaluateAction;
4
+ const node_fs_1 = require("node:fs");
5
+ const commander_1 = require("commander");
6
+ const types_1 = require("./types");
7
+ const core_1 = require("@qualweb/core");
8
+ const act_rules_1 = require("@qualweb/act-rules");
9
+ const WcagTechniquesModule_1 = require("@qualweb/wcag-techniques/WcagTechniquesModule");
10
+ const best_practices_1 = require("@qualweb/best-practices");
11
+ const earl_reporter_1 = require("@qualweb/earl-reporter");
12
+ const counter_1 = require("@qualweb/counter");
13
+ class QualwebOptionsBuilder {
14
+ opts;
15
+ qualwebOptions;
16
+ modulesToRun;
17
+ constructor(opts) {
18
+ this.opts = opts;
19
+ this.qualwebOptions = {
20
+ modules: [],
21
+ };
22
+ this.modulesToRun = new Set(this.opts.module);
23
+ }
24
+ validateActRuleOptions() {
25
+ let hasValidationErrors = false;
26
+ if (this.modulesToRun.has(types_1.ModuleOptionsEnum.ACTRules) || this.opts.actLevels || this.opts.actPrinciples || this.opts.excludeAct || this.opts.actRules) {
27
+ if (this.opts.actRules && this.opts.actRules.error.length > 0) {
28
+ console.error(`Unknown ACT rules in inclusion list: ${this.opts.actRules.error.join(', ')}`);
29
+ hasValidationErrors = true;
30
+ }
31
+ if (this.opts.excludeAct && this.opts.excludeAct.error.length > 0) {
32
+ console.error(`Unknown ACT rules in exclusion list: ${this.opts.excludeAct.error.join(', ')}`);
33
+ hasValidationErrors = true;
34
+ }
35
+ this.qualwebOptions.modules.push(new act_rules_1.ACTRules({
36
+ include: this.opts.actRules?.ok,
37
+ exclude: this.opts.excludeAct?.ok,
38
+ levels: this.opts.actLevels,
39
+ }));
40
+ }
41
+ return hasValidationErrors;
42
+ }
43
+ validateWcagTechniqueOptions() {
44
+ let hasValidationErrors = false;
45
+ if (this.modulesToRun.has(types_1.ModuleOptionsEnum.WCAGTechniques) || this.opts.wcagLevels || this.opts.wcagPrinciples || this.opts.wcagTechniques || this.opts.excludeWcag) {
46
+ if (this.opts.wcagTechniques && this.opts.wcagTechniques.error.length > 0) {
47
+ console.error(`Unknown WCAG techniques in inclusion list: ${this.opts.wcagTechniques.error.join(', ')}`);
48
+ hasValidationErrors = true;
49
+ }
50
+ if (this.opts.excludeWcag && this.opts.excludeWcag.error.length > 0) {
51
+ console.error(`Unknown WCAG techniques in exclusion list: ${this.opts.excludeWcag.error.join(', ')}`);
52
+ hasValidationErrors = true;
53
+ }
54
+ this.qualwebOptions.modules.push(new WcagTechniquesModule_1.WCAGTechniquesModule({
55
+ include: this.opts.actRules?.ok,
56
+ exclude: this.opts.excludeAct?.ok,
57
+ levels: this.opts.actLevels,
58
+ }));
59
+ }
60
+ return hasValidationErrors;
61
+ }
62
+ validateBestPracticeOptions() {
63
+ let hasValidationErrors = false;
64
+ if (this.modulesToRun.has(types_1.ModuleOptionsEnum.BestPractices) || this.opts.bestPractices || this.opts.excludeBp) {
65
+ if (this.opts.bestPractices && this.opts.bestPractices.error.length > 0) {
66
+ console.error(`Unknown best practices in inclusion list: ${this.opts.bestPractices.error.join(', ')}`);
67
+ hasValidationErrors = true;
68
+ }
69
+ if (this.opts.excludeWcag && this.opts.excludeWcag.error.length > 0) {
70
+ console.error(`Unknown best practices in exclusion list: ${this.opts.excludeWcag.error.join(', ')}`);
71
+ hasValidationErrors = true;
72
+ }
73
+ this.qualwebOptions.modules.push(new best_practices_1.BestPractices({
74
+ include: this.opts.actRules?.ok,
75
+ exclude: this.opts.excludeAct?.ok,
76
+ }));
77
+ }
78
+ return hasValidationErrors;
79
+ }
80
+ validateCounterOptions() {
81
+ if (this.modulesToRun.has(types_1.ModuleOptionsEnum.Counter)) {
82
+ this.qualwebOptions.modules.push(new counter_1.Counter());
83
+ }
84
+ return false;
85
+ }
86
+ validateViewportOptions() {
87
+ if (this.opts.viewportResolution || this.opts.mobile || this.opts.orientation || this.opts.userAgent) {
88
+ this.qualwebOptions.viewport = {
89
+ mobile: this.opts.mobile,
90
+ landscape: this.opts.orientation === 'landscape',
91
+ userAgent: this.opts.userAgent,
92
+ resolution: this.opts.viewportResolution,
93
+ };
94
+ }
95
+ }
96
+ validatePuppeteerOptions() {
97
+ this.qualwebOptions.maxParallelEvaluations = this.opts.maxParallelEvaluations;
98
+ this.qualwebOptions.waitUntil = this.opts.waitUntil;
99
+ this.qualwebOptions.timeout = this.opts.timeout;
100
+ }
101
+ validateInputOptions() {
102
+ this.qualwebOptions.url = this.opts.url;
103
+ this.qualwebOptions.file = this.opts.file;
104
+ }
105
+ parse() {
106
+ this.validateViewportOptions();
107
+ this.validatePuppeteerOptions();
108
+ this.validateInputOptions();
109
+ const hasValidationErrors = this.validateActRuleOptions() ||
110
+ this.validateWcagTechniqueOptions() ||
111
+ this.validateBestPracticeOptions() ||
112
+ this.validateCounterOptions();
113
+ if (hasValidationErrors) {
114
+ throw new Error('One or more inputs were invalid. Please correct them and try again.');
115
+ }
116
+ if (this.modulesToRun.size === 0) {
117
+ this.qualwebOptions.modules.push(new act_rules_1.ACTRules(), new best_practices_1.BestPractices(), new WcagTechniquesModule_1.WCAGTechniquesModule(), new counter_1.Counter());
118
+ }
119
+ }
120
+ getQualwebOptions() {
121
+ return this.qualwebOptions;
122
+ }
123
+ }
124
+ async function EvaluateAction() {
125
+ const opts = this.opts();
126
+ const optionsParser = new QualwebOptionsBuilder(opts);
127
+ try {
128
+ optionsParser.parse();
129
+ }
130
+ catch {
131
+ console.error('One or more inputs were invalid. Please correct them and try again.');
132
+ return;
133
+ }
134
+ const qwOptions = optionsParser.getQualwebOptions();
135
+ const qw = new core_1.QualWeb();
136
+ await qw.start();
137
+ const reports = await qw.evaluate(qwOptions);
138
+ await qw.stop();
139
+ let outputString;
140
+ switch (opts.format) {
141
+ case 'json':
142
+ outputString = JSON.stringify(reports, null, 2);
143
+ break;
144
+ case 'earl':
145
+ outputString = JSON.stringify((0, earl_reporter_1.generateEARLReport)(reports), null, 2);
146
+ break;
147
+ default:
148
+ throw new commander_1.InvalidOptionArgumentError(`Invalid output format: ${opts.format}`);
149
+ }
150
+ if (opts.outFile) {
151
+ await node_fs_1.promises.writeFile(opts.outFile, outputString, 'utf-8');
152
+ }
153
+ else {
154
+ console.info(outputString);
155
+ }
156
+ }
157
+ //# sourceMappingURL=evaluateAction.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"evaluateAction.js","sourceRoot":"","sources":["../../src/lib/evaluateAction.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,10 @@
1
+ import { Command } from 'commander';
2
+ import { ConformanceLevelEnum, PrincipleEnum, RuleListParseResult } from '../types';
3
+ export type ActRuleOptions = {
4
+ actRules?: RuleListParseResult;
5
+ excludeAct?: RuleListParseResult;
6
+ actLevels?: ConformanceLevelEnum[];
7
+ actPrinciples?: PrincipleEnum[];
8
+ };
9
+ export declare function addActRuleOptionsToCommand(command: Command): Command;
10
+ //# sourceMappingURL=actRules.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"actRules.d.ts","sourceRoot":"","sources":["../../../src/lib/options/actRules.ts"],"names":[],"mappings":"AAEA,OAAO,EACL,OAAO,EAER,MAAM,WAAW,CAAC;AAGnB,OAAO,EAAE,oBAAoB,EAAqB,aAAa,EAAE,mBAAmB,EAAE,MAAM,UAAU,CAAC;AAmEvG,MAAM,MAAM,cAAc,GAAG;IAC3B,QAAQ,CAAC,EAAE,mBAAmB,CAAC;IAC/B,UAAU,CAAC,EAAE,mBAAmB,CAAC;IACjC,SAAS,CAAC,EAAE,oBAAoB,EAAE,CAAC;IACnC,aAAa,CAAC,EAAE,aAAa,EAAE,CAAC;CACjC,CAAA;AAQD,wBAAgB,0BAA0B,CAAC,OAAO,EAAE,OAAO,GAAG,OAAO,CAsCpE"}
@@ -0,0 +1,66 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.addActRuleOptionsToCommand = addActRuleOptionsToCommand;
7
+ const node_fs_1 = __importDefault(require("node:fs"));
8
+ const commander_1 = require("commander");
9
+ const rules_json_1 = __importDefault(require("@qualweb/act-rules/lib/rules.json"));
10
+ const types_1 = require("../types");
11
+ function actRulesListParseHelper(value, previousValue) {
12
+ if (!previousValue)
13
+ previousValue = { error: [], ok: [] };
14
+ const allActRules = Object.values(rules_json_1.default);
15
+ if (/^QW-ACT-R\d+$/i.exec(value)) {
16
+ value = value.toUpperCase();
17
+ const foundActRule = allActRules.find(rule => rule.code === value);
18
+ if (foundActRule) {
19
+ previousValue.ok.push(foundActRule.code);
20
+ }
21
+ else {
22
+ previousValue.error.push(value);
23
+ }
24
+ }
25
+ else if (value.length === 6) {
26
+ value = value.toLowerCase();
27
+ const foundActRule = allActRules.find(rule => rule.mapping === value);
28
+ if (foundActRule) {
29
+ previousValue.ok.push(foundActRule.code);
30
+ }
31
+ else {
32
+ previousValue.error.push(value);
33
+ }
34
+ }
35
+ else if (node_fs_1.default.existsSync(value)) {
36
+ const fileContents = node_fs_1.default.readFileSync(value, 'utf8')
37
+ .split(/\r?\n/)
38
+ .map(line => line.trim())
39
+ .filter(line => line.length > 0);
40
+ return fileContents.reduce((prev, current) => actRulesListParseHelper(current, prev), previousValue);
41
+ }
42
+ else {
43
+ previousValue.error.push(value);
44
+ }
45
+ return previousValue;
46
+ }
47
+ function addActRuleOptionsToCommand(command) {
48
+ const actRuleIncludeOption = new commander_1.Option('--act-rules <rules...>', 'ACT rules to include. Can be multiple. If a path to a FILE, it will be read as a newline-separated list of rules.')
49
+ .argParser(actRulesListParseHelper)
50
+ .implies({ module: [types_1.ModuleOptionsEnum.ACTRules] });
51
+ const actRuleExcludeOption = new commander_1.Option('--exclude-act <rules...>', 'ACT rules to exclude. Can be multiple. If a path to a FILE, it will be read as a newline-separated list of rules.')
52
+ .argParser(actRulesListParseHelper)
53
+ .implies({ module: [types_1.ModuleOptionsEnum.ACTRules] });
54
+ const actRuleLevelOption = new commander_1.Option('--act-levels <levels...>', 'ACT level to test')
55
+ .choices(Object.values(types_1.ConformanceLevelEnum))
56
+ .implies({ module: [types_1.ModuleOptionsEnum.ACTRules] });
57
+ const actRulePrincipleOption = new commander_1.Option('--act-principles <principles...>', 'Which principles to test for in ACT rules. Only ACT rules matching the principle will be tested.')
58
+ .choices(Object.values(types_1.PrincipleEnum))
59
+ .implies({ module: [types_1.ModuleOptionsEnum.ACTRules] });
60
+ command.addOption(actRuleIncludeOption);
61
+ command.addOption(actRuleExcludeOption);
62
+ command.addOption(actRuleLevelOption);
63
+ command.addOption(actRulePrincipleOption);
64
+ return command;
65
+ }
66
+ //# sourceMappingURL=actRules.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"actRules.js","sourceRoot":"","sources":["../../../src/lib/options/actRules.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,8 @@
1
+ import { Command } from 'commander';
2
+ import { RuleListParseResult } from '../types';
3
+ export type BestPracticesOptions = {
4
+ bestPractices?: RuleListParseResult;
5
+ excludeBp?: RuleListParseResult;
6
+ };
7
+ export declare function addBestPracticeOptionsToCommand(command: Command): Command;
8
+ //# sourceMappingURL=bestPractices.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"bestPractices.d.ts","sourceRoot":"","sources":["../../../src/lib/options/bestPractices.ts"],"names":[],"mappings":"AAEA,OAAO,EACL,OAAO,EAER,MAAM,WAAW,CAAC;AAGnB,OAAO,EAAqB,mBAAmB,EAAE,MAAM,UAAU,CAAC;AAmElE,MAAM,MAAM,oBAAoB,GAAG;IACjC,aAAa,CAAC,EAAE,mBAAmB,CAAC;IACpC,SAAS,CAAC,EAAE,mBAAmB,CAAC;CACjC,CAAA;AAQD,wBAAgB,+BAA+B,CAAC,OAAO,EAAE,OAAO,GAAG,OAAO,CAezE"}
@@ -0,0 +1,55 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.addBestPracticeOptionsToCommand = addBestPracticeOptionsToCommand;
7
+ const node_fs_1 = __importDefault(require("node:fs"));
8
+ const commander_1 = require("commander");
9
+ const bestPractices_json_1 = __importDefault(require("@qualweb/best-practices/lib/bestPractices.json"));
10
+ const types_1 = require("../types");
11
+ function bestPracticesListParseHelper(value, previousValue) {
12
+ if (!previousValue)
13
+ previousValue = { error: [], ok: [] };
14
+ const allBestPractices = Object.values(bestPractices_json_1.default);
15
+ if (/^QW-BP\d+$/i.exec(value)) {
16
+ value = value.toUpperCase();
17
+ const foundBestPractice = allBestPractices.find(rule => rule.code === value);
18
+ if (foundBestPractice) {
19
+ previousValue.ok.push(foundBestPractice.code);
20
+ }
21
+ else {
22
+ previousValue.error.push(value);
23
+ }
24
+ }
25
+ else {
26
+ value = value.toUpperCase();
27
+ const foundTechnique = allBestPractices.find(rule => 'mapping' in rule && rule.mapping === value);
28
+ if (foundTechnique) {
29
+ previousValue.ok.push(foundTechnique.code);
30
+ }
31
+ else if (node_fs_1.default.existsSync(value)) {
32
+ const fileContents = node_fs_1.default.readFileSync(value, 'utf8')
33
+ .split(/\r?\n/)
34
+ .map(line => line.trim())
35
+ .filter(line => line.length > 0);
36
+ return fileContents.reduce((prev, current) => bestPracticesListParseHelper(current, prev), previousValue);
37
+ }
38
+ else {
39
+ previousValue.error.push(value);
40
+ }
41
+ }
42
+ return previousValue;
43
+ }
44
+ function addBestPracticeOptionsToCommand(command) {
45
+ const bestPracticeIncludeOption = new commander_1.Option('--best-practices <practices...>', 'Which tests for best practices to execute. Can be multiple. If a path to a FILE, it will be read as a newline-separated list of practices.')
46
+ .argParser(bestPracticesListParseHelper)
47
+ .implies({ module: [types_1.ModuleOptionsEnum.BestPractices] });
48
+ const bestPracticeExcludeOption = new commander_1.Option('--exclude-bp <practices...>', 'Which tests for best practices to exclude. Can be multiple. If a path to a FILE, it will be read as a newline-separated list of practices.')
49
+ .argParser(bestPracticesListParseHelper)
50
+ .implies({ module: [types_1.ModuleOptionsEnum.BestPractices] });
51
+ command.addOption(bestPracticeIncludeOption);
52
+ command.addOption(bestPracticeExcludeOption);
53
+ return command;
54
+ }
55
+ //# sourceMappingURL=bestPractices.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"bestPractices.js","sourceRoot":"","sources":["../../../src/lib/options/bestPractices.ts"],"names":[],"mappings":";;;;;AAsFA,0EAeC;AArGD,sDAAyB;AAEzB,yCAGmB;AAEnB,wGAA+E;AAC/E,oCAAkE;AAWlE,SAAS,4BAA4B,CAAC,KAAa,EAAE,aAAkC;IAErF,IAAI,CAAC,aAAa;QAChB,aAAa,GAAG,EAAE,KAAK,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC;IAExC,MAAM,gBAAgB,GAAG,MAAM,CAAC,MAAM,CAAC,4BAAiB,CAAC,CAAC;IAE1D,IAAI,aAAa,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC;QAI9B,KAAK,GAAG,KAAK,CAAC,WAAW,EAAE,CAAC;QAE5B,MAAM,iBAAiB,GAAG,gBAAgB,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,IAAI,KAAK,KAAK,CAAC,CAAC;QAE7E,IAAI,iBAAiB,EAAE,CAAC;YACtB,aAAa,CAAC,EAAE,CAAC,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,CAAC;QAChD,CAAC;aAAM,CAAC;YACN,aAAa,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QAClC,CAAC;IACH,CAAC;SAAM,CAAC;QAKN,KAAK,GAAG,KAAK,CAAC,WAAW,EAAE,CAAC;QAE5B,MAAM,cAAc,GAAG,gBAAgB,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,SAAS,IAAI,IAAI,IAAI,IAAI,CAAC,OAAO,KAAK,KAAK,CAAC,CAAC;QAElG,IAAI,cAAc,EAAE,CAAC;YACnB,aAAa,CAAC,EAAE,CAAC,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC;QAC7C,CAAC;aAAM,IAAI,iBAAE,CAAC,UAAU,CAAC,KAAK,CAAC,EAAE,CAAC;YAEhC,MAAM,YAAY,GAAG,iBAAE,CAAC,YAAY,CAAC,KAAK,EAAE,MAAM,CAAC;iBAChD,KAAK,CAAC,OAAO,CAAC;iBACd,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC;iBACxB,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,CAC/B;YAIH,OAAO,YAAY,CAAC,MAAM,CAAsB,CAAC,IAAI,EAAE,OAAO,EAAE,EAAE,CAAC,4BAA4B,CAAC,OAAO,EAAE,IAAI,CAAC,EAAE,aAAa,CAAC,CAAC;QACjI,CAAC;aAAM,CAAC;YACN,aAAa,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QAClC,CAAC;IACH,CAAC;IAED,OAAO,aAAa,CAAC;AACvB,CAAC;AAmBD,SAAgB,+BAA+B,CAAC,OAAgB;IAC9D,MAAM,yBAAyB,GAAG,IAAI,kBAAM,CAAC,iCAAiC,EAAE,4IAA4I,CAAC;SAC1N,SAAS,CAAC,4BAA4B,CAAC;SACvC,OAAO,CAAC,EAAE,MAAM,EAAE,CAAE,yBAAiB,CAAC,aAAa,CAAE,EAAE,CAAC,CACxD;IAEH,MAAM,yBAAyB,GAAG,IAAI,kBAAM,CAAC,6BAA6B,EAAE,4IAA4I,CAAC;SACtN,SAAS,CAAC,4BAA4B,CAAC;SACvC,OAAO,CAAC,EAAE,MAAM,EAAE,CAAE,yBAAiB,CAAC,aAAa,CAAE,EAAE,CAAC,CACxD;IAEH,OAAO,CAAC,SAAS,CAAC,yBAAyB,CAAC,CAAC;IAC7C,OAAO,CAAC,SAAS,CAAC,yBAAyB,CAAC,CAAC;IAE7C,OAAO,OAAO,CAAC;AACjB,CAAC"}
@@ -0,0 +1,8 @@
1
+ import { Command } from 'commander';
2
+ export type InputOptions = {
3
+ url?: string;
4
+ file?: string;
5
+ crawl?: string;
6
+ };
7
+ export declare function addInputOptionsToCommand(command: Command): Command;
8
+ //# sourceMappingURL=input.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"input.d.ts","sourceRoot":"","sources":["../../../src/lib/options/input.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAsC,MAAM,WAAW,CAAC;AAGxE,MAAM,MAAM,YAAY,GAAG;IAIzB,GAAG,CAAC,EAAE,MAAM,CAAC;IAKb,IAAI,CAAC,EAAE,MAAM,CAAC;IAKd,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB,CAAA;AAQD,wBAAgB,wBAAwB,CAAC,OAAO,EAAE,OAAO,GAAG,OAAO,CAuBlE"}
@@ -0,0 +1,27 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.addInputOptionsToCommand = addInputOptionsToCommand;
7
+ const commander_1 = require("commander");
8
+ const node_fs_1 = __importDefault(require("node:fs"));
9
+ function addInputOptionsToCommand(command) {
10
+ const urlInputOption = new commander_1.Option('-u, --url <url>', 'URL to test');
11
+ const fileInputOption = new commander_1.Option('-f, --file <file>', 'File with URLs to test. Separate each URL with a newline.')
12
+ .argParser((value) => {
13
+ if (node_fs_1.default.existsSync(value) === false) {
14
+ throw new commander_1.InvalidOptionArgumentError(`File at ${value} does not exist`);
15
+ }
16
+ return value;
17
+ });
18
+ const crawlInputOption = new commander_1.Option('-c, --crawl <crawl>', 'Crawl a website');
19
+ urlInputOption.conflicts([fileInputOption.attributeName(), crawlInputOption.attributeName()]);
20
+ fileInputOption.conflicts([urlInputOption.attributeName(), crawlInputOption.attributeName()]);
21
+ crawlInputOption.conflicts([urlInputOption.attributeName(), fileInputOption.attributeName()]);
22
+ command.addOption(urlInputOption);
23
+ command.addOption(fileInputOption);
24
+ command.addOption(crawlInputOption);
25
+ return command;
26
+ }
27
+ //# sourceMappingURL=input.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"input.js","sourceRoot":"","sources":["../../../src/lib/options/input.ts"],"names":[],"mappings":";;;;;AA0BA,4DAuBC;AAjDD,yCAAwE;AACxE,sDAAyB;AAyBzB,SAAgB,wBAAwB,CAAC,OAAgB;IACvD,MAAM,cAAc,GAAG,IAAI,kBAAM,CAAC,iBAAiB,EAAE,aAAa,CAAC,CAAC;IACpE,MAAM,eAAe,GAAG,IAAI,kBAAM,CAAC,mBAAmB,EAAE,2DAA2D,CAAC;SAEjH,SAAS,CAAC,CAAC,KAAa,EAAE,EAAE;QAC3B,IAAI,iBAAE,CAAC,UAAU,CAAC,KAAK,CAAC,KAAK,KAAK,EAAE,CAAC;YACnC,MAAM,IAAI,sCAA0B,CAAC,WAAW,KAAK,iBAAiB,CAAC,CAAC;QAC1E,CAAC;QAED,OAAO,KAAK,CAAC;IACf,CAAC,CAAC,CACD;IACH,MAAM,gBAAgB,GAAG,IAAI,kBAAM,CAAC,qBAAqB,EAAE,iBAAiB,CAAC,CAAC;IAE9E,cAAc,CAAC,SAAS,CAAC,CAAC,eAAe,CAAC,aAAa,EAAE,EAAE,gBAAgB,CAAC,aAAa,EAAE,CAAC,CAAC,CAAC;IAC9F,eAAe,CAAC,SAAS,CAAC,CAAC,cAAc,CAAC,aAAa,EAAE,EAAE,gBAAgB,CAAC,aAAa,EAAE,CAAC,CAAC,CAAC;IAC9F,gBAAgB,CAAC,SAAS,CAAC,CAAC,cAAc,CAAC,aAAa,EAAE,EAAE,eAAe,CAAC,aAAa,EAAE,CAAC,CAAC,CAAC;IAE9F,OAAO,CAAC,SAAS,CAAC,cAAc,CAAC,CAAC;IAClC,OAAO,CAAC,SAAS,CAAC,eAAe,CAAC,CAAC;IACnC,OAAO,CAAC,SAAS,CAAC,gBAAgB,CAAC,CAAC;IAEpC,OAAO,OAAO,CAAC;AACjB,CAAC"}
@@ -0,0 +1,11 @@
1
+ import { Command } from 'commander';
2
+ export declare enum OutputFormatEnum {
3
+ JSON = "json",
4
+ EARL = "earl"
5
+ }
6
+ export type OutputOptions = {
7
+ outFile?: string;
8
+ format: OutputFormatEnum;
9
+ };
10
+ export declare function addOutputOptions(command: Command): Command;
11
+ //# sourceMappingURL=output.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"output.d.ts","sourceRoot":"","sources":["../../../src/lib/options/output.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAU,MAAM,WAAW,CAAC;AAE5C,oBAAY,gBAAgB;IAC1B,IAAI,SAAS;IACb,IAAI,SAAS;CACd;AAED,MAAM,MAAM,aAAa,GAAG;IAC1B,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,gBAAgB,CAAC;CAC1B,CAAC;AAMF,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,OAAO,GAAG,OAAO,CAY1D"}
@@ -0,0 +1,21 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.OutputFormatEnum = void 0;
4
+ exports.addOutputOptions = addOutputOptions;
5
+ const commander_1 = require("commander");
6
+ var OutputFormatEnum;
7
+ (function (OutputFormatEnum) {
8
+ OutputFormatEnum["JSON"] = "json";
9
+ OutputFormatEnum["EARL"] = "earl";
10
+ })(OutputFormatEnum || (exports.OutputFormatEnum = OutputFormatEnum = {}));
11
+ ;
12
+ function addOutputOptions(command) {
13
+ const filePathOption = new commander_1.Option('-o, --out-file <path>', 'Output file path');
14
+ const fileTypeOption = new commander_1.Option('--format <format>', 'Output file format. If omitted, will write to stdout. "json" uses QualWeb\'s own JSON format.')
15
+ .choices(Object.values(OutputFormatEnum))
16
+ .default(OutputFormatEnum.JSON);
17
+ command.addOption(filePathOption);
18
+ command.addOption(fileTypeOption);
19
+ return command;
20
+ }
21
+ //# sourceMappingURL=output.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"output.js","sourceRoot":"","sources":["../../../src/lib/options/output.ts"],"names":[],"mappings":";;;AAgBA,4CAYC;AA5BD,yCAA4C;AAE5C,IAAY,gBAGX;AAHD,WAAY,gBAAgB;IAC1B,iCAAa,CAAA;IACb,iCAAa,CAAA;AACf,CAAC,EAHW,gBAAgB,gCAAhB,gBAAgB,QAG3B;AAAA,CAAC;AAWF,SAAgB,gBAAgB,CAAC,OAAgB;IAC/C,MAAM,cAAc,GAAG,IAAI,kBAAM,CAAC,uBAAuB,EAAE,kBAAkB,CAAC,CAAC;IAE/E,MAAM,cAAc,GAAG,IAAI,kBAAM,CAAC,mBAAmB,EAAE,+FAA+F,CAAC;SACpJ,OAAO,CAAC,MAAM,CAAC,MAAM,CAAC,gBAAgB,CAAC,CAAC;SACxC,OAAO,CAAC,gBAAgB,CAAC,IAAI,CAAC,CAC9B;IAEH,OAAO,CAAC,SAAS,CAAC,cAAc,CAAC,CAAC;IAClC,OAAO,CAAC,SAAS,CAAC,cAAc,CAAC,CAAC;IAElC,OAAO,OAAO,CAAC;AACjB,CAAC"}
@@ -0,0 +1,9 @@
1
+ import { PuppeteerLifeCycleEvent } from '@qualweb/core';
2
+ import { Command } from 'commander';
3
+ export type PuppeteerOptions = {
4
+ waitUntil?: PuppeteerLifeCycleEvent;
5
+ maxParallelEvaluations?: number;
6
+ timeout?: number;
7
+ };
8
+ export declare function addPuppeteerOptions(command: Command): Command;
9
+ //# sourceMappingURL=puppeteer.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"puppeteer.d.ts","sourceRoot":"","sources":["../../../src/lib/options/puppeteer.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,uBAAuB,EAAE,MAAM,eAAe,CAAC;AACxD,OAAO,EAAE,OAAO,EAAsC,MAAM,WAAW,CAAC;AAExE,MAAM,MAAM,gBAAgB,GAAG;IAC7B,SAAS,CAAC,EAAE,uBAAuB,CAAC;IACpC,sBAAsB,CAAC,EAAE,MAAM,CAAC;IAChC,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB,CAAC;AAEF,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,OAAO,GAAG,OAAO,CAmC7D"}
@@ -0,0 +1,24 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.addPuppeteerOptions = addPuppeteerOptions;
4
+ const commander_1 = require("commander");
5
+ function addPuppeteerOptions(command) {
6
+ command.addOption(new commander_1.Option('--wait-until', 'Puppeteer lifecycle event to wait for before starting evaluation')
7
+ .choices(['load', 'domcontentloaded', 'networkidle0', 'networkidle2']));
8
+ command.option('--max-parallel-evaluations <number>', 'Maximum number of parallel evaluations to run.', (value) => {
9
+ const parsed = Number.parseInt(value);
10
+ if (Number.isNaN(parsed) || parsed < 1) {
11
+ throw new commander_1.InvalidOptionArgumentError('Max parallel evaluations must be a number greater than 0');
12
+ }
13
+ return parsed;
14
+ });
15
+ command.option('--timeout', 'Maximum time to wait for the evaluation to finish or try to connect to URL.', (value) => {
16
+ const parsed = Number.parseInt(value);
17
+ if (Number.isNaN(parsed) || parsed < 1) {
18
+ throw new commander_1.InvalidOptionArgumentError('Timeout must be a number greater than 0');
19
+ }
20
+ return parsed;
21
+ });
22
+ return command;
23
+ }
24
+ //# sourceMappingURL=puppeteer.js.map