accessibility-checker 3.1.1 → 3.1.5

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 (54) hide show
  1. package/README.md +3 -2
  2. package/bin/achecker.d.ts +2 -0
  3. package/bin/achecker.js +293 -177
  4. package/bin/achecker.js.map +1 -0
  5. package/index.d.ts +317 -0
  6. package/index.js +359 -13
  7. package/index.js.map +1 -0
  8. package/lib/ACBrowserManager.d.ts +22 -0
  9. package/lib/ACBrowserManager.js +237 -0
  10. package/lib/ACBrowserManager.js.map +1 -0
  11. package/lib/ACConfigManager.d.ts +6 -0
  12. package/lib/ACConfigManager.js +399 -0
  13. package/lib/ACConfigManager.js.map +1 -0
  14. package/lib/ACConstants.d.ts +17 -0
  15. package/lib/ACConstants.js +12 -38
  16. package/lib/ACConstants.js.map +1 -0
  17. package/lib/ACEngineManager.d.ts +21 -0
  18. package/lib/ACEngineManager.js +220 -0
  19. package/lib/ACEngineManager.js.map +1 -0
  20. package/lib/ACHelper.d.ts +2 -0
  21. package/lib/ACHelper.js +485 -2085
  22. package/lib/ACHelper.js.map +1 -0
  23. package/lib/ACReportManager.d.ts +586 -0
  24. package/lib/ACReportManager.js +1150 -0
  25. package/lib/ACReportManager.js.map +1 -0
  26. package/lib/api/IChecker.d.ts +132 -0
  27. package/lib/api/IChecker.js +11 -0
  28. package/lib/api/IChecker.js.map +1 -0
  29. package/lib/api/IEngine.d.ts +124 -0
  30. package/lib/api/IEngine.js +110 -0
  31. package/lib/api/IEngine.js.map +1 -0
  32. package/lib/api/IMapper.d.ts +37 -0
  33. package/lib/api/IMapper.js +18 -0
  34. package/lib/api/IMapper.js.map +1 -0
  35. package/lib/log/ACMetricsLogger.d.ts +67 -0
  36. package/lib/log/ACMetricsLogger.js +40 -66
  37. package/lib/log/ACMetricsLogger.js.map +1 -0
  38. package/lib/reporters/ACReporterCSV.d.ts +103 -0
  39. package/lib/reporters/ACReporterCSV.js +83 -152
  40. package/lib/reporters/ACReporterCSV.js.map +1 -0
  41. package/lib/reporters/ACReporterHTML.d.ts +114 -0
  42. package/lib/reporters/ACReporterHTML.js +150 -293
  43. package/lib/reporters/ACReporterHTML.js.map +1 -0
  44. package/lib/reporters/ACReporterJSON.d.ts +114 -0
  45. package/lib/reporters/ACReporterJSON.js +95 -249
  46. package/lib/reporters/ACReporterJSON.js.map +1 -0
  47. package/lib/reporters/ReportUtil.d.ts +33 -0
  48. package/lib/reporters/ReportUtil.js +65 -0
  49. package/lib/reporters/ReportUtil.js.map +1 -0
  50. package/lib/reporters/genReport.d.ts +1 -0
  51. package/lib/reporters/genReport.js +13 -11
  52. package/lib/reporters/genReport.js.map +1 -0
  53. package/package.json +3 -2
  54. package/lib/ACConfigLoader.js +0 -358
package/README.md CHANGED
@@ -2,7 +2,7 @@
2
2
 
3
3
  ## Overview
4
4
 
5
- `accessibility-checker` is a NodeJS Module that allows you to perform integrated accessibility testing within a continuous integration pipeline such as Travis CI. It works with parsing engines such as Selenium, Puppeteer, and Zombie. Note that we have seen some non-standard CSS parsing with Zombie, so be aware of inconsistencies as a result.
5
+ `accessibility-checker` is a NodeJS Module that allows you to perform integrated accessibility testing within a continuous integration pipeline such as Travis CI. It works with parsing engines such as Selenium, Puppeteer, Playwright, and Zombie. Note that we have seen some non-standard CSS parsing with Zombie, so be aware of inconsistencies as a result.
6
6
 
7
7
  `accessibility-checker` works with a variety of test frameworks such as Cucumber, Mocha, or Jasmine. `accessibility-checker` allows users to scan HTML nodes/widgets, URLs, local files, HTML documents, and HTML content in the form of a string. Aside from just performing accessibility scanning, `accessibility-checker` provides a framework to validate accessibility scan results against baseline files and/or simply failing the testcases based on the levels of violations found during the scan.
