From 24f74df8474cfd4f602cb368563955ff42cc2870 Mon Sep 17 00:00:00 2001 From: Steven Lambert <2433219+straker@users.noreply.github.com> Date: Tue, 12 Apr 2022 08:43:46 -0600 Subject: [PATCH 01/20] fix(aria-valid-attr-value): add note about element id being in a different shadow DOM tree (#3421) * fix(aria-valid-attr-value): add note about element id being in a different shadow DOM tree * only mention shadow tree if one exists * fix test --- .../aria/aria-valid-attr-value-evaluate.js | 8 +++- lib/checks/aria/aria-valid-attr-value.json | 1 + lib/core/utils/get-flattened-tree.js | 13 ++++- test/checks/aria/valid-attr-value.js | 48 +++++++++++++++++++ 4 files changed, 67 insertions(+), 3 deletions(-) diff --git a/lib/checks/aria/aria-valid-attr-value-evaluate.js b/lib/checks/aria/aria-valid-attr-value-evaluate.js index 469f29186f..0b6007ff42 100644 --- a/lib/checks/aria/aria-valid-attr-value-evaluate.js +++ b/lib/checks/aria/aria-valid-attr-value-evaluate.js @@ -67,7 +67,9 @@ function ariaValidAttrValueEvaluate(node, options, virtualNode) { needsReview = `aria-describedby="${virtualNode.attr( 'aria-describedby' )}"`; - messageKey = 'noId'; + // TODO: es-modules_tree + messageKey = + axe._tree && axe._tree[0]._hasShadowRoot ? 'noIdShadow' : 'noId'; } return; @@ -80,7 +82,9 @@ function ariaValidAttrValueEvaluate(node, options, virtualNode) { needsReview = `aria-labelledby="${virtualNode.attr( 'aria-labelledby' )}"`; - messageKey = 'noId'; + // TODO: es-modules_tree + messageKey = + axe._tree && axe._tree[0]._hasShadowRoot ? 'noIdShadow' : 'noId'; } } }; diff --git a/lib/checks/aria/aria-valid-attr-value.json b/lib/checks/aria/aria-valid-attr-value.json index 7c14f3d59f..12658c4149 100644 --- a/lib/checks/aria/aria-valid-attr-value.json +++ b/lib/checks/aria/aria-valid-attr-value.json @@ -12,6 +12,7 @@ }, "incomplete": { "noId": "ARIA attribute element ID does not exist on the page: ${data.needsReview}", + "noIdShadow": "ARIA attribute element ID does not exist on the page or is a descendant of a different shadow DOM tree: ${data.needsReview}", "ariaCurrent": "ARIA attribute value is invalid and will be treated as \"aria-current=true\": ${data.needsReview}", "idrefs": "Unable to determine if ARIA attribute element ID exists on the page: ${data.needsReview}" } diff --git a/lib/core/utils/get-flattened-tree.js b/lib/core/utils/get-flattened-tree.js index af50400157..6bddc10ab3 100644 --- a/lib/core/utils/get-flattened-tree.js +++ b/lib/core/utils/get-flattened-tree.js @@ -20,6 +20,8 @@ import cache from '../base/cache'; * the spec for this) */ +let hasShadowRoot; + /** * find all the fallback content for a and return these as an array * this array will also include any #text nodes @@ -65,6 +67,8 @@ function flattenTree(node, shadowId, parent) { nodeName = node.nodeName.toLowerCase(); if (isShadowRoot(node)) { + hasShadowRoot = true; + // generate an ID for this shadow root and overwrite the current // closure shadowId with this value so that it cascades down the tree retVal = new VirtualNode(node, parent, shadowId); @@ -140,12 +144,19 @@ function flattenTree(node, shadowId, parent) { * ancestor of the node */ function getFlattenedTree(node = document.documentElement, shadowId) { + hasShadowRoot = false; cache.set('nodeMap', new WeakMap()); // specifically pass `null` to the parent to designate the top // node of the tree. if parent === undefined then we know // we are in a disconnected tree - return flattenTree(node, shadowId, null); + const tree = flattenTree(node, shadowId, null); + + // allow rules and checks to know if there is a shadow root attached + // to the current tree + tree[0]._hasShadowRoot = hasShadowRoot; + + return tree; } export default getFlattenedTree; diff --git a/test/checks/aria/valid-attr-value.js b/test/checks/aria/valid-attr-value.js index 41a49b9e1f..8ad93a95eb 100644 --- a/test/checks/aria/valid-attr-value.js +++ b/test/checks/aria/valid-attr-value.js @@ -5,6 +5,8 @@ describe('aria-valid-attr-value', function() { var queryFixture = axe.testUtils.queryFixture; var checkContext = axe.testUtils.MockCheckContext(); var fixtureSetup = axe.testUtils.fixtureSetup; + var shadowCheckSetup = axe.testUtils.shadowCheckSetup; + var shadowSupported = axe.testUtils.shadowSupport.v1; afterEach(function() { fixture.innerHTML = ''; @@ -210,8 +212,31 @@ describe('aria-valid-attr-value', function() { .getCheckEvaluate('aria-valid-attr-value') .call(checkContext, null, null, vNode) ); + assert.deepEqual(checkContext._data, { + messageKey: 'noId', + needsReview: 'aria-describedby="test"' + }); }); + (shadowSupported ? it : xit)( + 'should return undefined on aria-describedby when the element is in a different shadow tree', + function() { + var params = shadowCheckSetup( + '
', + '' + ); + assert.isUndefined( + axe.testUtils + .getCheckEvaluate('aria-valid-attr-value') + .apply(checkContext, params) + ); + assert.deepEqual(checkContext._data, { + messageKey: 'noIdShadow', + needsReview: 'aria-describedby="test"' + }); + } + ); + it('should return undefined on aria-labelledby when the element is not in the DOM', function() { var vNode = queryFixture( '' @@ -221,8 +246,31 @@ describe('aria-valid-attr-value', function() { .getCheckEvaluate('aria-valid-attr-value') .call(checkContext, null, null, vNode) ); + assert.deepEqual(checkContext._data, { + messageKey: 'noId', + needsReview: 'aria-labelledby="test"' + }); }); + (shadowSupported ? it : xit)( + 'should return undefined on aria-labelledby when the element is in a different shadow tree', + function() { + var params = shadowCheckSetup( + '
', + '' + ); + assert.isUndefined( + axe.testUtils + .getCheckEvaluate('aria-valid-attr-value') + .apply(checkContext, params) + ); + assert.deepEqual(checkContext._data, { + messageKey: 'noIdShadow', + needsReview: 'aria-labelledby="test"' + }); + } + ); + it('should return undefined on aria-current with invalid value', function() { var vNode = queryFixture( '' From f8a7c329af7e6a5262d652ab2f4cab82df0baedc Mon Sep 17 00:00:00 2001 From: Dylan Barrell Date: Thu, 12 May 2022 18:52:35 +0200 Subject: [PATCH 02/20] ensure pseudo elements also return required contrast information (#3453) * ensure pseudo elements also return required contrast information * Update test/checks/color/color-contrast.js Co-authored-by: Steven Lambert <2433219+straker@users.noreply.github.com> * remove rule description changes Co-authored-by: Steven Lambert <2433219+straker@users.noreply.github.com> --- lib/checks/color/color-contrast-evaluate.js | 33 +++++++++++++-------- test/checks/color/color-contrast.js | 19 ++++++++---- 2 files changed, 34 insertions(+), 18 deletions(-) diff --git a/lib/checks/color/color-contrast-evaluate.js b/lib/checks/color/color-contrast-evaluate.js index e4afe201b9..f9cac15097 100644 --- a/lib/checks/color/color-contrast-evaluate.js +++ b/lib/checks/color/color-contrast-evaluate.js @@ -39,6 +39,19 @@ export default function colorContrastEvaluate(node, options, virtualNode) { return undefined; } + const nodeStyle = window.getComputedStyle(node); + const fontSize = parseFloat(nodeStyle.getPropertyValue('font-size')); + const fontWeight = nodeStyle.getPropertyValue('font-weight'); + const bold = parseFloat(fontWeight) >= boldValue || fontWeight === 'bold'; + + const ptSize = Math.ceil(fontSize * 72) / 96; + const isSmallFont = + (bold && ptSize < boldTextPt) || (!bold && ptSize < largeTextPt); + + const { expected, minThreshold, maxThreshold } = isSmallFont + ? contrastRatio.normal + : contrastRatio.large; + // if element or a parent has pseudo content then we need to mark // as needs review const pseudoElm = findPseudoElement(virtualNode, { @@ -46,7 +59,13 @@ export default function colorContrastEvaluate(node, options, virtualNode) { pseudoSizeThreshold }); if (pseudoElm) { - this.data({ messageKey: 'pseudoContent' }); + this.data({ + fontSize: `${((fontSize * 72) / 96).toFixed(1)}pt (${fontSize}px)`, + fontWeight: bold ? 'bold' : 'normal', + messageKey: 'pseudoContent', + expectedContrastRatio: expected + ':1' + }); + this.relatedNodes(pseudoElm.actualNode); return undefined; } @@ -60,11 +79,6 @@ export default function colorContrastEvaluate(node, options, virtualNode) { maxRatio: shadowOutlineEmMax }); - const nodeStyle = window.getComputedStyle(node); - const fontSize = parseFloat(nodeStyle.getPropertyValue('font-size')); - const fontWeight = nodeStyle.getPropertyValue('font-weight'); - const bold = parseFloat(fontWeight) >= boldValue || fontWeight === 'bold'; - let contrast = null; let contrastContributor = null; let shadowColor = null; @@ -83,13 +97,6 @@ export default function colorContrastEvaluate(node, options, virtualNode) { } } - const ptSize = Math.ceil(fontSize * 72) / 96; - const isSmallFont = - (bold && ptSize < boldTextPt) || (!bold && ptSize < largeTextPt); - - const { expected, minThreshold, maxThreshold } = isSmallFont - ? contrastRatio.normal - : contrastRatio.large; const isValid = contrast > expected; // ratio is outside range diff --git a/test/checks/color/color-contrast.js b/test/checks/color/color-contrast.js index 5fa6b3082e..c165796f57 100644 --- a/test/checks/color/color-contrast.js +++ b/test/checks/color/color-contrast.js @@ -409,7 +409,10 @@ describe('color-contrast', function() { assert.isUndefined(contrastEvaluate.apply(checkContext, params)); assert.deepEqual(checkContext._data, { - messageKey: 'pseudoContent' + fontSize: '12.0pt (16px)', + fontWeight: 'normal', + messageKey: 'pseudoContent', + expectedContrastRatio: '4.5:1' }); assert.equal( checkContext._relatedNodes[0], @@ -425,7 +428,10 @@ describe('color-contrast', function() { assert.isUndefined(contrastEvaluate.apply(checkContext, params)); assert.deepEqual(checkContext._data, { - messageKey: 'pseudoContent' + fontSize: '12.0pt (16px)', + fontWeight: 'normal', + messageKey: 'pseudoContent', + expectedContrastRatio: '4.5:1' }); assert.equal( checkContext._relatedNodes[0], @@ -449,7 +455,10 @@ describe('color-contrast', function() { assert.isUndefined(contrastEvaluate.apply(checkContext, params)); assert.deepEqual(checkContext._data, { - messageKey: 'pseudoContent' + fontSize: '12.0pt (16px)', + fontWeight: 'normal', + messageKey: 'pseudoContent', + expectedContrastRatio: '4.5:1' }); assert.equal( checkContext._relatedNodes[0], @@ -880,7 +889,7 @@ describe('color-contrast', function() { assert.equal(checkContext._data.messageKey, 'shadowOnBgColor'); }); - it('fails if thick text shadows don\'t have sufficient contrast', function() { + it("fails if thick text shadows don't have sufficient contrast", function() { var params = checkSetup( '
' + @@ -890,7 +899,7 @@ describe('color-contrast', function() { assert.isTrue(contrastEvaluate.apply(checkContext, params)); }); - it('passes if thin text shadows don\'t have sufficient contrast, but the text and background do', function() { + it("passes if thin text shadows don't have sufficient contrast, but the text and background do", function() { var params = checkSetup( '
' + From ddcd9c704893aa10829ad9e9e0b4a7003b9fbcf1 Mon Sep 17 00:00:00 2001 From: BrianBock Date: Fri, 4 Feb 2022 11:32:38 -0500 Subject: [PATCH 03/20] docs: change `/docs/projects.md` to include Parcel (#3364) Parcel.io (https://parcel.io) now integrates axe-core. Change `/docs/projects.md` to include Parcel --- doc/projects.md | 1 + 1 file changed, 1 insertion(+) diff --git a/doc/projects.md b/doc/projects.md index f5a43bbed4..44b7a77a4b 100644 --- a/doc/projects.md +++ b/doc/projects.md @@ -55,3 +55,4 @@ Add your project/integration to this file and submit a pull request. 1. [Selenium.Axe for .NET](https://github.com/TroyWalshProf/SeleniumAxeDotnet) 1. [vue-axe](https://github.com/vue-a11y/vue-axe-next) 1. [a11y-sitechecker](https://github.com/forsti0506/a11y-sitechecker) +1. [Parcel](https://parcel.io) From b656885e14794d137d3f62ba9f47575a60ebc568 Mon Sep 17 00:00:00 2001 From: Steven Lambert <2433219+straker@users.noreply.github.com> Date: Fri, 11 Feb 2022 08:33:49 -0700 Subject: [PATCH 04/20] ci: fix chrome nightly test (#3366) * ci: fix nightly chrome * fix package-lock * fix * npx * test nightly * verbose * fix chrome install * almost there * fix config * Update package.json Co-authored-by: Wilco Fiers Co-authored-by: Wilco Fiers --- .circleci/config.yml | 23 +- package-lock.json | 624 +++++++++++++++++++++++++------------------ package.json | 1 + 3 files changed, 372 insertions(+), 276 deletions(-) diff --git a/.circleci/config.yml b/.circleci/config.yml index 9b4741ec9e..cebe609fd7 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -36,20 +36,6 @@ restore_dependency_cache_win: &restore_dependency_cache_win - v9-cache-win-{{ checksum "package-lock.json" }} - v9-cache-win- -# install the version of chromedriver that matches the currently installed version of Chrome (taken from CircleCI chromedriver script) -install_linux_chromedriver: &install_linux_chromedriver - run: - name: Install Chromedriver - command: | - CHROME_VERSION="$(google-chrome --version)" - CHROME_VERSION_STRING="$(echo $CHROME_VERSION | sed 's/^Google Chrome //' | sed 's/^Chromium //')" - echo "Installed version of Google Chrome is $CHROME_VERSION_STRING" - - CHROMEDRIVER_RELEASE="${CHROME_VERSION_STRING%%.*}" - - echo "ChromeDriver $CHROMEDRIVER_RELEASE will be installed" - npm install --no-save "chromedriver@$CHROMEDRIVER_RELEASE" - jobs: # Fetch and cache dependencies. dependencies_unix: @@ -60,7 +46,7 @@ jobs: - <<: *set_npm_auth - <<: *restore_dependency_cache_unix - run: npm ci - - <<: *install_linux_chromedriver + - run: npx browser-driver-manager install chromedriver --verbose - save_cache: key: v9-cache-unix-{{ checksum "package-lock.json" }} paths: @@ -177,11 +163,8 @@ jobs: - <<: *restore_dependency_cache_unix - run: npm run build - run: - name: Install Chrome Beta - command: | - wget https://dl.google.com/linux/direct/google-chrome-beta_current_amd64.deb - sudo apt install ./google-chrome-beta_current_amd64.deb - - <<: *install_linux_chromedriver + name: Install Chrome and ChromeDriver Beta + command: npx browser-driver-manager install chrome=beta chromedriver=beta --verbose - run: name: Install Firefox Nightly command: | diff --git a/package-lock.json b/package-lock.json index 9d2f2ccc3e..129b2f0d73 100644 --- a/package-lock.json +++ b/package-lock.json @@ -23,26 +23,26 @@ } }, "@babel/compat-data": { - "version": "7.16.4", - "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.16.4.tgz", - "integrity": "sha512-1o/jo7D+kC9ZjHX5v+EHrdjl3PhxMrLSOTGsOdHJ+KL8HCaEK6ehrVL2RS6oHDZp+L7xLirLrPmQtEng769J/Q==", + "version": "7.16.8", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.16.8.tgz", + "integrity": "sha512-m7OkX0IdKLKPpBlJtF561YJal5y/jyI5fNfWbPxh2D/nbzzGI4qRyrD8xO2jB24u7l+5I2a43scCG2IrfjC50Q==", "dev": true }, "@babel/core": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.16.7.tgz", - "integrity": "sha512-aeLaqcqThRNZYmbMqtulsetOQZ/5gbR/dWruUCJcpas4Qoyy+QeagfDsPdMrqwsPRDNxJvBlRiZxxX7THO7qtA==", + "version": "7.16.12", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.16.12.tgz", + "integrity": "sha512-dK5PtG1uiN2ikk++5OzSYsitZKny4wOCD0nrO4TqnW4BVBTQ2NGS3NgilvT/TEyxTST7LNyWV/T4tXDoD3fOgg==", "dev": true, "requires": { "@babel/code-frame": "^7.16.7", - "@babel/generator": "^7.16.7", + "@babel/generator": "^7.16.8", "@babel/helper-compilation-targets": "^7.16.7", "@babel/helper-module-transforms": "^7.16.7", "@babel/helpers": "^7.16.7", - "@babel/parser": "^7.16.7", + "@babel/parser": "^7.16.12", "@babel/template": "^7.16.7", - "@babel/traverse": "^7.16.7", - "@babel/types": "^7.16.7", + "@babel/traverse": "^7.16.10", + "@babel/types": "^7.16.8", "convert-source-map": "^1.7.0", "debug": "^4.1.0", "gensync": "^1.0.0-beta.2", @@ -52,12 +52,12 @@ } }, "@babel/generator": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.16.7.tgz", - "integrity": "sha512-/ST3Sg8MLGY5HVYmrjOgL60ENux/HfO/CsUh7y4MalThufhE/Ff/6EibFDHi4jiDCaWfJKoqbE6oTh21c5hrRg==", + "version": "7.16.8", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.16.8.tgz", + "integrity": "sha512-1ojZwE9+lOXzcWdWmO6TbUzDfqLD39CmEhN8+2cX9XkDo5yW1OpgfejfliysR2AWLpMamTiOiAp/mtroaymhpw==", "dev": true, "requires": { - "@babel/types": "^7.16.7", + "@babel/types": "^7.16.8", "jsesc": "^2.5.1", "source-map": "^0.5.0" } @@ -94,9 +94,9 @@ } }, "@babel/helper-create-class-features-plugin": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.16.7.tgz", - "integrity": "sha512-kIFozAvVfK05DM4EVQYKK+zteWvY85BFdGBRQBytRyY3y+6PX0DkDOn/CZ3lEuczCfrCxEzwt0YtP/87YPTWSw==", + "version": "7.16.10", + "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.16.10.tgz", + "integrity": "sha512-wDeej0pu3WN/ffTxMNCPW5UCiOav8IcLRxSIyp/9+IF2xJUM9h/OYjg0IJLHaL6F8oU8kqMz9nc1vryXhMsgXg==", "dev": true, "requires": { "@babel/helper-annotate-as-pure": "^7.16.7", @@ -119,9 +119,9 @@ } }, "@babel/helper-define-polyfill-provider": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.3.0.tgz", - "integrity": "sha512-7hfT8lUljl/tM3h+izTX/pO3W3frz2ok6Pk+gzys8iJqDfZrZy2pXjRTZAvG2YmfHun1X4q8/UZRLatMfqc5Tg==", + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.3.1.tgz", + "integrity": "sha512-J9hGMpJQmtWmj46B3kBHmL38UhJGhYX7eqkcq+2gsstyYt341HmPeWspihX43yVRA0mS+8GGk2Gckc7bY/HCmA==", "dev": true, "requires": { "@babel/helper-compilation-targets": "^7.13.0", @@ -231,14 +231,14 @@ "dev": true }, "@babel/helper-remap-async-to-generator": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.16.7.tgz", - "integrity": "sha512-C3o117GnP/j/N2OWo+oepeWbFEKRfNaay+F1Eo5Mj3A1SRjyx+qaFhm23nlipub7Cjv2azdUUiDH+VlpdwUFRg==", + "version": "7.16.8", + "resolved": "https://registry.npmjs.org/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.16.8.tgz", + "integrity": "sha512-fm0gH7Flb8H51LqJHy3HJ3wnE1+qtYR2A99K06ahwrawLdOFsCEWjZOrYricXJHoPSudNKxrMBUPEIPxiIIvBw==", "dev": true, "requires": { "@babel/helper-annotate-as-pure": "^7.16.7", - "@babel/helper-wrap-function": "^7.16.7", - "@babel/types": "^7.16.7" + "@babel/helper-wrap-function": "^7.16.8", + "@babel/types": "^7.16.8" } }, "@babel/helper-replace-supers": { @@ -294,15 +294,15 @@ "dev": true }, "@babel/helper-wrap-function": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.16.7.tgz", - "integrity": "sha512-7a9sABeVwcunnztZZ7WTgSw6jVYLzM1wua0Z4HIXm9S3/HC96WKQTkFgGEaj5W06SHHihPJ6Le6HzS5cGOQMNw==", + "version": "7.16.8", + "resolved": "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.16.8.tgz", + "integrity": "sha512-8RpyRVIAW1RcDDGTA+GpPAwV22wXCfKOoM9bet6TLkGIFTkRQSkH1nMQ5Yet4MpoXe1ZwHPVtNasc2w0uZMqnw==", "dev": true, "requires": { "@babel/helper-function-name": "^7.16.7", "@babel/template": "^7.16.7", - "@babel/traverse": "^7.16.7", - "@babel/types": "^7.16.7" + "@babel/traverse": "^7.16.8", + "@babel/types": "^7.16.8" } }, "@babel/helpers": { @@ -317,9 +317,9 @@ } }, "@babel/highlight": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.16.7.tgz", - "integrity": "sha512-aKpPMfLvGO3Q97V0qhw/V2SWNWlwfJknuwAunU7wZLSfrM4xTBvg7E5opUVi1kJTBKihE38CPg4nBiqX83PWYw==", + "version": "7.16.10", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.16.10.tgz", + "integrity": "sha512-5FnTQLSLswEj6IkgVw5KusNUUFY9ZGqe/TRFnP/BKYHYgfh7tc+C7mwiy95/yNP7Dh9x580Vv8r7u7ZfTBFxdw==", "dev": true, "requires": { "@babel/helper-validator-identifier": "^7.16.7", @@ -341,9 +341,9 @@ } }, "@babel/parser": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.16.7.tgz", - "integrity": "sha512-sR4eaSrnM7BV7QPzGfEX5paG/6wrZM3I0HDzfIAK06ESvo9oy3xBuVBxE3MbQaKNhvg8g/ixjMWo2CGpzpHsDA==", + "version": "7.16.12", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.16.12.tgz", + "integrity": "sha512-VfaV15po8RiZssrkPweyvbGVSe4x2y+aciFCgn0n0/SJMR22cwofRV1mtnJQYcSB1wUTaA/X1LnA3es66MCO5A==", "dev": true }, "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": { @@ -367,13 +367,13 @@ } }, "@babel/plugin-proposal-async-generator-functions": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.16.7.tgz", - "integrity": "sha512-TTXBT3A5c11eqRzaC6beO6rlFT3Mo9C2e8eB44tTr52ESXSK2CIc2fOp1ynpAwQA8HhBMho+WXhMHWlAe3xkpw==", + "version": "7.16.8", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.16.8.tgz", + "integrity": "sha512-71YHIvMuiuqWJQkebWJtdhQTfd4Q4mF76q2IX37uZPkG9+olBxsX+rH1vkhFto4UeJZ9dPY2s+mDvhDm1u2BGQ==", "dev": true, "requires": { "@babel/helper-plugin-utils": "^7.16.7", - "@babel/helper-remap-async-to-generator": "^7.16.7", + "@babel/helper-remap-async-to-generator": "^7.16.8", "@babel/plugin-syntax-async-generators": "^7.8.4" } }, @@ -493,12 +493,12 @@ } }, "@babel/plugin-proposal-private-methods": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-methods/-/plugin-proposal-private-methods-7.16.7.tgz", - "integrity": "sha512-7twV3pzhrRxSwHeIvFE6coPgvo+exNDOiGUMg39o2LiLo1Y+4aKpfkcLGcg1UHonzorCt7SNXnoMyCnnIOA8Sw==", + "version": "7.16.11", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-methods/-/plugin-proposal-private-methods-7.16.11.tgz", + "integrity": "sha512-F/2uAkPlXDr8+BHpZvo19w3hLFKge+k75XUprE6jaqKxjGkSYcK+4c+bup5PdW/7W/Rpjwql7FTVEDW+fRAQsw==", "dev": true, "requires": { - "@babel/helper-create-class-features-plugin": "^7.16.7", + "@babel/helper-create-class-features-plugin": "^7.16.10", "@babel/helper-plugin-utils": "^7.16.7" } }, @@ -660,14 +660,14 @@ } }, "@babel/plugin-transform-async-to-generator": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.16.7.tgz", - "integrity": "sha512-pFEfjnK4DfXCfAlA5I98BYdDJD8NltMzx19gt6DAmfE+2lXRfPUoa0/5SUjT4+TDE1W/rcxU/1lgN55vpAjjdg==", + "version": "7.16.8", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.16.8.tgz", + "integrity": "sha512-MtmUmTJQHCnyJVrScNzNlofQJ3dLFuobYn3mwOTKHnSCMtbNsqvF71GQmJfFjdrXSsAA7iysFmYWw4bXZ20hOg==", "dev": true, "requires": { "@babel/helper-module-imports": "^7.16.7", "@babel/helper-plugin-utils": "^7.16.7", - "@babel/helper-remap-async-to-generator": "^7.16.7" + "@babel/helper-remap-async-to-generator": "^7.16.8" } }, "@babel/plugin-transform-block-scoped-functions": { @@ -801,9 +801,9 @@ } }, "@babel/plugin-transform-modules-commonjs": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.16.7.tgz", - "integrity": "sha512-h2RP2kE7He1ZWKyAlanMZrAbdv+Acw1pA8dQZhE025WJZE2z0xzFADAinXA9fxd5bn7JnM+SdOGcndGx1ARs9w==", + "version": "7.16.8", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.16.8.tgz", + "integrity": "sha512-oflKPvsLT2+uKQopesJt3ApiaIS2HW+hzHFcwRNtyDGieAeC/dIHZX8buJQ2J2X1rxGPy4eRcUijm3qcSPjYcA==", "dev": true, "requires": { "@babel/helper-module-transforms": "^7.16.7", @@ -836,9 +836,9 @@ } }, "@babel/plugin-transform-named-capturing-groups-regex": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.16.7.tgz", - "integrity": "sha512-kFy35VwmwIQwCjwrAQhl3+c/kr292i4KdLPKp5lPH03Ltc51qnFlIADoyPxc/6Naz3ok3WdYKg+KK6AH+D4utg==", + "version": "7.16.8", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.16.8.tgz", + "integrity": "sha512-j3Jw+n5PvpmhRR+mrgIh04puSANCk/T/UA3m3P1MjJkhlK906+ApHhDIqBQDdOgL/r1UYpz4GNclTXxyZrYGSw==", "dev": true, "requires": { "@babel/helper-create-regexp-features-plugin": "^7.16.7" @@ -975,18 +975,18 @@ } }, "@babel/preset-env": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.16.7.tgz", - "integrity": "sha512-urX3Cee4aOZbRWOSa3mKPk0aqDikfILuo+C7qq7HY0InylGNZ1fekq9jmlr3pLWwZHF4yD7heQooc2Pow2KMyQ==", + "version": "7.16.11", + "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.16.11.tgz", + "integrity": "sha512-qcmWG8R7ZW6WBRPZK//y+E3Cli151B20W1Rv7ln27vuPaXU/8TKms6jFdiJtF7UDTxcrb7mZd88tAeK9LjdT8g==", "dev": true, "requires": { - "@babel/compat-data": "^7.16.4", + "@babel/compat-data": "^7.16.8", "@babel/helper-compilation-targets": "^7.16.7", "@babel/helper-plugin-utils": "^7.16.7", "@babel/helper-validator-option": "^7.16.7", "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": "^7.16.7", "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": "^7.16.7", - "@babel/plugin-proposal-async-generator-functions": "^7.16.7", + "@babel/plugin-proposal-async-generator-functions": "^7.16.8", "@babel/plugin-proposal-class-properties": "^7.16.7", "@babel/plugin-proposal-class-static-block": "^7.16.7", "@babel/plugin-proposal-dynamic-import": "^7.16.7", @@ -998,7 +998,7 @@ "@babel/plugin-proposal-object-rest-spread": "^7.16.7", "@babel/plugin-proposal-optional-catch-binding": "^7.16.7", "@babel/plugin-proposal-optional-chaining": "^7.16.7", - "@babel/plugin-proposal-private-methods": "^7.16.7", + "@babel/plugin-proposal-private-methods": "^7.16.11", "@babel/plugin-proposal-private-property-in-object": "^7.16.7", "@babel/plugin-proposal-unicode-property-regex": "^7.16.7", "@babel/plugin-syntax-async-generators": "^7.8.4", @@ -1016,7 +1016,7 @@ "@babel/plugin-syntax-private-property-in-object": "^7.14.5", "@babel/plugin-syntax-top-level-await": "^7.14.5", "@babel/plugin-transform-arrow-functions": "^7.16.7", - "@babel/plugin-transform-async-to-generator": "^7.16.7", + "@babel/plugin-transform-async-to-generator": "^7.16.8", "@babel/plugin-transform-block-scoped-functions": "^7.16.7", "@babel/plugin-transform-block-scoping": "^7.16.7", "@babel/plugin-transform-classes": "^7.16.7", @@ -1030,10 +1030,10 @@ "@babel/plugin-transform-literals": "^7.16.7", "@babel/plugin-transform-member-expression-literals": "^7.16.7", "@babel/plugin-transform-modules-amd": "^7.16.7", - "@babel/plugin-transform-modules-commonjs": "^7.16.7", + "@babel/plugin-transform-modules-commonjs": "^7.16.8", "@babel/plugin-transform-modules-systemjs": "^7.16.7", "@babel/plugin-transform-modules-umd": "^7.16.7", - "@babel/plugin-transform-named-capturing-groups-regex": "^7.16.7", + "@babel/plugin-transform-named-capturing-groups-regex": "^7.16.8", "@babel/plugin-transform-new-target": "^7.16.7", "@babel/plugin-transform-object-super": "^7.16.7", "@babel/plugin-transform-parameters": "^7.16.7", @@ -1048,11 +1048,11 @@ "@babel/plugin-transform-unicode-escapes": "^7.16.7", "@babel/plugin-transform-unicode-regex": "^7.16.7", "@babel/preset-modules": "^0.1.5", - "@babel/types": "^7.16.7", + "@babel/types": "^7.16.8", "babel-plugin-polyfill-corejs2": "^0.3.0", - "babel-plugin-polyfill-corejs3": "^0.4.0", + "babel-plugin-polyfill-corejs3": "^0.5.0", "babel-plugin-polyfill-regenerator": "^0.3.0", - "core-js-compat": "^3.19.1", + "core-js-compat": "^3.20.2", "semver": "^6.3.0" } }, @@ -1090,27 +1090,27 @@ } }, "@babel/traverse": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.16.7.tgz", - "integrity": "sha512-8KWJPIb8c2VvY8AJrydh6+fVRo2ODx1wYBU2398xJVq0JomuLBZmVQzLPBblJgHIGYG4znCpUZUZ0Pt2vdmVYQ==", + "version": "7.16.10", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.16.10.tgz", + "integrity": "sha512-yzuaYXoRJBGMlBhsMJoUW7G1UmSb/eXr/JHYM/MsOJgavJibLwASijW7oXBdw3NQ6T0bW7Ty5P/VarOs9cHmqw==", "dev": true, "requires": { "@babel/code-frame": "^7.16.7", - "@babel/generator": "^7.16.7", + "@babel/generator": "^7.16.8", "@babel/helper-environment-visitor": "^7.16.7", "@babel/helper-function-name": "^7.16.7", "@babel/helper-hoist-variables": "^7.16.7", "@babel/helper-split-export-declaration": "^7.16.7", - "@babel/parser": "^7.16.7", - "@babel/types": "^7.16.7", + "@babel/parser": "^7.16.10", + "@babel/types": "^7.16.8", "debug": "^4.1.0", "globals": "^11.1.0" } }, "@babel/types": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.16.7.tgz", - "integrity": "sha512-E8HuV7FO9qLpx6OtoGfUQ2cjIYnbFwvZWYBS+87EwtdMvmUPJSwykpovFB+8insbpF0uJcpr8KMUi64XZntZcg==", + "version": "7.16.8", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.16.8.tgz", + "integrity": "sha512-smN2DQc5s4M7fntyjGtyIPbRJv6wW4rU/94fmYJ7PKQuZkC0qGMHXJbg6sNGt12JmVr4k5YaptI/XtiLJBnmIg==", "dev": true, "requires": { "@babel/helper-validator-identifier": "^7.16.7", @@ -1305,16 +1305,16 @@ } }, "@octokit/request": { - "version": "5.6.2", - "resolved": "https://registry.npmjs.org/@octokit/request/-/request-5.6.2.tgz", - "integrity": "sha512-je66CvSEVf0jCpRISxkUcCa0UkxmFs6eGDRSbfJtAVwbLH5ceqF+YEyC8lj8ystKyZTy8adWr0qmkY52EfOeLA==", + "version": "5.6.3", + "resolved": "https://registry.npmjs.org/@octokit/request/-/request-5.6.3.tgz", + "integrity": "sha512-bFJl0I1KVc9jYTe9tdGGpAMPy32dLBXXo1dS/YwSCTL/2nd9XeHsY616RE3HPXDVk+a+dBuzyz5YdlXwcDTr2A==", "dev": true, "requires": { "@octokit/endpoint": "^6.0.1", "@octokit/request-error": "^2.1.0", "@octokit/types": "^6.16.1", "is-plain-object": "^5.0.0", - "node-fetch": "^2.6.1", + "node-fetch": "^2.6.7", "universal-user-agent": "^6.0.0" } }, @@ -1407,10 +1407,16 @@ "integrity": "sha512-+iTbntw2IZPb/anVDbypzfQa+ay64MW0Zo8aJ8gZPWMMK6/OubMVb6lUPMagqjOPnmtauXnFCACVl3O7ogjeqQ==", "dev": true }, + "@socket.io/base64-arraybuffer": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@socket.io/base64-arraybuffer/-/base64-arraybuffer-1.0.2.tgz", + "integrity": "sha512-dOlCBKnDw4iShaIsH/bxujKTM18+2TOAsYz+KSc11Am38H4q5Xw8Bbz97ZYdrVNM+um3p7w86Bvvmcn9q+5+eQ==", + "dev": true + }, "@testim/chrome-version": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/@testim/chrome-version/-/chrome-version-1.0.7.tgz", - "integrity": "sha512-8UT/J+xqCYfn3fKtOznAibsHpiuDshCb0fwgWxRazTT19Igp9ovoXMPhXyLD6m3CKQGTMHgqoxaFfMWaL40Rnw==", + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@testim/chrome-version/-/chrome-version-1.1.2.tgz", + "integrity": "sha512-1c4ZOETSRpI0iBfIFUqU4KqwBAB2lHUAlBjZz/YqOHqwM9dTTzjV6Km0ZkiEiSCx/tLr1BtESIKyWWMww+RUqw==", "dev": true }, "@tootallnate/once": { @@ -1447,6 +1453,28 @@ "@types/node": "*" } }, + "@types/linkify-it": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/@types/linkify-it/-/linkify-it-3.0.2.tgz", + "integrity": "sha512-HZQYqbiFVWufzCwexrvh694SOim8z2d+xJl5UNamcvQFejLY/2YUtzXHYi3cHdI7PMlS8ejH2slRAOJQ32aNbA==", + "dev": true + }, + "@types/markdown-it": { + "version": "12.2.3", + "resolved": "https://registry.npmjs.org/@types/markdown-it/-/markdown-it-12.2.3.tgz", + "integrity": "sha512-GKMHFfv3458yYy+v/N8gjufHO6MSZKCOXpZc5GXIWWy8uldwfmPn98vp81gZ5f9SVw8YYBctgfJ22a2d7AOMeQ==", + "dev": true, + "requires": { + "@types/linkify-it": "*", + "@types/mdurl": "*" + } + }, + "@types/mdurl": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@types/mdurl/-/mdurl-1.0.2.tgz", + "integrity": "sha512-eC4U9MlIcu2q0KQmXszyn5Akca/0jrQmwDRgpAMJai7qBWq4amIQhZyNau4VYGtCeALvW1/NtjzJJ567aZxfKA==", + "dev": true + }, "@types/minimatch": { "version": "3.0.5", "resolved": "https://registry.npmjs.org/@types/minimatch/-/minimatch-3.0.5.tgz", @@ -1460,9 +1488,9 @@ "dev": true }, "@types/node": { - "version": "17.0.8", - "resolved": "https://registry.npmjs.org/@types/node/-/node-17.0.8.tgz", - "integrity": "sha512-YofkM6fGv4gDJq78g4j0mMuGMkZVxZDgtU0JRdx6FgiJDG+0fY0GKVolOV8WqVmEhLCXkQRjwDdKyPxJp/uucg==", + "version": "17.0.13", + "resolved": "https://registry.npmjs.org/@types/node/-/node-17.0.13.tgz", + "integrity": "sha512-Y86MAxASe25hNzlDbsviXl8jQHb0RDvKt4c40ZJQ1Don0AAL0STLZSs4N+6gLEO55pedy7r2cLwS+ZDxPm/2Bw==", "dev": true }, "@types/normalize-package-data": { @@ -1548,7 +1576,7 @@ "dev": true }, "act-rules.github.io": { - "version": "github:act-rules/act-rules.github.io#c09f69ddd4c917f23a4ddf62832ac92f27ac9d52", + "version": "github:act-rules/act-rules.github.io#80a5d89782b97f712dc864888b88776767f6d8c5", "from": "github:act-rules/act-rules.github.io#master", "dev": true }, @@ -1734,9 +1762,9 @@ "dev": true }, "async": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/async/-/async-3.2.2.tgz", - "integrity": "sha512-H0E+qZaDEfx/FY4t7iLRv1W2fFI6+pyCeTw1uN20AQPiwqwM6ojPxHxdLv4z8hi2DtnW9BOckSspLucW7pIE5g==", + "version": "3.2.3", + "resolved": "https://registry.npmjs.org/async/-/async-3.2.3.tgz", + "integrity": "sha512-spZRyzKL5l5BZQrr/6m/SqFdBN0q3OCI0f9rjfBzCMBIP4p75P620rR3gTmaksNOhmzgdxcaxdNfMy6anrbM0g==", "dev": true }, "asynckit": { @@ -1752,12 +1780,12 @@ "dev": true }, "axios": { - "version": "0.21.4", - "resolved": "https://registry.npmjs.org/axios/-/axios-0.21.4.tgz", - "integrity": "sha512-ut5vewkiu8jjGBdqpM44XxjuCjq9LAKeHVmoVfHVzy8eHgxxq8SbAVQNovDA8mVi05kP0Ea/n/UzcSHcTJQfNg==", + "version": "0.24.0", + "resolved": "https://registry.npmjs.org/axios/-/axios-0.24.0.tgz", + "integrity": "sha512-Q6cWsys88HoPgAaFAVUb0WpPk0O8iTeisR9IMqy9G8AbO4NlpVknrnQS03zzF9PGAWgO3cgletO3VjV/P7VztA==", "dev": true, "requires": { - "follow-redirects": "^1.14.0" + "follow-redirects": "^1.14.4" } }, "babel-plugin-dynamic-import-node": { @@ -1770,33 +1798,33 @@ } }, "babel-plugin-polyfill-corejs2": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.3.0.tgz", - "integrity": "sha512-wMDoBJ6uG4u4PNFh72Ty6t3EgfA91puCuAwKIazbQlci+ENb/UU9A3xG5lutjUIiXCIn1CY5L15r9LimiJyrSA==", + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.3.1.tgz", + "integrity": "sha512-v7/T6EQcNfVLfcN2X8Lulb7DjprieyLWJK/zOWH5DUYcAgex9sP3h25Q+DLsX9TloXe3y1O8l2q2Jv9q8UVB9w==", "dev": true, "requires": { "@babel/compat-data": "^7.13.11", - "@babel/helper-define-polyfill-provider": "^0.3.0", + "@babel/helper-define-polyfill-provider": "^0.3.1", "semver": "^6.1.1" } }, "babel-plugin-polyfill-corejs3": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.4.0.tgz", - "integrity": "sha512-YxFreYwUfglYKdLUGvIF2nJEsGwj+RhWSX/ije3D2vQPOXuyMLMtg/cCGMDpOA7Nd+MwlNdnGODbd2EwUZPlsw==", + "version": "0.5.1", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.5.1.tgz", + "integrity": "sha512-TihqEe4sQcb/QcPJvxe94/9RZuLQuF1+To4WqQcRvc+3J3gLCPIPgDKzGLG6zmQLfH3nn25heRuDNkS2KR4I8A==", "dev": true, "requires": { - "@babel/helper-define-polyfill-provider": "^0.3.0", - "core-js-compat": "^3.18.0" + "@babel/helper-define-polyfill-provider": "^0.3.1", + "core-js-compat": "^3.20.0" } }, "babel-plugin-polyfill-regenerator": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.3.0.tgz", - "integrity": "sha512-dhAPTDLGoMW5/84wkgwiLRwMnio2i1fUe53EuvtKMv0pn2p3S8OCoV1xAzfJPl0KOX7IB89s2ib85vbYiea3jg==", + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.3.1.tgz", + "integrity": "sha512-Y2B06tvgHYt1x0yz17jGkGeeMr5FeKUu+ASJ+N6nB5lQ8Dapfg42i0OVrf8PNGJ3zKL4A23snMi1IRwrqqND7A==", "dev": true, "requires": { - "@babel/helper-define-polyfill-provider": "^0.3.0" + "@babel/helper-define-polyfill-provider": "^0.3.1" } }, "balanced-match": { @@ -1805,12 +1833,6 @@ "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", "dev": true }, - "base64-arraybuffer": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/base64-arraybuffer/-/base64-arraybuffer-1.0.1.tgz", - "integrity": "sha512-vFIUq7FdLtjZMhATwDul5RZWv2jpXQ09Pd6jcVEOvIsqCWTRFD/ONHNfyOS8dA/Ippi5dsIgpyKWKZaAKZltbA==", - "dev": true - }, "base64id": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/base64id/-/base64id-2.0.0.tgz", @@ -1937,6 +1959,35 @@ "fill-range": "^7.0.1" } }, + "browser-driver-manager": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/browser-driver-manager/-/browser-driver-manager-1.0.3.tgz", + "integrity": "sha512-TVXp+N+IzV0B8I+4FczW/xnohqWcBI1LVzitgZb29bTeiDBrey9Ru8aHrFw30wAojRhJ5SpdPnUEc4f/DDn/AQ==", + "dev": true, + "requires": { + "chalk": "^5.0.0", + "node-fetch": "^3.2.0" + }, + "dependencies": { + "chalk": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-5.0.0.tgz", + "integrity": "sha512-/duVOqst+luxCQRKEo4bNxinsOQtMP80ZYm7mMqzuh5PociNL0PvmHFvREJ9ueYL2TxlHjBcmLCdmocx9Vg+IQ==", + "dev": true + }, + "node-fetch": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-3.2.0.tgz", + "integrity": "sha512-8xeimMwMItMw8hRrOl3C9/xzU49HV/yE6ORew/l+dxWimO5A4Ra8ld2rerlJvc/O7et5Z1zrWsPX43v1QBjCxw==", + "dev": true, + "requires": { + "data-uri-to-buffer": "^4.0.0", + "fetch-blob": "^3.1.4", + "formdata-polyfill": "^4.0.10" + } + } + } + }, "browser-process-hrtime": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/browser-process-hrtime/-/browser-process-hrtime-1.0.0.tgz", @@ -2049,9 +2100,9 @@ } }, "caniuse-lite": { - "version": "1.0.30001296", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001296.tgz", - "integrity": "sha512-WfrtPEoNSoeATDlf4y3QvkwiELl9GyPLISV5GejTbbQRtQx4LhsXmc9IQ6XCL2d7UxCyEzToEZNMeqR79OUw8Q==", + "version": "1.0.30001303", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001303.tgz", + "integrity": "sha512-/Mqc1oESndUNszJP0kx0UaQU9kEv9nNtJ7Kn8AdA0mNnH8eR1cj0kG+NbNuC1Wq/b21eA8prhKRA3bbkjONegQ==", "dev": true }, "catharsis": { @@ -2141,9 +2192,9 @@ "dev": true }, "chokidar": { - "version": "3.5.2", - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.2.tgz", - "integrity": "sha512-ekGhOnNVPgT77r4K/U3GDhu+FQ2S8TnK/s2KbIGXi0SZWuwkZ2QNyfWdZW+TVfn84DpEP7rLeCt2UI6bJ8GwbQ==", + "version": "3.5.3", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz", + "integrity": "sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==", "dev": true, "requires": { "anymatch": "~3.1.2", @@ -2157,13 +2208,13 @@ } }, "chromedriver": { - "version": "97.0.0", - "resolved": "https://registry.npmjs.org/chromedriver/-/chromedriver-97.0.0.tgz", - "integrity": "sha512-SZ9MW+/6/Ypz20CNdRKocsmRM2AJ/YwHaWpA1Np2QVPFUbhjhus6vBtqFD+l8M5qrktLWPQSjTwIsDckNfXIRg==", + "version": "97.0.2", + "resolved": "https://registry.npmjs.org/chromedriver/-/chromedriver-97.0.2.tgz", + "integrity": "sha512-sOAfKCR3WsHvmKedZoWa+3tBVGdPtxq4zKxgKZCoJ2c924olBTW4Bnha6SHl93Yo7+QqsNn6ZpAC0ojhutacAg==", "dev": true, "requires": { - "@testim/chrome-version": "^1.0.7", - "axios": "^0.21.2", + "@testim/chrome-version": "^1.1.2", + "axios": "^0.24.0", "del": "^6.0.0", "extract-zip": "^2.0.1", "https-proxy-agent": "^5.0.0", @@ -2697,9 +2748,9 @@ "dev": true }, "core-js-compat": { - "version": "3.20.2", - "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.20.2.tgz", - "integrity": "sha512-qZEzVQ+5Qh6cROaTPFLNS4lkvQ6mBzE3R6A6EEpssj7Zr2egMHgsy4XapdifqJDGC9CBiNv7s+ejI96rLNQFdg==", + "version": "3.20.3", + "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.20.3.tgz", + "integrity": "sha512-c8M5h0IkNZ+I92QhIpuSijOxGAcj3lgpsWdkCqmUTZNwidujF4r3pi6x1DCN+Vcs5qTS2XWWMfWSuCqyupX8gw==", "dev": true, "requires": { "browserslist": "^4.19.1", @@ -2857,6 +2908,12 @@ "integrity": "sha512-2iy1EkLdlBzQGvbweYRFxmFath8+K7+AKB0TlhHWkNuH+TmovaMH/Wp7V7R4u7f4SnX3OgLsU9t1NI9ioDnUpg==", "dev": true }, + "data-uri-to-buffer": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/data-uri-to-buffer/-/data-uri-to-buffer-4.0.0.tgz", + "integrity": "sha512-Vr3mLBA8qWmcuschSLAOogKgQ/Jwxulv3RNE4FXnYWRGujzrRWQI4m12fQqRkwX06C0KanhLr4hK+GydchZsaA==", + "dev": true + }, "data-urls": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/data-urls/-/data-urls-2.0.0.tgz", @@ -2897,9 +2954,9 @@ } }, "date-format": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/date-format/-/date-format-3.0.0.tgz", - "integrity": "sha512-eyTcpKOcamdhWJXj56DpQMo1ylSQpcGtGKXcU0Tb97+K56/CF5amAqqqNj0+KvA0iw2ynxtHWFsPDSClCxe48w==", + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/date-format/-/date-format-4.0.3.tgz", + "integrity": "sha512-7P3FyqDcfeznLZp2b+OMitV9Sz2lUnsT87WaTat9nVwqsBkTzPG3lPLNwW3en6F4pHUiWzr6vb8CLhjdK9bcxQ==", "dev": true }, "dateformat": { @@ -2988,16 +3045,16 @@ }, "dependencies": { "globby": { - "version": "11.0.4", - "resolved": "https://registry.npmjs.org/globby/-/globby-11.0.4.tgz", - "integrity": "sha512-9O4MVG9ioZJ08ffbcyVYyLOJLk5JQ688pJ4eMGLpdWLHq/Wr1D9BlriLQyL0E+jbkuePVZXYFj47QM/v093wHg==", + "version": "11.1.0", + "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz", + "integrity": "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==", "dev": true, "requires": { "array-union": "^2.1.0", "dir-glob": "^3.0.1", - "fast-glob": "^3.1.1", - "ignore": "^5.1.4", - "merge2": "^1.3.0", + "fast-glob": "^3.2.9", + "ignore": "^5.2.0", + "merge2": "^1.4.1", "slash": "^3.0.0" } } @@ -3229,9 +3286,9 @@ "dev": true }, "electron-to-chromium": { - "version": "1.4.37", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.37.tgz", - "integrity": "sha512-XIvFB1omSAxYgHYX48sC+HR8i/p7lx7R+0cX9faElg1g++h9IilCrJ12+bQuY+d96Wp7zkBiJwMOv+AhLtLrTg==", + "version": "1.4.56", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.56.tgz", + "integrity": "sha512-0k/S0FQqRRpJbX7YUjwCcLZ8D42RqGKtaiq90adXBOYgTIWwLA/g3toO8k9yEpqU8iC4QyaWYYWSTBIna8WV4g==", "dev": true }, "emoji-regex": { @@ -3256,9 +3313,9 @@ } }, "engine.io": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/engine.io/-/engine.io-6.1.0.tgz", - "integrity": "sha512-ErhZOVu2xweCjEfYcTdkCnEYUiZgkAcBBAhW4jbIvNG8SLU3orAqoJCiytZjYF7eTpVmmCrLDjLIEaPlUAs1uw==", + "version": "6.1.2", + "resolved": "https://registry.npmjs.org/engine.io/-/engine.io-6.1.2.tgz", + "integrity": "sha512-v/7eGHxPvO2AWsksyx2PUsQvBafuvqs0jJJQ0FdmJG1b9qIvgSbqDRGwNhfk2XHaTTbTXiC4quRE8Q9nRjsrQQ==", "dev": true, "requires": { "@types/cookie": "^0.4.1", @@ -3282,12 +3339,12 @@ } }, "engine.io-parser": { - "version": "5.0.2", - "resolved": "https://registry.npmjs.org/engine.io-parser/-/engine.io-parser-5.0.2.tgz", - "integrity": "sha512-wuiO7qO/OEkPJSFueuATIXtrxF7/6GTbAO9QLv7nnbjwZ5tYhLm9zxvLwxstRs0dcT0KUlWTjtIOs1T86jt12g==", + "version": "5.0.3", + "resolved": "https://registry.npmjs.org/engine.io-parser/-/engine.io-parser-5.0.3.tgz", + "integrity": "sha512-BtQxwF27XUNnSafQLvDi0dQ8s3i6VgzSoQMJacpIcGNrlUdfHSKbgm3jmjCVvQluGzqwujQMPAoMai3oYSTurg==", "dev": true, "requires": { - "base64-arraybuffer": "~1.0.1" + "@socket.io/base64-arraybuffer": "~1.0.2" } }, "enquirer": { @@ -3878,9 +3935,9 @@ "dev": true }, "fast-glob": { - "version": "3.2.7", - "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.7.tgz", - "integrity": "sha512-rYGMRwip6lUMvYD3BTScMwT1HtAs2d71SMv66Vrxs0IekGZEjhM0pcMfjQPnknBt2zeCwQMEupiN02ZP4DiT1Q==", + "version": "3.2.11", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.11.tgz", + "integrity": "sha512-xrO3+1bxSo3ZVHAnqzyuewYT6aMFHRAd4Kcs92MAonjwQZLsK9d0SF1IyQ3k5PoirxTW0Oe/RqFgMQ6TcNE5Ew==", "dev": true, "requires": { "@nodelib/fs.stat": "^2.0.2", @@ -3929,6 +3986,16 @@ "pend": "~1.2.0" } }, + "fetch-blob": { + "version": "3.1.4", + "resolved": "https://registry.npmjs.org/fetch-blob/-/fetch-blob-3.1.4.tgz", + "integrity": "sha512-Eq5Xv5+VlSrYWEqKrusxY1C3Hm/hjeAsCGVG3ft7pZahlUAChpGZT/Ms1WmSLnEAisEXszjzu/s+ce6HZB2VHA==", + "dev": true, + "requires": { + "node-domexception": "^1.0.0", + "web-streams-polyfill": "^3.0.3" + } + }, "figures": { "version": "1.7.0", "resolved": "https://registry.npmjs.org/figures/-/figures-1.7.0.tgz", @@ -4083,15 +4150,15 @@ } }, "flatted": { - "version": "3.2.4", - "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.2.4.tgz", - "integrity": "sha512-8/sOawo8tJ4QOBX8YlQBMxL8+RLZfxMQOif9o0KUKTNTjMYElWPE0r/m5VNFxTRd0NSw8qSy8dajrwX4RYI1Hw==", + "version": "3.2.5", + "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.2.5.tgz", + "integrity": "sha512-WIWGi2L3DyTUvUrwRKgGi9TwxQMUEqPOPQBVi71R96jZXJdFskXEmf54BoZaS1kknGODoIGASGEzBUYdyMCBJg==", "dev": true }, "follow-redirects": { - "version": "1.14.6", - "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.14.6.tgz", - "integrity": "sha512-fhUl5EwSJbbl8AR+uYL2KQDxLkdSjZGR36xy46AO7cOMTrCMON6Sa28FmAnC2tRTDbd/Uuzz3aJBv7EBN7JH8A==", + "version": "1.14.7", + "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.14.7.tgz", + "integrity": "sha512-+hbxoLbFMbRKDwohX8GkTataGqO6Jb7jGwpAlwgy2bIz25XtRm7KEzJM76R1WiNT5SwZkX4Y75SwBolkpmE7iQ==", "dev": true }, "for-in": { @@ -4120,6 +4187,15 @@ "mime-types": "^2.1.12" } }, + "formdata-polyfill": { + "version": "4.0.10", + "resolved": "https://registry.npmjs.org/formdata-polyfill/-/formdata-polyfill-4.0.10.tgz", + "integrity": "sha512-buewHzMvYL29jdeQTVILecSaZKnt/RJWjoZCF5OW60Z67/GmSLBkOFM7qh1PI3zFNtJbaZL5eQu1vLfazOwj4g==", + "dev": true, + "requires": { + "fetch-blob": "^3.1.2" + } + }, "from": { "version": "0.1.7", "resolved": "https://registry.npmjs.org/from/-/from-0.1.7.tgz", @@ -4136,14 +4212,22 @@ } }, "fs-extra": { - "version": "8.1.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-8.1.0.tgz", - "integrity": "sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g==", + "version": "10.0.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-10.0.0.tgz", + "integrity": "sha512-C5owb14u9eJwizKGdchcDUQeFtlSHHthBk8pbX9Vc1PFZrLombudjDnNns88aYslCyF6IY5SUw3Roz6xShcEIQ==", "dev": true, "requires": { "graceful-fs": "^4.2.0", - "jsonfile": "^4.0.0", - "universalify": "^0.1.0" + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + }, + "dependencies": { + "universalify": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz", + "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==", + "dev": true + } } }, "fs.realpath": { @@ -5523,9 +5607,9 @@ } }, "joi": { - "version": "17.5.0", - "resolved": "https://registry.npmjs.org/joi/-/joi-17.5.0.tgz", - "integrity": "sha512-R7hR50COp7StzLnDi4ywOXHrBrgNXuUUfJWIR5lPY5Bm/pOD3jZaTwpluUXVLRWcoWZxkrHBBJ5hLxgnlehbdw==", + "version": "17.6.0", + "resolved": "https://registry.npmjs.org/joi/-/joi-17.6.0.tgz", + "integrity": "sha512-OX5dG6DTbcr/kbMFj0KGYxuew69HPcAE3K/sZpEV2nP6e/j/C0HV+HNiBPCASxdx5T7DMoa0s8UeHWMnb6n2zw==", "dev": true, "requires": { "@hapi/hoek": "^9.0.0", @@ -5567,25 +5651,26 @@ } }, "jsdoc": { - "version": "3.6.7", - "resolved": "https://registry.npmjs.org/jsdoc/-/jsdoc-3.6.7.tgz", - "integrity": "sha512-sxKt7h0vzCd+3Y81Ey2qinupL6DpRSZJclS04ugHDNmRUXGzqicMJ6iwayhSA0S0DwwX30c5ozyUthr1QKF6uw==", + "version": "3.6.10", + "resolved": "https://registry.npmjs.org/jsdoc/-/jsdoc-3.6.10.tgz", + "integrity": "sha512-IdQ8ppSo5LKZ9o3M+LKIIK8i00DIe5msDvG3G81Km+1dhy0XrOWD0Ji8H61ElgyEj/O9KRLokgKbAM9XX9CJAg==", "dev": true, "requires": { "@babel/parser": "^7.9.4", + "@types/markdown-it": "^12.2.3", "bluebird": "^3.7.2", "catharsis": "^0.9.0", "escape-string-regexp": "^2.0.0", - "js2xmlparser": "^4.0.1", - "klaw": "^3.0.0", - "markdown-it": "^10.0.0", - "markdown-it-anchor": "^5.2.7", - "marked": "^2.0.3", + "js2xmlparser": "^4.0.2", + "klaw": "^4.0.1", + "markdown-it": "^12.3.2", + "markdown-it-anchor": "^8.4.1", + "marked": "^4.0.10", "mkdirp": "^1.0.4", "requizzle": "^0.2.3", "strip-json-comments": "^3.1.0", "taffydb": "2.6.2", - "underscore": "~1.13.1" + "underscore": "~1.13.2" }, "dependencies": { "escape-string-regexp": { @@ -5711,12 +5796,21 @@ } }, "jsonfile": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz", - "integrity": "sha1-h3Gq4HmbZAdrdmQPygWPnBDjPss=", + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", + "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", "dev": true, "requires": { - "graceful-fs": "^4.1.6" + "graceful-fs": "^4.1.6", + "universalify": "^2.0.0" + }, + "dependencies": { + "universalify": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz", + "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==", + "dev": true + } } }, "jsonparse": { @@ -5776,15 +5870,15 @@ "dev": true }, "karma": { - "version": "6.3.9", - "resolved": "https://registry.npmjs.org/karma/-/karma-6.3.9.tgz", - "integrity": "sha512-E/MqdLM9uVIhfuyVnrhlGBu4miafBdXEAEqCmwdEMh3n17C7UWC/8Kvm3AYKr91gc7scutekZ0xv6rxRaUCtnw==", + "version": "6.3.12", + "resolved": "https://registry.npmjs.org/karma/-/karma-6.3.12.tgz", + "integrity": "sha512-qwIG+oB2YmHx4hjvYSRMNzL3YWAJ9baHaLAxiP7biFNkfpwYTUTtPck0joFpucalNLzMr+7z/FX1uY/kl8DV9A==", "dev": true, "requires": { "body-parser": "^1.19.0", "braces": "^3.0.2", "chokidar": "^3.5.1", - "colors": "^1.4.0", + "colors": "1.4.0", "connect": "^3.7.0", "di": "^0.0.1", "dom-serialize": "^2.2.1", @@ -5932,13 +6026,10 @@ "dev": true }, "klaw": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/klaw/-/klaw-3.0.0.tgz", - "integrity": "sha512-0Fo5oir+O9jnXu5EefYbVK+mHMBeEVEy2cmctR1O1NECcCkPRreJKrS6Qt/j3KC2C148Dfo9i3pCmCMsdqGr0g==", - "dev": true, - "requires": { - "graceful-fs": "^4.1.9" - } + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/klaw/-/klaw-4.0.1.tgz", + "integrity": "sha512-pgsE40/SvC7st04AHiISNewaIMUbY5V/K8b21ekiPiFoYs/EYSdsGa+FJArB1d441uq4Q8zZyIxvAzkGNlBdRw==", + "dev": true }, "lazy-ass": { "version": "1.6.0", @@ -6011,9 +6102,9 @@ "dev": true }, "linkify-it": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/linkify-it/-/linkify-it-2.2.0.tgz", - "integrity": "sha512-GnAl/knGn+i1U/wjBz3akz2stz+HrHLsxMwHQGofCDfPvlf+gDKN58UtfmUquTY4/MXeE2x7k19KQmeoZi94Iw==", + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/linkify-it/-/linkify-it-3.0.3.tgz", + "integrity": "sha512-ynTsyrFSdE5oZ/O9GEf00kPngmOfVwazR5GKDq6EYfhlpFug3J2zybX56a2PRRpc9P+FuSoGNAwjlbDs9jJBPQ==", "dev": true, "requires": { "uc.micro": "^1.0.1" @@ -6274,24 +6365,16 @@ } }, "log4js": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/log4js/-/log4js-6.3.0.tgz", - "integrity": "sha512-Mc8jNuSFImQUIateBFwdOQcmC6Q5maU0VVvdC2R6XMb66/VnT+7WS4D/0EeNMZu1YODmJe5NIn2XftCzEocUgw==", + "version": "6.4.1", + "resolved": "https://registry.npmjs.org/log4js/-/log4js-6.4.1.tgz", + "integrity": "sha512-iUiYnXqAmNKiIZ1XSAitQ4TmNs8CdZYTAWINARF3LjnsLN8tY5m0vRwd6uuWj/yNY0YHxeZodnbmxKFUOM2rMg==", "dev": true, "requires": { - "date-format": "^3.0.0", - "debug": "^4.1.1", - "flatted": "^2.0.1", - "rfdc": "^1.1.4", - "streamroller": "^2.2.4" - }, - "dependencies": { - "flatted": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/flatted/-/flatted-2.0.2.tgz", - "integrity": "sha512-r5wGx7YeOwNWNlCA0wQ86zKyDLMQr+/RB8xy74M4hTphfmjlijTSSXGuH8rnvKZnfT9i+75zmd8jcKdMR4O6jA==", - "dev": true - } + "date-format": "^4.0.3", + "debug": "^4.3.3", + "flatted": "^3.2.4", + "rfdc": "^1.3.0", + "streamroller": "^3.0.2" } }, "lolex": { @@ -6355,30 +6438,36 @@ "dev": true }, "markdown-it": { - "version": "10.0.0", - "resolved": "https://registry.npmjs.org/markdown-it/-/markdown-it-10.0.0.tgz", - "integrity": "sha512-YWOP1j7UbDNz+TumYP1kpwnP0aEa711cJjrAQrzd0UXlbJfc5aAq0F/PZHjiioqDC1NKgvIMX+o+9Bk7yuM2dg==", + "version": "12.3.2", + "resolved": "https://registry.npmjs.org/markdown-it/-/markdown-it-12.3.2.tgz", + "integrity": "sha512-TchMembfxfNVpHkbtriWltGWc+m3xszaRD0CZup7GFFhzIgQqxIfn3eGj1yZpfuflzPvfkt611B2Q/Bsk1YnGg==", "dev": true, "requires": { - "argparse": "^1.0.7", - "entities": "~2.0.0", - "linkify-it": "^2.0.0", + "argparse": "^2.0.1", + "entities": "~2.1.0", + "linkify-it": "^3.0.1", "mdurl": "^1.0.1", "uc.micro": "^1.0.5" }, "dependencies": { + "argparse": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", + "dev": true + }, "entities": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/entities/-/entities-2.0.3.tgz", - "integrity": "sha512-MyoZ0jgnLvB2X3Lg5HqpFmn1kybDiIfEQmKzTb5apr51Rb+T3KdmMiqa70T+bhGnyv7bQ6WMj2QMHpGMmlrUYQ==", + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/entities/-/entities-2.1.0.tgz", + "integrity": "sha512-hCx1oky9PFrJ611mf0ifBLBRW8lUUVRlFolb5gWRfIELabBlbp9xZvrqZLZAs+NxFnbfQoeGd8wDkygjg7U85w==", "dev": true } } }, "markdown-it-anchor": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/markdown-it-anchor/-/markdown-it-anchor-5.3.0.tgz", - "integrity": "sha512-/V1MnLL/rgJ3jkMWo84UR+K+jF1cxNG1a+KwqeXqTIJ+jtA8aWSHuigx8lTzauiIjBDbwF3NcWQMotd0Dm39jA==", + "version": "8.4.1", + "resolved": "https://registry.npmjs.org/markdown-it-anchor/-/markdown-it-anchor-8.4.1.tgz", + "integrity": "sha512-sLODeRetZ/61KkKLJElaU3NuU2z7MhXf12Ml1WJMSdwpngeofneCRF+JBbat8HiSqhniOMuTemXMrsI7hA6XyA==", "dev": true }, "markdown-table": { @@ -6388,9 +6477,9 @@ "dev": true }, "marked": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/marked/-/marked-2.1.3.tgz", - "integrity": "sha512-/Q+7MGzaETqifOMWYEA7HVMaZb4XbcRfaOzcSsHZEith83KGlvaSG33u0SKu89Mj5h+T8V2hM+8O45Qc5XTgwA==", + "version": "4.0.12", + "resolved": "https://registry.npmjs.org/marked/-/marked-4.0.12.tgz", + "integrity": "sha512-hgibXWrEDNBWgGiK18j/4lkS6ihTe9sxtV4Q1OQppb/0zzyPSzoFANBa5MfsG/zgsWklmNnhm0XACZOH/0HBiQ==", "dev": true }, "maxmin": { @@ -6967,10 +7056,16 @@ } } }, + "node-domexception": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/node-domexception/-/node-domexception-1.0.0.tgz", + "integrity": "sha512-/jKZoMpw0F8GRwl4/eLROPA3cfcXtLApP0QzLmUT/HuPCZWyB7IY9ZrMeKw2O/nFIqPQB3PVM9aYm0F312AXDQ==", + "dev": true + }, "node-fetch": { - "version": "2.6.6", - "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.6.tgz", - "integrity": "sha512-Z8/6vRlTUChSdIgMa51jxQ4lrw/Jy5SOW10ObaA47/RElsAN2c5Pn8bTgFGWn/ibwzXTE8qwr1Yzx28vsecXEA==", + "version": "2.6.7", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.7.tgz", + "integrity": "sha512-ZjMPFEfVx5j+y2yF35Kzx5sF7kDzxuDj6ziH4FFbOp87zKDZNx8yExJIb05OGF4Nlt9IHFIMBkRl41VdvcNdbQ==", "dev": true, "requires": { "whatwg-url": "^5.0.0" @@ -7711,9 +7806,9 @@ "dev": true }, "qs": { - "version": "6.10.2", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.10.2.tgz", - "integrity": "sha512-mSIdjzqznWgfd4pMii7sHtaYF8rx8861hBO80SraY5GT0XQibWZWJSid0avzHGkDIZLImux2S5mXO0Hfct2QCw==", + "version": "6.10.3", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.10.3.tgz", + "integrity": "sha512-wr7M2E0OFRfIfJZjKGieI8lBKb7fRCH4Fv5KNPEs7gJ8jadvotdsS08PzOKR7opXhZ/Xkjtt3WF9g38drmyRqQ==", "dev": true, "requires": { "side-channel": "^1.0.4" @@ -7970,12 +8065,12 @@ } }, "resolve": { - "version": "1.21.0", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.21.0.tgz", - "integrity": "sha512-3wCbTpk5WJlyE4mSOtDLhqQmGFi0/TD9VPwmiolnk8U0wRgMEktqCXd3vy5buTO3tljvalNvKrjHEfrd2WpEKA==", + "version": "1.22.0", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.0.tgz", + "integrity": "sha512-Hhtrw0nLeSrFQ7phPp4OOcVjLPIeMnRlr5mcnVuMe7M/7eBn98A3hmFRLoFo3DLZkivSYwhRUJTyPyWAk56WLw==", "dev": true, "requires": { - "is-core-module": "^2.8.0", + "is-core-module": "^2.8.1", "path-parse": "^1.0.7", "supports-preserve-symlinks-flag": "^1.0.0" } @@ -8049,9 +8144,9 @@ } }, "rxjs": { - "version": "7.5.1", - "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-7.5.1.tgz", - "integrity": "sha512-KExVEeZWxMZnZhUZtsJcFwz8IvPvgu4G2Z2QyqjZQzUGr32KDYuSxrEYO4w3tFFNbfLozcrKUTvTPi+E9ywJkQ==", + "version": "7.5.2", + "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-7.5.2.tgz", + "integrity": "sha512-PwDt186XaL3QN5qXj/H9DGyHhP3/RYYgZZwqBv9Tv8rsAaiwFH1IsJJlcgD37J7UW5a6O67qX0KWKS3/pu0m4w==", "dev": true, "requires": { "tslib": "^2.1.0" @@ -8538,22 +8633,14 @@ } }, "streamroller": { - "version": "2.2.4", - "resolved": "https://registry.npmjs.org/streamroller/-/streamroller-2.2.4.tgz", - "integrity": "sha512-OG79qm3AujAM9ImoqgWEY1xG4HX+Lw+yY6qZj9R1K2mhF5bEmQ849wvrb+4vt4jLMLzwXttJlQbOdPOQVRv7DQ==", + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/streamroller/-/streamroller-3.0.2.tgz", + "integrity": "sha512-ur6y5S5dopOaRXBuRIZ1u6GC5bcEXHRZKgfBjfCglMhmIf+roVCECjvkEYzNQOXIN2/JPnkMPW/8B3CZoKaEPA==", "dev": true, "requires": { - "date-format": "^2.1.0", + "date-format": "^4.0.3", "debug": "^4.1.1", - "fs-extra": "^8.1.0" - }, - "dependencies": { - "date-format": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/date-format/-/date-format-2.1.0.tgz", - "integrity": "sha512-bYQuGLeFxhkxNOF3rcMtiZxvCBAquGzZm6oWA1oZ0g2THUzivaRhv8uOhdr19LmoobSOLoIAxeUK2RdbM8IFTA==", - "dev": true - } + "fs-extra": "^10.0.0" } }, "string-argv": { @@ -8721,9 +8808,9 @@ }, "dependencies": { "ajv": { - "version": "8.8.2", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.8.2.tgz", - "integrity": "sha512-x9VuX+R/jcFj1DHo/fCp99esgGDWiHENrKxaCENuCxpoMCmAt/COCGVDwA7kleEpEzJjDnvh3yGoOuLu0Dtllw==", + "version": "8.9.0", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.9.0.tgz", + "integrity": "sha512-qOKJyNj/h+OWx7s5DePL6Zu1KeM9jPZhwBqs+7DzP6bGOvqzVCSf0xueYmVuaC/oQ/VtS2zLMLHdQFbkka+XDQ==", "dev": true, "requires": { "fast-deep-equal": "^3.1.1", @@ -8950,9 +9037,9 @@ "dev": true }, "uglify-js": { - "version": "3.14.5", - "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.14.5.tgz", - "integrity": "sha512-qZukoSxOG0urUTvjc2ERMTcAy+BiFh3weWAkeurLwjrCba73poHmG3E36XEjd/JGukMzwTL7uCxZiAexj8ppvQ==", + "version": "3.15.0", + "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.15.0.tgz", + "integrity": "sha512-x+xdeDWq7FiORDvyIJ0q/waWd4PhjBNOm5dQUOq2AKC0IEjxOS66Ha9tctiVDGcRQuh69K7fgU5oRuTK4cysSg==", "dev": true }, "unbox-primitive": { @@ -8980,13 +9067,21 @@ "dev": true }, "underscore.string": { - "version": "3.3.5", - "resolved": "https://registry.npmjs.org/underscore.string/-/underscore.string-3.3.5.tgz", - "integrity": "sha512-g+dpmgn+XBneLmXXo+sGlW5xQEt4ErkS3mgeN2GFbremYeMBSJKr9Wf2KJplQVaiPY/f7FN6atosWYNm9ovrYg==", + "version": "3.3.6", + "resolved": "https://registry.npmjs.org/underscore.string/-/underscore.string-3.3.6.tgz", + "integrity": "sha512-VoC83HWXmCrF6rgkyxS9GHv8W9Q5nhMKho+OadDJGzL2oDYbYEppBaCMH6pFlwLeqj2QS+hhkw2kpXkSdD1JxQ==", "dev": true, "requires": { - "sprintf-js": "^1.0.3", + "sprintf-js": "^1.1.1", "util-deprecate": "^1.0.2" + }, + "dependencies": { + "sprintf-js": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.1.2.tgz", + "integrity": "sha512-VE0SOVEHCk7Qc8ulkWw3ntAzXuqf7S2lvwQaDLRnUeIEaKNQJzV6BwmLKhOqT61aGhfUMrXeaBk+oDGCzvhcug==", + "dev": true + } } }, "unicode-canonical-property-names-ecmascript": { @@ -9149,6 +9244,17 @@ "lodash": "^4.17.21", "minimist": "^1.2.5", "rxjs": "^7.1.0" + }, + "dependencies": { + "axios": { + "version": "0.21.4", + "resolved": "https://registry.npmjs.org/axios/-/axios-0.21.4.tgz", + "integrity": "sha512-ut5vewkiu8jjGBdqpM44XxjuCjq9LAKeHVmoVfHVzy8eHgxxq8SbAVQNovDA8mVi05kP0Ea/n/UzcSHcTJQfNg==", + "dev": true, + "requires": { + "follow-redirects": "^1.14.0" + } + } } }, "weakmap-polyfill": { @@ -9157,6 +9263,12 @@ "integrity": "sha512-ZzxBf288iALJseijWelmECm/1x7ZwQn3sMYIkDr2VvZp7r6SEKuT8D0O9Wiq6L9Nl5mazrOMcmiZE/2NCenaxw==", "dev": true }, + "web-streams-polyfill": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/web-streams-polyfill/-/web-streams-polyfill-3.2.0.tgz", + "integrity": "sha512-EqPmREeOzttaLRm5HS7io98goBgZ7IVz79aDvqjD0kYXLtFZTc0T/U6wHTPKyIjb+MdN7DFIIX6hgdBEpWmfPA==", + "dev": true + }, "webidl-conversions": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", diff --git a/package.json b/package.json index 995632da77..73f7718b17 100644 --- a/package.json +++ b/package.json @@ -117,6 +117,7 @@ "act-rules.github.io": "github:act-rules/act-rules.github.io#master", "aria-practices": "github:w3c/aria-practices#f7de7ec3a53534018237f24cb9e610f26c30c367", "aria-query": "^3.0.0", + "browser-driver-manager": "1.0.3", "chai": "~4.2.0", "chalk": "^4.1.0", "chromedriver": "latest", From 2238e9925b6c173ede698e32d2adab97deba6458 Mon Sep 17 00:00:00 2001 From: Wilco Fiers Date: Fri, 11 Feb 2022 19:46:25 +0100 Subject: [PATCH 05/20] chore: resolve npm audit issues (#3378) * chore: resolve npm audit issues * fix ACT karma config * chore(runPartial): skip tests in IE * ci: try upgrading win executor * Update config.yml * Update config.yml * More tests not running in IE * More of these * bump karma version * avoid using .finally() --- .circleci/config.yml | 6 +- lib/core/public/run-partial.js | 7 +- package-lock.json | 1191 +++++++--------------- package.json | 12 +- test/act-mapping/karma.config.js | 4 +- test/integration/full/preload/preload.js | 6 +- test/integration/full/umd/umd-window.js | 4 +- test/karma.conf.js | 4 +- 8 files changed, 416 insertions(+), 818 deletions(-) diff --git a/.circleci/config.yml b/.circleci/config.yml index cebe609fd7..3da86ceb61 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -13,11 +13,11 @@ unix_nightly_box: &unix_nightly_box win_box: &win_box executor: - name: win/vs2019 + name: win/default shell: bash.exe orbs: - win: circleci/windows@1.0.0 + win: circleci/windows@2.2.0 puppeteer: threetreeslight/puppeteer@0.1.2 browser-tools: circleci/browser-tools@1.1.0 @@ -394,4 +394,4 @@ workflows: - dependencies_unix - test_nightly_aria_practices: requires: - - dependencies_unix \ No newline at end of file + - dependencies_unix diff --git a/lib/core/public/run-partial.js b/lib/core/public/run-partial.js index e543397933..b39f832e69 100644 --- a/lib/core/public/run-partial.js +++ b/lib/core/public/run-partial.js @@ -32,12 +32,15 @@ export default function runPartial(...args) { if (contextObj.initiator) { environmentData = getEnvironmentData(); } - + axe._running = false; + teardown(); return { results, frames, environmentData }; }) - .finally(() => { + // Avoid .finally() to deal with Mocha 9 + IE issues + .catch((err) => { axe._running = false; teardown(); + return Promise.reject(err); }); } diff --git a/package-lock.json b/package-lock.json index 129b2f0d73..67a831cbba 100644 --- a/package-lock.json +++ b/package-lock.json @@ -23,26 +23,26 @@ } }, "@babel/compat-data": { - "version": "7.16.8", - "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.16.8.tgz", - "integrity": "sha512-m7OkX0IdKLKPpBlJtF561YJal5y/jyI5fNfWbPxh2D/nbzzGI4qRyrD8xO2jB24u7l+5I2a43scCG2IrfjC50Q==", + "version": "7.16.4", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.16.4.tgz", + "integrity": "sha512-1o/jo7D+kC9ZjHX5v+EHrdjl3PhxMrLSOTGsOdHJ+KL8HCaEK6ehrVL2RS6oHDZp+L7xLirLrPmQtEng769J/Q==", "dev": true }, "@babel/core": { - "version": "7.16.12", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.16.12.tgz", - "integrity": "sha512-dK5PtG1uiN2ikk++5OzSYsitZKny4wOCD0nrO4TqnW4BVBTQ2NGS3NgilvT/TEyxTST7LNyWV/T4tXDoD3fOgg==", + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.16.7.tgz", + "integrity": "sha512-aeLaqcqThRNZYmbMqtulsetOQZ/5gbR/dWruUCJcpas4Qoyy+QeagfDsPdMrqwsPRDNxJvBlRiZxxX7THO7qtA==", "dev": true, "requires": { "@babel/code-frame": "^7.16.7", - "@babel/generator": "^7.16.8", + "@babel/generator": "^7.16.7", "@babel/helper-compilation-targets": "^7.16.7", "@babel/helper-module-transforms": "^7.16.7", "@babel/helpers": "^7.16.7", - "@babel/parser": "^7.16.12", + "@babel/parser": "^7.16.7", "@babel/template": "^7.16.7", - "@babel/traverse": "^7.16.10", - "@babel/types": "^7.16.8", + "@babel/traverse": "^7.16.7", + "@babel/types": "^7.16.7", "convert-source-map": "^1.7.0", "debug": "^4.1.0", "gensync": "^1.0.0-beta.2", @@ -52,12 +52,12 @@ } }, "@babel/generator": { - "version": "7.16.8", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.16.8.tgz", - "integrity": "sha512-1ojZwE9+lOXzcWdWmO6TbUzDfqLD39CmEhN8+2cX9XkDo5yW1OpgfejfliysR2AWLpMamTiOiAp/mtroaymhpw==", + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.16.7.tgz", + "integrity": "sha512-/ST3Sg8MLGY5HVYmrjOgL60ENux/HfO/CsUh7y4MalThufhE/Ff/6EibFDHi4jiDCaWfJKoqbE6oTh21c5hrRg==", "dev": true, "requires": { - "@babel/types": "^7.16.8", + "@babel/types": "^7.16.7", "jsesc": "^2.5.1", "source-map": "^0.5.0" } @@ -94,9 +94,9 @@ } }, "@babel/helper-create-class-features-plugin": { - "version": "7.16.10", - "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.16.10.tgz", - "integrity": "sha512-wDeej0pu3WN/ffTxMNCPW5UCiOav8IcLRxSIyp/9+IF2xJUM9h/OYjg0IJLHaL6F8oU8kqMz9nc1vryXhMsgXg==", + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.16.7.tgz", + "integrity": "sha512-kIFozAvVfK05DM4EVQYKK+zteWvY85BFdGBRQBytRyY3y+6PX0DkDOn/CZ3lEuczCfrCxEzwt0YtP/87YPTWSw==", "dev": true, "requires": { "@babel/helper-annotate-as-pure": "^7.16.7", @@ -119,9 +119,9 @@ } }, "@babel/helper-define-polyfill-provider": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.3.1.tgz", - "integrity": "sha512-J9hGMpJQmtWmj46B3kBHmL38UhJGhYX7eqkcq+2gsstyYt341HmPeWspihX43yVRA0mS+8GGk2Gckc7bY/HCmA==", + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.3.0.tgz", + "integrity": "sha512-7hfT8lUljl/tM3h+izTX/pO3W3frz2ok6Pk+gzys8iJqDfZrZy2pXjRTZAvG2YmfHun1X4q8/UZRLatMfqc5Tg==", "dev": true, "requires": { "@babel/helper-compilation-targets": "^7.13.0", @@ -231,14 +231,14 @@ "dev": true }, "@babel/helper-remap-async-to-generator": { - "version": "7.16.8", - "resolved": "https://registry.npmjs.org/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.16.8.tgz", - "integrity": "sha512-fm0gH7Flb8H51LqJHy3HJ3wnE1+qtYR2A99K06ahwrawLdOFsCEWjZOrYricXJHoPSudNKxrMBUPEIPxiIIvBw==", + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.16.7.tgz", + "integrity": "sha512-C3o117GnP/j/N2OWo+oepeWbFEKRfNaay+F1Eo5Mj3A1SRjyx+qaFhm23nlipub7Cjv2azdUUiDH+VlpdwUFRg==", "dev": true, "requires": { "@babel/helper-annotate-as-pure": "^7.16.7", - "@babel/helper-wrap-function": "^7.16.8", - "@babel/types": "^7.16.8" + "@babel/helper-wrap-function": "^7.16.7", + "@babel/types": "^7.16.7" } }, "@babel/helper-replace-supers": { @@ -294,15 +294,15 @@ "dev": true }, "@babel/helper-wrap-function": { - "version": "7.16.8", - "resolved": "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.16.8.tgz", - "integrity": "sha512-8RpyRVIAW1RcDDGTA+GpPAwV22wXCfKOoM9bet6TLkGIFTkRQSkH1nMQ5Yet4MpoXe1ZwHPVtNasc2w0uZMqnw==", + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.16.7.tgz", + "integrity": "sha512-7a9sABeVwcunnztZZ7WTgSw6jVYLzM1wua0Z4HIXm9S3/HC96WKQTkFgGEaj5W06SHHihPJ6Le6HzS5cGOQMNw==", "dev": true, "requires": { "@babel/helper-function-name": "^7.16.7", "@babel/template": "^7.16.7", - "@babel/traverse": "^7.16.8", - "@babel/types": "^7.16.8" + "@babel/traverse": "^7.16.7", + "@babel/types": "^7.16.7" } }, "@babel/helpers": { @@ -317,9 +317,9 @@ } }, "@babel/highlight": { - "version": "7.16.10", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.16.10.tgz", - "integrity": "sha512-5FnTQLSLswEj6IkgVw5KusNUUFY9ZGqe/TRFnP/BKYHYgfh7tc+C7mwiy95/yNP7Dh9x580Vv8r7u7ZfTBFxdw==", + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.16.7.tgz", + "integrity": "sha512-aKpPMfLvGO3Q97V0qhw/V2SWNWlwfJknuwAunU7wZLSfrM4xTBvg7E5opUVi1kJTBKihE38CPg4nBiqX83PWYw==", "dev": true, "requires": { "@babel/helper-validator-identifier": "^7.16.7", @@ -341,9 +341,9 @@ } }, "@babel/parser": { - "version": "7.16.12", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.16.12.tgz", - "integrity": "sha512-VfaV15po8RiZssrkPweyvbGVSe4x2y+aciFCgn0n0/SJMR22cwofRV1mtnJQYcSB1wUTaA/X1LnA3es66MCO5A==", + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.16.7.tgz", + "integrity": "sha512-sR4eaSrnM7BV7QPzGfEX5paG/6wrZM3I0HDzfIAK06ESvo9oy3xBuVBxE3MbQaKNhvg8g/ixjMWo2CGpzpHsDA==", "dev": true }, "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": { @@ -367,13 +367,13 @@ } }, "@babel/plugin-proposal-async-generator-functions": { - "version": "7.16.8", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.16.8.tgz", - "integrity": "sha512-71YHIvMuiuqWJQkebWJtdhQTfd4Q4mF76q2IX37uZPkG9+olBxsX+rH1vkhFto4UeJZ9dPY2s+mDvhDm1u2BGQ==", + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.16.7.tgz", + "integrity": "sha512-TTXBT3A5c11eqRzaC6beO6rlFT3Mo9C2e8eB44tTr52ESXSK2CIc2fOp1ynpAwQA8HhBMho+WXhMHWlAe3xkpw==", "dev": true, "requires": { "@babel/helper-plugin-utils": "^7.16.7", - "@babel/helper-remap-async-to-generator": "^7.16.8", + "@babel/helper-remap-async-to-generator": "^7.16.7", "@babel/plugin-syntax-async-generators": "^7.8.4" } }, @@ -493,12 +493,12 @@ } }, "@babel/plugin-proposal-private-methods": { - "version": "7.16.11", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-methods/-/plugin-proposal-private-methods-7.16.11.tgz", - "integrity": "sha512-F/2uAkPlXDr8+BHpZvo19w3hLFKge+k75XUprE6jaqKxjGkSYcK+4c+bup5PdW/7W/Rpjwql7FTVEDW+fRAQsw==", + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-methods/-/plugin-proposal-private-methods-7.16.7.tgz", + "integrity": "sha512-7twV3pzhrRxSwHeIvFE6coPgvo+exNDOiGUMg39o2LiLo1Y+4aKpfkcLGcg1UHonzorCt7SNXnoMyCnnIOA8Sw==", "dev": true, "requires": { - "@babel/helper-create-class-features-plugin": "^7.16.10", + "@babel/helper-create-class-features-plugin": "^7.16.7", "@babel/helper-plugin-utils": "^7.16.7" } }, @@ -660,14 +660,14 @@ } }, "@babel/plugin-transform-async-to-generator": { - "version": "7.16.8", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.16.8.tgz", - "integrity": "sha512-MtmUmTJQHCnyJVrScNzNlofQJ3dLFuobYn3mwOTKHnSCMtbNsqvF71GQmJfFjdrXSsAA7iysFmYWw4bXZ20hOg==", + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.16.7.tgz", + "integrity": "sha512-pFEfjnK4DfXCfAlA5I98BYdDJD8NltMzx19gt6DAmfE+2lXRfPUoa0/5SUjT4+TDE1W/rcxU/1lgN55vpAjjdg==", "dev": true, "requires": { "@babel/helper-module-imports": "^7.16.7", "@babel/helper-plugin-utils": "^7.16.7", - "@babel/helper-remap-async-to-generator": "^7.16.8" + "@babel/helper-remap-async-to-generator": "^7.16.7" } }, "@babel/plugin-transform-block-scoped-functions": { @@ -801,9 +801,9 @@ } }, "@babel/plugin-transform-modules-commonjs": { - "version": "7.16.8", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.16.8.tgz", - "integrity": "sha512-oflKPvsLT2+uKQopesJt3ApiaIS2HW+hzHFcwRNtyDGieAeC/dIHZX8buJQ2J2X1rxGPy4eRcUijm3qcSPjYcA==", + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.16.7.tgz", + "integrity": "sha512-h2RP2kE7He1ZWKyAlanMZrAbdv+Acw1pA8dQZhE025WJZE2z0xzFADAinXA9fxd5bn7JnM+SdOGcndGx1ARs9w==", "dev": true, "requires": { "@babel/helper-module-transforms": "^7.16.7", @@ -836,9 +836,9 @@ } }, "@babel/plugin-transform-named-capturing-groups-regex": { - "version": "7.16.8", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.16.8.tgz", - "integrity": "sha512-j3Jw+n5PvpmhRR+mrgIh04puSANCk/T/UA3m3P1MjJkhlK906+ApHhDIqBQDdOgL/r1UYpz4GNclTXxyZrYGSw==", + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.16.7.tgz", + "integrity": "sha512-kFy35VwmwIQwCjwrAQhl3+c/kr292i4KdLPKp5lPH03Ltc51qnFlIADoyPxc/6Naz3ok3WdYKg+KK6AH+D4utg==", "dev": true, "requires": { "@babel/helper-create-regexp-features-plugin": "^7.16.7" @@ -975,18 +975,18 @@ } }, "@babel/preset-env": { - "version": "7.16.11", - "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.16.11.tgz", - "integrity": "sha512-qcmWG8R7ZW6WBRPZK//y+E3Cli151B20W1Rv7ln27vuPaXU/8TKms6jFdiJtF7UDTxcrb7mZd88tAeK9LjdT8g==", + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.16.7.tgz", + "integrity": "sha512-urX3Cee4aOZbRWOSa3mKPk0aqDikfILuo+C7qq7HY0InylGNZ1fekq9jmlr3pLWwZHF4yD7heQooc2Pow2KMyQ==", "dev": true, "requires": { - "@babel/compat-data": "^7.16.8", + "@babel/compat-data": "^7.16.4", "@babel/helper-compilation-targets": "^7.16.7", "@babel/helper-plugin-utils": "^7.16.7", "@babel/helper-validator-option": "^7.16.7", "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": "^7.16.7", "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": "^7.16.7", - "@babel/plugin-proposal-async-generator-functions": "^7.16.8", + "@babel/plugin-proposal-async-generator-functions": "^7.16.7", "@babel/plugin-proposal-class-properties": "^7.16.7", "@babel/plugin-proposal-class-static-block": "^7.16.7", "@babel/plugin-proposal-dynamic-import": "^7.16.7", @@ -998,7 +998,7 @@ "@babel/plugin-proposal-object-rest-spread": "^7.16.7", "@babel/plugin-proposal-optional-catch-binding": "^7.16.7", "@babel/plugin-proposal-optional-chaining": "^7.16.7", - "@babel/plugin-proposal-private-methods": "^7.16.11", + "@babel/plugin-proposal-private-methods": "^7.16.7", "@babel/plugin-proposal-private-property-in-object": "^7.16.7", "@babel/plugin-proposal-unicode-property-regex": "^7.16.7", "@babel/plugin-syntax-async-generators": "^7.8.4", @@ -1016,7 +1016,7 @@ "@babel/plugin-syntax-private-property-in-object": "^7.14.5", "@babel/plugin-syntax-top-level-await": "^7.14.5", "@babel/plugin-transform-arrow-functions": "^7.16.7", - "@babel/plugin-transform-async-to-generator": "^7.16.8", + "@babel/plugin-transform-async-to-generator": "^7.16.7", "@babel/plugin-transform-block-scoped-functions": "^7.16.7", "@babel/plugin-transform-block-scoping": "^7.16.7", "@babel/plugin-transform-classes": "^7.16.7", @@ -1030,10 +1030,10 @@ "@babel/plugin-transform-literals": "^7.16.7", "@babel/plugin-transform-member-expression-literals": "^7.16.7", "@babel/plugin-transform-modules-amd": "^7.16.7", - "@babel/plugin-transform-modules-commonjs": "^7.16.8", + "@babel/plugin-transform-modules-commonjs": "^7.16.7", "@babel/plugin-transform-modules-systemjs": "^7.16.7", "@babel/plugin-transform-modules-umd": "^7.16.7", - "@babel/plugin-transform-named-capturing-groups-regex": "^7.16.8", + "@babel/plugin-transform-named-capturing-groups-regex": "^7.16.7", "@babel/plugin-transform-new-target": "^7.16.7", "@babel/plugin-transform-object-super": "^7.16.7", "@babel/plugin-transform-parameters": "^7.16.7", @@ -1048,11 +1048,11 @@ "@babel/plugin-transform-unicode-escapes": "^7.16.7", "@babel/plugin-transform-unicode-regex": "^7.16.7", "@babel/preset-modules": "^0.1.5", - "@babel/types": "^7.16.8", + "@babel/types": "^7.16.7", "babel-plugin-polyfill-corejs2": "^0.3.0", - "babel-plugin-polyfill-corejs3": "^0.5.0", + "babel-plugin-polyfill-corejs3": "^0.4.0", "babel-plugin-polyfill-regenerator": "^0.3.0", - "core-js-compat": "^3.20.2", + "core-js-compat": "^3.19.1", "semver": "^6.3.0" } }, @@ -1090,27 +1090,27 @@ } }, "@babel/traverse": { - "version": "7.16.10", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.16.10.tgz", - "integrity": "sha512-yzuaYXoRJBGMlBhsMJoUW7G1UmSb/eXr/JHYM/MsOJgavJibLwASijW7oXBdw3NQ6T0bW7Ty5P/VarOs9cHmqw==", + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.16.7.tgz", + "integrity": "sha512-8KWJPIb8c2VvY8AJrydh6+fVRo2ODx1wYBU2398xJVq0JomuLBZmVQzLPBblJgHIGYG4znCpUZUZ0Pt2vdmVYQ==", "dev": true, "requires": { "@babel/code-frame": "^7.16.7", - "@babel/generator": "^7.16.8", + "@babel/generator": "^7.16.7", "@babel/helper-environment-visitor": "^7.16.7", "@babel/helper-function-name": "^7.16.7", "@babel/helper-hoist-variables": "^7.16.7", "@babel/helper-split-export-declaration": "^7.16.7", - "@babel/parser": "^7.16.10", - "@babel/types": "^7.16.8", + "@babel/parser": "^7.16.7", + "@babel/types": "^7.16.7", "debug": "^4.1.0", "globals": "^11.1.0" } }, "@babel/types": { - "version": "7.16.8", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.16.8.tgz", - "integrity": "sha512-smN2DQc5s4M7fntyjGtyIPbRJv6wW4rU/94fmYJ7PKQuZkC0qGMHXJbg6sNGt12JmVr4k5YaptI/XtiLJBnmIg==", + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.16.7.tgz", + "integrity": "sha512-E8HuV7FO9qLpx6OtoGfUQ2cjIYnbFwvZWYBS+87EwtdMvmUPJSwykpovFB+8insbpF0uJcpr8KMUi64XZntZcg==", "dev": true, "requires": { "@babel/helper-validator-identifier": "^7.16.7", @@ -1488,9 +1488,9 @@ "dev": true }, "@types/node": { - "version": "17.0.13", - "resolved": "https://registry.npmjs.org/@types/node/-/node-17.0.13.tgz", - "integrity": "sha512-Y86MAxASe25hNzlDbsviXl8jQHb0RDvKt4c40ZJQ1Don0AAL0STLZSs4N+6gLEO55pedy7r2cLwS+ZDxPm/2Bw==", + "version": "17.0.8", + "resolved": "https://registry.npmjs.org/@types/node/-/node-17.0.8.tgz", + "integrity": "sha512-YofkM6fGv4gDJq78g4j0mMuGMkZVxZDgtU0JRdx6FgiJDG+0fY0GKVolOV8WqVmEhLCXkQRjwDdKyPxJp/uucg==", "dev": true }, "@types/normalize-package-data": { @@ -1515,6 +1515,12 @@ "@types/node": "*" } }, + "@ungap/promise-all-settled": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@ungap/promise-all-settled/-/promise-all-settled-1.1.2.tgz", + "integrity": "sha512-sL/cEvJWAnClXw0wHk85/2L0G6Sj8UB0Ctc1TEMbKSsmpRosqhwj9gWgFRZSrBr2f9tiXISwNhCPmlfqUqyb9Q==", + "dev": true + }, "JSONStream": { "version": "1.3.5", "resolved": "https://registry.npmjs.org/JSONStream/-/JSONStream-1.3.5.tgz", @@ -1538,13 +1544,13 @@ "dev": true }, "accepts": { - "version": "1.3.7", - "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.7.tgz", - "integrity": "sha512-Il80Qs2WjYlJIBNzNkK6KYqlVMTbZLXgHx2oT0pU/fjRHyEp+PEfEPY0R3WCwAGVOtauxh1hOxNgIf5bv7dQpA==", + "version": "1.3.8", + "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.8.tgz", + "integrity": "sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==", "dev": true, "requires": { - "mime-types": "~2.1.24", - "negotiator": "0.6.2" + "mime-types": "~2.1.34", + "negotiator": "0.6.3" } }, "acorn": { @@ -1576,7 +1582,7 @@ "dev": true }, "act-rules.github.io": { - "version": "github:act-rules/act-rules.github.io#80a5d89782b97f712dc864888b88776767f6d8c5", + "version": "github:act-rules/act-rules.github.io#a5d7336e020fd04fd429f94c651102f8ab255f01", "from": "github:act-rules/act-rules.github.io#master", "dev": true }, @@ -1724,19 +1730,6 @@ "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==", "dev": true }, - "array.prototype.map": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/array.prototype.map/-/array.prototype.map-1.0.4.tgz", - "integrity": "sha512-Qds9QnX7A0qISY7JT5WuJO0NJPE9CMlC6JzHQfhpqAAQQzufVRoeH7EzUY5GcPTx72voG8LV/5eo+b8Qi8hmhA==", - "dev": true, - "requires": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3", - "es-abstract": "^1.19.0", - "es-array-method-boxes-properly": "^1.0.0", - "is-string": "^1.0.7" - } - }, "arrify": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/arrify/-/arrify-1.0.1.tgz", @@ -1762,9 +1755,9 @@ "dev": true }, "async": { - "version": "3.2.3", - "resolved": "https://registry.npmjs.org/async/-/async-3.2.3.tgz", - "integrity": "sha512-spZRyzKL5l5BZQrr/6m/SqFdBN0q3OCI0f9rjfBzCMBIP4p75P620rR3gTmaksNOhmzgdxcaxdNfMy6anrbM0g==", + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/async/-/async-3.2.2.tgz", + "integrity": "sha512-H0E+qZaDEfx/FY4t7iLRv1W2fFI6+pyCeTw1uN20AQPiwqwM6ojPxHxdLv4z8hi2DtnW9BOckSspLucW7pIE5g==", "dev": true }, "asynckit": { @@ -1780,12 +1773,12 @@ "dev": true }, "axios": { - "version": "0.24.0", - "resolved": "https://registry.npmjs.org/axios/-/axios-0.24.0.tgz", - "integrity": "sha512-Q6cWsys88HoPgAaFAVUb0WpPk0O8iTeisR9IMqy9G8AbO4NlpVknrnQS03zzF9PGAWgO3cgletO3VjV/P7VztA==", + "version": "0.21.4", + "resolved": "https://registry.npmjs.org/axios/-/axios-0.21.4.tgz", + "integrity": "sha512-ut5vewkiu8jjGBdqpM44XxjuCjq9LAKeHVmoVfHVzy8eHgxxq8SbAVQNovDA8mVi05kP0Ea/n/UzcSHcTJQfNg==", "dev": true, "requires": { - "follow-redirects": "^1.14.4" + "follow-redirects": "^1.14.0" } }, "babel-plugin-dynamic-import-node": { @@ -1798,33 +1791,33 @@ } }, "babel-plugin-polyfill-corejs2": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.3.1.tgz", - "integrity": "sha512-v7/T6EQcNfVLfcN2X8Lulb7DjprieyLWJK/zOWH5DUYcAgex9sP3h25Q+DLsX9TloXe3y1O8l2q2Jv9q8UVB9w==", + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.3.0.tgz", + "integrity": "sha512-wMDoBJ6uG4u4PNFh72Ty6t3EgfA91puCuAwKIazbQlci+ENb/UU9A3xG5lutjUIiXCIn1CY5L15r9LimiJyrSA==", "dev": true, "requires": { "@babel/compat-data": "^7.13.11", - "@babel/helper-define-polyfill-provider": "^0.3.1", + "@babel/helper-define-polyfill-provider": "^0.3.0", "semver": "^6.1.1" } }, "babel-plugin-polyfill-corejs3": { - "version": "0.5.1", - "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.5.1.tgz", - "integrity": "sha512-TihqEe4sQcb/QcPJvxe94/9RZuLQuF1+To4WqQcRvc+3J3gLCPIPgDKzGLG6zmQLfH3nn25heRuDNkS2KR4I8A==", + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.4.0.tgz", + "integrity": "sha512-YxFreYwUfglYKdLUGvIF2nJEsGwj+RhWSX/ije3D2vQPOXuyMLMtg/cCGMDpOA7Nd+MwlNdnGODbd2EwUZPlsw==", "dev": true, "requires": { - "@babel/helper-define-polyfill-provider": "^0.3.1", - "core-js-compat": "^3.20.0" + "@babel/helper-define-polyfill-provider": "^0.3.0", + "core-js-compat": "^3.18.0" } }, "babel-plugin-polyfill-regenerator": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.3.1.tgz", - "integrity": "sha512-Y2B06tvgHYt1x0yz17jGkGeeMr5FeKUu+ASJ+N6nB5lQ8Dapfg42i0OVrf8PNGJ3zKL4A23snMi1IRwrqqND7A==", + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.3.0.tgz", + "integrity": "sha512-dhAPTDLGoMW5/84wkgwiLRwMnio2i1fUe53EuvtKMv0pn2p3S8OCoV1xAzfJPl0KOX7IB89s2ib85vbYiea3jg==", "dev": true, "requires": { - "@babel/helper-define-polyfill-provider": "^0.3.1" + "@babel/helper-define-polyfill-provider": "^0.3.0" } }, "balanced-match": { @@ -1840,10 +1833,13 @@ "dev": true }, "basic-auth": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/basic-auth/-/basic-auth-1.1.0.tgz", - "integrity": "sha1-RSIe5Cn37h5QNb4/UVM/HN/SmIQ=", - "dev": true + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/basic-auth/-/basic-auth-2.0.1.tgz", + "integrity": "sha512-NF+epuEdnUYVlGuhaxbbq+dvJttwLnGY+YixlXlME5KpQ5W3CnXA5cVTneY3SPbPDRkcjMbifrwmFYcClgOZeg==", + "dev": true, + "requires": { + "safe-buffer": "5.1.2" + } }, "before-after-hook": { "version": "2.2.2", @@ -2100,9 +2096,9 @@ } }, "caniuse-lite": { - "version": "1.0.30001303", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001303.tgz", - "integrity": "sha512-/Mqc1oESndUNszJP0kx0UaQU9kEv9nNtJ7Kn8AdA0mNnH8eR1cj0kG+NbNuC1Wq/b21eA8prhKRA3bbkjONegQ==", + "version": "1.0.30001296", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001296.tgz", + "integrity": "sha512-WfrtPEoNSoeATDlf4y3QvkwiELl9GyPLISV5GejTbbQRtQx4LhsXmc9IQ6XCL2d7UxCyEzToEZNMeqR79OUw8Q==", "dev": true }, "catharsis": { @@ -2208,9 +2204,9 @@ } }, "chromedriver": { - "version": "97.0.2", - "resolved": "https://registry.npmjs.org/chromedriver/-/chromedriver-97.0.2.tgz", - "integrity": "sha512-sOAfKCR3WsHvmKedZoWa+3tBVGdPtxq4zKxgKZCoJ2c924olBTW4Bnha6SHl93Yo7+QqsNn6ZpAC0ojhutacAg==", + "version": "98.0.0", + "resolved": "https://registry.npmjs.org/chromedriver/-/chromedriver-98.0.0.tgz", + "integrity": "sha512-Oi6Th5teK+VI4nti+423/dFkENYHEMOdUvqwJHzOaNwXqLwZ8FuSaKBybgALCctGapwJbd+tmPv3qSd6tUUIHQ==", "dev": true, "requires": { "@testim/chrome-version": "^1.1.2", @@ -2220,6 +2216,17 @@ "https-proxy-agent": "^5.0.0", "proxy-from-env": "^1.1.0", "tcp-port-used": "^1.0.1" + }, + "dependencies": { + "axios": { + "version": "0.24.0", + "resolved": "https://registry.npmjs.org/axios/-/axios-0.24.0.tgz", + "integrity": "sha512-Q6cWsys88HoPgAaFAVUb0WpPk0O8iTeisR9IMqy9G8AbO4NlpVknrnQS03zzF9PGAWgO3cgletO3VjV/P7VztA==", + "dev": true, + "requires": { + "follow-redirects": "^1.14.4" + } + } } }, "ci-info": { @@ -2736,9 +2743,9 @@ } }, "cookie": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.4.1.tgz", - "integrity": "sha512-ZwrFkGJxUR3EIoXtO+yVE69Eb7KlixbaeAWfBQB9vVsNn/o+Yw69gBWSSDK825hQNdN+wF8zELf3dFNl/kxkUA==", + "version": "0.4.2", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.4.2.tgz", + "integrity": "sha512-aSWTXFzaKWkvHO1Ny/s+ePFpvKsPnjc551iI41v3ny/ow6tBG5Vd+FuqGNhh1LxOmVzOlGUriIlOaokOvhaStA==", "dev": true }, "core-js": { @@ -2748,9 +2755,9 @@ "dev": true }, "core-js-compat": { - "version": "3.20.3", - "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.20.3.tgz", - "integrity": "sha512-c8M5h0IkNZ+I92QhIpuSijOxGAcj3lgpsWdkCqmUTZNwidujF4r3pi6x1DCN+Vcs5qTS2XWWMfWSuCqyupX8gw==", + "version": "3.20.2", + "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.20.2.tgz", + "integrity": "sha512-qZEzVQ+5Qh6cROaTPFLNS4lkvQ6mBzE3R6A6EEpssj7Zr2egMHgsy4XapdifqJDGC9CBiNv7s+ejI96rLNQFdg==", "dev": true, "requires": { "browserslist": "^4.19.1", @@ -3044,6 +3051,19 @@ "slash": "^3.0.0" }, "dependencies": { + "fast-glob": { + "version": "3.2.11", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.11.tgz", + "integrity": "sha512-xrO3+1bxSo3ZVHAnqzyuewYT6aMFHRAd4Kcs92MAonjwQZLsK9d0SF1IyQ3k5PoirxTW0Oe/RqFgMQ6TcNE5Ew==", + "dev": true, + "requires": { + "@nodelib/fs.stat": "^2.0.2", + "@nodelib/fs.walk": "^1.2.3", + "glob-parent": "^5.1.2", + "merge2": "^1.3.0", + "micromatch": "^4.0.4" + } + }, "globby": { "version": "11.1.0", "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz", @@ -3103,9 +3123,9 @@ "dev": true }, "diff": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/diff/-/diff-4.0.2.tgz", - "integrity": "sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==", + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/diff/-/diff-5.0.0.tgz", + "integrity": "sha512-/VTCrvm5Z0JGty/BWHljh+BAiw3IK+2j87NGMu8Nwc/f48WoDAC395uomO9ZD117ZOBaHmkX1oyLvkVM/aIT3w==", "dev": true }, "dir-glob": { @@ -3267,18 +3287,6 @@ "integrity": "sha512-jtD6YG370ZCIi/9GTaJKQxWTZD045+4R4hTk/x1UyoqadyJ9x9CgSi1RlVDQF8U2sxLLSnFkCaMihqljHIWgMg==", "dev": true }, - "ecstatic": { - "version": "3.3.2", - "resolved": "https://registry.npmjs.org/ecstatic/-/ecstatic-3.3.2.tgz", - "integrity": "sha512-fLf9l1hnwrHI2xn9mEDT7KIi22UDqA2jaCwyCbSUJh9a1V+LEUSL/JO/6TIz/QyuBURWUHrFL5Kg2TtO1bkkog==", - "dev": true, - "requires": { - "he": "^1.1.1", - "mime": "^1.6.0", - "minimist": "^1.1.0", - "url-join": "^2.0.5" - } - }, "ee-first": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", @@ -3286,9 +3294,9 @@ "dev": true }, "electron-to-chromium": { - "version": "1.4.56", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.56.tgz", - "integrity": "sha512-0k/S0FQqRRpJbX7YUjwCcLZ8D42RqGKtaiq90adXBOYgTIWwLA/g3toO8k9yEpqU8iC4QyaWYYWSTBIna8WV4g==", + "version": "1.4.37", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.37.tgz", + "integrity": "sha512-XIvFB1omSAxYgHYX48sC+HR8i/p7lx7R+0cX9faElg1g++h9IilCrJ12+bQuY+d96Wp7zkBiJwMOv+AhLtLrTg==", "dev": true }, "emoji-regex": { @@ -3414,28 +3422,6 @@ "unbox-primitive": "^1.0.1" } }, - "es-array-method-boxes-properly": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/es-array-method-boxes-properly/-/es-array-method-boxes-properly-1.0.0.tgz", - "integrity": "sha512-wd6JXUmyHmt8T5a2xreUwKcGPq6f1f+WwIJkijUqiGcJz1qqnZgP6XIK+QyIWU5lT7imeNxUll48bziG+TSYcA==", - "dev": true - }, - "es-get-iterator": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/es-get-iterator/-/es-get-iterator-1.1.2.tgz", - "integrity": "sha512-+DTO8GYwbMCwbywjimwZMHp8AuYXOS2JZFWoi2AlPOS3ebnII9w/NLpNZtA7A0YLaVDw+O7KFCeoIV7OPvM7hQ==", - "dev": true, - "requires": { - "call-bind": "^1.0.2", - "get-intrinsic": "^1.1.0", - "has-symbols": "^1.0.1", - "is-arguments": "^1.1.0", - "is-map": "^2.0.2", - "is-set": "^2.0.2", - "is-string": "^1.0.5", - "isarray": "^2.0.5" - } - }, "es-to-primitive": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz", @@ -3935,9 +3921,9 @@ "dev": true }, "fast-glob": { - "version": "3.2.11", - "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.11.tgz", - "integrity": "sha512-xrO3+1bxSo3ZVHAnqzyuewYT6aMFHRAd4Kcs92MAonjwQZLsK9d0SF1IyQ3k5PoirxTW0Oe/RqFgMQ6TcNE5Ew==", + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.7.tgz", + "integrity": "sha512-rYGMRwip6lUMvYD3BTScMwT1HtAs2d71SMv66Vrxs0IekGZEjhM0pcMfjQPnknBt2zeCwQMEupiN02ZP4DiT1Q==", "dev": true, "requires": { "@nodelib/fs.stat": "^2.0.2", @@ -4131,13 +4117,10 @@ "dev": true }, "flat": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/flat/-/flat-4.1.1.tgz", - "integrity": "sha512-FmTtBsHskrU6FJ2VxCnsDb84wu9zhmO3cUX2kGFb5tuwhfXxGciiT0oRY+cck35QmG+NmGh5eLz6lLCpWTqwpA==", - "dev": true, - "requires": { - "is-buffer": "~2.0.3" - } + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/flat/-/flat-5.0.2.tgz", + "integrity": "sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ==", + "dev": true }, "flat-cache": { "version": "3.0.4", @@ -4150,9 +4133,9 @@ } }, "flatted": { - "version": "3.2.5", - "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.2.5.tgz", - "integrity": "sha512-WIWGi2L3DyTUvUrwRKgGi9TwxQMUEqPOPQBVi71R96jZXJdFskXEmf54BoZaS1kknGODoIGASGEzBUYdyMCBJg==", + "version": "3.2.4", + "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.2.4.tgz", + "integrity": "sha512-8/sOawo8tJ4QOBX8YlQBMxL8+RLZfxMQOif9o0KUKTNTjMYElWPE0r/m5VNFxTRd0NSw8qSy8dajrwX4RYI1Hw==", "dev": true }, "follow-redirects": { @@ -4987,28 +4970,52 @@ } }, "http-server": { - "version": "0.12.3", - "resolved": "https://registry.npmjs.org/http-server/-/http-server-0.12.3.tgz", - "integrity": "sha512-be0dKG6pni92bRjq0kvExtj/NrrAd28/8fCXkaI/4piTwQMSDSLMhWyW0NI1V+DBI3aa1HMlQu46/HjVLfmugA==", + "version": "14.1.0", + "resolved": "https://registry.npmjs.org/http-server/-/http-server-14.1.0.tgz", + "integrity": "sha512-5lYsIcZtf6pdR8tCtzAHTWrAveo4liUlJdWc7YafwK/maPgYHs+VNP6KpCClmUnSorJrARVMXqtT055zBv11Yg==", "dev": true, "requires": { - "basic-auth": "^1.0.3", - "colors": "^1.4.0", + "basic-auth": "^2.0.1", + "chalk": "^4.1.2", "corser": "^2.0.1", - "ecstatic": "^3.3.2", - "http-proxy": "^1.18.0", + "he": "^1.2.0", + "html-encoding-sniffer": "^3.0.0", + "http-proxy": "^1.18.1", + "mime": "^1.6.0", "minimist": "^1.2.5", "opener": "^1.5.1", - "portfinder": "^1.0.25", + "portfinder": "^1.0.28", "secure-compare": "3.0.1", - "union": "~0.5.0" + "union": "~0.5.0", + "url-join": "^4.0.1" }, "dependencies": { - "colors": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/colors/-/colors-1.4.0.tgz", - "integrity": "sha512-a+UqTh4kgZg/SlGvfbzDHpgRu7AAQOmmqRHJnxhRZICKFUT91brVhNNt58CMWU9PsBbv3PDCZUHbVxuDiH2mtA==", - "dev": true + "html-encoding-sniffer": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/html-encoding-sniffer/-/html-encoding-sniffer-3.0.0.tgz", + "integrity": "sha512-oWv4T4yJ52iKrufjnyZPkrN0CH3QnrUqdB6In1g5Fe1mia8GmF36gnfNySxoZtxD5+NmYw1EElVXiBk93UeskA==", + "dev": true, + "requires": { + "whatwg-encoding": "^2.0.0" + } + }, + "iconv-lite": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", + "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==", + "dev": true, + "requires": { + "safer-buffer": ">= 2.1.2 < 3.0.0" + } + }, + "whatwg-encoding": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/whatwg-encoding/-/whatwg-encoding-2.0.0.tgz", + "integrity": "sha512-p41ogyeMUrw3jWclHWTQg1k05DSVXPLcVxRTYsXUk+ZooOCZLcoYgPZ/HL/D/N+uQPOtcp1me1WhBEaX02mhWg==", + "dev": true, + "requires": { + "iconv-lite": "0.6.3" + } } } }, @@ -5264,16 +5271,6 @@ "is-windows": "^1.0.1" } }, - "is-arguments": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/is-arguments/-/is-arguments-1.1.1.tgz", - "integrity": "sha512-8Q7EARjzEnKpt/PCD7e1cgUS0a6X8u5tdSiMqXhojOdoV9TsMsiO+9VLC5vAmO8N7/GmXn7yjR8qnA6bVAEzfA==", - "dev": true, - "requires": { - "call-bind": "^1.0.2", - "has-tostringtag": "^1.0.0" - } - }, "is-arrayish": { "version": "0.2.1", "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", @@ -5308,12 +5305,6 @@ "has-tostringtag": "^1.0.0" } }, - "is-buffer": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-2.0.5.tgz", - "integrity": "sha512-i2R6zNFDwgEHJyQUtJEk0XFi1i0dPFn/oqjK3/vPCcDeJvW5NQ83V8QbicfF1SupOaB0h8ntgBC2YiE7dfyctQ==", - "dev": true - }, "is-callable": { "version": "1.2.4", "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.4.tgz", @@ -5371,12 +5362,6 @@ "is-extglob": "^2.1.1" } }, - "is-map": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/is-map/-/is-map-2.0.2.tgz", - "integrity": "sha512-cOZFQQozTha1f4MxLFzlgKYPTyj26picdZTx82hbc/Xf4K/tZOOXSCkMvU4pKioRXGDLJRn0GM7Upe7kR721yg==", - "dev": true - }, "is-negative-zero": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.2.tgz", @@ -5471,12 +5456,6 @@ "is-unc-path": "^1.0.0" } }, - "is-set": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/is-set/-/is-set-2.0.2.tgz", - "integrity": "sha512-+2cnTEZeY5z/iXGbLhPrOAaK/Mau5k5eXq9j14CpRTftq0pAJu2MwVRSZhyZWBzx3o6X795Lz6Bpb6R0GKf37g==", - "dev": true - }, "is-shared-array-buffer": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.1.tgz", @@ -5525,6 +5504,12 @@ "unc-path-regex": "^0.1.2" } }, + "is-unicode-supported": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz", + "integrity": "sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==", + "dev": true + }, "is-url": { "version": "1.2.4", "resolved": "https://registry.npmjs.org/is-url/-/is-url-1.2.4.tgz", @@ -5566,12 +5551,6 @@ "is-url": "^1.2.4" } }, - "isarray": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz", - "integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==", - "dev": true - }, "isbinaryfile": { "version": "4.0.8", "resolved": "https://registry.npmjs.org/isbinaryfile/-/isbinaryfile-4.0.8.tgz", @@ -5590,26 +5569,10 @@ "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", "dev": true }, - "iterate-iterator": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/iterate-iterator/-/iterate-iterator-1.0.2.tgz", - "integrity": "sha512-t91HubM4ZDQ70M9wqp+pcNpu8OyJ9UAtXntT/Bcsvp5tZMnz9vRa+IunKXeI8AnfZMTv0jNuVEmGeLSMjVvfPw==", - "dev": true - }, - "iterate-value": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/iterate-value/-/iterate-value-1.0.2.tgz", - "integrity": "sha512-A6fMAio4D2ot2r/TYzr4yUWrmwNdsN5xL7+HUiyACE4DXm+q8HtPcnFTp+NnW3k4N05tZ7FVYFFb2CR13NxyHQ==", - "dev": true, - "requires": { - "es-get-iterator": "^1.0.2", - "iterate-iterator": "^1.0.1" - } - }, "joi": { - "version": "17.6.0", - "resolved": "https://registry.npmjs.org/joi/-/joi-17.6.0.tgz", - "integrity": "sha512-OX5dG6DTbcr/kbMFj0KGYxuew69HPcAE3K/sZpEV2nP6e/j/C0HV+HNiBPCASxdx5T7DMoa0s8UeHWMnb6n2zw==", + "version": "17.5.0", + "resolved": "https://registry.npmjs.org/joi/-/joi-17.5.0.tgz", + "integrity": "sha512-R7hR50COp7StzLnDi4ywOXHrBrgNXuUUfJWIR5lPY5Bm/pOD3jZaTwpluUXVLRWcoWZxkrHBBJ5hLxgnlehbdw==", "dev": true, "requires": { "@hapi/hoek": "^9.0.0", @@ -5870,9 +5833,9 @@ "dev": true }, "karma": { - "version": "6.3.12", - "resolved": "https://registry.npmjs.org/karma/-/karma-6.3.12.tgz", - "integrity": "sha512-qwIG+oB2YmHx4hjvYSRMNzL3YWAJ9baHaLAxiP7biFNkfpwYTUTtPck0joFpucalNLzMr+7z/FX1uY/kl8DV9A==", + "version": "6.3.16", + "resolved": "https://registry.npmjs.org/karma/-/karma-6.3.16.tgz", + "integrity": "sha512-nEU50jLvDe5yvXqkEJRf8IuvddUkOY2x5Xc4WXHz6dxINgGDrgD2uqQWeVrJs4hbfNaotn+HQ1LZJ4yOXrL7xQ==", "dev": true, "requires": { "body-parser": "^1.19.0", @@ -5887,9 +5850,10 @@ "http-proxy": "^1.18.1", "isbinaryfile": "^4.0.8", "lodash": "^4.17.21", - "log4js": "^6.3.0", + "log4js": "^6.4.1", "mime": "^2.5.2", "minimatch": "^3.0.4", + "mkdirp": "^0.5.5", "qjobs": "^1.2.0", "range-parser": "^1.2.1", "rimraf": "^3.0.2", @@ -5912,6 +5876,15 @@ "integrity": "sha512-USPkMeET31rOMiarsBNIHZKLGgvKc/LrjofAnBlOttf5ajRvqiRA8QsenbcooctK6d6Ts6aqZXBA+XbkKthiQg==", "dev": true }, + "mkdirp": { + "version": "0.5.5", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.5.tgz", + "integrity": "sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ==", + "dev": true, + "requires": { + "minimist": "^1.2.5" + } + }, "source-map": { "version": "0.6.1", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", @@ -5974,51 +5947,29 @@ "minimist": "^1.2.3" } }, - "karma-mocha-reporter": { - "version": "2.2.5", - "resolved": "https://registry.npmjs.org/karma-mocha-reporter/-/karma-mocha-reporter-2.2.5.tgz", - "integrity": "sha1-FRIAlejtgZGG5HoLAS8810GJVWA=", + "karma-sinon": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/karma-sinon/-/karma-sinon-1.0.5.tgz", + "integrity": "sha1-TjRD8oMP3s/2JNN0cWPxIX2qKpo=", + "dev": true + }, + "karma-spec-reporter": { + "version": "0.0.33", + "resolved": "https://registry.npmjs.org/karma-spec-reporter/-/karma-spec-reporter-0.0.33.tgz", + "integrity": "sha512-xRVevDUkiIVhKbDQ3CmeGEpyzA4b3HeVl95Sx5yJAvurpdKUSYF6ZEbQOqKJ7vrtDniABV1hyFez9KX9+7ruBA==", "dev": true, "requires": { - "chalk": "^2.1.0", - "log-symbols": "^2.1.0", - "strip-ansi": "^4.0.0" + "colors": "1.4.0" }, "dependencies": { - "ansi-regex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", - "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", + "colors": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/colors/-/colors-1.4.0.tgz", + "integrity": "sha512-a+UqTh4kgZg/SlGvfbzDHpgRu7AAQOmmqRHJnxhRZICKFUT91brVhNNt58CMWU9PsBbv3PDCZUHbVxuDiH2mtA==", "dev": true - }, - "chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "dev": true, - "requires": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - } - }, - "strip-ansi": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", - "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", - "dev": true, - "requires": { - "ansi-regex": "^3.0.0" - } } } }, - "karma-sinon": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/karma-sinon/-/karma-sinon-1.0.5.tgz", - "integrity": "sha1-TjRD8oMP3s/2JNN0cWPxIX2qKpo=", - "dev": true - }, "kind-of": { "version": "6.0.3", "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", @@ -6293,28 +6244,6 @@ "integrity": "sha1-WjUNoLERO4N+z//VgSy+WNbq4ZM=", "dev": true }, - "log-symbols": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-2.2.0.tgz", - "integrity": "sha512-VeIAFslyIerEJLXHziedo2basKbMKtTw3vfn5IzG0XTjhAVEJyNHnL2p7vc+wBDSdQuUpNw3M2u6xb9QsAY5Eg==", - "dev": true, - "requires": { - "chalk": "^2.0.1" - }, - "dependencies": { - "chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "dev": true, - "requires": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - } - } - } - }, "log-update": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/log-update/-/log-update-4.0.0.tgz", @@ -6689,298 +6618,147 @@ "dev": true }, "mocha": { - "version": "8.0.1", - "resolved": "https://registry.npmjs.org/mocha/-/mocha-8.0.1.tgz", - "integrity": "sha512-vefaXfdYI8+Yo8nPZQQi0QO2o+5q9UIMX1jZ1XMmK3+4+CQjc7+B0hPdUeglXiTlr8IHMVRo63IhO9Mzt6fxOg==", + "version": "9.2.0", + "resolved": "https://registry.npmjs.org/mocha/-/mocha-9.2.0.tgz", + "integrity": "sha512-kNn7E8g2SzVcq0a77dkphPsDSN7P+iYkqE0ZsGCYWRsoiKjOt+NvXfaagik8vuDa6W5Zw3qxe8Jfpt5qKf+6/Q==", "dev": true, "requires": { + "@ungap/promise-all-settled": "1.1.2", "ansi-colors": "4.1.1", "browser-stdout": "1.3.1", - "chokidar": "3.3.1", - "debug": "3.2.6", - "diff": "4.0.2", - "escape-string-regexp": "1.0.5", - "find-up": "4.1.0", - "glob": "7.1.6", + "chokidar": "3.5.3", + "debug": "4.3.3", + "diff": "5.0.0", + "escape-string-regexp": "4.0.0", + "find-up": "5.0.0", + "glob": "7.2.0", "growl": "1.10.5", "he": "1.2.0", - "js-yaml": "3.13.1", - "log-symbols": "3.0.0", + "js-yaml": "4.1.0", + "log-symbols": "4.1.0", "minimatch": "3.0.4", - "ms": "2.1.2", - "object.assign": "4.1.0", - "promise.allsettled": "1.0.2", - "serialize-javascript": "3.0.0", - "strip-json-comments": "3.0.1", - "supports-color": "7.1.0", + "ms": "2.1.3", + "nanoid": "3.2.0", + "serialize-javascript": "6.0.0", + "strip-json-comments": "3.1.1", + "supports-color": "8.1.1", "which": "2.0.2", - "wide-align": "1.1.3", - "workerpool": "6.0.0", - "yargs": "13.3.2", - "yargs-parser": "13.1.2", - "yargs-unparser": "1.6.0" + "workerpool": "6.2.0", + "yargs": "16.2.0", + "yargs-parser": "20.2.4", + "yargs-unparser": "2.0.0" }, "dependencies": { - "ansi-regex": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", - "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==", + "argparse": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", "dev": true }, - "chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "dev": true, - "requires": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - }, - "dependencies": { - "supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "dev": true, - "requires": { - "has-flag": "^3.0.0" - } - } - } - }, "chokidar": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.3.1.tgz", - "integrity": "sha512-4QYCEWOcK3OJrxwvyyAOxFuhpvOVCYkr33LPfFNBjAD/w3sEzWsp2BUOkI4l9bHvWioAd0rc6NlHUOEaWkTeqg==", + "version": "3.5.3", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz", + "integrity": "sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==", "dev": true, "requires": { - "anymatch": "~3.1.1", + "anymatch": "~3.1.2", "braces": "~3.0.2", - "fsevents": "~2.1.2", - "glob-parent": "~5.1.0", + "fsevents": "~2.3.2", + "glob-parent": "~5.1.2", "is-binary-path": "~2.1.0", "is-glob": "~4.0.1", "normalize-path": "~3.0.0", - "readdirp": "~3.3.0" + "readdirp": "~3.6.0" } }, - "cliui": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-5.0.0.tgz", - "integrity": "sha512-PYeGSEmmHM6zvoef2w8TPzlrnNpXIjTipYK780YswmIP9vjxmd6Y2a3CB2Ks6/AU8NHjZugXvo8w3oWM2qnwXA==", - "dev": true, - "requires": { - "string-width": "^3.1.0", - "strip-ansi": "^5.2.0", - "wrap-ansi": "^5.1.0" - } - }, - "debug": { - "version": "3.2.6", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.6.tgz", - "integrity": "sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==", - "dev": true, - "requires": { - "ms": "^2.1.1" - } - }, - "emoji-regex": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-7.0.3.tgz", - "integrity": "sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==", + "escape-string-regexp": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", + "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", "dev": true }, - "fsevents": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.1.3.tgz", - "integrity": "sha512-Auw9a4AxqWpa9GUfj370BMPzzyncfBABW8Mab7BGWBYDj4Isgq+cDKtx0i6u9jcX9pQDnswsaaOTgTmA5pEjuQ==", - "dev": true, - "optional": true - }, - "glob": { - "version": "7.1.6", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz", - "integrity": "sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==", + "find-up": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", + "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", "dev": true, "requires": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.0.4", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" + "locate-path": "^6.0.0", + "path-exists": "^4.0.0" } }, - "is-fullwidth-code-point": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", - "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", "dev": true }, "js-yaml": { - "version": "3.13.1", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.13.1.tgz", - "integrity": "sha512-YfbcO7jXDdyj0DGxYVSlSeQNHbD7XPWvrVWeVUujrQEoZzWJIRrCPoyk6kL6IAjAG2IolMK4T0hNUe0HOUs5Jw==", + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", + "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", "dev": true, "requires": { - "argparse": "^1.0.7", - "esprima": "^4.0.0" + "argparse": "^2.0.1" } }, "locate-path": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", - "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", + "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", "dev": true, "requires": { - "p-locate": "^3.0.0", - "path-exists": "^3.0.0" + "p-locate": "^5.0.0" } }, "log-symbols": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-3.0.0.tgz", - "integrity": "sha512-dSkNGuI7iG3mfvDzUuYZyvk5dD9ocYCYzNU6CYDE6+Xqd+gwme6Z00NS3dUh8mq/73HaEtT7m6W+yUPtU6BZnQ==", - "dev": true, - "requires": { - "chalk": "^2.4.2" - } - }, - "object.assign": { "version": "4.1.0", - "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.0.tgz", - "integrity": "sha512-exHJeq6kBKj58mqGyTQ9DFvrZC/eR6OwxzoM9YRoGBqrXYonaFyGiFMuc9VZrXf7DarreEwMpurG3dd+CNyW5w==", + "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-4.1.0.tgz", + "integrity": "sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==", "dev": true, "requires": { - "define-properties": "^1.1.2", - "function-bind": "^1.1.1", - "has-symbols": "^1.0.0", - "object-keys": "^1.0.11" + "chalk": "^4.1.0", + "is-unicode-supported": "^0.1.0" } }, - "p-locate": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz", - "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", - "dev": true, - "requires": { - "p-limit": "^2.0.0" - } - }, - "path-exists": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", - "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=", + "ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", "dev": true }, - "readdirp": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.3.0.tgz", - "integrity": "sha512-zz0pAkSPOXXm1viEwygWIPSPkcBYjW1xU5j/JBh5t9bGCJwa6f9+BJa6VaB2g+b55yVrmXzqkyLf4xaWYM0IkQ==", - "dev": true, - "requires": { - "picomatch": "^2.0.7" - } - }, - "string-width": { + "p-limit": { "version": "3.1.0", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz", - "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", + "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", "dev": true, "requires": { - "emoji-regex": "^7.0.1", - "is-fullwidth-code-point": "^2.0.0", - "strip-ansi": "^5.1.0" + "yocto-queue": "^0.1.0" } }, - "strip-ansi": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", - "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", + "p-locate": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", + "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", "dev": true, "requires": { - "ansi-regex": "^4.1.0" + "p-limit": "^3.0.2" } }, - "strip-json-comments": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.0.1.tgz", - "integrity": "sha512-VTyMAUfdm047mwKl+u79WIdrZxtFtn+nBxHeb844XBQ9uMNTuTHdx2hc5RiAJYqwTj3wc/xe5HLSdJSkJ+WfZw==", - "dev": true - }, "supports-color": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.1.0.tgz", - "integrity": "sha512-oRSIpR8pxT1Wr2FquTNnGet79b3BWljqOuoW/h4oBhxJ/HUbX5nX6JSruTkvXDCFMwDPvsaTTbvMLKZWSy0R5g==", + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", + "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", "dev": true, "requires": { "has-flag": "^4.0.0" - }, - "dependencies": { - "has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true - } - } - }, - "wrap-ansi": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-5.1.0.tgz", - "integrity": "sha512-QC1/iN/2/RPVJ5jYK8BGttj5z83LmSKmvbvrXPNCLZSEb32KKVDJDl/MOt2N01qU2H/FkzEa9PKto1BqDjtd7Q==", - "dev": true, - "requires": { - "ansi-styles": "^3.2.0", - "string-width": "^3.0.0", - "strip-ansi": "^5.0.0" - } - }, - "y18n": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.3.tgz", - "integrity": "sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ==", - "dev": true - }, - "yargs": { - "version": "13.3.2", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-13.3.2.tgz", - "integrity": "sha512-AX3Zw5iPruN5ie6xGRIDgqkT+ZhnRlZMLMHAs8tg7nRruy2Nb+i5o9bwghAogtM08q1dpr2LVoS8KSTMYpWXUw==", - "dev": true, - "requires": { - "cliui": "^5.0.0", - "find-up": "^3.0.0", - "get-caller-file": "^2.0.1", - "require-directory": "^2.1.1", - "require-main-filename": "^2.0.0", - "set-blocking": "^2.0.0", - "string-width": "^3.0.0", - "which-module": "^2.0.0", - "y18n": "^4.0.0", - "yargs-parser": "^13.1.2" - }, - "dependencies": { - "find-up": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", - "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", - "dev": true, - "requires": { - "locate-path": "^3.0.0" - } - } } }, "yargs-parser": { - "version": "13.1.2", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-13.1.2.tgz", - "integrity": "sha512-3lbsNRf/j+A4QuSZfDRA7HRSfWrzO0YjqTJd5kjAq37Zep1CEgaYmrH9Q3GwPiB9cHyd1Y1UwggGhJGoxipbzg==", - "dev": true, - "requires": { - "camelcase": "^5.0.0", - "decamelize": "^1.2.0" - } + "version": "20.2.4", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.4.tgz", + "integrity": "sha512-WOkpgNhPTlE73h4VFAFsOnomJVaovO8VqLDzy5saChRBFQFBoMYirowyW+Q9HB4HFF4Z7VZTiG3iSzJJA29yRA==", + "dev": true } } }, @@ -7002,6 +6780,12 @@ "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", "dev": true }, + "nanoid": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.2.0.tgz", + "integrity": "sha512-fmsZYa9lpn69Ad5eDn7FMcnnSR+8R34W9qJEijxYhTbfOWzr22n1QxCMzXLK+ODyW2973V3Fux959iQoUxzUIA==", + "dev": true + }, "natural-compare": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", @@ -7009,9 +6793,9 @@ "dev": true }, "negotiator": { - "version": "0.6.2", - "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.2.tgz", - "integrity": "sha512-hZXc7K2e+PgeI1eDBe/10Ard4ekbfrrqG8Ep+8Jmf4JID2bNg7NvCPOZN+kfF574pFQI7mum2AUqDidoKqcTOw==", + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz", + "integrity": "sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==", "dev": true }, "neo-async": { @@ -7732,19 +7516,6 @@ "integrity": "sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==", "dev": true }, - "promise.allsettled": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/promise.allsettled/-/promise.allsettled-1.0.2.tgz", - "integrity": "sha512-UpcYW5S1RaNKT6pd+s9jp9K9rlQge1UXKskec0j6Mmuq7UJCvlS2J2/s/yuPN8ehftf9HXMxWlKiPbGGUzpoRg==", - "dev": true, - "requires": { - "array.prototype.map": "^1.0.1", - "define-properties": "^1.1.3", - "es-abstract": "^1.17.0-next.1", - "function-bind": "^1.1.1", - "iterate-value": "^1.0.0" - } - }, "proxy-from-env": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz", @@ -7806,9 +7577,9 @@ "dev": true }, "qs": { - "version": "6.10.3", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.10.3.tgz", - "integrity": "sha512-wr7M2E0OFRfIfJZjKGieI8lBKb7fRCH4Fv5KNPEs7gJ8jadvotdsS08PzOKR7opXhZ/Xkjtt3WF9g38drmyRqQ==", + "version": "6.10.2", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.10.2.tgz", + "integrity": "sha512-mSIdjzqznWgfd4pMii7sHtaYF8rx8861hBO80SraY5GT0XQibWZWJSid0avzHGkDIZLImux2S5mXO0Hfct2QCw==", "dev": true, "requires": { "side-channel": "^1.0.4" @@ -7826,6 +7597,15 @@ "integrity": "sha512-ARhCpm70fzdcvNQfPoy49IaanKkTlRWF2JMzqhcJbhSFRZv7nPTvZJdcY7301IPmvW+/p0RgIWnQDLJxifsQ7g==", "dev": true }, + "randombytes": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", + "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", + "dev": true, + "requires": { + "safe-buffer": "^5.1.0" + } + }, "range-parser": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", @@ -8037,12 +7817,6 @@ "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==", "dev": true }, - "require-main-filename": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-2.0.0.tgz", - "integrity": "sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==", - "dev": true - }, "requireindex": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/requireindex/-/requireindex-1.1.0.tgz", @@ -8065,12 +7839,12 @@ } }, "resolve": { - "version": "1.22.0", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.0.tgz", - "integrity": "sha512-Hhtrw0nLeSrFQ7phPp4OOcVjLPIeMnRlr5mcnVuMe7M/7eBn98A3hmFRLoFo3DLZkivSYwhRUJTyPyWAk56WLw==", + "version": "1.21.0", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.21.0.tgz", + "integrity": "sha512-3wCbTpk5WJlyE4mSOtDLhqQmGFi0/TD9VPwmiolnk8U0wRgMEktqCXd3vy5buTO3tljvalNvKrjHEfrd2WpEKA==", "dev": true, "requires": { - "is-core-module": "^2.8.1", + "is-core-module": "^2.8.0", "path-parse": "^1.0.7", "supports-preserve-symlinks-flag": "^1.0.0" } @@ -8144,9 +7918,9 @@ } }, "rxjs": { - "version": "7.5.2", - "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-7.5.2.tgz", - "integrity": "sha512-PwDt186XaL3QN5qXj/H9DGyHhP3/RYYgZZwqBv9Tv8rsAaiwFH1IsJJlcgD37J7UW5a6O67qX0KWKS3/pu0m4w==", + "version": "7.5.1", + "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-7.5.1.tgz", + "integrity": "sha512-KExVEeZWxMZnZhUZtsJcFwz8IvPvgu4G2Z2QyqjZQzUGr32KDYuSxrEYO4w3tFFNbfLozcrKUTvTPi+E9ywJkQ==", "dev": true, "requires": { "tslib": "^2.1.0" @@ -8236,16 +8010,13 @@ "dev": true }, "serialize-javascript": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-3.0.0.tgz", - "integrity": "sha512-skZcHYw2vEX4bw90nAr2iTTsz6x2SrHEnfxgKYmZlvJYBEZrvbKtobJWlQ20zczKb3bsHHXXTYt48zBA7ni9cw==", - "dev": true - }, - "set-blocking": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", - "integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc=", - "dev": true + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.0.tgz", + "integrity": "sha512-Qr3TosvguFt8ePWqsvRfrKyQXIiW+nGbYpy8XK24NQHE83caxWt+mIymTT19DGFbNWNLfEwsrkSmN64lVWB9ag==", + "dev": true, + "requires": { + "randombytes": "^2.1.0" + } }, "set-immediate-shim": { "version": "1.0.1", @@ -8808,9 +8579,9 @@ }, "dependencies": { "ajv": { - "version": "8.9.0", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.9.0.tgz", - "integrity": "sha512-qOKJyNj/h+OWx7s5DePL6Zu1KeM9jPZhwBqs+7DzP6bGOvqzVCSf0xueYmVuaC/oQ/VtS2zLMLHdQFbkka+XDQ==", + "version": "8.8.2", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.8.2.tgz", + "integrity": "sha512-x9VuX+R/jcFj1DHo/fCp99esgGDWiHENrKxaCENuCxpoMCmAt/COCGVDwA7kleEpEzJjDnvh3yGoOuLu0Dtllw==", "dev": true, "requires": { "fast-deep-equal": "^3.1.1", @@ -9037,9 +8808,9 @@ "dev": true }, "uglify-js": { - "version": "3.15.0", - "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.15.0.tgz", - "integrity": "sha512-x+xdeDWq7FiORDvyIJ0q/waWd4PhjBNOm5dQUOq2AKC0IEjxOS66Ha9tctiVDGcRQuh69K7fgU5oRuTK4cysSg==", + "version": "3.14.5", + "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.14.5.tgz", + "integrity": "sha512-qZukoSxOG0urUTvjc2ERMTcAy+BiFh3weWAkeurLwjrCba73poHmG3E36XEjd/JGukMzwTL7uCxZiAexj8ppvQ==", "dev": true }, "unbox-primitive": { @@ -9067,21 +8838,13 @@ "dev": true }, "underscore.string": { - "version": "3.3.6", - "resolved": "https://registry.npmjs.org/underscore.string/-/underscore.string-3.3.6.tgz", - "integrity": "sha512-VoC83HWXmCrF6rgkyxS9GHv8W9Q5nhMKho+OadDJGzL2oDYbYEppBaCMH6pFlwLeqj2QS+hhkw2kpXkSdD1JxQ==", + "version": "3.3.5", + "resolved": "https://registry.npmjs.org/underscore.string/-/underscore.string-3.3.5.tgz", + "integrity": "sha512-g+dpmgn+XBneLmXXo+sGlW5xQEt4ErkS3mgeN2GFbremYeMBSJKr9Wf2KJplQVaiPY/f7FN6atosWYNm9ovrYg==", "dev": true, "requires": { - "sprintf-js": "^1.1.1", + "sprintf-js": "^1.0.3", "util-deprecate": "^1.0.2" - }, - "dependencies": { - "sprintf-js": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.1.2.tgz", - "integrity": "sha512-VE0SOVEHCk7Qc8ulkWw3ntAzXuqf7S2lvwQaDLRnUeIEaKNQJzV6BwmLKhOqT61aGhfUMrXeaBk+oDGCzvhcug==", - "dev": true - } } }, "unicode-canonical-property-names-ecmascript": { @@ -9155,9 +8918,9 @@ "dev": true }, "url-join": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/url-join/-/url-join-2.0.5.tgz", - "integrity": "sha1-WvIvGMBSoACkjXuCxenC4v7tpyg=", + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/url-join/-/url-join-4.0.1.tgz", + "integrity": "sha512-jk1+QP6ZJqyOiuEI9AEWQfju/nB2Pw466kbA0LEZljHwKeMgd9WrAEgEGxjPDD2+TNbbb37rTyhEfrCXfuKXnA==", "dev": true }, "util-deprecate": { @@ -9244,17 +9007,6 @@ "lodash": "^4.17.21", "minimist": "^1.2.5", "rxjs": "^7.1.0" - }, - "dependencies": { - "axios": { - "version": "0.21.4", - "resolved": "https://registry.npmjs.org/axios/-/axios-0.21.4.tgz", - "integrity": "sha512-ut5vewkiu8jjGBdqpM44XxjuCjq9LAKeHVmoVfHVzy8eHgxxq8SbAVQNovDA8mVi05kP0Ea/n/UzcSHcTJQfNg==", - "dev": true, - "requires": { - "follow-redirects": "^1.14.0" - } - } } }, "weakmap-polyfill": { @@ -9339,54 +9091,6 @@ "is-symbol": "^1.0.3" } }, - "which-module": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/which-module/-/which-module-2.0.0.tgz", - "integrity": "sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho=", - "dev": true - }, - "wide-align": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/wide-align/-/wide-align-1.1.3.tgz", - "integrity": "sha512-QGkOQc8XL6Bt5PwnsExKBPuMKBxnGxWWW3fU55Xt4feHozMUhdUMaBCk290qpm/wG5u/RSKzwdAC4i51YigihA==", - "dev": true, - "requires": { - "string-width": "^1.0.2 || 2" - }, - "dependencies": { - "ansi-regex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", - "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", - "dev": true - }, - "is-fullwidth-code-point": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", - "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", - "dev": true - }, - "string-width": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz", - "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==", - "dev": true, - "requires": { - "is-fullwidth-code-point": "^2.0.0", - "strip-ansi": "^4.0.0" - } - }, - "strip-ansi": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", - "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", - "dev": true, - "requires": { - "ansi-regex": "^3.0.0" - } - } - } - }, "word-wrap": { "version": "1.2.3", "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz", @@ -9400,9 +9104,9 @@ "dev": true }, "workerpool": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/workerpool/-/workerpool-6.0.0.tgz", - "integrity": "sha512-fU2OcNA/GVAJLLyKUoHkAgIhKb0JoCpSjLC/G2vYKxUjVmQwGbRVeoPJ1a8U4pnVofz4AQV5Y/NEw8oKqxEBtA==", + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/workerpool/-/workerpool-6.2.0.tgz", + "integrity": "sha512-Rsk5qQHJ9eowMH28Jwhe8HEbmdYDX4lwoMWshiCXugjtHqMD9ZbiqSDLxcsfdqsETPzVUtX5s1Z5kStiIM6l4A==", "dev": true }, "wrap-ansi": { @@ -9534,143 +9238,34 @@ "dev": true }, "yargs-unparser": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/yargs-unparser/-/yargs-unparser-1.6.0.tgz", - "integrity": "sha512-W9tKgmSn0DpSatfri0nx52Joq5hVXgeLiqR/5G0sZNDoLZFOr/xjBUDcShCOGNsBnEMNo1KAMBkTej1Hm62HTw==", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/yargs-unparser/-/yargs-unparser-2.0.0.tgz", + "integrity": "sha512-7pRTIA9Qc1caZ0bZ6RYRGbHJthJWuakf+WmHK0rVeLkNrrGhfoabBNdue6kdINI6r4if7ocq9aD/n7xwKOdzOA==", "dev": true, "requires": { - "flat": "^4.1.0", - "lodash": "^4.17.15", - "yargs": "^13.3.0" + "camelcase": "^6.0.0", + "decamelize": "^4.0.0", + "flat": "^5.0.2", + "is-plain-obj": "^2.1.0" }, "dependencies": { - "ansi-regex": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", - "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==", - "dev": true - }, - "cliui": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-5.0.0.tgz", - "integrity": "sha512-PYeGSEmmHM6zvoef2w8TPzlrnNpXIjTipYK780YswmIP9vjxmd6Y2a3CB2Ks6/AU8NHjZugXvo8w3oWM2qnwXA==", - "dev": true, - "requires": { - "string-width": "^3.1.0", - "strip-ansi": "^5.2.0", - "wrap-ansi": "^5.1.0" - } - }, - "emoji-regex": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-7.0.3.tgz", - "integrity": "sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==", - "dev": true - }, - "find-up": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", - "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", - "dev": true, - "requires": { - "locate-path": "^3.0.0" - } - }, - "is-fullwidth-code-point": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", - "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", + "camelcase": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz", + "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==", "dev": true }, - "locate-path": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", - "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", - "dev": true, - "requires": { - "p-locate": "^3.0.0", - "path-exists": "^3.0.0" - } - }, - "p-locate": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz", - "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", - "dev": true, - "requires": { - "p-limit": "^2.0.0" - } - }, - "path-exists": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", - "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=", + "decamelize": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-4.0.0.tgz", + "integrity": "sha512-9iE1PgSik9HeIIw2JO94IidnE3eBoQrFJ3w7sFuzSX4DpmZ3v5sZpUiV5Swcf6mQEF+Y0ru8Neo+p+nyh2J+hQ==", "dev": true }, - "string-width": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz", - "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==", - "dev": true, - "requires": { - "emoji-regex": "^7.0.1", - "is-fullwidth-code-point": "^2.0.0", - "strip-ansi": "^5.1.0" - } - }, - "strip-ansi": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", - "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", - "dev": true, - "requires": { - "ansi-regex": "^4.1.0" - } - }, - "wrap-ansi": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-5.1.0.tgz", - "integrity": "sha512-QC1/iN/2/RPVJ5jYK8BGttj5z83LmSKmvbvrXPNCLZSEb32KKVDJDl/MOt2N01qU2H/FkzEa9PKto1BqDjtd7Q==", - "dev": true, - "requires": { - "ansi-styles": "^3.2.0", - "string-width": "^3.0.0", - "strip-ansi": "^5.0.0" - } - }, - "y18n": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.3.tgz", - "integrity": "sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ==", + "is-plain-obj": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-2.1.0.tgz", + "integrity": "sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA==", "dev": true - }, - "yargs": { - "version": "13.3.2", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-13.3.2.tgz", - "integrity": "sha512-AX3Zw5iPruN5ie6xGRIDgqkT+ZhnRlZMLMHAs8tg7nRruy2Nb+i5o9bwghAogtM08q1dpr2LVoS8KSTMYpWXUw==", - "dev": true, - "requires": { - "cliui": "^5.0.0", - "find-up": "^3.0.0", - "get-caller-file": "^2.0.1", - "require-directory": "^2.1.1", - "require-main-filename": "^2.0.0", - "set-blocking": "^2.0.0", - "string-width": "^3.0.0", - "which-module": "^2.0.0", - "y18n": "^4.0.0", - "yargs-parser": "^13.1.2" - } - }, - "yargs-parser": { - "version": "13.1.2", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-13.1.2.tgz", - "integrity": "sha512-3lbsNRf/j+A4QuSZfDRA7HRSfWrzO0YjqTJd5kjAq37Zep1CEgaYmrH9Q3GwPiB9cHyd1Y1UwggGhJGoxipbzg==", - "dev": true, - "requires": { - "camelcase": "^5.0.0", - "decamelize": "^1.2.0" - } } } }, diff --git a/package.json b/package.json index 73f7718b17..39533e8756 100644 --- a/package.json +++ b/package.json @@ -4,7 +4,7 @@ "version": "4.4.1", "license": "MPL-2.0", "engines": { - "node": ">=4" + "node": ">=12" }, "contributors": [ { @@ -140,25 +140,25 @@ "grunt-contrib-uglify": "^4.0.0", "grunt-contrib-watch": "^1.1.0", "html-entities": "^1.2.0", - "http-server": "^0.12.3", + "http-server": "^14.1.0", "husky": "^3.1.0", "jquery": "^3.0.0", - "jsdoc": "^3.5.5", + "jsdoc": "^3.6.10", "jsdom": "^16.3.0", - "karma": "^6.3.2", + "karma": "^6.3.16", "karma-chai": "^0.1.0", "karma-chrome-launcher": "^3.1.0", "karma-firefox-launcher": "^2.1.0", "karma-ie-launcher": "^1.0.0", "karma-mocha": "^2.0.1", - "karma-mocha-reporter": "^2.2.5", "karma-sinon": "^1.0.5", + "karma-spec-reporter": "0.0.33", "lint-staged": "^11.2.6", "make-dir": "^3.0.0", "markdown-table": "^1.1.2", "memoizee": "^0.4.14", "minami": "^1.2.3", - "mocha": "8.0.1", + "mocha": "^9.2.0", "node-notifier": "^8.0.1", "npm-run-all": "^4.1.5", "prettier": "^1.17.1", diff --git a/test/act-mapping/karma.config.js b/test/act-mapping/karma.config.js index 31e3b17e7e..8ad4effaf9 100644 --- a/test/act-mapping/karma.config.js +++ b/test/act-mapping/karma.config.js @@ -6,7 +6,7 @@ module.exports = function(config) { plugins: [ 'karma-mocha', 'karma-chai', - 'karma-mocha-reporter', + 'karma-spec-reporter', 'karma-chrome-launcher', require('./preprocessor') ], @@ -24,7 +24,7 @@ module.exports = function(config) { proxies: { '/test-assets': '/base/node_modules/act-rules.github.io/test-assets' }, - reporters: ['mocha'], + reporters: ['spec'], preprocessors: { '**/*.json': ['act'] }, diff --git a/test/integration/full/preload/preload.js b/test/integration/full/preload/preload.js index e0130c8696..f0b6ffb571 100644 --- a/test/integration/full/preload/preload.js +++ b/test/integration/full/preload/preload.js @@ -149,12 +149,12 @@ describe('axe.utils.preload integration test', function() { .catch(function(err) { assert.isNotNull(err); assert.isTrue(err.message.includes('Preload assets timed out')); - + axe.utils.preloadCssom = origPreloadCssom; done(); }) - .catch(done) - .finally(function() { + .catch(function (e) { axe.utils.preloadCssom = origPreloadCssom; + done(e); }); }); }); diff --git a/test/integration/full/umd/umd-window.js b/test/integration/full/umd/umd-window.js index 33592e58ce..8c8ea6964a 100644 --- a/test/integration/full/umd/umd-window.js +++ b/test/integration/full/umd/umd-window.js @@ -25,11 +25,11 @@ describe('UMD window', function() { .then(function(values) { assert.lengthOf(values, 2); assert.equal(values.join(' '), 'Hello World!'); + done(); }) .catch(function() { done(new Error('Expected to resolve.')); - }) - .finally(done); + }); }); it('should reject Promise', function(done) { new Promise(function(resolve, reject) { diff --git a/test/karma.conf.js b/test/karma.conf.js index 0570e167be..b0e6f048e6 100644 --- a/test/karma.conf.js +++ b/test/karma.conf.js @@ -72,7 +72,7 @@ module.exports = function(config) { 'karma-mocha', 'karma-chai', 'karma-sinon', - 'karma-mocha-reporter', + 'karma-spec-reporter', 'karma-chrome-launcher', 'karma-firefox-launcher', 'karma-ie-launcher', @@ -98,7 +98,7 @@ module.exports = function(config) { '/axe.js': '/base/axe.js' }, browsers: ['ChromeHeadless'], - reporters: ['mocha'], + reporters: ['spec'], preprocessors: { 'test/integration/rules/**/*.json': ['integration'] }, From 2d543a787102a36baad9dc6d47cdeb55ea054822 Mon Sep 17 00:00:00 2001 From: Steven Lambert <2433219+straker@users.noreply.github.com> Date: Fri, 18 Feb 2022 10:01:51 -0700 Subject: [PATCH 06/20] chore: generate metadata-function-map (#3392) * chore: generate metadata-function-map * cleanup * fix windows * ignore file --- .gitignore | 2 + Gruntfile.js | 15 + build/tasks/metadata-function-map.js | 49 ++++ lib/core/base/metadata-function-map.js | 361 ------------------------- 4 files changed, 66 insertions(+), 361 deletions(-) create mode 100644 build/tasks/metadata-function-map.js delete mode 100644 lib/core/base/metadata-function-map.js diff --git a/.gitignore b/.gitignore index 0681de529b..213cab33cd 100644 --- a/.gitignore +++ b/.gitignore @@ -18,6 +18,8 @@ test/integration/*/index.html axe.js axe.*.js +# generated src file +lib/core/base/metadata-function-map.js # generated jsdoc api docs doc/api/* diff --git a/Gruntfile.js b/Gruntfile.js index 37f31aa97e..5b472d7d6b 100644 --- a/Gruntfile.js +++ b/Gruntfile.js @@ -106,6 +106,20 @@ module.exports = function(grunt) { ] } }, + 'metadata-function-map': { + core: { + files: [ + { + expand: true, + src: [ + 'lib/checks/**/*-{evaluate,after}.js', + 'lib/rules/**/*-matches.js' + ], + dest: 'lib/core/base/metadata-function-map.js' + } + ] + } + }, 'aria-supported': { data: { entry: 'lib/commons/aria/index.js', @@ -239,6 +253,7 @@ module.exports = function(grunt) { grunt.registerTask('build', [ 'clean:core', 'validate', + 'metadata-function-map', 'esbuild', 'configure', 'babel', diff --git a/build/tasks/metadata-function-map.js b/build/tasks/metadata-function-map.js new file mode 100644 index 0000000000..e387bbe232 --- /dev/null +++ b/build/tasks/metadata-function-map.js @@ -0,0 +1,49 @@ +const path = require('path').posix; +const glob = require('glob'); +const fs = require('fs'); + +function toTitleCase(str) { + return str.replace(/-\w/g, txt => { + return txt.charAt(1).toUpperCase() + txt.substr(2).toLowerCase(); + }); +} + +module.exports = function(grunt) { + grunt.registerMultiTask( + 'metadata-function-map', + 'Task to generate the metadata-function-map file', + function() { + const files = grunt.task.current.data.files; + + files.forEach(file => { + const src = Array.isArray(file.src) ? file.src : [file.src]; + const map = {}; + let outFile = + '// This file is automatically generated using build/tasks/metadata-function-map.js\n'; + + src.forEach(globPath => { + glob.sync(globPath).forEach(filePath => { + const relativePath = path.relative( + path.dirname(file.dest), + filePath + ); + const filename = path.basename(filePath, '.js'); + const functionName = toTitleCase(filename); + + outFile += `import ${functionName} from '${relativePath}';\n`; + map[filename] = functionName; + }); + }); + + outFile += `\nconst metadataFunctionMap = {\n`; + outFile += Object.keys(map) + .sort() + .map(key => ` '${key}': ${map[key]}`) + .join(',\n'); + outFile += `\n};\n\nexport default metadataFunctionMap;`; + + fs.writeFileSync(file.dest, outFile, 'utf-8'); + }); + } + ); +}; diff --git a/lib/core/base/metadata-function-map.js b/lib/core/base/metadata-function-map.js deleted file mode 100644 index 608d93dacb..0000000000 --- a/lib/core/base/metadata-function-map.js +++ /dev/null @@ -1,361 +0,0 @@ -// aria -import abstractroleEvaluate from '../../checks/aria/abstractrole-evaluate'; -import ariaAllowedAttrEvaluate from '../../checks/aria/aria-allowed-attr-evaluate'; -import ariaAllowedRoledEvaluate from '../../checks/aria/aria-allowed-role-evaluate'; -import ariaErrormessageEvaluate from '../../checks/aria/aria-errormessage-evaluate'; -import ariaHiddenBodyEvaluate from '../../checks/aria/aria-hidden-body-evaluate'; -import ariaLevelEvaluate from '../../checks/aria/aria-level-evaluate'; -import ariaProhibitedAttrEvaluate from '../../checks/aria/aria-prohibited-attr-evaluate'; -import ariaRequiredAttrEvaluate from '../../checks/aria/aria-required-attr-evaluate'; -import ariaRequiredChildrenEvaluate from '../../checks/aria/aria-required-children-evaluate'; -import ariaRequiredParentEvaluate from '../../checks/aria/aria-required-parent-evaluate'; -import ariaRoledescriptionEvaluate from '../../checks/aria/aria-roledescription-evaluate'; -import ariaUnsupportedAttrEvaluate from '../../checks/aria/aria-unsupported-attr-evaluate'; -import ariaValidAttrEvaluate from '../../checks/aria/aria-valid-attr-evaluate'; -import ariaValidAttrValueEvaluate from '../../checks/aria/aria-valid-attr-value-evaluate'; -import deprecatedroleEvaluate from '../../checks/aria/deprecatedrole-evaluate'; -import fallbackroleEvaluate from '../../checks/aria/fallbackrole-evaluate'; -import hasGlobalAriaAttributeEvaluate from '../../checks/aria/has-global-aria-attribute-evaluate'; -import hasImplicitChromiumRoleMatches from '../../rules/has-implicit-chromium-role-matches'; -import hasWidgetRoleEvaluate from '../../checks/aria/has-widget-role-evaluate'; -import invalidroleEvaluate from '../../checks/aria/invalidrole-evaluate'; -import isElementFocusableEvaluate from '../../checks/aria/is-element-focusable-evaluate'; -import noImplicitExplicitLabelEvaluate from '../../checks/aria/no-implicit-explicit-label-evaluate'; -import unsupportedroleEvaluate from '../../checks/aria/unsupportedrole-evaluate'; -import validScrollableSemanticsEvaluate from '../../checks/aria/valid-scrollable-semantics-evaluate'; - -// tables -import captionFakedEvaluate from '../../checks/tables/caption-faked-evaluate'; -import html5ScopeEvaluate from '../../checks/tables/html5-scope-evaluate'; -import sameCaptionSummaryEvaluate from '../../checks/tables/same-caption-summary-evaluate'; -import scopeValueEvaluate from '../../checks/tables/scope-value-evaluate'; -import tdHasHeaderEvaluate from '../../checks/tables/td-has-header-evaluate'; -import tdHeadersAttrEvaluate from '../../checks/tables/td-headers-attr-evaluate'; -import thHasDataCellsEvaluate from '../../checks/tables/th-has-data-cells-evaluate'; - -// visibility -import hiddenContentEvaluate from '../../checks/visibility/hidden-content-evaluate'; - -// color -import colorContrastEvaluate from '../../checks/color/color-contrast-evaluate'; -import linkInTextBlockEvaluate from '../../checks/color/link-in-text-block-evaluate'; - -// forms -import autocompleteAppropriateEvaluate from '../../checks/forms/autocomplete-appropriate-evaluate'; -import autocompleteValidEvaluate from '../../checks/forms/autocomplete-valid-evaluate'; - -// generic -import attrNonSpaceContentEvaluate from '../../checks/generic/attr-non-space-content-evaluate'; -import hasDescendantAfter from '../../checks/generic/has-descendant-after'; -import hasDescendantEvaluate from '../../checks/generic/has-descendant-evaluate'; -import hasTextContentEvaluate from '../../checks/generic/has-text-content-evaluate'; -import matchesDefinitionEvaluate from '../../checks/generic/matches-definition-evaluate'; -import pageNoDuplicateAfter from '../../checks/generic/page-no-duplicate-after'; -import pageNoDuplicateEvaluate from '../../checks/generic/page-no-duplicate-evaluate'; - -// navigation -import headingOrderAfter from '../../checks/navigation/heading-order-after'; -import headingOrderEvaluate from '../../checks/navigation/heading-order-evaluate'; -import identicalLinksSamePurposeAfter from '../../checks/navigation/identical-links-same-purpose-after'; -import identicalLinksSamePurposeEvaluate from '../../checks/navigation/identical-links-same-purpose-evaluate'; -import internalLinkPresentEvaluate from '../../checks/navigation/internal-link-present-evaluate'; -import metaRefreshEvaluate from '../../checks/navigation/meta-refresh-evaluate'; -import pAsHeadingEvaluate from '../../checks/navigation/p-as-heading-evaluate'; -import regionEvaluate from '../../checks/navigation/region-evaluate'; -import regionAfter from '../../checks/navigation/region-after'; -import skipLinkEvaluate from '../../checks/navigation/skip-link-evaluate'; -import uniqueFrameTitleAfter from '../../checks/navigation/unique-frame-title-after'; -import uniqueFrameTitleEvaluate from '../../checks/navigation/unique-frame-title-evaluate'; - -// shared -import ariaLabelEvaluate from '../../checks/shared/aria-label-evaluate'; -import ariaLabelledbyEvaluate from '../../checks/shared/aria-labelledby-evaluate'; -import avoidInlineSpacingEvaluate from '../../checks/shared/avoid-inline-spacing-evaluate'; -import docHasTitleEvaluate from '../../checks/shared/doc-has-title-evaluate'; -import existsEvaluate from '../../checks/shared/exists-evaluate'; -import hasAltEvaluate from '../../checks/shared/has-alt-evaluate'; -import isOnScreenEvaluate from '../../checks/shared/is-on-screen-evaluate'; -import nonEmptyIfPresentEvaluate from '../../checks/shared/non-empty-if-present-evaluate'; -import presentationalRoleEvaluate from '../../checks/shared/presentational-role-evaluate'; -import svgNonEmptyTitleEvaluate from '../../checks/shared/svg-non-empty-title-evaluate'; - -// mobile -import cssOrientationLockEvaluate from '../../checks/mobile/css-orientation-lock-evaluate'; -import metaViewportScaleEvaluate from '../../checks/mobile/meta-viewport-scale-evaluate'; - -// parsing -import duplicateIdAfter from '../../checks/parsing/duplicate-id-after'; -import duplicateIdEvaluate from '../../checks/parsing/duplicate-id-evaluate'; - -// keyboard -import accesskeysAfter from '../../checks/keyboard/accesskeys-after'; -import accesskeysEvaluate from '../../checks/keyboard/accesskeys-evaluate'; -import focusableContentEvaluate from '../../checks/keyboard/focusable-content-evaluate'; -import focusableDisabledEvaluate from '../../checks/keyboard/focusable-disabled-evaluate'; -import focusableElementEvaluate from '../../checks/keyboard/focusable-element-evaluate'; -import focusableModalOpenEvaluate from '../../checks/keyboard/focusable-modal-open-evaluate'; -import focusableNoNameEvaluate from '../../checks/keyboard/focusable-no-name-evaluate'; -import focusableNotTabbableEvaluate from '../../checks/keyboard/focusable-not-tabbable-evaluate'; -import landmarkIsTopLevelEvaluate from '../../checks/keyboard/landmark-is-top-level-evaluate'; -import frameFocusableContentEvaluate from '../../checks/keyboard/frame-focusable-content-evaluate'; -import noFocusableContentEvaluate from '../../checks/keyboard/no-focusable-content-evaluate'; -import tabindexEvaluate from '../../checks/keyboard/tabindex-evaluate'; - -// label -import altSpaceValueEvaluate from '../../checks/label/alt-space-value-evaluate'; -import duplicateImgLabelEvaluate from '../../checks/label/duplicate-img-label-evaluate'; -import explicitEvaluate from '../../checks/label/explicit-evaluate'; -import helpSameAsLabelEvaluate from '../../checks/label/help-same-as-label-evaluate'; -import hiddenExplicitLabelEvaluate from '../../checks/label/hidden-explicit-label-evaluate'; -import implicitEvaluate from '../../checks/label/implicit-evaluate'; -import labelContentNameMismatchEvaluate from '../../checks/label/label-content-name-mismatch-evaluate'; -import multipleLabelEvaluate from '../../checks/label/multiple-label-evaluate'; -import titleOnlyEvaluate from '../../checks/label/title-only-evaluate'; - -// landmarks -import landmarkIsUniqueAfter from '../../checks/landmarks/landmark-is-unique-after'; -import landmarkIsUniqueEvaluate from '../../checks/landmarks/landmark-is-unique-evaluate'; - -// language -import hasLangEvaluate from '../../checks/language/has-lang-evaluate'; -import validLangEvaluate from '../../checks/language/valid-lang-evaluate'; -import xmlLangMismatchEvaluate from '../../checks/language/xml-lang-mismatch-evaluate'; - -// lists -import dlitemEvaluate from '../../checks/lists/dlitem-evaluate'; -import listitemEvaluate from '../../checks/lists/listitem-evaluate'; -import onlyDlitemsEvaluate from '../../checks/lists/only-dlitems-evaluate'; -import onlyListitemsEvaluate from '../../checks/lists/only-listitems-evaluate'; -import structuredDlitemsEvaluate from '../../checks/lists/structured-dlitems-evaluate'; - -// media -import captionEvaluate from '../../checks/media/caption-evaluate'; -import frameTestedEvaluate from '../../checks/media/frame-tested-evaluate'; -import frameTestedAfter from '../../checks/media/frame-tested-after'; -import noAutoplayAudioEvaluate from '../../checks/media/no-autoplay-audio-evaluate'; - -// rule matches -import ariaAllowedAttrMatches from '../../rules/aria-allowed-attr-matches'; -import ariaAllowedRoleMatches from '../../rules/aria-allowed-role-matches'; -import ariaHasAttrMatches from '../../rules/aria-has-attr-matches'; -import ariaHiddenFocusMatches from '../../rules/aria-hidden-focus-matches'; -import ariaRequiredChildrenMatches from '../../rules/aria-required-children-matches'; -import ariaRequiredParentMatches from '../../rules/aria-required-parent-matches'; -import autocompleteMatches from '../../rules/autocomplete-matches'; -import bypassMatches from '../../rules/bypass-matches'; -import colorContrastMatches from '../../rules/color-contrast-matches'; -import dataTableLargeMatches from '../../rules/data-table-large-matches'; -import dataTableMatches from '../../rules/data-table-matches'; -import duplicateIdActiveMatches from '../../rules/duplicate-id-active-matches'; -import duplicateIdAriaMatches from '../../rules/duplicate-id-aria-matches'; -import duplicateIdMiscMatches from '../../rules/duplicate-id-misc-matches'; -import frameFocusableContentMatches from '../../rules/frame-focusable-content-matches'; -import frameTitleHasTextMatches from '../../rules/frame-title-has-text-matches'; -import headingMatches from '../../rules/heading-matches'; -import htmlNamespaceMatches from '../../rules/html-namespace-matches'; -import identicalLinksSamePurposeMatches from '../../rules/identical-links-same-purpose-matches'; -import insertedIntoFocusOrderMatches from '../../rules/inserted-into-focus-order-matches'; -import isInitiatorMatches from '../../rules/is-initiator-matches'; -import labelContentNameMismatchMatches from '../../rules/label-content-name-mismatch-matches'; -import labelMatches from '../../rules/label-matches'; -import landmarkHasBodyContextMatches from '../../rules/landmark-has-body-context-matches'; -import landmarkUniqueMatches from '../../rules/landmark-unique-matches'; -import layoutTableMatches from '../../rules/layout-table-matches'; -import linkInTextBlockMatches from '../../rules/link-in-text-block-matches'; -import nestedInteractiveMatches from '../../rules/nested-interactive-matches'; -import noAutoplayAudioMatches from '../../rules/no-autoplay-audio-matches'; -import noEmptyRoleMatches from '../../rules/no-empty-role-matches'; -import noExplicitNameRequiredMatches from '../../rules/no-explicit-name-required-matches'; -import noNamingMethodMatches from '../../rules/no-naming-method-matches'; -import noRoleMatches from '../../rules/no-role-matches'; -import notHtmlMatches from '../../rules/not-html-matches'; -import pAsHeadingMatches from '../../rules/p-as-heading-matches'; -import scrollableRegionFocusableMatches from '../../rules/scrollable-region-focusable-matches'; -import skipLinkMatches from '../../rules/skip-link-matches'; -import svgNamespaceMatches from '../../rules/svg-namespace-matches'; -import windowIsTopMatches from '../../rules/window-is-top-matches'; -import xmlLangMismatchMatches from '../../rules/xml-lang-mismatch-matches'; - -const metadataFunctionMap = { - // aria - 'abstractrole-evaluate': abstractroleEvaluate, - 'aria-allowed-attr-evaluate': ariaAllowedAttrEvaluate, - 'aria-allowed-role-evaluate': ariaAllowedRoledEvaluate, - 'aria-errormessage-evaluate': ariaErrormessageEvaluate, - 'aria-hidden-body-evaluate': ariaHiddenBodyEvaluate, - 'aria-level-evaluate': ariaLevelEvaluate, - 'aria-prohibited-attr-evaluate': ariaProhibitedAttrEvaluate, - 'aria-required-attr-evaluate': ariaRequiredAttrEvaluate, - 'aria-required-children-evaluate': ariaRequiredChildrenEvaluate, - 'aria-required-parent-evaluate': ariaRequiredParentEvaluate, - 'aria-roledescription-evaluate': ariaRoledescriptionEvaluate, - 'aria-unsupported-attr-evaluate': ariaUnsupportedAttrEvaluate, - 'aria-valid-attr-evaluate': ariaValidAttrEvaluate, - 'aria-valid-attr-value-evaluate': ariaValidAttrValueEvaluate, - 'deprecatedrole-evaluate': deprecatedroleEvaluate, - 'fallbackrole-evaluate': fallbackroleEvaluate, - 'has-global-aria-attribute-evaluate': hasGlobalAriaAttributeEvaluate, - 'has-implicit-chromium-role-matches': hasImplicitChromiumRoleMatches, - 'has-widget-role-evaluate': hasWidgetRoleEvaluate, - 'invalidrole-evaluate': invalidroleEvaluate, - 'is-element-focusable-evaluate': isElementFocusableEvaluate, - 'no-implicit-explicit-label-evaluate': noImplicitExplicitLabelEvaluate, - 'unsupportedrole-evaluate': unsupportedroleEvaluate, - 'valid-scrollable-semantics-evaluate': validScrollableSemanticsEvaluate, - - // tables - 'caption-faked-evaluate': captionFakedEvaluate, - 'html5-scope-evaluate': html5ScopeEvaluate, - 'same-caption-summary-evaluate': sameCaptionSummaryEvaluate, - 'scope-value-evaluate': scopeValueEvaluate, - 'td-has-header-evaluate': tdHasHeaderEvaluate, - 'td-headers-attr-evaluate': tdHeadersAttrEvaluate, - 'th-has-data-cells-evaluate': thHasDataCellsEvaluate, - - // visibility - 'hidden-content-evaluate': hiddenContentEvaluate, - - // color - 'color-contrast-evaluate': colorContrastEvaluate, - 'link-in-text-block-evaluate': linkInTextBlockEvaluate, - - // forms - 'autocomplete-appropriate-evaluate': autocompleteAppropriateEvaluate, - 'autocomplete-valid-evaluate': autocompleteValidEvaluate, - - // generic - 'attr-non-space-content-evaluate': attrNonSpaceContentEvaluate, - 'has-descendant-after': hasDescendantAfter, - 'has-descendant-evaluate': hasDescendantEvaluate, - 'has-text-content-evaluate': hasTextContentEvaluate, - 'matches-definition-evaluate': matchesDefinitionEvaluate, - 'page-no-duplicate-after': pageNoDuplicateAfter, - 'page-no-duplicate-evaluate': pageNoDuplicateEvaluate, - - // navigation - 'heading-order-after': headingOrderAfter, - 'heading-order-evaluate': headingOrderEvaluate, - 'identical-links-same-purpose-after': identicalLinksSamePurposeAfter, - 'identical-links-same-purpose-evaluate': identicalLinksSamePurposeEvaluate, - 'internal-link-present-evaluate': internalLinkPresentEvaluate, - 'meta-refresh-evaluate': metaRefreshEvaluate, - 'p-as-heading-evaluate': pAsHeadingEvaluate, - 'region-evaluate': regionEvaluate, - 'region-after': regionAfter, - 'skip-link-evaluate': skipLinkEvaluate, - 'unique-frame-title-after': uniqueFrameTitleAfter, - 'unique-frame-title-evaluate': uniqueFrameTitleEvaluate, - - // shared - 'aria-label-evaluate': ariaLabelEvaluate, - 'aria-labelledby-evaluate': ariaLabelledbyEvaluate, - 'avoid-inline-spacing-evaluate': avoidInlineSpacingEvaluate, - 'doc-has-title-evaluate': docHasTitleEvaluate, - 'exists-evaluate': existsEvaluate, - 'has-alt-evaluate': hasAltEvaluate, - 'is-on-screen-evaluate': isOnScreenEvaluate, - 'non-empty-if-present-evaluate': nonEmptyIfPresentEvaluate, - 'presentational-role-evaluate': presentationalRoleEvaluate, - 'svg-non-empty-title-evaluate': svgNonEmptyTitleEvaluate, - - // mobile - 'css-orientation-lock-evaluate': cssOrientationLockEvaluate, - 'meta-viewport-scale-evaluate': metaViewportScaleEvaluate, - - // parsing - 'duplicate-id-after': duplicateIdAfter, - 'duplicate-id-evaluate': duplicateIdEvaluate, - - // keyboard - 'accesskeys-after': accesskeysAfter, - 'accesskeys-evaluate': accesskeysEvaluate, - 'focusable-content-evaluate': focusableContentEvaluate, - 'focusable-disabled-evaluate': focusableDisabledEvaluate, - 'focusable-element-evaluate': focusableElementEvaluate, - 'focusable-modal-open-evaluate': focusableModalOpenEvaluate, - 'focusable-no-name-evaluate': focusableNoNameEvaluate, - 'focusable-not-tabbable-evaluate': focusableNotTabbableEvaluate, - 'landmark-is-top-level-evaluate': landmarkIsTopLevelEvaluate, - 'frame-focusable-content-evaluate': frameFocusableContentEvaluate, - 'no-focusable-content-evaluate': noFocusableContentEvaluate, - 'tabindex-evaluate': tabindexEvaluate, - - // label - 'alt-space-value-evaluate': altSpaceValueEvaluate, - 'duplicate-img-label-evaluate': duplicateImgLabelEvaluate, - 'explicit-evaluate': explicitEvaluate, - 'help-same-as-label-evaluate': helpSameAsLabelEvaluate, - 'hidden-explicit-label-evaluate': hiddenExplicitLabelEvaluate, - 'implicit-evaluate': implicitEvaluate, - 'label-content-name-mismatch-evaluate': labelContentNameMismatchEvaluate, - 'multiple-label-evaluate': multipleLabelEvaluate, - 'title-only-evaluate': titleOnlyEvaluate, - - // landmarks - 'landmark-is-unique-after': landmarkIsUniqueAfter, - 'landmark-is-unique-evaluate': landmarkIsUniqueEvaluate, - - // language - 'has-lang-evaluate': hasLangEvaluate, - 'valid-lang-evaluate': validLangEvaluate, - 'xml-lang-mismatch-evaluate': xmlLangMismatchEvaluate, - - // lists - 'dlitem-evaluate': dlitemEvaluate, - 'listitem-evaluate': listitemEvaluate, - 'only-dlitems-evaluate': onlyDlitemsEvaluate, - 'only-listitems-evaluate': onlyListitemsEvaluate, - 'structured-dlitems-evaluate': structuredDlitemsEvaluate, - - // media - 'caption-evaluate': captionEvaluate, - 'frame-tested-evaluate': frameTestedEvaluate, - 'frame-tested-after': frameTestedAfter, - 'no-autoplay-audio-evaluate': noAutoplayAudioEvaluate, - - // rule matches - 'aria-allowed-attr-matches': ariaAllowedAttrMatches, - 'aria-allowed-role-matches': ariaAllowedRoleMatches, - // @deprecated - 'aria-form-field-name-matches': noNamingMethodMatches, - 'aria-has-attr-matches': ariaHasAttrMatches, - 'aria-hidden-focus-matches': ariaHiddenFocusMatches, - 'aria-required-children-matches': ariaRequiredChildrenMatches, - 'aria-required-parent-matches': ariaRequiredParentMatches, - 'autocomplete-matches': autocompleteMatches, - 'bypass-matches': bypassMatches, - 'color-contrast-matches': colorContrastMatches, - 'data-table-large-matches': dataTableLargeMatches, - 'data-table-matches': dataTableMatches, - 'duplicate-id-active-matches': duplicateIdActiveMatches, - 'duplicate-id-aria-matches': duplicateIdAriaMatches, - 'duplicate-id-misc-matches': duplicateIdMiscMatches, - 'frame-focusable-content-matches': frameFocusableContentMatches, - 'frame-title-has-text-matches': frameTitleHasTextMatches, - 'heading-matches': headingMatches, - 'html-namespace-matches': htmlNamespaceMatches, - 'identical-links-same-purpose-matches': identicalLinksSamePurposeMatches, - 'inserted-into-focus-order-matches': insertedIntoFocusOrderMatches, - 'is-initiator-matches': isInitiatorMatches, - 'label-content-name-mismatch-matches': labelContentNameMismatchMatches, - 'label-matches': labelMatches, - 'landmark-has-body-context-matches': landmarkHasBodyContextMatches, - 'landmark-unique-matches': landmarkUniqueMatches, - 'layout-table-matches': layoutTableMatches, - 'link-in-text-block-matches': linkInTextBlockMatches, - 'nested-interactive-matches': nestedInteractiveMatches, - 'no-autoplay-audio-matches': noAutoplayAudioMatches, - 'no-empty-role-matches': noEmptyRoleMatches, - 'no-explicit-name-required-matches': noExplicitNameRequiredMatches, - 'no-naming-method-matches': noNamingMethodMatches, - 'no-role-matches': noRoleMatches, - 'not-html-matches': notHtmlMatches, - 'p-as-heading-matches': pAsHeadingMatches, - 'scrollable-region-focusable-matches': scrollableRegionFocusableMatches, - 'skip-link-matches': skipLinkMatches, - 'svg-namespace-matches': svgNamespaceMatches, - 'window-is-top-matches': windowIsTopMatches, - 'xml-lang-mismatch-matches': xmlLangMismatchMatches -}; - -export default metadataFunctionMap; From d710bf44db92688d8aa1e2c329fb2c56de935c7f Mon Sep 17 00:00:00 2001 From: Steven Lambert <2433219+straker@users.noreply.github.com> Date: Thu, 24 Feb 2022 08:45:22 -0700 Subject: [PATCH 07/20] tests: split out respondable and frame-messenger tests (#3396) * tests: split out respondable and frame-messenger tests * remove --- .../utils/frame-messenger/frame-messenger.js | 227 +++++ test/core/utils/frame-messenger/subscribe.js | 306 ++++++ test/core/utils/respondable.js | 886 ++---------------- 3 files changed, 610 insertions(+), 809 deletions(-) create mode 100644 test/core/utils/frame-messenger/frame-messenger.js create mode 100644 test/core/utils/frame-messenger/subscribe.js diff --git a/test/core/utils/frame-messenger/frame-messenger.js b/test/core/utils/frame-messenger/frame-messenger.js new file mode 100644 index 0000000000..9fca538e71 --- /dev/null +++ b/test/core/utils/frame-messenger/frame-messenger.js @@ -0,0 +1,227 @@ +describe('frame-messenger', function() { + var fixture, + axeVersion, + axeApplication, + frame, + frameWin, + respondable, + frameSubscribe, + axeLog; + var postMessage = window.postMessage; + var captureError = axe.testUtils.captureError; + + beforeEach(function(done) { + respondable = axe.utils.respondable; + axeVersion = axe.version; + axeLog = axe.log; + axeApplication = axe._audit.application; + + frame = document.createElement('iframe'); + frame.src = '../mock/frames/test.html'; + frame.addEventListener('load', function() { + frameWin = frame.contentWindow; + frameSubscribe = frameWin.axe.utils.respondable.subscribe; + done(); + }); + frame.addEventListener('error', done); + + fixture = document.querySelector('#fixture'); + fixture.appendChild(frame); + }); + + afterEach(function() { + axe.version = axeVersion; + axe._audit.application = axeApplication; + axe.log = axeLog; + axe.reset(); + window.postMessage = postMessage; + }); + + it('can be subscribed to', function(done) { + frameSubscribe('greeting', function() { + done(); + }); + respondable(frameWin, 'greeting', 'hello'); + }); + + it('forwards the message', function(done) { + var expected = { hello: 'world' }; + frameSubscribe( + 'greeting', + captureError(function(actual) { + assert.deepEqual(actual, expected); + done(); + }, done) + ); + respondable(frameWin, 'greeting', expected); + }); + + it('passes a truthy keepalive value', function(done) { + frameSubscribe( + 'greeting', + captureError(function(_, keepalive) { + assert.isTrue(keepalive); + done(); + }, done) + ); + respondable(frameWin, 'greeting', 'hello', 'truthy'); + }); + + it('passes a falsy keepalive value', function(done) { + frameSubscribe( + 'greeting', + captureError(function(_, keepalive) { + assert.isFalse(keepalive); + done(); + }, done) + ); + respondable(frameWin, 'greeting', 'hello', 0); + }); + + it('can not publish to a parent frame', function(done) { + var isCalled = false; + axe.utils.respondable.subscribe('greeting', function() { + isCalled = true; + }); + assert.throws(function() { + frameWin.axe.utils.respondable(window, 'greeting', 'hello', 0); + }); + setTimeout( + captureError(function() { + assert.isFalse(isCalled); + done(); + }, done), + 100 + ); + }); + + it('does not expose private methods', function() { + var methods = Object.keys(respondable).sort(); + assert.deepEqual( + methods, + ['subscribe', 'isInFrame', 'updateMessenger'].sort() + ); + }); + + it('passes serialized information only', function(done) { + var div = document.createElement('div'); + frameSubscribe( + 'greeting', + captureError(function(message) { + assert.deepEqual(message, {}); + done(); + }, done) + ); + + respondable(frameWin, 'greeting', div); + }); + + it('posts message to allowed origins', function() { + axe.configure({ + allowedOrigins: [window.location.origin, 'http://customOrigin.com'] + }); + + var spy = sinon.spy(frameWin, 'postMessage'); + var posted = respondable(frameWin, 'greeting'); + assert.isTrue(posted); + assert.equal(spy.callCount, 2); + assert.deepEqual(spy.firstCall.args[1], window.location.origin); + assert.deepEqual(spy.secondCall.args[1], 'http://customOrigin.com'); + }); + + it('posts message to allowed origins using ', function() { + axe.configure({ + allowedOrigins: [''] + }); + + var spy = sinon.spy(frameWin, 'postMessage'); + var posted = respondable(frameWin, 'greeting'); + assert.isTrue(posted); + assert.equal(spy.callCount, 1); + assert.deepEqual(spy.firstCall.args[1], window.location.origin); + }); + + it('posts message to allowed origins using ', function() { + axe.configure({ + allowedOrigins: ['http://customOrigin.com', ''] + }); + + var spy = sinon.spy(frameWin, 'postMessage'); + var posted = respondable(frameWin, 'greeting'); + assert.isTrue(posted); + assert.equal(spy.callCount, 1); + assert.equal(spy.firstCall.args[1], '*'); + }); + + it('does not post message if no allowed origins', function() { + axe.configure({ + allowedOrigins: [] + }); + var spy = sinon.spy(frameWin, 'postMessage'); + var posted = respondable(frameWin, 'greeting'); + assert.isFalse(posted); + assert.isFalse(spy.called); + }); + + it('does not post message if no allowed origins', function() { + axe._audit.allowedOrigins = null; + var spy = sinon.spy(frameWin, 'postMessage'); + var posted = respondable(frameWin, 'greeting'); + assert.isFalse(posted); + assert.isFalse(spy.called); + }); + + it('does not post message if allowed origins is empty', function() { + axe.configure({ + allowedOrigins: [] + }); + var spy = sinon.spy(frameWin, 'postMessage'); + var posted = respondable(frameWin, 'greeting'); + assert.isFalse(posted); + assert.isFalse(spy.called); + }); + + it('throws error if origin is invalid', function() { + axe.configure({ + allowedOrigins: ['foo.com'] + }); + assert.throws(function() { + respondable(frameWin, 'greeting'); + }, 'allowedOrigins value "foo.com" is not a valid origin'); + }); + + it('does not log error if message is null', function(done) { + axe.configure({ + allowedOrigins: [''] + }); + var called = false; + frameWin.axe.log = function() { + called = true; + }; + + frameWin.postMessage(null, '*'); + + setTimeout(function() { + try { + assert.isFalse(called); + done(); + } catch (e) { + done(e); + } + }, 500); + }); + + describe('isInFrame', function() { + it('is false for the page window', function() { + var frameRespondable = frameWin.axe.utils.respondable; + assert.isFalse(respondable.isInFrame()); + assert.isFalse(frameRespondable.isInFrame(window)); + }); + + it('is true for iframes', function() { + var frameRespondable = frameWin.axe.utils.respondable; + assert.isTrue(frameRespondable.isInFrame()); + assert.isTrue(respondable.isInFrame(frameWin)); + }); + }); +}); diff --git a/test/core/utils/frame-messenger/subscribe.js b/test/core/utils/frame-messenger/subscribe.js new file mode 100644 index 0000000000..55b8eece17 --- /dev/null +++ b/test/core/utils/frame-messenger/subscribe.js @@ -0,0 +1,306 @@ +function afterMessage(win, callback) { + var handler = function() { + win.removeEventListener('message', handler); + // Wait one more tick for stuff to resolve + setTimeout(function() { + callback(); + }, 10); + }; + win.addEventListener('message', handler); +} + +function once(callback) { + var called = false; + return function() { + if (!called) { + callback.apply(this, arguments); + } + called = true; + }; +} + +describe('frame-messenger', function() { + var fixture, + axeVersion, + axeApplication, + frame, + frameWin, + respondable, + frameSubscribe, + axeLog; + var postMessage = window.postMessage; + var captureError = axe.testUtils.captureError; + var isIE11 = axe.testUtils.isIE11; + var shadowSupported = axe.testUtils.shadowSupport.v1; + + beforeEach(function(done) { + respondable = axe.utils.respondable; + axeVersion = axe.version; + axeLog = axe.log; + axeApplication = axe._audit.application; + + frame = document.createElement('iframe'); + frame.src = '../mock/frames/test.html'; + frame.addEventListener('load', function() { + frameWin = frame.contentWindow; + frameSubscribe = frameWin.axe.utils.respondable.subscribe; + done(); + }); + frame.addEventListener('error', done); + + fixture = document.querySelector('#fixture'); + fixture.appendChild(frame); + }); + + afterEach(function() { + axe.version = axeVersion; + axe._audit.application = axeApplication; + axe.log = axeLog; + axe.reset(); + window.postMessage = postMessage; + }); + + describe('subscribe', function() { + it('is called with the same topic', function(done) { + var called = false; + frameSubscribe('greeting', function() { + called = true; + }); + respondable(frameWin, 'greeting'); + afterMessage( + frameWin, + captureError(function() { + assert.isTrue(called); + done(); + }, done) + ); + }); + + (shadowSupported ? it : xit)('works with frames in shadow DOM', function( + done + ) { + fixture.innerHTML = '
'; + var shadowRoot = fixture + .querySelector('#shadow-root') + .attachShadow({ mode: 'open' }); + frame = document.createElement('iframe'); + frame.src = '../mock/frames/test.html'; + + frame.addEventListener('load', function() { + var called = false; + frameWin = frame.contentWindow; + frameSubscribe = frameWin.axe.utils.respondable.subscribe; + + frameSubscribe('greeting', function(msg) { + assert.equal(msg, 'hello'); + called = true; + }); + respondable(frameWin, 'greeting', 'hello'); + afterMessage( + frameWin, + captureError(function() { + assert.isTrue(called); + done(); + }, done) + ); + }); + shadowRoot.appendChild(frame); + }); + + it('is not called on a different topic', function(done) { + var called = false; + frameSubscribe('otherTopic', function() { + called = true; + }); + respondable(frameWin, 'greeting'); + afterMessage( + frameWin, + captureError(function() { + assert.isFalse(called); + done(); + }, done) + ); + }); + + it('is not called for different axe-core versions', function(done) { + var called = false; + axe.version = '1.0.0'; + frameSubscribe('greeting', function() { + called = true; + }); + respondable(frameWin, 'greeting'); + afterMessage( + frameWin, + captureError(function() { + assert.isFalse(called); + done(); + }, done) + ); + }); + + it('is not called with the "x.y.z" wildcard', function(done) { + var called = false; + axe.version = 'x.y.z'; + frameSubscribe('greeting', function() { + called = true; + }); + respondable(frameWin, 'greeting'); + afterMessage( + frameWin, + captureError(function() { + assert.isFalse(called); + done(); + }, done) + ); + }); + + it('is not called for different applications', function(done) { + var called = false; + axe._audit.application = 'Coconut'; + frameSubscribe('greeting', function() { + called = true; + }); + respondable(frameWin, 'greeting'); + afterMessage( + frameWin, + captureError(function() { + assert.isFalse(called); + done(); + }, done) + ); + }); + + it('logs errors passed to respondable, rather than passing them on', function(done) { + axe.log = captureError(function(e) { + assert.equal(e.message, 'expected message'); + done(); + }, done); + + frameSubscribe('greeting', function() { + done(new Error('subscribe should not be called')); + }); + respondable(frameWin, 'greeting', new Error('expected message')); + }); + + (isIE11 ? it.skip : it)( + // In IE win.parent is read-only + 'throws if frame.parent is not the window', + function() { + frameWin.parent = frameWin; + assert.throws(function() { + respondable(frameWin, 'greeting'); + }); + } + ); + + (isIE11 ? it.skip : it)( + // In IE win.parent is read-only + 'is not called when the source is not a frame in the page', + function(done) { + var doneOnce = once(done); + var called = false; + frameWin.axe.log = function() { + called = true; + }; + + frameSubscribe('greeting', function() { + doneOnce(new Error('subscribe should not be called')); + }); + respondable(frameWin, 'greeting'); + // Swap parent after the message is sent, but before it is received: + frameWin.parent = frameWin; + + setTimeout( + captureError(function() { + assert.isTrue(called); + doneOnce(); + }, doneOnce), + 100 + ); + } + ); + + it('throws when targeting itself', function() { + assert.throws(function() { + respondable(window, 'greeting'); + }); + assert.throws(function() { + frameWin.respondable(frameWin, 'greeting'); + }); + }); + + it('throws when targeting a window that is not a frame in the page', function() { + var blankPage = window.open(''); + var frameCopy = window.open(frameWin.location.href); + + // seems ie11 can't open new windows? + if (!blankPage) { + return; + } + + // Cleanup + setTimeout(function() { + blankPage.close(); + frameCopy.close(); + }); + + assert.throws(function() { + respondable(blankPage, 'greeting'); + }); + assert.throws(function() { + respondable(frameCopy, 'greeting'); + }); + }); + + it('is not triggered by "repeaters"', function(done) { + var calls = 0; + frameSubscribe('greeting', function() { + calls++; + }); + // Repeat fire the event + frameWin.addEventListener('message', function handler(evt) { + frameWin.postMessage(evt.data, '*'); + frameWin.removeEventListener('message', handler); + }); + + respondable(frameWin, 'greeting', 'hello'); + setTimeout( + captureError(function() { + assert.equal(calls, 1); + done(); + }, done), + 100 + ); + }); + + it('is not called if origin does not match', function(done) { + axe.configure({ + allowedOrigins: ['http://customOrigin.com'] + }); + var spy = sinon.spy(); + + frameSubscribe('greeting', spy); + respondable(frameWin, 'greeting', 'hello'); + + setTimeout(function() { + assert.isFalse(spy.called); + done(); + }, 500); + }); + + it('is called if origin is ', function(done) { + axe.configure({ + allowedOrigins: [''] + }); + var spy = sinon.spy(); + + frameSubscribe('greeting', spy); + respondable(frameWin, 'greeting', 'hello'); + + setTimeout(function() { + assert.isTrue(spy.called); + done(); + }, 500); + }); + }); +}); diff --git a/test/core/utils/respondable.js b/test/core/utils/respondable.js index bfaaf19560..590cdb3641 100644 --- a/test/core/utils/respondable.js +++ b/test/core/utils/respondable.js @@ -1,864 +1,132 @@ -function afterMessage(win, callback) { - var handler = function() { - win.removeEventListener('message', handler); - // Wait one more tick for stuff to resolve - setTimeout(function() { - callback(); - }, 10); - }; - win.addEventListener('message', handler); -} - -function once(callback) { - var called = false; - return function() { - if (!called) { - callback.apply(this, arguments); - } - called = true; - }; -} - describe('axe.utils.respondable', function() { - var fixture, - axeVersion, - axeApplication, - frame, - frameWin, - respondable, - frameSubscribe, - axeLog; - var postMessage = window.postMessage; - var captureError = axe.testUtils.captureError; - var isIE11 = axe.testUtils.isIE11; - var shadowSupported = axe.testUtils.shadowSupport.v1; - - this.timeout(1000); - this.retries(3); + var fixture = document.querySelector('#fixture'); + var respondable = axe.utils.respondable; + var noop = sinon.spy(); + var frameWin; beforeEach(function(done) { - respondable = axe.utils.respondable; - axeVersion = axe.version; - axeLog = axe.log; - axeApplication = axe._audit.application; - - frame = document.createElement('iframe'); + var frame = document.createElement('iframe'); frame.src = '../mock/frames/test.html'; frame.addEventListener('load', function() { frameWin = frame.contentWindow; - frameSubscribe = frameWin.axe.utils.respondable.subscribe; done(); }); + frame.addEventListener('error', done); - fixture = document.querySelector('#fixture'); fixture.appendChild(frame); }); afterEach(function() { - fixture.innerHTML = ''; - axe.version = axeVersion; - axe._audit.application = axeApplication; - axe.log = axeLog; - axe.reset(); - window.postMessage = postMessage; + axe._thisWillBeDeletedDoNotUse.utils.setDefaultFrameMessenger(respondable); }); - describe('updateMessenger', function() { - var noop = sinon.spy(); - - afterEach(function() { - axe._thisWillBeDeletedDoNotUse.utils.setDefaultFrameMessenger( - respondable - ); - }); - - it('should error if open is not a function', function() { - assert.throws(function() { - respondable.updateMessenger({ - post: noop, - close: noop - }); - }); - }); - - it('should error if post is not a function', function() { - assert.throws(function() { - respondable.updateMessenger({ - open: noop - }); - }); - }); - - it('should error if open function return is not a function', function() { - assert.throws(function() { - respondable.updateMessenger({ - post: noop, - open: function() { - return 1; - } - }); - }); - }); - - it('should call the open function and pass the listener', function() { - var open = sinon.spy(); - respondable.updateMessenger({ - open: open, - post: noop - }); - - assert.isTrue(open.called); - assert.isTrue(typeof open.args[0][0] === 'function'); - }); - - it('should call previous close function', function() { - var close = sinon.spy(); - respondable.updateMessenger({ - open: function() { - return close; - }, - post: noop - }); - - respondable.updateMessenger({ - open: noop, - post: noop - }); - - assert.isTrue(close.called); - }); - - it('should use the post function when making a frame post', function() { - var post = sinon.spy(); + it('should error if open is not a function', function() { + assert.throws(function() { respondable.updateMessenger({ - open: noop, - post: post + post: noop, + close: noop }); - - respondable(frameWin, 'greeting'); - assert.isTrue(post.called); }); + }); - it('should pass the post function the correct parameters', function() { - var post = sinon.spy(); - var callback = sinon.spy(); - + it('should error if post is not a function', function() { + assert.throws(function() { respondable.updateMessenger({ - open: noop, - post: post + open: noop }); - - respondable(frameWin, 'greeting', 'hello', true, callback); - assert.isTrue( - post.calledWith( - frameWin, - sinon.match({ - topic: 'greeting', - message: 'hello', - keepalive: true - }), - callback - ) - ); }); + }); - it('should work as a full integration', function() { - var listeners = {}; - var listener = sinon.spy(); - + it('should error if open function return is not a function', function() { + assert.throws(function() { respondable.updateMessenger({ + post: noop, open: function() { - listeners.greeting = listener; - }, - post: function(win, data) { - if (listeners[data.topic]) { - listeners[data.topic](); - } - }, - close: noop + return 1; + } }); - - respondable(frameWin, 'greeting', 'hello'); - assert.isTrue(listener.called); - }); - }); - - it('can be subscribed to', function(done) { - frameSubscribe('greeting', function() { - done(); - }); - respondable(frameWin, 'greeting', 'hello'); - }); - - it('forwards the message', function(done) { - var expected = { hello: 'world' }; - frameSubscribe( - 'greeting', - captureError(function(actual) { - assert.deepEqual(actual, expected); - done(); - }, done) - ); - respondable(frameWin, 'greeting', expected); - }); - - it('passes a truthy keepalive value', function(done) { - frameSubscribe( - 'greeting', - captureError(function(_, keepalive) { - assert.isTrue(keepalive); - done(); - }, done) - ); - respondable(frameWin, 'greeting', 'hello', 'truthy'); - }); - - it('passes a falsy keepalive value', function(done) { - frameSubscribe( - 'greeting', - captureError(function(_, keepalive) { - assert.isFalse(keepalive); - done(); - }, done) - ); - respondable(frameWin, 'greeting', 'hello', 0); - }); - - it('can not publish to a parent frame', function(done) { - var isCalled = false; - axe.utils.respondable.subscribe('greeting', function() { - isCalled = true; - }); - assert.throws(function() { - frameWin.axe.utils.respondable(window, 'greeting', 'hello', 0); - }); - setTimeout( - captureError(function() { - assert.isFalse(isCalled); - done(); - }, done), - 100 - ); - }); - - it('does not expose private methods', function() { - var methods = Object.keys(respondable).sort(); - assert.deepEqual( - methods, - ['subscribe', 'isInFrame', 'updateMessenger'].sort() - ); - }); - - it('passes serialized information only', function(done) { - var div = document.createElement('div'); - frameSubscribe( - 'greeting', - captureError(function(message) { - assert.deepEqual(message, {}); - done(); - }, done) - ); - - respondable(frameWin, 'greeting', div); - }); - - it('posts message to allowed origins', function() { - axe.configure({ - allowedOrigins: [window.location.origin, 'http://customOrigin.com'] }); - - var spy = sinon.spy(frameWin, 'postMessage'); - var posted = respondable(frameWin, 'greeting'); - assert.isTrue(posted); - assert.equal(spy.callCount, 2); - assert.deepEqual(spy.firstCall.args[1], window.location.origin); - assert.deepEqual(spy.secondCall.args[1], 'http://customOrigin.com'); - }); - - it('posts message to allowed origins using ', function() { - axe.configure({ - allowedOrigins: [''] - }); - - var spy = sinon.spy(frameWin, 'postMessage'); - var posted = respondable(frameWin, 'greeting'); - assert.isTrue(posted); - assert.equal(spy.callCount, 1); - assert.deepEqual(spy.firstCall.args[1], window.location.origin); }); - it('posts message to allowed origins using ', function() { - axe.configure({ - allowedOrigins: ['http://customOrigin.com', ''] + it('should call the open function and pass the listener', function() { + var open = sinon.spy(); + respondable.updateMessenger({ + open: open, + post: noop }); - var spy = sinon.spy(frameWin, 'postMessage'); - var posted = respondable(frameWin, 'greeting'); - assert.isTrue(posted); - assert.equal(spy.callCount, 1); - assert.equal(spy.firstCall.args[1], '*'); + assert.isTrue(open.called); + assert.isTrue(typeof open.args[0][0] === 'function'); }); - it('does not post message if no allowed origins', function() { - axe.configure({ - allowedOrigins: [] + it('should call previous close function', function() { + var close = sinon.spy(); + respondable.updateMessenger({ + open: function() { + return close; + }, + post: noop }); - var spy = sinon.spy(frameWin, 'postMessage'); - var posted = respondable(frameWin, 'greeting'); - assert.isFalse(posted); - assert.isFalse(spy.called); - }); - it('does not post message if no allowed origins', function() { - axe._audit.allowedOrigins = null; - var spy = sinon.spy(frameWin, 'postMessage'); - var posted = respondable(frameWin, 'greeting'); - assert.isFalse(posted); - assert.isFalse(spy.called); - }); - - it('does not post message if allowed origins is empty', function() { - axe.configure({ - allowedOrigins: [] + respondable.updateMessenger({ + open: noop, + post: noop }); - var spy = sinon.spy(frameWin, 'postMessage'); - var posted = respondable(frameWin, 'greeting'); - assert.isFalse(posted); - assert.isFalse(spy.called); - }); - it('throws error if origin is invalid', function() { - axe.configure({ - allowedOrigins: ['foo.com'] - }); - assert.throws(function() { - respondable(frameWin, 'greeting'); - }, 'allowedOrigins value "foo.com" is not a valid origin'); + assert.isTrue(close.called); }); - it('does not log error if message is null', function(done) { - axe.configure({ - allowedOrigins: [''] + it('should use the post function when making a frame post', function() { + var post = sinon.spy(); + respondable.updateMessenger({ + open: noop, + post: post }); - var called = false; - frameWin.axe.log = function() { - called = true; - }; - - frameWin.postMessage(null, '*'); - setTimeout(function() { - try { - assert.isFalse(called); - done(); - } catch (e) { - done(e); - } - }, 500); + respondable(frameWin, 'greeting'); + assert.isTrue(post.called); }); - describe('subscribe', function() { - it('is called with the same topic', function(done) { - var called = false; - frameSubscribe('greeting', function() { - called = true; - }); - respondable(frameWin, 'greeting'); - afterMessage( - frameWin, - captureError(function() { - assert.isTrue(called); - done(); - }, done) - ); - }); - - (shadowSupported ? it : xit)('works with frames in shadow DOM', function( - done - ) { - fixture.innerHTML = '
'; - var shadowRoot = fixture - .querySelector('#shadow-root') - .attachShadow({ mode: 'open' }); - frame = document.createElement('iframe'); - frame.src = '../mock/frames/test.html'; - - frame.addEventListener('load', function() { - var called = false; - frameWin = frame.contentWindow; - frameSubscribe = frameWin.axe.utils.respondable.subscribe; - - frameSubscribe('greeting', function(msg) { - assert.equal(msg, 'hello'); - called = true; - }); - respondable(frameWin, 'greeting', 'hello'); - afterMessage( - frameWin, - captureError(function() { - assert.isTrue(called); - done(); - }, done) - ); - }); - shadowRoot.appendChild(frame); - }); - - it('is not called on a different topic', function(done) { - var called = false; - frameSubscribe('otherTopic', function() { - called = true; - }); - respondable(frameWin, 'greeting'); - afterMessage( - frameWin, - captureError(function() { - assert.isFalse(called); - done(); - }, done) - ); - }); + it('should pass the post function the correct parameters', function() { + var post = sinon.spy(); + var callback = sinon.spy(); - it('is not called for different axe-core versions', function(done) { - var called = false; - axe.version = '1.0.0'; - frameSubscribe('greeting', function() { - called = true; - }); - respondable(frameWin, 'greeting'); - afterMessage( - frameWin, - captureError(function() { - assert.isFalse(called); - done(); - }, done) - ); + respondable.updateMessenger({ + open: noop, + post: post }); - it('is not called with the "x.y.z" wildcard', function(done) { - var called = false; - axe.version = 'x.y.z'; - frameSubscribe('greeting', function() { - called = true; - }); - respondable(frameWin, 'greeting'); - afterMessage( - frameWin, - captureError(function() { - assert.isFalse(called); - done(); - }, done) - ); - }); - - it('is not called for different applications', function(done) { - var called = false; - axe._audit.application = 'Coconut'; - frameSubscribe('greeting', function() { - called = true; - }); - respondable(frameWin, 'greeting'); - afterMessage( + respondable(frameWin, 'greeting', 'hello', true, callback); + assert.isTrue( + post.calledWith( frameWin, - captureError(function() { - assert.isFalse(called); - done(); - }, done) - ); - }); - - it('logs errors passed to respondable, rather than passing them on', function(done) { - axe.log = captureError(function(e) { - assert.equal(e.message, 'expected message'); - done(); - }, done); - - frameSubscribe('greeting', function() { - done(new Error('subscribe should not be called')); - }); - respondable(frameWin, 'greeting', new Error('expected message')); - }); - - (isIE11 ? it.skip : it)( - // In IE win.parent is read-only - 'throws if frame.parent is not the window', - function() { - frameWin.parent = frameWin; - assert.throws(function() { - respondable(frameWin, 'greeting'); - }); - } + sinon.match({ + topic: 'greeting', + message: 'hello', + keepalive: true + }), + callback + ) ); - - (isIE11 ? it.skip : it)( - // In IE win.parent is read-only - 'is not called when the source is not a frame in the page', - function(done) { - var doneOnce = once(done); - var called = false; - frameWin.axe.log = function() { - called = true; - }; - - frameSubscribe('greeting', function() { - doneOnce(new Error('subscribe should not be called')); - }); - respondable(frameWin, 'greeting'); - // Swap parent after the message is sent, but before it is received: - frameWin.parent = frameWin; - - setTimeout( - captureError(function() { - assert.isTrue(called); - doneOnce(); - }, doneOnce), - 100 - ); - } - ); - - it('throws when targeting itself', function() { - assert.throws(function() { - respondable(window, 'greeting'); - }); - assert.throws(function() { - frameWin.respondable(frameWin, 'greeting'); - }); - }); - - it('throws when targeting a window that is not a frame in the page', function() { - var blankPage = window.open(''); - var frameCopy = window.open(frameWin.location.href); - - // seems ie11 can't open new windows? - if (!blankPage) { - return; - } - - // Cleanup - setTimeout(function() { - blankPage.close(); - frameCopy.close(); - }); - - assert.throws(function() { - respondable(blankPage, 'greeting'); - }); - assert.throws(function() { - respondable(frameCopy, 'greeting'); - }); - }); - - it('is not triggered by "repeaters"', function(done) { - var calls = 0; - frameSubscribe('greeting', function() { - calls++; - }); - // Repeat fire the event - frameWin.addEventListener('message', function handler(evt) { - frameWin.postMessage(evt.data, '*'); - frameWin.removeEventListener('message', handler); - }); - - respondable(frameWin, 'greeting', 'hello'); - setTimeout( - captureError(function() { - assert.equal(calls, 1); - done(); - }, done), - 100 - ); - }); - - it('is not called if origin does not match', function(done) { - axe.configure({ - allowedOrigins: ['http://customOrigin.com'] - }); - var spy = sinon.spy(); - - frameSubscribe('greeting', spy); - respondable(frameWin, 'greeting', 'hello'); - - setTimeout(function() { - assert.isFalse(spy.called); - done(); - }, 500); - }); - - it('is called if origin is ', function(done) { - axe.configure({ - allowedOrigins: [''] - }); - var spy = sinon.spy(); - - frameSubscribe('greeting', spy); - respondable(frameWin, 'greeting', 'hello'); - - setTimeout(function() { - assert.isTrue(spy.called); - done(); - }, 500); - }); }); - describe('respond', function() { - it('passes the response back', function(done) { - var receivedResponse; - frameSubscribe( - 'greeting', - captureError(function(message, keepalive, respond) { - assert.isFalse(keepalive); - respond({ greet: 'bonjour' }); - }, done) - ); - - respondable(frameWin, 'greeting', 'hello', false, function(message) { - receivedResponse = message; - }); - - afterMessage( - window, - captureError(function() { - assert.deepEqual(receivedResponse, { greet: 'bonjour' }); - done(); - }, done) - ); - }); - - it('prohibits multiple response calls when respond sets keepalive to false', function(done) { - var receivedResponse; - frameSubscribe('greeting', function(message, keepalive, respond) { - assert.isTrue(keepalive); - respond({ responseNum: 1 }, false); - setTimeout(function() { - respond({ responseNum: 2 }); - }, 10); - }); + it('should work as a full integration', function() { + var listeners = {}; + var listener = sinon.spy(); - respondable(frameWin, 'greeting', '', true, function(message) { - receivedResponse = message; - }); - - afterMessage(window, function() { - assert.deepEqual(receivedResponse, { responseNum: 1 }); - setTimeout(function() { - assert.deepEqual(receivedResponse, { responseNum: 1 }); - done(); - }, 100); - }); - }); - - it('allows multiple response calls with keepalive: true', function(done) { - var receivedResponse; - frameSubscribe('greeting', function(message, keepalive, respond) { - assert.isTrue(keepalive); - respond({ responseNum: 1 }, true); - setTimeout(function() { - respond({ responseNum: 2 }); - }, 30); - }); - - respondable(frameWin, 'greeting', '', true, function(message) { - receivedResponse = message; - }); - - afterMessage(window, function() { - assert.deepEqual(receivedResponse, { responseNum: 1 }); - afterMessage(window, function() { - assert.deepEqual(receivedResponse, { responseNum: 2 }); - done(); - }); - }); + respondable.updateMessenger({ + open: function() { + listeners.greeting = listener; + }, + post: function(win, data) { + if (listeners[data.topic]) { + listeners[data.topic](); + } + }, + close: noop }); - it('responds until after keepalive: false is called', function(done) { - var concat = ''; - frameSubscribe('greeting', function(_, keepalive, respond) { - respond('1', true); - respond('2', true); - respond('3', false); - respond('4', true); - respond('5', false); - }); - - respondable(frameWin, 'greeting', '', true, function(result) { - concat += result; - }); - setTimeout(function() { - assert.equal(concat, '123'); - done(); - }, 200); - }); - - it('receives errors if the subscriber throws', function(done) { - var errorMessage = 'Something went wrong'; - frameSubscribe('greeting', function() { - throw new frameWin.TypeError(errorMessage); - }); - - respondable( - frameWin, - 'greeting', - '', - true, - captureError(function(result) { - assert.instanceOf(result, TypeError); - assert.equal(result.message.split(/\n/)[0], errorMessage); - done(); - }, done) - ); - }); - - it('receives errors responded by the subscriber', function(done) { - var errorMessage = 'Something went wrong'; - frameSubscribe('greeting', function(data, keepalive, respond) { - respond(new frameWin.TypeError(errorMessage)); - }); - - respondable(frameWin, 'greeting', '', true, function(result) { - assert.instanceOf(result, TypeError); - assert.equal(result.message.split(/\n/)[0], errorMessage); - done(); - }); - }); - - it('can pass messages back to the subscriber (without triggering the subscriber)', function(done) { - frameSubscribe( - 'greeting', - captureError(function(message, _, respond) { - assert.equal(message, '1'); - respond('2', true, function(message) { - assert.equal(message, '3'); - done(); - }); - }, done) - ); - - respondable( - frameWin, - 'greeting', - '1', - false, - captureError(function(message, _, respond) { - assert.equal(message, '2'); - respond('3'); - }, done) - ); - }); - - it('it errors if multiple callbacks are registered', function(done) { - var calledFirst = captureError(function(message, _, respond) { - respond('2a', true, calledThird); - assert.throws(function() { - respond('2b', true, function() { - done(new Error('Should never be called')); - }); - }); - }, done); - - var calledSecond = captureError(function(message, _, respond) { - assert.equal(message, '2a'); - respond('3a'); - }, done); - - var calledThird = captureError(function(message) { - assert.equal(message, '3a'); - setTimeout(function() { - done(); // No further messages received - }, 50); - }, done); - - frameSubscribe('greeting', calledFirst); - respondable(frameWin, 'greeting', '1', false, calledSecond); - }); - - it('logs errors in respondable callbacks', function(done) { - var doneOnce = once(done); - var logged = false; - axe.log = function(e) { - logged = true; - assert.equal(e.message, 'This should not go to the frame'); - }; - - frameSubscribe( - 'greeting', - captureError(function(message, _, respond) { - assert.equal(message, '1'); - - respond('2', true, function() { - doneOnce(new Error('should not call callback')); - }); - }, doneOnce) - ); - - respondable(frameWin, 'greeting', '1', false, function(message) { - assert.equal(message, '2'); - setTimeout( - captureError(function() { - assert.isTrue(logged); - doneOnce(); - }, done), - 100 - ); - - throw new Error('This should not go to the frame'); - }); - }); - - it('is not called if the frame is not in the page', function(done) { - var receivedResponse; - frameSubscribe('greeting', function(message, keepalive, respond) { - respond({ greet: 'ola' }); - }); - - respondable(frameWin, 'greeting', 'hello', false, function(message) { - receivedResponse = message; - fixture.innerHTML = ''; - }); - - afterMessage(window, function() { - assert.deepEqual(receivedResponse, { greet: 'ola' }); - done(); - }); - }); - - it('is not triggered by "repeaters"', function(done) { - // Repeat fire the event - window.addEventListener('message', function handler(evt) { - frameWin.parent.postMessage(evt.data, '*'); - window.removeEventListener('message', handler); - }); - - frameSubscribe('greeting', function(message, _, respond) { - respond('2', true); - }); - - var calls = 0; - respondable(frameWin, 'greeting', '1', false, function() { - calls++; - }); - - setTimeout( - captureError(function() { - assert.equal(calls, 1); - done(); - }, done), - 100 - ); - }); - }); - - describe('isInFrame', function() { - it('is false for the page window', function() { - var frameRespondable = frameWin.axe.utils.respondable; - assert.isFalse(respondable.isInFrame()); - assert.isFalse(frameRespondable.isInFrame(window)); - }); - - it('is true for iframes', function() { - var frameRespondable = frameWin.axe.utils.respondable; - assert.isTrue(frameRespondable.isInFrame()); - assert.isTrue(respondable.isInFrame(frameWin)); - }); + respondable(frameWin, 'greeting', 'hello'); + assert.isTrue(listener.called); }); }); From b5b3887c27890af48e201654f07451e70390f053 Mon Sep 17 00:00:00 2001 From: Steven Lambert <2433219+straker@users.noreply.github.com> Date: Thu, 24 Feb 2022 08:45:56 -0700 Subject: [PATCH 08/20] tests: fix audit tests include (#3394) --- test/core/base/audit.js | 24 ++++++++++++++++-------- 1 file changed, 16 insertions(+), 8 deletions(-) diff --git a/test/core/base/audit.js b/test/core/base/audit.js index e20cafc933..9265f45826 100644 --- a/test/core/base/audit.js +++ b/test/core/base/audit.js @@ -640,7 +640,7 @@ describe('Audit', function() { it('should not run rules disabled by the options', function(done) { a.run( - { include: [document] }, + { include: [axe.utils.getFlattenedTree()[0]] }, { rules: { positive3: { @@ -1011,7 +1011,7 @@ describe('Audit', function() { return false; }; a.run( - { include: [document] }, + { include: [axe.utils.getFlattenedTree()[0]] }, {}, function() { axe.utils.ruleShouldRun = saved; @@ -1023,7 +1023,7 @@ describe('Audit', function() { it('should clear axe._selectCache', function(done) { a.run( - { include: [document] }, + { include: [axe.utils.getFlattenedTree()[0]] }, { rules: {} }, @@ -1054,7 +1054,7 @@ describe('Audit', function() { }) ); a.run( - { include: [document] }, + { include: [axe.utils.getFlattenedTree()[0]] }, {}, function() { assert.ok(success); @@ -1077,7 +1077,7 @@ describe('Audit', function() { callback({}); }; a.run( - { include: [document] }, + { include: [axe.utils.getFlattenedTree()[0]] }, {}, function() { assert.isTrue(called); @@ -1105,7 +1105,7 @@ describe('Audit', function() { options = { rules: {} }; (options.rules[targetRule.id] = {}).data = 'monkeys'; a.run( - { include: [document] }, + { include: [axe.utils.getFlattenedTree()[0]] }, options, function() { assert.ok(passed); @@ -1130,7 +1130,10 @@ describe('Audit', function() { ); audit.run( - { include: [document.body], page: false }, + { + include: [axe.utils.getFlattenedTree(document.body)[0]], + page: false + }, {}, function(results) { assert.deepEqual(results, []); @@ -1221,7 +1224,12 @@ describe('Audit', function() { checked = 'options validated'; }; - a.run({ include: [fixture] }, {}, noop, isNotCalled); + a.run( + { include: [axe.utils.getFlattenedTree(fixture)[0]] }, + {}, + noop, + isNotCalled + ); assert.equal(checked, 'options validated'); }); From 7b5f32ba4651644cdb62e58458b2fff88e5f0b7a Mon Sep 17 00:00:00 2001 From: Michael Date: Fri, 25 Feb 2022 12:33:14 -0500 Subject: [PATCH 09/20] ci: fix go release script (#3397) --- .circleci/config.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.circleci/config.yml b/.circleci/config.yml index 3da86ceb61..872d135dd8 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -246,7 +246,7 @@ jobs: # Create a GitHub release. github_release: docker: - - image: circleci/golang:1.10 + - image: cimg/go:1.17.1 steps: - checkout - run: go get gopkg.in/aktau/github-release.v0 From 650e5037dc1f8908897e834ee1ab3aa8e87ac1e7 Mon Sep 17 00:00:00 2001 From: Steven Lambert <2433219+straker@users.noreply.github.com> Date: Mon, 28 Feb 2022 09:09:32 -0700 Subject: [PATCH 10/20] fix(deprecatedrole,color-contrast): fix message to properly include deprecated role, improve color-contrast pass messages (#3387) * fix(deprecatedrole): fix message to properly include deprecated role * add tests * ie11 --- lib/checks/aria/deprecatedrole.json | 2 +- lib/checks/color/color-contrast-evaluate.js | 2 ++ lib/checks/color/color-contrast.json | 5 ++++- test/testutils.js | 25 +++++++++++++++++++++ 4 files changed, 32 insertions(+), 2 deletions(-) diff --git a/lib/checks/aria/deprecatedrole.json b/lib/checks/aria/deprecatedrole.json index 8c9aee4c9c..af199beaa9 100644 --- a/lib/checks/aria/deprecatedrole.json +++ b/lib/checks/aria/deprecatedrole.json @@ -5,7 +5,7 @@ "impact": "minor", "messages": { "pass": "ARIA role is not deprecated", - "fail": "The role used is deprecated: ${data.values}" + "fail": "The role used is deprecated: ${data}" } } } diff --git a/lib/checks/color/color-contrast-evaluate.js b/lib/checks/color/color-contrast-evaluate.js index f9cac15097..e10b0bc6bf 100644 --- a/lib/checks/color/color-contrast-evaluate.js +++ b/lib/checks/color/color-contrast-evaluate.js @@ -30,6 +30,7 @@ export default function colorContrastEvaluate(node, options, virtualNode) { } = options; if (!isVisible(node, false)) { + this.data({ messageKey: 'hidden' }); return true; } @@ -104,6 +105,7 @@ export default function colorContrastEvaluate(node, options, virtualNode) { (typeof minThreshold === 'number' && contrast < minThreshold) || (typeof maxThreshold === 'number' && contrast > maxThreshold) ) { + this.data({ contrastRatio: contrast }); return true; } diff --git a/lib/checks/color/color-contrast.json b/lib/checks/color/color-contrast.json index 67fdd6c286..89ba8ff956 100644 --- a/lib/checks/color/color-contrast.json +++ b/lib/checks/color/color-contrast.json @@ -22,7 +22,10 @@ "metadata": { "impact": "serious", "messages": { - "pass": "Element has sufficient color contrast of ${data.contrastRatio}", + "pass": { + "default": "Element has sufficient color contrast of ${data.contrastRatio}", + "hidden": "Element is hidden" + }, "fail": { "default": "Element has insufficient color contrast of ${data.contrastRatio} (foreground color: ${data.fgColor}, background color: ${data.bgColor}, font size: ${data.fontSize}, font weight: ${data.fontWeight}). Expected contrast ratio of ${data.expectedContrastRatio}", "fgOnShadowColor": "Element has insufficient color contrast of ${data.contrastRatio} between the foreground and shadow color (foreground color: ${data.fgColor}, text-shadow color: ${data.shadowColor}, font size: ${data.fontSize}, font weight: ${data.fontWeight}). Expected contrast ratio of ${data.expectedContrastRatio}", diff --git a/test/testutils.js b/test/testutils.js index fdc5a8741d..d049de80b8 100644 --- a/test/testutils.js +++ b/test/testutils.js @@ -483,6 +483,31 @@ testUtils.getCheckEvaluate = function getCheckEvaluate(checkId, testOptions) { result + noneCheckMessage ); + + var message = axe.utils.processMessage( + messages[key][messageKey], + this._data + ); + assert.isTrue( + message.indexOf('${') === -1, + 'Data object missing properties for ' + + key + + ' message key "' + + messageKey + + '": "' + + message + + '"' + ); + } else { + var message = axe.utils.processMessage(messages[key], this._data); + assert.isTrue( + message.indexOf('${') === -1, + 'Data object missing properties for ' + + key + + ' message: "' + + message + + '"' + ); } } From 6cf096449660a12d7ba885c3f721f35a6cf35f18 Mon Sep 17 00:00:00 2001 From: Steven Lambert <2433219+straker@users.noreply.github.com> Date: Tue, 1 Mar 2022 08:06:59 -0700 Subject: [PATCH 11/20] tests: fix flakey firefox test (#3398) --- .../full/isolated-env/isolated-env.js | 17 ++++++++++++++--- 1 file changed, 14 insertions(+), 3 deletions(-) diff --git a/test/integration/full/isolated-env/isolated-env.js b/test/integration/full/isolated-env/isolated-env.js index 0359b9d46c..1c054808e4 100644 --- a/test/integration/full/isolated-env/isolated-env.js +++ b/test/integration/full/isolated-env/isolated-env.js @@ -40,7 +40,19 @@ describe('isolated-env test', function() { return this.skip(); } - axe.testUtils.awaitNestedLoad(function() { + var nestedLoadPromise = new Promise(function(resolve) { + axe.testUtils.awaitNestedLoad(resolve); + }); + + var isloadedPromise = new Promise(function(resolve) { + window.addEventListener('message', function(msg) { + if (msg.data === 'axe-loaded') { + resolve(); + } + }); + }); + + Promise.all([nestedLoadPromise, isloadedPromise]).then(function() { win = fixture.querySelector('#isolated-frame').contentWindow; var focusableFrame = fixture.querySelector('#focusable-iframe'); @@ -53,8 +65,7 @@ describe('isolated-env test', function() { size: { width: 10, height: 10 } }); - var promises = [axe.runPartial(), iframePromise]; - Promise.all(promises) + Promise.all([axe.runPartial(), iframePromise]) .then(function(r) { origPartialResults = r; done(); From 9db7c63c960f3a4a5a1df36c9cba4228cdd1252e Mon Sep 17 00:00:00 2001 From: Masafumi Max NAKANE Date: Mon, 7 Mar 2022 20:46:24 +0900 Subject: [PATCH 12/20] chore(i18n): update Japanese translation (#3319) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * chore(i18n): update Japanese translation grunt translate --lang=ja based on the develop branch as of 2021-12-03 Add ja translation for checks/aria-errormessage/fail/hidden Add ja translation for checks/aria-errormessage/incomplete/idrefs add ja translation for checks/aria-level/{pass,fail} Add ja translation for checks/aria-valid-attr-value/incomplete/idrefs Add ja transation for checks/deprecatedrole/{pass,fail} Add ja translation for checks/fallbackrole/incomplete add ja translation for checks/p-as-heading/incomplete Add ja translation for checks/color-contrast-enhanced/fail/* Add ja translation for checks/color-contrast/fail/* * Update locales/ja.json role -> ロール Co-authored-by: Kiyochika Nakamura * Update locales/ja.json role -> ロール Co-authored-by: Kiyochika Nakamura * Update locales/ja.json 陰 -> 影 Co-authored-by: Kiyochika Nakamura * Update locales/ja.json 陰 -> 影 Co-authored-by: Kiyochika Nakamura * Add ja translation for checks/no-focusable-content * Make checks/aria-valid-attr-value/incomplete/noId consistent with ./idrefs * Remove unnecessary whitespaces from checks/aria-valid-attr-value/incomplete/{noId,idrefs} Co-authored-by: Kiyochika Nakamura --- locales/ja.json | 54 +++++++++++++++++++++++++++++++++++-------------- 1 file changed, 39 insertions(+), 15 deletions(-) diff --git a/locales/ja.json b/locales/ja.json index a7bcaec24b..bd90933079 100644 --- a/locales/ja.json +++ b/locales/ja.json @@ -113,14 +113,14 @@ "description": "各ページに少なくとも1つ、ユーザーがナビゲーション部分をスキップして直接本文へ移動できるメカニズムが存在することを確認します", "help": "ページには繰り返されるブロックをスキップする手段が存在しなければなりません" }, - "color-contrast": { - "description": "前景色と背景色のコントラストがWCAG 2のAAコントラスト比のしきい値を満たすことを確認します", - "help": "要素には十分な色のコントラストがなければなりません" - }, "color-contrast-enhanced": { "description": "前景色と背景色のコントラストがWCAG 2のAAAコントラスト比のしきい値を満たすことを確認します", "help": "要素には十分な色のコントラストがなければなりません" }, + "color-contrast": { + "description": "前景色と背景色のコントラストがWCAG 2のAAコントラスト比のしきい値を満たすことを確認します", + "help": "要素には十分な色のコントラストがなければなりません" + }, "css-orientation-lock": { "description": "コンテンツが特定のディスプレイの向きに固定されていないこと、およびコンテンツがすべてのディスプレイの向きで操作可能なことを確認します", "help": "ディスプレイの向きを固定するためにCSSメディアクエリーは使用されていません" @@ -420,17 +420,23 @@ "pass": "サポートされているaria-errormessageの技術を使用しています", "fail": { "singular": "aria-errormessage の値 `${data.values}` はメッセージを通知する方法を使用しなければなりません (例えば、aria-live、aria-describedby、role=alert等)", - "plural": "aria-errormessage の値 `${data.values}` はメッセージを通知する方法を使用しなければなりません (例えば、aria-live、aria-describedby、role=alert等)" + "plural": "aria-errormessage の値 `${data.values}` はメッセージを通知する方法を使用しなければなりません (例えば、aria-live、aria-describedby、role=alert等)", + "hidden": "aria-errormessage の値 `${data.values}` は隠れている要素を参照することはできません" }, "incomplete": { "singular": "aria-errormessageの値 `${data.values}` は存在する要素を参照していることを確認しましょう", - "plural": "aria-errormessageの値 `${data.values}` は存在する要素を参照していることを確認しましょう" + "plural": "aria-errormessageの値 `${data.values}` は存在する要素を参照していることを確認しましょう", + "idrefs": "aria-errormessage 要素がページ上に存在するかどうか判定できません: ${data.values}" } }, "aria-hidden-body": { "pass": "ドキュメント本体にaria-hidden属性は存在していません", "fail": "aria-hidden=trueはドキュメント本体に存在してはなりません" }, + "aria-level": { + "pass": "aria-level の値は有効です", + "incomplete": "6より大きい aria-level の値は、どのスクリーンリーダーとブラウザーの組み合わせでもサポートされていません" + }, "aria-prohibited-attr": { "pass": "ARIA属性は使用できます", "fail": "ARIA属性は使用できません: ${data.values}", @@ -477,8 +483,9 @@ "plural": "無効なARIA属性値です: ${data.values}" }, "incomplete": { - "noId": "ARIA 属性の要素IDがページ上に存在しません: ${data.needsReview}", - "ariaCurrent": "ARIA 属性値が無効であるため、\"aria-current=true\" として扱われます: ${data.needsReview}" + "noId": "ARIA属性で指定されている要素のIDがページ上に存在しません: ${data.needsReview}", + "ariaCurrent": "ARIA 属性値が無効であるため、\"aria-current=true\" として扱われます: ${data.needsReview}", + "idrefs": "ARIA属性で指定されている要素のIDがページ上に存在するかどうか判定できません: ${data.needsReview}" } }, "aria-valid-attr": { @@ -488,9 +495,14 @@ "plural": "無効なARIA属性名です: ${data.values}" } }, + "deprecatedrole": { + "pass": "推奨されていないARIAロールではありません", + "fail": "非推奨のロールが使用されています: ${data.values}" + }, "fallbackrole": { "pass": "1つのロール値のみ使用されています", - "fail": "古いブラウザーではフォールバックロールがサポートされていないため、ロール値は1つのみ使用します" + "fail": "古いブラウザーではフォールバックロールがサポートされていないため、ロール値は1つのみ使用します", + "incomplete": "'presentation' と 'none' のロールは同義なので、どちらか一方のみを使用します。" }, "has-global-aria-attribute": { "pass": { @@ -526,9 +538,13 @@ "pass": "要素はフォーカス順序に含まれる要素に対して有効なセマンティクスを持ちます", "fail": "要素はフォーカス順序に含まれる要素に対して無効なセマンティクスを持ちます" }, - "color-contrast": { + "color-contrast-enhanced": { "pass": "要素には${data.contrastRatio}の十分なコントラスト比があります", - "fail": "要素のコントラスト比が不十分です ${data.contrastRatio}(前景色: ${data.fgColor}、背景色: ${data.bgColor}、フォントサイズ: ${data.fontSize}、フォントの太さ: ${data.fontWeight})。コントラスト比${data.expectedContrastRatio}を必要とします", + "fail": { + "default": "要素のコントラスト比が不十分です ${data.contrastRatio}(前景色: ${data.fgColor}、背景色: ${data.bgColor}、フォントサイズ: ${data.fontSize}、フォントの太さ: ${data.fontWeight})。コントラスト比${data.expectedContrastRatio}を必要とします", + "fgOnShadowColor": "要素の前景色と影(text-shadow)の色のコントラスト比が不十分です ${data.contrastRatio}(前景色: ${data.fgColor}、影(text-shadow)の色: ${data.shadowColor}、フォントサイズ: ${data.fontSize}、フォントの太さ: ${data.fontWeight})。コントラスト比${data.expectedContrastRatio}を必要とします", + "shadowOnBgColor": "要素の影(text-shadow)の色と背景色のコントラスト比が不十分です ${data.contrastRatio}(影(text-shadow)の色: ${data.shadowColor}、背景色: ${data.bgColor}、フォントサイズ: ${data.fontSize}、フォントの太さ: ${data.fontWeight})。コントラスト比${data.expectedContrastRatio}を必要とします" + }, "incomplete": { "default": "コントラスト比を判定できません", "bgImage": "背景画像のため、要素の背景色を判定できません", @@ -545,9 +561,13 @@ "pseudoContent": "擬似要素のため、要素の背景色を判定することができませんでした" } }, - "color-contrast-enhanced": { + "color-contrast": { "pass": "要素には${data.contrastRatio}の十分なコントラスト比があります", - "fail": "要素のコントラスト比が不十分です ${data.contrastRatio}(前景色: ${data.fgColor}、背景色: ${data.bgColor}、フォントサイズ: ${data.fontSize}、フォントの太さ: ${data.fontWeight})。コントラスト比${data.expectedContrastRatio}を必要とします", + "fail": { + "default": "要素のコントラスト比が不十分です ${data.contrastRatio}(前景色: ${data.fgColor}、背景色: ${data.bgColor}、フォントサイズ: ${data.fontSize}、フォントの太さ: ${data.fontWeight})。コントラスト比${data.expectedContrastRatio}を必要とします", + "fgOnShadowColor": "要素の前景色と影(text-shadow)の色のコントラスト比が不十分です ${data.contrastRatio}(前景色: ${data.fgColor}、影(text-shadow)の色: ${data.shadowColor}、フォントサイズ: ${data.fontSize}、フォントの太さ: ${data.fontWeight})。コントラスト比${data.expectedContrastRatio}を必要とします", + "shadowOnBgColor": "要素の影(text-shadow)の色と背景色のコントラスト比が不十分です ${data.contrastRatio}(影(text-shadow)の色: ${data.shadowColor}、背景色: ${data.bgColor}、フォントサイズ: ${data.fontSize}、フォントの太さ: ${data.fontWeight})。コントラスト比${data.expectedContrastRatio}を必要とします" + }, "incomplete": { "default": "コントラスト比を判定できません", "bgImage": "背景画像のため、要素の背景色を判定できません", @@ -624,7 +644,10 @@ }, "no-focusable-content": { "pass": "要素の子孫にフォーカス可能なものはありません", - "fail": "要素の子孫にフォーカス可能なものがあります", + "fail": { + "default": "要素の子孫にフォーカス可能なものがあります", + "notHidden": "インタラクティブなコントロールの内側の要素に負の tabindex を指定しても、('aria-hidden=true' が指定されている場合も)支援技術がその要素にフォーカスできないようにはなりません" + }, "incomplete": "要素に子孫があるか判定できませんでした" }, "page-has-heading-one": { @@ -789,7 +812,8 @@ }, "p-as-heading": { "pass": "

要素が見出しとしてスタイル付けされていません", - "fail": "スタイル付けされたp要素ではなく、見出し要素を使用すべきです" + "fail": "スタイル付けされたp要素ではなく、見出し要素を使用すべきです", + "incomplete": "

要素に見出しのスタイル付けがされているかどうか判定できません" }, "region": { "pass": "ページのすべてのコンテンツがランドマークに含まれています", From 8aa816a15fbd667ee2bf8256a984dcc8aa7c0392 Mon Sep 17 00:00:00 2001 From: Scott O'Hara Date: Mon, 7 Mar 2022 10:46:58 -0500 Subject: [PATCH 13/20] fix(html-elms): update role allowances for nav element (#3402) * update role allowances for nav element closes #3401 allows `none` and `presentation` role on `