Skip to content

Commit 34187e4

Browse files
committed
Remove DOM.json. Use aria-query::dom
1 parent 762f44c commit 34187e4

File tree

8 files changed

+40
-202
lines changed

8 files changed

+40
-202
lines changed

__mocks__/genInteractives.js

Lines changed: 10 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,14 @@
1-
import { roles } from 'aria-query';
1+
import {
2+
dom,
3+
roles,
4+
} from 'aria-query';
25
import JSXAttributeMock from './JSXAttributeMock';
36
import JSXElementMock from './JSXElementMock';
4-
import DOMElements from '../src/util/attributes/DOM.json';
57

6-
const pureInteractiveElements = Object.keys(DOMElements)
7-
.filter(name => DOMElements[name].interactive === true)
8+
const domElements = [...dom.keys()];
9+
10+
const pureInteractiveElements = domElements
11+
.filter(name => dom.get(name).interactive === true)
812
.reduce((interactiveElements, name) => {
913
interactiveElements[name] = [];
1014
return interactiveElements;
@@ -23,8 +27,8 @@ const interactiveElementsMap = {
2327
],
2428
};
2529

26-
const pureNonInteractiveElementsMap = Object.keys(DOMElements)
27-
.filter(name => !DOMElements[name].interactive)
30+
const pureNonInteractiveElementsMap = domElements
31+
.filter(name => !dom.get(name).interactive)
2832
.reduce((nonInteractiveElements, name) => {
2933
nonInteractiveElements[name] = [];
3034
return nonInteractiveElements;

__tests__/src/rules/aria-unsupported-elements-test.js

Lines changed: 10 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -9,9 +9,9 @@
99
// Requirements
1010
// -----------------------------------------------------------------------------
1111

12+
import { dom } from 'aria-query';
1213
import { RuleTester } from 'eslint';
1314
import parserOptionsMapper from '../../__util__/parserOptionsMapper';
14-
import DOM from '../../../src/util/attributes/DOM.json';
1515
import rule from '../../../src/rules/aria-unsupported-elements';
1616

1717
// -----------------------------------------------------------------------------
@@ -26,18 +26,19 @@ Try removing the prop '${invalidProp}'.`,
2626
type: 'JSXOpeningElement',
2727
});
2828

29+
const domElements = [...dom.keys()];
2930
// Generate valid test cases
30-
const roleValidityTests = Object.keys(DOM).map((element) => {
31-
const isReserved = DOM[element].reserved || false;
31+
const roleValidityTests = domElements.map((element) => {
32+
const isReserved = dom.get(element).reserved || false;
3233
const role = isReserved ? '' : 'role';
3334

3435
return {
3536
code: `<${element} ${role} />`,
3637
};
3738
});
3839

39-
const ariaValidityTests = Object.keys(DOM).map((element) => {
40-
const isReserved = DOM[element].reserved || false;
40+
const ariaValidityTests = domElements.map((element) => {
41+
const isReserved = dom.get(element).reserved || false;
4142
const aria = isReserved ? '' : 'aria-hidden';
4243

4344
return {
@@ -46,15 +47,15 @@ const ariaValidityTests = Object.keys(DOM).map((element) => {
4647
});
4748

4849
// Generate invalid test cases.
49-
const invalidRoleValidityTests = Object.keys(DOM)
50-
.filter(element => Boolean(DOM[element].reserved))
50+
const invalidRoleValidityTests = domElements
51+
.filter(element => Boolean(dom.get(element).reserved))
5152
.map(reservedElem => ({
5253
code: `<${reservedElem} role {...props} />`,
5354
errors: [errorMessage('role')],
5455
}));
5556

56-
const invalidAriaValidityTests = Object.keys(DOM)
57-
.filter(element => Boolean(DOM[element].reserved))
57+
const invalidAriaValidityTests = domElements
58+
.filter(element => Boolean(dom.get(element).reserved))
5859
.map(reservedElem => ({
5960
code: `<${reservedElem} aria-hidden {...props} />`,
6061
errors: [errorMessage('aria-hidden')],

src/rules/aria-activedescendant-has-tabindex.js

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -3,9 +3,9 @@
33
* @author Jesse Beach <@jessebeach>
44
*/
55

6+
import { dom } from 'aria-query';
67
import { getProp, elementType } from 'jsx-ast-utils';
78
import { generateObjSchema } from '../util/schemas';
8-
import DOMElements from '../util/attributes/DOM.json';
99
import getTabIndex from '../util/getTabIndex';
1010
import isInteractiveElement from '../util/isInteractiveElement';
1111

@@ -18,7 +18,7 @@ const errorMessage =
1818

1919
const schema = generateObjSchema();
2020

21-
const DOMElementKeys = Object.keys(DOMElements);
21+
const domElements = [...dom.keys()];
2222

2323
module.exports = {
2424
meta: {
@@ -37,7 +37,7 @@ module.exports = {
3737
const type = elementType(node);
3838
// Do not test higher level JSX components, as we do not know what
3939
// low-level DOM element this maps to.
40-
if (DOMElementKeys.indexOf(type) === -1) {
40+
if (domElements.indexOf(type) === -1) {
4141
return;
4242
}
4343
const tabIndex = getTabIndex(getProp(attributes, 'tabIndex'));

src/rules/aria-unsupported-elements.js

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -8,10 +8,12 @@
88
// Rule Definition
99
// ----------------------------------------------------------------------------
1010

11-
import { aria } from 'aria-query';
11+
import {
12+
aria,
13+
dom,
14+
} from 'aria-query';
1215
import { elementType, propName } from 'jsx-ast-utils';
1316
import { generateObjSchema } from '../util/schemas';
14-
import DOM from '../util/attributes/DOM.json';
1517

1618
const errorMessage = invalidProp =>
1719
`This element does not support ARIA roles, states and properties. \
@@ -28,7 +30,7 @@ module.exports = {
2830
create: context => ({
2931
JSXOpeningElement: (node) => {
3032
const nodeType = elementType(node);
31-
const nodeAttrs = DOM[nodeType] || {};
33+
const nodeAttrs = dom.get(nodeType) || {};
3234
const {
3335
reserved: isReservedNodeType = false,
3436
} = nodeAttrs;

src/rules/scope.js

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,9 +7,9 @@
77
// Rule Definition
88
// ----------------------------------------------------------------------------
99

10+
import { dom } from 'aria-query';
1011
import { propName, elementType } from 'jsx-ast-utils';
1112
import { generateObjSchema } from '../util/schemas';
12-
import DOMElements from '../util/attributes/DOM.json';
1313

1414
const errorMessage = 'The scope prop can only be used on <th> elements.';
1515

@@ -33,7 +33,7 @@ module.exports = {
3333

3434
// Do not test higher level JSX components, as we do not know what
3535
// low-level DOM element this maps to.
36-
if (Object.keys(DOMElements).indexOf(tagName) === -1) {
36+
if ([...dom.keys()].indexOf(tagName) === -1) {
3737
return;
3838
} else if (tagName && tagName.toUpperCase() === 'TH') {
3939
return;

src/util/attributes/DOM.json

Lines changed: 0 additions & 171 deletions
This file was deleted.

src/util/isInteractiveElement.js

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,11 @@
1+
import { dom } from 'aria-query';
12
import { getProp, getPropValue, getLiteralPropValue } from 'jsx-ast-utils';
23
import getTabIndex from './getTabIndex';
3-
import DOMElements from './attributes/DOM.json';
44

55
// Map of tagNames to functions that return whether that element is interactive or not.
6-
7-
const pureInteractiveElements = Object.keys(DOMElements)
8-
.filter(name => DOMElements[name].interactive === true)
6+
const DOMElements = [...dom.keys()];
7+
const pureInteractiveElements = DOMElements
8+
.filter(name => dom.get(name).interactive === true)
99
.reduce((accumulator, name) => {
1010
const interactiveElements = accumulator;
1111
interactiveElements[name] = () => true;
@@ -37,7 +37,7 @@ export const interactiveElementsMap = {
3737
const isInteractiveElement = (tagName, attributes) => {
3838
// Do not test higher level JSX components, as we do not know what
3939
// low-level DOM element this maps to.
40-
if (Object.keys(DOMElements).indexOf(tagName) === -1) {
40+
if (DOMElements.indexOf(tagName) === -1) {
4141
return true;
4242
}
4343

src/util/isInteractiveRole.js

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,8 @@
1-
import { roles } from 'aria-query';
1+
import {
2+
dom,
3+
roles,
4+
} from 'aria-query';
25
import { getProp, getLiteralPropValue } from 'jsx-ast-utils';
3-
import DOMElements from './attributes/DOM.json';
46

57
const VALID_ROLES = [...roles.keys()]
68
.filter(role => roles.get(role).interactive === true);
@@ -18,7 +20,7 @@ const VALID_ROLES = [...roles.keys()]
1820
const isInteractiveRole = (tagName, attributes) => {
1921
// Do not test higher level JSX components, as we do not know what
2022
// low-level DOM element this maps to.
21-
if (Object.keys(DOMElements).indexOf(tagName) === -1) {
23+
if ([...dom.keys()].indexOf(tagName) === -1) {
2224
return true;
2325
}
2426

0 commit comments

Comments
 (0)