8
8
 
@@ -37,7 +37,7 @@ $ achecker
37
37
 
38
38
  1. Install [NodeJS and NPM](https://nodejs.org/en/download/)
39
39
  2. Some testing framework (e.g., mocha, jasmine)
40
- 3. Browser automation / parser (e.g., Selenium, Puppeteer, Zombie)
40
+ 3. Browser automation / parser (e.g., Selenium, Puppeteer, Playwright, Zombie)
41
41
 
42
42
  #### Install
43
43
 
@@ -183,6 +183,7 @@ Execute accessibility scan on provided content. `content` can be in the followin
183
183
  - Document node (HTMLDocument)
184
184
  - Selenium WebDriver (WebDriver)
185
185
  - Puppeteer page
186
+ - Playwright page
186
187
 
187
188
  Note: When using Selenium WebDriver the aChecker.getCompliance API will only take Selenium WebDriver (WebDriver) instance. When using puppeteer, aChecker.getCompliance expects the Page object.
188
189
 
@@ -0,0 +1,2 @@
1
+ #!/usr/bin/env node
2
+ export {};
package/bin/achecker.js CHANGED
@@ -1,5 +1,5 @@
1
1
  #!/usr/bin/env node
2
-
2
+ "use strict";
3
3
  /******************************************************************************
4
4
  Copyright:: 2020- IBM, Inc
5
5
 
@@ -15,34 +15,75 @@
15
15
  See the License for the specific language governing permissions and
16
16
  limitations under the License.
17
17
  *****************************************************************************/
18
-
19
- const aChecker = require("../index.js")
20
- const fs = require('fs');
21
- const readline = require('readline');
22
- const path = require("path");
23
- const request = require("request");
24
-
25
- let validCLParams = [
18
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
19
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
20
+ return new (P || (P = Promise))(function (resolve, reject) {
21
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
22
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
23
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
24
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
25
+ });
26
+ };
27
+ var __generator = (this && this.__generator) || function (thisArg, body) {
28
+ var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;
29
+ return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
30
+ function verb(n) { return function (v) { return step([n, v]); }; }
31
+ function step(op) {
32
+ if (f) throw new TypeError("Generator is already executing.");
33
+ while (_) try {
34
+ if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
35
+ if (y = 0, t) op = [op[0] & 2, t.value];
36
+ switch (op[0]) {
37
+ case 0: case 1: t = op; break;
38
+ case 4: _.label++; return { value: op[1], done: false };
39
+ case 5: _.label++; y = op[1]; op = [0]; continue;
40
+ case 7: op = _.ops.pop(); _.trys.pop(); continue;
41
+ default:
42
+ if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
43
+ if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
44
+ if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
45
+ if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
46
+ if (t[2]) _.ops.pop();
47
+ _.trys.pop(); continue;
48
+ }
49
+ op = body.call(thisArg, _);
50
+ } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
51
+ if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
52
+ }
53
+ };
54
+ var __asyncValues = (this && this.__asyncValues) || function (o) {
55
+ if (!Symbol.asyncIterator) throw new TypeError("Symbol.asyncIterator is not defined.");
56
+ var m = o[Symbol.asyncIterator], i;
57
+ return m ? m.call(o) : (o = typeof __values === "function" ? __values(o) : o[Symbol.iterator](), i = {}, verb("next"), verb("throw"), verb("return"), i[Symbol.asyncIterator] = function () { return this; }, i);
58
+ function verb(n) { i[n] = o[n] && function (v) { return new Promise(function (resolve, reject) { v = o[n](v), settle(resolve, reject, v.done, v.value); }); }; }
59
+ function settle(resolve, reject, d, v) { Promise.resolve(v).then(function(v) { resolve({ value: v, done: d }); }, reject); }
60
+ };
61
+ var aChecker = require("../index.js");
62
+ var fs = require('fs');
63
+ var readline = require('readline');
64
+ var path = require("path");
65
+ var request = require("request");
66
+ var validCLParams = [
26
67
  "inputFile"
27
- ]
28
-
29
- let splitCLParams = [
68
+ ];
69
+ var splitCLParams = [
30
70
  "policies",
31
71
  "failLevels",
32
72
  "reportLevels",
33
73
  "outputFormat",
34
74
  "label"
35
- ]
36
-
75
+ ];
37
76
  function processCommandLine(ACConfig) {
38
- const [, , ...args] = process.argv;
39
- let lastArg = null;
40
- let lastFlag = null;
41
- for (let arg of args) {
77
+ var _a = process.argv, args = _a.slice(2);
78
+ var lastArg = null;
79
+ var lastFlag = null;
80
+ for (var _i = 0, args_1 = args; _i < args_1.length; _i++) {
81
+ var arg = args_1[_i];
42
82
  if (arg.match(/^--.*$/)) {
43
83
  lastFlag = arg.substring(2);
44
84
  lastArg = null;
45
- } else if (lastFlag) {
85
+ }
86
+ else if (lastFlag) {
46
87
  if (lastFlag in ACConfig || validCLParams.includes(lastFlag)) {
47
88
  if (splitCLParams.includes(lastFlag)) {
48
89
  arg = arg.split(",");
@@ -50,7 +91,8 @@ function processCommandLine(ACConfig) {
50
91
  ACConfig[lastFlag] = arg;
51
92
  }
52
93
  lastFlag = lastArg = null;
53
- } else {
94
+ }
95
+ else {
54
96
  lastArg = arg;
55
97
  }
56
98
  }
@@ -58,169 +100,243 @@ function processCommandLine(ACConfig) {
58
100
  ACConfig.inputFile = lastArg;
59
101
  }
60
102
  }
61
-
62
- async function getFiles(dir) {
63
- let retVal = [];
64
- for (let f of fs.readdirSync(dir)) {
65
- if (f[0] === ".") {
66
- // skip
67
- } else {
68
- f = path.join(dir, f);
69
- if (fs.lstatSync(f).isDirectory()) {
70
- retVal = retVal.concat(await getFiles(f));
71
- } else if (f.endsWith(".htm") || f.endsWith(".html")) {
72
- retVal.push(f);
103
+ function getFiles(dir) {
104
+ return __awaiter(this, void 0, void 0, function () {
105
+ var retVal, _i, _a, f, _b, _c;
106
+ return __generator(this, function (_d) {
107
+ switch (_d.label) {
108
+ case 0:
109
+ retVal = [];
110
+ _i = 0, _a = fs.readdirSync(dir);
111
+ _d.label = 1;
112
+ case 1:
113
+ if (!(_i < _a.length)) return [3 /*break*/, 6];
114
+ f = _a[_i];
115
+ if (!(f[0] === ".")) return [3 /*break*/, 2];
116
+ return [3 /*break*/, 5];
117
+ case 2:
118
+ f = path.join(dir, f);
119
+ if (!fs.lstatSync(f).isDirectory()) return [3 /*break*/, 4];
120
+ _c = (_b = retVal).concat;
121
+ return [4 /*yield*/, getFiles(f)];
122
+ case 3:
123
+ retVal = _c.apply(_b, [_d.sent()]);
124
+ return [3 /*break*/, 5];
125
+ case 4:
126
+ if (f.endsWith(".htm") || f.endsWith(".html")) {
127
+ retVal.push(f);
128
+ }
129
+ _d.label = 5;
130
+ case 5:
131
+ _i++;
132
+ return [3 /*break*/, 1];
133
+ case 6: return [2 /*return*/, retVal];
73
134
  }
74
- }
75
- }
76
- return retVal;
135
+ });
136
+ });
77
137
  }
78
-
79
- async function showHelp(config) {
80
- let lastArg = config.inputFile;
81
- if (!lastArg || lastArg === "help") {
82
- console.log(
83
- `Usage: achecker [flags] [command / file / directory / URL]
84
-
85
- Commands:
86
- archives : Display valid archive ids and policy ids
87
-
88
- Flags:
89
- Flags can be set via .achecker.yml or achecker.js files. Specifying the flags here
90
- will override those options.
91
-
92
- --ruleArchive : Archive id to use. Run "achecker archives" for valid ids
93
- --policies : Comma separated list of policies. Run "achecker archives"
94
- for valid ids
95
- --failLevels : Comma separated list of levels that will indicate
96
- a failure. Valid values: violation,
97
- potentialviolation, recommendation,
98
- potentialrecommendation, manual
99
- --reportLevels : Comma separated list of levels that will be included
100
- in reports. Valid values: violation,
101
- potentialviolation, recommendation,
102
- potentialrecommendation, manual, pass
103
- --outputFormat : Comma separated list of output report formats.
104
- Valid values: json, csv
105
- --label : Comma separated list of labels to include in reports
106
- --outputFolder : Folder to output results and reports
107
- --baselineFolder : Folder that includes baseline files
108
- `);
109
- process.exit(-1);
110
- } else if (lastArg === "archives") {
111
- let archiveInfo = {
112
- "latest":[]
113
- }
114
- console.log();
115
- console.log("Archive [Archive Id]");
116
- console.log(" - Policy [Policy Id]:");
117
- console.log("-----------------------");
118
- console.log();
119
- for (const archive of config.ruleArchiveSet) {
120
- if (archive.sunset) continue;
121
- console.log(`${archive.name} [${archive.id}]`);
122
- for (const policy of archive.policies) {
123
- console.log(` - ${policy.name} [${policy.id}]`);
138
+ function showHelp(config) {
139
+ return __awaiter(this, void 0, void 0, function () {
140
+ var lastArg, archiveInfo, _i, _a, archive, _b, _c, policy;
141
+ return __generator(this, function (_d) {
142
+ lastArg = config.inputFile;
143
+ if (!lastArg || lastArg === "help") {
144
+ console.log("Usage: achecker [flags] [command / file / directory / URL]\n\nCommands:\n archives : Display valid archive ids and policy ids\n\nFlags:\n Flags can be set via .achecker.yml or achecker.js files. Specifying the flags here\n will override those options.\n\n --ruleArchive : Archive id to use. Run \"achecker archives\" for valid ids\n --policies : Comma separated list of policies. Run \"achecker archives\"\n for valid ids\n --failLevels : Comma separated list of levels that will indicate\n a failure. Valid values: violation,\n potentialviolation, recommendation,\n potentialrecommendation, manual\n --reportLevels : Comma separated list of levels that will be included\n in reports. Valid values: violation,\n potentialviolation, recommendation,\n potentialrecommendation, manual, pass\n --outputFormat : Comma separated list of output report formats.\n Valid values: json, csv\n --label : Comma separated list of labels to include in reports\n --outputFolder : Folder to output results and reports\n --baselineFolder : Folder that includes baseline files\n");
145
+ process.exit(-1);
124
146
  }
125
- archiveInfo[archive.id] = archive.policies;
126
- if (archive.latest) {
127
- archiveInfo['latest'] = archiveInfo[archive.id];
147
+ else if (lastArg === "archives") {
148
+ archiveInfo = {
149
+ "latest": []
150
+ };
151
+ console.log();
152
+ console.log("Archive [Archive Id]");
153
+ console.log(" - Policy [Policy Id]:");
154
+ console.log("-----------------------");
155
+ console.log();
156
+ for (_i = 0, _a = config.ruleArchiveSet; _i < _a.length; _i++) {
157
+ archive = _a[_i];
158
+ if (archive.sunset)
159
+ continue;
160
+ console.log(archive.name + " [" + archive.id + "]");
161
+ for (_b = 0, _c = archive.policies; _b < _c.length; _b++) {
162
+ policy = _c[_b];
163
+ console.log(" - " + policy.name + " [" + policy.id + "]");
164
+ }
165
+ archiveInfo[archive.id] = archive.policies;
166
+ if (archive.latest) {
167
+ archiveInfo['latest'] = archiveInfo[archive.id];
168
+ }
169
+ }
170
+ process.exit(-1);
128
171
  }
129
- }
130
- process.exit(-1);
131
- }
132
- }
133
-
134
- async function getInputFileList() {
135
- let config = await aChecker.getConfig();
136
- processCommandLine(config);
137
- await showHelp(config);
138
- let inputs = [];
139
- let filename = config.inputFile.trim();
140
- if (filename.endsWith(".txt")) {
141
- const fileStream = fs.createReadStream(filename);
142
-
143
- const rl = readline.createInterface({
144
- input: fileStream,
145
- crlfDelay: Infinity
172
+ return [2 /*return*/];
146
173
  });
147
- // Note: we use the crlfDelay option to recognize all instances of CR LF
148
- // ('\r\n') in input.txt as a single line break.
149
-
150
- for await (const line of rl) {
151
- if (line.trim().length === 0) {
152
-
153
- } else if (line.startsWith(path.sep)) {
154
- inputs.push(line);
155
- } else if (line.match(/[a-z]{4,5}:\/\//)) {
156
- inputs.push(line);
157
- } else {
158
- inputs.push(path.join(path.dirname(filename), line));
174
+ });
175
+ }
176
+ function getInputFileList() {
177
+ var e_1, _a;
178
+ return __awaiter(this, void 0, void 0, function () {
179
+ var config, inputs, filename, fileStream, rl, rl_1, rl_1_1, line, e_1_1, retVal, _i, inputs_1, input, isDirectory, _b, _c;
180
+ return __generator(this, function (_d) {
181
+ switch (_d.label) {
182
+ case 0: return [4 /*yield*/, aChecker.getConfig()];
183
+ case 1:
184
+ config = _d.sent();
185
+ processCommandLine(config);
186
+ return [4 /*yield*/, showHelp(config)];
187
+ case 2:
188
+ _d.sent();
189
+ inputs = [];
190
+ filename = config.inputFile.trim();
191
+ if (!filename.endsWith(".txt")) return [3 /*break*/, 15];
192
+ fileStream = fs.createReadStream(filename);
193
+ rl = readline.createInterface({
194
+ input: fileStream,
195
+ crlfDelay: Infinity
196
+ });
197
+ _d.label = 3;
198
+ case 3:
199
+ _d.trys.push([3, 8, 9, 14]);
200
+ rl_1 = __asyncValues(rl);
201
+ _d.label = 4;
202
+ case 4: return [4 /*yield*/, rl_1.next()];
203
+ case 5:
204
+ if (!(rl_1_1 = _d.sent(), !rl_1_1.done)) return [3 /*break*/, 7];
205
+ line = rl_1_1.value;
206
+ if (line.trim().length === 0) {
207
+ }
208
+ else if (line.startsWith(path.sep)) {
209
+ inputs.push(line);
210
+ }
211
+ else if (line.match(/[a-z]{4,5}:\/\//)) {
212
+ inputs.push(line);
213
+ }
214
+ else {
215
+ inputs.push(path.join(path.dirname(filename), line));
216
+ }
217
+ _d.label = 6;
218
+ case 6: return [3 /*break*/, 4];
219
+ case 7: return [3 /*break*/, 14];
220
+ case 8:
221
+ e_1_1 = _d.sent();
222
+ e_1 = { error: e_1_1 };
223
+ return [3 /*break*/, 14];
224
+ case 9:
225
+ _d.trys.push([9, , 12, 13]);
226
+ if (!(rl_1_1 && !rl_1_1.done && (_a = rl_1.return))) return [3 /*break*/, 11];
227
+ return [4 /*yield*/, _a.call(rl_1)];
228
+ case 10:
229
+ _d.sent();
230
+ _d.label = 11;
231
+ case 11: return [3 /*break*/, 13];
232
+ case 12:
233
+ if (e_1) throw e_1.error;
234
+ return [7 /*endfinally*/];
235
+ case 13: return [7 /*endfinally*/];
236
+ case 14: return [3 /*break*/, 16];
237
+ case 15:
238
+ inputs = [filename];
239
+ _d.label = 16;
240
+ case 16:
241
+ retVal = [];
242
+ _i = 0, inputs_1 = inputs;
243
+ _d.label = 17;
244
+ case 17:
245
+ if (!(_i < inputs_1.length)) return [3 /*break*/, 21];
246
+ input = inputs_1[_i];
247
+ isDirectory = false;
248
+ try {
249
+ isDirectory = fs.lstatSync(input).isDirectory();
250
+ }
251
+ catch (e) { }
252
+ if (!isDirectory) return [3 /*break*/, 19];
253
+ _c = (_b = retVal).concat;
254
+ return [4 /*yield*/, getFiles(input)];
255
+ case 18:
256
+ retVal = _c.apply(_b, [_d.sent()]);
257
+ return [3 /*break*/, 20];
258
+ case 19:
259
+ retVal.push(input);
260
+ _d.label = 20;
261
+ case 20:
262
+ _i++;
263
+ return [3 /*break*/, 17];
264
+ case 21: return [2 /*return*/, retVal];
159
265
  }
160
- }
161
- } else {
162
- inputs = [filename];
163
- }
164
-
165
- let retVal = [];
166
- for (const input of inputs) {
167
- let isDirectory = false;
168
- try {
169
- isDirectory = fs.lstatSync(input).isDirectory();
170
- } catch (e) {}
171
- if (isDirectory) {
172
- retVal = retVal.concat(await getFiles(input));
173
- } else {
174
- retVal.push(input);
175
- }
176
- }
177
- return retVal;
266
+ });
267
+ });
178
268
  }
179
-
180
269
  // Prepare the configuration
181
- getInputFileList().then(async (rptInputFiles) => {
182
- let idx = 0;
183
- let failures = [];
184
- let errors = 0;
185
- for (let f of rptInputFiles) {
186
- let result;
187
- let isFile = false;
188
- try {
189
- isFile = fs.lstatSync(f).isFile();
190
- f = path.resolve(f);
191
- } catch (e) {}
192
- if (isFile) {
193
- result = await aChecker.getCompliance("file://"+f, f.replace(/^file:\/\//,"").replace(/:/g,"_"));
194
- } else {
195
- result = await aChecker.getCompliance(f, f.replace(/^(https?:|file:)\/\//,"").replace(/:/g,"_"));
196
- }
197
- if (result) {
198
- if (aChecker.assertCompliance(result.report) === 0) {
199
- console.log("Passed:", f);
200
- } else {
201
- failures.push({
202
- file: f,
203
- report: result.report
204
- });
205
- console.log("Failed:", f);
206
- }
207
- } else {
208
- ++errors;
209
- console.log("Error:", f);
210
- }
211
- }
212
- if (failures.length > 0) {
213
- console.log();
214
- console.log("Failing scan details:");
215
- console.log();
216
- for (const fail of failures) {
217
- console.log(aChecker.stringifyResults(fail.report));
270
+ getInputFileList().then(function (rptInputFiles) { return __awaiter(void 0, void 0, void 0, function () {
271
+ var idx, failures, errors, _i, rptInputFiles_1, f, result, isFile, _a, failures_1, fail;
272
+ return __generator(this, function (_b) {
273
+ switch (_b.label) {
274
+ case 0:
275
+ idx = 0;
276
+ failures = [];
277
+ errors = 0;
278
+ _i = 0, rptInputFiles_1 = rptInputFiles;
279
+ _b.label = 1;
280
+ case 1:
281
+ if (!(_i < rptInputFiles_1.length)) return [3 /*break*/, 7];
282
+ f = rptInputFiles_1[_i];
283
+ result = void 0;
284
+ isFile = false;
285
+ try {
286
+ isFile = fs.lstatSync(f).isFile();
287
+ f = path.resolve(f);
288
+ }
289
+ catch (e) { }
290
+ if (!isFile) return [3 /*break*/, 3];
291
+ return [4 /*yield*/, aChecker.getCompliance("file://" + f, f.replace(/^file:\/\//, "").replace(/:/g, "_"))];
292
+ case 2:
293
+ result = _b.sent();
294
+ return [3 /*break*/, 5];
295
+ case 3: return [4 /*yield*/, aChecker.getCompliance(f, f.replace(/^(https?:|file:)\/\//, "").replace(/:/g, "_"))];
296
+ case 4:
297
+ result = _b.sent();
298
+ _b.label = 5;
299
+ case 5:
300
+ if (result) {
301
+ if (aChecker.assertCompliance(result.report) === 0) {
302
+ console.log("Passed:", f);
303
+ }
304
+ else {
305
+ failures.push({
306
+ file: f,
307
+ report: result.report
308
+ });
309
+ console.log("Failed:", f);
310
+ }
311
+ }
312
+ else {
313
+ ++errors;
314
+ console.log("Error:", f);
315
+ }
316
+ _b.label = 6;
317
+ case 6:
318
+ _i++;
319
+ return [3 /*break*/, 1];
320
+ case 7:
321
+ if (failures.length > 0) {
322
+ console.log();
323
+ console.log("Failing scan details:");
324
+ console.log();
325
+ for (_a = 0, failures_1 = failures; _a < failures_1.length; _a++) {
326
+ fail = failures_1[_a];
327
+ console.log(aChecker.stringifyResults(fail.report));
328
+ }
329
+ }
330
+ console.log();
331
+ console.log(rptInputFiles.length - failures.length - errors + " of " + rptInputFiles.length + " passed.");
332
+ return [4 /*yield*/, aChecker.close()];
333
+ case 8:
334
+ _b.sent();
335
+ if (failures.length !== 0 || errors !== 0) {
336
+ process.exitCode = 1;
337
+ }
338
+ return [2 /*return*/];
218
339
  }
219
- }
220
- console.log();
221
- console.log(`${rptInputFiles.length-failures.length-errors} of ${rptInputFiles.length} passed.`)
222
- await aChecker.close();
223
- if (failures.length !== 0 || errors !== 0) {
224
- process.exitCode = 1;
225
- }
226
- })
340
+ });
341
+ }); });
342
+ //# sourceMappingURL=achecker.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"achecker.js","sourceRoot":"","sources":["../../src-ts/bin/achecker.js"],"names":[],"mappings":"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"}