diff --git a/CHANGELOG.md b/CHANGELOG.md
index 8a01e881..bee88424 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -72,3 +72,130 @@ Upgrade support of ARIA from 1.1 to 1.2
## 4.2.2
- 7819fe4 Fix the allowed props of the heading role (jsx-eslint/eslint-plugin-jsx-a11y#704)
+
+## 5.0.0
+
+This major release removes the runtime Babel dependencies that were necessary because of Map and Set usage. Map and Set usages are now replaced with object and array literals.
+
+These are the changes in usage you might need to account for:
+
+- The module exports are no longer Maps, so you cannot spread them directly into an array to access their items. Use the `entries` method to get access to the items.
+- Some values used to be Sets; these are now Arrays.
+- The `keys` and `values` methods now return arrays, not iterators.
+- There is no `forEach` method. One could be added in the future, but at present, it does not exist on the exports.
+
+### Commits of note
+
+- 92cecd2 chore(deps-dev): bump flow-bin from 0.160.2 to 0.161.0 (#261)
+- b10e864 Remove the usage of Maps and Sets, along with the Babel Runtime - dependency (#250)
+- 1953885 chore(deps-dev): bump jest from 27.2.1 to 27.2.2 (#252)
+- 1dfb98f chore(deps): bump actions/setup-node from 2.4.0 to 2.4.1 (#254)
+- f4fd458 chore(deps-dev): bump expect from 27.2.1 to 27.2.2 (#253)
+- f85ecec chore(deps-dev): bump babel-jest from 27.2.1 to 27.2.2 (#251)
+- b03b46a chore(deps-dev): bump flow-bin from 0.154.0 to 0.160.2 (#249)
+- 4f9c5f0 Update Flow bin version (#248)
+- cd57f86 Add aria-valuenow prop to the separator role
+- 144aca0 Use block for instead of iterable for
+- ef49ee8 Remove spread operator from roleElementMap
+- bac9501 Update the test for roleElementMap to include specific items
+- 8094edf Remove spread operator from elementRoleMap
+- 980ceea Add a test for the specific items in elementRoleMap
+- 5b477bc chore(deps-dev): bump eslint-plugin-flowtype from 5.10.0 to 6.1.0 (#246)
+- d28d7c1 chore(deps-dev): bump commander from 8.0.0 to 8.2.0 (#245)
+- 57b38d1 chore(deps-dev): bump @babel/plugin-transform-runtime (#237)
+- 1519ec1 chore(deps): bump @babel/runtime-corejs3 from 7.14.7 to 7.15.4 (#241)
+- 691e51b chore(deps-dev): bump eslint-plugin-import from 2.23.4 to 2.24.2 (#243)
+- 9e1711c chore(deps-dev): bump eslint from 7.28.0 to 7.32.0 (#244)
+- 589d97a chore(deps-dev): bump @babel/preset-env from 7.14.7 to 7.15.6 (#239)
+- 1c48278 chore(deps-dev): bump expect from 27.0.2 to 27.2.1 (#242)
+- 71c2f61 chore(deps): bump @babel/runtime from 7.14.0 to 7.15.4 (#240)
+- 73c2339 chore(deps-dev): bump eslint-plugin-flowtype from 5.7.2 to 5.10.0 (#238)
+- 85d983c chore(deps-dev): bump babel-jest from 27.0.2 to 27.2.1 (#232)
+- dc91b47 chore(deps): bump tmpl from 1.0.4 to 1.0.5 (#235)
+- 53fa58c chore(deps-dev): bump jest from 27.0.4 to 27.2.1 (#233)
+- 8affde6 chore(deps-dev): bump @babel/cli from 7.14.3 to 7.15.7 (#231)
+- 5f8369c chore(deps): bump path-parse from 1.0.6 to 1.0.7 (#220)
+- 7051091 chore(deps): bump actions/setup-node from 2.3.0 to 2.4.0 (#219)
+- 4a1ac48 chore(deps): bump coverallsapp/github-action from 1.1.2 to 1.1.3 (#213)
+- 5ebf3e7 chore(deps-dev): bump @babel/core from 7.14.3 to 7.15.5 (#225)
+- e2be68b Account for nosync file paths in the ignore files (#236)
+- 5adca2f chore(deps): bump actions/setup-node from 2.2.0 to 2.3.0 (#214)
+- 2bf4afa Fixing the package-lock.json file
+- a325a23 chore(deps-dev): bump @babel/core from 7.12.10 to 7.14.2
+- b6c7e7d chore(deps-dev): bump jest from 27.0.4 to 27.0.6 (#208)
+- fe8255b chore(deps-dev): bump eslint-plugin-flowtype from 5.7.2 to 5.8.0 (#201)
+- e005fa9 chore(deps-dev): bump @babel/core from 7.14.3 to 7.14.6 (#202)
+- b7800bd chore(deps-dev): bump babel-jest from 27.0.2 to 27.0.6 (#207)
+- 388fcf8 chore(deps-dev): bump eslint from 7.28.0 to 7.30.0 (#206)
+- 9dc75ec chore(deps-dev): bump commander from 7.2.0 to 8.0.0 (#205)
+- f808394 chore(deps-dev): bump expect from 27.0.2 to 27.0.6 (#204)
+- fdbc963 chore(deps-dev): bump @babel/cli from 7.14.3 to 7.14.5 (#203)
+- 823c292 Updating package-lock which only added an fsevents reference
+- 61fe8b7 chore(deps-dev): bump @babel/plugin-transform-runtime (#200)
+- 2ef3e93 chore(deps-dev): bump @babel/preset-flow from 7.13.13 to 7.14.5 (#188)
+- d68a04a chore(deps): bump actions/setup-node from 2.1.5 to 2.2.0
+- b0f6437 chore(deps-dev): bump @babel/preset-env from 7.12.11 to 7.14.7
+- 18725dd chore(deps): bump @babel/runtime-corejs3 from 7.12.5 to 7.14.7
+- d7b6389 chore(deps-dev): bump eslint from 7.19.0 to 7.28.0 (#183)
+- a4aa09b chore(deps-dev): bump expect from 26.6.2 to 27.0.2 (#184)
+- b861ba8 chore(deps-dev): bump babel-jest from 26.6.3 to 27.0.2 (#176)
+- 2fa3a72 chore(deps-dev): bump eslint-plugin-import from 2.22.1 to 2.23.4 (#177)
+- 7e0d575 chore(deps-dev): bump eslint-plugin-flowtype from 5.2.0 to 5.7.2 (#179)
+- 48e1737 chore(deps-dev): bump jest from 26.6.3 to 27.0.4 (#182)
+- 925ed16 chore(deps-dev): bump commander from 7.0.0 to 7.2.0 (#174)
+- c545b74 chore(deps-dev): bump @babel/* to 7.14.3 (#168)
+- 4ed066b chore(deps): bump actions/cache from 2.1.5 to 2.1.6 (#172)
+- ca72279 chore(deps): bump ws from 7.4.2 to 7.4.6 (#173)
+- 638027d chore(deps): bump browserslist from 4.16.0 to 4.16.6 (#171)
+- 9392447 test: Ignore build output when linting (#167)
+- 38f1759 chore(deps): bump actions/cache from 2 to 2.1.5 (#161)
+- 5ec0f9a chore(deps): bump actions/setup-node from 2 to 2.1.5 (#159)
+- 687461f chore(deps): bump actions/checkout from 2 to 2.3.4 (#160)
+- 80e4bd6 chore(deps): bump hosted-git-info from 2.8.8 to 2.8.9 (#157)
+- e4e7114 chore(deps): bump lodash from 4.17.20 to 4.17.21 (#156)
+- 87abf49 chore(deps-dev): bump eslint from 7.18.0 to 7.19.0 (#112)
+- 24467e7 chore(deps-dev): bump commander from 6.2.1 to 7.0.0 (#108)
+- afe23cb chore(deps-dev): bump flow-bin from 0.143.0 to 0.143.1 (#111)
+- 2e6a301 chore(deps-dev): bump flow-bin from 0.142.0 to 0.143.0 (#110)
+- 947cff3 chore(deps-dev): bump eslint from 7.17.0 to 7.18.0 (#109)
+- 3c5399c chore(deps-dev): bump @babel/plugin-transform-runtime (#106)
+- 633fc3c chore(deps-dev): bump @babel/cli from 7.10.1 to 7.12.10 (#107)
+- ed738a3 chore(deps-dev): bump eslint from 7.16.0 to 7.17.0 (#104)
+- 3e45d3c chore(deps-dev): bump commander from 2.20.3 to 6.2.1 (#105)
+- f6b049d chore(deps): bump @babel/runtime from 7.10.2 to 7.12.5 (#98)
+- 894ee58 chore(deps-dev): bump @babel/preset-flow from 7.10.1 to 7.12.1 (#97)
+- a494ed1 chore(deps-dev): bump rimraf from 2.7.1 to 3.0.2 (#99)
+- 7d3297d chore(deps-dev): bump flow-bin from 0.141.0 to 0.142.0 (#103)
+- 9eed1f5 chore(deps-dev): bump @babel/core from 7.10.2 to 7.12.10 (#100)
+- 5f20ae0 chore(deps): bump @babel/runtime-corejs3 from 7.10.2 to 7.12.5 (#101)
+- e803d94 chore: Turn on eslint:recommended and address new rules (#96)
+- 5a68aa1 fix: Remove bash-like command in flow NPM script (#95)
+- a7506ad chore: Expand ESLint glob to all files (#93)
+- cf56e0c chore: Cleanup README (#94)
+- dd958db chore: Use NPM CI for CI (#90)
+- e604a6e chore: Remove coveralls NPM config (#91)
+- e4b6d28 Update coveralls, expect and flow-bin (#92)
+- 0e7ccdf Bump babel-jest from 24.9.0 to 26.6.3 (#84)
+- 76b7a41 chore: Remove Travis-CI config (#89)
+- bc1a437 Only diff the src dir in the CI Diff check (#87)
+- e466929 Bump lodash from 4.17.15 to 4.17.20 (#86)
+- a7429ee Bump eslint from 6.8.0 to 7.16.0 (#85)
+- 83ec474 fix: type sig for ARIAPropertyDefinition (#74)
+- f3b4e83 chore: Remove npmrc (#78)
+- 717d76c chore: Add Depependabot config (#79)
+- 50e05b1 Update test.yml (#76)
+- b9ee176 Update test.yml (#75)
+- a8cd23a Create test.yml
+- 25fbc40 fix: Sync with stable editor's draft (#69)
+- 7df56ba docs: fix CDN url (#71)
+- 74009cf fix: definition/term roles (#70)
+- 2a5dafb feat: Sync with stable editor's draft
+- 1241efe chore: Seal AriaPropertMap type (#67)
+- 0b6fcc4 "that there is no maximum value" > no default value
+- e6dd042 Keep required props in sync with props
+- 995b6b9 Remove deprecated props
+- d99d54e Update ariaPropsMap
+- eb123ce Update types
+- 1284970 Update roles.json
+- 1d9840c docs(readme): Add tracked aria version
+- 971679a fix: Normalize required props (#64)
\ No newline at end of file
diff --git a/README.md b/README.md
index 3a5f5138..bd1a859d 100644
--- a/README.md
+++ b/README.md
@@ -22,14 +22,27 @@ It should work with Node version 6.11.2 or later.
## Utilities
+### Interface
+
+These methods are available on each export from the module. The typing here in the documentation is pseudo-typed. Each export will have its own specific types for each method signature.
+
+```javascript
+{|
+ entries: () => Array<$Item>,
+ get: (key: $Key) => ?$Value,
+ has: (key: $Key) => boolean,
+ keys: () => Array<$Key>,
+ values: () => Array<$Value>,
+|};
+```
+
### Roles
```javascript
import { roles } from 'aria-query';
```
-A [Map](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Map) of
-role names to the role definition. For example:
+A map of role names to the role definition. For example:
```javascript
let alertRole = roles.get('alert');
@@ -83,48 +96,48 @@ import { elementRoles } from 'aria-query';
HTML Elements with inherent roles are mapped to those roles. In the case of an element like ``, the element often requires a `type` attribute to map to an ARIA role.
```javascript
-Map {
- '{"name": "article"}' => Set { 'article' },
- '{"name": "button"}' => Set { 'button' },
- '{"name": "td"}' => Set { 'cell', 'gridcell' },
- '{"name": "input", "attributes": [ {"name": "type", "value": "checkbox"}] }' => Set { 'checkbox' },
- '{"name": "th"}' => Set { 'columnheader' },
- '{"name": "select"}' => Set { 'combobox', 'listbox' },
- '{"name": "menuitem"}' => Set { 'command', 'menuitem' },
- '{"name": "dd"}' => Set { 'definition' },
- '{"name": "figure"}' => Set { 'figure' },
- '{"name": "form"}' => Set { 'form' },
- '{"name": "table"}' => Set { 'grid', 'table' },
- '{"name": "fieldset"}' => Set { 'group' },
- '{"name": "h1"}' => Set { 'heading' },
- '{"name": "h2"}' => Set { 'heading' },
- '{"name": "h3"}' => Set { 'heading' },
- '{"name": "h4"}' => Set { 'heading' },
- '{"name": "h5"}' => Set { 'heading' },
- '{"name": "h6"}' => Set { 'heading' },
- '{"name": "img"}' => Set { 'img' },
- '{"name": "a"}' => Set { 'link' },
- '{"name": "link"}' => Set { 'link' },
- '{"name": "ol"}' => Set { 'list' },
- '{"name": "ul"}' => Set { 'list' },
- '{"name": "li"}' => Set { 'listitem' },
- '{"name": "nav"}' => Set { 'navigation' },
- '{"name": "option"}' => Set { 'option' },
- '{"name": "input", "attributes": [ {"name": "type", "value": "radio"}] }' => Set { 'radio' },
- '{"name": "frame"}' => Set { 'region' },
- '{"name": "rel"}' => Set { 'roletype' },
- '{"name": "tr"}' => Set { 'row' },
- '{"name": "tbody"}' => Set { 'rowgroup' },
- '{"name": "tfoot"}' => Set { 'rowgroup' },
- '{"name": "thead"}' => Set { 'rowgroup' },
- '{"name": "th", "attributes": [ {"name": "scope", "value": "row"}] }' => Set { 'rowheader' },
- '{"name": "input", "attributes": [ {"name": "type", "value": "search"}] }' => Set { 'searchbox' },
- '{"name": "hr"}' => Set { 'separator' },
- '{"name": "dt"}' => Set { 'term' },
- '{"name": "dfn"}' => Set { 'term' },
- '{"name": "textarea"}' => Set { 'textbox' },
- '{"name": "input", "attributes": [ {"name": "type", "value": "text"}] }' => Set { 'textbox' }
-}
+[
+ [ '{"name": "article"}', [ 'article' ] ],
+ [ '{"name": "button"}', [ 'button' ] ],
+ [ '{"name": "td"}', [ 'cell', 'gridcell' ] ],
+ [ '{"name": "input", "attributes": [ {"name": "type", "value": "checkbox"}] }', [ 'checkbox' ] ],
+ [ '{"name": "th"}', [ 'columnheader' ] ],
+ [ '{"name": "select"}', [ 'combobox', 'listbox' ] ],
+ [ '{"name": "menuitem"}', [ 'command', 'menuitem' ] ],
+ [ '{"name": "dd"}', [ 'definition' ] ],
+ [ '{"name": "figure"}', [ 'figure' ] ],
+ [ '{"name": "form"}', [ 'form' ] ],
+ [ '{"name": "table"}', [ 'grid', 'table' ] ],
+ [ '{"name": "fieldset"}', [ 'group' ] ],
+ [ '{"name": "h1"}', [ 'heading' ] ],
+ [ '{"name": "h2"}', [ 'heading' ] ],
+ [ '{"name": "h3"}', [ 'heading' ] ],
+ [ '{"name": "h4"}', [ 'heading' ] ],
+ [ '{"name": "h5"}', [ 'heading' ] ],
+ [ '{"name": "h6"}', [ 'heading' ] ],
+ [ '{"name": "img"}', [ 'img' ] ],
+ [ '{"name": "a"}', [ 'link' ] ],
+ [ '{"name": "link"}', [ 'link' ] ],
+ [ '{"name": "ol"}', [ 'list' ] ],
+ [ '{"name": "ul"}', [ 'list' ] ],
+ [ '{"name": "li"}', [ 'listitem' ] ],
+ [ '{"name": "nav"}', [ 'navigation' ] ],
+ [ '{"name": "option"}', [ 'option' ] ],
+ [ '{"name": "input", "attributes": [ {"name": "type", "value": "radio"}] }', [ 'radio' ] ],
+ [ '{"name": "frame"}', [ 'region' ] ],
+ [ '{"name": "rel"}', [ 'roletype' ] ],
+ [ '{"name": "tr"}', [ 'row' ] ],
+ [ '{"name": "tbody"}', [ 'rowgroup' ] ],
+ [ '{"name": "tfoot"}', [ 'rowgroup' ] ],
+ [ '{"name": "thead"}', [ 'rowgroup' ] ],
+ [ '{"name": "th", "attributes": [ {"name": "scope", "value": "row"}] }', [ 'rowheader' ] ],
+ [ '{"name": "input", "attributes": [ {"name": "type", "value": "search"}] }', [ 'searchbox' ] ],
+ [ '{"name": "hr"}', [ 'separator' ] ],
+ [ '{"name": "dt"}', [ 'term' ] ],
+ [ '{"name": "dfn"}', [ 'term' ] ],
+ [ '{"name": "textarea"}', [ 'textbox' ] ],
+ [ '{"name": "input", "attributes": [ {"name": "type", "value": "text"}] }', [ 'textbox' ] ],
+]
```
The map of elements to roles is keyed by an HTML concept. An HTML concept corresponds to the `baseConcepts` and `relatedConcepts` of an ARIA role. Concepts exist in the context of a `module`: HTML, XForms, Dublin Core, for example. The concept representation is an object literal with a name property (the element name) and an optional attributes array.
@@ -140,45 +153,43 @@ import { roleElements } from 'aria-query';
ARIA roles are mapped to the HTML Elements with the same inherent role. Some roles, such as `columnheader` are only mapped to an HTML element that expresses specific attributes. In the case of ``, the element often requires a `type` attribute to map to an ARIA role.
```javascript
-Map {
- 'article' => Set { '{"name": "article"}' },
- 'button' => Set { '{"name": "button"}' },
- 'cell' => Set { '{"name": "td"}' },
- 'checkbox' => Set { '{"name": "input", "attributes": [ {"name": "type", "value": "checkbox"}] }' },
- 'columnheader' => Set { '{"name": "th"}' },
- 'combobox' => Set { '{"name": "select"}' },
- 'command' => Set { '{"name": "menuitem"}' },
- 'definition' => Set { '{"name": "dd"}', '{"name": "dfn"}' },
- 'figure' => Set { '{"name": "figure"}' },
- 'form' => Set { '{"name": "form"}' },
- 'grid' => Set { '{"name": "table"}' },
- 'gridcell' => Set { '{"name": "td"}' },
- 'group' => Set { '{"name": "fieldset"}' },
- 'heading' => Set { '{"name": "h1"}', '{"name": "h2"}', '{"name": "h3"}', '{"name": "h4"}', '{"name": "h5"}', '{"name": "h6"}' },
- 'img' => Set { '{"name": "img"}' },
- 'link' => Set { '{"name": "a"}', '{"name": "link"}' },
- 'list' => Set { '{"name": "ol"}', '{"name": "ul"}' },
- 'listbox' => Set { '{"name": "select"}' },
- 'listitem' => Set { '{"name": "li"}' },
- 'menuitem' => Set { '{"name": "menuitem"}' },
- 'navigation' => Set { '{"name": "nav"}' },
- 'option' => Set { '{"name": "option"}' },
- 'radio' => Set { '{"name": "input", "attributes": [ {"name": "type", "value": "radio"}] }' },
- 'region' => Set { '{"name": "frame"}' },
- 'roletype' => Set { '{"name": "rel"}' },
- 'row' => Set { '{"name": "tr"}' },
- 'rowgroup' => Set { '{"name": "tbody"}', '{"name": "tfoot"}', '{"name": "thead"}' },
- 'rowheader' => Set { '{"name": "th", "attributes": [ {"name": "scope", "value": "row"}] }' },
- 'searchbox' => Set { '{"name": "input", "attributes": [ {"name": "type", "value": "search"}] }' },
- 'separator' => Set { '{"name": "hr"}' },
- 'table' => Set { '{"name": "table"}' },
- 'term' => Set { '{"name": "dt"}' },
- 'textbox' => Set { '{"name": "textarea"}', '{"name": "input", "attributes": [ {"name": "type", "value": "text"}] }' }
-}
+[
+ [ 'article', [ {"name": "article"} ] ],
+ [ 'button', [ {"name": "button"} ] ],
+ [ 'cell', [ {"name": "td"} ] ],
+ [ 'checkbox', [ {"name": "input", "attributes": [ {"name": "type", "value": "checkbox"}] } ] ],
+ [ 'columnheader', [ {"name": "th"} ] ],
+ [ 'combobox', [ {"name": "select"} ] ],
+ [ 'command', [ {"name": "menuitem"} ] ],
+ [ 'definition', [ {"name": "dd"}', '{"name": "dfn"} ] ],
+ [ 'figure', [ {"name": "figure"} ] ],
+ [ 'form', [ {"name": "form"} ] ],
+ [ 'grid', [ {"name": "table"} ] ],
+ [ 'gridcell', [ {"name": "td"} ] ],
+ [ 'group', [ {"name": "fieldset"} ] ],
+ [ 'heading', [ {"name": "h1"}', '{"name": "h2"}', '{"name": "h3"}', '{"name": "h4"}', '{"name": "h5"}', '{"name": "h6"} ] ],
+ [ 'img', [ {"name": "img"} ] ],
+ [ 'link', [ {"name": "a"}', '{"name": "link"} ] ],
+ [ 'list', [ {"name": "ol"}', '{"name": "ul"} ] ],
+ [ 'listbox', [ {"name": "select"} ] ],
+ [ 'listitem', [ {"name": "li"} ] ],
+ [ 'menuitem', [ {"name": "menuitem"} ] ],
+ [ 'navigation', [ {"name": "nav"} ] ],
+ [ 'option', [ {"name": "option"} ] ],
+ [ 'radio', [ {"name": "input", "attributes": [ {"name": "type", "value": "radio"}] } ] ],
+ [ 'region', [ {"name": "frame"} ] ],
+ [ 'roletype', [ {"name": "rel"} ] ],
+ [ 'row', [ {"name": "tr"} ] ],
+ [ 'rowgroup', [ {"name": "tbody"}', '{"name": "tfoot"}', '{"name": "thead"} ] ],
+ [ 'rowheader', [ {"name": "th", "attributes": [ {"name": "scope", "value": "row"}] } ] ],
+ [ 'searchbox', [ {"name": "input", "attributes": [ {"name": "type", "value": "search"}] } ] ],
+ [ 'separator', [ {"name": "hr"} ] ],
+ [ 'table', [ {"name": "table"} ] ],
+ [ 'term', [ {"name": "dt"} ] ],
+ [ 'textbox', [ {"name": "textarea"}', '{"name": "input", "attributes": [ {"name": "type", "value": "text"}] } ] ],
+]
```
-The HTML concept values are provided in a [Set](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Set).
-
## License
-Copyright (c) 2020 A11yance
+Copyright (c) 2021 A11yance