Skip to content

Commit fb5b87a

Browse files
evilebottnawibeefancohen
authored andcommitted
Fix: backward compatibility with node.js v4 and v5. (#231)
1 parent ca876d2 commit fb5b87a

12 files changed

+33
-21
lines changed

package.json

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -55,6 +55,7 @@
5555
"license": "MIT",
5656
"dependencies": {
5757
"aria-query": "^0.5.0",
58+
"array-includes": "^3.0.3",
5859
"ast-types-flow": "0.0.7",
5960
"axobject-query": "^0.1.0",
6061
"damerau-levenshtein": "^1.0.0",

src/rules/click-events-have-key-events.js

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@ import {
1111
dom,
1212
} from 'aria-query';
1313
import { getProp, hasAnyProp, elementType } from 'jsx-ast-utils';
14+
import includes from 'array-includes';
1415
import { generateObjSchema } from '../util/schemas';
1516
import isHiddenFromScreenReader from '../util/isHiddenFromScreenReader';
1617
import isInteractiveElement from '../util/isInteractiveElement';
@@ -37,7 +38,7 @@ module.exports = {
3738
const type = elementType(node);
3839
const requiredProps = ['onkeydown', 'onkeyup', 'onkeypress'];
3940

40-
if (!domElements.includes(type)) {
41+
if (!includes(domElements, type)) {
4142
// Do not test higher level JSX components, as we do not know what
4243
// low-level DOM element this maps to.
4344
return;

src/rules/interactive-supports-focus.js

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@ import {
1212
hasAnyProp,
1313
} from 'jsx-ast-utils';
1414
import type { JSXOpeningElement } from 'ast-types-flow';
15+
import includes from 'array-includes';
1516
import { generateObjSchema } from '../util/schemas';
1617
import isHiddenFromScreenReader from '../util/isHiddenFromScreenReader';
1718
import isInteractiveElement from '../util/isInteractiveElement';
@@ -53,7 +54,7 @@ module.exports = {
5354
getProp(attributes, 'tabIndex'),
5455
) !== undefined;
5556

56-
if (!domElements.includes(type)) {
57+
if (!includes(domElements, type)) {
5758
// Do not test higher level JSX components, as we do not know what
5859
// low-level DOM element this maps to.
5960
return;

src/rules/no-interactive-element-to-noninteractive-role.js

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@ import {
1919
propName,
2020
} from 'jsx-ast-utils';
2121
import type { JSXIdentifier } from 'ast-types-flow';
22+
import includes from 'array-includes';
2223
import isInteractiveElement from '../util/isInteractiveElement';
2324
import isNonInteractiveRole from '../util/isNonInteractiveRole';
2425
import isPresentationRole from '../util/isPresentationRole';
@@ -58,7 +59,7 @@ module.exports = {
5859
const type = elementType(node);
5960
const role = getLiteralPropValue(getProp(node.attributes, 'role'));
6061

61-
if (!domElements.includes(type)) {
62+
if (!includes(domElements, type)) {
6263
// Do not test higher level JSX components, as we do not know what
6364
// low-level DOM element this maps to.
6465
return;
@@ -68,7 +69,7 @@ module.exports = {
6869
const allowedRoles = (options[0] || {});
6970
if (
7071
Object.prototype.hasOwnProperty.call(allowedRoles, type)
71-
&& allowedRoles[type].includes(role)
72+
&& includes(allowedRoles[type], role)
7273
) {
7374
return;
7475
}

src/rules/no-noninteractive-element-interactions.js

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@ import {
1818
hasProp,
1919
} from 'jsx-ast-utils';
2020
import type { JSXOpeningElement } from 'ast-types-flow';
21+
import includes from 'array-includes';
2122
import { arraySchema, generateObjSchema } from '../util/schemas';
2223
import isAbstractRole from '../util/isAbstractRole';
2324
import isHiddenFromScreenReader from '../util/isHiddenFromScreenReader';
@@ -60,7 +61,7 @@ module.exports = {
6061
&& getPropValue(getProp(attributes, prop)) != null
6162
));
6263

63-
if (!domElements.includes(type)) {
64+
if (!includes(domElements, type)) {
6465
// Do not test higher level JSX components, as we do not know what
6566
// low-level DOM element this maps to.
6667
return;

src/rules/no-noninteractive-element-to-interactive-role.js

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@ import {
2020
import type {
2121
JSXIdentifier,
2222
} from 'ast-types-flow';
23+
import includes from 'array-includes';
2324
import isNonInteractiveElement from '../util/isNonInteractiveElement';
2425
import isInteractiveRole from '../util/isInteractiveRole';
2526

@@ -58,7 +59,7 @@ module.exports = {
5859
const type = elementType(node);
5960
const role = getLiteralPropValue(getProp(node.attributes, 'role'));
6061

61-
if (!domElements.includes(type)) {
62+
if (!includes(domElements, type)) {
6263
// Do not test higher level JSX components, as we do not know what
6364
// low-level DOM element this maps to.
6465
return;
@@ -68,7 +69,7 @@ module.exports = {
6869
const allowedRoles = (options[0] || {});
6970
if (
7071
Object.prototype.hasOwnProperty.call(allowedRoles, type)
71-
&& allowedRoles[type].includes(role)
72+
&& includes(allowedRoles[type], role)
7273
) {
7374
return;
7475
}

src/rules/no-noninteractive-tabindex.js

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@ import {
1616
getProp,
1717
getLiteralPropValue,
1818
} from 'jsx-ast-utils';
19+
import includes from 'array-includes';
1920
import isInteractiveElement from '../util/isInteractiveElement';
2021
import isInteractiveRole from '../util/isInteractiveRole';
2122
import { generateObjSchema, arraySchema } from '../util/schemas';
@@ -71,8 +72,8 @@ module.exports = {
7172
roles,
7273
} = (options[0] || {});
7374
if (
74-
(tags && tags.includes(type))
75-
|| (roles && roles.includes(role))
75+
(tags && includes(tags, type))
76+
|| (roles && includes(roles, role))
7677
) {
7778
return;
7879
}

src/rules/no-static-element-interactions.js

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@ import {
1919
hasProp,
2020
} from 'jsx-ast-utils';
2121
import type { JSXOpeningElement } from 'ast-types-flow';
22+
import includes from 'array-includes';
2223
import { arraySchema, generateObjSchema } from '../util/schemas';
2324
import isAbstractRole from '../util/isAbstractRole';
2425
import isHiddenFromScreenReader from '../util/isHiddenFromScreenReader';
@@ -61,7 +62,7 @@ module.exports = {
6162
&& getPropValue(getProp(attributes, prop)) != null
6263
));
6364

64-
if (!domElements.includes(type)) {
65+
if (!includes(domElements, type)) {
6566
// Do not test higher level JSX components, as we do not know what
6667
// low-level DOM element this maps to.
6768
return;

src/util/isInteractiveElement.js

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@ import {
1111
AXObjects,
1212
elementAXObjects,
1313
} from 'axobject-query';
14+
import includes from 'array-includes';
1415
import attributesComparator from './attributesComparator';
1516

1617
const roleKeys = [...roles.keys()];
@@ -23,7 +24,7 @@ const nonInteractiveRoles = new Set(
2324
return (
2425
!role.abstract
2526
&& !role.superClass.some(
26-
classes => classes.includes('widget'),
27+
classes => includes(classes, 'widget'),
2728
)
2829
);
2930
}),
@@ -41,7 +42,7 @@ const interactiveRoles = new Set(
4142
return (
4243
!role.abstract
4344
&& role.superClass.some(
44-
classes => classes.includes('widget'),
45+
classes => includes(classes, 'widget'),
4546
)
4647
);
4748
}),

src/util/isInteractiveRole.js

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -4,12 +4,13 @@ import {
44
} from 'aria-query';
55
import type { Node } from 'ast-types-flow';
66
import { getProp, getLiteralPropValue } from 'jsx-ast-utils';
7+
import includes from 'array-includes';
78

89
const roles = [...rolesMap.keys()];
910
const interactiveRoles = roles
1011
.filter(name => !rolesMap.get(name).abstract)
1112
.filter(name => rolesMap.get(name).superClass.some(
12-
klasses => klasses.includes('widget')),
13+
klasses => includes(klasses, 'widget')),
1314
);
1415

1516
// 'toolbar' does not descend from widget, but it does support
@@ -45,14 +46,14 @@ const isInteractiveRole = (
4546
accumulator: Array<string>,
4647
name: string,
4748
) => {
48-
if (roles.includes(name)) {
49+
if (includes(roles, name)) {
4950
accumulator.push(name);
5051
}
5152
return accumulator;
5253
}, []);
5354
if (validRoles.length > 0) {
5455
// The first role value is a series takes precedence.
55-
isInteractive = interactiveRoles.includes(validRoles[0]);
56+
isInteractive = includes(interactiveRoles, validRoles[0]);
5657
}
5758

5859
return isInteractive;

0 commit comments

Comments
 (0)