@axe-core/cli 4.8.0 → 4.8.1-22b3a9d.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 (63) hide show
  1. package/dist/package.json +91 -0
  2. package/dist/src/bin/cli.d.ts +2 -0
  3. package/dist/src/bin/cli.js +40 -0
  4. package/dist/src/bin/cli.js.map +1 -0
  5. package/dist/src/bin/cli.test.d.ts +1 -0
  6. package/dist/src/bin/cli.test.js +259 -0
  7. package/dist/src/bin/cli.test.js.map +1 -0
  8. package/dist/src/bin/index.d.ts +5 -0
  9. package/dist/src/bin/index.js +168 -0
  10. package/dist/src/bin/index.js.map +1 -0
  11. package/dist/src/lib/axe-test-urls.d.ts +4 -0
  12. package/dist/src/lib/axe-test-urls.js +89 -0
  13. package/dist/src/lib/axe-test-urls.js.map +1 -0
  14. package/dist/src/lib/axe-test-urls.test.d.ts +1 -0
  15. package/dist/src/lib/axe-test-urls.test.js +73 -0
  16. package/dist/src/lib/axe-test-urls.test.js.map +1 -0
  17. package/dist/src/lib/events.d.ts +10 -0
  18. package/dist/src/lib/events.js +54 -0
  19. package/dist/src/lib/events.js.map +1 -0
  20. package/dist/src/lib/events.test.d.ts +1 -0
  21. package/dist/src/lib/events.test.js +31 -0
  22. package/dist/src/lib/events.test.js.map +1 -0
  23. package/{src/lib/index.ts → dist/src/lib/index.d.ts} +0 -1
  24. package/dist/src/lib/index.js +36 -0
  25. package/dist/src/lib/index.js.map +1 -0
  26. package/dist/src/lib/utils.d.ts +15 -0
  27. package/dist/src/lib/utils.js +127 -0
  28. package/dist/src/lib/utils.js.map +1 -0
  29. package/dist/src/lib/utils.test.d.ts +1 -0
  30. package/dist/src/lib/utils.test.js +165 -0
  31. package/dist/src/lib/utils.test.js.map +1 -0
  32. package/dist/src/lib/webdriver.d.ts +4 -0
  33. package/dist/src/lib/webdriver.js +50 -0
  34. package/dist/src/lib/webdriver.js.map +1 -0
  35. package/dist/src/lib/webdriver.test.d.ts +1 -0
  36. package/dist/src/lib/webdriver.test.js +102 -0
  37. package/dist/src/lib/webdriver.test.js.map +1 -0
  38. package/dist/src/testutils/index.d.ts +19 -0
  39. package/dist/src/testutils/index.js +51 -0
  40. package/dist/src/testutils/index.js.map +1 -0
  41. package/dist/src/types.d.ts +37 -0
  42. package/dist/src/types.js +18 -0
  43. package/dist/src/types.js.map +1 -0
  44. package/package.json +7 -3
  45. package/.eslintrc.js +0 -18
  46. package/CHANGELOG.md +0 -221
  47. package/src/bin/cli.test.ts +0 -420
  48. package/src/bin/cli.ts +0 -86
  49. package/src/bin/index.ts +0 -216
  50. package/src/lib/axe-test-urls.test.ts +0 -73
  51. package/src/lib/axe-test-urls.ts +0 -98
  52. package/src/lib/events.test.ts +0 -26
  53. package/src/lib/events.ts +0 -68
  54. package/src/lib/utils.test.ts +0 -160
  55. package/src/lib/utils.ts +0 -147
  56. package/src/lib/webdriver.test.ts +0 -104
  57. package/src/lib/webdriver.ts +0 -43
  58. package/src/testutils/axe-core@2.5.0.js +0 -18929
  59. package/src/testutils/index.ts +0 -47
  60. package/src/testutils/simple-clean.html +0 -11
  61. package/src/testutils/simple.html +0 -12
  62. package/src/types.ts +0 -42
  63. package/tsconfig.json +0 -19
