@axe-core/watcher 3.11.1-next.ffd54e39 → 3.11.1-rc.100a71b1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/Controller.d.ts +1 -9
- package/dist/Controller.js +7 -21
- package/dist/Controller.js.map +1 -1
- package/dist/cypress.js +2 -19
- package/dist/cypress.js.map +1 -1
- package/dist/cypressCommands.d.ts +1 -3
- package/dist/cypressCommands.js +39 -78
- package/dist/cypressCommands.js.map +1 -1
- package/dist/playwright.js +1 -1
- package/dist/playwright.js.map +1 -1
- package/dist/playwrightTest.js +1 -1
- package/dist/playwrightTest.js.map +1 -1
- package/dist/puppeteer.js +1 -1
- package/dist/puppeteer.js.map +1 -1
- package/dist/puppeteerWrapping.d.ts +2 -3
- package/dist/puppeteerWrapping.js +1 -59
- package/dist/puppeteerWrapping.js.map +1 -1
- package/dist/sendResultsToServer.d.ts +2 -9
- package/dist/sendResultsToServer.js +3 -25
- package/dist/sendResultsToServer.js.map +1 -1
- package/dist/util.d.ts +2 -22
- package/dist/util.js +3 -12
- package/dist/util.js.map +1 -1
- package/dist/wdio.js +1 -1
- package/dist/wdio.js.map +1 -1
- package/dist/webdriver.js +2 -2
- package/dist/webdriver.js.map +1 -1
- package/extension/background.js +1 -1
- package/extension/content.js +1 -1
- package/package.json +2 -5
- package/dist/createDebugger.d.ts +0 -9
- package/dist/createDebugger.js +0 -27
- package/dist/createDebugger.js.map +0 -1
- package/dist/utils/index.d.ts +0 -2
- package/dist/utils/index.js +0 -20
- package/dist/utils/index.js.map +0 -1
- package/dist/utils/validateAxeRunContext.d.ts +0 -2
- package/dist/utils/validateAxeRunContext.js +0 -60
- package/dist/utils/validateAxeRunContext.js.map +0 -1
- package/dist/utils/validateAxeRunContext.test.d.ts +0 -2
- package/dist/utils/validateAxeRunContext.test.js +0 -100
- package/dist/utils/validateAxeRunContext.test.js.map +0 -1
- package/dist/utils/validateAxeRunOptions.d.ts +0 -13
- package/dist/utils/validateAxeRunOptions.js +0 -162
- package/dist/utils/validateAxeRunOptions.js.map +0 -1
- package/dist/utils/validateAxeRunOptions.test.d.ts +0 -2
- package/dist/utils/validateAxeRunOptions.test.js +0 -230
- package/dist/utils/validateAxeRunOptions.test.js.map +0 -1
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@axe-core/watcher",
|
|
3
|
-
"version": "3.11.1-
|
|
3
|
+
"version": "3.11.1-rc.100a71b1",
|
|
4
4
|
"description": "",
|
|
5
5
|
"license": "UNLICENSED",
|
|
6
6
|
"main": "dist/index.js",
|
|
@@ -10,7 +10,7 @@
|
|
|
10
10
|
],
|
|
11
11
|
"scripts": {
|
|
12
12
|
"build": "tsc",
|
|
13
|
-
"test": "mocha 'src
|
|
13
|
+
"test": "mocha 'src/*.test.ts'",
|
|
14
14
|
"test:e2e": "mocha 'e2e/*.test.ts'",
|
|
15
15
|
"serve:e2e": "ts-node e2e/Server.ts",
|
|
16
16
|
"coverage": "nyc npm test",
|
|
@@ -18,7 +18,6 @@
|
|
|
18
18
|
"dev": "tsc -w"
|
|
19
19
|
},
|
|
20
20
|
"dependencies": {
|
|
21
|
-
"debug": "^4.3.5",
|
|
22
21
|
"eventemitter3": "^5.0.1",
|
|
23
22
|
"node-fetch": "^2.6.7",
|
|
24
23
|
"sync-request": "^6.1.0",
|
|
@@ -30,7 +29,6 @@
|
|
|
30
29
|
"@types/body-parser": "^1.19.2",
|
|
31
30
|
"@types/chai": "^4.3.3",
|
|
32
31
|
"@types/cors": "^2.8.12",
|
|
33
|
-
"@types/debug": "^4.1.12",
|
|
34
32
|
"@types/express": "^4.17.14",
|
|
35
33
|
"@types/mocha": "^10.0.0",
|
|
36
34
|
"@types/morgan": "^1.9.3",
|
|
@@ -54,7 +52,6 @@
|
|
|
54
52
|
"morgan": "^1.10.0",
|
|
55
53
|
"nock": "^13.3.2",
|
|
56
54
|
"nyc": "^15.1.0",
|
|
57
|
-
"playwright-core": "^1.43.1",
|
|
58
55
|
"proxyquire": "^2.1.3",
|
|
59
56
|
"puppeteer": "^22.1.0",
|
|
60
57
|
"rimraf": "^5.0.5",
|
package/dist/createDebugger.d.ts
DELETED
|
@@ -1,9 +0,0 @@
|
|
|
1
|
-
import debug from 'debug';
|
|
2
|
-
/**
|
|
3
|
-
* Creates a debug logger with the given namespace
|
|
4
|
-
*
|
|
5
|
-
* @param namespace The namespace for the debug logger for example: `PlaywrightController` or `PlaywrightWrapping`.
|
|
6
|
-
* @returns debug instance
|
|
7
|
-
*/
|
|
8
|
-
declare function createDebugger(namespace: string): debug.Debugger;
|
|
9
|
-
export default createDebugger;
|
package/dist/createDebugger.js
DELETED
|
@@ -1,27 +0,0 @@
|
|
|
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
|
-
const debug_1 = __importDefault(require("debug"));
|
|
7
|
-
/**
|
|
8
|
-
* The prefix for the debug logger allows users to filter logs by the prefix
|
|
9
|
-
* using the debug package.
|
|
10
|
-
*
|
|
11
|
-
* @example
|
|
12
|
-
* ```bash
|
|
13
|
-
* DEBUG=axe-watcher:* yarn test
|
|
14
|
-
* ```
|
|
15
|
-
*/
|
|
16
|
-
const NAMESPACE_PREFIX = 'axe-watcher';
|
|
17
|
-
/**
|
|
18
|
-
* Creates a debug logger with the given namespace
|
|
19
|
-
*
|
|
20
|
-
* @param namespace The namespace for the debug logger for example: `PlaywrightController` or `PlaywrightWrapping`.
|
|
21
|
-
* @returns debug instance
|
|
22
|
-
*/
|
|
23
|
-
function createDebugger(namespace) {
|
|
24
|
-
return (0, debug_1.default)(`${NAMESPACE_PREFIX}:${namespace}`);
|
|
25
|
-
}
|
|
26
|
-
exports.default = createDebugger;
|
|
27
|
-
//# sourceMappingURL=createDebugger.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"createDebugger.js","sourceRoot":"","sources":["../src/createDebugger.ts"],"names":[],"mappings":";;;;;AAAA,kDAAyB;AAEzB;;;;;;;;GAQG;AACH,MAAM,gBAAgB,GAAG,aAAa,CAAA;AAEtC;;;;;GAKG;AAEH,SAAS,cAAc,CAAC,SAAiB;IACvC,OAAO,IAAA,eAAK,EAAC,GAAG,gBAAgB,IAAI,SAAS,EAAE,CAAC,CAAA;AAClD,CAAC;AAED,kBAAe,cAAc,CAAA"}
|
package/dist/utils/index.d.ts
DELETED
package/dist/utils/index.js
DELETED
|
@@ -1,20 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
// TODO: https://github.com/dequelabs/jazzband/issues/1227
|
|
3
|
-
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
4
|
-
if (k2 === undefined) k2 = k;
|
|
5
|
-
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
6
|
-
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
7
|
-
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
8
|
-
}
|
|
9
|
-
Object.defineProperty(o, k2, desc);
|
|
10
|
-
}) : (function(o, m, k, k2) {
|
|
11
|
-
if (k2 === undefined) k2 = k;
|
|
12
|
-
o[k2] = m[k];
|
|
13
|
-
}));
|
|
14
|
-
var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
15
|
-
for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
|
|
16
|
-
};
|
|
17
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
18
|
-
__exportStar(require("./validateAxeRunOptions"), exports);
|
|
19
|
-
__exportStar(require("./validateAxeRunContext"), exports);
|
|
20
|
-
//# sourceMappingURL=index.js.map
|
package/dist/utils/index.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/utils/index.ts"],"names":[],"mappings":";AAAA,0DAA0D;;;;;;;;;;;;;;;;AAE1D,0DAAuC;AACvC,0DAAuC"}
|
|
@@ -1,60 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.validateAxeRunContext = void 0;
|
|
4
|
-
function validateAxeRunContext(runContext = undefined) {
|
|
5
|
-
if (!runContext) {
|
|
6
|
-
return;
|
|
7
|
-
}
|
|
8
|
-
if (!isContextObject(runContext)) {
|
|
9
|
-
throw new Error(`\`runContext\` must be an object, an array of objects, or a string. Examples: \n
|
|
10
|
-
- Object: { runContext: { include: 'selector' } }\n
|
|
11
|
-
- Array: { runContext: ['selector1', 'selector2'] }\n
|
|
12
|
-
- String: { runContext: 'selector' }\n
|
|
13
|
-
|
|
14
|
-
For more detailed examples: https://www.deque.com/axe/core-documentation/api-documentation/#context-parameter
|
|
15
|
-
`);
|
|
16
|
-
}
|
|
17
|
-
}
|
|
18
|
-
exports.validateAxeRunContext = validateAxeRunContext;
|
|
19
|
-
/**
|
|
20
|
-
* Validates the context object for the `runContext` parameter of the `axe.run` method.
|
|
21
|
-
* Borrowed from axe-core's original implementation.
|
|
22
|
-
*
|
|
23
|
-
* @see https://github.com/dequelabs/axe-core/blob/0577a74fab385a590b31c9118f3da7ad55051097/lib/core/base/context/normalize-context.js#L92
|
|
24
|
-
*
|
|
25
|
-
* Removed `window.node` check
|
|
26
|
-
*
|
|
27
|
-
* @param contextSpec - The context object to validate
|
|
28
|
-
* @returns `true` if the context object is valid, `false` otherwise
|
|
29
|
-
*/
|
|
30
|
-
function isContextObject(contextSpec) {
|
|
31
|
-
return ['include', 'exclude'].some(prop => objectHasOwn(contextSpec, prop) &&
|
|
32
|
-
isContextProp(contextSpec[prop]));
|
|
33
|
-
}
|
|
34
|
-
//@see https://github.com/dequelabs/axe-core/blob/0577a74fab385a590b31c9118f3da7ad55051097/lib/core/base/context/normalize-context.js#L98
|
|
35
|
-
function isContextProp(contextList) {
|
|
36
|
-
return (typeof contextList === 'string' ||
|
|
37
|
-
isLabelledFramesSelector(contextList) ||
|
|
38
|
-
isLabelledShadowDomSelector(contextList) ||
|
|
39
|
-
isArrayLike(contextList));
|
|
40
|
-
}
|
|
41
|
-
// @see https://github.com/dequelabs/axe-core/blob/0577a74fab385a590b31c9118f3da7ad55051097/lib/core/base/context/normalize-context.js#L178-L184
|
|
42
|
-
function objectHasOwn(obj, prop) {
|
|
43
|
-
if (!obj || typeof obj !== 'object') {
|
|
44
|
-
return false;
|
|
45
|
-
}
|
|
46
|
-
return Object.prototype.hasOwnProperty.call(obj, prop);
|
|
47
|
-
}
|
|
48
|
-
//@see https://github.com/dequelabs/axe-core/blob/0577a74fab385a590b31c9118f3da7ad55051097/lib/core/base/context/normalize-context.js#L108
|
|
49
|
-
function isLabelledFramesSelector(selector) {
|
|
50
|
-
return objectHasOwn(selector, 'fromFrames');
|
|
51
|
-
}
|
|
52
|
-
//@see https://github.com/dequelabs/axe-core/blob/0577a74fab385a590b31c9118f3da7ad55051097/lib/core/base/context/normalize-context.js#L112
|
|
53
|
-
function isLabelledShadowDomSelector(selector) {
|
|
54
|
-
return objectHasOwn(selector, 'fromShadowDom');
|
|
55
|
-
}
|
|
56
|
-
// @see https://github.com/dequelabs/axe-core/blob/0577a74fab385a590b31c9118f3da7ad55051097/lib/core/base/context/normalize-context.js#L160C1-L168C2
|
|
57
|
-
function isArrayLike(arr) {
|
|
58
|
-
return arr && typeof arr === 'object' && typeof arr.length === 'number';
|
|
59
|
-
}
|
|
60
|
-
//# sourceMappingURL=validateAxeRunContext.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"validateAxeRunContext.js","sourceRoot":"","sources":["../../src/utils/validateAxeRunContext.ts"],"names":[],"mappings":";;;AAEA,SAAgB,qBAAqB,CACnC,aAAyC,SAAS;IAElD,IAAI,CAAC,UAAU,EAAE,CAAC;QAChB,OAAM;IACR,CAAC;IAED,IAAI,CAAC,eAAe,CAAC,UAAU,CAAC,EAAE,CAAC;QACjC,MAAM,IAAI,KAAK,CACb;;;;;;OAMC,CACF,CAAA;IACH,CAAC;AACH,CAAC;AAlBD,sDAkBC;AAED;;;;;;;;;;GAUG;AACH,SAAS,eAAe,CAAC,WAA2B;IAClD,OAAO,CAAC,SAAS,EAAE,SAAS,CAAC,CAAC,IAAI,CAChC,IAAI,CAAC,EAAE,CACL,YAAY,CAAC,WAAW,EAAE,IAAI,CAAC;QAC/B,aAAa,CAAC,WAAW,CAAC,IAA4B,CAAC,CAAC,CAC3D,CAAA;AACH,CAAC;AAED,yIAAyI;AACzI,SAAS,aAAa,CACpB,WAAiD;IAEjD,OAAO,CACL,OAAO,WAAW,KAAK,QAAQ;QAC/B,wBAAwB,CAAC,WAAW,CAAC;QACrC,2BAA2B,CAAC,WAAW,CAAC;QACxC,WAAW,CAAC,WAAW,CAAC,CACzB,CAAA;AACH,CAAC;AAED,gJAAgJ;AAChJ,SAAS,YAAY,CAAC,GAAY,EAAE,IAAiB;IACnD,IAAI,CAAC,GAAG,IAAI,OAAO,GAAG,KAAK,QAAQ,EAAE,CAAC;QACpC,OAAO,KAAK,CAAA;IACd,CAAC;IACD,OAAO,MAAM,CAAC,SAAS,CAAC,cAAc,CAAC,IAAI,CAAC,GAAG,EAAE,IAAI,CAAC,CAAA;AACxD,CAAC;AAED,0IAA0I;AAC1I,SAAS,wBAAwB,CAAC,QAAiB;IACjD,OAAO,YAAY,CAAC,QAAQ,EAAE,YAAY,CAAC,CAAA;AAC7C,CAAC;AAED,0IAA0I;AAC1I,SAAS,2BAA2B,CAAC,QAAiB;IACpD,OAAO,YAAY,CAAC,QAAQ,EAAE,eAAe,CAAC,CAAA;AAChD,CAAC;AAED,oJAAoJ;AACpJ,SAAS,WAAW,CAAC,GAAc;IACjC,OAAO,GAAG,IAAI,OAAO,GAAG,KAAK,QAAQ,IAAI,OAAO,GAAG,CAAC,MAAM,KAAK,QAAQ,CAAA;AACzE,CAAC"}
|
|
@@ -1,100 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
require("mocha");
|
|
4
|
-
const chai_1 = require("chai");
|
|
5
|
-
const validateAxeRunContext_1 = require("./validateAxeRunContext");
|
|
6
|
-
describe('validateAxeRunContext', () => {
|
|
7
|
-
describe('when no run context is provided', () => {
|
|
8
|
-
it('does not throw an error', () => {
|
|
9
|
-
chai_1.assert.doesNotThrow(() => (0, validateAxeRunContext_1.validateAxeRunContext)());
|
|
10
|
-
});
|
|
11
|
-
});
|
|
12
|
-
describe('given a valid run context', () => {
|
|
13
|
-
describe('when the run context is a string', () => {
|
|
14
|
-
it('does not throw an error', () => {
|
|
15
|
-
chai_1.assert.doesNotThrow(() => (0, validateAxeRunContext_1.validateAxeRunContext)({ include: 'selector' }));
|
|
16
|
-
});
|
|
17
|
-
});
|
|
18
|
-
describe('when the run context is an array of strings', () => {
|
|
19
|
-
it('does not throw an error', () => {
|
|
20
|
-
chai_1.assert.doesNotThrow(() => (0, validateAxeRunContext_1.validateAxeRunContext)({ include: ['selector1', 'selector2'] }));
|
|
21
|
-
});
|
|
22
|
-
});
|
|
23
|
-
describe('when the run context is an object', () => {
|
|
24
|
-
describe('when the object has an `include` property', () => {
|
|
25
|
-
it('does not throw an error', () => {
|
|
26
|
-
chai_1.assert.doesNotThrow(() => (0, validateAxeRunContext_1.validateAxeRunContext)({ include: 'selector' }));
|
|
27
|
-
});
|
|
28
|
-
describe('and a `fromFrames` property', () => {
|
|
29
|
-
it('does not throw an error', () => {
|
|
30
|
-
chai_1.assert.doesNotThrow(() => (0, validateAxeRunContext_1.validateAxeRunContext)({
|
|
31
|
-
include: {
|
|
32
|
-
fromFrames: ['selector', 'selector']
|
|
33
|
-
}
|
|
34
|
-
}));
|
|
35
|
-
});
|
|
36
|
-
});
|
|
37
|
-
describe('and a `fromShadowDom` property', () => {
|
|
38
|
-
it('does not throw an error', () => {
|
|
39
|
-
chai_1.assert.doesNotThrow(() => (0, validateAxeRunContext_1.validateAxeRunContext)({
|
|
40
|
-
include: {
|
|
41
|
-
fromShadowDom: ['selector', 'selector']
|
|
42
|
-
}
|
|
43
|
-
}));
|
|
44
|
-
});
|
|
45
|
-
});
|
|
46
|
-
});
|
|
47
|
-
describe('when the object has an `exclude` property', () => {
|
|
48
|
-
it('does not throw an error', () => {
|
|
49
|
-
chai_1.assert.doesNotThrow(() => (0, validateAxeRunContext_1.validateAxeRunContext)({ exclude: 'selector' }));
|
|
50
|
-
});
|
|
51
|
-
describe('and a `fromFrames` property', () => {
|
|
52
|
-
it('does not throw an error', () => {
|
|
53
|
-
chai_1.assert.doesNotThrow(() => (0, validateAxeRunContext_1.validateAxeRunContext)({
|
|
54
|
-
exclude: {
|
|
55
|
-
fromFrames: ['selector', 'selector']
|
|
56
|
-
}
|
|
57
|
-
}));
|
|
58
|
-
});
|
|
59
|
-
});
|
|
60
|
-
describe('and a `fromShadowDom` property', () => {
|
|
61
|
-
it('does not throw an error', () => {
|
|
62
|
-
chai_1.assert.doesNotThrow(() => (0, validateAxeRunContext_1.validateAxeRunContext)({
|
|
63
|
-
exclude: {
|
|
64
|
-
fromShadowDom: ['selector', 'selector']
|
|
65
|
-
}
|
|
66
|
-
}));
|
|
67
|
-
});
|
|
68
|
-
});
|
|
69
|
-
});
|
|
70
|
-
describe('when the object has both `include` and `exclude` properties', () => {
|
|
71
|
-
it('does not throw an error', () => {
|
|
72
|
-
chai_1.assert.doesNotThrow(() => (0, validateAxeRunContext_1.validateAxeRunContext)({ include: 'selector', exclude: 'selector' }));
|
|
73
|
-
});
|
|
74
|
-
});
|
|
75
|
-
});
|
|
76
|
-
});
|
|
77
|
-
describe('given an invalid run context', () => {
|
|
78
|
-
describe('and does not have an `include` or `exclude` property', () => {
|
|
79
|
-
describe('and is not a string', () => {
|
|
80
|
-
it('throws an error', () => {
|
|
81
|
-
//@ts-expect-error - Testing invalid input
|
|
82
|
-
chai_1.assert.throws(() => (0, validateAxeRunContext_1.validateAxeRunContext)(1));
|
|
83
|
-
});
|
|
84
|
-
});
|
|
85
|
-
describe('and is not an array of strings', () => {
|
|
86
|
-
it('throws an error', () => {
|
|
87
|
-
//@ts-expect-error - Testing invalid input
|
|
88
|
-
chai_1.assert.throws(() => (0, validateAxeRunContext_1.validateAxeRunContext)([1, 2]));
|
|
89
|
-
});
|
|
90
|
-
});
|
|
91
|
-
describe('and does not have a `fromFrames` or `fromShadowDom` property', () => {
|
|
92
|
-
it('throws an error', () => {
|
|
93
|
-
//@ts-expect-error - Testing invalid input
|
|
94
|
-
chai_1.assert.throws(() => (0, validateAxeRunContext_1.validateAxeRunContext)({ a: 'a' }));
|
|
95
|
-
});
|
|
96
|
-
});
|
|
97
|
-
});
|
|
98
|
-
});
|
|
99
|
-
});
|
|
100
|
-
//# sourceMappingURL=validateAxeRunContext.test.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"validateAxeRunContext.test.js","sourceRoot":"","sources":["../../src/utils/validateAxeRunContext.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,13 +0,0 @@
|
|
|
1
|
-
import type { RunOptions as AxeRunOptions } from 'axe-core';
|
|
2
|
-
export type RunOptions = Pick<AxeRunOptions, 'runOnly' | 'rules' | 'ancestry'>;
|
|
3
|
-
/**
|
|
4
|
-
* We only provide a subset of axe-core's RunOptions.
|
|
5
|
-
* We want to sanitize the user's input to ensure they are not providing
|
|
6
|
-
* any invalid properties that are outside of the subset we provide.
|
|
7
|
-
*
|
|
8
|
-
* @param runOptions The user's run options.
|
|
9
|
-
*/
|
|
10
|
-
export declare function validateAxeRunOptions(runOptions?: RunOptions | undefined): asserts runOptions is RunOptions;
|
|
11
|
-
/** Helper functions */
|
|
12
|
-
/** Checks if the value provided is an object */
|
|
13
|
-
export declare function isObject(value: unknown): value is Record<string, unknown>;
|
|
@@ -1,162 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.isObject = exports.validateAxeRunOptions = void 0;
|
|
4
|
-
const VALID_RUN_ONLY_TYPES = [
|
|
5
|
-
'rules',
|
|
6
|
-
'rule',
|
|
7
|
-
'tag',
|
|
8
|
-
'tags'
|
|
9
|
-
];
|
|
10
|
-
/**
|
|
11
|
-
* We only provide a subset of axe-core's RunOptions.
|
|
12
|
-
* We want to sanitize the user's input to ensure they are not providing
|
|
13
|
-
* any invalid properties that are outside of the subset we provide.
|
|
14
|
-
*
|
|
15
|
-
* @param runOptions The user's run options.
|
|
16
|
-
*/
|
|
17
|
-
function validateAxeRunOptions(runOptions = undefined) {
|
|
18
|
-
if (!runOptions) {
|
|
19
|
-
return;
|
|
20
|
-
}
|
|
21
|
-
const runOptionsKeys = Object.keys(runOptions);
|
|
22
|
-
const validKeys = [
|
|
23
|
-
'runOnly',
|
|
24
|
-
'rules',
|
|
25
|
-
'ancestry'
|
|
26
|
-
];
|
|
27
|
-
for (const key of runOptionsKeys) {
|
|
28
|
-
switch (key) {
|
|
29
|
-
case 'ancestry':
|
|
30
|
-
if (!isBoolean(runOptions.ancestry)) {
|
|
31
|
-
throw new Error('`ancestry` property must be a boolean. Full example: `{ ancestry: true }`');
|
|
32
|
-
}
|
|
33
|
-
break;
|
|
34
|
-
case 'rules':
|
|
35
|
-
validateRulesProperty(runOptions.rules);
|
|
36
|
-
break;
|
|
37
|
-
case 'runOnly':
|
|
38
|
-
validateRunOnlyProperty(runOptions.runOnly);
|
|
39
|
-
break;
|
|
40
|
-
default:
|
|
41
|
-
throw new Error(`Invalid property found in \`runOptions\`: ${key}. The available properties are: ${validKeys.join(', ')}`);
|
|
42
|
-
}
|
|
43
|
-
}
|
|
44
|
-
}
|
|
45
|
-
exports.validateAxeRunOptions = validateAxeRunOptions;
|
|
46
|
-
/** Helper functions */
|
|
47
|
-
/** Checks if the value provided is an object */
|
|
48
|
-
function isObject(value) {
|
|
49
|
-
return value !== null && typeof value === 'object' && !Array.isArray(value);
|
|
50
|
-
}
|
|
51
|
-
exports.isObject = isObject;
|
|
52
|
-
/** Checks if the value provided is a boolean */
|
|
53
|
-
function isBoolean(value) {
|
|
54
|
-
return typeof value === 'boolean';
|
|
55
|
-
}
|
|
56
|
-
/**
|
|
57
|
-
* Validate the user's `rules` object and its values. As a user can provide:
|
|
58
|
-
* @example
|
|
59
|
-
* {
|
|
60
|
-
* rules: {
|
|
61
|
-
* 'ruleId1': { enabled: false },
|
|
62
|
-
* 'ruleId2': { enabled: false }
|
|
63
|
-
* 'ruleId3': { enabled: false }
|
|
64
|
-
* // ...
|
|
65
|
-
* }
|
|
66
|
-
* }
|
|
67
|
-
*
|
|
68
|
-
* @param rules The user's rules object.
|
|
69
|
-
*/
|
|
70
|
-
function validateRulesProperty(rules) {
|
|
71
|
-
if (!isObject(rules)) {
|
|
72
|
-
throw new Error('`rules` property must be an object. Full example: `{ rules: { "ruleId": { enabled: false } } }`');
|
|
73
|
-
}
|
|
74
|
-
if (!Object.keys(rules).length) {
|
|
75
|
-
throw new Error('`rules` object must contain at least one key-value pair. Full example: `{ rules: { "ruleId": { enabled: false } } }`');
|
|
76
|
-
}
|
|
77
|
-
// Validate each K:V pair in the `rules` object e.g. { 'ruleId': { enabled: false } }
|
|
78
|
-
for (const ruleKey of Object.keys(rules)) {
|
|
79
|
-
const ruleValue = rules[ruleKey];
|
|
80
|
-
if (!isObject(ruleValue)) {
|
|
81
|
-
throw new Error(`The value of the \`${ruleKey}\` key in the \`rules\` object must be an object. Full example: \`{ rules: { "ruleId": { enabled: false } } }\``);
|
|
82
|
-
}
|
|
83
|
-
if (Object.keys(ruleValue).length !== 1) {
|
|
84
|
-
throw new Error(`The \`${ruleKey}\` key in the \`rules\` object must only contain the \`enabled\` property. Full example: \`{ rules: { "ruleId": { enabled: false } } }\``);
|
|
85
|
-
}
|
|
86
|
-
if (!('enabled' in ruleValue)) {
|
|
87
|
-
throw new Error(`The \`${ruleKey}\` key in the \`rules\` object must contain an \`enabled\` property. Full example: \`{ rules: { "ruleId": { enabled: false } } }\``);
|
|
88
|
-
}
|
|
89
|
-
if (!isBoolean(ruleValue.enabled)) {
|
|
90
|
-
throw new Error(`The \`enabled\` property of the \`${ruleKey}\` key in the \`rules\` object must be a boolean. Full example: \`{ rules: { "ruleId": { enabled: false } } }\``);
|
|
91
|
-
}
|
|
92
|
-
}
|
|
93
|
-
}
|
|
94
|
-
/**
|
|
95
|
-
* Validate the user's `runOnly` configuration. A user can provide:
|
|
96
|
-
* @example
|
|
97
|
-
* {
|
|
98
|
-
* runOnly: {
|
|
99
|
-
* type: 'rule',
|
|
100
|
-
* values: ['ruleId1', 'ruleId2', 'ruleId3']
|
|
101
|
-
* }
|
|
102
|
-
* }
|
|
103
|
-
*
|
|
104
|
-
* OR
|
|
105
|
-
*
|
|
106
|
-
* @example
|
|
107
|
-
* {
|
|
108
|
-
* runOnly: ['ruleId1', 'ruleId2', 'ruleId3']
|
|
109
|
-
* }
|
|
110
|
-
*
|
|
111
|
-
* OR
|
|
112
|
-
*
|
|
113
|
-
* @example
|
|
114
|
-
* {
|
|
115
|
-
* runOnly: 'ruleId1'
|
|
116
|
-
* }
|
|
117
|
-
*
|
|
118
|
-
* @param runOnly The user's runOnly object, array, or string.
|
|
119
|
-
*/
|
|
120
|
-
function validateRunOnlyProperty(runOnly) {
|
|
121
|
-
const isRunOnlyObject = isObject(runOnly);
|
|
122
|
-
const isRunOnlyArray = Array.isArray(runOnly);
|
|
123
|
-
const isRunOnlyString = typeof runOnly === 'string';
|
|
124
|
-
if (!isRunOnlyObject && !isRunOnlyArray && !isRunOnlyString) {
|
|
125
|
-
throw new Error(`\`runOnly\` property must be an object, an array, or a string. Examples: \n
|
|
126
|
-
- Object: { runOnly: { type: 'rule', values: ['ruleId1'] } }\n
|
|
127
|
-
- Array: { runOnly: ['ruleId1', 'ruleId2', 'ruleId3'] }\n
|
|
128
|
-
- String: { runOnly: 'ruleId1' }\n
|
|
129
|
-
|
|
130
|
-
For more detailed examples: https://www.deque.com/axe/core-documentation/api-documentation/#options-parameter
|
|
131
|
-
`);
|
|
132
|
-
}
|
|
133
|
-
if (isRunOnlyArray) {
|
|
134
|
-
if (!runOnly.length) {
|
|
135
|
-
throw new Error(`\`runOnly\` array must contain at least one string value. Example: { runOnly: ['ruleId1', 'ruleId2'] }`);
|
|
136
|
-
}
|
|
137
|
-
if (runOnly.some(value => typeof value !== 'string')) {
|
|
138
|
-
throw new Error(`\`runOnly\` array must contain only strings. Example: { runOnly: ['ruleId1', 'ruleId2'] }`);
|
|
139
|
-
}
|
|
140
|
-
}
|
|
141
|
-
if (isRunOnlyObject) {
|
|
142
|
-
if (!('type' in runOnly)) {
|
|
143
|
-
throw new Error(`\`runOnly\` object must contain a \`type\` property. Example: { runOnly: { type: 'rule', values: ['ruleId1'] } }`);
|
|
144
|
-
}
|
|
145
|
-
if (!('values' in runOnly)) {
|
|
146
|
-
throw new Error(`\`runOnly\` object must contain a \`values\` property. Example: { runOnly: { type: 'rule', values: ['ruleId1'] } }`);
|
|
147
|
-
}
|
|
148
|
-
if (!VALID_RUN_ONLY_TYPES.includes(runOnly.type)) {
|
|
149
|
-
throw new Error(`\`runOnly\` object's \`type\` property must be one of the following: ${VALID_RUN_ONLY_TYPES.join(', ')}`);
|
|
150
|
-
}
|
|
151
|
-
if (!Array.isArray(runOnly.values)) {
|
|
152
|
-
throw new Error(`\`runOnly\` object's \`values\` property must be an array. Example: { runOnly: { type: 'rule', values: ['ruleId1'] } }`);
|
|
153
|
-
}
|
|
154
|
-
if (!runOnly.values.length) {
|
|
155
|
-
throw new Error(`\`runOnly\` object's \`values\` property must contain at least one value. Example: { runOnly: { type: 'rule', values: ['ruleId1'] } }`);
|
|
156
|
-
}
|
|
157
|
-
if (runOnly.values.some(value => typeof value !== 'string')) {
|
|
158
|
-
throw new Error(`\`runOnly\` object's \`values\` property must contain only strings. Example: { runOnly: { type: 'rule', values: ['ruleId1'] } }`);
|
|
159
|
-
}
|
|
160
|
-
}
|
|
161
|
-
}
|
|
162
|
-
//# sourceMappingURL=validateAxeRunOptions.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"validateAxeRunOptions.js","sourceRoot":"","sources":["../../src/utils/validateAxeRunOptions.ts"],"names":[],"mappings":"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"}
|