@@ -0,0 +1,89 @@
1
+ "use strict";
2
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
3
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
4
+ return new (P || (P = Promise))(function (resolve, reject) {
5
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
6
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
7
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
8
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
9
+ });
10
+ };
11
+ var __importDefault = (this && this.__importDefault) || function (mod) {
12
+ return (mod && mod.__esModule) ? mod : { "default": mod };
13
+ };
14
+ Object.defineProperty(exports, "__esModule", { value: true });
15
+ const webdriverjs_1 = __importDefault(require("@axe-core/webdriverjs"));
16
+ const testPages = (urls, config, events) => __awaiter(void 0, void 0, void 0, function* () {
17
+ const driver = yield config.driver;
18
+ if (urls.length === 0) {
19
+ yield driver.quit();
20
+ return Promise.resolve([]);
21
+ }
22
+ return new Promise((resolve, reject) => {
23
+ const currentUrl = urls[0].replace(/[,;]$/, '');
24
+ if (events === null || events === void 0 ? void 0 : events.onTestStart) {
25
+ events === null || events === void 0 ? void 0 : events.onTestStart(currentUrl);
26
+ }
27
+ if (config.timer) {
28
+ events === null || events === void 0 ? void 0 : events.startTimer('axe page load time');
29
+ }
30
+ driver
31
+ .get(currentUrl)
32
+ .then(() => {
33
+ if (config.timer) {
34
+ events === null || events === void 0 ? void 0 : events.endTimer('axe page load time');
35
+ }
36
+ if (config.loadDelay) {
37
+ events === null || events === void 0 ? void 0 : events.waitingMessage(config.loadDelay);
38
+ }
39
+ return new Promise(resolve => {
40
+ setTimeout(resolve, config.loadDelay);
41
+ });
42
+ })
43
+ .then(() => {
44
+ const axe = new webdriverjs_1.default(driver, config.axeSource);
45
+ if (Array.isArray(config.include)) {
46
+ config.include.forEach((include) => axe.include(include));
47
+ }
48
+ if (Array.isArray(config.exclude)) {
49
+ config.exclude.forEach((exclude) => axe.exclude(exclude));
50
+ }
51
+ if (config.tags) {
52
+ axe.withTags(config.tags);
53
+ }
54
+ else if (config.rules) {
55
+ axe.withRules(config.rules);
56
+ }
57
+ /* istanbul ignore if */
58
+ if (config.disable) {
59
+ axe.disableRules(config.disable);
60
+ }
61
+ if (config.timer) {
62
+ events === null || events === void 0 ? void 0 : events.startTimer('axe-core execution time');
63
+ }
64
+ axe.analyze((err, results) => {
65
+ if (config.timer) {
66
+ events === null || events === void 0 ? void 0 : events.endTimer('axe-core execution time');
67
+ }
68
+ /* istanbul ignore if */
69
+ if (err) {
70
+ return reject(err);
71
+ }
72
+ // Notify about the update
73
+ if (events === null || events === void 0 ? void 0 : events.onTestComplete) {
74
+ events === null || events === void 0 ? void 0 : events.onTestComplete(results);
75
+ }
76
+ // Move to the next item
77
+ testPages(urls.slice(1), config, events).then((out) => {
78
+ resolve([results].concat(out));
79
+ });
80
+ });
81
+ })
82
+ .catch((e) => __awaiter(void 0, void 0, void 0, function* () {
83
+ yield driver.quit();
84
+ reject(e);
85
+ }));
86
+ });
87
+ });
88
+ exports.default = testPages;
89
+ //# sourceMappingURL=axe-test-urls.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"axe-test-urls.js","sourceRoot":"","sources":["../../../src/lib/axe-test-urls.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1 @@
1
+ import 'mocha';
@@ -0,0 +1,73 @@
1
+ "use strict";
2
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
3
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
4
+ return new (P || (P = Promise))(function (resolve, reject) {
5
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
6
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
7
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
8
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
9
+ });
10
+ };
11
+ var __importDefault = (this && this.__importDefault) || function (mod) {
12
+ return (mod && mod.__esModule) ? mod : { "default": mod };
13
+ };
14
+ Object.defineProperty(exports, "__esModule", { value: true });
15
+ require("mocha");
16
+ const chai_1 = require("chai");
17
+ const axe_test_urls_1 = __importDefault(require("./axe-test-urls"));
18
+ describe('testPages', function () {
19
+ this.timeout(10000);
20
+ let config;
21
+ let mockDriver;
22
+ beforeEach(() => {
23
+ const func = (arg) => __awaiter(this, void 0, void 0, function* () { return '{}'; });
24
+ mockDriver = {
25
+ get: func,
26
+ executeAsyncScript: func,
27
+ executeScript: func,
28
+ wait: func,
29
+ switchTo: () => ({ defaultContent: () => { } }),
30
+ findElements: () => __awaiter(this, void 0, void 0, function* () { return []; }),
31
+ quit: func,
32
+ manage: () => ({
33
+ setTimeouts: func
34
+ })
35
+ };
36
+ config = { driver: mockDriver };
37
+ });
38
+ it('return a promise', () => {
39
+ chai_1.assert.instanceOf((0, axe_test_urls_1.default)([], config), Promise);
40
+ });
41
+ it('calls driver.get() for each URL', () => __awaiter(this, void 0, void 0, function* () {
42
+ const urlsCalled = [];
43
+ const urls = ['http://foo', 'http://bar', 'http://baz'];
44
+ mockDriver.get = (url) => __awaiter(this, void 0, void 0, function* () {
45
+ urlsCalled.push(url);
46
+ return url;
47
+ });
48
+ yield (0, axe_test_urls_1.default)(urls, config);
49
+ chai_1.assert.deepEqual(urlsCalled, urls);
50
+ }));
51
+ it('injects axe into the page', () => __awaiter(this, void 0, void 0, function* () {
52
+ const scripts = [];
53
+ config.axeSource = 'axe="hi, I am axe"';
54
+ mockDriver.executeScript = (script) => __awaiter(this, void 0, void 0, function* () {
55
+ scripts.push(script);
56
+ return script;
57
+ });
58
+ yield (0, axe_test_urls_1.default)(['http://foo'], config);
59
+ chai_1.assert.include(scripts[0].toString(), config.axeSource);
60
+ }));
61
+ it('runs axe once the page is loaded', () => __awaiter(this, void 0, void 0, function* () {
62
+ const asyncScripts = [];
63
+ mockDriver.executeAsyncScript = (script) => __awaiter(this, void 0, void 0, function* () {
64
+ asyncScripts.push(script);
65
+ return '{}';
66
+ });
67
+ yield (0, axe_test_urls_1.default)(['http://foo'], config);
68
+ chai_1.assert.isDefined(asyncScripts
69
+ .map(script => script.toString())
70
+ .find(script => script.match(/(axe\.run)|(axe\.a11yCheck)/)));
71
+ }));
72
+ });
73
+ //# sourceMappingURL=axe-test-urls.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"axe-test-urls.test.js","sourceRoot":"","sources":["../../../src/lib/axe-test-urls.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,10 @@
1
+ import type { AxeResults } from 'axe-core';
2
+ import type { EventParams } from '../types';
3
+ declare const _default: ({ silentMode, timer, cliReporter, verbose }: EventParams) => {
4
+ startTimer: (message: string) => void;
5
+ endTimer: (message: string) => void;
6
+ waitingMessage: (loadDelayTime: number) => void;
7
+ onTestStart: (url: string) => void;
8
+ onTestComplete: (results: AxeResults) => void;
9
+ };
10
+ export default _default;
@@ -0,0 +1,54 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const utils_1 = require("./utils");
4
+ exports.default = ({ silentMode, timer, cliReporter, verbose }) => {
5
+ return {
6
+ startTimer: (message) => {
7
+ console.time(message);
8
+ },
9
+ endTimer: (message) => {
10
+ console.timeEnd(message);
11
+ },
12
+ waitingMessage: (loadDelayTime) => {
13
+ console.log('Waiting for ' + loadDelayTime + ' milliseconds after page loads...');
14
+ },
15
+ onTestStart: (url) => {
16
+ if (silentMode) {
17
+ return;
18
+ }
19
+ console.log((0, utils_1.bold)('\nTesting ' + (0, utils_1.link)(url)) +
20
+ ' ... please wait, this may take a minute.');
21
+ if (timer) {
22
+ console.time('Total test time');
23
+ }
24
+ },
25
+ onTestComplete: (results) => {
26
+ const { violations, testEngine, testEnvironment, testRunner } = results;
27
+ /* istanbul ignore if */
28
+ if (violations.length === 0) {
29
+ cliReporter((0, utils_1.green)(' 0 violations found!'));
30
+ return;
31
+ }
32
+ const issueCount = violations.reduce((count, violation) => {
33
+ cliReporter('\n' +
34
+ (0, utils_1.error)(' Violation of %j with %d occurrences!\n') +
35
+ ' %s. Correct invalid elements at:\n' +
36
+ violation.nodes
37
+ .map(node => ' - ' + (0, utils_1.selectorToString)(node.target) + '\n')
38
+ .join('') +
39
+ ' For details, see: %s', violation.id, violation.nodes.length, violation.description, (0, utils_1.link)(violation.helpUrl.split('?')[0]));
40
+ return count + violation.nodes.length;
41
+ }, 0);
42
+ cliReporter((0, utils_1.error)('\n%d Accessibility issues detected.'), issueCount);
43
+ if (verbose) {
44
+ const metadata = {
45
+ 'Test Runner': testRunner,
46
+ 'Test Engine': testEngine,
47
+ 'Test Environment': testEnvironment
48
+ };
49
+ cliReporter(`\n${JSON.stringify(metadata, null, 2)}`);
50
+ }
51
+ }
52
+ };
53
+ };
54
+ //# sourceMappingURL=events.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"events.js","sourceRoot":"","sources":["../../../src/lib/events.ts"],"names":[],"mappings":";;AAEA,mCAAqE;AAErE,kBAAe,CAAC,EAAE,UAAU,EAAE,KAAK,EAAE,WAAW,EAAE,OAAO,EAAe,EAAE,EAAE;IAC1E,OAAO;QACL,UAAU,EAAE,CAAC,OAAe,EAAE,EAAE;YAC9B,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QACxB,CAAC;QACD,QAAQ,EAAE,CAAC,OAAe,EAAE,EAAE;YAC5B,OAAO,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;QAC3B,CAAC;QACD,cAAc,EAAE,CAAC,aAAqB,EAAE,EAAE;YACxC,OAAO,CAAC,GAAG,CACT,cAAc,GAAG,aAAa,GAAG,mCAAmC,CACrE,CAAC;QACJ,CAAC;QACD,WAAW,EAAE,CAAC,GAAW,EAAE,EAAE;YAC3B,IAAI,UAAU,EAAE;gBACd,OAAO;aACR;YACD,OAAO,CAAC,GAAG,CACT,IAAA,YAAI,EAAC,YAAY,GAAG,IAAA,YAAI,EAAC,GAAG,CAAC,CAAC;gBAC5B,2CAA2C,CAC9C,CAAC;YACF,IAAI,KAAK,EAAE;gBACT,OAAO,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC;aACjC;QACH,CAAC;QACD,cAAc,EAAE,CAAC,OAAmB,EAAE,EAAE;YACtC,MAAM,EAAE,UAAU,EAAE,UAAU,EAAE,eAAe,EAAE,UAAU,EAAE,GAAG,OAAO,CAAC;YAExE,wBAAwB;YACxB,IAAI,UAAU,CAAC,MAAM,KAAK,CAAC,EAAE;gBAC3B,WAAW,CAAC,IAAA,aAAK,EAAC,sBAAsB,CAAC,CAAC,CAAC;gBAC3C,OAAO;aACR;YAED,MAAM,UAAU,GAAG,UAAU,CAAC,MAAM,CAAC,CAAC,KAAK,EAAE,SAAS,EAAE,EAAE;gBACxD,WAAW,CACT,IAAI;oBACF,IAAA,aAAK,EAAC,0CAA0C,CAAC;oBACjD,wCAAwC;oBACxC,SAAS,CAAC,KAAK;yBACZ,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,SAAS,GAAG,IAAA,wBAAgB,EAAC,IAAI,CAAC,MAAM,CAAC,GAAG,IAAI,CAAC;yBAC7D,IAAI,CAAC,EAAE,CAAC;oBACX,0BAA0B,EAC5B,SAAS,CAAC,EAAE,EACZ,SAAS,CAAC,KAAK,CAAC,MAAM,EACtB,SAAS,CAAC,WAAW,EACrB,IAAA,YAAI,EAAC,SAAS,CAAC,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CACtC,CAAC;gBACF,OAAO,KAAK,GAAG,SAAS,CAAC,KAAK,CAAC,MAAM,CAAC;YACxC,CAAC,EAAE,CAAC,CAAC,CAAC;YAEN,WAAW,CAAC,IAAA,aAAK,EAAC,qCAAqC,CAAC,EAAE,UAAU,CAAC,CAAC;YAEtE,IAAI,OAAO,EAAE;gBACX,MAAM,QAAQ,GAAG;oBACf,aAAa,EAAE,UAAU;oBACzB,aAAa,EAAE,UAAU;oBACzB,kBAAkB,EAAE,eAAe;iBACpC,CAAC;gBACF,WAAW,CAAC,KAAK,IAAI,CAAC,SAAS,CAAC,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC;aACvD;QACH,CAAC;KACF,CAAC;AACJ,CAAC,CAAC"}
@@ -0,0 +1 @@
1
+ import 'mocha';
@@ -0,0 +1,31 @@
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
+ require("mocha");
7
+ const chai_1 = require("chai");
8
+ const events_1 = __importDefault(require("./events"));
9
+ describe('events()', () => {
10
+ const event = (0, events_1.default)({
11
+ silentMode: false,
12
+ timer: false,
13
+ cliReporter: () => { },
14
+ verbose: false,
15
+ exit: false
16
+ });
17
+ const functions = [
18
+ 'startTimer',
19
+ 'endTimer',
20
+ 'waitingMessage',
21
+ 'onTestStart',
22
+ 'onTestComplete'
23
+ ];
24
+ for (const eventFunction of functions) {
25
+ it(`${eventFunction} is a typeof function`, () => {
26
+ // @ts-ignore
27
+ chai_1.assert.isFunction(event[eventFunction]);
28
+ });
29
+ }
30
+ });
31
+ //# sourceMappingURL=events.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"events.test.js","sourceRoot":"","sources":["../../../src/lib/events.test.ts"],"names":[],"mappings":";;;;;AAAA,iBAAe;AACf,+BAA8B;AAC9B,sDAA8B;AAE9B,QAAQ,CAAC,UAAU,EAAE,GAAG,EAAE;IACxB,MAAM,KAAK,GAAG,IAAA,gBAAM,EAAC;QACnB,UAAU,EAAE,KAAK;QACjB,KAAK,EAAE,KAAK;QACZ,WAAW,EAAE,GAAG,EAAE,GAAE,CAAC;QACrB,OAAO,EAAE,KAAK;QACd,IAAI,EAAE,KAAK;KACZ,CAAC,CAAC;IACH,MAAM,SAAS,GAAG;QAChB,YAAY;QACZ,UAAU;QACV,gBAAgB;QAChB,aAAa;QACb,gBAAgB;KACjB,CAAC;IACF,KAAK,MAAM,aAAa,IAAI,SAAS,EAAE;QACrC,EAAE,CAAC,GAAG,aAAa,uBAAuB,EAAE,GAAG,EAAE;YAC/C,aAAa;YACb,aAAM,CAAC,UAAU,CAAC,KAAK,CAAC,aAAa,CAAC,CAAC,CAAC;QAC1C,CAAC,CAAC,CAAC;KACJ;AACH,CAAC,CAAC,CAAC"}
@@ -1,5 +1,4 @@
1
1
  import testPages from './axe-test-urls';
2
2
  import { saveOutcome } from './utils';
3
3
  import * as utils from './utils';
4
-
5
4
  export { saveOutcome, testPages, utils };
@@ -0,0 +1,36 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || function (mod) {
19
+ if (mod && mod.__esModule) return mod;
20
+ var result = {};
21
+ if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
22
+ __setModuleDefault(result, mod);
23
+ return result;
24
+ };
25
+ var __importDefault = (this && this.__importDefault) || function (mod) {
26
+ return (mod && mod.__esModule) ? mod : { "default": mod };
27
+ };
28
+ Object.defineProperty(exports, "__esModule", { value: true });
29
+ exports.utils = exports.testPages = exports.saveOutcome = void 0;
30
+ const axe_test_urls_1 = __importDefault(require("./axe-test-urls"));
31
+ exports.testPages = axe_test_urls_1.default;
32
+ const utils_1 = require("./utils");
33
+ Object.defineProperty(exports, "saveOutcome", { enumerable: true, get: function () { return utils_1.saveOutcome; } });
34
+ const utils = __importStar(require("./utils"));
35
+ exports.utils = utils;
36
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/lib/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,oEAAwC;AAIlB,oBAJf,uBAAS,CAIe;AAH/B,mCAAsC;AAG7B,4FAHA,mBAAW,OAGA;AAFpB,+CAAiC;AAEA,sBAAK"}
@@ -0,0 +1,15 @@
1
+ import colors from 'colors';
2
+ import type { AxeResults, UnlabelledFrameSelector } from 'axe-core';
3
+ export declare const saveOutcome: (outcome: AxeResults | AxeResults[], fileName?: string, dir?: string) => string;
4
+ export declare const parseUrl: (url: string) => string;
5
+ export declare const parseBrowser: (browser?: string) => string | Error;
6
+ export declare const getAxeSource: (axePath?: string, dirname?: string) => string | void;
7
+ export declare const getAxeVersion: (source: string) => string;
8
+ export declare const splitList: (val: string) => string[];
9
+ export declare const selectorToString: (selectors: UnlabelledFrameSelector, separator?: string) => string;
10
+ export declare const reporter: (noReporter: boolean, silentMode: boolean) => (() => void);
11
+ export declare const link: colors.Color;
12
+ export declare const error: colors.Color;
13
+ export declare const bold: colors.Color;
14
+ export declare const green: colors.Color;
15
+ export declare const italics: colors.Color;
@@ -0,0 +1,127 @@
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.italics = exports.green = exports.bold = exports.error = exports.link = exports.reporter = exports.selectorToString = exports.splitList = exports.getAxeVersion = exports.getAxeSource = exports.parseBrowser = exports.parseUrl = exports.saveOutcome = void 0;
7
+ const fs_1 = __importDefault(require("fs"));
8
+ const path_1 = __importDefault(require("path"));
9
+ const colors_1 = __importDefault(require("colors"));
10
+ const saveOutcome = (outcome, fileName, dir) => {
11
+ if (typeof fileName !== 'string') {
12
+ fileName = 'axe-results-' + Date.now() + '.json';
13
+ }
14
+ /* istanbul ignore if */
15
+ if (typeof dir !== 'string') {
16
+ dir = process.cwd();
17
+ }
18
+ else if (!path_1.default.isAbsolute(dir)) {
19
+ dir = path_1.default.join(process.cwd(), dir);
20
+ }
21
+ const filePath = path_1.default.join(dir, fileName);
22
+ /* istanbul ignore else */
23
+ if (!fs_1.default.existsSync(filePath)) {
24
+ fs_1.default.mkdirSync(dir, { recursive: true });
25
+ }
26
+ fs_1.default.writeFileSync(filePath, JSON.stringify(outcome, null, 2), 'utf-8');
27
+ return filePath;
28
+ };
29
+ exports.saveOutcome = saveOutcome;
30
+ const parseUrl = (url) => {
31
+ if (!/[a-z]+:\/\//.test(url)) {
32
+ return 'http://' + url;
33
+ }
34
+ return url;
35
+ };
36
+ exports.parseUrl = parseUrl;
37
+ const parseBrowser = (browser) => {
38
+ if (!browser) {
39
+ return 'chrome-headless';
40
+ }
41
+ const l = browser.length;
42
+ switch (browser.toLowerCase()) {
43
+ case 'ff':
44
+ case 'firefox'.substr(0, l):
45
+ case 'gecko'.substr(0, l):
46
+ case 'marionette'.substr(0, l):
47
+ return 'firefox';
48
+ case 'chrome'.substr(0, l):
49
+ return 'chrome';
50
+ case 'ie':
51
+ case 'explorer'.substr(0, l):
52
+ case 'internetexplorer'.substr(0, l):
53
+ case 'internet_explorer'.substr(0, l):
54
+ case 'internet-explorer'.substr(0, l):
55
+ return 'ie';
56
+ case 'safari'.substr(0, l):
57
+ return 'safari';
58
+ case 'edge'.substr(0, l):
59
+ case 'microsoftedge'.substr(0, l):
60
+ return 'MicrosoftEdge';
61
+ default:
62
+ throw new Error('Unknown browser ' + browser);
63
+ }
64
+ };
65
+ exports.parseBrowser = parseBrowser;
66
+ const getAxeSource = (axePath, dirname) => {
67
+ // Abort if axePath should exist, and it isn't
68
+ if (axePath && !fs_1.default.existsSync(axePath)) {
69
+ return;
70
+ }
71
+ let cwd = dirname;
72
+ if (!cwd) {
73
+ cwd = process.cwd();
74
+ }
75
+ if (!dirname) {
76
+ dirname = __dirname;
77
+ }
78
+ // Look for axe in current working directory
79
+ if (!axePath) {
80
+ axePath = path_1.default.join(cwd, 'axe.js');
81
+ }
82
+ if (!fs_1.default.existsSync(axePath)) {
83
+ // Look for axe in CWD ./node_modules
84
+ axePath = path_1.default.join(cwd, 'node_modules', 'axe-core', 'axe.js');
85
+ }
86
+ if (!fs_1.default.existsSync(axePath)) {
87
+ // in local develop using npm workspaces axe-core is
88
+ // hoisted to the root, but when published axe-core
89
+ // will be in the node_modules for the cli
90
+ axePath = require.resolve('axe-core/axe.js');
91
+ }
92
+ return fs_1.default.readFileSync(axePath, 'utf-8');
93
+ };
94
+ exports.getAxeSource = getAxeSource;
95
+ const getAxeVersion = (source) => {
96
+ const match = source.match(/\.version\s*=\s'([^']+)'/);
97
+ return match ? match[1] : 'unknown version';
98
+ };
99
+ exports.getAxeVersion = getAxeVersion;
100
+ const splitList = (val) => {
101
+ return val.split(/[,;]/).map(str => str.trim());
102
+ };
103
+ exports.splitList = splitList;
104
+ const selectorToString = (selectors, separator) => {
105
+ separator = separator || ' ';
106
+ return selectors
107
+ .reduce((prev, curr) => prev.concat(curr), [])
108
+ .join(separator);
109
+ };
110
+ exports.selectorToString = selectorToString;
111
+ const reporter = (noReporter, silentMode) => {
112
+ if (!noReporter || silentMode) {
113
+ return () => { };
114
+ }
115
+ else {
116
+ return (...args) => {
117
+ console.log(...args);
118
+ };
119
+ }
120
+ };
121
+ exports.reporter = reporter;
122
+ exports.link = colors_1.default.underline.blue;
123
+ exports.error = colors_1.default.red.bold;
124
+ exports.bold = colors_1.default.bold;
125
+ exports.green = colors_1.default.green;
126
+ exports.italics = colors_1.default.italic;
127
+ //# sourceMappingURL=utils.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"utils.js","sourceRoot":"","sources":["../../../src/lib/utils.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1 @@
1
+ import 'mocha';