From 6f5498ee8a2acb78846aa623773c7d1de19125e0 Mon Sep 17 00:00:00 2001 From: Michael <45568605+michael-siek@users.noreply.github.com> Date: Thu, 25 Feb 2021 20:54:56 -0500 Subject: [PATCH] refactor(cli): rewrite CLI to TS (#198) --- .circleci/config.yml | 2 +- .eslintignore | 3 +- packages/cli/.eslintrc.js | 9 +- packages/cli/README.md | 2 - packages/cli/axe-cli | 3 - packages/cli/index.js | 286 - packages/cli/lib/axe-test-urls.js | 110 - packages/cli/lib/index.js | 5 - packages/cli/lib/save-outcome.js | 31 - packages/cli/lib/utils.js | 80 - packages/cli/lib/webdriver.js | 38 - packages/cli/package-lock.json | 5387 ++++- packages/cli/package.json | 72 +- packages/cli/postinstall.js | 20 +- .../cli/{test/cli.js => src/bin/cli.test.ts} | 48 +- packages/cli/src/bin/cli.ts | 78 + packages/cli/src/bin/index.ts | 165 + .../lib/axe-test-urls.test.ts} | 52 +- packages/cli/src/lib/axe-test-urls.ts | 114 + packages/cli/src/lib/events.test.ts | 26 + packages/cli/src/lib/events.ts | 78 + packages/cli/src/lib/index.ts | 5 + packages/cli/src/lib/utils.test.ts | 109 + packages/cli/src/lib/utils.ts | 132 + .../lib/webdriver.test.ts} | 63 +- packages/cli/src/lib/webdriver.ts | 38 + packages/cli/src/testutils/axe-core@2.5.0.js | 18941 ++++++++++++++++ packages/cli/src/testutils/index.ts | 47 + packages/cli/{ => src}/testutils/simple.html | 0 packages/cli/src/types.ts | 39 + packages/cli/test/integrations.js | 73 - packages/cli/test/save-outcome.js | 23 - packages/cli/test/testpage.html | 27 - packages/cli/testutils/axe-core@2.5.0.js | 8654 ------- packages/cli/testutils/index.js | 11 - packages/cli/tsconfig.json | 15 + 36 files changed, 25109 insertions(+), 9677 deletions(-) delete mode 100755 packages/cli/axe-cli delete mode 100755 packages/cli/index.js delete mode 100644 packages/cli/lib/axe-test-urls.js delete mode 100644 packages/cli/lib/index.js delete mode 100644 packages/cli/lib/save-outcome.js delete mode 100644 packages/cli/lib/utils.js delete mode 100644 packages/cli/lib/webdriver.js mode change 100755 => 100644 packages/cli/postinstall.js rename packages/cli/{test/cli.js => src/bin/cli.test.ts} (90%) create mode 100644 packages/cli/src/bin/cli.ts create mode 100644 packages/cli/src/bin/index.ts rename packages/cli/{test/axe-test-urls.js => src/lib/axe-test-urls.test.ts} (59%) create mode 100644 packages/cli/src/lib/axe-test-urls.ts create mode 100644 packages/cli/src/lib/events.test.ts create mode 100644 packages/cli/src/lib/events.ts create mode 100644 packages/cli/src/lib/index.ts create mode 100644 packages/cli/src/lib/utils.test.ts create mode 100644 packages/cli/src/lib/utils.ts rename packages/cli/{test/webdriver.js => src/lib/webdriver.test.ts} (54%) create mode 100644 packages/cli/src/lib/webdriver.ts create mode 100644 packages/cli/src/testutils/axe-core@2.5.0.js create mode 100644 packages/cli/src/testutils/index.ts rename packages/cli/{ => src}/testutils/simple.html (100%) create mode 100644 packages/cli/src/types.ts delete mode 100644 packages/cli/test/integrations.js delete mode 100644 packages/cli/test/save-outcome.js delete mode 100644 packages/cli/test/testpage.html delete mode 100644 packages/cli/testutils/axe-core@2.5.0.js delete mode 100644 packages/cli/testutils/index.js create mode 100644 packages/cli/tsconfig.json diff --git a/.circleci/config.yml b/.circleci/config.yml index c958371a..72b9cadd 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -113,7 +113,7 @@ jobs: - restore_dependency_cache # Re-build packages, ensuring packages/webdriverjs/dist exists. - run: npx lerna run prepare - - run: npm run test --prefix=packages/cli + - run: npm run coverage --prefix=packages/cli puppeteer: <<: *defaults diff --git a/.eslintignore b/.eslintignore index e5bc2d63..c3ec6874 100644 --- a/.eslintignore +++ b/.eslintignore @@ -1 +1,2 @@ -packages/cli/testutils/* \ No newline at end of file +packages/cli/src/testutils/* +packages/cli/src/**/**/*.test.ts \ No newline at end of file diff --git a/packages/cli/.eslintrc.js b/packages/cli/.eslintrc.js index c9c77971..2f007dea 100644 --- a/packages/cli/.eslintrc.js +++ b/packages/cli/.eslintrc.js @@ -1,12 +1,17 @@ module.exports = { rules: { - '@typescript-eslint/no-empty-function': 0 + '@typescript-eslint/no-empty-function': 'off', + '@typescript-eslint/ban-ts-ignore': 'off', + '@typescript-eslint/explicit-function-return-type': 'off' }, overrides: [ { - files: 'test/**/*.js', + files: '**/**/*.test.ts', env: { mocha: true + }, + rules: { + '@typescript-eslint/no-explicit-any': 'off' } } ] diff --git a/packages/cli/README.md b/packages/cli/README.md index 6b070773..5d0ad846 100644 --- a/packages/cli/README.md +++ b/packages/cli/README.md @@ -26,8 +26,6 @@ You can run multiple pages at once, simply add more URLs to the command. Keep in axe www.deque.com, dequeuniversity.com ``` -**Note:** If you are having difficulty with the color scheme, use `--no-color` to disable text styles. - ## Running specific rules You can use the `--rules` flag to set which rules you wish to run, or you can use `--tags` to tell axe to run all rules that have that specific tag. For example: diff --git a/packages/cli/axe-cli b/packages/cli/axe-cli deleted file mode 100755 index 111ce84a..00000000 --- a/packages/cli/axe-cli +++ /dev/null @@ -1,3 +0,0 @@ -#!/usr/bin/env node - -require('./index') \ No newline at end of file diff --git a/packages/cli/index.js b/packages/cli/index.js deleted file mode 100755 index fefc666d..00000000 --- a/packages/cli/index.js +++ /dev/null @@ -1,286 +0,0 @@ -'use strict'; - -const program = require('commander'); -const colors = require('colors'); -const link = colors.underline.blue; -const error = colors.red.bold; -const version = require('./package.json').version; -const axeTestUrls = require('./lib/axe-test-urls'); -const saveOutcome = require('./lib/save-outcome'); -const utils = require('./lib/utils'); -const { startDriver } = require('./lib/webdriver'); - -program - .version(version) - .usage(' [options]') - .option( - '-i, --include ', - 'CSS selector of included elements, comma separated', - utils.splitList - ) - .option( - '-e, --exclude ', - 'CSS selector of included elements, comma separated', - utils.splitList - ) - .option( - '-r, --rules ', - 'IDs of rules to run, comma separated', - utils.splitList - ) - .option( - '-t, --tags ', - 'Tags of rules to run, comma separated', - utils.splitList - ) - .option( - '-l, --disable ', - 'IDs of rules to disable, comma separated', - utils.splitList - ) - .option( - '-b, --browser [browser-name]', - 'Which browser to run (Webdriver required)' - ) - .option( - '-s, --save [filename]', - 'Save the output as a JSON file. Filename is optional' - ) - .option( - '-j, --stdout', - 'Output results to STDOUT and silence all other output' - ) - .option('-d, --dir ', 'Output directory') - .option('-a, --axe-source ', 'Path to axe.js file') - .option('-q, --exit', 'Exit with `1` failure code if any a11y tests fail') - .option( - '--load-delay ', - 'Set how much time (milliseconds) axe will wait after page load before running the audit (default: 0)', - 0 - ) - .option( - '--timeout ', - 'Set how much time (seconds) axe has to run (default: 90)', - 90 - ) - .option('--timer', 'Log the time it takes to run') - .option('--show-errors', 'Display the full error stack') - // TODO: Replace this with a reporter option, this required adding - // a reporter option to axe-webdriverjs - .option('--no-reporter', 'Turn the CLI reporter off') - .option( - '--chrome-options [options]', - 'Options to provide to headless Chrome', - utils.splitList - ) - .option( - '-v, --verbose', - 'Output metadata like test tool name, version and environment' - ) - .option( - '--chromedriver-path ', - 'Absolute path to the desired chromedriver executable' - ) - .parse(process.argv); - -const silentMode = !!program.stdout; - -program.browser = utils.parseBrowser(program.browser); -program.axeSource = utils.getAxeSource(program.axeSource); -program.driver = startDriver(program); - -if (!program.axeSource) { - console.error(error('Unable to find the axe-core source file.')); - return; -} - -if (program.chromeOptions) { - if (program.browser !== 'chrome-headless') { - console.error( - error('You may only provide --chrome-options when using headless chrome') - ); - process.exit(2); - } - - program.chromeOptions = program.chromeOptions.map(option => `--${option}`); -} - -let cliReporter; -if (program.reporter === false || silentMode) { - cliReporter = function () {}; -} else { - cliReporter = function (...args) { - console.log(...args); - }; -} - -// Try to match the version of axe that's used -const axeVersion = utils.getAxeVersion(program.axeSource); - -if (!silentMode) { - // Setup axe with the appropriate config - console.log( - colors.bold('Running axe-core ' + axeVersion + ' in ' + program.browser) - ); -} - -// Make valid URLs of all pages -const urls = program.args.map(utils.parseUrl); - -if (urls.length === 0) { - console.error(error('No url was specified. Check `axe -h` for help\n')); - process.exitCode = 1; - return; -} - -// Run axe inside the pages -axeTestUrls(urls, program, { - /** - * Start a timer with a message - */ - startTimer: function (message) { - console.time(message); - }, - - /** - * End timer with a message - */ - endTimer: function (message) { - console.timeEnd(message); - }, - - /** - * Message of how long to wait after a page is loaded - */ - - waitingMessage: function (loadDelayTime) { - console.log( - 'Waiting for ' + loadDelayTime + ' milliseconds after page load...' - ); - }, - - /** - * Inform the user what page is tested - */ - onTestStart: function (url) { - if (silentMode) { - return; - } - - console.log( - colors.bold('\nTesting ' + link(url)) + - ' ... please wait, this may take a minute.' - ); - if (program.timer) { - console.time('Total test time'); - } - }, - - /** - * Put the result in the console - */ - onTestComplete: function logResults(results) { - const { violations, testEngine, testEnvironment, testRunner } = results; - - if (violations.length === 0) { - cliReporter(colors.green(' 0 violations found!')); - return; - } - - const issueCount = violations.reduce((count, violation) => { - cliReporter( - '\n' + - error(' Violation of %j with %d occurrences!\n') + - ' %s. Correct invalid elements at:\n' + - violation.nodes - .map(node => ' - ' + utils.selectorToString(node.target) + '\n') - .join('') + - ' For details, see: %s', - violation.id, - violation.nodes.length, - violation.description, - link(violation.helpUrl.split('?')[0]) - ); - return count + violation.nodes.length; - }, 0); - - cliReporter(error('\n%d Accessibility issues detected.'), issueCount); - - if (program.verbose) { - const metadata = { - 'Test Runner': testRunner, - 'Test Engine': testEngine, - 'Test Environment': testEnvironment - }; - cliReporter(`\n${JSON.stringify(metadata, null, 2)}`); - } - - if (program.exit) { - process.exitCode = 1; - } - } -}) - .then(function (outcome) { - if (silentMode) { - process.stdout.write(JSON.stringify(outcome, null, 2)); - return; - } - - console.log(''); - if (program.timer) { - console.timeEnd('Total test time'); - } - // All results are in, quit the browser, and give a final report - if (outcome.length > 1) { - console.log( - colors.bold.underline('Testing complete of %d pages\n'), - outcome.length - ); - } else if (program.timer) { - console.log(''); - } - - // Save the outcome - if (program.save || program.dir) { - return saveOutcome(outcome, program.save, program.dir) - .then(fileName => { - console.log('Saved file at', fileName, '\n'); - }) - .catch(err => { - console.error(error('Unable to save file!\n') + err); - process.exitCode = 1; - return Promise.resolve(); - }); - } else { - return Promise.resolve(); - } - }) - .then(() => { - if (silentMode) { - return; - } - // Give a notification that 0 issues in axe doesn't mean perfect a11y - console.log( - colors.italic( - 'Please note that only 20% to 50% of all accessibility ' + - 'issues can automatically be detected. \nManual testing is ' + - 'always required. For more information see:\n%s\n' - ), - link('https://dequeuniversity.com/curriculum/courses/testingmethods') - ); - }) - .catch(e => { - console.error(' '); - if (!program['show-errors']) { - console.error(error('An error occurred while testing this page.')); - } else { - console.error(error('Error: %j \n $s'), e.message, e.stack); - } - - console.error( - 'Please report the problem to: ' + - link('https://github.com/dequelabs/axe-cli/issues/') + - '\n' - ); - process.exit(1); - }); diff --git a/packages/cli/lib/axe-test-urls.js b/packages/cli/lib/axe-test-urls.js deleted file mode 100644 index bc797e45..00000000 --- a/packages/cli/lib/axe-test-urls.js +++ /dev/null @@ -1,110 +0,0 @@ -'use strict'; - -const WebDriver = require('selenium-webdriver'); -const AxeBuilder = require('@axe-core/webdriverjs'); - -async function testPages(urls, config, events) { - //selenium.dev/selenium/docs/api/javascript/module/selenium-webdriver/index_exports_ThenableWebDriver.html - // We tried to use the non-thenable webdriver and failed the unit test for startDriver() even after we tried to make it work - const driver = await config.driver; - // End of the line, no more page left - if (urls.length === 0) { - driver.quit(); - return Promise.resolve([]); - } - return new Promise((resolve, reject) => { - // Grab the first item on the URL list - const currentUrl = urls[0].replace(/[,;]$/, ''); - - if (events.onTestStart) { - events.onTestStart(currentUrl); - } - if (config.timer) { - events.startTimer('page load time'); - } - - driver - .get(currentUrl) - .then(function () { - // https://github.com/vercel/pkg/issues/676 - // we need to pass a string vs a function so we manually stringified the function - return driver.executeAsyncScript(` - const callback = arguments[arguments.length - 1]; - const script = document.createElement('script'); - script.innerHTML = 'document.documentElement.classList.add("deque-axe-is-ready");' - document.documentElement.appendChild(script); - callback(); - `); - }) - .then(function () { - return driver.wait( - WebDriver.until.elementsLocated( - WebDriver.By.css('.deque-axe-is-ready') - ) - ); - }) - .then(() => { - if (config.timer) { - events.startTimer('page load time'); - } - - if (config.loadDelay > 0) { - events.waitingMessage(config.loadDelay); - } - return new Promise(function (resolve) { - setTimeout(resolve, config.loadDelay); - }); - }) - .then(() => { - // Set everything up - const axe = new AxeBuilder(driver, config.axeSource); - - if (Array.isArray(config.include)) { - config.include.forEach(include => axe.include(include)); - } - if (Array.isArray(config.exclude)) { - config.exclude.forEach(exclude => axe.exclude(exclude)); - } - - // Can not use withTags and withRules together - if (config.tags) { - axe.withTags(config.tags); - } else if (config.rules) { - axe.withRules(config.rules); - } - if (config.disable) { - axe.disableRules(config.disable); - } - if (config.timer) { - events.startTimer('axe-core execution time'); - } - - // Run axe - axe.analyze(function (err, results) { - if (config.timer) { - events.endTimer('axe-core execution time'); - } - - if (err) { - return reject(err); - } - - // Notify about the update - if (events.onTestComplete) { - events.onTestComplete(results); - } - - // Move to the next item - testPages(urls.slice(1), config, events).then(out => { - resolve([results].concat(out)); - }); - }); - }) - .catch(e => { - driver.quit(); - reject(e); - }); - }); -} - -module.exports = testPages; diff --git a/packages/cli/lib/index.js b/packages/cli/lib/index.js deleted file mode 100644 index 07a0ae8c..00000000 --- a/packages/cli/lib/index.js +++ /dev/null @@ -1,5 +0,0 @@ -const testPages = require('./axe-test-urls'); -const utils = require('./utils'); -const saveOutcome = require('./save-outcome') - -module.exports = { saveOutcome, testPages, utils }; diff --git a/packages/cli/lib/save-outcome.js b/packages/cli/lib/save-outcome.js deleted file mode 100644 index 840f0de4..00000000 --- a/packages/cli/lib/save-outcome.js +++ /dev/null @@ -1,31 +0,0 @@ -'use strict'; -const fs = require('fs'); -const path = require('path'); - -module.exports = function saveOutcome(outcome, fileName, dir) { - return new Promise((resolve, reject) => { - if (typeof fileName !== 'string') { - fileName = 'axe-results-' + Date.now() + '.json'; - } - - if (typeof dir !== 'string') { - dir = process.cwd(); - } else if (!path.isAbsolute(dir)) { - dir = path.join(process.cwd(), dir); - } - - const filePath = path.join(dir, fileName); - - if (!fs.existsSync(filePath)) { - fs.mkdirSync(dir, { recursive: true }); - } - - fs.writeFile(filePath, JSON.stringify(outcome, null, ' '), 'utf8', err => { - if (err) { - reject(err); - } else { - resolve(filePath); - } - }); - }); -}; diff --git a/packages/cli/lib/utils.js b/packages/cli/lib/utils.js deleted file mode 100644 index 65c629bc..00000000 --- a/packages/cli/lib/utils.js +++ /dev/null @@ -1,80 +0,0 @@ -module.exports.parseUrl = function parseUrl(url) { - if (!/[a-z]+:\/\//.test(url)) { - return 'http://' + url; - } - return url; -}; - -module.exports.parseBrowser = function parseBrowser(browser) { - if (!browser) { - return 'chrome-headless'; - } - - const l = browser.length; - switch (browser.toLowerCase()) { - case 'ff': - case 'firefox'.substr(0, l): - case 'gecko'.substr(0, l): - case 'marionette'.substr(0, l): - return 'firefox'; - - case 'chrome'.substr(0, l): - return 'chrome'; - - case 'ie': - case 'explorer'.substr(0, l): - case 'internetexplorer'.substr(0, l): - case 'internet_explorer'.substr(0, l): - case 'internet-explorer'.substr(0, l): - return 'ie'; - - case 'safari'.substr(0, l): - return 'safari'; - - case 'edge'.substr(0, l): - case 'microsoftedge'.substr(0, l): - return 'MicrosoftEdge'; - - default: - throw new Error('Unknown browser ' + browser); - } -}; - -module.exports.getAxeSource = function getAxeSource(axePath) { - const path = require('path'); - const fs = require('fs'); - // Abort if axePath should exist, and it isn't - if (axePath && !fs.existsSync(axePath)) { - return; - // Look for axe in CWD - } else if (!axePath) { - axePath = path.join(process.cwd(), './axe.js'); - } - - if (!fs.existsSync(axePath)) { - // Look for axe in CDW ./node_modules - axePath = path.join(process.cwd(), './node_modules/axe-core/axe.js'); - } - if (!fs.existsSync(axePath)) { - // if all else fails, use the locally installed axe - axePath = path.join(__dirname, '../node_modules/axe-core/axe.js'); - } - - return fs.readFileSync(axePath, 'utf8'); -}; - -module.exports.getAxeVersion = function getAxeVersion(source) { - const match = source.match(/\.version\s*=\s'([^']+)'/); - return match ? match[1] : 'unknown version'; -}; - -module.exports.splitList = function (val) { - return val.split(/[,;]/).map(str => str.trim()); -}; - -module.exports.selectorToString = function (selectors, separator) { - separator = separator || ' '; - return selectors - .reduce((prev, curr) => prev.concat(curr), []) - .join(separator); -}; diff --git a/packages/cli/lib/webdriver.js b/packages/cli/lib/webdriver.js deleted file mode 100644 index 7ecc75e4..00000000 --- a/packages/cli/lib/webdriver.js +++ /dev/null @@ -1,38 +0,0 @@ -const chromedriver = require('chromedriver'); -const { Builder, Capabilities } = require('selenium-webdriver'); -const chrome = require('selenium-webdriver/chrome'); - -async function startDriver(config) { - const scriptTimeout = (config.timeout || 20) * 1000.0; - let builder; - - if (config.browser === 'chrome-headless') { - // Tell selenium use the driver in node_modules - const service = new chrome.ServiceBuilder( - config.chromedriverPath || chromedriver.path - ).build(); - chrome.setDefaultService(service); - - const args = ['--headless']; - if (config.chromeOptions) { - args.push(...config.chromeOptions); - } - const chromeCapabilities = Capabilities.chrome(); - chromeCapabilities.set('chromeOptions', { args }); - - builder = new Builder() - .forBrowser('chrome') - .withCapabilities(chromeCapabilities); - } else { - builder = new Builder().forBrowser(config.browser); - } - // Launch a browser - config.builder = builder; - const driver = builder.build(); - await driver.manage().setTimeouts({ script: scriptTimeout }) - return driver; -} - -module.exports = { - startDriver -}; diff --git a/packages/cli/package-lock.json b/packages/cli/package-lock.json index c824622d..15df4527 100644 --- a/packages/cli/package-lock.json +++ b/packages/cli/package-lock.json @@ -1,9 +1,3793 @@ { "name": "@axe-core/cli", "version": "4.1.1", - "lockfileVersion": 1, + "lockfileVersion": 2, "requires": true, + "packages": { + "": { + "name": "@axe-core/cli", + "version": "4.1.1", + "license": "MPL-2.0", + "dependencies": { + "axe-core": "^4.1.2", + "chromedriver": "latest", + "colors": "^1.4.0", + "commander": "^7.1.0", + "selenium-webdriver": "^3.6.0" + }, + "bin": { + "axe": "axe-cli" + }, + "devDependencies": { + "@types/chai": "^4.2.15", + "@types/chromedriver": "^81.0.0", + "@types/mocha": "^8.2.1", + "@types/selenium-webdriver": "^4.0.11", + "chai": "^4.3.0", + "execa": "^5.0.0", + "mocha": "^8.3.0", + "nyc": "^15.1.0", + "rimraf": "^3.0.2", + "tempy": "^1.0.0", + "ts-node": "^9.1.1", + "typescript": "^4.1.5" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@babel/code-frame": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.12.13.tgz", + "integrity": "sha512-HV1Cm0Q3ZrpCR93tkWOYiuYIgLxZXZFVG2VgK+MBWjUqZTundupbfx2aXarXuw5Ko5aMcjtJgbSs4vUGBS5v6g==", + "dev": true, + "dependencies": { + "@babel/highlight": "^7.12.13" + } + }, + "node_modules/@babel/core": { + "version": "7.12.17", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.12.17.tgz", + "integrity": "sha512-V3CuX1aBywbJvV2yzJScRxeiiw0v2KZZYYE3giywxzFJL13RiyPjaaDwhDnxmgFTTS7FgvM2ijr4QmKNIu0AtQ==", + "dev": true, + "dependencies": { + "@babel/code-frame": "^7.12.13", + "@babel/generator": "^7.12.17", + "@babel/helper-module-transforms": "^7.12.17", + "@babel/helpers": "^7.12.17", + "@babel/parser": "^7.12.17", + "@babel/template": "^7.12.13", + "@babel/traverse": "^7.12.17", + "@babel/types": "^7.12.17", + "convert-source-map": "^1.7.0", + "debug": "^4.1.0", + "gensync": "^1.0.0-beta.1", + "json5": "^2.1.2", + "lodash": "^4.17.19", + "semver": "^5.4.1", + "source-map": "^0.5.0" + }, + "engines": { + "node": ">=6.9.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/babel" + } + }, + "node_modules/@babel/core/node_modules/semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", + "dev": true, + "bin": { + "semver": "bin/semver" + } + }, + "node_modules/@babel/generator": { + "version": "7.12.17", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.12.17.tgz", + "integrity": "sha512-DSA7ruZrY4WI8VxuS1jWSRezFnghEoYEFrZcw9BizQRmOZiUsiHl59+qEARGPqPikwA/GPTyRCi7isuCK/oyqg==", + "dev": true, + "dependencies": { + "@babel/types": "^7.12.17", + "jsesc": "^2.5.1", + "source-map": "^0.5.0" + } + }, + "node_modules/@babel/helper-function-name": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.12.13.tgz", + "integrity": "sha512-TZvmPn0UOqmvi5G4vvw0qZTpVptGkB1GL61R6lKvrSdIxGm5Pky7Q3fpKiIkQCAtRCBUwB0PaThlx9vebCDSwA==", + "dev": true, + "dependencies": { + "@babel/helper-get-function-arity": "^7.12.13", + "@babel/template": "^7.12.13", + "@babel/types": "^7.12.13" + } + }, + "node_modules/@babel/helper-get-function-arity": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.12.13.tgz", + "integrity": "sha512-DjEVzQNz5LICkzN0REdpD5prGoidvbdYk1BVgRUOINaWJP2t6avB27X1guXK1kXNrX0WMfsrm1A/ZBthYuIMQg==", + "dev": true, + "dependencies": { + "@babel/types": "^7.12.13" + } + }, + "node_modules/@babel/helper-member-expression-to-functions": { + "version": "7.12.17", + "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.12.17.tgz", + "integrity": "sha512-Bzv4p3ODgS/qpBE0DiJ9qf5WxSmrQ8gVTe8ClMfwwsY2x/rhykxxy3bXzG7AGTnPB2ij37zGJ/Q/6FruxHxsxg==", + "dev": true, + "dependencies": { + "@babel/types": "^7.12.17" + } + }, + "node_modules/@babel/helper-module-imports": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.12.13.tgz", + "integrity": "sha512-NGmfvRp9Rqxy0uHSSVP+SRIW1q31a7Ji10cLBcqSDUngGentY4FRiHOFZFE1CLU5eiL0oE8reH7Tg1y99TDM/g==", + "dev": true, + "dependencies": { + "@babel/types": "^7.12.13" + } + }, + "node_modules/@babel/helper-module-transforms": { + "version": "7.12.17", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.12.17.tgz", + "integrity": "sha512-sFL+p6zOCQMm9vilo06M4VHuTxUAwa6IxgL56Tq1DVtA0ziAGTH1ThmJq7xwPqdQlgAbKX3fb0oZNbtRIyA5KQ==", + "dev": true, + "dependencies": { + "@babel/helper-module-imports": "^7.12.13", + "@babel/helper-replace-supers": "^7.12.13", + "@babel/helper-simple-access": "^7.12.13", + "@babel/helper-split-export-declaration": "^7.12.13", + "@babel/helper-validator-identifier": "^7.12.11", + "@babel/template": "^7.12.13", + "@babel/traverse": "^7.12.17", + "@babel/types": "^7.12.17", + "lodash": "^4.17.19" + } + }, + "node_modules/@babel/helper-optimise-call-expression": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.12.13.tgz", + "integrity": "sha512-BdWQhoVJkp6nVjB7nkFWcn43dkprYauqtk++Py2eaf/GRDFm5BxRqEIZCiHlZUGAVmtwKcsVL1dC68WmzeFmiA==", + "dev": true, + "dependencies": { + "@babel/types": "^7.12.13" + } + }, + "node_modules/@babel/helper-replace-supers": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.12.13.tgz", + "integrity": "sha512-pctAOIAMVStI2TMLhozPKbf5yTEXc0OJa0eENheb4w09SrgOWEs+P4nTOZYJQCqs8JlErGLDPDJTiGIp3ygbLg==", + "dev": true, + "dependencies": { + "@babel/helper-member-expression-to-functions": "^7.12.13", + "@babel/helper-optimise-call-expression": "^7.12.13", + "@babel/traverse": "^7.12.13", + "@babel/types": "^7.12.13" + } + }, + "node_modules/@babel/helper-simple-access": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.12.13.tgz", + "integrity": "sha512-0ski5dyYIHEfwpWGx5GPWhH35j342JaflmCeQmsPWcrOQDtCN6C1zKAVRFVbK53lPW2c9TsuLLSUDf0tIGJ5hA==", + "dev": true, + "dependencies": { + "@babel/types": "^7.12.13" + } + }, + "node_modules/@babel/helper-split-export-declaration": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.12.13.tgz", + "integrity": "sha512-tCJDltF83htUtXx5NLcaDqRmknv652ZWCHyoTETf1CXYJdPC7nohZohjUgieXhv0hTJdRf2FjDueFehdNucpzg==", + "dev": true, + "dependencies": { + "@babel/types": "^7.12.13" + } + }, + "node_modules/@babel/helper-validator-identifier": { + "version": "7.12.11", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.12.11.tgz", + "integrity": "sha512-np/lG3uARFybkoHokJUmf1QfEvRVCPbmQeUQpKow5cQ3xWrV9i3rUHodKDJPQfTVX61qKi+UdYk8kik84n7XOw==", + "dev": true + }, + "node_modules/@babel/helpers": { + "version": "7.12.17", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.12.17.tgz", + "integrity": "sha512-tEpjqSBGt/SFEsFikKds1sLNChKKGGR17flIgQKXH4fG6m9gTgl3gnOC1giHNyaBCSKuTfxaSzHi7UnvqiVKxg==", + "dev": true, + "dependencies": { + "@babel/template": "^7.12.13", + "@babel/traverse": "^7.12.17", + "@babel/types": "^7.12.17" + } + }, + "node_modules/@babel/highlight": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.12.13.tgz", + "integrity": "sha512-kocDQvIbgMKlWxXe9fof3TQ+gkIPOUSEYhJjqUjvKMez3krV7vbzYCDq39Oj11UAVK7JqPVGQPlgE85dPNlQww==", + "dev": true, + "dependencies": { + "@babel/helper-validator-identifier": "^7.12.11", + "chalk": "^2.0.0", + "js-tokens": "^4.0.0" + } + }, + "node_modules/@babel/highlight/node_modules/ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, + "dependencies": { + "color-convert": "^1.9.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/@babel/highlight/node_modules/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, + "dependencies": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/@babel/highlight/node_modules/color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "dev": true, + "dependencies": { + "color-name": "1.1.3" + } + }, + "node_modules/@babel/highlight/node_modules/color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", + "dev": true + }, + "node_modules/@babel/highlight/node_modules/escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", + "dev": true, + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/@babel/highlight/node_modules/has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/@babel/highlight/node_modules/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, + "dependencies": { + "has-flag": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/@babel/parser": { + "version": "7.12.17", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.12.17.tgz", + "integrity": "sha512-r1yKkiUTYMQ8LiEI0UcQx5ETw5dpTLn9wijn9hk6KkTtOK95FndDN10M+8/s6k/Ymlbivw0Av9q4SlgF80PtHg==", + "dev": true, + "bin": { + "parser": "bin/babel-parser.js" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@babel/template": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.12.13.tgz", + "integrity": "sha512-/7xxiGA57xMo/P2GVvdEumr8ONhFOhfgq2ihK3h1e6THqzTAkHbkXgB0xI9yeTfIUoH3+oAeHhqm/I43OTbbjA==", + "dev": true, + "dependencies": { + "@babel/code-frame": "^7.12.13", + "@babel/parser": "^7.12.13", + "@babel/types": "^7.12.13" + } + }, + "node_modules/@babel/traverse": { + "version": "7.12.17", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.12.17.tgz", + "integrity": "sha512-LGkTqDqdiwC6Q7fWSwQoas/oyiEYw6Hqjve5KOSykXkmFJFqzvGMb9niaUEag3Rlve492Mkye3gLw9FTv94fdQ==", + "dev": true, + "dependencies": { + "@babel/code-frame": "^7.12.13", + "@babel/generator": "^7.12.17", + "@babel/helper-function-name": "^7.12.13", + "@babel/helper-split-export-declaration": "^7.12.13", + "@babel/parser": "^7.12.17", + "@babel/types": "^7.12.17", + "debug": "^4.1.0", + "globals": "^11.1.0", + "lodash": "^4.17.19" + } + }, + "node_modules/@babel/types": { + "version": "7.12.17", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.12.17.tgz", + "integrity": "sha512-tNMDjcv/4DIcHxErTgwB9q2ZcYyN0sUfgGKUK/mm1FJK7Wz+KstoEekxrl/tBiNDgLK1HGi+sppj1An/1DR4fQ==", + "dev": true, + "dependencies": { + "@babel/helper-validator-identifier": "^7.12.11", + "lodash": "^4.17.19", + "to-fast-properties": "^2.0.0" + } + }, + "node_modules/@istanbuljs/load-nyc-config": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@istanbuljs/load-nyc-config/-/load-nyc-config-1.1.0.tgz", + "integrity": "sha512-VjeHSlIzpv/NyD3N0YuHfXOPDIixcA1q2ZV98wsMqcYlPmv2n3Yb2lYP9XMElnaFVXg5A7YLTeLu6V84uQDjmQ==", + "dev": true, + "dependencies": { + "camelcase": "^5.3.1", + "find-up": "^4.1.0", + "get-package-type": "^0.1.0", + "js-yaml": "^3.13.1", + "resolve-from": "^5.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@istanbuljs/load-nyc-config/node_modules/argparse": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", + "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", + "dev": true, + "dependencies": { + "sprintf-js": "~1.0.2" + } + }, + "node_modules/@istanbuljs/load-nyc-config/node_modules/find-up": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", + "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", + "dev": true, + "dependencies": { + "locate-path": "^5.0.0", + "path-exists": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@istanbuljs/load-nyc-config/node_modules/js-yaml": { + "version": "3.14.1", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", + "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", + "dev": true, + "dependencies": { + "argparse": "^1.0.7", + "esprima": "^4.0.0" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, + "node_modules/@istanbuljs/load-nyc-config/node_modules/locate-path": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", + "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", + "dev": true, + "dependencies": { + "p-locate": "^4.1.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@istanbuljs/load-nyc-config/node_modules/p-limit": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", + "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", + "dev": true, + "dependencies": { + "p-try": "^2.0.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@istanbuljs/load-nyc-config/node_modules/p-locate": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", + "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", + "dev": true, + "dependencies": { + "p-limit": "^2.2.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@istanbuljs/schema": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/@istanbuljs/schema/-/schema-0.1.3.tgz", + "integrity": "sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/@nodelib/fs.scandir": { + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.4.tgz", + "integrity": "sha512-33g3pMJk3bg5nXbL/+CY6I2eJDzZAni49PfJnL5fghPTggPvBd/pFNSgJsdAgWptuFu7qq/ERvOYFlhvsLTCKA==", + "dependencies": { + "@nodelib/fs.stat": "2.0.4", + "run-parallel": "^1.1.9" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@nodelib/fs.stat": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.4.tgz", + "integrity": "sha512-IYlHJA0clt2+Vg7bccq+TzRdJvv19c2INqBSsoOLp1je7xjtr7J26+WXR72MCdvU9q1qTzIWDfhMf+DRvQJK4Q==", + "engines": { + "node": ">= 8" + } + }, + "node_modules/@nodelib/fs.walk": { + "version": "1.2.6", + "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.6.tgz", + "integrity": "sha512-8Broas6vTtW4GIXTAHDoE32hnN2M5ykgCpWGbuXHQ15vEMqr23pB76e/GZcYsZCHALv50ktd24qhEyKr6wBtow==", + "dependencies": { + "@nodelib/fs.scandir": "2.1.4", + "fastq": "^1.6.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@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==" + }, + "node_modules/@types/chai": { + "version": "4.2.15", + "resolved": "https://registry.npmjs.org/@types/chai/-/chai-4.2.15.tgz", + "integrity": "sha512-rYff6FI+ZTKAPkJUoyz7Udq3GaoDZnxYDEvdEdFZASiA7PoErltHezDishqQiSDWrGxvxmplH304jyzQmjp0AQ==", + "dev": true + }, + "node_modules/@types/chromedriver": { + "version": "81.0.0", + "resolved": "https://registry.npmjs.org/@types/chromedriver/-/chromedriver-81.0.0.tgz", + "integrity": "sha512-Oqwo24DPn5lYI66aA74ApKrfAqVFEjC66raiB/2eHhhryYiumlMpRTR/++riaRcXmfrLXrIiNTtE+Op4vGCIFQ==", + "dev": true, + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/mocha": { + "version": "8.2.1", + "resolved": "https://registry.npmjs.org/@types/mocha/-/mocha-8.2.1.tgz", + "integrity": "sha512-NysN+bNqj6E0Hv4CTGWSlPzMW6vTKjDpOteycDkV4IWBsO+PU48JonrPzV9ODjiI2XrjmA05KInLgF5ivZ/YGQ==", + "dev": true + }, + "node_modules/@types/node": { + "version": "14.14.31", + "resolved": "https://registry.npmjs.org/@types/node/-/node-14.14.31.tgz", + "integrity": "sha512-vFHy/ezP5qI0rFgJ7aQnjDXwAMrG0KqqIH7tQG5PPv3BWBayOPIQNBjVc/P6hhdZfMx51REc6tfDNXHUio893g==", + "devOptional": true + }, + "node_modules/@types/selenium-webdriver": { + "version": "4.0.11", + "resolved": "https://registry.npmjs.org/@types/selenium-webdriver/-/selenium-webdriver-4.0.11.tgz", + "integrity": "sha512-VHv3kVxdploPZRa5Epsrgae9f8Wp0B+TVj3L93Yv0nB2RCRGRTKuhz/vRUZR4yItLqzdIxsxALe3qT3yqTAJTg==", + "dev": true + }, + "node_modules/@types/yauzl": { + "version": "2.9.1", + "resolved": "https://registry.npmjs.org/@types/yauzl/-/yauzl-2.9.1.tgz", + "integrity": "sha512-A1b8SU4D10uoPjwb0lnHmmu8wZhR9d+9o2PKBQT2jU5YPTKsxac6M2qGAdY7VcL+dHHhARVUDmeg0rOrcd9EjA==", + "optional": true, + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@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 + }, + "node_modules/agent-base": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz", + "integrity": "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==", + "dependencies": { + "debug": "4" + }, + "engines": { + "node": ">= 6.0.0" + } + }, + "node_modules/aggregate-error": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/aggregate-error/-/aggregate-error-3.1.0.tgz", + "integrity": "sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==", + "dependencies": { + "clean-stack": "^2.0.0", + "indent-string": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/ansi-colors": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.1.tgz", + "integrity": "sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/ansi-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", + "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/anymatch": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.1.tgz", + "integrity": "sha512-mM8522psRCqzV+6LhomX5wgp25YVibjh8Wj23I5RPkPppSVSjyKD2A2mBJmWGa+KN7f2D6LNh9jkBCeyLktzjg==", + "dev": true, + "dependencies": { + "normalize-path": "^3.0.0", + "picomatch": "^2.0.4" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/append-transform": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/append-transform/-/append-transform-2.0.0.tgz", + "integrity": "sha512-7yeyCEurROLQJFv5Xj4lEGTy0borxepjFv1g22oAdqFu//SrAlDl1O1Nxx15SH1RoliUml6p8dwJW9jvZughhg==", + "dev": true, + "dependencies": { + "default-require-extensions": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/archy": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/archy/-/archy-1.0.0.tgz", + "integrity": "sha1-+cjBN1fMHde8N5rHeyxipcKGjEA=", + "dev": true + }, + "node_modules/arg": { + "version": "4.1.3", + "resolved": "https://registry.npmjs.org/arg/-/arg-4.1.3.tgz", + "integrity": "sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==", + "dev": true + }, + "node_modules/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 + }, + "node_modules/array-union": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz", + "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==", + "engines": { + "node": ">=8" + } + }, + "node_modules/assertion-error": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/assertion-error/-/assertion-error-1.1.0.tgz", + "integrity": "sha512-jgsaNduz+ndvGyFt3uSuWqvy4lCnIJiovtouQN5JZHOKCS2QuhEdbcQHFhVksz2N2U9hXJo8odG7ETyWlEeuDw==", + "dev": true, + "engines": { + "node": "*" + } + }, + "node_modules/axe-core": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/axe-core/-/axe-core-4.1.2.tgz", + "integrity": "sha512-V+Nq70NxKhYt89ArVcaNL9FDryB3vQOd+BFXZIfO3RP6rwtj+2yqqqdHEkacutglPaZLkJeuXKCjCJDMGPtPqg==", + "engines": { + "node": ">=4" + } + }, + "node_modules/axios": { + "version": "0.21.1", + "resolved": "https://registry.npmjs.org/axios/-/axios-0.21.1.tgz", + "integrity": "sha512-dKQiRHxGD9PPRIUNIWvZhPTPpl1rf/OxTYKsqKUDjBwYylTvV7SjSHJb9ratfyzM6wCdLCOYLzs73qpg5c4iGA==", + "dependencies": { + "follow-redirects": "^1.10.0" + } + }, + "node_modules/balanced-match": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz", + "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=" + }, + "node_modules/binary-extensions": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz", + "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/braces": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", + "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", + "dependencies": { + "fill-range": "^7.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/browser-stdout": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/browser-stdout/-/browser-stdout-1.3.1.tgz", + "integrity": "sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw==", + "dev": true + }, + "node_modules/buffer-crc32": { + "version": "0.2.13", + "resolved": "https://registry.npmjs.org/buffer-crc32/-/buffer-crc32-0.2.13.tgz", + "integrity": "sha1-DTM+PwDqxQqhRUq9MO+MKl2ackI=", + "engines": { + "node": "*" + } + }, + "node_modules/buffer-from": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.1.tgz", + "integrity": "sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A==", + "dev": true + }, + "node_modules/caching-transform": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/caching-transform/-/caching-transform-4.0.0.tgz", + "integrity": "sha512-kpqOvwXnjjN44D89K5ccQC+RUrsy7jB/XLlRrx0D7/2HNcTPqzsb6XgYoErwko6QsV184CA2YgS1fxDiiDZMWA==", + "dev": true, + "dependencies": { + "hasha": "^5.0.0", + "make-dir": "^3.0.0", + "package-hash": "^4.0.0", + "write-file-atomic": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/camelcase": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", + "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/chai": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/chai/-/chai-4.3.0.tgz", + "integrity": "sha512-/BFd2J30EcOwmdOgXvVsmM48l0Br0nmZPlO0uOW4XKh6kpsUumRXBgPV+IlaqFaqr9cYbeoZAM1Npx0i4A+aiA==", + "dev": true, + "dependencies": { + "assertion-error": "^1.1.0", + "check-error": "^1.0.2", + "deep-eql": "^3.0.1", + "get-func-name": "^2.0.0", + "pathval": "^1.1.0", + "type-detect": "^4.0.5" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/chalk": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.0.tgz", + "integrity": "sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/chalk/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/check-error": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/check-error/-/check-error-1.0.2.tgz", + "integrity": "sha1-V00xLt2Iu13YkS6Sht1sCu1KrII=", + "dev": true, + "engines": { + "node": "*" + } + }, + "node_modules/chokidar": { + "version": "3.5.1", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.1.tgz", + "integrity": "sha512-9+s+Od+W0VJJzawDma/gvBNQqkTiqYTWLuZoyAsivsI4AaWTCzHG06/TMjsf1cYe9Cb97UCEhjz7HvnPk2p/tw==", + "dev": true, + "dependencies": { + "anymatch": "~3.1.1", + "braces": "~3.0.2", + "glob-parent": "~5.1.0", + "is-binary-path": "~2.1.0", + "is-glob": "~4.0.1", + "normalize-path": "~3.0.0", + "readdirp": "~3.5.0" + }, + "engines": { + "node": ">= 8.10.0" + }, + "optionalDependencies": { + "fsevents": "~2.3.1" + } + }, + "node_modules/chromedriver": { + "version": "88.0.0", + "resolved": "https://registry.npmjs.org/chromedriver/-/chromedriver-88.0.0.tgz", + "integrity": "sha512-EE8rXh7mikxk3VWKjUsz0KCUX8d3HkQ4HgMNJhWrWjzju12dKPPVHO9MY+YaAI5ryXrXGNf0Y4HcNKgW36P/CA==", + "hasInstallScript": true, + "dependencies": { + "@testim/chrome-version": "^1.0.7", + "axios": "^0.21.1", + "del": "^6.0.0", + "extract-zip": "^2.0.1", + "https-proxy-agent": "^5.0.0", + "mkdirp": "^1.0.4", + "proxy-from-env": "^1.1.0", + "tcp-port-used": "^1.0.1" + }, + "bin": { + "chromedriver": "bin/chromedriver" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/clean-stack": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/clean-stack/-/clean-stack-2.2.0.tgz", + "integrity": "sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==", + "engines": { + "node": ">=6" + } + }, + "node_modules/cliui": { + "version": "7.0.4", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz", + "integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==", + "dev": true, + "dependencies": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.0", + "wrap-ansi": "^7.0.0" + } + }, + "node_modules/cliui/node_modules/ansi-regex": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz", + "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/cliui/node_modules/is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/cliui/node_modules/string-width": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.0.tgz", + "integrity": "sha512-zUz5JD+tgqtuDjMhwIg5uFVV3dtqZ9yQJlZVfq4I01/K5Paj5UHj7VyrQOJvzawSVlKpObApbfD0Ed6yJc+1eg==", + "dev": true, + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/cliui/node_modules/strip-ansi": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz", + "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==", + "dev": true, + "dependencies": { + "ansi-regex": "^5.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "node_modules/colors": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/colors/-/colors-1.4.0.tgz", + "integrity": "sha512-a+UqTh4kgZg/SlGvfbzDHpgRu7AAQOmmqRHJnxhRZICKFUT91brVhNNt58CMWU9PsBbv3PDCZUHbVxuDiH2mtA==", + "engines": { + "node": ">=0.1.90" + } + }, + "node_modules/commander": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-7.1.0.tgz", + "integrity": "sha512-pRxBna3MJe6HKnBGsDyMv8ETbptw3axEdYHoqNh7gu5oDcew8fs0xnivZGm06Ogk8zGAJ9VX+OPEr2GXEQK4dg==", + "engines": { + "node": ">= 10" + } + }, + "node_modules/commondir": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/commondir/-/commondir-1.0.1.tgz", + "integrity": "sha1-3dgA2gxmEnOTzKWVDqloo6rxJTs=", + "dev": true + }, + "node_modules/concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=" + }, + "node_modules/convert-source-map": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.7.0.tgz", + "integrity": "sha512-4FJkXzKXEDB1snCFZlLP4gpC3JILicCpGbzG9f9G7tGqGCzETQ2hWPrcinA9oU4wtf2biUaEH5065UnMeR33oA==", + "dev": true, + "dependencies": { + "safe-buffer": "~5.1.1" + } + }, + "node_modules/core-util-is": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", + "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=" + }, + "node_modules/create-require": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/create-require/-/create-require-1.1.1.tgz", + "integrity": "sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==", + "dev": true + }, + "node_modules/cross-spawn": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", + "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", + "dev": true, + "dependencies": { + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/crypto-random-string": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/crypto-random-string/-/crypto-random-string-2.0.0.tgz", + "integrity": "sha512-v1plID3y9r/lPhviJ1wrXpLeyUIGAZ2SHNYTEapm7/8A9nLPoyvVp3RK/EPFqn5kEznyWgYZNsRtYYIWbuG8KA==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/debug": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.1.tgz", + "integrity": "sha512-doEwdvm4PCeK4K3RQN2ZC2BYUBaxwLARCqZmMjtF8a51J2Rb0xpVloFRnCODwqjpwnAoao4pelN8l3RJdv3gRQ==", + "dependencies": { + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/decamelize": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", + "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/deep-eql": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/deep-eql/-/deep-eql-3.0.1.tgz", + "integrity": "sha512-+QeIQyN5ZuO+3Uk5DYh6/1eKO0m0YmJFGNmFHGACpf1ClL1nmlV/p4gNgbl2pJGxgXb4faqo6UE+M5ACEMyVcw==", + "dev": true, + "dependencies": { + "type-detect": "^4.0.0" + }, + "engines": { + "node": ">=0.12" + } + }, + "node_modules/deep-is": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.3.tgz", + "integrity": "sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ=" + }, + "node_modules/default-require-extensions": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/default-require-extensions/-/default-require-extensions-3.0.0.tgz", + "integrity": "sha512-ek6DpXq/SCpvjhpFsLFRVtIxJCRw6fUR42lYMVZuUMK7n8eMz4Uh5clckdBjEpLhn/gEBZo7hDJnJcwdKLKQjg==", + "dev": true, + "dependencies": { + "strip-bom": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/del": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/del/-/del-6.0.0.tgz", + "integrity": "sha512-1shh9DQ23L16oXSZKB2JxpL7iMy2E0S9d517ptA1P8iw0alkPtQcrKH7ru31rYtKwF499HkTu+DRzq3TCKDFRQ==", + "dependencies": { + "globby": "^11.0.1", + "graceful-fs": "^4.2.4", + "is-glob": "^4.0.1", + "is-path-cwd": "^2.2.0", + "is-path-inside": "^3.0.2", + "p-map": "^4.0.0", + "rimraf": "^3.0.2", + "slash": "^3.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/diff": { + "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, + "engines": { + "node": ">=0.3.1" + } + }, + "node_modules/dir-glob": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", + "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==", + "dependencies": { + "path-type": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "dev": true + }, + "node_modules/end-of-stream": { + "version": "1.4.4", + "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz", + "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==", + "dependencies": { + "once": "^1.4.0" + } + }, + "node_modules/es6-error": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/es6-error/-/es6-error-4.1.1.tgz", + "integrity": "sha512-Um/+FxMr9CISWh0bi5Zv0iOD+4cFh5qLeks1qhAopKVAJw3drgKbKySikp7wGhDL0HPeaja0P5ULZrxLkniUVg==", + "dev": true + }, + "node_modules/escalade": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", + "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/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, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/esprima": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", + "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", + "dev": true, + "bin": { + "esparse": "bin/esparse.js", + "esvalidate": "bin/esvalidate.js" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/execa": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/execa/-/execa-5.0.0.tgz", + "integrity": "sha512-ov6w/2LCiuyO4RLYGdpFGjkcs0wMTgGE8PrkTHikeUy5iJekXyPIKUjifk5CsE0pt7sMCrMZ3YNqoCj6idQOnQ==", + "dev": true, + "dependencies": { + "cross-spawn": "^7.0.3", + "get-stream": "^6.0.0", + "human-signals": "^2.1.0", + "is-stream": "^2.0.0", + "merge-stream": "^2.0.0", + "npm-run-path": "^4.0.1", + "onetime": "^5.1.2", + "signal-exit": "^3.0.3", + "strip-final-newline": "^2.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sindresorhus/execa?sponsor=1" + } + }, + "node_modules/extract-zip": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extract-zip/-/extract-zip-2.0.1.tgz", + "integrity": "sha512-GDhU9ntwuKyGXdZBUgTIe+vXnWj0fppUEtMDL0+idd5Sta8TGpHssn/eusA9mrPr9qNDym6SxAYZjNvCn/9RBg==", + "dependencies": { + "debug": "^4.1.1", + "get-stream": "^5.1.0", + "yauzl": "^2.10.0" + }, + "bin": { + "extract-zip": "cli.js" + }, + "engines": { + "node": ">= 10.17.0" + }, + "optionalDependencies": { + "@types/yauzl": "^2.9.1" + } + }, + "node_modules/extract-zip/node_modules/get-stream": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz", + "integrity": "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==", + "dependencies": { + "pump": "^3.0.0" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/fast-glob": { + "version": "3.2.5", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.5.tgz", + "integrity": "sha512-2DtFcgT68wiTTiwZ2hNdJfcHNke9XOfnwmBRWXhmeKM8rF0TGwmC/Qto3S7RoZKp5cilZbxzO5iTNTQsJ+EeDg==", + "dependencies": { + "@nodelib/fs.stat": "^2.0.2", + "@nodelib/fs.walk": "^1.2.3", + "glob-parent": "^5.1.0", + "merge2": "^1.3.0", + "micromatch": "^4.0.2", + "picomatch": "^2.2.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/fastq": { + "version": "1.10.1", + "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.10.1.tgz", + "integrity": "sha512-AWuv6Ery3pM+dY7LYS8YIaCiQvUaos9OB1RyNgaOWnaX+Tik7Onvcsf8x8c+YtDeT0maYLniBip2hox5KtEXXA==", + "dependencies": { + "reusify": "^1.0.4" + } + }, + "node_modules/fd-slicer": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/fd-slicer/-/fd-slicer-1.1.0.tgz", + "integrity": "sha1-JcfInLH5B3+IkbvmHY85Dq4lbx4=", + "dependencies": { + "pend": "~1.2.0" + } + }, + "node_modules/fill-range": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", + "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", + "dependencies": { + "to-regex-range": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/find-cache-dir": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-3.3.1.tgz", + "integrity": "sha512-t2GDMt3oGC/v+BMwzmllWDuJF/xcDtE5j/fCGbqDD7OLuJkj0cfh1YSA5VKPvwMeLFLNDBkwOKZ2X85jGLVftQ==", + "dev": true, + "dependencies": { + "commondir": "^1.0.1", + "make-dir": "^3.0.2", + "pkg-dir": "^4.1.0" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/avajs/find-cache-dir?sponsor=1" + } + }, + "node_modules/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, + "dependencies": { + "locate-path": "^6.0.0", + "path-exists": "^4.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/flat": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/flat/-/flat-5.0.2.tgz", + "integrity": "sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ==", + "dev": true, + "bin": { + "flat": "cli.js" + } + }, + "node_modules/follow-redirects": { + "version": "1.13.2", + "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.13.2.tgz", + "integrity": "sha512-6mPTgLxYm3r6Bkkg0vNM0HTjfGrOEtsfbhagQvbxDEsEkpNhw582upBaoRZylzen6krEmxXJgt9Ju6HiI4O7BA==", + "funding": [ + { + "type": "individual", + "url": "https://github.com/sponsors/RubenVerborgh" + } + ], + "engines": { + "node": ">=4.0" + }, + "peerDependenciesMeta": { + "debug": { + "optional": true + } + } + }, + "node_modules/foreground-child": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-2.0.0.tgz", + "integrity": "sha512-dCIq9FpEcyQyXKCkyzmlPTFNgrCzPudOe+mhvJU5zAtlBnGVy2yKxtfsxK2tQBThwq225jcvBjpw1Gr40uzZCA==", + "dev": true, + "dependencies": { + "cross-spawn": "^7.0.0", + "signal-exit": "^3.0.2" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/fromentries": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/fromentries/-/fromentries-1.3.2.tgz", + "integrity": "sha512-cHEpEQHUg0f8XdtZCc2ZAhrHzKzT0MrFUTcvx+hfxYu7rGMDc5SKoXFh+n4YigxsHXRzc6OrCshdR1bWH6HHyg==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, + "node_modules/fs.realpath": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", + "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=" + }, + "node_modules/fsevents": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", + "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", + "dev": true, + "hasInstallScript": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^8.16.0 || ^10.6.0 || >=11.0.0" + } + }, + "node_modules/gensync": { + "version": "1.0.0-beta.2", + "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", + "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==", + "dev": true, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/get-caller-file": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", + "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", + "dev": true, + "engines": { + "node": "6.* || 8.* || >= 10.*" + } + }, + "node_modules/get-func-name": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/get-func-name/-/get-func-name-2.0.0.tgz", + "integrity": "sha1-6td0q+5y4gQJQzoGY2YCPdaIekE=", + "dev": true, + "engines": { + "node": "*" + } + }, + "node_modules/get-package-type": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/get-package-type/-/get-package-type-0.1.0.tgz", + "integrity": "sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q==", + "dev": true, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/get-stream": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.0.tgz", + "integrity": "sha512-A1B3Bh1UmL0bidM/YX2NsCOTnGJePL9rO/M+Mw3m9f2gUpfokS0hi5Eah0WSUEWZdZhIZtMjkIYS7mDfOqNHbg==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/glob": { + "version": "7.1.6", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz", + "integrity": "sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==", + "dependencies": { + "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" + }, + "engines": { + "node": "*" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/glob-parent": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.1.tgz", + "integrity": "sha512-FnI+VGOpnlGHWZxthPGR+QhR78fuiK0sNLkHQv+bL9fQi57lNNdquIbna/WrfROrolq8GK5Ek6BiMwqL/voRYQ==", + "dependencies": { + "is-glob": "^4.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/globals": { + "version": "11.12.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", + "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/globby": { + "version": "11.0.2", + "resolved": "https://registry.npmjs.org/globby/-/globby-11.0.2.tgz", + "integrity": "sha512-2ZThXDvvV8fYFRVIxnrMQBipZQDr7MxKAmQK1vujaj9/7eF0efG7BPUKJ7jP7G5SLF37xKDXvO4S/KKLj/Z0og==", + "dependencies": { + "array-union": "^2.1.0", + "dir-glob": "^3.0.1", + "fast-glob": "^3.1.1", + "ignore": "^5.1.4", + "merge2": "^1.3.0", + "slash": "^3.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/graceful-fs": { + "version": "4.2.6", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.6.tgz", + "integrity": "sha512-nTnJ528pbqxYanhpDYsi4Rd8MAeaBA67+RZ10CM1m3bTAVFEDcd5AuA4a6W5YkGZ1iNXHzZz8T6TBKLeBuNriQ==" + }, + "node_modules/growl": { + "version": "1.10.5", + "resolved": "https://registry.npmjs.org/growl/-/growl-1.10.5.tgz", + "integrity": "sha512-qBr4OuELkhPenW6goKVXiv47US3clb3/IbuWF9KNKEijAy9oeHxU9IgzjvJhHkUzhaj7rOUD7+YGWqUjLp5oSA==", + "dev": true, + "engines": { + "node": ">=4.x" + } + }, + "node_modules/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, + "engines": { + "node": ">=8" + } + }, + "node_modules/hasha": { + "version": "5.2.2", + "resolved": "https://registry.npmjs.org/hasha/-/hasha-5.2.2.tgz", + "integrity": "sha512-Hrp5vIK/xr5SkeN2onO32H0MgNZ0f17HRNH39WfL0SYUNOTZ5Lz1TJ8Pajo/87dYGEFlLMm7mIc/k/s6Bvz9HQ==", + "dev": true, + "dependencies": { + "is-stream": "^2.0.0", + "type-fest": "^0.8.0" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/he": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/he/-/he-1.2.0.tgz", + "integrity": "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==", + "dev": true, + "bin": { + "he": "bin/he" + } + }, + "node_modules/html-escaper": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/html-escaper/-/html-escaper-2.0.2.tgz", + "integrity": "sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==", + "dev": true + }, + "node_modules/https-proxy-agent": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.0.tgz", + "integrity": "sha512-EkYm5BcKUGiduxzSt3Eppko+PiNWNEpa4ySk9vTC6wDsQJW9rHSa+UhGNJoRYp7bz6Ht1eaRIa6QaJqO5rCFbA==", + "dependencies": { + "agent-base": "6", + "debug": "4" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/human-signals": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-2.1.0.tgz", + "integrity": "sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==", + "dev": true, + "engines": { + "node": ">=10.17.0" + } + }, + "node_modules/ignore": { + "version": "5.1.8", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.1.8.tgz", + "integrity": "sha512-BMpfD7PpiETpBl/A6S498BaIJ6Y/ABT93ETbby2fP00v4EbvPBXWEoaR1UBPKs3iR53pJY7EtZk5KACI57i1Uw==", + "engines": { + "node": ">= 4" + } + }, + "node_modules/immediate": { + "version": "3.0.6", + "resolved": "https://registry.npmjs.org/immediate/-/immediate-3.0.6.tgz", + "integrity": "sha1-nbHb0Pr43m++D13V5Wu2BigN5ps=" + }, + "node_modules/imurmurhash": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", + "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o=", + "dev": true, + "engines": { + "node": ">=0.8.19" + } + }, + "node_modules/indent-string": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz", + "integrity": "sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==", + "engines": { + "node": ">=8" + } + }, + "node_modules/inflight": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", + "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", + "dependencies": { + "once": "^1.3.0", + "wrappy": "1" + } + }, + "node_modules/inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" + }, + "node_modules/ip-regex": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ip-regex/-/ip-regex-4.3.0.tgz", + "integrity": "sha512-B9ZWJxHHOHUhUjCPrMpLD4xEq35bUTClHM1S6CBU5ixQnkZmwipwgc96vAd7AAGM9TGHvJR+Uss+/Ak6UphK+Q==", + "engines": { + "node": ">=8" + } + }, + "node_modules/is-binary-path": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", + "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", + "dev": true, + "dependencies": { + "binary-extensions": "^2.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/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, + "engines": { + "node": ">=4" + } + }, + "node_modules/is-glob": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.1.tgz", + "integrity": "sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg==", + "dependencies": { + "is-extglob": "^2.1.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", + "engines": { + "node": ">=0.12.0" + } + }, + "node_modules/is-path-cwd": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/is-path-cwd/-/is-path-cwd-2.2.0.tgz", + "integrity": "sha512-w942bTcih8fdJPJmQHFzkS76NEP8Kzzvmw92cXsazb8intwLqPibPPdXf4ANdKV3rYMuuQYGIWtvz9JilB3NFQ==", + "engines": { + "node": ">=6" + } + }, + "node_modules/is-path-inside": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.2.tgz", + "integrity": "sha512-/2UGPSgmtqwo1ktx8NDHjuPwZWmHhO+gj0f93EkhLB5RgW9RZevWYYlIkS6zePc6U2WpOdQYIwHe9YC4DWEBVg==", + "engines": { + "node": ">=8" + } + }, + "node_modules/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, + "engines": { + "node": ">=8" + } + }, + "node_modules/is-stream": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.0.tgz", + "integrity": "sha512-XCoy+WlUr7d1+Z8GgSuXmpuUFC9fOhRXglJMx+dwLKTkL44Cjd4W1Z5P+BQZpr+cR93aGP4S/s7Ftw6Nd/kiEw==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/is-typedarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", + "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=", + "dev": true + }, + "node_modules/is-url": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/is-url/-/is-url-1.2.4.tgz", + "integrity": "sha512-ITvGim8FhRiYe4IQ5uHSkj7pVaPDrCTkNd3yq3cV7iZAcJdHTUMPMEHcqSOy9xZ9qFenQCvi+2wjH9a1nXqHww==" + }, + "node_modules/is-windows": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-windows/-/is-windows-1.0.2.tgz", + "integrity": "sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is2": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/is2/-/is2-2.0.6.tgz", + "integrity": "sha512-+Z62OHOjA6k2sUDOKXoZI3EXv7Fb1K52jpTBLbkfx62bcUeSsrTBLhEquCRDKTx0XE5XbHcG/S2vrtE3lnEDsQ==", + "dependencies": { + "deep-is": "^0.1.3", + "ip-regex": "^4.1.0", + "is-url": "^1.2.4" + }, + "engines": { + "node": ">=v0.10.0" + } + }, + "node_modules/isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=" + }, + "node_modules/isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=", + "dev": true + }, + "node_modules/istanbul-lib-coverage": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-3.0.0.tgz", + "integrity": "sha512-UiUIqxMgRDET6eR+o5HbfRYP1l0hqkWOs7vNxC/mggutCMUIhWMm8gAHb8tHlyfD3/l6rlgNA5cKdDzEAf6hEg==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/istanbul-lib-hook": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/istanbul-lib-hook/-/istanbul-lib-hook-3.0.0.tgz", + "integrity": "sha512-Pt/uge1Q9s+5VAZ+pCo16TYMWPBIl+oaNIjgLQxcX0itS6ueeaA+pEfThZpH8WxhFgCiEb8sAJY6MdUKgiIWaQ==", + "dev": true, + "dependencies": { + "append-transform": "^2.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/istanbul-lib-instrument": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-4.0.3.tgz", + "integrity": "sha512-BXgQl9kf4WTCPCCpmFGoJkz/+uhvm7h7PFKUYxh7qarQd3ER33vHG//qaE8eN25l07YqZPpHXU9I09l/RD5aGQ==", + "dev": true, + "dependencies": { + "@babel/core": "^7.7.5", + "@istanbuljs/schema": "^0.1.2", + "istanbul-lib-coverage": "^3.0.0", + "semver": "^6.3.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/istanbul-lib-processinfo": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/istanbul-lib-processinfo/-/istanbul-lib-processinfo-2.0.2.tgz", + "integrity": "sha512-kOwpa7z9hme+IBPZMzQ5vdQj8srYgAtaRqeI48NGmAQ+/5yKiHLV0QbYqQpxsdEF0+w14SoB8YbnHKcXE2KnYw==", + "dev": true, + "dependencies": { + "archy": "^1.0.0", + "cross-spawn": "^7.0.0", + "istanbul-lib-coverage": "^3.0.0-alpha.1", + "make-dir": "^3.0.0", + "p-map": "^3.0.0", + "rimraf": "^3.0.0", + "uuid": "^3.3.3" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/istanbul-lib-processinfo/node_modules/p-map": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/p-map/-/p-map-3.0.0.tgz", + "integrity": "sha512-d3qXVTF/s+W+CdJ5A29wywV2n8CQQYahlgz2bFiA+4eVNJbHJodPZ+/gXwPGh0bOqA+j8S+6+ckmvLGPk1QpxQ==", + "dev": true, + "dependencies": { + "aggregate-error": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/istanbul-lib-report": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/istanbul-lib-report/-/istanbul-lib-report-3.0.0.tgz", + "integrity": "sha512-wcdi+uAKzfiGT2abPpKZ0hSU1rGQjUQnLvtY5MpQ7QCTahD3VODhcu4wcfY1YtkGaDD5yuydOLINXsfbus9ROw==", + "dev": true, + "dependencies": { + "istanbul-lib-coverage": "^3.0.0", + "make-dir": "^3.0.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/istanbul-lib-report/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/istanbul-lib-source-maps": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/istanbul-lib-source-maps/-/istanbul-lib-source-maps-4.0.0.tgz", + "integrity": "sha512-c16LpFRkR8vQXyHZ5nLpY35JZtzj1PQY1iZmesUbf1FZHbIupcWfjgOXBY9YHkLEQ6puz1u4Dgj6qmU/DisrZg==", + "dev": true, + "dependencies": { + "debug": "^4.1.1", + "istanbul-lib-coverage": "^3.0.0", + "source-map": "^0.6.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/istanbul-lib-source-maps/node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/istanbul-reports": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-3.0.2.tgz", + "integrity": "sha512-9tZvz7AiR3PEDNGiV9vIouQ/EAcqMXFmkcA1CDFTwOB98OZVDL0PH9glHotf5Ugp6GCOTypfzGWI/OqjWNCRUw==", + "dev": true, + "dependencies": { + "html-escaper": "^2.0.0", + "istanbul-lib-report": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/js-tokens": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", + "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", + "dev": true + }, + "node_modules/js-yaml": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.0.0.tgz", + "integrity": "sha512-pqon0s+4ScYUvX30wxQi3PogGFAlUyH0awepWvwkj4jD4v+ova3RiYw8bmA6x2rDrEaj8i/oWKoRxpVNW+Re8Q==", + "dev": true, + "dependencies": { + "argparse": "^2.0.1" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, + "node_modules/jsesc": { + "version": "2.5.2", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz", + "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==", + "dev": true, + "bin": { + "jsesc": "bin/jsesc" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/json5": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.0.tgz", + "integrity": "sha512-f+8cldu7X/y7RAJurMEJmdoKXGB/X550w2Nr3tTbezL6RwEE/iMcm+tZnXeoZtKuOq6ft8+CqzEkrIgx1fPoQA==", + "dev": true, + "dependencies": { + "minimist": "^1.2.5" + }, + "bin": { + "json5": "lib/cli.js" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/jszip": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/jszip/-/jszip-3.6.0.tgz", + "integrity": "sha512-jgnQoG9LKnWO3mnVNBnfhkh0QknICd1FGSrXcgrl67zioyJ4wgx25o9ZqwNtrROSflGBCGYnJfjrIyRIby1OoQ==", + "dependencies": { + "lie": "~3.3.0", + "pako": "~1.0.2", + "readable-stream": "~2.3.6", + "set-immediate-shim": "~1.0.1" + } + }, + "node_modules/lie": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/lie/-/lie-3.3.0.tgz", + "integrity": "sha512-UaiMJzeWRlEujzAuw5LokY1L5ecNQYZKfmyZ9L7wDHb/p5etKaxXhohBcrw0EYby+G/NA52vRSN4N39dxHAIwQ==", + "dependencies": { + "immediate": "~3.0.5" + } + }, + "node_modules/locate-path": { + "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, + "dependencies": { + "p-locate": "^5.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/lodash": { + "version": "4.17.21", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", + "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", + "dev": true + }, + "node_modules/lodash.flattendeep": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/lodash.flattendeep/-/lodash.flattendeep-4.4.0.tgz", + "integrity": "sha1-+wMJF/hqMTTlvJvsDWngAT3f7bI=", + "dev": true + }, + "node_modules/log-symbols": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-4.0.0.tgz", + "integrity": "sha512-FN8JBzLx6CzeMrB0tg6pqlGU1wCrXW+ZXGH481kfsBqer0hToTIiHdjH4Mq8xJUbvATujKCvaREGWpGUionraA==", + "dev": true, + "dependencies": { + "chalk": "^4.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/make-dir": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz", + "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==", + "dev": true, + "dependencies": { + "semver": "^6.0.0" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/make-error": { + "version": "1.3.6", + "resolved": "https://registry.npmjs.org/make-error/-/make-error-1.3.6.tgz", + "integrity": "sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==", + "dev": true + }, + "node_modules/merge-stream": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", + "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==", + "dev": true + }, + "node_modules/merge2": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", + "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", + "engines": { + "node": ">= 8" + } + }, + "node_modules/micromatch": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.2.tgz", + "integrity": "sha512-y7FpHSbMUMoyPbYUSzO6PaZ6FyRnQOpHuKwbo1G+Knck95XVU4QAiKdGEnj5wwoS7PlOgthX/09u5iFJ+aYf5Q==", + "dependencies": { + "braces": "^3.0.1", + "picomatch": "^2.0.5" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/mimic-fn": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", + "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/minimatch": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", + "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/minimist": { + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz", + "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==", + "dev": true + }, + "node_modules/mkdirp": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", + "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", + "bin": { + "mkdirp": "bin/cmd.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/mocha": { + "version": "8.3.0", + "resolved": "https://registry.npmjs.org/mocha/-/mocha-8.3.0.tgz", + "integrity": "sha512-TQqyC89V1J/Vxx0DhJIXlq9gbbL9XFNdeLQ1+JsnZsVaSOV1z3tWfw0qZmQJGQRIfkvZcs7snQnZnOCKoldq1Q==", + "dev": true, + "dependencies": { + "@ungap/promise-all-settled": "1.1.2", + "ansi-colors": "4.1.1", + "browser-stdout": "1.3.1", + "chokidar": "3.5.1", + "debug": "4.3.1", + "diff": "5.0.0", + "escape-string-regexp": "4.0.0", + "find-up": "5.0.0", + "glob": "7.1.6", + "growl": "1.10.5", + "he": "1.2.0", + "js-yaml": "4.0.0", + "log-symbols": "4.0.0", + "minimatch": "3.0.4", + "ms": "2.1.3", + "nanoid": "3.1.20", + "serialize-javascript": "5.0.1", + "strip-json-comments": "3.1.1", + "supports-color": "8.1.1", + "which": "2.0.2", + "wide-align": "1.1.3", + "workerpool": "6.1.0", + "yargs": "16.2.0", + "yargs-parser": "20.2.4", + "yargs-unparser": "2.0.0" + }, + "bin": { + "_mocha": "bin/_mocha", + "mocha": "bin/mocha" + }, + "engines": { + "node": ">= 10.12.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/mochajs" + } + }, + "node_modules/mocha/node_modules/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 + }, + "node_modules/ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" + }, + "node_modules/nanoid": { + "version": "3.1.20", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.1.20.tgz", + "integrity": "sha512-a1cQNyczgKbLX9jwbS/+d7W8fX/RfgYR7lVWwWOGIPNgK2m0MWvrGF6/m4kk6U3QcFMnZf3RIhL0v2Jgh/0Uxw==", + "dev": true, + "bin": { + "nanoid": "bin/nanoid.cjs" + }, + "engines": { + "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" + } + }, + "node_modules/node-preload": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/node-preload/-/node-preload-0.2.1.tgz", + "integrity": "sha512-RM5oyBy45cLEoHqCeh+MNuFAxO0vTFBLskvQbOKnEE7YTTSN4tbN8QWDIPQ6L+WvKsB/qLEGpYe2ZZ9d4W9OIQ==", + "dev": true, + "dependencies": { + "process-on-spawn": "^1.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/normalize-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", + "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/npm-run-path": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz", + "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==", + "dev": true, + "dependencies": { + "path-key": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/nyc": { + "version": "15.1.0", + "resolved": "https://registry.npmjs.org/nyc/-/nyc-15.1.0.tgz", + "integrity": "sha512-jMW04n9SxKdKi1ZMGhvUTHBN0EICCRkHemEoE5jm6mTYcqcdas0ATzgUgejlQUHMvpnOZqGB5Xxsv9KxJW1j8A==", + "dev": true, + "dependencies": { + "@istanbuljs/load-nyc-config": "^1.0.0", + "@istanbuljs/schema": "^0.1.2", + "caching-transform": "^4.0.0", + "convert-source-map": "^1.7.0", + "decamelize": "^1.2.0", + "find-cache-dir": "^3.2.0", + "find-up": "^4.1.0", + "foreground-child": "^2.0.0", + "get-package-type": "^0.1.0", + "glob": "^7.1.6", + "istanbul-lib-coverage": "^3.0.0", + "istanbul-lib-hook": "^3.0.0", + "istanbul-lib-instrument": "^4.0.0", + "istanbul-lib-processinfo": "^2.0.2", + "istanbul-lib-report": "^3.0.0", + "istanbul-lib-source-maps": "^4.0.0", + "istanbul-reports": "^3.0.2", + "make-dir": "^3.0.0", + "node-preload": "^0.2.1", + "p-map": "^3.0.0", + "process-on-spawn": "^1.0.0", + "resolve-from": "^5.0.0", + "rimraf": "^3.0.0", + "signal-exit": "^3.0.2", + "spawn-wrap": "^2.0.0", + "test-exclude": "^6.0.0", + "yargs": "^15.0.2" + }, + "bin": { + "nyc": "bin/nyc.js" + }, + "engines": { + "node": ">=8.9" + } + }, + "node_modules/nyc/node_modules/ansi-regex": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz", + "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/nyc/node_modules/cliui": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-6.0.0.tgz", + "integrity": "sha512-t6wbgtoCXvAzst7QgXxJYqPt0usEfbgQdftEPbLL/cvv6HPE5VgvqCuAIDR0NgU52ds6rFwqrgakNLrHEjCbrQ==", + "dev": true, + "dependencies": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.0", + "wrap-ansi": "^6.2.0" + } + }, + "node_modules/nyc/node_modules/find-up": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", + "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", + "dev": true, + "dependencies": { + "locate-path": "^5.0.0", + "path-exists": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/nyc/node_modules/is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/nyc/node_modules/locate-path": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", + "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", + "dev": true, + "dependencies": { + "p-locate": "^4.1.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/nyc/node_modules/p-limit": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", + "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", + "dev": true, + "dependencies": { + "p-try": "^2.0.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/nyc/node_modules/p-locate": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", + "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", + "dev": true, + "dependencies": { + "p-limit": "^2.2.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/nyc/node_modules/p-map": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/p-map/-/p-map-3.0.0.tgz", + "integrity": "sha512-d3qXVTF/s+W+CdJ5A29wywV2n8CQQYahlgz2bFiA+4eVNJbHJodPZ+/gXwPGh0bOqA+j8S+6+ckmvLGPk1QpxQ==", + "dev": true, + "dependencies": { + "aggregate-error": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/nyc/node_modules/string-width": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.0.tgz", + "integrity": "sha512-zUz5JD+tgqtuDjMhwIg5uFVV3dtqZ9yQJlZVfq4I01/K5Paj5UHj7VyrQOJvzawSVlKpObApbfD0Ed6yJc+1eg==", + "dev": true, + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/nyc/node_modules/strip-ansi": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz", + "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==", + "dev": true, + "dependencies": { + "ansi-regex": "^5.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/nyc/node_modules/wrap-ansi": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz", + "integrity": "sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/nyc/node_modules/y18n": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.1.tgz", + "integrity": "sha512-wNcy4NvjMYL8gogWWYAO7ZFWFfHcbdbE57tZO8e4cbpj8tfUcwrwqSl3ad8HxpYWCdXcJUCeKKZS62Av1affwQ==", + "dev": true + }, + "node_modules/nyc/node_modules/yargs": { + "version": "15.4.1", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-15.4.1.tgz", + "integrity": "sha512-aePbxDmcYW++PaqBsJ+HYUFwCdv4LVvdnhBy78E57PIor8/OVvhMrADFFEDh8DHDFRv/O9i3lPhsENjO7QX0+A==", + "dev": true, + "dependencies": { + "cliui": "^6.0.0", + "decamelize": "^1.2.0", + "find-up": "^4.1.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": "^4.2.0", + "which-module": "^2.0.0", + "y18n": "^4.0.0", + "yargs-parser": "^18.1.2" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/nyc/node_modules/yargs-parser": { + "version": "18.1.3", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-18.1.3.tgz", + "integrity": "sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ==", + "dev": true, + "dependencies": { + "camelcase": "^5.0.0", + "decamelize": "^1.2.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/once": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", + "dependencies": { + "wrappy": "1" + } + }, + "node_modules/onetime": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", + "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", + "dev": true, + "dependencies": { + "mimic-fn": "^2.1.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/os-tmpdir": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz", + "integrity": "sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ=", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/p-limit": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", + "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", + "dev": true, + "dependencies": { + "yocto-queue": "^0.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/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, + "dependencies": { + "p-limit": "^3.0.2" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/p-map": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/p-map/-/p-map-4.0.0.tgz", + "integrity": "sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ==", + "dependencies": { + "aggregate-error": "^3.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/p-try": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", + "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/package-hash": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/package-hash/-/package-hash-4.0.0.tgz", + "integrity": "sha512-whdkPIooSu/bASggZ96BWVvZTRMOFxnyUG5PnTSGKoJE2gd5mbVNmR2Nj20QFzxYYgAXpoqC+AiXzl+UMRh7zQ==", + "dev": true, + "dependencies": { + "graceful-fs": "^4.1.15", + "hasha": "^5.0.0", + "lodash.flattendeep": "^4.4.0", + "release-zalgo": "^1.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/pako": { + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/pako/-/pako-1.0.11.tgz", + "integrity": "sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw==" + }, + "node_modules/path-exists": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/path-is-absolute": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", + "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/path-key": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", + "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/path-type": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", + "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", + "engines": { + "node": ">=8" + } + }, + "node_modules/pathval": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/pathval/-/pathval-1.1.1.tgz", + "integrity": "sha512-Dp6zGqpTdETdR63lehJYPeIOqpiNBNtc7BpWSLrOje7UaIsE5aY92r/AunQA7rsXvet3lrJ3JnZX29UPTKXyKQ==", + "dev": true, + "engines": { + "node": "*" + } + }, + "node_modules/pend": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/pend/-/pend-1.2.0.tgz", + "integrity": "sha1-elfrVQpng/kRUzH89GY9XI4AelA=" + }, + "node_modules/picomatch": { + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.2.2.tgz", + "integrity": "sha512-q0M/9eZHzmr0AulXyPwNfZjtwZ/RBZlbN3K3CErVrk50T2ASYI7Bye0EvekFY3IP1Nt2DHu0re+V2ZHIpMkuWg==", + "engines": { + "node": ">=8.6" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/pkg-dir": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz", + "integrity": "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==", + "dev": true, + "dependencies": { + "find-up": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/pkg-dir/node_modules/find-up": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", + "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", + "dev": true, + "dependencies": { + "locate-path": "^5.0.0", + "path-exists": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/pkg-dir/node_modules/locate-path": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", + "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", + "dev": true, + "dependencies": { + "p-locate": "^4.1.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/pkg-dir/node_modules/p-limit": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", + "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", + "dev": true, + "dependencies": { + "p-try": "^2.0.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/pkg-dir/node_modules/p-locate": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", + "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", + "dev": true, + "dependencies": { + "p-limit": "^2.2.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/process-nextick-args": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", + "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==" + }, + "node_modules/process-on-spawn": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/process-on-spawn/-/process-on-spawn-1.0.0.tgz", + "integrity": "sha512-1WsPDsUSMmZH5LeMLegqkPDrsGgsWwk1Exipy2hvB0o/F0ASzbpIctSCcZIK1ykJvtTJULEH+20WOFjMvGnCTg==", + "dev": true, + "dependencies": { + "fromentries": "^1.2.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/proxy-from-env": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz", + "integrity": "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==" + }, + "node_modules/pump": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz", + "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==", + "dependencies": { + "end-of-stream": "^1.1.0", + "once": "^1.3.1" + } + }, + "node_modules/queue-microtask": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.2.tgz", + "integrity": "sha512-dB15eXv3p2jDlbOiNLyMabYg1/sXvppd8DP2J3EOCQ0AkuSXCW2tP7mnVouVLJKgUMY6yP0kcQDVpLCN13h4Xg==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, + "node_modules/randombytes": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", + "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", + "dev": true, + "dependencies": { + "safe-buffer": "^5.1.0" + } + }, + "node_modules/readable-stream": { + "version": "2.3.7", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", + "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", + "dependencies": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "node_modules/readdirp": { + "version": "3.5.0", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.5.0.tgz", + "integrity": "sha512-cMhu7c/8rdhkHXWsY+osBhfSy0JikwpHK/5+imo+LpeasTF8ouErHrlYkwT0++njiyuDvc7OFY5T3ukvZ8qmFQ==", + "dev": true, + "dependencies": { + "picomatch": "^2.2.1" + }, + "engines": { + "node": ">=8.10.0" + } + }, + "node_modules/release-zalgo": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/release-zalgo/-/release-zalgo-1.0.0.tgz", + "integrity": "sha1-CXALflB0Mpc5Mw5TXFqQ+2eFFzA=", + "dev": true, + "dependencies": { + "es6-error": "^4.0.1" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/require-directory": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", + "integrity": "sha1-jGStX9MNqxyXbiNE/+f3kqam30I=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/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 + }, + "node_modules/resolve-from": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", + "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/reusify": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", + "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", + "engines": { + "iojs": ">=1.0.0", + "node": ">=0.10.0" + } + }, + "node_modules/rimraf": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", + "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", + "dependencies": { + "glob": "^7.1.3" + }, + "bin": { + "rimraf": "bin.js" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/run-parallel": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", + "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "dependencies": { + "queue-microtask": "^1.2.2" + } + }, + "node_modules/safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" + }, + "node_modules/sax": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/sax/-/sax-1.2.4.tgz", + "integrity": "sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==" + }, + "node_modules/selenium-webdriver": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/selenium-webdriver/-/selenium-webdriver-3.6.0.tgz", + "integrity": "sha512-WH7Aldse+2P5bbFBO4Gle/nuQOdVwpHMTL6raL3uuBj/vPG07k6uzt3aiahu352ONBr5xXh0hDlM3LhtXPOC4Q==", + "dependencies": { + "jszip": "^3.1.3", + "rimraf": "^2.5.4", + "tmp": "0.0.30", + "xml2js": "^0.4.17" + }, + "engines": { + "node": ">= 6.9.0" + } + }, + "node_modules/selenium-webdriver/node_modules/rimraf": { + "version": "2.7.1", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", + "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", + "dependencies": { + "glob": "^7.1.3" + }, + "bin": { + "rimraf": "bin.js" + } + }, + "node_modules/semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true, + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/serialize-javascript": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-5.0.1.tgz", + "integrity": "sha512-SaaNal9imEO737H2c05Og0/8LUXG7EnsZyMa8MzkmuHoELfT6txuj0cMqRj6zfPKnmQ1yasR4PCJc8x+M4JSPA==", + "dev": true, + "dependencies": { + "randombytes": "^2.1.0" + } + }, + "node_modules/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 + }, + "node_modules/set-immediate-shim": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/set-immediate-shim/-/set-immediate-shim-1.0.1.tgz", + "integrity": "sha1-SysbJ+uAip+NzEgaWOXlb1mfP2E=", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/shebang-command": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", + "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", + "dev": true, + "dependencies": { + "shebang-regex": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/shebang-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", + "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/signal-exit": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.3.tgz", + "integrity": "sha512-VUJ49FC8U1OxwZLxIbTTrDvLnf/6TDgxZcK8wxR8zs13xpx7xbG60ndBlhNrFi2EMuFRoeDoJO7wthSLq42EjA==", + "dev": true + }, + "node_modules/slash": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", + "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", + "engines": { + "node": ">=8" + } + }, + "node_modules/source-map": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", + "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/source-map-support": { + "version": "0.5.19", + "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.19.tgz", + "integrity": "sha512-Wonm7zOCIJzBGQdB+thsPar0kYuCIzYvxZwlBa87yi/Mdjv7Tip2cyVbLj5o0cFPN4EVkuTwb3GDDyUx2DGnGw==", + "dev": true, + "dependencies": { + "buffer-from": "^1.0.0", + "source-map": "^0.6.0" + } + }, + "node_modules/source-map-support/node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/spawn-wrap": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/spawn-wrap/-/spawn-wrap-2.0.0.tgz", + "integrity": "sha512-EeajNjfN9zMnULLwhZZQU3GWBoFNkbngTUPfaawT4RkMiviTxcX0qfhVbGey39mfctfDHkWtuecgQ8NJcyQWHg==", + "dev": true, + "dependencies": { + "foreground-child": "^2.0.0", + "is-windows": "^1.0.2", + "make-dir": "^3.0.0", + "rimraf": "^3.0.0", + "signal-exit": "^3.0.2", + "which": "^2.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/sprintf-js": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", + "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=", + "dev": true + }, + "node_modules/string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "dependencies": { + "safe-buffer": "~5.1.0" + } + }, + "node_modules/string-width": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz", + "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==", + "dev": true, + "dependencies": { + "is-fullwidth-code-point": "^2.0.0", + "strip-ansi": "^4.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/strip-ansi": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", + "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", + "dev": true, + "dependencies": { + "ansi-regex": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/strip-bom": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-4.0.0.tgz", + "integrity": "sha512-3xurFv5tEgii33Zi8Jtp55wEIILR9eh34FAW00PZf+JnSsTmV/ioewSgQl97JHvgjoRGwPShsWm+IdrxB35d0w==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-final-newline": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz", + "integrity": "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/strip-json-comments": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", + "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", + "dev": true, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/supports-color": { + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", + "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/supports-color?sponsor=1" + } + }, + "node_modules/tcp-port-used": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/tcp-port-used/-/tcp-port-used-1.0.2.tgz", + "integrity": "sha512-l7ar8lLUD3XS1V2lfoJlCBaeoaWo/2xfYt81hM7VlvR4RrMVFqfmzfhLVk40hAb368uitje5gPtBRL1m/DGvLA==", + "dependencies": { + "debug": "4.3.1", + "is2": "^2.0.6" + } + }, + "node_modules/temp-dir": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/temp-dir/-/temp-dir-2.0.0.tgz", + "integrity": "sha512-aoBAniQmmwtcKp/7BzsH8Cxzv8OL736p7v1ihGb5e9DJ9kTwGWHrQrVB5+lfVDzfGrdRzXch+ig7LHaY1JTOrg==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/tempy": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/tempy/-/tempy-1.0.0.tgz", + "integrity": "sha512-eLXG5B1G0mRPHmgH2WydPl5v4jH35qEn3y/rA/aahKhIa91Pn119SsU7n7v/433gtT9ONzC8ISvNHIh2JSTm0w==", + "dev": true, + "dependencies": { + "del": "^6.0.0", + "is-stream": "^2.0.0", + "temp-dir": "^2.0.0", + "type-fest": "^0.16.0", + "unique-string": "^2.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/tempy/node_modules/type-fest": { + "version": "0.16.0", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.16.0.tgz", + "integrity": "sha512-eaBzG6MxNzEn9kiwvtre90cXaNLkmadMWa1zQMs3XORCXNbsH/OewwbxC5ia9dCxIxnTAsSxXJaa/p5y8DlvJg==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/test-exclude": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/test-exclude/-/test-exclude-6.0.0.tgz", + "integrity": "sha512-cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w==", + "dev": true, + "dependencies": { + "@istanbuljs/schema": "^0.1.2", + "glob": "^7.1.4", + "minimatch": "^3.0.4" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/tmp": { + "version": "0.0.30", + "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.30.tgz", + "integrity": "sha1-ckGdSovn1s51FI/YsyTlk6cRwu0=", + "dependencies": { + "os-tmpdir": "~1.0.1" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/to-fast-properties": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", + "integrity": "sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4=", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/to-regex-range": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "dependencies": { + "is-number": "^7.0.0" + }, + "engines": { + "node": ">=8.0" + } + }, + "node_modules/ts-node": { + "version": "9.1.1", + "resolved": "https://registry.npmjs.org/ts-node/-/ts-node-9.1.1.tgz", + "integrity": "sha512-hPlt7ZACERQGf03M253ytLY3dHbGNGrAq9qIHWUY9XHYl1z7wYngSr3OQ5xmui8o2AaxsONxIzjafLUiWBo1Fg==", + "dev": true, + "dependencies": { + "arg": "^4.1.0", + "create-require": "^1.1.0", + "diff": "^4.0.1", + "make-error": "^1.1.1", + "source-map-support": "^0.5.17", + "yn": "3.1.1" + }, + "bin": { + "ts-node": "dist/bin.js", + "ts-node-script": "dist/bin-script.js", + "ts-node-transpile-only": "dist/bin-transpile.js", + "ts-script": "dist/bin-script-deprecated.js" + }, + "engines": { + "node": ">=10.0.0" + }, + "peerDependencies": { + "typescript": ">=2.7" + } + }, + "node_modules/ts-node/node_modules/diff": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/diff/-/diff-4.0.2.tgz", + "integrity": "sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==", + "dev": true, + "engines": { + "node": ">=0.3.1" + } + }, + "node_modules/type-detect": { + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/type-detect/-/type-detect-4.0.8.tgz", + "integrity": "sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/type-fest": { + "version": "0.8.1", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.8.1.tgz", + "integrity": "sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/typedarray-to-buffer": { + "version": "3.1.5", + "resolved": "https://registry.npmjs.org/typedarray-to-buffer/-/typedarray-to-buffer-3.1.5.tgz", + "integrity": "sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q==", + "dev": true, + "dependencies": { + "is-typedarray": "^1.0.0" + } + }, + "node_modules/typescript": { + "version": "4.1.5", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.1.5.tgz", + "integrity": "sha512-6OSu9PTIzmn9TCDiovULTnET6BgXtDYL4Gg4szY+cGsc3JP1dQL8qvE8kShTRx1NIw4Q9IBHlwODjkjWEtMUyA==", + "dev": true, + "bin": { + "tsc": "bin/tsc", + "tsserver": "bin/tsserver" + }, + "engines": { + "node": ">=4.2.0" + } + }, + "node_modules/unique-string": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/unique-string/-/unique-string-2.0.0.tgz", + "integrity": "sha512-uNaeirEPvpZWSgzwsPGtU2zVSTrn/8L5q/IexZmH0eH6SA73CmAA5U4GwORTxQAZs95TAXLNqeLoPPNO5gZfWg==", + "dev": true, + "dependencies": { + "crypto-random-string": "^2.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/util-deprecate": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", + "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=" + }, + "node_modules/uuid": { + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz", + "integrity": "sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==", + "dev": true, + "bin": { + "uuid": "bin/uuid" + } + }, + "node_modules/which": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "dev": true, + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "node-which": "bin/node-which" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/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 + }, + "node_modules/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, + "dependencies": { + "string-width": "^1.0.2 || 2" + } + }, + "node_modules/workerpool": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/workerpool/-/workerpool-6.1.0.tgz", + "integrity": "sha512-toV7q9rWNYha963Pl/qyeZ6wG+3nnsyvolaNUS8+R5Wtw6qJPTxIlOP1ZSvcGhEJw+l3HMMmtiNo9Gl61G4GVg==", + "dev": true + }, + "node_modules/wrap-ansi": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, + "node_modules/wrap-ansi/node_modules/ansi-regex": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz", + "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/wrap-ansi/node_modules/is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/wrap-ansi/node_modules/string-width": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.0.tgz", + "integrity": "sha512-zUz5JD+tgqtuDjMhwIg5uFVV3dtqZ9yQJlZVfq4I01/K5Paj5UHj7VyrQOJvzawSVlKpObApbfD0Ed6yJc+1eg==", + "dev": true, + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/wrap-ansi/node_modules/strip-ansi": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz", + "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==", + "dev": true, + "dependencies": { + "ansi-regex": "^5.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/wrappy": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=" + }, + "node_modules/write-file-atomic": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-3.0.3.tgz", + "integrity": "sha512-AvHcyZ5JnSfq3ioSyjrBkH9yW4m7Ayk8/9My/DD9onKeu/94fwrMocemO2QAJFAlnnDN+ZDS+ZjAR5ua1/PV/Q==", + "dev": true, + "dependencies": { + "imurmurhash": "^0.1.4", + "is-typedarray": "^1.0.0", + "signal-exit": "^3.0.2", + "typedarray-to-buffer": "^3.1.5" + } + }, + "node_modules/xml2js": { + "version": "0.4.23", + "resolved": "https://registry.npmjs.org/xml2js/-/xml2js-0.4.23.tgz", + "integrity": "sha512-ySPiMjM0+pLDftHgXY4By0uswI3SPKLDw/i3UXbnO8M/p28zqexCUoPmQFrYD+/1BzhGJSs2i1ERWKJAtiLrug==", + "dependencies": { + "sax": ">=0.6.0", + "xmlbuilder": "~11.0.0" + }, + "engines": { + "node": ">=4.0.0" + } + }, + "node_modules/xmlbuilder": { + "version": "11.0.1", + "resolved": "https://registry.npmjs.org/xmlbuilder/-/xmlbuilder-11.0.1.tgz", + "integrity": "sha512-fDlsI/kFEx7gLvbecc0/ohLG50fugQp8ryHzMTuW9vSa1GJ0XYWKnhsUx7oie3G98+r56aTQIUB4kht42R3JvA==", + "engines": { + "node": ">=4.0" + } + }, + "node_modules/y18n": { + "version": "5.0.5", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.5.tgz", + "integrity": "sha512-hsRUr4FFrvhhRH12wOdfs38Gy7k2FFzB9qgN9v3aLykRq0dRcdcpz5C9FxdS2NuhOrI/628b/KSTJ3rwHysYSg==", + "dev": true, + "engines": { + "node": ">=10" + } + }, + "node_modules/yargs": { + "version": "16.2.0", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz", + "integrity": "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==", + "dev": true, + "dependencies": { + "cliui": "^7.0.2", + "escalade": "^3.1.1", + "get-caller-file": "^2.0.5", + "require-directory": "^2.1.1", + "string-width": "^4.2.0", + "y18n": "^5.0.5", + "yargs-parser": "^20.2.2" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/yargs-parser": { + "version": "20.2.4", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.4.tgz", + "integrity": "sha512-WOkpgNhPTlE73h4VFAFsOnomJVaovO8VqLDzy5saChRBFQFBoMYirowyW+Q9HB4HFF4Z7VZTiG3iSzJJA29yRA==", + "dev": true, + "engines": { + "node": ">=10" + } + }, + "node_modules/yargs-unparser": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/yargs-unparser/-/yargs-unparser-2.0.0.tgz", + "integrity": "sha512-7pRTIA9Qc1caZ0bZ6RYRGbHJthJWuakf+WmHK0rVeLkNrrGhfoabBNdue6kdINI6r4if7ocq9aD/n7xwKOdzOA==", + "dev": true, + "dependencies": { + "camelcase": "^6.0.0", + "decamelize": "^4.0.0", + "flat": "^5.0.2", + "is-plain-obj": "^2.1.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/yargs-unparser/node_modules/camelcase": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.2.0.tgz", + "integrity": "sha512-c7wVvbw3f37nuobQNtgsgG9POC9qMbNuMQmTCqZv23b6MIz0fcYpBiOlv9gEN/hdLdnZTDQhg6e9Dq5M1vKvfg==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/yargs-unparser/node_modules/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, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/yargs/node_modules/ansi-regex": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz", + "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/yargs/node_modules/is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/yargs/node_modules/string-width": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.0.tgz", + "integrity": "sha512-zUz5JD+tgqtuDjMhwIg5uFVV3dtqZ9yQJlZVfq4I01/K5Paj5UHj7VyrQOJvzawSVlKpObApbfD0Ed6yJc+1eg==", + "dev": true, + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/yargs/node_modules/strip-ansi": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz", + "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==", + "dev": true, + "dependencies": { + "ansi-regex": "^5.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/yauzl": { + "version": "2.10.0", + "resolved": "https://registry.npmjs.org/yauzl/-/yauzl-2.10.0.tgz", + "integrity": "sha1-x+sXyT4RLLEIb6bY5R+wZnt5pfk=", + "dependencies": { + "buffer-crc32": "~0.2.3", + "fd-slicer": "~1.1.0" + } + }, + "node_modules/yn": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/yn/-/yn-3.1.1.tgz", + "integrity": "sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/yocto-queue": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", + "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + } + }, "dependencies": { + "@babel/code-frame": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.12.13.tgz", + "integrity": "sha512-HV1Cm0Q3ZrpCR93tkWOYiuYIgLxZXZFVG2VgK+MBWjUqZTundupbfx2aXarXuw5Ko5aMcjtJgbSs4vUGBS5v6g==", + "dev": true, + "requires": { + "@babel/highlight": "^7.12.13" + } + }, + "@babel/core": { + "version": "7.12.17", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.12.17.tgz", + "integrity": "sha512-V3CuX1aBywbJvV2yzJScRxeiiw0v2KZZYYE3giywxzFJL13RiyPjaaDwhDnxmgFTTS7FgvM2ijr4QmKNIu0AtQ==", + "dev": true, + "requires": { + "@babel/code-frame": "^7.12.13", + "@babel/generator": "^7.12.17", + "@babel/helper-module-transforms": "^7.12.17", + "@babel/helpers": "^7.12.17", + "@babel/parser": "^7.12.17", + "@babel/template": "^7.12.13", + "@babel/traverse": "^7.12.17", + "@babel/types": "^7.12.17", + "convert-source-map": "^1.7.0", + "debug": "^4.1.0", + "gensync": "^1.0.0-beta.1", + "json5": "^2.1.2", + "lodash": "^4.17.19", + "semver": "^5.4.1", + "source-map": "^0.5.0" + }, + "dependencies": { + "semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", + "dev": true + } + } + }, + "@babel/generator": { + "version": "7.12.17", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.12.17.tgz", + "integrity": "sha512-DSA7ruZrY4WI8VxuS1jWSRezFnghEoYEFrZcw9BizQRmOZiUsiHl59+qEARGPqPikwA/GPTyRCi7isuCK/oyqg==", + "dev": true, + "requires": { + "@babel/types": "^7.12.17", + "jsesc": "^2.5.1", + "source-map": "^0.5.0" + } + }, + "@babel/helper-function-name": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.12.13.tgz", + "integrity": "sha512-TZvmPn0UOqmvi5G4vvw0qZTpVptGkB1GL61R6lKvrSdIxGm5Pky7Q3fpKiIkQCAtRCBUwB0PaThlx9vebCDSwA==", + "dev": true, + "requires": { + "@babel/helper-get-function-arity": "^7.12.13", + "@babel/template": "^7.12.13", + "@babel/types": "^7.12.13" + } + }, + "@babel/helper-get-function-arity": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.12.13.tgz", + "integrity": "sha512-DjEVzQNz5LICkzN0REdpD5prGoidvbdYk1BVgRUOINaWJP2t6avB27X1guXK1kXNrX0WMfsrm1A/ZBthYuIMQg==", + "dev": true, + "requires": { + "@babel/types": "^7.12.13" + } + }, + "@babel/helper-member-expression-to-functions": { + "version": "7.12.17", + "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.12.17.tgz", + "integrity": "sha512-Bzv4p3ODgS/qpBE0DiJ9qf5WxSmrQ8gVTe8ClMfwwsY2x/rhykxxy3bXzG7AGTnPB2ij37zGJ/Q/6FruxHxsxg==", + "dev": true, + "requires": { + "@babel/types": "^7.12.17" + } + }, + "@babel/helper-module-imports": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.12.13.tgz", + "integrity": "sha512-NGmfvRp9Rqxy0uHSSVP+SRIW1q31a7Ji10cLBcqSDUngGentY4FRiHOFZFE1CLU5eiL0oE8reH7Tg1y99TDM/g==", + "dev": true, + "requires": { + "@babel/types": "^7.12.13" + } + }, + "@babel/helper-module-transforms": { + "version": "7.12.17", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.12.17.tgz", + "integrity": "sha512-sFL+p6zOCQMm9vilo06M4VHuTxUAwa6IxgL56Tq1DVtA0ziAGTH1ThmJq7xwPqdQlgAbKX3fb0oZNbtRIyA5KQ==", + "dev": true, + "requires": { + "@babel/helper-module-imports": "^7.12.13", + "@babel/helper-replace-supers": "^7.12.13", + "@babel/helper-simple-access": "^7.12.13", + "@babel/helper-split-export-declaration": "^7.12.13", + "@babel/helper-validator-identifier": "^7.12.11", + "@babel/template": "^7.12.13", + "@babel/traverse": "^7.12.17", + "@babel/types": "^7.12.17", + "lodash": "^4.17.19" + } + }, + "@babel/helper-optimise-call-expression": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.12.13.tgz", + "integrity": "sha512-BdWQhoVJkp6nVjB7nkFWcn43dkprYauqtk++Py2eaf/GRDFm5BxRqEIZCiHlZUGAVmtwKcsVL1dC68WmzeFmiA==", + "dev": true, + "requires": { + "@babel/types": "^7.12.13" + } + }, + "@babel/helper-replace-supers": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.12.13.tgz", + "integrity": "sha512-pctAOIAMVStI2TMLhozPKbf5yTEXc0OJa0eENheb4w09SrgOWEs+P4nTOZYJQCqs8JlErGLDPDJTiGIp3ygbLg==", + "dev": true, + "requires": { + "@babel/helper-member-expression-to-functions": "^7.12.13", + "@babel/helper-optimise-call-expression": "^7.12.13", + "@babel/traverse": "^7.12.13", + "@babel/types": "^7.12.13" + } + }, + "@babel/helper-simple-access": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.12.13.tgz", + "integrity": "sha512-0ski5dyYIHEfwpWGx5GPWhH35j342JaflmCeQmsPWcrOQDtCN6C1zKAVRFVbK53lPW2c9TsuLLSUDf0tIGJ5hA==", + "dev": true, + "requires": { + "@babel/types": "^7.12.13" + } + }, + "@babel/helper-split-export-declaration": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.12.13.tgz", + "integrity": "sha512-tCJDltF83htUtXx5NLcaDqRmknv652ZWCHyoTETf1CXYJdPC7nohZohjUgieXhv0hTJdRf2FjDueFehdNucpzg==", + "dev": true, + "requires": { + "@babel/types": "^7.12.13" + } + }, + "@babel/helper-validator-identifier": { + "version": "7.12.11", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.12.11.tgz", + "integrity": "sha512-np/lG3uARFybkoHokJUmf1QfEvRVCPbmQeUQpKow5cQ3xWrV9i3rUHodKDJPQfTVX61qKi+UdYk8kik84n7XOw==", + "dev": true + }, + "@babel/helpers": { + "version": "7.12.17", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.12.17.tgz", + "integrity": "sha512-tEpjqSBGt/SFEsFikKds1sLNChKKGGR17flIgQKXH4fG6m9gTgl3gnOC1giHNyaBCSKuTfxaSzHi7UnvqiVKxg==", + "dev": true, + "requires": { + "@babel/template": "^7.12.13", + "@babel/traverse": "^7.12.17", + "@babel/types": "^7.12.17" + } + }, + "@babel/highlight": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.12.13.tgz", + "integrity": "sha512-kocDQvIbgMKlWxXe9fof3TQ+gkIPOUSEYhJjqUjvKMez3krV7vbzYCDq39Oj11UAVK7JqPVGQPlgE85dPNlQww==", + "dev": true, + "requires": { + "@babel/helper-validator-identifier": "^7.12.11", + "chalk": "^2.0.0", + "js-tokens": "^4.0.0" + }, + "dependencies": { + "ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, + "requires": { + "color-convert": "^1.9.0" + } + }, + "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" + } + }, + "color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "dev": true, + "requires": { + "color-name": "1.1.3" + } + }, + "color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", + "dev": true + }, + "escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", + "dev": true + }, + "has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", + "dev": true + }, + "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" + } + } + } + }, + "@babel/parser": { + "version": "7.12.17", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.12.17.tgz", + "integrity": "sha512-r1yKkiUTYMQ8LiEI0UcQx5ETw5dpTLn9wijn9hk6KkTtOK95FndDN10M+8/s6k/Ymlbivw0Av9q4SlgF80PtHg==", + "dev": true + }, + "@babel/template": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.12.13.tgz", + "integrity": "sha512-/7xxiGA57xMo/P2GVvdEumr8ONhFOhfgq2ihK3h1e6THqzTAkHbkXgB0xI9yeTfIUoH3+oAeHhqm/I43OTbbjA==", + "dev": true, + "requires": { + "@babel/code-frame": "^7.12.13", + "@babel/parser": "^7.12.13", + "@babel/types": "^7.12.13" + } + }, + "@babel/traverse": { + "version": "7.12.17", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.12.17.tgz", + "integrity": "sha512-LGkTqDqdiwC6Q7fWSwQoas/oyiEYw6Hqjve5KOSykXkmFJFqzvGMb9niaUEag3Rlve492Mkye3gLw9FTv94fdQ==", + "dev": true, + "requires": { + "@babel/code-frame": "^7.12.13", + "@babel/generator": "^7.12.17", + "@babel/helper-function-name": "^7.12.13", + "@babel/helper-split-export-declaration": "^7.12.13", + "@babel/parser": "^7.12.17", + "@babel/types": "^7.12.17", + "debug": "^4.1.0", + "globals": "^11.1.0", + "lodash": "^4.17.19" + } + }, + "@babel/types": { + "version": "7.12.17", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.12.17.tgz", + "integrity": "sha512-tNMDjcv/4DIcHxErTgwB9q2ZcYyN0sUfgGKUK/mm1FJK7Wz+KstoEekxrl/tBiNDgLK1HGi+sppj1An/1DR4fQ==", + "dev": true, + "requires": { + "@babel/helper-validator-identifier": "^7.12.11", + "lodash": "^4.17.19", + "to-fast-properties": "^2.0.0" + } + }, + "@istanbuljs/load-nyc-config": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@istanbuljs/load-nyc-config/-/load-nyc-config-1.1.0.tgz", + "integrity": "sha512-VjeHSlIzpv/NyD3N0YuHfXOPDIixcA1q2ZV98wsMqcYlPmv2n3Yb2lYP9XMElnaFVXg5A7YLTeLu6V84uQDjmQ==", + "dev": true, + "requires": { + "camelcase": "^5.3.1", + "find-up": "^4.1.0", + "get-package-type": "^0.1.0", + "js-yaml": "^3.13.1", + "resolve-from": "^5.0.0" + }, + "dependencies": { + "argparse": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", + "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", + "dev": true, + "requires": { + "sprintf-js": "~1.0.2" + } + }, + "find-up": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", + "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", + "dev": true, + "requires": { + "locate-path": "^5.0.0", + "path-exists": "^4.0.0" + } + }, + "js-yaml": { + "version": "3.14.1", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", + "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", + "dev": true, + "requires": { + "argparse": "^1.0.7", + "esprima": "^4.0.0" + } + }, + "locate-path": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", + "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", + "dev": true, + "requires": { + "p-locate": "^4.1.0" + } + }, + "p-limit": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", + "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", + "dev": true, + "requires": { + "p-try": "^2.0.0" + } + }, + "p-locate": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", + "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", + "dev": true, + "requires": { + "p-limit": "^2.2.0" + } + } + } + }, + "@istanbuljs/schema": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/@istanbuljs/schema/-/schema-0.1.3.tgz", + "integrity": "sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA==", + "dev": true + }, "@nodelib/fs.scandir": { "version": "2.1.4", "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.4.tgz", @@ -32,11 +3816,38 @@ "resolved": "https://registry.npmjs.org/@testim/chrome-version/-/chrome-version-1.0.7.tgz", "integrity": "sha512-8UT/J+xqCYfn3fKtOznAibsHpiuDshCb0fwgWxRazTT19Igp9ovoXMPhXyLD6m3CKQGTMHgqoxaFfMWaL40Rnw==" }, + "@types/chai": { + "version": "4.2.15", + "resolved": "https://registry.npmjs.org/@types/chai/-/chai-4.2.15.tgz", + "integrity": "sha512-rYff6FI+ZTKAPkJUoyz7Udq3GaoDZnxYDEvdEdFZASiA7PoErltHezDishqQiSDWrGxvxmplH304jyzQmjp0AQ==", + "dev": true + }, + "@types/chromedriver": { + "version": "81.0.0", + "resolved": "https://registry.npmjs.org/@types/chromedriver/-/chromedriver-81.0.0.tgz", + "integrity": "sha512-Oqwo24DPn5lYI66aA74ApKrfAqVFEjC66raiB/2eHhhryYiumlMpRTR/++riaRcXmfrLXrIiNTtE+Op4vGCIFQ==", + "dev": true, + "requires": { + "@types/node": "*" + } + }, + "@types/mocha": { + "version": "8.2.1", + "resolved": "https://registry.npmjs.org/@types/mocha/-/mocha-8.2.1.tgz", + "integrity": "sha512-NysN+bNqj6E0Hv4CTGWSlPzMW6vTKjDpOteycDkV4IWBsO+PU48JonrPzV9ODjiI2XrjmA05KInLgF5ivZ/YGQ==", + "dev": true + }, "@types/node": { - "version": "14.14.21", - "resolved": "https://registry.npmjs.org/@types/node/-/node-14.14.21.tgz", - "integrity": "sha512-cHYfKsnwllYhjOzuC5q1VpguABBeecUp24yFluHpn/BQaVxB1CuQ1FSRZCzrPxrkIfWISXV2LbeoBthLWg0+0A==", - "optional": true + "version": "14.14.31", + "resolved": "https://registry.npmjs.org/@types/node/-/node-14.14.31.tgz", + "integrity": "sha512-vFHy/ezP5qI0rFgJ7aQnjDXwAMrG0KqqIH7tQG5PPv3BWBayOPIQNBjVc/P6hhdZfMx51REc6tfDNXHUio893g==", + "devOptional": true + }, + "@types/selenium-webdriver": { + "version": "4.0.11", + "resolved": "https://registry.npmjs.org/@types/selenium-webdriver/-/selenium-webdriver-4.0.11.tgz", + "integrity": "sha512-VHv3kVxdploPZRa5Epsrgae9f8Wp0B+TVj3L93Yv0nB2RCRGRTKuhz/vRUZR4yItLqzdIxsxALe3qT3yqTAJTg==", + "dev": true }, "@types/yauzl": { "version": "2.9.1", @@ -47,27 +3858,18 @@ "@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 + }, "agent-base": { "version": "6.0.2", "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz", "integrity": "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==", "requires": { "debug": "4" - }, - "dependencies": { - "debug": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.1.tgz", - "integrity": "sha512-doEwdvm4PCeK4K3RQN2ZC2BYUBaxwLARCqZmMjtF8a51J2Rb0xpVloFRnCODwqjpwnAoao4pelN8l3RJdv3gRQ==", - "requires": { - "ms": "2.1.2" - } - }, - "ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" - } } }, "aggregate-error": { @@ -79,6 +3881,64 @@ "indent-string": "^4.0.0" } }, + "ansi-colors": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.1.tgz", + "integrity": "sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA==", + "dev": true + }, + "ansi-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", + "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", + "dev": true + }, + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "requires": { + "color-convert": "^2.0.1" + } + }, + "anymatch": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.1.tgz", + "integrity": "sha512-mM8522psRCqzV+6LhomX5wgp25YVibjh8Wj23I5RPkPppSVSjyKD2A2mBJmWGa+KN7f2D6LNh9jkBCeyLktzjg==", + "dev": true, + "requires": { + "normalize-path": "^3.0.0", + "picomatch": "^2.0.4" + } + }, + "append-transform": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/append-transform/-/append-transform-2.0.0.tgz", + "integrity": "sha512-7yeyCEurROLQJFv5Xj4lEGTy0borxepjFv1g22oAdqFu//SrAlDl1O1Nxx15SH1RoliUml6p8dwJW9jvZughhg==", + "dev": true, + "requires": { + "default-require-extensions": "^3.0.0" + } + }, + "archy": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/archy/-/archy-1.0.0.tgz", + "integrity": "sha1-+cjBN1fMHde8N5rHeyxipcKGjEA=", + "dev": true + }, + "arg": { + "version": "4.1.3", + "resolved": "https://registry.npmjs.org/arg/-/arg-4.1.3.tgz", + "integrity": "sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==", + "dev": true + }, + "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 + }, "array-union": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz", @@ -91,9 +3951,9 @@ "dev": true }, "axe-core": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/axe-core/-/axe-core-4.1.1.tgz", - "integrity": "sha512-5Kgy8Cz6LPC9DJcNb3yjAXTu3XihQgEdnIg50c//zOC/MyLP0Clg+Y8Sh9ZjjnvBrDZU4DgXS9C3T9r4/scGZQ==" + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/axe-core/-/axe-core-4.1.2.tgz", + "integrity": "sha512-V+Nq70NxKhYt89ArVcaNL9FDryB3vQOd+BFXZIfO3RP6rwtj+2yqqqdHEkacutglPaZLkJeuXKCjCJDMGPtPqg==" }, "axios": { "version": "0.21.1", @@ -108,6 +3968,12 @@ "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz", "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=" }, + "binary-extensions": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz", + "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==", + "dev": true + }, "brace-expansion": { "version": "1.1.11", "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", @@ -136,10 +4002,34 @@ "resolved": "https://registry.npmjs.org/buffer-crc32/-/buffer-crc32-0.2.13.tgz", "integrity": "sha1-DTM+PwDqxQqhRUq9MO+MKl2ackI=" }, + "buffer-from": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.1.tgz", + "integrity": "sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A==", + "dev": true + }, + "caching-transform": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/caching-transform/-/caching-transform-4.0.0.tgz", + "integrity": "sha512-kpqOvwXnjjN44D89K5ccQC+RUrsy7jB/XLlRrx0D7/2HNcTPqzsb6XgYoErwko6QsV184CA2YgS1fxDiiDZMWA==", + "dev": true, + "requires": { + "hasha": "^5.0.0", + "make-dir": "^3.0.0", + "package-hash": "^4.0.0", + "write-file-atomic": "^3.0.0" + } + }, + "camelcase": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", + "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", + "dev": true + }, "chai": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/chai/-/chai-4.2.0.tgz", - "integrity": "sha512-XQU3bhBukrOsQCuwZndwGcCVQHyZi53fQ6Ys1Fym7E4olpIqqZZhhoFJoaKVvV17lWQoXYwgWN2nF5crA8J2jw==", + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/chai/-/chai-4.3.0.tgz", + "integrity": "sha512-/BFd2J30EcOwmdOgXvVsmM48l0Br0nmZPlO0uOW4XKh6kpsUumRXBgPV+IlaqFaqr9cYbeoZAM1Npx0i4A+aiA==", "dev": true, "requires": { "assertion-error": "^1.1.0", @@ -150,19 +4040,56 @@ "type-detect": "^4.0.5" } }, + "chalk": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.0.tgz", + "integrity": "sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A==", + "dev": true, + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "dependencies": { + "supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "requires": { + "has-flag": "^4.0.0" + } + } + } + }, "check-error": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/check-error/-/check-error-1.0.2.tgz", "integrity": "sha1-V00xLt2Iu13YkS6Sht1sCu1KrII=", "dev": true }, + "chokidar": { + "version": "3.5.1", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.1.tgz", + "integrity": "sha512-9+s+Od+W0VJJzawDma/gvBNQqkTiqYTWLuZoyAsivsI4AaWTCzHG06/TMjsf1cYe9Cb97UCEhjz7HvnPk2p/tw==", + "dev": true, + "requires": { + "anymatch": "~3.1.1", + "braces": "~3.0.2", + "fsevents": "~2.3.1", + "glob-parent": "~5.1.0", + "is-binary-path": "~2.1.0", + "is-glob": "~4.0.1", + "normalize-path": "~3.0.0", + "readdirp": "~3.5.0" + } + }, "chromedriver": { - "version": "87.0.5", - "resolved": "https://registry.npmjs.org/chromedriver/-/chromedriver-87.0.5.tgz", - "integrity": "sha512-bWAKdZANrt3LXMUOKFP+DgW7DjVKfihCbjej6URkUcKsvbQBDYpf5YY5d/dXE3SOSzIFZ7fmLxogusxpsupCJg==", + "version": "88.0.0", + "resolved": "https://registry.npmjs.org/chromedriver/-/chromedriver-88.0.0.tgz", + "integrity": "sha512-EE8rXh7mikxk3VWKjUsz0KCUX8d3HkQ4HgMNJhWrWjzju12dKPPVHO9MY+YaAI5ryXrXGNf0Y4HcNKgW36P/CA==", "requires": { "@testim/chrome-version": "^1.0.7", - "axios": "^0.21.0", + "axios": "^0.21.1", "del": "^6.0.0", "extract-zip": "^2.0.1", "https-proxy-agent": "^5.0.0", @@ -176,26 +4103,107 @@ "resolved": "https://registry.npmjs.org/clean-stack/-/clean-stack-2.2.0.tgz", "integrity": "sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==" }, + "cliui": { + "version": "7.0.4", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz", + "integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==", + "dev": true, + "requires": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.0", + "wrap-ansi": "^7.0.0" + }, + "dependencies": { + "ansi-regex": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz", + "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==", + "dev": true + }, + "is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "dev": true + }, + "string-width": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.0.tgz", + "integrity": "sha512-zUz5JD+tgqtuDjMhwIg5uFVV3dtqZ9yQJlZVfq4I01/K5Paj5UHj7VyrQOJvzawSVlKpObApbfD0Ed6yJc+1eg==", + "dev": true, + "requires": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.0" + } + }, + "strip-ansi": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz", + "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==", + "dev": true, + "requires": { + "ansi-regex": "^5.0.0" + } + } + } + }, + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, "colors": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/colors/-/colors-1.4.0.tgz", "integrity": "sha512-a+UqTh4kgZg/SlGvfbzDHpgRu7AAQOmmqRHJnxhRZICKFUT91brVhNNt58CMWU9PsBbv3PDCZUHbVxuDiH2mtA==" }, "commander": { - "version": "2.20.3", - "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", - "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==" + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-7.1.0.tgz", + "integrity": "sha512-pRxBna3MJe6HKnBGsDyMv8ETbptw3axEdYHoqNh7gu5oDcew8fs0xnivZGm06Ogk8zGAJ9VX+OPEr2GXEQK4dg==" + }, + "commondir": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/commondir/-/commondir-1.0.1.tgz", + "integrity": "sha1-3dgA2gxmEnOTzKWVDqloo6rxJTs=", + "dev": true }, "concat-map": { "version": "0.0.1", "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=" }, + "convert-source-map": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.7.0.tgz", + "integrity": "sha512-4FJkXzKXEDB1snCFZlLP4gpC3JILicCpGbzG9f9G7tGqGCzETQ2hWPrcinA9oU4wtf2biUaEH5065UnMeR33oA==", + "dev": true, + "requires": { + "safe-buffer": "~5.1.1" + } + }, "core-util-is": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=" }, + "create-require": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/create-require/-/create-require-1.1.1.tgz", + "integrity": "sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==", + "dev": true + }, "cross-spawn": { "version": "7.0.3", "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", @@ -214,14 +4222,19 @@ "dev": true }, "debug": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", - "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", - "dev": true, + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.1.tgz", + "integrity": "sha512-doEwdvm4PCeK4K3RQN2ZC2BYUBaxwLARCqZmMjtF8a51J2Rb0xpVloFRnCODwqjpwnAoao4pelN8l3RJdv3gRQ==", "requires": { - "ms": "2.0.0" + "ms": "2.1.2" } }, + "decamelize": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", + "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=", + "dev": true + }, "deep-eql": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/deep-eql/-/deep-eql-3.0.1.tgz", @@ -236,6 +4249,15 @@ "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.3.tgz", "integrity": "sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ=" }, + "default-require-extensions": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/default-require-extensions/-/default-require-extensions-3.0.0.tgz", + "integrity": "sha512-ek6DpXq/SCpvjhpFsLFRVtIxJCRw6fUR42lYMVZuUMK7n8eMz4Uh5clckdBjEpLhn/gEBZo7hDJnJcwdKLKQjg==", + "dev": true, + "requires": { + "strip-bom": "^4.0.0" + } + }, "del": { "version": "6.0.0", "resolved": "https://registry.npmjs.org/del/-/del-6.0.0.tgz", @@ -252,9 +4274,9 @@ } }, "diff": { - "version": "3.5.0", - "resolved": "https://registry.npmjs.org/diff/-/diff-3.5.0.tgz", - "integrity": "sha512-A46qtFgd+g7pDZinpnwiRJtxbC1hpgf0uzP3iG89scHk0AUC7A1TGxf5OiiOUv/JMZR8GOt8hL900hV0bOy5xA==", + "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": { @@ -265,6 +4287,12 @@ "path-type": "^4.0.0" } }, + "emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "dev": true + }, "end-of-stream": { "version": "1.4.4", "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz", @@ -273,26 +4301,44 @@ "once": "^1.4.0" } }, + "es6-error": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/es6-error/-/es6-error-4.1.1.tgz", + "integrity": "sha512-Um/+FxMr9CISWh0bi5Zv0iOD+4cFh5qLeks1qhAopKVAJw3drgKbKySikp7wGhDL0HPeaja0P5ULZrxLkniUVg==", + "dev": true + }, + "escalade": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", + "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==", + "dev": true + }, "escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", + "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", + "dev": true + }, + "esprima": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", + "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", "dev": true }, "execa": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/execa/-/execa-4.1.0.tgz", - "integrity": "sha512-j5W0//W7f8UxAn8hXVnwG8tLwdiUy4FJLcSupCg6maBYZDpyBvTApK7KyuI4bKj8KOh1r2YH+6ucuYtJv1bTZA==", + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/execa/-/execa-5.0.0.tgz", + "integrity": "sha512-ov6w/2LCiuyO4RLYGdpFGjkcs0wMTgGE8PrkTHikeUy5iJekXyPIKUjifk5CsE0pt7sMCrMZ3YNqoCj6idQOnQ==", "dev": true, "requires": { - "cross-spawn": "^7.0.0", - "get-stream": "^5.0.0", - "human-signals": "^1.1.1", + "cross-spawn": "^7.0.3", + "get-stream": "^6.0.0", + "human-signals": "^2.1.0", "is-stream": "^2.0.0", "merge-stream": "^2.0.0", - "npm-run-path": "^4.0.0", - "onetime": "^5.1.0", - "signal-exit": "^3.0.2", + "npm-run-path": "^4.0.1", + "onetime": "^5.1.2", + "signal-exit": "^3.0.3", "strip-final-newline": "^2.0.0" } }, @@ -307,25 +4353,20 @@ "yauzl": "^2.10.0" }, "dependencies": { - "debug": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.1.tgz", - "integrity": "sha512-doEwdvm4PCeK4K3RQN2ZC2BYUBaxwLARCqZmMjtF8a51J2Rb0xpVloFRnCODwqjpwnAoao4pelN8l3RJdv3gRQ==", + "get-stream": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz", + "integrity": "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==", "requires": { - "ms": "2.1.2" + "pump": "^3.0.0" } - }, - "ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" } } }, "fast-glob": { - "version": "3.2.4", - "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.4.tgz", - "integrity": "sha512-kr/Oo6PX51265qeuCYsyGypiO5uJFgBS0jksyG7FUeCyQzNwYnzrNIMR1NXfkZXsMYXYLRAHgISHBz8gQcxKHQ==", + "version": "3.2.5", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.5.tgz", + "integrity": "sha512-2DtFcgT68wiTTiwZ2hNdJfcHNke9XOfnwmBRWXhmeKM8rF0TGwmC/Qto3S7RoZKp5cilZbxzO5iTNTQsJ+EeDg==", "requires": { "@nodelib/fs.stat": "^2.0.2", "@nodelib/fs.walk": "^1.2.3", @@ -336,9 +4377,9 @@ } }, "fastq": { - "version": "1.10.0", - "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.10.0.tgz", - "integrity": "sha512-NL2Qc5L3iQEsyYzweq7qfgy5OtXCmGzGvhElGEd/SoFWEMOEczNh5s5ocaF01HDetxz+p8ecjNPA6cZxxIHmzA==", + "version": "1.10.1", + "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.10.1.tgz", + "integrity": "sha512-AWuv6Ery3pM+dY7LYS8YIaCiQvUaos9OB1RyNgaOWnaX+Tik7Onvcsf8x8c+YtDeT0maYLniBip2hox5KtEXXA==", "requires": { "reusify": "^1.0.4" } @@ -359,29 +4400,95 @@ "to-regex-range": "^5.0.1" } }, + "find-cache-dir": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-3.3.1.tgz", + "integrity": "sha512-t2GDMt3oGC/v+BMwzmllWDuJF/xcDtE5j/fCGbqDD7OLuJkj0cfh1YSA5VKPvwMeLFLNDBkwOKZ2X85jGLVftQ==", + "dev": true, + "requires": { + "commondir": "^1.0.1", + "make-dir": "^3.0.2", + "pkg-dir": "^4.1.0" + } + }, + "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": { + "locate-path": "^6.0.0", + "path-exists": "^4.0.0" + } + }, + "flat": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/flat/-/flat-5.0.2.tgz", + "integrity": "sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ==", + "dev": true + }, "follow-redirects": { - "version": "1.13.1", - "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.13.1.tgz", - "integrity": "sha512-SSG5xmZh1mkPGyKzjZP8zLjltIfpW32Y5QpdNJyjcfGxK3qo3NDDkZOZSFiGn1A6SclQxY9GzEwAHQ3dmYRWpg==" + "version": "1.13.2", + "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.13.2.tgz", + "integrity": "sha512-6mPTgLxYm3r6Bkkg0vNM0HTjfGrOEtsfbhagQvbxDEsEkpNhw582upBaoRZylzen6krEmxXJgt9Ju6HiI4O7BA==" + }, + "foreground-child": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-2.0.0.tgz", + "integrity": "sha512-dCIq9FpEcyQyXKCkyzmlPTFNgrCzPudOe+mhvJU5zAtlBnGVy2yKxtfsxK2tQBThwq225jcvBjpw1Gr40uzZCA==", + "dev": true, + "requires": { + "cross-spawn": "^7.0.0", + "signal-exit": "^3.0.2" + } + }, + "fromentries": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/fromentries/-/fromentries-1.3.2.tgz", + "integrity": "sha512-cHEpEQHUg0f8XdtZCc2ZAhrHzKzT0MrFUTcvx+hfxYu7rGMDc5SKoXFh+n4YigxsHXRzc6OrCshdR1bWH6HHyg==", + "dev": true }, "fs.realpath": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=" }, + "fsevents": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", + "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", + "dev": true, + "optional": true + }, + "gensync": { + "version": "1.0.0-beta.2", + "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", + "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==", + "dev": true + }, + "get-caller-file": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", + "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", + "dev": true + }, "get-func-name": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/get-func-name/-/get-func-name-2.0.0.tgz", "integrity": "sha1-6td0q+5y4gQJQzoGY2YCPdaIekE=", "dev": true }, + "get-package-type": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/get-package-type/-/get-package-type-0.1.0.tgz", + "integrity": "sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q==", + "dev": true + }, "get-stream": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz", - "integrity": "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==", - "requires": { - "pump": "^3.0.0" - } + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.0.tgz", + "integrity": "sha512-A1B3Bh1UmL0bidM/YX2NsCOTnGJePL9rO/M+Mw3m9f2gUpfokS0hi5Eah0WSUEWZdZhIZtMjkIYS7mDfOqNHbg==", + "dev": true }, "glob": { "version": "7.1.6", @@ -404,6 +4511,12 @@ "is-glob": "^4.0.1" } }, + "globals": { + "version": "11.12.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", + "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", + "dev": true + }, "globby": { "version": "11.0.2", "resolved": "https://registry.npmjs.org/globby/-/globby-11.0.2.tgz", @@ -418,9 +4531,9 @@ } }, "graceful-fs": { - "version": "4.2.4", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.4.tgz", - "integrity": "sha512-WjKPNJF79dtJAVniUlGGWHYGz2jWxT6VhN/4m1NdkbZ2nOsEF+cI1Edgql5zCRhs/VsQYRvrXctxktVXZUkixw==" + "version": "4.2.6", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.6.tgz", + "integrity": "sha512-nTnJ528pbqxYanhpDYsi4Rd8MAeaBA67+RZ10CM1m3bTAVFEDcd5AuA4a6W5YkGZ1iNXHzZz8T6TBKLeBuNriQ==" }, "growl": { "version": "1.10.5", @@ -429,15 +4542,31 @@ "dev": true }, "has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", "dev": true }, + "hasha": { + "version": "5.2.2", + "resolved": "https://registry.npmjs.org/hasha/-/hasha-5.2.2.tgz", + "integrity": "sha512-Hrp5vIK/xr5SkeN2onO32H0MgNZ0f17HRNH39WfL0SYUNOTZ5Lz1TJ8Pajo/87dYGEFlLMm7mIc/k/s6Bvz9HQ==", + "dev": true, + "requires": { + "is-stream": "^2.0.0", + "type-fest": "^0.8.0" + } + }, "he": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/he/-/he-1.1.1.tgz", - "integrity": "sha1-k0EP0hsAlzUVH4howvJx80J+I/0=", + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/he/-/he-1.2.0.tgz", + "integrity": "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==", + "dev": true + }, + "html-escaper": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/html-escaper/-/html-escaper-2.0.2.tgz", + "integrity": "sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==", "dev": true }, "https-proxy-agent": { @@ -447,27 +4576,12 @@ "requires": { "agent-base": "6", "debug": "4" - }, - "dependencies": { - "debug": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.1.tgz", - "integrity": "sha512-doEwdvm4PCeK4K3RQN2ZC2BYUBaxwLARCqZmMjtF8a51J2Rb0xpVloFRnCODwqjpwnAoao4pelN8l3RJdv3gRQ==", - "requires": { - "ms": "2.1.2" - } - }, - "ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" - } } }, "human-signals": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-1.1.1.tgz", - "integrity": "sha512-SEQu7vl8KjNL2eoGBLF3+wAjpsNfA9XMlXAYj/3EdaNfAlxKthD1xjEQfGOUhllCGGJVNY34bRr6lPINhNjyZw==", + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-2.1.0.tgz", + "integrity": "sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==", "dev": true }, "ignore": { @@ -480,6 +4594,12 @@ "resolved": "https://registry.npmjs.org/immediate/-/immediate-3.0.6.tgz", "integrity": "sha1-nbHb0Pr43m++D13V5Wu2BigN5ps=" }, + "imurmurhash": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", + "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o=", + "dev": true + }, "indent-string": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz", @@ -500,15 +4620,30 @@ "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" }, "ip-regex": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/ip-regex/-/ip-regex-4.2.0.tgz", - "integrity": "sha512-n5cDDeTWWRwK1EBoWwRti+8nP4NbytBBY0pldmnIkq6Z55KNFmWofh4rl9dPZpj+U/nVq7gweR3ylrvMt4YZ5A==" + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ip-regex/-/ip-regex-4.3.0.tgz", + "integrity": "sha512-B9ZWJxHHOHUhUjCPrMpLD4xEq35bUTClHM1S6CBU5ixQnkZmwipwgc96vAd7AAGM9TGHvJR+Uss+/Ak6UphK+Q==" + }, + "is-binary-path": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", + "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", + "dev": true, + "requires": { + "binary-extensions": "^2.0.0" + } }, "is-extglob": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=" }, + "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 + }, "is-glob": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.1.tgz", @@ -532,17 +4667,35 @@ "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.2.tgz", "integrity": "sha512-/2UGPSgmtqwo1ktx8NDHjuPwZWmHhO+gj0f93EkhLB5RgW9RZevWYYlIkS6zePc6U2WpOdQYIwHe9YC4DWEBVg==" }, + "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 + }, "is-stream": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.0.tgz", "integrity": "sha512-XCoy+WlUr7d1+Z8GgSuXmpuUFC9fOhRXglJMx+dwLKTkL44Cjd4W1Z5P+BQZpr+cR93aGP4S/s7Ftw6Nd/kiEw==", "dev": true }, + "is-typedarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", + "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=", + "dev": true + }, "is-url": { "version": "1.2.4", "resolved": "https://registry.npmjs.org/is-url/-/is-url-1.2.4.tgz", "integrity": "sha512-ITvGim8FhRiYe4IQ5uHSkj7pVaPDrCTkNd3yq3cV7iZAcJdHTUMPMEHcqSOy9xZ9qFenQCvi+2wjH9a1nXqHww==" }, + "is-windows": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-windows/-/is-windows-1.0.2.tgz", + "integrity": "sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==", + "dev": true + }, "is2": { "version": "2.0.6", "resolved": "https://registry.npmjs.org/is2/-/is2-2.0.6.tgz", @@ -564,10 +4717,144 @@ "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=", "dev": true }, + "istanbul-lib-coverage": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-3.0.0.tgz", + "integrity": "sha512-UiUIqxMgRDET6eR+o5HbfRYP1l0hqkWOs7vNxC/mggutCMUIhWMm8gAHb8tHlyfD3/l6rlgNA5cKdDzEAf6hEg==", + "dev": true + }, + "istanbul-lib-hook": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/istanbul-lib-hook/-/istanbul-lib-hook-3.0.0.tgz", + "integrity": "sha512-Pt/uge1Q9s+5VAZ+pCo16TYMWPBIl+oaNIjgLQxcX0itS6ueeaA+pEfThZpH8WxhFgCiEb8sAJY6MdUKgiIWaQ==", + "dev": true, + "requires": { + "append-transform": "^2.0.0" + } + }, + "istanbul-lib-instrument": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-4.0.3.tgz", + "integrity": "sha512-BXgQl9kf4WTCPCCpmFGoJkz/+uhvm7h7PFKUYxh7qarQd3ER33vHG//qaE8eN25l07YqZPpHXU9I09l/RD5aGQ==", + "dev": true, + "requires": { + "@babel/core": "^7.7.5", + "@istanbuljs/schema": "^0.1.2", + "istanbul-lib-coverage": "^3.0.0", + "semver": "^6.3.0" + } + }, + "istanbul-lib-processinfo": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/istanbul-lib-processinfo/-/istanbul-lib-processinfo-2.0.2.tgz", + "integrity": "sha512-kOwpa7z9hme+IBPZMzQ5vdQj8srYgAtaRqeI48NGmAQ+/5yKiHLV0QbYqQpxsdEF0+w14SoB8YbnHKcXE2KnYw==", + "dev": true, + "requires": { + "archy": "^1.0.0", + "cross-spawn": "^7.0.0", + "istanbul-lib-coverage": "^3.0.0-alpha.1", + "make-dir": "^3.0.0", + "p-map": "^3.0.0", + "rimraf": "^3.0.0", + "uuid": "^3.3.3" + }, + "dependencies": { + "p-map": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/p-map/-/p-map-3.0.0.tgz", + "integrity": "sha512-d3qXVTF/s+W+CdJ5A29wywV2n8CQQYahlgz2bFiA+4eVNJbHJodPZ+/gXwPGh0bOqA+j8S+6+ckmvLGPk1QpxQ==", + "dev": true, + "requires": { + "aggregate-error": "^3.0.0" + } + } + } + }, + "istanbul-lib-report": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/istanbul-lib-report/-/istanbul-lib-report-3.0.0.tgz", + "integrity": "sha512-wcdi+uAKzfiGT2abPpKZ0hSU1rGQjUQnLvtY5MpQ7QCTahD3VODhcu4wcfY1YtkGaDD5yuydOLINXsfbus9ROw==", + "dev": true, + "requires": { + "istanbul-lib-coverage": "^3.0.0", + "make-dir": "^3.0.0", + "supports-color": "^7.1.0" + }, + "dependencies": { + "supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "requires": { + "has-flag": "^4.0.0" + } + } + } + }, + "istanbul-lib-source-maps": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/istanbul-lib-source-maps/-/istanbul-lib-source-maps-4.0.0.tgz", + "integrity": "sha512-c16LpFRkR8vQXyHZ5nLpY35JZtzj1PQY1iZmesUbf1FZHbIupcWfjgOXBY9YHkLEQ6puz1u4Dgj6qmU/DisrZg==", + "dev": true, + "requires": { + "debug": "^4.1.1", + "istanbul-lib-coverage": "^3.0.0", + "source-map": "^0.6.1" + }, + "dependencies": { + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true + } + } + }, + "istanbul-reports": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-3.0.2.tgz", + "integrity": "sha512-9tZvz7AiR3PEDNGiV9vIouQ/EAcqMXFmkcA1CDFTwOB98OZVDL0PH9glHotf5Ugp6GCOTypfzGWI/OqjWNCRUw==", + "dev": true, + "requires": { + "html-escaper": "^2.0.0", + "istanbul-lib-report": "^3.0.0" + } + }, + "js-tokens": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", + "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", + "dev": true + }, + "js-yaml": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.0.0.tgz", + "integrity": "sha512-pqon0s+4ScYUvX30wxQi3PogGFAlUyH0awepWvwkj4jD4v+ova3RiYw8bmA6x2rDrEaj8i/oWKoRxpVNW+Re8Q==", + "dev": true, + "requires": { + "argparse": "^2.0.1" + } + }, + "jsesc": { + "version": "2.5.2", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz", + "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==", + "dev": true + }, + "json5": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.0.tgz", + "integrity": "sha512-f+8cldu7X/y7RAJurMEJmdoKXGB/X550w2Nr3tTbezL6RwEE/iMcm+tZnXeoZtKuOq6ft8+CqzEkrIgx1fPoQA==", + "dev": true, + "requires": { + "minimist": "^1.2.5" + } + }, "jszip": { - "version": "3.5.0", - "resolved": "https://registry.npmjs.org/jszip/-/jszip-3.5.0.tgz", - "integrity": "sha512-WRtu7TPCmYePR1nazfrtuF216cIVon/3GWOvHS9QR5bIwSbnxtdpma6un3jyGGNhHsKCSzn5Ypk+EkDRvTGiFA==", + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/jszip/-/jszip-3.6.0.tgz", + "integrity": "sha512-jgnQoG9LKnWO3mnVNBnfhkh0QknICd1FGSrXcgrl67zioyJ4wgx25o9ZqwNtrROSflGBCGYnJfjrIyRIby1OoQ==", "requires": { "lie": "~3.3.0", "pako": "~1.0.2", @@ -583,6 +4870,51 @@ "immediate": "~3.0.5" } }, + "locate-path": { + "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": "^5.0.0" + } + }, + "lodash": { + "version": "4.17.21", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", + "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", + "dev": true + }, + "lodash.flattendeep": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/lodash.flattendeep/-/lodash.flattendeep-4.4.0.tgz", + "integrity": "sha1-+wMJF/hqMTTlvJvsDWngAT3f7bI=", + "dev": true + }, + "log-symbols": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-4.0.0.tgz", + "integrity": "sha512-FN8JBzLx6CzeMrB0tg6pqlGU1wCrXW+ZXGH481kfsBqer0hToTIiHdjH4Mq8xJUbvATujKCvaREGWpGUionraA==", + "dev": true, + "requires": { + "chalk": "^4.0.0" + } + }, + "make-dir": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz", + "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==", + "dev": true, + "requires": { + "semver": "^6.0.0" + } + }, + "make-error": { + "version": "1.3.6", + "resolved": "https://registry.npmjs.org/make-error/-/make-error-1.3.6.tgz", + "integrity": "sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==", + "dev": true + }, "merge-stream": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", @@ -603,12 +4935,6 @@ "picomatch": "^2.0.5" } }, - "mime": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", - "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==", - "dev": true - }, "mimic-fn": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", @@ -624,9 +4950,9 @@ } }, "minimist": { - "version": "0.0.8", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz", - "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=", + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz", + "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==", "dev": true }, "mkdirp": { @@ -635,72 +4961,72 @@ "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==" }, "mocha": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/mocha/-/mocha-5.2.0.tgz", - "integrity": "sha512-2IUgKDhc3J7Uug+FxMXuqIyYzH7gJjXECKe/w43IGgQHTSj3InJi+yAA7T24L9bQMRKiUEHxEX37G5JpVUGLcQ==", + "version": "8.3.0", + "resolved": "https://registry.npmjs.org/mocha/-/mocha-8.3.0.tgz", + "integrity": "sha512-TQqyC89V1J/Vxx0DhJIXlq9gbbL9XFNdeLQ1+JsnZsVaSOV1z3tWfw0qZmQJGQRIfkvZcs7snQnZnOCKoldq1Q==", "dev": true, "requires": { + "@ungap/promise-all-settled": "1.1.2", + "ansi-colors": "4.1.1", "browser-stdout": "1.3.1", - "commander": "2.15.1", - "debug": "3.1.0", - "diff": "3.5.0", - "escape-string-regexp": "1.0.5", - "glob": "7.1.2", + "chokidar": "3.5.1", + "debug": "4.3.1", + "diff": "5.0.0", + "escape-string-regexp": "4.0.0", + "find-up": "5.0.0", + "glob": "7.1.6", "growl": "1.10.5", - "he": "1.1.1", + "he": "1.2.0", + "js-yaml": "4.0.0", + "log-symbols": "4.0.0", "minimatch": "3.0.4", - "mkdirp": "0.5.1", - "supports-color": "5.4.0" + "ms": "2.1.3", + "nanoid": "3.1.20", + "serialize-javascript": "5.0.1", + "strip-json-comments": "3.1.1", + "supports-color": "8.1.1", + "which": "2.0.2", + "wide-align": "1.1.3", + "workerpool": "6.1.0", + "yargs": "16.2.0", + "yargs-parser": "20.2.4", + "yargs-unparser": "2.0.0" }, "dependencies": { - "commander": { - "version": "2.15.1", - "resolved": "https://registry.npmjs.org/commander/-/commander-2.15.1.tgz", - "integrity": "sha512-VlfT9F3V0v+jr4yxPc5gg9s62/fIVWsd2Bk2iD435um1NlGMYdVCq+MjcXnhYq2icNOizHr1kK+5TI6H0Hy0ag==", + "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 - }, - "glob": { - "version": "7.1.2", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.2.tgz", - "integrity": "sha512-MJTUg1kjuLeQCJ+ccE4Vpa6kKVXkPYJ2mOCQyUuKLcLQsdrMCpBPUi8qVE6+YuaJkozeA9NusTAw3hLr8Xe5EQ==", - "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" - } - }, - "mkdirp": { - "version": "0.5.1", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz", - "integrity": "sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=", - "dev": true, - "requires": { - "minimist": "0.0.8" - } } } }, "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" + }, + "nanoid": { + "version": "3.1.20", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.1.20.tgz", + "integrity": "sha512-a1cQNyczgKbLX9jwbS/+d7W8fX/RfgYR7lVWwWOGIPNgK2m0MWvrGF6/m4kk6U3QcFMnZf3RIhL0v2Jgh/0Uxw==", "dev": true }, - "node-static": { - "version": "0.7.11", - "resolved": "https://registry.npmjs.org/node-static/-/node-static-0.7.11.tgz", - "integrity": "sha512-zfWC/gICcqb74D9ndyvxZWaI1jzcoHmf4UTHWQchBNuNMxdBLJMDiUgZ1tjGLEIe/BMhj2DxKD8HOuc2062pDQ==", + "node-preload": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/node-preload/-/node-preload-0.2.1.tgz", + "integrity": "sha512-RM5oyBy45cLEoHqCeh+MNuFAxO0vTFBLskvQbOKnEE7YTTSN4tbN8QWDIPQ6L+WvKsB/qLEGpYe2ZZ9d4W9OIQ==", "dev": true, "requires": { - "colors": ">=0.6.0", - "mime": "^1.2.9", - "optimist": ">=0.3.4" + "process-on-spawn": "^1.0.0" } }, + "normalize-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", + "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", + "dev": true + }, "npm-run-path": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz", @@ -710,6 +5036,178 @@ "path-key": "^3.0.0" } }, + "nyc": { + "version": "15.1.0", + "resolved": "https://registry.npmjs.org/nyc/-/nyc-15.1.0.tgz", + "integrity": "sha512-jMW04n9SxKdKi1ZMGhvUTHBN0EICCRkHemEoE5jm6mTYcqcdas0ATzgUgejlQUHMvpnOZqGB5Xxsv9KxJW1j8A==", + "dev": true, + "requires": { + "@istanbuljs/load-nyc-config": "^1.0.0", + "@istanbuljs/schema": "^0.1.2", + "caching-transform": "^4.0.0", + "convert-source-map": "^1.7.0", + "decamelize": "^1.2.0", + "find-cache-dir": "^3.2.0", + "find-up": "^4.1.0", + "foreground-child": "^2.0.0", + "get-package-type": "^0.1.0", + "glob": "^7.1.6", + "istanbul-lib-coverage": "^3.0.0", + "istanbul-lib-hook": "^3.0.0", + "istanbul-lib-instrument": "^4.0.0", + "istanbul-lib-processinfo": "^2.0.2", + "istanbul-lib-report": "^3.0.0", + "istanbul-lib-source-maps": "^4.0.0", + "istanbul-reports": "^3.0.2", + "make-dir": "^3.0.0", + "node-preload": "^0.2.1", + "p-map": "^3.0.0", + "process-on-spawn": "^1.0.0", + "resolve-from": "^5.0.0", + "rimraf": "^3.0.0", + "signal-exit": "^3.0.2", + "spawn-wrap": "^2.0.0", + "test-exclude": "^6.0.0", + "yargs": "^15.0.2" + }, + "dependencies": { + "ansi-regex": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz", + "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==", + "dev": true + }, + "cliui": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-6.0.0.tgz", + "integrity": "sha512-t6wbgtoCXvAzst7QgXxJYqPt0usEfbgQdftEPbLL/cvv6HPE5VgvqCuAIDR0NgU52ds6rFwqrgakNLrHEjCbrQ==", + "dev": true, + "requires": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.0", + "wrap-ansi": "^6.2.0" + } + }, + "find-up": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", + "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", + "dev": true, + "requires": { + "locate-path": "^5.0.0", + "path-exists": "^4.0.0" + } + }, + "is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "dev": true + }, + "locate-path": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", + "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", + "dev": true, + "requires": { + "p-locate": "^4.1.0" + } + }, + "p-limit": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", + "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", + "dev": true, + "requires": { + "p-try": "^2.0.0" + } + }, + "p-locate": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", + "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", + "dev": true, + "requires": { + "p-limit": "^2.2.0" + } + }, + "p-map": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/p-map/-/p-map-3.0.0.tgz", + "integrity": "sha512-d3qXVTF/s+W+CdJ5A29wywV2n8CQQYahlgz2bFiA+4eVNJbHJodPZ+/gXwPGh0bOqA+j8S+6+ckmvLGPk1QpxQ==", + "dev": true, + "requires": { + "aggregate-error": "^3.0.0" + } + }, + "string-width": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.0.tgz", + "integrity": "sha512-zUz5JD+tgqtuDjMhwIg5uFVV3dtqZ9yQJlZVfq4I01/K5Paj5UHj7VyrQOJvzawSVlKpObApbfD0Ed6yJc+1eg==", + "dev": true, + "requires": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.0" + } + }, + "strip-ansi": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz", + "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==", + "dev": true, + "requires": { + "ansi-regex": "^5.0.0" + } + }, + "wrap-ansi": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz", + "integrity": "sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==", + "dev": true, + "requires": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + } + }, + "y18n": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.1.tgz", + "integrity": "sha512-wNcy4NvjMYL8gogWWYAO7ZFWFfHcbdbE57tZO8e4cbpj8tfUcwrwqSl3ad8HxpYWCdXcJUCeKKZS62Av1affwQ==", + "dev": true + }, + "yargs": { + "version": "15.4.1", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-15.4.1.tgz", + "integrity": "sha512-aePbxDmcYW++PaqBsJ+HYUFwCdv4LVvdnhBy78E57PIor8/OVvhMrADFFEDh8DHDFRv/O9i3lPhsENjO7QX0+A==", + "dev": true, + "requires": { + "cliui": "^6.0.0", + "decamelize": "^1.2.0", + "find-up": "^4.1.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": "^4.2.0", + "which-module": "^2.0.0", + "y18n": "^4.0.0", + "yargs-parser": "^18.1.2" + } + }, + "yargs-parser": { + "version": "18.1.3", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-18.1.3.tgz", + "integrity": "sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ==", + "dev": true, + "requires": { + "camelcase": "^5.0.0", + "decamelize": "^1.2.0" + } + } + } + }, "once": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", @@ -727,21 +5225,29 @@ "mimic-fn": "^2.1.0" } }, - "optimist": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/optimist/-/optimist-0.6.1.tgz", - "integrity": "sha1-2j6nRob6IaGaERwybpDrFaAZZoY=", - "dev": true, - "requires": { - "minimist": "~0.0.1", - "wordwrap": "~0.0.2" - } - }, "os-tmpdir": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz", "integrity": "sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ=" }, + "p-limit": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", + "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", + "dev": true, + "requires": { + "yocto-queue": "^0.1.0" + } + }, + "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": { + "p-limit": "^3.0.2" + } + }, "p-map": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/p-map/-/p-map-4.0.0.tgz", @@ -750,11 +5256,35 @@ "aggregate-error": "^3.0.0" } }, + "p-try": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", + "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", + "dev": true + }, + "package-hash": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/package-hash/-/package-hash-4.0.0.tgz", + "integrity": "sha512-whdkPIooSu/bASggZ96BWVvZTRMOFxnyUG5PnTSGKoJE2gd5mbVNmR2Nj20QFzxYYgAXpoqC+AiXzl+UMRh7zQ==", + "dev": true, + "requires": { + "graceful-fs": "^4.1.15", + "hasha": "^5.0.0", + "lodash.flattendeep": "^4.4.0", + "release-zalgo": "^1.0.0" + } + }, "pako": { "version": "1.0.11", "resolved": "https://registry.npmjs.org/pako/-/pako-1.0.11.tgz", "integrity": "sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw==" }, + "path-exists": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", + "dev": true + }, "path-is-absolute": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", @@ -772,9 +5302,9 @@ "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==" }, "pathval": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/pathval/-/pathval-1.1.0.tgz", - "integrity": "sha1-uULm1L3mUwBe9rcTYd74cn0GReA=", + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/pathval/-/pathval-1.1.1.tgz", + "integrity": "sha512-Dp6zGqpTdETdR63lehJYPeIOqpiNBNtc7BpWSLrOje7UaIsE5aY92r/AunQA7rsXvet3lrJ3JnZX29UPTKXyKQ==", "dev": true }, "pend": { @@ -787,11 +5317,68 @@ "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.2.2.tgz", "integrity": "sha512-q0M/9eZHzmr0AulXyPwNfZjtwZ/RBZlbN3K3CErVrk50T2ASYI7Bye0EvekFY3IP1Nt2DHu0re+V2ZHIpMkuWg==" }, + "pkg-dir": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz", + "integrity": "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==", + "dev": true, + "requires": { + "find-up": "^4.0.0" + }, + "dependencies": { + "find-up": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", + "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", + "dev": true, + "requires": { + "locate-path": "^5.0.0", + "path-exists": "^4.0.0" + } + }, + "locate-path": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", + "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", + "dev": true, + "requires": { + "p-locate": "^4.1.0" + } + }, + "p-limit": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", + "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", + "dev": true, + "requires": { + "p-try": "^2.0.0" + } + }, + "p-locate": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", + "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", + "dev": true, + "requires": { + "p-limit": "^2.2.0" + } + } + } + }, "process-nextick-args": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==" }, + "process-on-spawn": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/process-on-spawn/-/process-on-spawn-1.0.0.tgz", + "integrity": "sha512-1WsPDsUSMmZH5LeMLegqkPDrsGgsWwk1Exipy2hvB0o/F0ASzbpIctSCcZIK1ykJvtTJULEH+20WOFjMvGnCTg==", + "dev": true, + "requires": { + "fromentries": "^1.2.0" + } + }, "proxy-from-env": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz", @@ -806,6 +5393,20 @@ "once": "^1.3.1" } }, + "queue-microtask": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.2.tgz", + "integrity": "sha512-dB15eXv3p2jDlbOiNLyMabYg1/sXvppd8DP2J3EOCQ0AkuSXCW2tP7mnVouVLJKgUMY6yP0kcQDVpLCN13h4Xg==" + }, + "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" + } + }, "readable-stream": { "version": "2.3.7", "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", @@ -820,6 +5421,42 @@ "util-deprecate": "~1.0.1" } }, + "readdirp": { + "version": "3.5.0", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.5.0.tgz", + "integrity": "sha512-cMhu7c/8rdhkHXWsY+osBhfSy0JikwpHK/5+imo+LpeasTF8ouErHrlYkwT0++njiyuDvc7OFY5T3ukvZ8qmFQ==", + "dev": true, + "requires": { + "picomatch": "^2.2.1" + } + }, + "release-zalgo": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/release-zalgo/-/release-zalgo-1.0.0.tgz", + "integrity": "sha1-CXALflB0Mpc5Mw5TXFqQ+2eFFzA=", + "dev": true, + "requires": { + "es6-error": "^4.0.1" + } + }, + "require-directory": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", + "integrity": "sha1-jGStX9MNqxyXbiNE/+f3kqam30I=", + "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 + }, + "resolve-from": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", + "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", + "dev": true + }, "reusify": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", @@ -834,9 +5471,12 @@ } }, "run-parallel": { - "version": "1.1.10", - "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.1.10.tgz", - "integrity": "sha512-zb/1OuZ6flOlH6tQyMPUrE3x3Ulxjlo9WIVXR4yVYi4H9UXQaeIsPbLn2R3O3vQCnDKkAl2qHiuocKKX4Tz/Sw==" + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", + "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", + "requires": { + "queue-microtask": "^1.2.2" + } }, "safe-buffer": { "version": "5.1.2", @@ -869,6 +5509,27 @@ } } }, + "semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true + }, + "serialize-javascript": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-5.0.1.tgz", + "integrity": "sha512-SaaNal9imEO737H2c05Og0/8LUXG7EnsZyMa8MzkmuHoELfT6txuj0cMqRj6zfPKnmQ1yasR4PCJc8x+M4JSPA==", + "dev": true, + "requires": { + "randombytes": "^2.1.0" + } + }, + "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 + }, "set-immediate-shim": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/set-immediate-shim/-/set-immediate-shim-1.0.1.tgz", @@ -900,6 +5561,50 @@ "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==" }, + "source-map": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", + "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", + "dev": true + }, + "source-map-support": { + "version": "0.5.19", + "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.19.tgz", + "integrity": "sha512-Wonm7zOCIJzBGQdB+thsPar0kYuCIzYvxZwlBa87yi/Mdjv7Tip2cyVbLj5o0cFPN4EVkuTwb3GDDyUx2DGnGw==", + "dev": true, + "requires": { + "buffer-from": "^1.0.0", + "source-map": "^0.6.0" + }, + "dependencies": { + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true + } + } + }, + "spawn-wrap": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/spawn-wrap/-/spawn-wrap-2.0.0.tgz", + "integrity": "sha512-EeajNjfN9zMnULLwhZZQU3GWBoFNkbngTUPfaawT4RkMiviTxcX0qfhVbGey39mfctfDHkWtuecgQ8NJcyQWHg==", + "dev": true, + "requires": { + "foreground-child": "^2.0.0", + "is-windows": "^1.0.2", + "make-dir": "^3.0.0", + "rimraf": "^3.0.0", + "signal-exit": "^3.0.2", + "which": "^2.0.1" + } + }, + "sprintf-js": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", + "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=", + "dev": true + }, "string_decoder": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", @@ -908,19 +5613,50 @@ "safe-buffer": "~5.1.0" } }, + "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" + } + }, + "strip-bom": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-4.0.0.tgz", + "integrity": "sha512-3xurFv5tEgii33Zi8Jtp55wEIILR9eh34FAW00PZf+JnSsTmV/ioewSgQl97JHvgjoRGwPShsWm+IdrxB35d0w==", + "dev": true + }, "strip-final-newline": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz", "integrity": "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==", "dev": true }, + "strip-json-comments": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", + "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", + "dev": true + }, "supports-color": { - "version": "5.4.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.4.0.tgz", - "integrity": "sha512-zjaXglF5nnWpsq470jSv6P9DwPvgLkuapYmfDm3JWOm0vkNTVF2tI4UrN2r6jH1qM/uc/WtxYY1hYoA2dOKj5w==", + "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": "^3.0.0" + "has-flag": "^4.0.0" } }, "tcp-port-used": { @@ -930,21 +5666,6 @@ "requires": { "debug": "4.3.1", "is2": "^2.0.6" - }, - "dependencies": { - "debug": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.1.tgz", - "integrity": "sha512-doEwdvm4PCeK4K3RQN2ZC2BYUBaxwLARCqZmMjtF8a51J2Rb0xpVloFRnCODwqjpwnAoao4pelN8l3RJdv3gRQ==", - "requires": { - "ms": "2.1.2" - } - }, - "ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" - } } }, "temp-dir": { @@ -954,15 +5675,35 @@ "dev": true }, "tempy": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/tempy/-/tempy-0.6.0.tgz", - "integrity": "sha512-G13vtMYPT/J8A4X2SjdtBTphZlrp1gKv6hZiOjw14RCWg6GbHuQBGtjlx75xLbYV/wEc0D7G5K4rxKP/cXk8Bw==", + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/tempy/-/tempy-1.0.0.tgz", + "integrity": "sha512-eLXG5B1G0mRPHmgH2WydPl5v4jH35qEn3y/rA/aahKhIa91Pn119SsU7n7v/433gtT9ONzC8ISvNHIh2JSTm0w==", "dev": true, "requires": { + "del": "^6.0.0", "is-stream": "^2.0.0", "temp-dir": "^2.0.0", "type-fest": "^0.16.0", "unique-string": "^2.0.0" + }, + "dependencies": { + "type-fest": { + "version": "0.16.0", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.16.0.tgz", + "integrity": "sha512-eaBzG6MxNzEn9kiwvtre90cXaNLkmadMWa1zQMs3XORCXNbsH/OewwbxC5ia9dCxIxnTAsSxXJaa/p5y8DlvJg==", + "dev": true + } + } + }, + "test-exclude": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/test-exclude/-/test-exclude-6.0.0.tgz", + "integrity": "sha512-cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w==", + "dev": true, + "requires": { + "@istanbuljs/schema": "^0.1.2", + "glob": "^7.1.4", + "minimatch": "^3.0.4" } }, "tmp": { @@ -973,6 +5714,12 @@ "os-tmpdir": "~1.0.1" } }, + "to-fast-properties": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", + "integrity": "sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4=", + "dev": true + }, "to-regex-range": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", @@ -981,6 +5728,28 @@ "is-number": "^7.0.0" } }, + "ts-node": { + "version": "9.1.1", + "resolved": "https://registry.npmjs.org/ts-node/-/ts-node-9.1.1.tgz", + "integrity": "sha512-hPlt7ZACERQGf03M253ytLY3dHbGNGrAq9qIHWUY9XHYl1z7wYngSr3OQ5xmui8o2AaxsONxIzjafLUiWBo1Fg==", + "dev": true, + "requires": { + "arg": "^4.1.0", + "create-require": "^1.1.0", + "diff": "^4.0.1", + "make-error": "^1.1.1", + "source-map-support": "^0.5.17", + "yn": "3.1.1" + }, + "dependencies": { + "diff": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/diff/-/diff-4.0.2.tgz", + "integrity": "sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==", + "dev": true + } + } + }, "type-detect": { "version": "4.0.8", "resolved": "https://registry.npmjs.org/type-detect/-/type-detect-4.0.8.tgz", @@ -988,9 +5757,24 @@ "dev": true }, "type-fest": { - "version": "0.16.0", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.16.0.tgz", - "integrity": "sha512-eaBzG6MxNzEn9kiwvtre90cXaNLkmadMWa1zQMs3XORCXNbsH/OewwbxC5ia9dCxIxnTAsSxXJaa/p5y8DlvJg==", + "version": "0.8.1", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.8.1.tgz", + "integrity": "sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==", + "dev": true + }, + "typedarray-to-buffer": { + "version": "3.1.5", + "resolved": "https://registry.npmjs.org/typedarray-to-buffer/-/typedarray-to-buffer-3.1.5.tgz", + "integrity": "sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q==", + "dev": true, + "requires": { + "is-typedarray": "^1.0.0" + } + }, + "typescript": { + "version": "4.1.5", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.1.5.tgz", + "integrity": "sha512-6OSu9PTIzmn9TCDiovULTnET6BgXtDYL4Gg4szY+cGsc3JP1dQL8qvE8kShTRx1NIw4Q9IBHlwODjkjWEtMUyA==", "dev": true }, "unique-string": { @@ -1007,6 +5791,12 @@ "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=" }, + "uuid": { + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz", + "integrity": "sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==", + "dev": true + }, "which": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", @@ -1016,17 +5806,89 @@ "isexe": "^2.0.0" } }, - "wordwrap": { - "version": "0.0.3", - "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-0.0.3.tgz", - "integrity": "sha1-o9XabNXAvAAI03I0u68b7WMFkQc=", + "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" + } + }, + "workerpool": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/workerpool/-/workerpool-6.1.0.tgz", + "integrity": "sha512-toV7q9rWNYha963Pl/qyeZ6wG+3nnsyvolaNUS8+R5Wtw6qJPTxIlOP1ZSvcGhEJw+l3HMMmtiNo9Gl61G4GVg==", "dev": true }, + "wrap-ansi": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "dev": true, + "requires": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "dependencies": { + "ansi-regex": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz", + "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==", + "dev": true + }, + "is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "dev": true + }, + "string-width": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.0.tgz", + "integrity": "sha512-zUz5JD+tgqtuDjMhwIg5uFVV3dtqZ9yQJlZVfq4I01/K5Paj5UHj7VyrQOJvzawSVlKpObApbfD0Ed6yJc+1eg==", + "dev": true, + "requires": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.0" + } + }, + "strip-ansi": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz", + "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==", + "dev": true, + "requires": { + "ansi-regex": "^5.0.0" + } + } + } + }, "wrappy": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=" }, + "write-file-atomic": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-3.0.3.tgz", + "integrity": "sha512-AvHcyZ5JnSfq3ioSyjrBkH9yW4m7Ayk8/9My/DD9onKeu/94fwrMocemO2QAJFAlnnDN+ZDS+ZjAR5ua1/PV/Q==", + "dev": true, + "requires": { + "imurmurhash": "^0.1.4", + "is-typedarray": "^1.0.0", + "signal-exit": "^3.0.2", + "typedarray-to-buffer": "^3.1.5" + } + }, "xml2js": { "version": "0.4.23", "resolved": "https://registry.npmjs.org/xml2js/-/xml2js-0.4.23.tgz", @@ -1041,6 +5903,93 @@ "resolved": "https://registry.npmjs.org/xmlbuilder/-/xmlbuilder-11.0.1.tgz", "integrity": "sha512-fDlsI/kFEx7gLvbecc0/ohLG50fugQp8ryHzMTuW9vSa1GJ0XYWKnhsUx7oie3G98+r56aTQIUB4kht42R3JvA==" }, + "y18n": { + "version": "5.0.5", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.5.tgz", + "integrity": "sha512-hsRUr4FFrvhhRH12wOdfs38Gy7k2FFzB9qgN9v3aLykRq0dRcdcpz5C9FxdS2NuhOrI/628b/KSTJ3rwHysYSg==", + "dev": true + }, + "yargs": { + "version": "16.2.0", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz", + "integrity": "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==", + "dev": true, + "requires": { + "cliui": "^7.0.2", + "escalade": "^3.1.1", + "get-caller-file": "^2.0.5", + "require-directory": "^2.1.1", + "string-width": "^4.2.0", + "y18n": "^5.0.5", + "yargs-parser": "^20.2.2" + }, + "dependencies": { + "ansi-regex": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz", + "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==", + "dev": true + }, + "is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "dev": true + }, + "string-width": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.0.tgz", + "integrity": "sha512-zUz5JD+tgqtuDjMhwIg5uFVV3dtqZ9yQJlZVfq4I01/K5Paj5UHj7VyrQOJvzawSVlKpObApbfD0Ed6yJc+1eg==", + "dev": true, + "requires": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.0" + } + }, + "strip-ansi": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz", + "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==", + "dev": true, + "requires": { + "ansi-regex": "^5.0.0" + } + } + } + }, + "yargs-parser": { + "version": "20.2.4", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.4.tgz", + "integrity": "sha512-WOkpgNhPTlE73h4VFAFsOnomJVaovO8VqLDzy5saChRBFQFBoMYirowyW+Q9HB4HFF4Z7VZTiG3iSzJJA29yRA==", + "dev": true + }, + "yargs-unparser": { + "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": { + "camelcase": "^6.0.0", + "decamelize": "^4.0.0", + "flat": "^5.0.2", + "is-plain-obj": "^2.1.0" + }, + "dependencies": { + "camelcase": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.2.0.tgz", + "integrity": "sha512-c7wVvbw3f37nuobQNtgsgG9POC9qMbNuMQmTCqZv23b6MIz0fcYpBiOlv9gEN/hdLdnZTDQhg6e9Dq5M1vKvfg==", + "dev": true + }, + "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 + } + } + }, "yauzl": { "version": "2.10.0", "resolved": "https://registry.npmjs.org/yauzl/-/yauzl-2.10.0.tgz", @@ -1049,6 +5998,18 @@ "buffer-crc32": "~0.2.3", "fd-slicer": "~1.1.0" } + }, + "yn": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/yn/-/yn-3.1.1.tgz", + "integrity": "sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==", + "dev": true + }, + "yocto-queue": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", + "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", + "dev": true } } } diff --git a/packages/cli/package.json b/packages/cli/package.json index 8912b42f..4476bb14 100644 --- a/packages/cli/package.json +++ b/packages/cli/package.json @@ -2,9 +2,21 @@ "name": "@axe-core/cli", "version": "4.1.1", "description": "A CLI for accessibility testing using axe-core", - "main": "lib/index.js", + "author": { + "name": "Wilco Fiers", + "organization": "Deque Systems, Inc.", + "url": "http://github.com/wilcofiers/" + }, + "contributors": [ + { + "name": "Michael Siek (me@michaelsiek.com)" + } + ], + "license": "MPL-2.0", + "main": "dist/src/lib/index.js", + "typings": "dist/src/types.js", "bin": { - "axe": "axe-cli" + "axe": "./dist/src/bin/cli.js" }, "publishConfig": { "access": "public" @@ -13,12 +25,11 @@ "node": ">=8" }, "scripts": { - "test": "mocha test/*.js", - "postinstall": "node postinstall.js" - }, - "repository": { - "type": "git", - "url": "git+https://github.com/dequelabs/axe-core-npm.git" + "prebuild": "rimraf dist", + "build": "tsc", + "test": "mocha --timeout 60000 -r ts-node/register 'src/**/**.test.ts'", + "coverage": "nyc npm run test", + "prepare": "npm run build" }, "keywords": [ "axe-core", @@ -28,25 +39,46 @@ "cli", "testing" ], - "author": { - "name": "Wilco Fiers", - "organization": "Deque Systems, Inc.", - "url": "http://github.com/wilcofiers/" - }, "dependencies": { "@axe-core/webdriverjs": "^4.1.1", - "axe-core": "^4.1.1", + "axe-core": "^4.1.2", "chromedriver": "latest", "colors": "^1.4.0", - "commander": "^2.19.0", + "commander": "^7.1.0", "selenium-webdriver": "^3.6.0" }, "devDependencies": { - "chai": "^4.2.0", - "execa": "^4.0.3", - "mocha": "^5.1.0", - "node-static": "^0.7.11", + "@types/chai": "^4.2.15", + "@types/chromedriver": "^81.0.0", + "@types/mocha": "^8.2.1", + "@types/selenium-webdriver": "^4.0.11", + "chai": "^4.3.0", + "execa": "^5.0.0", + "mocha": "^8.3.0", + "nyc": "^15.1.0", "rimraf": "^3.0.2", - "tempy": "^0.6.0" + "tempy": "^1.0.0", + "ts-node": "^9.1.1", + "typescript": "^4.1.5" + }, + "nyc": { + "checkCoverage": true, + "extension": [ + ".ts" + ], + "reporter": [ + "text-summary", + "html" + ], + "statements": 95, + "branches": 93, + "functions": 100, + "lines": 95, + "exclude": [ + "dist", + "coverage", + "**/*.test.ts", + "src/testutils" + ] } } diff --git a/packages/cli/postinstall.js b/packages/cli/postinstall.js old mode 100755 new mode 100644 index 04c69368..5c8805e3 --- a/packages/cli/postinstall.js +++ b/packages/cli/postinstall.js @@ -1,7 +1,7 @@ #!/usr/bin/env node -const fs = require('fs') -const path = require('path') +const fs = require('fs'); +const path = require('path'); const adtAbsolutePath = path.join( process.cwd(), @@ -9,15 +9,15 @@ const adtAbsolutePath = path.join( '@axe-devtools', 'cli', 'cli.js' -) +); -const adtExist = fs.existsSync(adtAbsolutePath) +const adtExist = fs.existsSync(adtAbsolutePath); // validate that axe-devtools/cli exist if (adtExist) { const axeSymlink = fs.readlinkSync( path.join(process.cwd(), 'node_modules', '.bin', 'axe') - ) + ); if (axeSymlink.match(/\s*?(@axe-core)/g)) { const axeCoreCliPath = path.join( @@ -25,16 +25,16 @@ if (adtExist) { 'node_modules', '.bin', 'axe' - ) + ); const adtRelativePath = path.relative( path.join(process.cwd(), 'node_modules', '.bin'), adtAbsolutePath - ) + ); - fs.unlinkSync(axeCoreCliPath) - fs.symlinkSync(adtRelativePath, axeCoreCliPath) + fs.unlinkSync(axeCoreCliPath); + fs.symlinkSync(adtRelativePath, axeCoreCliPath); console.warn( 'Please make sure to uninstall @axe-core/cli in favor of having @axe-devtools/cli' - ) + ); } } diff --git a/packages/cli/test/cli.js b/packages/cli/src/bin/cli.test.ts similarity index 90% rename from packages/cli/test/cli.js rename to packages/cli/src/bin/cli.test.ts index b0f39f9f..9948ec5f 100644 --- a/packages/cli/test/cli.js +++ b/packages/cli/src/bin/cli.test.ts @@ -1,13 +1,13 @@ -'use strict'; - -const { assert } = require('chai'); -const tempy = require('tempy'); -const http = require('http'); -const https = require('https'); -const path = require('path'); -const fs = require('fs'); -const pkg = require('../package.json'); -const { runCLI } = require('../testutils/index'); +import 'mocha'; +import { assert } from 'chai'; +import * as tempy from 'tempy'; +import * as http from 'http'; +import * as https from 'https'; +import * as net from 'net'; +import * as path from 'path'; +import * as fs from 'fs'; +import { version } from '../../package.json'; +import runCLI from '../testutils/'; const SIMPLE_HTML_FILE = path.join(__dirname, '..', 'testutils', 'simple.html'); const SIMPLE_HTML_SOURCE = fs.readFileSync(SIMPLE_HTML_FILE, 'utf8'); @@ -28,7 +28,7 @@ describe('cli', () => { it('--version', async () => { const result = await runCLI('--version'); assert.equal(result.exitCode, 0); - assert.deepEqual(result.stdout, pkg.version); + assert.deepEqual(result.stdout, version); }); describe('given a file:// url', () => { @@ -43,19 +43,16 @@ describe('cli', () => { }); describe('given a http:// url', () => { - let port; - let server; + let port: number; + let server: http.Server; before(done => { server = http.createServer((req, res) => { res.setHeader('Content-Type', 'text/html'); res.write(SIMPLE_HTML_SOURCE); res.end(); }); - server.listen(0, err => { - if (err) { - return done(err); - } - port = server.address().port; + server.listen(0, () => { + port = (server.address() as net.AddressInfo).port; done(); }); }); @@ -86,6 +83,15 @@ describe('cli', () => { ); assert.include(result.stdout, 'Running axe-core 2.5.0'); }); + it('error when given invalid axe source path', async () => { + const result = await runCLI( + `file://${SIMPLE_HTML_FILE}`, + '--axe-source', + 'foobar' + ); + assert.equal(result.exitCode, 2); + assert.include(result.stderr, 'Unable to find the axe-core source file'); + }); }); // cannot run in ci we _should_ have the ability to add arguments to firefox not just chrome to allow users to run this headless @@ -142,7 +148,7 @@ describe('cli', () => { }); describe('--dir', () => { - let reportDir; + let reportDir: string; beforeEach(() => { reportDir = tempy.directory(); }); @@ -250,7 +256,7 @@ describe('cli', () => { }); describe('--save', () => { - let reportDir; + let reportDir: string; beforeEach(() => { reportDir = tempy.directory(); }); @@ -298,7 +304,7 @@ describe('cli', () => { // Timeout the page immediately. Ideally we'd block the page for awhile, then timeout based on that. This seemed easier for now tho. it('should set the page load timeout', async () => { try { - await runCLI(`file://${SIMPLE_HTML_FILE}`, '--timeout', 0); + await runCLI(`file://${SIMPLE_HTML_FILE}`, '--timeout', '0'); } catch (error) { assert.notEqual(error.exitCode, 0); assert.include( diff --git a/packages/cli/src/bin/cli.ts b/packages/cli/src/bin/cli.ts new file mode 100644 index 00000000..10373d59 --- /dev/null +++ b/packages/cli/src/bin/cli.ts @@ -0,0 +1,78 @@ +#!/usr/bin/env node + +import * as program from 'commander'; +import { version } from '../../package.json'; +import { splitList } from '../lib/utils'; +import cli from '.'; + +program + .version(version) + .usage(' [options]') + .option( + '-i, --include ', + 'CSS selector of included elements, comma separated', + splitList + ) + .option( + '-e, --exclude ', + 'CSS selector of excluded elements, comma separated', + splitList + ) + .option( + '-r, --rules ', + 'IDs of rules to run, comma separated', + splitList + ) + .option( + '-t, --tags ', + 'Tags of rules to run, comma separated', + splitList + ) + .option( + '-l, --disable ', + 'IDs of rules to disable, comma separated', + splitList + ) + .option( + '-b, --browser [browser-name]', + 'Which browser to run (Webdriver required)' + ) + .option( + '-s, --save [filename]', + 'Save the output as a JSON file. Filename is optional' + ) + .option( + '-j, --stdout', + 'Output results to STDOUT and silence all other output' + ) + .option('-d, --dir ', 'Output directory') + .option('-a, --axe-source ', 'Path to axe.js file') + .option('-q, --exit', 'Exit with `1` failure code if any a11y tests fail') + .option( + '-v, --verbose', + 'Output metadata like test tool name, version and environment' + ) + .option( + '--load-delay ', + 'Set how much time (milliseconds) axe will wait after page load before running the audit (default: 0)' + ) + .option( + '--timeout ', + 'Set how much time (seconds) axe has to run (default: 90)' + ) + .option('--timer', 'Log the time it takes to run') + .option('--show-errors', 'Display the full error stack') + // TODO: Replace this with a reporter option, this required adding + .option('--no-reporter', 'Turn the CLI reporter off') + .option( + '--chrome-options [options]', + 'Options to provide to headless Chrome', + splitList + ) + .option( + '--chromedriver-path ', + 'Absolute path to the desired chromedriver executable' + ) + .action(cli); + +program.parse(process.argv); diff --git a/packages/cli/src/bin/index.ts b/packages/cli/src/bin/index.ts new file mode 100644 index 00000000..bb64d71a --- /dev/null +++ b/packages/cli/src/bin/index.ts @@ -0,0 +1,165 @@ +import type { OptionValues } from 'commander'; +import * as colors from 'colors'; +import { + parseBrowser, + parseUrl, + reporter, + getAxeVersion, + getAxeSource, + saveOutcome, + bold, + error, + italics, + link +} from '../lib/utils'; +import axeTestUrls from '../lib/axe-test-urls'; +import event from '../lib/events'; +import { startDriver } from '../lib/webdriver'; + +const cli = async ( + args: OptionValues, + url: { args: string[] } +): Promise => { + const { + save, + stdout, + dir, + exit, + timer, + showErrors, + reporter: noReporter, + chromeOptions, + verbose, + timeout, + path, + include, + exclude, + tags, + rules, + disable, + loadDelay + } = args; + + const silentMode = !!stdout; + args.axeSource = getAxeSource(args.axeSource); + + if (!args.axeSource) { + console.error(error('Unable to find the axe-core source file')); + process.exit(2); + } + + args.browser = parseBrowser(args.browser); + /* istanbul ignore if */ + if (chromeOptions) { + /* istanbul ignore if */ + if (args.browser !== 'chrome-headless') { + console.error( + error( + 'You may only provide --chrome-options when using headless chrome' + ) + ); + process.exit(2); + } + } + + const driverConfigs = { + browser: args.browser, + timeout, + chromeOptions, + path + }; + + args.driver = startDriver(driverConfigs); + + const cliReporter = reporter(noReporter, silentMode); + const axeVersion = getAxeVersion(args.axeSource); + if (!silentMode) { + console.log( + colors.bold('Running axe-core ' + axeVersion + ' in ' + args.browser) + ); + } + + const urls = url.args.map(parseUrl); + + /* istanbul ignore if */ + if (urls.length === 0) { + console.error(error('No url was specified. Check `axe --help` for help\n')); + } + + const events = event({ + silentMode, + timer, + cliReporter, + verbose, + exit + }); + + const testPageConfigParams = { + driver: args.driver, + timer, + loadDelay, + axeSource: args.axeSource, + include, + exclude, + tags, + rules, + disable + }; + try { + const outcome = await axeTestUrls(urls, testPageConfigParams, events); + if (silentMode) { + process.stdout.write(JSON.stringify(outcome, null, 2)); + return; + } + + if (timer) { + console.timeEnd('Total test time'); + } + + /* istanbul ignore if */ + if (Array.isArray(outcome)) { + console.log(bold('Testing complete of %d pages\n'), outcome.length); + } + + if (save || dir) { + try { + const fileName = saveOutcome(outcome, save, dir); + console.log('Saved file at', fileName, '\n'); + } catch (e) { + /* istanbul ignore next */ + console.error(error('Unable to save file!\n') + e); + process.exit(1); + } + } + + /* istanbul ignore if */ + if (silentMode) { + return; + } + + console.log( + italics( + 'Please note that only 20% to 50% of all accessibility ' + + 'issues can automatically be detected. \nManual testing is ' + + 'always required. For more information see:\n%s\n' + ), + link('https://dequeuniversity.com/curriculum/courses/testingmethods') + ); + } catch (e) { + /* istanbul ignore else */ + if (!showErrors) { + console.error(error('An error occurred while testing this page.')); + } else { + console.error(error('Error: %j \n $s'), e.message, e.stack); + } + + console.error( + 'Please report the problem to: ' + + link('https://github.com/dequelabs/axe-core-npm/issues/') + + '\n' + ); + process.exit(1); + } +}; + +export default cli; diff --git a/packages/cli/test/axe-test-urls.js b/packages/cli/src/lib/axe-test-urls.test.ts similarity index 59% rename from packages/cli/test/axe-test-urls.js rename to packages/cli/src/lib/axe-test-urls.test.ts index ea15784a..ee10767d 100644 --- a/packages/cli/test/axe-test-urls.js +++ b/packages/cli/src/lib/axe-test-urls.test.ts @@ -1,60 +1,62 @@ -'use strict'; - -const assert = require('chai').assert; -const testPages = require('../lib/axe-test-urls'); +import 'mocha'; +import { assert } from 'chai'; +import testPages from './axe-test-urls'; +import { ConfigParams } from '../types'; describe('testPages', function () { this.timeout(10000); - let config, mockDriver; + let config: ConfigParams; + let mockDriver: any; beforeEach(() => { + const func = async (arg: any) => arg; mockDriver = { - get: async arg => arg, - executeAsyncScript: async arg => arg, - executeScript: async arg => arg, - wait: async arg => arg, + get: func, + executeAsyncScript: func, + executeScript: func, + wait: func, switchTo: () => ({ defaultContent: () => {} }), findElements: async () => [], - quit: async arg => arg, + quit: func, manage: () => ({ - setTimeouts: async arg => arg + setTimeouts: func }) }; config = { driver: mockDriver }; }); it('return a promise', () => { - assert.instanceOf(testPages([], config, {}), Promise); + assert.instanceOf(testPages([], config), Promise); }); it('calls driver.get() for each URL', async () => { - const urlsCalled = []; + const urlsCalled: string[] = []; const urls = ['http://foo', 'http://bar', 'http://baz']; - mockDriver.get = async url => { + mockDriver.get = async (url: string) => { urlsCalled.push(url); return url; }; - await testPages(urls, config, {}); + await testPages(urls, config); assert.deepEqual(urlsCalled, urls); }); it('waits until the document is ready to have a className added', async () => { - const asyncScripts = []; + const asyncScripts: string[] = []; let waitCalls = 0; - mockDriver.executeAsyncScript = async script => { + mockDriver.executeAsyncScript = async (script: string) => { asyncScripts.push(script); return script; }; - mockDriver.wait = async script => { + mockDriver.wait = async (script: string) => { waitCalls++; return script; }; - await testPages(['http://foo'], config, {}); + await testPages(['http://foo'], config); assert.equal(asyncScripts.length, 2); const [script] = asyncScripts; @@ -67,25 +69,25 @@ describe('testPages', function () { }); it('injects axe into the page', async () => { - const scripts = []; + const scripts: string[] = []; config.axeSource = 'axe="hi, I am axe"'; - mockDriver.executeScript = async script => { + mockDriver.executeScript = async (script: string) => { scripts.push(script); return script; }; - await testPages(['http://foo'], config, {}); + await testPages(['http://foo'], config); assert.include(scripts[0].toString(), config.axeSource); }); it('runs axe once the page is loaded', async () => { - const asyncScripts = []; - mockDriver.executeAsyncScript = async script => { + const asyncScripts: string[] = []; + mockDriver.executeAsyncScript = async (script: string) => { asyncScripts.push(script); return script; }; - await testPages(['http://foo'], config, {}); + await testPages(['http://foo'], config); assert.isDefined( asyncScripts diff --git a/packages/cli/src/lib/axe-test-urls.ts b/packages/cli/src/lib/axe-test-urls.ts new file mode 100644 index 00000000..3b6b3a50 --- /dev/null +++ b/packages/cli/src/lib/axe-test-urls.ts @@ -0,0 +1,114 @@ +import * as WebDriver from 'selenium-webdriver'; +import AxeBuilder from '@axe-core/webdriverjs'; +import { AxeResults } from 'axe-core'; +import { EventResponse, ConfigParams } from '../types'; + +const testPages = async ( + urls: string | string[], + config: ConfigParams, + events?: EventResponse +): Promise => { + const driver: WebDriver.WebDriver = await config.driver; + + if (urls.length === 0) { + await driver.quit(); + return Promise.resolve([]); + } + + return new Promise((resolve, reject) => { + const currentUrl = urls[0].replace(/[,;]$/, ''); + + if (events?.onTestStart) { + events?.onTestStart(currentUrl); + } + + if (config.timer) { + events?.startTimer('page load time'); + } + + driver + .get(currentUrl) + .then(() => { + return driver.executeAsyncScript(` + const callback = arguments[arguments.length - 1]; + const script = document.createElement('script'); + script.innerHTML = 'document.documentElement.classList.add("deque-axe-is-ready");' + document.documentElement.appendChild(script); + callback(); + `); + }) + .then(() => { + return driver.wait( + WebDriver.until.elementsLocated( + WebDriver.By.css('.deque-axe-is-ready') + ) + ); + }) + .then(() => { + if (config.timer) { + events?.startTimer('page load time'); + } + + if (config.loadDelay) { + events?.waitingMessage(config.loadDelay); + } + + return new Promise(resolve => { + setTimeout(resolve, config.loadDelay); + }); + }) + .then(() => { + const axe = new AxeBuilder(driver, config.axeSource); + + if (Array.isArray(config.include)) { + config.include.forEach((include: string) => axe.include(include)); + } + + if (Array.isArray(config.exclude)) { + config.exclude.forEach((exclude: string) => axe.exclude(exclude)); + } + + if (config.tags) { + axe.withTags(config.tags); + } else if (config.rules) { + axe.withRules(config.rules); + } + + /* istanbul ignore if */ + if (config.disable) { + axe.disableRules(config.disable); + } + + if (config.timer) { + events?.startTimer('axe-core execution time'); + } + + axe.analyze((err: string, results: AxeResults) => { + if (config.timer) { + events?.endTimer('axe-core execution time'); + } + + /* istanbul ignore if */ + if (err) { + return reject(err); + } + + // Notify about the update + if (events?.onTestComplete) { + events?.onTestComplete(results); + } + + // Move to the next item + testPages(urls.slice(1), config, events).then((out: AxeResults) => { + resolve([results].concat(out)); + }); + }); + }) + .catch(async e => { + await driver.quit(); + reject(e); + }); + }); +}; + +export default testPages; diff --git a/packages/cli/src/lib/events.test.ts b/packages/cli/src/lib/events.test.ts new file mode 100644 index 00000000..3f1aac2c --- /dev/null +++ b/packages/cli/src/lib/events.test.ts @@ -0,0 +1,26 @@ +import 'mocha'; +import { assert } from 'chai'; +import events from './events'; + +describe('events()', () => { + const event = events({ + silentMode: false, + timer: false, + cliReporter: () => {}, + verbose: false, + exit: false + }); + const functions = [ + 'startTimer', + 'endTimer', + 'waitingMessage', + 'onTestStart', + 'onTestComplete' + ]; + for (const eventFunction of functions) { + it(`${eventFunction} is a typeof function`, () => { + // @ts-ignore + assert.isFunction(event[eventFunction]); + }); + } +}); diff --git a/packages/cli/src/lib/events.ts b/packages/cli/src/lib/events.ts new file mode 100644 index 00000000..9be3e202 --- /dev/null +++ b/packages/cli/src/lib/events.ts @@ -0,0 +1,78 @@ +import type { AxeResults } from 'axe-core'; +import type { EventParams } from '../types'; +import { selectorToString, error, link, bold, green } from './utils'; + +export default ({ + silentMode, + timer, + cliReporter, + verbose, + exit +}: EventParams) => { + return { + startTimer: (message: string) => { + console.time(message); + }, + endTimer: (message: string) => { + console.timeEnd(message); + }, + waitingMessage: (loadDelayTime: number) => { + console.log( + 'Waiting for ' + loadDelayTime + ' milliseconds after page loads...' + ); + }, + onTestStart: (url: string) => { + if (silentMode) { + return; + } + console.log( + bold('\nTesting ' + link(url)) + + ' ... please wait, this may take a minute.' + ); + if (timer) { + console.time('Total test time'); + } + }, + onTestComplete: (results: AxeResults) => { + const { violations, testEngine, testEnvironment, testRunner } = results; + + /* istanbul ignore if */ + if (violations.length === 0) { + cliReporter(green(' 0 violations found!')); + return; + } + + const issueCount = violations.reduce((count, violation) => { + cliReporter( + '\n' + + error(' Violation of %j with %d occurrences!\n') + + ' %s. Correct invalid elements at:\n' + + violation.nodes + .map(node => ' - ' + selectorToString(node.target) + '\n') + .join('') + + ' For details, see: %s', + violation.id, + violation.nodes.length, + violation.description, + link(violation.helpUrl.split('?')[0]) + ); + return count + violation.nodes.length; + }, 0); + + cliReporter(error('\n%d Accessibility issues detected.'), issueCount); + + if (verbose) { + const metadata = { + 'Test Runner': testRunner, + 'Test Engine': testEngine, + 'Test Environment': testEnvironment + }; + cliReporter(`\n${JSON.stringify(metadata, null, 2)}`); + } + + if (exit) { + process.exit(1); + } + } + }; +}; diff --git a/packages/cli/src/lib/index.ts b/packages/cli/src/lib/index.ts new file mode 100644 index 00000000..947fb9c4 --- /dev/null +++ b/packages/cli/src/lib/index.ts @@ -0,0 +1,5 @@ +import testPages from './axe-test-urls'; +import { saveOutcome } from './utils'; +import * as utils from './utils'; + +export { saveOutcome, testPages, utils }; diff --git a/packages/cli/src/lib/utils.test.ts b/packages/cli/src/lib/utils.test.ts new file mode 100644 index 00000000..e075e103 --- /dev/null +++ b/packages/cli/src/lib/utils.test.ts @@ -0,0 +1,109 @@ +import 'mocha'; +import { assert } from 'chai'; +import * as utils from './utils'; + +describe('utils', () => { + describe('parseUrl', () => { + it('given a url without protocol', () => { + const url = 'foobar.com'; + assert.deepEqual(utils.parseUrl(url), `http://${url}`); + }); + it('given a url with a protocol', () => { + const url = 'http://foobar.com'; + assert.deepEqual(utils.parseUrl(url), url); + }); + }); + + describe('parseBrowser', () => { + it('given an unknown browser returns error', () => { + assert.throws(() => utils.parseBrowser('foobar')); + }); + + it('given no browser returns chrome-headless', () => { + assert.deepEqual(utils.parseBrowser(), 'chrome-headless'); + }); + + describe('returns firefox', () => { + const firefoxBrowsers = ['ff', 'firefox', 'gecko', 'marionette']; + for (const firefoxBrowser of firefoxBrowsers) { + it(`given ${firefoxBrowser} returns firefox`, () => { + assert.deepEqual(utils.parseBrowser(firefoxBrowser), 'firefox'); + }); + } + }); + + describe('returns chrome', () => { + it('given chrome returns chrome', () => { + assert.deepEqual(utils.parseBrowser('chrome'), 'chrome'); + }); + }); + + describe('returns ie', () => { + const ieBrowsers = [ + 'ie', + 'explorer', + 'internetexplorer', + 'internet_explorer', + 'internet-explorer' + ]; + + for (const ieBrowser of ieBrowsers) { + it(`given ${ieBrowser} returns ie`, () => { + assert.deepEqual(utils.parseBrowser(ieBrowser), 'ie'); + }); + } + }); + + describe('returns safari', () => { + it('given safari return safari', () => { + assert.deepEqual(utils.parseBrowser('safari'), 'safari'); + }); + }); + + describe('returns edge', () => { + const edgeBrowsers = ['edge', 'microsoftedge']; + for (const edgeBrowser of edgeBrowsers) { + it(`given ${edgeBrowser} returns MicrosoftEdge`, () => { + assert.deepEqual(utils.parseBrowser(edgeBrowser), 'MicrosoftEdge'); + }); + } + }); + }); + + describe('getAxeSource', () => { + it('given no axe source use local source', () => { + const axeSource = utils.getAxeSource(); + assert.isNotNull(axeSource); + }); + + it('given invalid axe source throws error', () => { + assert.throws(() => utils.getAxeSource('././././')); + }); + }); + + describe('getAxeVersion', () => { + it('given valid axe version returns only version', () => { + assert.deepEqual(utils.getAxeVersion(`axe.version = '4.1.1'`), '4.1.1'); + }); + + it('given invalid axe version returns unknown version string', () => { + assert.deepEqual(utils.getAxeVersion(`axe = '4.1.1'`), 'unknown version'); + }); + }); + + describe('splitList', () => { + it('given a comma delimited string returns array', () => { + const delimited = 'foo,bar,baz'; + const array = utils.splitList(delimited); + assert.isArray(array); + assert.deepEqual(array, ['foo', 'bar', 'baz']); + }); + + it('given a single string returns an array', () => { + const string = 'foo'; + const array = utils.splitList(string); + assert.isArray(array); + assert.deepEqual(array, ['foo']); + }); + }); +}); diff --git a/packages/cli/src/lib/utils.ts b/packages/cli/src/lib/utils.ts new file mode 100644 index 00000000..bbd86766 --- /dev/null +++ b/packages/cli/src/lib/utils.ts @@ -0,0 +1,132 @@ +import * as fs from 'fs'; +import * as path from 'path'; +import * as colors from 'colors'; +import { AxeResults } from 'axe-core'; + +export const saveOutcome = ( + outcome: AxeResults | AxeResults[], + fileName?: string, + dir?: string +): string => { + if (typeof fileName !== 'string') { + fileName = 'axe-results-' + Date.now() + '.json'; + } + /* istanbul ignore if */ + if (typeof dir !== 'string') { + dir = process.cwd(); + } else if (!path.isAbsolute(dir)) { + dir = path.join(process.cwd(), dir); + } + + const filePath = path.join(dir, fileName); + + /* istanbul ignore else */ + if (!fs.existsSync(filePath)) { + fs.mkdirSync(dir, { recursive: true }); + } + fs.writeFileSync(filePath, JSON.stringify(outcome, null, 2), 'utf-8'); + return filePath; +}; + +export const parseUrl = (url: string): string => { + if (!/[a-z]+:\/\//.test(url)) { + return 'http://' + url; + } + return url; +}; + +export const parseBrowser = (browser?: string): string | Error => { + if (!browser) { + return 'chrome-headless'; + } + + const l = browser.length; + switch (browser.toLowerCase()) { + case 'ff': + case 'firefox'.substr(0, l): + case 'gecko'.substr(0, l): + case 'marionette'.substr(0, l): + return 'firefox'; + + case 'chrome'.substr(0, l): + return 'chrome'; + + case 'ie': + case 'explorer'.substr(0, l): + case 'internetexplorer'.substr(0, l): + case 'internet_explorer'.substr(0, l): + case 'internet-explorer'.substr(0, l): + return 'ie'; + + case 'safari'.substr(0, l): + return 'safari'; + + case 'edge'.substr(0, l): + case 'microsoftedge'.substr(0, l): + return 'MicrosoftEdge'; + + default: + throw new Error('Unknown browser ' + browser); + } +}; + +export const getAxeSource = (axePath?: string) => { + // Abort if axePath should exist, and it isn't + if (axePath && !fs.existsSync(axePath)) { + return; + // Look for axe in current working directory + } else if (!axePath) { + axePath = path.join(process.cwd(), 'axe.js'); + } + + if (!fs.existsSync(axePath)) { + // Look for axe in CDW ./node_modules + axePath = path.join(process.cwd(), 'node_modules', 'axe-core', 'axe.js'); + } + /* istanbul ignore if */ + if (!fs.existsSync(axePath)) { + // if all else fails, use the locally installed axe + /* istanbul ignore next */ + axePath = path.join(__dirname, 'node_modules', 'axe-core', 'axe.js'); + } + + return fs.readFileSync(axePath, { encoding: 'utf-8' }); +}; + +export const getAxeVersion = (source: string): string => { + const match = source.match(/\.version\s*=\s'([^']+)'/); + return match ? match[1] : 'unknown version'; +}; + +export const splitList = (val: string): string[] => { + return val.split(/[,;]/).map(str => str.trim()); +}; + +export const selectorToString = ( + selectors: string[], + separator?: string +): string => { + separator = separator || ' '; + return selectors + .reduce((prev, curr) => prev.concat(curr as never), []) + .join(separator); +}; + +export const reporter = ( + noReporter: boolean, + silentMode: boolean +): (() => void) => { + if (!noReporter || silentMode) { + return () => {}; + } else { + return (...args: string[]) => { + console.log(...args); + }; + } +}; + +export const link = colors.underline.blue; +export const error = colors.red.bold; +export const bold = colors.bold; +export const green = colors.green; +export const italics = colors.italic; diff --git a/packages/cli/test/webdriver.js b/packages/cli/src/lib/webdriver.test.ts similarity index 54% rename from packages/cli/test/webdriver.js rename to packages/cli/src/lib/webdriver.test.ts index b6f790c7..8baf4181 100644 --- a/packages/cli/test/webdriver.js +++ b/packages/cli/src/lib/webdriver.test.ts @@ -1,13 +1,14 @@ -'use strict'; - -const assert = require('chai').assert; -const { startDriver } = require('../lib/webdriver'); -const chromedriver = require('chromedriver'); -const chrome = require('selenium-webdriver/chrome'); -const path = require('path'); - +import 'mocha'; +import { assert } from 'chai'; +import { startDriver } from './webdriver'; +import * as chromedriver from 'chromedriver'; +import * as chrome from 'selenium-webdriver/chrome'; +import type { Options } from 'selenium-webdriver/chrome'; +import * as path from 'path'; +import { WebdriverConfigParams } from '../types'; describe('startDriver', () => { - let config, browser; + let config: WebdriverConfigParams; + let browser: string; beforeEach(() => { browser = 'chrome-headless'; config = { @@ -20,31 +21,21 @@ describe('startDriver', () => { afterEach(async () => { const service = chrome.getDefaultService(); if (service.isRunning()) { - await service.stop(); - - // An unfortunately hacky way to clean up - // the service. Stop will shut it down, - // but it doesn't reset the local state - service.address_ = null; - chrome.setDefaultService(null); + await service.kill(); } }); it('creates a driver', async () => { const driver = await startDriver(config); - assert.isObject(driver); assert.isFunction(driver.manage); }); - xit('sets the config.browser as the browser', done => { + xit('sets the config.browser as the browser', async () => { browser = 'chrome'; - startDriver(config) - .then(config => config.driver.getCapabilities()) - .then(capabilities => { - assert.equal(capabilities.get('browserName'), browser); - }) - .then(done, done); + const driver = await startDriver(config); + const capabilities = await driver.getCapabilities(); + assert.equal(capabilities.get('browserName'), browser); }); it('sets the browser as chrome with chrome-headless', async () => { @@ -60,7 +51,7 @@ describe('startDriver', () => { await startDriver(config); const service = chrome.getDefaultService(); - assert.equal(service.executable_, chromedriver.path); + assert.equal((service as any).executable_, chromedriver.path); }); it('uses the passed in chromedriver path with chrome-headless', async () => { @@ -70,35 +61,25 @@ describe('startDriver', () => { const service = chrome.getDefaultService(); assert.notEqual(config.chromedriverPath, chromedriver.path); - assert.equal(service.executable_, config.chromedriverPath); - }); - - it('sets the --headless flag with chrome-headless', async () => { - browser = 'chrome-headless'; - await startDriver(config); - const capabilities = await config.builder.getCapabilities(); - const chromeOptions = capabilities.get('chromeOptions'); - - assert.isObject(chromeOptions); - assert.deepEqual(chromeOptions.args, ['--headless']); + assert.equal((service as any).executable_, config.chromedriverPath); }); it('sets the --chrome-options flag with no-sandbox', async () => { browser = 'chrome-headless'; - config.chromeOptions = ['--no-sandbox']; + config.chromeOptions = (['--no-sandbox'] as unknown) as Options[]; await startDriver(config); - const capabilities = await config.builder.getCapabilities(); - const chromeOptions = capabilities.get('chromeOptions'); + const capabilities = config?.builder?.getCapabilities(); + const chromeOptions = capabilities?.get('chromeOptions'); assert.isArray(chromeOptions.args); - assert.deepEqual(chromeOptions.args, ['--headless', '--no-sandbox']); + assert.deepEqual(chromeOptions.args, ['--no-sandbox']); }); it('sets the --timeout flag', async () => { browser = 'chrome-headless'; config.timeout = 10000; const driver = await startDriver(config); - await config.builder; + config.builder; const timeoutValue = await driver.manage().getTimeouts(); assert.isObject(timeoutValue); diff --git a/packages/cli/src/lib/webdriver.ts b/packages/cli/src/lib/webdriver.ts new file mode 100644 index 00000000..e2d7f168 --- /dev/null +++ b/packages/cli/src/lib/webdriver.ts @@ -0,0 +1,38 @@ +import * as chromedriver from 'chromedriver'; +import { Builder, Capabilities, WebDriver } from 'selenium-webdriver'; +import * as chrome from 'selenium-webdriver/chrome'; +import { WebdriverConfigParams } from '../types'; + +const startDriver = async ( + config: WebdriverConfigParams +): Promise => { + const scriptTimeout = (config.timeout || 20) * 1000.0; + let builder: Builder; + const args: chrome.Options[] = []; + /* istanbul ignore else */ + if (config.browser === 'chrome-headless') { + const service = new chrome.ServiceBuilder( + config.chromedriverPath || chromedriver.path + ).build(); + chrome.setDefaultService(service); + if (config.chromeOptions?.length) { + args.push(...config.chromeOptions); + } + + const chromeCapabilities = Capabilities.chrome(); + chromeCapabilities.set('chromeOptions', { args }); + builder = new Builder() + .forBrowser('chrome') + .withCapabilities(chromeCapabilities) + .setChromeOptions(new chrome.Options().headless()); + } else { + builder = new Builder().forBrowser(config.browser); + } + + config.builder = builder; + const driver = builder.build(); + await driver.manage().setTimeouts({ script: scriptTimeout }); + return driver; +}; + +export { startDriver }; diff --git a/packages/cli/src/testutils/axe-core@2.5.0.js b/packages/cli/src/testutils/axe-core@2.5.0.js new file mode 100644 index 00000000..b5ab72e5 --- /dev/null +++ b/packages/cli/src/testutils/axe-core@2.5.0.js @@ -0,0 +1,18941 @@ +/*! aXe v2.5.0 + * Copyright (c) 2017 Deque Systems, Inc. + * + * Your use of this Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + * + * This entire copyright notice must appear in every copy of this file you + * distribute or in any file that contains substantial portions of this source + * code. + */ +(function axeFunction(window) { + var global = window; + var document = window.document; + ('use strict'); + var _typeof = + typeof Symbol === 'function' && typeof Symbol.iterator === 'symbol' + ? function (obj) { + return typeof obj; + } + : function (obj) { + return obj && + typeof Symbol === 'function' && + obj.constructor === Symbol && + obj !== Symbol.prototype + ? 'symbol' + : typeof obj; + }; + var axe = axe || {}; + axe.version = '2.5.0'; + if (typeof define === 'function' && define.amd) { + define([], function () { + 'use strict'; + return axe; + }); + } + if ( + (typeof module === 'undefined' ? 'undefined' : _typeof(module)) === + 'object' && + module.exports && + typeof axeFunction.toString === 'function' + ) { + axe.source = + '(' + + axeFunction.toString() + + ')(typeof window === "object" ? window : this);'; + module.exports = axe; + } + if (typeof window.getComputedStyle === 'function') { + window.axe = axe; + } + var commons; + function SupportError(error) { + this.name = 'SupportError'; + this.cause = error.cause; + this.message = + '`' + error.cause + '` - feature unsupported in your environment.'; + if (error.ruleId) { + this.ruleId = error.ruleId; + this.message += ' Skipping ' + this.ruleId + ' rule.'; + } + this.stack = new Error().stack; + } + SupportError.prototype = Object.create(Error.prototype); + SupportError.prototype.constructor = SupportError; + ('use strict'); + var utils = (axe.utils = {}); + ('use strict'); + var helpers = {}; + ('use strict'); + var _typeof = + typeof Symbol === 'function' && typeof Symbol.iterator === 'symbol' + ? function (obj) { + return typeof obj; + } + : function (obj) { + return obj && + typeof Symbol === 'function' && + obj.constructor === Symbol && + obj !== Symbol.prototype + ? 'symbol' + : typeof obj; + }; + function getDefaultConfiguration(audit) { + 'use strict'; + var config; + if (audit) { + config = axe.utils.clone(audit); + config.commons = audit.commons; + } else { + config = {}; + } + config.reporter = config.reporter || null; + config.rules = config.rules || []; + config.checks = config.checks || []; + config.data = Object.assign( + { + checks: {}, + rules: {} + }, + config.data + ); + return config; + } + function unpackToObject(collection, audit, method) { + 'use strict'; + var i, l; + for (i = 0, l = collection.length; i < l; i++) { + audit[method](collection[i]); + } + } + function Audit(audit) { + this.brand = 'axe'; + this.application = 'axeAPI'; + this.tagExclude = ['experimental']; + this.defaultConfig = audit; + this._init(); + } + Audit.prototype._init = function () { + var audit = getDefaultConfiguration(this.defaultConfig); + axe.commons = commons = audit.commons; + this.reporter = audit.reporter; + this.commands = {}; + this.rules = []; + this.checks = {}; + unpackToObject(audit.rules, this, 'addRule'); + unpackToObject(audit.checks, this, 'addCheck'); + this.data = {}; + this.data.checks = (audit.data && audit.data.checks) || {}; + this.data.rules = (audit.data && audit.data.rules) || {}; + this.data.failureSummaries = + (audit.data && audit.data.failureSummaries) || {}; + this.data.incompleteFallbackMessage = + (audit.data && audit.data.incompleteFallbackMessage) || ''; + this._constructHelpUrls(); + }; + Audit.prototype.registerCommand = function (command) { + 'use strict'; + this.commands[command.id] = command.callback; + }; + Audit.prototype.addRule = function (spec) { + 'use strict'; + if (spec.metadata) { + this.data.rules[spec.id] = spec.metadata; + } + var rule = this.getRule(spec.id); + if (rule) { + rule.configure(spec); + } else { + this.rules.push(new Rule(spec, this)); + } + }; + Audit.prototype.addCheck = function (spec) { + 'use strict'; + var metadata = spec.metadata; + if ( + (typeof metadata === 'undefined' ? 'undefined' : _typeof(metadata)) === + 'object' + ) { + this.data.checks[spec.id] = metadata; + if (_typeof(metadata.messages) === 'object') { + Object.keys(metadata.messages) + .filter(function (prop) { + return ( + metadata.messages.hasOwnProperty(prop) && + typeof metadata.messages[prop] === 'string' + ); + }) + .forEach(function (prop) { + if (metadata.messages[prop].indexOf('function') === 0) { + metadata.messages[prop] = new Function( + 'return ' + metadata.messages[prop] + ';' + )(); + } + }); + } + } + if (this.checks[spec.id]) { + this.checks[spec.id].configure(spec); + } else { + this.checks[spec.id] = new Check(spec); + } + }; + Audit.prototype.run = function (context, options, resolve, reject) { + 'use strict'; + this.validateOptions(options); + var q = axe.utils.queue(); + this.rules.forEach(function (rule) { + if (axe.utils.ruleShouldRun(rule, context, options)) { + if (options.performanceTimer) { + var markEnd = 'mark_rule_end_' + rule.id; + var markStart = 'mark_rule_start_' + rule.id; + axe.utils.performanceTimer.mark(markStart); + } + q.defer(function (res, rej) { + rule.run( + context, + options, + function (out) { + if (options.performanceTimer) { + axe.utils.performanceTimer.mark(markEnd); + axe.utils.performanceTimer.measure( + 'rule_' + rule.id, + markStart, + markEnd + ); + } + res(out); + }, + function (err) { + if (!options.debug) { + var errResult = Object.assign(new RuleResult(rule), { + result: axe.constants.CANTTELL, + description: 'An error occured while running this rule', + message: err.message, + stack: err.stack, + error: err + }); + res(errResult); + } else { + rej(err); + } + } + ); + }); + } + }); + q.then(function (results) { + resolve( + results.filter(function (result) { + return !!result; + }) + ); + }).catch(reject); + }; + Audit.prototype.after = function (results, options) { + 'use strict'; + var rules = this.rules; + return results.map(function (ruleResult) { + var rule = axe.utils.findBy(rules, 'id', ruleResult.id); + return rule.after(ruleResult, options); + }); + }; + Audit.prototype.getRule = function (ruleId) { + return this.rules.find(function (rule) { + return rule.id === ruleId; + }); + }; + Audit.prototype.validateOptions = function (options) { + 'use strict'; + var audit = this; + if (_typeof(options.runOnly) === 'object') { + var only = options.runOnly; + if (only.type === 'rule' && Array.isArray(only.value)) { + only.value.forEach(function (ruleId) { + if (!audit.getRule(ruleId)) { + throw new Error('unknown rule `' + ruleId + '` in options.runOnly'); + } + }); + } else if (Array.isArray(only.value) && only.value.length > 0) { + var tags = [].concat(only.value); + audit.rules.forEach(function (rule) { + var tagPos, i, l; + if (!tags) { + return; + } + for (i = 0, l = rule.tags.length; i < l; i++) { + tagPos = tags.indexOf(rule.tags[i]); + if (tagPos !== -1) { + tags.splice(tagPos, 1); + } + } + }); + if (tags.length !== 0) { + throw new Error('could not find tags `' + tags.join('`, `') + '`'); + } + } + } + if (_typeof(options.rules) === 'object') { + Object.keys(options.rules).forEach(function (ruleId) { + if (!audit.getRule(ruleId)) { + throw new Error('unknown rule `' + ruleId + '` in options.rules'); + } + }); + } + return options; + }; + Audit.prototype.setBranding = function (branding) { + 'use strict'; + var previous = { + brand: this.brand, + application: this.application + }; + if ( + branding && + branding.hasOwnProperty('brand') && + branding.brand && + typeof branding.brand === 'string' + ) { + this.brand = branding.brand; + } + if ( + branding && + branding.hasOwnProperty('application') && + branding.application && + typeof branding.application === 'string' + ) { + this.application = branding.application; + } + this._constructHelpUrls(previous); + }; + function getHelpUrl(_ref, ruleId, version) { + var brand = _ref.brand, + application = _ref.application; + return ( + axe.constants.helpUrlBase + + brand + + '/' + + (version || axe.version.substring(0, axe.version.lastIndexOf('.'))) + + '/' + + ruleId + + '?application=' + + application + ); + } + Audit.prototype._constructHelpUrls = function () { + var _this = this; + var previous = + arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : null; + var version = (axe.version.match(/^[1-9][0-9]*\.[1-9][0-9]*/) || [ + 'x.y' + ])[0]; + this.rules.forEach(function (rule) { + if (!_this.data.rules[rule.id]) { + _this.data.rules[rule.id] = {}; + } + var metaData = _this.data.rules[rule.id]; + if ( + typeof metaData.helpUrl !== 'string' || + (previous && + metaData.helpUrl === getHelpUrl(previous, rule.id, version)) + ) { + metaData.helpUrl = getHelpUrl(_this, rule.id, version); + } + }); + }; + Audit.prototype.resetRulesAndChecks = function () { + 'use strict'; + this._init(); + }; + ('use strict'); + function CheckResult(check) { + 'use strict'; + this.id = check.id; + this.data = null; + this.relatedNodes = []; + this.result = null; + } + ('use strict'); + function createExecutionContext(spec) { + 'use strict'; + if (typeof spec === 'string') { + return new Function('return ' + spec + ';')(); + } + return spec; + } + function Check(spec) { + if (spec) { + this.id = spec.id; + this.configure(spec); + } + } + Check.prototype.enabled = true; + Check.prototype.run = function (node, options, resolve, reject) { + 'use strict'; + options = options || {}; + var enabled = options.hasOwnProperty('enabled') + ? options.enabled + : this.enabled, + checkOptions = options.options || this.options; + if (enabled) { + var checkResult = new CheckResult(this); + var checkHelper = axe.utils.checkHelper( + checkResult, + options, + resolve, + reject + ); + var result; + try { + result = this.evaluate.call(checkHelper, node, checkOptions); + } catch (e) { + reject(e); + return; + } + if (!checkHelper.isAsync) { + checkResult.result = result; + setTimeout(function () { + resolve(checkResult); + }, 0); + } + } else { + resolve(null); + } + }; + Check.prototype.configure = function (spec) { + var _this = this; + ['options', 'enabled'] + .filter(function (prop) { + return spec.hasOwnProperty(prop); + }) + .forEach(function (prop) { + return (_this[prop] = spec[prop]); + }); + ['evaluate', 'after'] + .filter(function (prop) { + return spec.hasOwnProperty(prop); + }) + .forEach(function (prop) { + return (_this[prop] = createExecutionContext(spec[prop])); + }); + }; + ('use strict'); + var _typeof = + typeof Symbol === 'function' && typeof Symbol.iterator === 'symbol' + ? function (obj) { + return typeof obj; + } + : function (obj) { + return obj && + typeof Symbol === 'function' && + obj.constructor === Symbol && + obj !== Symbol.prototype + ? 'symbol' + : typeof obj; + }; + function pushUniqueFrame(collection, frame) { + 'use strict'; + if (axe.utils.isHidden(frame)) { + return; + } + var fr = axe.utils.findBy(collection, 'node', frame); + if (!fr) { + collection.push({ + node: frame, + include: [], + exclude: [] + }); + } + } + function pushUniqueFrameSelector(context, type, selectorArray) { + 'use strict'; + context.frames = context.frames || []; + var result, frame; + var frames = document.querySelectorAll(selectorArray.shift()); + frameloop: for (var i = 0, l = frames.length; i < l; i++) { + frame = frames[i]; + for (var j = 0, l2 = context.frames.length; j < l2; j++) { + if (context.frames[j].node === frame) { + context.frames[j][type].push(selectorArray); + break frameloop; + } + } + result = { + node: frame, + include: [], + exclude: [] + }; + if (selectorArray) { + result[type].push(selectorArray); + } + context.frames.push(result); + } + } + function normalizeContext(context) { + 'use strict'; + if ( + (context && + (typeof context === 'undefined' ? 'undefined' : _typeof(context)) === + 'object') || + context instanceof NodeList + ) { + if (context instanceof Node) { + return { + include: [context], + exclude: [] + }; + } + if ( + context.hasOwnProperty('include') || + context.hasOwnProperty('exclude') + ) { + return { + include: + context.include && +context.include.length + ? context.include + : [document], + exclude: context.exclude || [] + }; + } + if (context.length === +context.length) { + return { + include: context, + exclude: [] + }; + } + } + if (typeof context === 'string') { + return { + include: [context], + exclude: [] + }; + } + return { + include: [document], + exclude: [] + }; + } + function parseSelectorArray(context, type) { + 'use strict'; + var item, + result = []; + for (var i = 0, l = context[type].length; i < l; i++) { + item = context[type][i]; + if (typeof item === 'string') { + result = result.concat( + axe.utils.toArray(document.querySelectorAll(item)) + ); + break; + } else if (item && item.length && !(item instanceof Node)) { + if (item.length > 1) { + pushUniqueFrameSelector(context, type, item); + } else { + result = result.concat( + axe.utils.toArray(document.querySelectorAll(item[0])) + ); + } + } else { + result.push(item); + } + } + return result.filter(function (r) { + return r; + }); + } + function validateContext(context) { + 'use strict'; + if (context.include.length === 0) { + if (context.frames.length === 0) { + var env = axe.utils.respondable.isInFrame() ? 'frame' : 'page'; + return new Error( + 'No elements found for include in ' + env + ' Context' + ); + } + context.frames.forEach(function (frame, i) { + if (frame.include.length === 0) { + return new Error( + 'No elements found for include in Context of frame ' + i + ); + } + }); + } + } + function Context(spec) { + 'use strict'; + var self = this; + this.frames = []; + this.initiator = + spec && typeof spec.initiator === 'boolean' ? spec.initiator : true; + this.page = false; + spec = normalizeContext(spec); + this.exclude = spec.exclude; + this.include = spec.include; + this.include = parseSelectorArray(this, 'include'); + this.exclude = parseSelectorArray(this, 'exclude'); + axe.utils.select('frame, iframe', this).forEach(function (frame) { + if (isNodeInContext(frame, self)) { + pushUniqueFrame(self.frames, frame); + } + }); + if (this.include.length === 1 && this.include[0] === document) { + this.page = true; + } + var err = validateContext(this); + if (err instanceof Error) { + throw err; + } + } + ('use strict'); + function RuleResult(rule) { + 'use strict'; + this.id = rule.id; + this.result = axe.constants.NA; + this.pageLevel = rule.pageLevel; + this.impact = null; + this.nodes = []; + } + ('use strict'); + function Rule(spec, parentAudit) { + 'use strict'; + this._audit = parentAudit; + this.id = spec.id; + this.selector = spec.selector || '*'; + this.excludeHidden = + typeof spec.excludeHidden === 'boolean' ? spec.excludeHidden : true; + this.enabled = typeof spec.enabled === 'boolean' ? spec.enabled : true; + this.pageLevel = + typeof spec.pageLevel === 'boolean' ? spec.pageLevel : false; + this.any = spec.any || []; + this.all = spec.all || []; + this.none = spec.none || []; + this.tags = spec.tags || []; + if (spec.matches) { + this.matches = createExecutionContext(spec.matches); + } + } + Rule.prototype.matches = function () { + 'use strict'; + return true; + }; + Rule.prototype.gather = function (context) { + 'use strict'; + var elements = axe.utils.select(this.selector, context); + if (this.excludeHidden) { + return elements.filter(function (element) { + return !axe.utils.isHidden(element); + }); + } + return elements; + }; + Rule.prototype.runChecks = function (type, node, options, resolve, reject) { + 'use strict'; + var self = this; + var checkQueue = axe.utils.queue(); + this[type].forEach(function (c) { + var check = self._audit.checks[c.id || c]; + var option = axe.utils.getCheckOption(check, self.id, options); + checkQueue.defer(function (res, rej) { + check.run(node, option, res, rej); + }); + }); + checkQueue + .then(function (results) { + results = results.filter(function (check) { + return check; + }); + resolve({ + type: type, + results: results + }); + }) + .catch(reject); + }; + Rule.prototype.run = function (context, options, resolve, reject) { + var _this = this; + var q = axe.utils.queue(); + var ruleResult = new RuleResult(this); + var nodes = void 0; + try { + nodes = this.gather(context).filter(function (node) { + return _this.matches(node); + }); + } catch (error) { + reject( + new SupportError({ + cause: error, + ruleId: this.id + }) + ); + return; + } + if (options.performanceTimer) { + axe.log( + 'gather (', + nodes.length, + '):', + axe.utils.performanceTimer.timeElapsed() + 'ms' + ); + } + nodes.forEach(function (node) { + q.defer(function (resolveNode, rejectNode) { + var checkQueue = axe.utils.queue(); + checkQueue.defer(function (res, rej) { + _this.runChecks('any', node, options, res, rej); + }); + checkQueue.defer(function (res, rej) { + _this.runChecks('all', node, options, res, rej); + }); + checkQueue.defer(function (res, rej) { + _this.runChecks('none', node, options, res, rej); + }); + checkQueue + .then(function (results) { + if (results.length) { + var hasResults = false, + result = {}; + results.forEach(function (r) { + var res = r.results.filter(function (result) { + return result; + }); + result[r.type] = res; + if (res.length) { + hasResults = true; + } + }); + if (hasResults) { + result.node = new axe.utils.DqElement(node, options); + ruleResult.nodes.push(result); + } + } + resolveNode(); + }) + .catch(function (err) { + return rejectNode(err); + }); + }); + }); + q.then(function () { + return resolve(ruleResult); + }).catch(function (error) { + return reject(error); + }); + }; + function findAfterChecks(rule) { + 'use strict'; + return axe.utils + .getAllChecks(rule) + .map(function (c) { + var check = rule._audit.checks[c.id || c]; + return check && typeof check.after === 'function' ? check : null; + }) + .filter(Boolean); + } + function findCheckResults(nodes, checkID) { + 'use strict'; + var checkResults = []; + nodes.forEach(function (nodeResult) { + var checks = axe.utils.getAllChecks(nodeResult); + checks.forEach(function (checkResult) { + if (checkResult.id === checkID) { + checkResults.push(checkResult); + } + }); + }); + return checkResults; + } + function filterChecks(checks) { + 'use strict'; + return checks.filter(function (check) { + return check.filtered !== true; + }); + } + function sanitizeNodes(result) { + 'use strict'; + var checkTypes = ['any', 'all', 'none']; + var nodes = result.nodes.filter(function (detail) { + var length = 0; + checkTypes.forEach(function (type) { + detail[type] = filterChecks(detail[type]); + length += detail[type].length; + }); + return length > 0; + }); + if (result.pageLevel && nodes.length) { + nodes = [ + nodes.reduce(function (a, b) { + if (a) { + checkTypes.forEach(function (type) { + a[type].push.apply(a[type], b[type]); + }); + return a; + } + }) + ]; + } + return nodes; + } + Rule.prototype.after = function (result, options) { + 'use strict'; + var afterChecks = findAfterChecks(this); + var ruleID = this.id; + afterChecks.forEach(function (check) { + var beforeResults = findCheckResults(result.nodes, check.id); + var option = axe.utils.getCheckOption(check, ruleID, options); + var afterResults = check.after(beforeResults, option); + beforeResults.forEach(function (item) { + if (afterResults.indexOf(item) === -1) { + item.filtered = true; + } + }); + }); + result.nodes = sanitizeNodes(result); + return result; + }; + Rule.prototype.configure = function (spec) { + 'use strict'; + if (spec.hasOwnProperty('selector')) { + this.selector = spec.selector; + } + if (spec.hasOwnProperty('excludeHidden')) { + this.excludeHidden = + typeof spec.excludeHidden === 'boolean' ? spec.excludeHidden : true; + } + if (spec.hasOwnProperty('enabled')) { + this.enabled = typeof spec.enabled === 'boolean' ? spec.enabled : true; + } + if (spec.hasOwnProperty('pageLevel')) { + this.pageLevel = + typeof spec.pageLevel === 'boolean' ? spec.pageLevel : false; + } + if (spec.hasOwnProperty('any')) { + this.any = spec.any; + } + if (spec.hasOwnProperty('all')) { + this.all = spec.all; + } + if (spec.hasOwnProperty('none')) { + this.none = spec.none; + } + if (spec.hasOwnProperty('tags')) { + this.tags = spec.tags; + } + if (spec.hasOwnProperty('matches')) { + if (typeof spec.matches === 'string') { + this.matches = new Function('return ' + spec.matches + ';')(); + } else { + this.matches = spec.matches; + } + } + }; + ('use strict'); + (function (axe) { + var definitions = [ + { + name: 'NA', + value: 'inapplicable', + priority: 0, + group: 'inapplicable' + }, + { + name: 'PASS', + value: 'passed', + priority: 1, + group: 'passes' + }, + { + name: 'CANTTELL', + value: 'cantTell', + priority: 2, + group: 'incomplete' + }, + { + name: 'FAIL', + value: 'failed', + priority: 3, + group: 'violations' + } + ]; + var constants = { + helpUrlBase: 'https://dequeuniversity.com/rules/', + results: [], + resultGroups: [], + resultGroupMap: {}, + impact: Object.freeze(['minor', 'moderate', 'serious', 'critical']) + }; + definitions.forEach(function (definition) { + var name = definition.name; + var value = definition.value; + var priority = definition.priority; + var group = definition.group; + constants[name] = value; + constants[name + '_PRIO'] = priority; + constants[name + '_GROUP'] = group; + constants.results[priority] = value; + constants.resultGroups[priority] = group; + constants.resultGroupMap[value] = group; + }); + Object.freeze(constants.results); + Object.freeze(constants.resultGroups); + Object.freeze(constants.resultGroupMap); + Object.freeze(constants); + Object.defineProperty(axe, 'constants', { + value: constants, + enumerable: true, + configurable: false, + writable: false + }); + })(axe); + ('use strict'); + var _typeof = + typeof Symbol === 'function' && typeof Symbol.iterator === 'symbol' + ? function (obj) { + return typeof obj; + } + : function (obj) { + return obj && + typeof Symbol === 'function' && + obj.constructor === Symbol && + obj !== Symbol.prototype + ? 'symbol' + : typeof obj; + }; + axe.log = function () { + 'use strict'; + if ( + (typeof console === 'undefined' ? 'undefined' : _typeof(console)) === + 'object' && + console.log + ) { + Function.prototype.apply.call(console.log, console, arguments); + } + }; + ('use strict'); + var _typeof = + typeof Symbol === 'function' && typeof Symbol.iterator === 'symbol' + ? function (obj) { + return typeof obj; + } + : function (obj) { + return obj && + typeof Symbol === 'function' && + obj.constructor === Symbol && + obj !== Symbol.prototype + ? 'symbol' + : typeof obj; + }; + axe.a11yCheck = function (context, options, callback) { + 'use strict'; + if (typeof options === 'function') { + callback = options; + options = {}; + } + if ( + !options || + (typeof options === 'undefined' ? 'undefined' : _typeof(options)) !== + 'object' + ) { + options = {}; + } + var audit = axe._audit; + if (!audit) { + throw new Error('No audit configured'); + } + options.reporter = options.reporter || audit.reporter || 'v2'; + if (options.performanceTimer) { + axe.utils.performanceTimer.start(); + } + var reporter = axe.getReporter(options.reporter); + axe._runRules( + context, + options, + function (results) { + var res = reporter(results, options, callback); + if (res !== undefined) { + if (options.performanceTimer) { + axe.utils.performanceTimer.end(); + } + callback(res); + } + }, + axe.log + ); + }; + ('use strict'); + function cleanupPlugins(resolve, reject) { + 'use strict'; + if (!axe._audit) { + throw new Error('No audit configured'); + } + var q = axe.utils.queue(); + var cleanupErrors = []; + Object.keys(axe.plugins).forEach(function (key) { + q.defer(function (res) { + var rej = function rej(err) { + cleanupErrors.push(err); + res(); + }; + try { + axe.plugins[key].cleanup(res, rej); + } catch (err) { + rej(err); + } + }); + }); + axe.utils + .toArray(document.querySelectorAll('frame, iframe')) + .forEach(function (frame) { + q.defer(function (res, rej) { + return axe.utils.sendCommandToFrame( + frame, + { + command: 'cleanup-plugin' + }, + res, + rej + ); + }); + }); + q.then(function (results) { + if (cleanupErrors.length === 0) { + resolve(results); + } else { + reject(cleanupErrors); + } + }).catch(reject); + } + axe.cleanup = cleanupPlugins; + ('use strict'); + function configureChecksRulesAndBranding(spec) { + 'use strict'; + var audit; + audit = axe._audit; + if (!audit) { + throw new Error('No audit configured'); + } + if ( + spec.reporter && + (typeof spec.reporter === 'function' || reporters[spec.reporter]) + ) { + audit.reporter = spec.reporter; + } + if (spec.checks) { + spec.checks.forEach(function (check) { + audit.addCheck(check); + }); + } + if (spec.rules) { + spec.rules.forEach(function (rule) { + audit.addRule(rule); + }); + } + if (typeof spec.branding !== 'undefined') { + audit.setBranding(spec.branding); + } else { + audit._constructHelpUrls(); + } + if (spec.tagExclude) { + audit.tagExclude = spec.tagExclude; + } + } + axe.configure = configureChecksRulesAndBranding; + ('use strict'); + axe.getRules = function (tags) { + 'use strict'; + tags = tags || []; + var matchingRules = !tags.length + ? axe._audit.rules + : axe._audit.rules.filter(function (item) { + return !!tags.filter(function (tag) { + return item.tags.indexOf(tag) !== -1; + }).length; + }); + var ruleData = axe._audit.data.rules || {}; + return matchingRules.map(function (matchingRule) { + var rd = ruleData[matchingRule.id] || {}; + return { + ruleId: matchingRule.id, + description: rd.description, + help: rd.help, + helpUrl: rd.helpUrl, + tags: matchingRule.tags + }; + }); + }; + ('use strict'); + function runCommand(data, keepalive, callback) { + 'use strict'; + var resolve = callback; + var reject = function reject(err) { + if (err instanceof Error === false) { + err = new Error(err); + } + callback(err); + }; + var context = (data && data.context) || {}; + if (context.include && !context.include.length) { + context.include = [document]; + } + var options = (data && data.options) || {}; + switch (data.command) { + case 'rules': + return runRules(context, options, resolve, reject); + + case 'cleanup-plugin': + return cleanupPlugins(resolve, reject); + + default: + if ( + axe._audit && + axe._audit.commands && + axe._audit.commands[data.command] + ) { + return axe._audit.commands[data.command](data, callback); + } + } + } + axe._load = function (audit) { + 'use strict'; + axe.utils.respondable.subscribe('axe.ping', function ( + data, + keepalive, + respond + ) { + respond({ + axe: true + }); + }); + axe.utils.respondable.subscribe('axe.start', runCommand); + axe._audit = new Audit(audit); + }; + ('use strict'); + var axe = axe || {}; + axe.plugins = {}; + function Plugin(spec) { + 'use strict'; + this._run = spec.run; + this._collect = spec.collect; + this._registry = {}; + spec.commands.forEach(function (command) { + axe._audit.registerCommand(command); + }); + } + Plugin.prototype.run = function () { + 'use strict'; + return this._run.apply(this, arguments); + }; + Plugin.prototype.collect = function () { + 'use strict'; + return this._collect.apply(this, arguments); + }; + Plugin.prototype.cleanup = function (done) { + 'use strict'; + var q = axe.utils.queue(); + var that = this; + Object.keys(this._registry).forEach(function (key) { + q.defer(function (done) { + that._registry[key].cleanup(done); + }); + }); + q.then(function () { + done(); + }); + }; + Plugin.prototype.add = function (impl) { + 'use strict'; + this._registry[impl.id] = impl; + }; + axe.registerPlugin = function (plugin) { + 'use strict'; + axe.plugins[plugin.id] = new Plugin(plugin); + }; + ('use strict'); + var reporters = {}; + var defaultReporter; + axe.getReporter = function (reporter) { + 'use strict'; + if (typeof reporter === 'string' && reporters[reporter]) { + return reporters[reporter]; + } + if (typeof reporter === 'function') { + return reporter; + } + return defaultReporter; + }; + axe.addReporter = function registerReporter(name, cb, isDefault) { + 'use strict'; + reporters[name] = cb; + if (isDefault) { + defaultReporter = cb; + } + }; + ('use strict'); + function resetConfiguration() { + 'use strict'; + var audit = axe._audit; + if (!audit) { + throw new Error('No audit configured'); + } + audit.resetRulesAndChecks(); + } + axe.reset = resetConfiguration; + ('use strict'); + function runRules(context, options, resolve, reject) { + 'use strict'; + try { + context = new Context(context); + } catch (e) { + return reject(e); + } + var q = axe.utils.queue(); + var audit = axe._audit; + if (options.performanceTimer) { + axe.utils.performanceTimer.auditStart(); + } + if (context.frames.length && options.iframes !== false) { + q.defer(function (res, rej) { + axe.utils.collectResultsFromFrames( + context, + options, + 'rules', + null, + res, + rej + ); + }); + } + var scrollState = void 0; + q.defer(function (res, rej) { + if (options.restoreScroll) { + scrollState = axe.utils.getScrollState(); + } + audit.run(context, options, res, rej); + }); + q.then(function (data) { + try { + if (scrollState) { + axe.utils.setScrollState(scrollState); + } + if (options.performanceTimer) { + axe.utils.performanceTimer.auditEnd(); + } + var results = axe.utils.mergeResults( + data.map(function (d) { + return { + results: d + }; + }) + ); + if (context.initiator) { + results = audit.after(results, options); + results.forEach(axe.utils.publishMetaData); + results = results.map(axe.utils.finalizeRuleResult); + } + try { + resolve(results); + } catch (e) { + axe.log(e); + } + } catch (e) { + reject(e); + } + }).catch(reject); + } + axe._runRules = runRules; + ('use strict'); + var _typeof = + typeof Symbol === 'function' && typeof Symbol.iterator === 'symbol' + ? function (obj) { + return typeof obj; + } + : function (obj) { + return obj && + typeof Symbol === 'function' && + obj.constructor === Symbol && + obj !== Symbol.prototype + ? 'symbol' + : typeof obj; + }; + function isContext(potential) { + 'use strict'; + switch (true) { + case typeof potential === 'string': + case Array.isArray(potential): + case Node && potential instanceof Node: + case NodeList && potential instanceof NodeList: + return true; + + case (typeof potential === 'undefined' + ? 'undefined' + : _typeof(potential)) !== 'object': + return false; + + case potential.include !== undefined: + case potential.exclude !== undefined: + case typeof potential.length === 'number': + return true; + + default: + return false; + } + } + var noop = function noop() {}; + function normalizeRunParams(context, options, callback) { + 'use strict'; + var typeErr = new TypeError('axe.run arguments are invalid'); + if (!isContext(context)) { + if (callback !== undefined) { + throw typeErr; + } + callback = options; + options = context; + context = document; + } + if ( + (typeof options === 'undefined' ? 'undefined' : _typeof(options)) !== + 'object' + ) { + if (callback !== undefined) { + throw typeErr; + } + callback = options; + options = {}; + } + if (typeof callback !== 'function' && callback !== undefined) { + throw typeErr; + } + return { + context: context, + options: options, + callback: callback || noop + }; + } + axe.run = function (context, options, callback) { + 'use strict'; + if (!axe._audit) { + throw new Error('No audit configured'); + } + var args = normalizeRunParams(context, options, callback); + context = args.context; + options = args.options; + callback = args.callback; + options.reporter = options.reporter || axe._audit.reporter || 'v1'; + if (options.performanceTimer) { + axe.utils.performanceTimer.start(); + } + var p = void 0; + var reject = noop; + var resolve = noop; + if (window.Promise && callback === noop) { + p = new Promise(function (_resolve, _reject) { + reject = _reject; + resolve = _resolve; + }); + } + axe._runRules( + context, + options, + function (rawResults) { + var respond = function respond(results) { + try { + callback(null, results); + } catch (e) { + axe.log(e); + } + resolve(results); + }; + if (options.performanceTimer) { + axe.utils.performanceTimer.end(); + } + try { + var reporter = axe.getReporter(options.reporter); + var results = reporter(rawResults, options, respond); + if (results !== undefined) { + respond(results); + } + } catch (err) { + callback(err); + reject(err); + } + }, + function (err) { + callback(err); + reject(err); + } + ); + return p; + }; + ('use strict'); + helpers.failureSummary = function failureSummary(nodeData) { + 'use strict'; + var failingChecks = {}; + failingChecks.none = nodeData.none.concat(nodeData.all); + failingChecks.any = nodeData.any; + return Object.keys(failingChecks) + .map(function (key) { + if (!failingChecks[key].length) { + return; + } + var sum = axe._audit.data.failureSummaries[key]; + if (sum && typeof sum.failureMessage === 'function') { + return sum.failureMessage( + failingChecks[key].map(function (check) { + return check.message || ''; + }) + ); + } + }) + .filter(function (i) { + return i !== undefined; + }) + .join('\n\n'); + }; + ('use strict'); + helpers.incompleteFallbackMessage = function incompleteFallbackMessage() { + 'use strict'; + return axe._audit.data.incompleteFallbackMessage(); + }; + ('use strict'); + var _typeof = + typeof Symbol === 'function' && typeof Symbol.iterator === 'symbol' + ? function (obj) { + return typeof obj; + } + : function (obj) { + return obj && + typeof Symbol === 'function' && + obj.constructor === Symbol && + obj !== Symbol.prototype + ? 'symbol' + : typeof obj; + }; + function normalizeRelatedNodes(node, options) { + 'use strict'; + ['any', 'all', 'none'].forEach(function (type) { + if (!Array.isArray(node[type])) { + return; + } + node[type] + .filter(function (checkRes) { + return Array.isArray(checkRes.relatedNodes); + }) + .forEach(function (checkRes) { + checkRes.relatedNodes = checkRes.relatedNodes.map(function ( + relatedNode + ) { + var res = { + html: relatedNode.source + }; + if (options.elementRef && !relatedNode.fromFrame) { + res.element = relatedNode.element; + } + if (options.selectors !== false || relatedNode.fromFrame) { + res.target = relatedNode.selector; + } + if (options.xpath) { + res.xpath = relatedNode.xpath; + } + return res; + }); + }); + }); + } + var resultKeys = axe.constants.resultGroups; + helpers.processAggregate = function (results, options) { + var resultObject = axe.utils.aggregateResult(results); + resultObject.timestamp = new Date().toISOString(); + resultObject.url = window.location.href; + resultKeys.forEach(function (key) { + if (options.resultTypes && !options.resultTypes.includes(key)) { + (resultObject[key] || []).forEach(function (ruleResult) { + if (Array.isArray(ruleResult.nodes) && ruleResult.nodes.length > 0) { + ruleResult.nodes = [ruleResult.nodes[0]]; + } + }); + } + resultObject[key] = (resultObject[key] || []).map(function (ruleResult) { + ruleResult = Object.assign({}, ruleResult); + if (Array.isArray(ruleResult.nodes) && ruleResult.nodes.length > 0) { + ruleResult.nodes = ruleResult.nodes.map(function (subResult) { + if (_typeof(subResult.node) === 'object') { + subResult.html = subResult.node.source; + if (options.elementRef && !subResult.node.fromFrame) { + subResult.element = subResult.node.element; + } + if (options.selectors !== false || subResult.node.fromFrame) { + subResult.target = subResult.node.selector; + } + if (options.xpath) { + subResult.xpath = subResult.node.xpath; + } + } + delete subResult.result; + delete subResult.node; + normalizeRelatedNodes(subResult, options); + return subResult; + }); + } + resultKeys.forEach(function (key) { + return delete ruleResult[key]; + }); + delete ruleResult.pageLevel; + delete ruleResult.result; + return ruleResult; + }); + }); + return resultObject; + }; + ('use strict'); + axe.addReporter('na', function (results, options, callback) { + 'use strict'; + if (typeof options === 'function') { + callback = options; + options = {}; + } + var out = helpers.processAggregate(results, options); + callback({ + violations: out.violations, + passes: out.passes, + incomplete: out.incomplete, + inapplicable: out.inapplicable, + timestamp: out.timestamp, + url: out.url + }); + }); + ('use strict'); + axe.addReporter('no-passes', function (results, options, callback) { + 'use strict'; + if (typeof options === 'function') { + callback = options; + options = {}; + } + options.resultTypes = ['violations']; + var out = helpers.processAggregate(results, options); + callback({ + violations: out.violations, + timestamp: out.timestamp, + url: out.url + }); + }); + ('use strict'); + axe.addReporter('raw', function (results, options, callback) { + 'use strict'; + if (typeof options === 'function') { + callback = options; + options = {}; + } + callback(results); + }); + ('use strict'); + axe.addReporter('v1', function (results, options, callback) { + 'use strict'; + if (typeof options === 'function') { + callback = options; + options = {}; + } + var out = helpers.processAggregate(results, options); + out.violations.forEach(function (result) { + return result.nodes.forEach(function (nodeResult) { + nodeResult.failureSummary = helpers.failureSummary(nodeResult); + }); + }); + callback({ + violations: out.violations, + passes: out.passes, + incomplete: out.incomplete, + inapplicable: out.inapplicable, + timestamp: out.timestamp, + url: out.url + }); + }); + ('use strict'); + axe.addReporter( + 'v2', + function (results, options, callback) { + 'use strict'; + if (typeof options === 'function') { + callback = options; + options = {}; + } + var out = helpers.processAggregate(results, options); + callback({ + violations: out.violations, + passes: out.passes, + incomplete: out.incomplete, + inapplicable: out.inapplicable, + timestamp: out.timestamp, + url: out.url + }); + }, + true + ); + ('use strict'); + axe.utils.aggregate = function (map, values, initial) { + values = values.slice(); + if (initial) { + values.push(initial); + } + var sorting = values + .map(function (val) { + return map.indexOf(val); + }) + .sort(); + return map[sorting.pop()]; + }; + ('use strict'); + var _axe$constants = axe.constants, + CANTTELL_PRIO = _axe$constants.CANTTELL_PRIO, + FAIL_PRIO = _axe$constants.FAIL_PRIO; + var checkMap = []; + checkMap[axe.constants.PASS_PRIO] = true; + checkMap[axe.constants.CANTTELL_PRIO] = null; + checkMap[axe.constants.FAIL_PRIO] = false; + var checkTypes = ['any', 'all', 'none']; + function anyAllNone(obj, functor) { + return checkTypes.reduce(function (out, type) { + out[type] = (obj[type] || []).map(function (val) { + return functor(val, type); + }); + return out; + }, {}); + } + axe.utils.aggregateChecks = function (nodeResOriginal) { + var nodeResult = Object.assign({}, nodeResOriginal); + anyAllNone(nodeResult, function (check, type) { + var i = checkMap.indexOf(check.result); + check.priority = i !== -1 ? i : axe.constants.CANTTELL_PRIO; + if (type === 'none') { + check.priority = 4 - check.priority; + } + }); + var priorities = { + all: nodeResult.all.reduce(function (a, b) { + return Math.max(a, b.priority); + }, 0), + none: nodeResult.none.reduce(function (a, b) { + return Math.max(a, b.priority); + }, 0), + any: + nodeResult.any.reduce(function (a, b) { + return Math.min(a, b.priority); + }, 4) % 4 + }; + nodeResult.priority = Math.max( + priorities.all, + priorities.none, + priorities.any + ); + var impacts = []; + checkTypes.forEach(function (type) { + nodeResult[type] = nodeResult[type].filter(function (check) { + return ( + check.priority === nodeResult.priority && + check.priority === priorities[type] + ); + }); + nodeResult[type].forEach(function (check) { + return impacts.push(check.impact); + }); + }); + if ([CANTTELL_PRIO, FAIL_PRIO].includes(nodeResult.priority)) { + nodeResult.impact = axe.utils.aggregate(axe.constants.impact, impacts); + } else { + nodeResult.impact = null; + } + anyAllNone(nodeResult, function (c) { + delete c.result; + delete c.priority; + }); + nodeResult.result = axe.constants.results[nodeResult.priority]; + delete nodeResult.priority; + return nodeResult; + }; + ('use strict'); + function copyToGroup(resultObject, subResult, group) { + var resultCopy = Object.assign({}, subResult); + resultCopy.nodes = (resultCopy[group] || []).concat(); + axe.constants.resultGroups.forEach(function (group) { + delete resultCopy[group]; + }); + resultObject[group].push(resultCopy); + } + axe.utils.aggregateResult = function (results) { + var resultObject = {}; + axe.constants.resultGroups.forEach(function (groupName) { + return (resultObject[groupName] = []); + }); + results.forEach(function (subResult) { + if (subResult.error) { + copyToGroup(resultObject, subResult, axe.constants.CANTTELL_GROUP); + } else if (subResult.result === axe.constants.NA) { + copyToGroup(resultObject, subResult, axe.constants.NA_GROUP); + } else { + axe.constants.resultGroups.forEach(function (group) { + if (Array.isArray(subResult[group]) && subResult[group].length > 0) { + copyToGroup(resultObject, subResult, group); + } + }); + } + }); + return resultObject; + }; + ('use strict'); + (function () { + axe.utils.aggregateRule = function (subResults) { + var ruleResult = {}; + subResults = subResults.map(function (subResult) { + if (subResult.any && subResult.all && subResult.none) { + return axe.utils.aggregateChecks(subResult); + } else if (Array.isArray(subResult.node)) { + return axe.utils.finalizeRuleResult(subResult); + } else { + throw new TypeError('Invalid Result type'); + } + }); + var resultList = subResults.map(function (node) { + return node.result; + }); + ruleResult.result = axe.utils.aggregate( + axe.constants.results, + resultList, + ruleResult.result + ); + axe.constants.resultGroups.forEach(function (group) { + return (ruleResult[group] = []); + }); + subResults.forEach(function (subResult) { + var groupName = axe.constants.resultGroupMap[subResult.result]; + ruleResult[groupName].push(subResult); + }); + var impactGroup = axe.constants.FAIL_GROUP; + if (ruleResult[impactGroup].length === 0) { + impactGroup = axe.constants.CANTTELL_GROUP; + } + if (ruleResult[impactGroup].length > 0) { + var impactList = ruleResult[impactGroup].map(function (failure) { + return failure.impact; + }); + ruleResult.impact = + axe.utils.aggregate(axe.constants.impact, impactList) || null; + } else { + ruleResult.impact = null; + } + return ruleResult; + }; + })(); + ('use strict'); + function areStylesSet(el, styles, stopAt) { + 'use strict'; + var styl = window.getComputedStyle(el, null); + var set = false; + if (!styl) { + return false; + } + styles.forEach(function (att) { + if (styl.getPropertyValue(att.property) === att.value) { + set = true; + } + }); + if (set) { + return true; + } + if (el.nodeName.toUpperCase() === stopAt.toUpperCase() || !el.parentNode) { + return false; + } + return areStylesSet(el.parentNode, styles, stopAt); + } + axe.utils.areStylesSet = areStylesSet; + ('use strict'); + axe.utils.checkHelper = function checkHelper( + checkResult, + options, + resolve, + reject + ) { + 'use strict'; + return { + isAsync: false, + async: function async() { + this.isAsync = true; + return function (result) { + if (result instanceof Error === false) { + checkResult.value = result; + resolve(checkResult); + } else { + reject(result); + } + }; + }, + data: function data(_data) { + checkResult.data = _data; + }, + relatedNodes: function relatedNodes(nodes) { + nodes = nodes instanceof Node ? [nodes] : axe.utils.toArray(nodes); + checkResult.relatedNodes = nodes.map(function (element) { + return new axe.utils.DqElement(element, options); + }); + } + }; + }; + ('use strict'); + var _typeof = + typeof Symbol === 'function' && typeof Symbol.iterator === 'symbol' + ? function (obj) { + return typeof obj; + } + : function (obj) { + return obj && + typeof Symbol === 'function' && + obj.constructor === Symbol && + obj !== Symbol.prototype + ? 'symbol' + : typeof obj; + }; + axe.utils.clone = function (obj) { + 'use strict'; + var index, + length, + out = obj; + if ( + obj !== null && + (typeof obj === 'undefined' ? 'undefined' : _typeof(obj)) === 'object' + ) { + if (Array.isArray(obj)) { + out = []; + for (index = 0, length = obj.length; index < length; index++) { + out[index] = axe.utils.clone(obj[index]); + } + } else { + out = {}; + for (index in obj) { + out[index] = axe.utils.clone(obj[index]); + } + } + } + return out; + }; + ('use strict'); + function err(message, node) { + 'use strict'; + return new Error(message + ': ' + axe.utils.getSelector(node)); + } + axe.utils.sendCommandToFrame = function (node, parameters, resolve, reject) { + 'use strict'; + var win = node.contentWindow; + if (!win) { + axe.log('Frame does not have a content window', node); + resolve(null); + return; + } + var timeout = setTimeout(function () { + timeout = setTimeout(function () { + var errMsg = err('No response from frame', node); + if (!parameters.debug) { + axe.log(errMsg); + resolve(null); + } else { + reject(errMsg); + } + }, 0); + }, 500); + axe.utils.respondable(win, 'axe.ping', null, undefined, function () { + clearTimeout(timeout); + timeout = setTimeout(function () { + reject(err('Axe in frame timed out', node)); + }, 3e4); + axe.utils.respondable(win, 'axe.start', parameters, undefined, function ( + data + ) { + clearTimeout(timeout); + if (data instanceof Error === false) { + resolve(data); + } else { + reject(data); + } + }); + }); + }; + function collectResultsFromFrames( + context, + options, + command, + parameter, + resolve, + reject + ) { + 'use strict'; + var q = axe.utils.queue(); + var frames = context.frames; + frames.forEach(function (frame) { + var params = { + options: options, + command: command, + parameter: parameter, + context: { + initiator: false, + page: context.page, + include: frame.include || [], + exclude: frame.exclude || [] + } + }; + q.defer(function (res, rej) { + var node = frame.node; + axe.utils.sendCommandToFrame( + node, + params, + function (data) { + if (data) { + return res({ + results: data, + frameElement: node, + frame: axe.utils.getSelector(node) + }); + } + res(null); + }, + rej + ); + }); + }); + q.then(function (data) { + resolve(axe.utils.mergeResults(data, options)); + }).catch(reject); + } + axe.utils.collectResultsFromFrames = collectResultsFromFrames; + ('use strict'); + axe.utils.contains = function (node, otherNode) { + 'use strict'; + if (typeof node.contains === 'function') { + return node.contains(otherNode); + } + return !!(node.compareDocumentPosition(otherNode) & 16); + }; + ('use strict'); + function truncate(str, maxLength) { + maxLength = maxLength || 300; + if (str.length > maxLength) { + var index = str.indexOf('>'); + str = str.substring(0, index + 1); + } + return str; + } + function getSource(element) { + var source = element.outerHTML; + if (!source && typeof XMLSerializer === 'function') { + source = new XMLSerializer().serializeToString(element); + } + return truncate(source || ''); + } + function DqElement(element, options, spec) { + this._fromFrame = !!spec; + this.spec = spec || {}; + if (options && options.absolutePaths) { + this._options = { + toRoot: true + }; + } + this.source = + this.spec.source !== undefined ? this.spec.source : getSource(element); + this._element = element; + } + DqElement.prototype = { + get selector() { + return ( + this.spec.selector || [ + axe.utils.getSelector(this.element, this._options) + ] + ); + }, + get xpath() { + return this.spec.xpath || [axe.utils.getXpath(this.element)]; + }, + get element() { + return this._element; + }, + get fromFrame() { + return this._fromFrame; + }, + toJSON: function toJSON() { + 'use strict'; + return { + selector: this.selector, + source: this.source, + xpath: this.xpath + }; + } + }; + DqElement.fromFrame = function (node, options, frame) { + node.selector.unshift(frame.selector); + node.xpath.unshift(frame.xpath); + return new axe.utils.DqElement(frame.element, options, node); + }; + axe.utils.DqElement = DqElement; + ('use strict'); + axe.utils.matchesSelector = (function () { + 'use strict'; + var method; + function getMethod(win) { + var index, + candidate, + elProto = win.Element.prototype, + candidates = [ + 'matches', + 'matchesSelector', + 'mozMatchesSelector', + 'webkitMatchesSelector', + 'msMatchesSelector' + ], + length = candidates.length; + for (index = 0; index < length; index++) { + candidate = candidates[index]; + if (elProto[candidate]) { + return candidate; + } + } + } + return function (node, selector) { + if (!method || !node[method]) { + method = getMethod(node.ownerDocument.defaultView); + } + return node[method](selector); + }; + })(); + ('use strict'); + axe.utils.escapeSelector = function (value) { + 'use strict'; + var string = String(value); + var length = string.length; + var index = -1; + var codeUnit; + var result = ''; + var firstCodeUnit = string.charCodeAt(0); + while (++index < length) { + codeUnit = string.charCodeAt(index); + if (codeUnit == 0) { + throw new Error('INVALID_CHARACTER_ERR'); + } + if ( + (codeUnit >= 1 && codeUnit <= 31) || + (codeUnit >= 127 && codeUnit <= 159) || + (index == 0 && codeUnit >= 48 && codeUnit <= 57) || + (index == 1 && codeUnit >= 48 && codeUnit <= 57 && firstCodeUnit == 45) + ) { + result += '\\' + codeUnit.toString(16) + ' '; + continue; + } + if (index == 1 && codeUnit == 45 && firstCodeUnit == 45) { + result += '\\' + string.charAt(index); + continue; + } + if ( + codeUnit >= 128 || + codeUnit == 45 || + codeUnit == 95 || + (codeUnit >= 48 && codeUnit <= 57) || + (codeUnit >= 65 && codeUnit <= 90) || + (codeUnit >= 97 && codeUnit <= 122) + ) { + result += string.charAt(index); + continue; + } + result += '\\' + string.charAt(index); + } + return result; + }; + ('use strict'); + axe.utils.extendMetaData = function (to, from) { + Object.assign(to, from); + Object.keys(from) + .filter(function (prop) { + return typeof from[prop] === 'function'; + }) + .forEach(function (prop) { + to[prop] = null; + try { + to[prop] = from[prop](to); + } catch (e) {} + }); + }; + ('use strict'); + axe.utils.finalizeRuleResult = function (ruleResult) { + Object.assign(ruleResult, axe.utils.aggregateRule(ruleResult.nodes)); + delete ruleResult.nodes; + return ruleResult; + }; + ('use strict'); + var _typeof = + typeof Symbol === 'function' && typeof Symbol.iterator === 'symbol' + ? function (obj) { + return typeof obj; + } + : function (obj) { + return obj && + typeof Symbol === 'function' && + obj.constructor === Symbol && + obj !== Symbol.prototype + ? 'symbol' + : typeof obj; + }; + axe.utils.findBy = function (array, key, value) { + if (Array.isArray(array)) { + return array.find(function (obj) { + return ( + (typeof obj === 'undefined' ? 'undefined' : _typeof(obj)) === + 'object' && obj[key] === value + ); + }); + } + }; + ('use strict'); + axe.utils.getAllChecks = function getAllChecks(object) { + 'use strict'; + var result = []; + return result + .concat(object.any || []) + .concat(object.all || []) + .concat(object.none || []); + }; + ('use strict'); + axe.utils.getCheckOption = function (check, ruleID, options) { + var ruleCheckOption = (((options.rules && options.rules[ruleID]) || {}) + .checks || {})[check.id]; + var checkOption = (options.checks || {})[check.id]; + var enabled = check.enabled; + var opts = check.options; + if (checkOption) { + if (checkOption.hasOwnProperty('enabled')) { + enabled = checkOption.enabled; + } + if (checkOption.hasOwnProperty('options')) { + opts = checkOption.options; + } + } + if (ruleCheckOption) { + if (ruleCheckOption.hasOwnProperty('enabled')) { + enabled = ruleCheckOption.enabled; + } + if (ruleCheckOption.hasOwnProperty('options')) { + opts = ruleCheckOption.options; + } + } + return { + enabled: enabled, + options: opts, + absolutePaths: options.absolutePaths + }; + }; + ('use strict'); + var _slicedToArray = (function () { + function sliceIterator(arr, i) { + var _arr = []; + var _n = true; + var _d = false; + var _e = undefined; + try { + for ( + var _i = arr[Symbol.iterator](), _s; + !(_n = (_s = _i.next()).done); + _n = true + ) { + _arr.push(_s.value); + if (i && _arr.length === i) { + break; + } + } + } catch (err) { + _d = true; + _e = err; + } finally { + try { + if (!_n && _i['return']) { + _i['return'](); + } + } finally { + if (_d) { + throw _e; + } + } + } + return _arr; + } + return function (arr, i) { + if (Array.isArray(arr)) { + return arr; + } else if (Symbol.iterator in Object(arr)) { + return sliceIterator(arr, i); + } else { + throw new TypeError( + 'Invalid attempt to destructure non-iterable instance' + ); + } + }; + })(); + function isMostlyNumbers() { + var str = + arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : ''; + return ( + str.length !== 0 && (str.match(/[0-9]/g) || '').length >= str.length / 2 + ); + } + function splitString(str, splitIndex) { + return [str.substring(0, splitIndex), str.substring(splitIndex)]; + } + function uriParser(url) { + var original = url; + var protocol = '', + domain = '', + port = '', + path = '', + query = '', + hash = ''; + if (url.includes('#')) { + var _splitString = splitString(url, url.indexOf('#')); + var _splitString2 = _slicedToArray(_splitString, 2); + url = _splitString2[0]; + hash = _splitString2[1]; + } + if (url.includes('?')) { + var _splitString3 = splitString(url, url.indexOf('?')); + var _splitString4 = _slicedToArray(_splitString3, 2); + url = _splitString4[0]; + query = _splitString4[1]; + } + if (url.includes('://')) { + var _url$split = url.split('://'); + var _url$split2 = _slicedToArray(_url$split, 2); + protocol = _url$split2[0]; + url = _url$split2[1]; + var _splitString5 = splitString(url, url.indexOf('/')); + var _splitString6 = _slicedToArray(_splitString5, 2); + domain = _splitString6[0]; + url = _splitString6[1]; + } else if (url.substr(0, 2) === '//') { + url = url.substr(2); + var _splitString7 = splitString(url, url.indexOf('/')); + var _splitString8 = _slicedToArray(_splitString7, 2); + domain = _splitString8[0]; + url = _splitString8[1]; + } + if (domain.substr(0, 4) === 'www.') { + domain = domain.substr(4); + } + if (domain && domain.includes(':')) { + var _splitString9 = splitString(domain, domain.indexOf(':')); + var _splitString10 = _slicedToArray(_splitString9, 2); + domain = _splitString10[0]; + port = _splitString10[1]; + } + path = url; + return { + original: original, + protocol: protocol, + domain: domain, + port: port, + path: path, + query: query, + hash: hash + }; + } + axe.utils.getFriendlyUriEnd = function getFriendlyUriEnd() { + var uri = + arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : ''; + var options = + arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {}; + if ( + uri.length <= 1 || + uri.substr(0, 5) === 'data:' || + uri.substr(0, 11) === 'javascript:' || + uri.includes('?') + ) { + return; + } + var currentDomain = options.currentDomain, + _options$maxLength = options.maxLength, + maxLength = _options$maxLength === undefined ? 25 : _options$maxLength; + var _uriParser = uriParser(uri), + path = _uriParser.path, + domain = _uriParser.domain, + hash = _uriParser.hash; + var pathEnd = path.substr( + path.substr(0, path.length - 2).lastIndexOf('/') + 1 + ); + if (hash) { + if (pathEnd && (pathEnd + hash).length <= maxLength) { + return pathEnd + hash; + } else if ( + pathEnd.length < 2 && + hash.length > 2 && + hash.length <= maxLength + ) { + return hash; + } else { + return; + } + } else if (domain && domain.length < maxLength && path.length <= 1) { + return domain + path; + } + if ( + path === '/' + pathEnd && + domain && + currentDomain && + domain !== currentDomain && + (domain + path).length <= maxLength + ) { + return domain + path; + } + var lastDotIndex = pathEnd.lastIndexOf('.'); + if ( + (lastDotIndex === -1 || lastDotIndex > 1) && + (lastDotIndex !== -1 || pathEnd.length > 2) && + pathEnd.length <= maxLength && + !pathEnd.match(/index(\.[a-zA-Z]{2-4})?/) && + !isMostlyNumbers(pathEnd) + ) { + return pathEnd; + } + }; + ('use strict'); + function _toConsumableArray(arr) { + if (Array.isArray(arr)) { + for (var i = 0, arr2 = Array(arr.length); i < arr.length; i++) { + arr2[i] = arr[i]; + } + return arr2; + } else { + return Array.from(arr); + } + } + var escapeSelector = axe.utils.escapeSelector; + function isUncommonClassName(className) { + return ![ + 'focus', + 'hover', + 'hidden', + 'visible', + 'dirty', + 'touched', + 'valid', + 'disable', + 'enable', + 'active', + 'col-' + ].find(function (str) { + return className.includes(str); + }); + } + function getDistinctClassList(elm) { + if (!elm.classList || elm.classList.length === 0) { + return []; + } + var siblings = + (elm.parentNode && Array.from(elm.parentNode.children || '')) || []; + return siblings.reduce(function (classList, childElm) { + if (elm === childElm) { + return classList; + } else { + return classList.filter(function (classItem) { + return !childElm.classList.contains(classItem); + }); + } + }, Array.from(elm.classList).filter(isUncommonClassName)); + } + var commonNodes = [ + 'div', + 'span', + 'p', + 'b', + 'i', + 'u', + 'strong', + 'em', + 'h2', + 'h3' + ]; + function getNthChildString(elm, selector) { + var siblings = + (elm.parentNode && Array.from(elm.parentNode.children || '')) || []; + var hasMatchingSiblings = siblings.find(function (sibling) { + return sibling !== elm && axe.utils.matchesSelector(sibling, selector); + }); + if (hasMatchingSiblings) { + var nthChild = 1 + siblings.indexOf(elm); + return ':nth-child(' + nthChild + ')'; + } else { + return ''; + } + } + var createSelector = { + getElmId: function getElmId(elm) { + if (!elm.getAttribute('id')) { + return; + } + var id = '#' + escapeSelector(elm.getAttribute('id') || ''); + if ( + !id.match(/player_uid_/) && + document.querySelectorAll(id).length === 1 + ) { + return id; + } + }, + getCustomElm: function getCustomElm(elm, _ref) { + var isCustomElm = _ref.isCustomElm, + nodeName = _ref.nodeName; + if (isCustomElm) { + return nodeName; + } + }, + getElmRoleProp: function getElmRoleProp(elm) { + if (elm.hasAttribute('role')) { + return '[role="' + escapeSelector(elm.getAttribute('role')) + '"]'; + } + }, + getUncommonElm: function getUncommonElm(elm, _ref2) { + var isCommonElm = _ref2.isCommonElm, + isCustomElm = _ref2.isCustomElm, + nodeName = _ref2.nodeName; + if (!isCommonElm && !isCustomElm) { + nodeName = escapeSelector(nodeName); + if (nodeName === 'input' && elm.hasAttribute('type')) { + nodeName += '[type="' + elm.type + '"]'; + } + return nodeName; + } + }, + getElmNameProp: function getElmNameProp(elm) { + if (!elm.hasAttribute('id') && elm.name) { + return '[name="' + escapeSelector(elm.name) + '"]'; + } + }, + getDistinctClass: function getDistinctClass(elm, _ref3) { + var distinctClassList = _ref3.distinctClassList; + if (distinctClassList.length > 0 && distinctClassList.length < 3) { + return '.' + distinctClassList.map(escapeSelector).join('.'); + } + }, + getFileRefProp: function getFileRefProp(elm) { + var attr = void 0; + if (elm.hasAttribute('href')) { + attr = 'href'; + } else if (elm.hasAttribute('src')) { + attr = 'src'; + } else { + return; + } + var friendlyUriEnd = axe.utils.getFriendlyUriEnd(elm.getAttribute(attr)); + if (friendlyUriEnd) { + return '[' + attr + '$="' + encodeURI(friendlyUriEnd) + '"]'; + } + }, + getCommonName: function getCommonName(elm, _ref4) { + var nodeName = _ref4.nodeName, + isCommonElm = _ref4.isCommonElm; + if (isCommonElm) { + return nodeName; + } + } + }; + function getElmFeatures(elm, featureCount) { + var nodeName = elm.nodeName.toLowerCase(); + var classList = Array.from(elm.classList) || []; + var props = { + nodeName: nodeName, + classList: classList, + isCustomElm: nodeName.includes('-'), + isCommonElm: commonNodes.includes(nodeName), + distinctClassList: getDistinctClassList(elm) + }; + return [ + createSelector.getCustomElm, + createSelector.getElmRoleProp, + createSelector.getUncommonElm, + createSelector.getElmNameProp, + createSelector.getDistinctClass, + createSelector.getFileRefProp, + createSelector.getCommonName + ].reduce(function (features, func) { + if (features.length === featureCount) { + return features; + } + var feature = func(elm, props); + if (feature) { + if (!feature[0].match(/[a-z]/)) { + features.push(feature); + } else { + features.unshift(feature); + } + } + return features; + }, []); + } + axe.utils.getSelector = function createUniqueSelector(elm) { + var options = + arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {}; + if (!elm) { + return ''; + } + var selector = void 0, + addParent = void 0; + var _options$isUnique = options.isUnique, + isUnique = _options$isUnique === undefined ? false : _options$isUnique; + var idSelector = createSelector.getElmId(elm); + var _options$featureCount = options.featureCount, + featureCount = + _options$featureCount === undefined ? 2 : _options$featureCount, + _options$minDepth = options.minDepth, + minDepth = _options$minDepth === undefined ? 1 : _options$minDepth, + _options$toRoot = options.toRoot, + toRoot = _options$toRoot === undefined ? false : _options$toRoot, + _options$childSelecto = options.childSelectors, + childSelectors = + _options$childSelecto === undefined ? [] : _options$childSelecto; + if (idSelector) { + selector = idSelector; + isUnique = true; + } else { + selector = getElmFeatures(elm, featureCount).join(''); + selector += getNthChildString(elm, selector); + isUnique = + options.isUnique || document.querySelectorAll(selector).length === 1; + if (!isUnique && elm === document.documentElement) { + selector += ':root'; + } + addParent = minDepth !== 0 || !isUnique; + } + var selectorParts = [selector].concat(_toConsumableArray(childSelectors)); + if (elm.parentElement && (toRoot || addParent)) { + return createUniqueSelector(elm.parentNode, { + toRoot: toRoot, + isUnique: isUnique, + childSelectors: selectorParts, + featureCount: 1, + minDepth: minDepth - 1 + }); + } else { + return selectorParts.join(' > '); + } + }; + ('use strict'); + function getXPathArray(node, path) { + var sibling, count; + if (!node) { + return []; + } + if (!path && node.nodeType === 9) { + path = [ + { + str: 'html' + } + ]; + return path; + } + path = path || []; + if (node.parentNode && node.parentNode !== node) { + path = getXPathArray(node.parentNode, path); + } + if (node.previousSibling) { + count = 1; + sibling = node.previousSibling; + do { + if (sibling.nodeType === 1 && sibling.nodeName === node.nodeName) { + count++; + } + sibling = sibling.previousSibling; + } while (sibling); + if (count === 1) { + count = null; + } + } else if (node.nextSibling) { + sibling = node.nextSibling; + do { + if (sibling.nodeType === 1 && sibling.nodeName === node.nodeName) { + count = 1; + sibling = null; + } else { + count = null; + sibling = sibling.previousSibling; + } + } while (sibling); + } + if (node.nodeType === 1) { + var element = {}; + element.str = node.nodeName.toLowerCase(); + var id = + node.getAttribute && axe.utils.escapeSelector(node.getAttribute('id')); + if (id && node.ownerDocument.querySelectorAll('#' + id).length === 1) { + element.id = node.getAttribute('id'); + } + if (count > 1) { + element.count = count; + } + path.push(element); + } + return path; + } + function xpathToString(xpathArray) { + return xpathArray.reduce(function (str, elm) { + if (elm.id) { + return '/' + elm.str + "[@id='" + elm.id + "']"; + } else { + return ( + str + ('/' + elm.str) + (elm.count > 0 ? '[' + elm.count + ']' : '') + ); + } + }, ''); + } + axe.utils.getXpath = function getXpath(node) { + var xpathArray = getXPathArray(node); + return xpathToString(xpathArray); + }; + ('use strict'); + var styleSheet; + function injectStyle(style) { + 'use strict'; + if (styleSheet && styleSheet.parentNode) { + if (styleSheet.styleSheet === undefined) { + styleSheet.appendChild(document.createTextNode(style)); + } else { + styleSheet.styleSheet.cssText += style; + } + return styleSheet; + } + if (!style) { + return; + } + var head = document.head || document.getElementsByTagName('head')[0]; + styleSheet = document.createElement('style'); + styleSheet.type = 'text/css'; + if (styleSheet.styleSheet === undefined) { + styleSheet.appendChild(document.createTextNode(style)); + } else { + styleSheet.styleSheet.cssText = style; + } + head.appendChild(styleSheet); + return styleSheet; + } + axe.utils.injectStyle = injectStyle; + ('use strict'); + axe.utils.isHidden = function isHidden(el, recursed) { + 'use strict'; + if (el.nodeType === 9) { + return false; + } + var style = window.getComputedStyle(el, null); + if ( + !style || + !el.parentNode || + style.getPropertyValue('display') === 'none' || + (!recursed && style.getPropertyValue('visibility') === 'hidden') || + el.getAttribute('aria-hidden') === 'true' + ) { + return true; + } + return axe.utils.isHidden(el.parentNode, true); + }; + ('use strict'); + function pushFrame(resultSet, options, frameElement, frameSelector) { + 'use strict'; + var frameXpath = axe.utils.getXpath(frameElement); + var frameSpec = { + element: frameElement, + selector: frameSelector, + xpath: frameXpath + }; + resultSet.forEach(function (res) { + res.node = axe.utils.DqElement.fromFrame(res.node, options, frameSpec); + var checks = axe.utils.getAllChecks(res); + if (checks.length) { + checks.forEach(function (check) { + check.relatedNodes = check.relatedNodes.map(function (node) { + return axe.utils.DqElement.fromFrame(node, options, frameSpec); + }); + }); + } + }); + } + function spliceNodes(target, to) { + 'use strict'; + var firstFromFrame = to[0].node, + sorterResult, + t; + for (var i = 0, l = target.length; i < l; i++) { + t = target[i].node; + sorterResult = axe.utils.nodeSorter(t.element, firstFromFrame.element); + if ( + sorterResult > 0 || + (sorterResult === 0 && + firstFromFrame.selector.length < t.selector.length) + ) { + target.splice.apply(target, [i, 0].concat(to)); + return; + } + } + target.push.apply(target, to); + } + function normalizeResult(result) { + 'use strict'; + if (!result || !result.results) { + return null; + } + if (!Array.isArray(result.results)) { + return [result.results]; + } + if (!result.results.length) { + return null; + } + return result.results; + } + axe.utils.mergeResults = function mergeResults(frameResults, options) { + 'use strict'; + var result = []; + frameResults.forEach(function (frameResult) { + var results = normalizeResult(frameResult); + if (!results || !results.length) { + return; + } + results.forEach(function (ruleResult) { + if (ruleResult.nodes && frameResult.frame) { + pushFrame( + ruleResult.nodes, + options, + frameResult.frameElement, + frameResult.frame + ); + } + var res = axe.utils.findBy(result, 'id', ruleResult.id); + if (!res) { + result.push(ruleResult); + } else { + if (ruleResult.nodes.length) { + spliceNodes(res.nodes, ruleResult.nodes); + } + } + }); + }); + return result; + }; + ('use strict'); + axe.utils.nodeSorter = function nodeSorter(a, b) { + 'use strict'; + if (a === b) { + return 0; + } + if (a.compareDocumentPosition(b) & 4) { + return -1; + } + return 1; + }; + ('use strict'); + utils.performanceTimer = (function () { + 'use strict'; + function now() { + if (window.performance && window.performance) { + return window.performance.now(); + } + } + var originalTime = null; + var lastRecordedTime = now(); + return { + start: function start() { + this.mark('mark_axe_start'); + }, + end: function end() { + this.mark('mark_axe_end'); + this.measure('axe', 'mark_axe_start', 'mark_axe_end'); + this.logMeasures('axe'); + }, + auditStart: function auditStart() { + this.mark('mark_audit_start'); + }, + auditEnd: function auditEnd() { + this.mark('mark_audit_end'); + this.measure( + 'audit_start_to_end', + 'mark_audit_start', + 'mark_audit_end' + ); + this.logMeasures(); + }, + mark: function mark(markName) { + if (window.performance && window.performance.mark !== undefined) { + window.performance.mark(markName); + } + }, + measure: function measure(measureName, startMark, endMark) { + if (window.performance && window.performance.measure !== undefined) { + window.performance.measure(measureName, startMark, endMark); + } + }, + logMeasures: function logMeasures(measureName) { + function log(req) { + axe.log('Measure ' + req.name + ' took ' + req.duration + 'ms'); + } + if ( + window.performance && + window.performance.getEntriesByType !== undefined + ) { + var measures = window.performance.getEntriesByType('measure'); + for (var i = 0; i < measures.length; ++i) { + var req = measures[i]; + if (req.name === measureName) { + log(req); + return; + } + log(req); + } + } + }, + timeElapsed: function timeElapsed() { + return now() - lastRecordedTime; + }, + reset: function reset() { + if (!originalTime) { + originalTime = now(); + } + lastRecordedTime = now(); + } + }; + })(); + ('use strict'); + if (typeof Object.assign !== 'function') { + (function () { + Object.assign = function (target) { + 'use strict'; + if (target === undefined || target === null) { + throw new TypeError('Cannot convert undefined or null to object'); + } + var output = Object(target); + for (var index = 1; index < arguments.length; index++) { + var source = arguments[index]; + if (source !== undefined && source !== null) { + for (var nextKey in source) { + if (source.hasOwnProperty(nextKey)) { + output[nextKey] = source[nextKey]; + } + } + } + } + return output; + }; + })(); + } + if (!Array.prototype.find) { + Array.prototype.find = function (predicate) { + if (this === null) { + throw new TypeError('Array.prototype.find called on null or undefined'); + } + if (typeof predicate !== 'function') { + throw new TypeError('predicate must be a function'); + } + var list = Object(this); + var length = list.length >>> 0; + var thisArg = arguments[1]; + var value; + for (var i = 0; i < length; i++) { + value = list[i]; + if (predicate.call(thisArg, value, i, list)) { + return value; + } + } + return undefined; + }; + } + axe.utils.pollyfillElementsFromPoint = function () { + if (document.elementsFromPoint) { + return document.elementsFromPoint; + } + if (document.msElementsFromPoint) { + return document.msElementsFromPoint; + } + var usePointer = (function () { + var element = document.createElement('x'); + element.style.cssText = 'pointer-events:auto'; + return element.style.pointerEvents === 'auto'; + })(); + var cssProp = usePointer ? 'pointer-events' : 'visibility'; + var cssDisableVal = usePointer ? 'none' : 'hidden'; + var style = document.createElement('style'); + style.innerHTML = usePointer + ? '* { pointer-events: all }' + : '* { visibility: visible }'; + return function (x, y) { + var current, i, d; + var elements = []; + var previousPointerEvents = []; + document.head.appendChild(style); + while ( + (current = document.elementFromPoint(x, y)) && + elements.indexOf(current) === -1 + ) { + elements.push(current); + previousPointerEvents.push({ + value: current.style.getPropertyValue(cssProp), + priority: current.style.getPropertyPriority(cssProp) + }); + current.style.setProperty(cssProp, cssDisableVal, 'important'); + } + for ( + i = previousPointerEvents.length; + !!(d = previousPointerEvents[--i]); + + ) { + elements[i].style.setProperty( + cssProp, + d.value ? d.value : '', + d.priority + ); + } + document.head.removeChild(style); + return elements; + }; + }; + if (typeof window.addEventListener === 'function') { + document.elementsFromPoint = axe.utils.pollyfillElementsFromPoint(); + } + if (!Array.prototype.includes) { + Array.prototype.includes = function (searchElement) { + 'use strict'; + var O = Object(this); + var len = parseInt(O.length, 10) || 0; + if (len === 0) { + return false; + } + var n = parseInt(arguments[1], 10) || 0; + var k; + if (n >= 0) { + k = n; + } else { + k = len + n; + if (k < 0) { + k = 0; + } + } + var currentElement; + while (k < len) { + currentElement = O[k]; + if ( + searchElement === currentElement || + (searchElement !== searchElement && currentElement !== currentElement) + ) { + return true; + } + k++; + } + return false; + }; + } + if (!Array.prototype.some) { + Array.prototype.some = function (fun) { + 'use strict'; + if (this == null) { + throw new TypeError('Array.prototype.some called on null or undefined'); + } + if (typeof fun !== 'function') { + throw new TypeError(); + } + var t = Object(this); + var len = t.length >>> 0; + var thisArg = arguments.length >= 2 ? arguments[1] : void 0; + for (var i = 0; i < len; i++) { + if (i in t && fun.call(thisArg, t[i], i, t)) { + return true; + } + } + return false; + }; + } + if (!Array.from) { + Array.from = (function () { + var toStr = Object.prototype.toString; + var isCallable = function isCallable(fn) { + return ( + typeof fn === 'function' || toStr.call(fn) === '[object Function]' + ); + }; + var toInteger = function toInteger(value) { + var number = Number(value); + if (isNaN(number)) { + return 0; + } + if (number === 0 || !isFinite(number)) { + return number; + } + return (number > 0 ? 1 : -1) * Math.floor(Math.abs(number)); + }; + var maxSafeInteger = Math.pow(2, 53) - 1; + var toLength = function toLength(value) { + var len = toInteger(value); + return Math.min(Math.max(len, 0), maxSafeInteger); + }; + return function from(arrayLike) { + var C = this; + var items = Object(arrayLike); + if (arrayLike == null) { + throw new TypeError( + 'Array.from requires an array-like object - not null or undefined' + ); + } + var mapFn = arguments.length > 1 ? arguments[1] : void undefined; + var T; + if (typeof mapFn !== 'undefined') { + if (!isCallable(mapFn)) { + throw new TypeError( + 'Array.from: when provided, the second argument must be a function' + ); + } + if (arguments.length > 2) { + T = arguments[2]; + } + } + var len = toLength(items.length); + var A = isCallable(C) ? Object(new C(len)) : new Array(len); + var k = 0; + var kValue; + while (k < len) { + kValue = items[k]; + if (mapFn) { + A[k] = + typeof T === 'undefined' + ? mapFn(kValue, k) + : mapFn.call(T, kValue, k); + } else { + A[k] = kValue; + } + k += 1; + } + A.length = len; + return A; + }; + })(); + } + if (!String.prototype.includes) { + String.prototype.includes = function (search, start) { + if (typeof start !== 'number') { + start = 0; + } + if (start + search.length > this.length) { + return false; + } else { + return this.indexOf(search, start) !== -1; + } + }; + } + ('use strict'); + var _typeof = + typeof Symbol === 'function' && typeof Symbol.iterator === 'symbol' + ? function (obj) { + return typeof obj; + } + : function (obj) { + return obj && + typeof Symbol === 'function' && + obj.constructor === Symbol && + obj !== Symbol.prototype + ? 'symbol' + : typeof obj; + }; + function getIncompleteReason(checkData, messages) { + function getDefaultMsg(messages) { + if (messages.incomplete && messages.incomplete.default) { + return messages.incomplete.default; + } else { + return helpers.incompleteFallbackMessage(); + } + } + if (checkData && checkData.missingData) { + try { + var msg = messages.incomplete[checkData.missingData[0].reason]; + if (!msg) { + throw new Error(); + } + return msg; + } catch (e) { + if (typeof checkData.missingData === 'string') { + return messages.incomplete[checkData.missingData]; + } else { + return getDefaultMsg(messages); + } + } + } else { + return getDefaultMsg(messages); + } + } + function extender(checksData, shouldBeTrue) { + 'use strict'; + return function (check) { + var sourceData = checksData[check.id] || {}; + var messages = sourceData.messages || {}; + var data = Object.assign({}, sourceData); + delete data.messages; + if (check.result === undefined) { + if (_typeof(messages.incomplete) === 'object') { + data.message = function () { + return getIncompleteReason(check.data, messages); + }; + } else { + data.message = messages.incomplete; + } + } else { + data.message = + check.result === shouldBeTrue ? messages.pass : messages.fail; + } + axe.utils.extendMetaData(check, data); + }; + } + axe.utils.publishMetaData = function (ruleResult) { + 'use strict'; + var checksData = axe._audit.data.checks || {}; + var rulesData = axe._audit.data.rules || {}; + var rule = axe.utils.findBy(axe._audit.rules, 'id', ruleResult.id) || {}; + ruleResult.tags = axe.utils.clone(rule.tags || []); + var shouldBeTrue = extender(checksData, true); + var shouldBeFalse = extender(checksData, false); + ruleResult.nodes.forEach(function (detail) { + detail.any.forEach(shouldBeTrue); + detail.all.forEach(shouldBeTrue); + detail.none.forEach(shouldBeFalse); + }); + axe.utils.extendMetaData( + ruleResult, + axe.utils.clone(rulesData[ruleResult.id] || {}) + ); + }; + ('use strict'); + var _typeof = + typeof Symbol === 'function' && typeof Symbol.iterator === 'symbol' + ? function (obj) { + return typeof obj; + } + : function (obj) { + return obj && + typeof Symbol === 'function' && + obj.constructor === Symbol && + obj !== Symbol.prototype + ? 'symbol' + : typeof obj; + }; + (function () { + 'use strict'; + function noop() {} + function funcGuard(f) { + if (typeof f !== 'function') { + throw new TypeError('Queue methods require functions as arguments'); + } + } + function queue() { + var tasks = []; + var started = 0; + var remaining = 0; + var completeQueue = noop; + var complete = false; + var err; + var defaultFail = function defaultFail(e) { + err = e; + setTimeout(function () { + if (err !== undefined && err !== null) { + axe.log('Uncaught error (of queue)', err); + } + }, 1); + }; + var failed = defaultFail; + function createResolve(i) { + return function (r) { + tasks[i] = r; + remaining -= 1; + if (!remaining && completeQueue !== noop) { + complete = true; + completeQueue(tasks); + } + }; + } + function abort(msg) { + completeQueue = noop; + failed(msg); + return tasks; + } + function pop() { + var length = tasks.length; + for (; started < length; started++) { + var task = tasks[started]; + try { + task.call(null, createResolve(started), abort); + } catch (e) { + abort(e); + } + } + } + var q = { + defer: function defer(fn) { + if ( + (typeof fn === 'undefined' ? 'undefined' : _typeof(fn)) === + 'object' && + fn.then && + fn.catch + ) { + var defer = fn; + fn = function fn(resolve, reject) { + defer.then(resolve).catch(reject); + }; + } + funcGuard(fn); + if (err !== undefined) { + return; + } else if (complete) { + throw new Error('Queue already completed'); + } + tasks.push(fn); + ++remaining; + pop(); + return q; + }, + then: function then(fn) { + funcGuard(fn); + if (completeQueue !== noop) { + throw new Error('queue `then` already set'); + } + if (!err) { + completeQueue = fn; + if (!remaining) { + complete = true; + completeQueue(tasks); + } + } + return q; + }, + catch: function _catch(fn) { + funcGuard(fn); + if (failed !== defaultFail) { + throw new Error('queue `catch` already set'); + } + if (!err) { + failed = fn; + } else { + fn(err); + err = null; + } + return q; + }, + abort: abort + }; + return q; + } + axe.utils.queue = queue; + })(); + ('use strict'); + var _typeof = + typeof Symbol === 'function' && typeof Symbol.iterator === 'symbol' + ? function (obj) { + return typeof obj; + } + : function (obj) { + return obj && + typeof Symbol === 'function' && + obj.constructor === Symbol && + obj !== Symbol.prototype + ? 'symbol' + : typeof obj; + }; + (function (exports) { + 'use strict'; + var messages = {}, + subscribers = {}, + errorTypes = Object.freeze([ + 'EvalError', + 'RangeError', + 'ReferenceError', + 'SyntaxError', + 'TypeError', + 'URIError' + ]); + function _getSource() { + var application = 'axe', + version = '', + src; + if (typeof axe !== 'undefined' && axe._audit && !axe._audit.application) { + application = axe._audit.application; + } + if (typeof axe !== 'undefined') { + version = axe.version; + } + src = application + '.' + version; + return src; + } + function verify(postedMessage) { + if ( + (typeof postedMessage === 'undefined' + ? 'undefined' + : _typeof(postedMessage)) === 'object' && + typeof postedMessage.uuid === 'string' && + postedMessage._respondable === true + ) { + var messageSource = _getSource(); + return ( + postedMessage._source === messageSource || + postedMessage._source === 'axe.x.y.z' || + messageSource === 'axe.x.y.z' + ); + } + return false; + } + function post(win, topic, message, uuid, keepalive, callback) { + var error; + if (message instanceof Error) { + error = { + name: message.name, + message: message.message, + stack: message.stack + }; + message = undefined; + } + var data = { + uuid: uuid, + topic: topic, + message: message, + error: error, + _respondable: true, + _source: _getSource(), + _keepalive: keepalive + }; + if (typeof callback === 'function') { + messages[uuid] = callback; + } + win.postMessage(JSON.stringify(data), '*'); + } + function respondable(win, topic, message, keepalive, callback) { + var id = uuid.v1(); + post(win, topic, message, id, keepalive, callback); + } + respondable.subscribe = function (topic, callback) { + subscribers[topic] = callback; + }; + respondable.isInFrame = function (win) { + win = win || window; + return !!win.frameElement; + }; + function createResponder(source, topic, uuid) { + return function (message, keepalive, callback) { + post(source, topic, message, uuid, keepalive, callback); + }; + } + function publish(target, data, keepalive) { + var topic = data.topic; + var subscriber = subscribers[topic]; + if (subscriber) { + var responder = createResponder(target, null, data.uuid); + subscriber(data.message, keepalive, responder); + } + } + function buildErrorObject(error) { + var msg = error.message || 'Unknown error occurred'; + var errorName = errorTypes.includes(error.name) ? error.name : 'Error'; + var ErrConstructor = window[errorName] || Error; + if (error.stack) { + msg += '\n' + error.stack.replace(error.message, ''); + } + return new ErrConstructor(msg); + } + function parseMessage(dataString) { + var data; + if (typeof dataString !== 'string') { + return; + } + try { + data = JSON.parse(dataString); + } catch (ex) {} + if (!verify(data)) { + return; + } + if (_typeof(data.error) === 'object') { + data.error = buildErrorObject(data.error); + } else { + data.error = undefined; + } + return data; + } + if (typeof window.addEventListener === 'function') { + window.addEventListener( + 'message', + function (e) { + var data = parseMessage(e.data); + if (!data) { + return; + } + var uuid = data.uuid; + var keepalive = data._keepalive; + var callback = messages[uuid]; + if (callback) { + var result = data.error || data.message; + var responder = createResponder(e.source, data.topic, uuid); + callback(result, keepalive, responder); + if (!keepalive) { + delete messages[uuid]; + } + } + if (!data.error) { + try { + publish(e.source, data, keepalive); + } catch (err) { + post(e.source, data.topic, err, uuid, false); + } + } + }, + false + ); + } + exports.respondable = respondable; + })(utils); + ('use strict'); + function matchTags(rule, runOnly) { + 'use strict'; + var include, exclude, matching; + var defaultExclude = + axe._audit && axe._audit.tagExclude ? axe._audit.tagExclude : []; + if (runOnly.include || runOnly.exclude) { + include = runOnly.include || []; + include = Array.isArray(include) ? include : [include]; + exclude = runOnly.exclude || []; + exclude = Array.isArray(exclude) ? exclude : [exclude]; + exclude = exclude.concat( + defaultExclude.filter(function (tag) { + return include.indexOf(tag) === -1; + }) + ); + } else { + include = Array.isArray(runOnly) ? runOnly : [runOnly]; + exclude = defaultExclude.filter(function (tag) { + return include.indexOf(tag) === -1; + }); + } + matching = include.some(function (tag) { + return rule.tags.indexOf(tag) !== -1; + }); + if (matching || (include.length === 0 && rule.enabled !== false)) { + return exclude.every(function (tag) { + return rule.tags.indexOf(tag) === -1; + }); + } else { + return false; + } + } + axe.utils.ruleShouldRun = function (rule, context, options) { + 'use strict'; + var runOnly = options.runOnly || {}; + var ruleOptions = (options.rules || {})[rule.id]; + if (rule.pageLevel && !context.page) { + return false; + } else if (runOnly.type === 'rule') { + return runOnly.values.indexOf(rule.id) !== -1; + } else if (ruleOptions && typeof ruleOptions.enabled === 'boolean') { + return ruleOptions.enabled; + } else if (runOnly.type === 'tag' && runOnly.values) { + return matchTags(rule, runOnly.values); + } else { + return matchTags(rule, []); + } + }; + ('use strict'); + function getScroll(elm) { + var style = window.getComputedStyle(elm); + var visibleOverflowY = style.getPropertyValue('overflow-y') === 'visible'; + var visibleOverflowX = style.getPropertyValue('overflow-x') === 'visible'; + if ( + (!visibleOverflowY && elm.scrollHeight > elm.clientHeight) || + (!visibleOverflowX && elm.scrollWidth > elm.clientWidth) + ) { + return { + elm: elm, + top: elm.scrollTop, + left: elm.scrollLeft + }; + } + } + function setScroll(elm, top, left) { + if (elm === window) { + return elm.scroll(top, left); + } else { + elm.scrollTop = top; + elm.scrollLeft = left; + } + } + function getElmScrollRecursive(root) { + return Array.from(root.children).reduce(function (scrolls, elm) { + var scroll = getScroll(elm); + if (scroll) { + scrolls.push(scroll); + } + return scrolls.concat(getElmScrollRecursive(elm)); + }, []); + } + axe.utils.getScrollState = function getScrollState() { + var win = + arguments.length > 0 && arguments[0] !== undefined + ? arguments[0] + : window; + var root = win.document.documentElement; + var windowScroll = [ + win.pageXOffset !== undefined + ? { + elm: win, + top: win.pageYOffset, + left: win.pageXOffset + } + : { + elm: root, + top: root.scrollTop, + left: root.scrollLeft + } + ]; + return windowScroll.concat(getElmScrollRecursive(document.body)); + }; + axe.utils.setScrollState = function setScrollState(scrollState) { + scrollState.forEach(function (_ref) { + var elm = _ref.elm, + top = _ref.top, + left = _ref.left; + return setScroll(elm, top, left); + }); + }; + ('use strict'); + function getDeepest(collection) { + 'use strict'; + return collection.sort(function (a, b) { + if (axe.utils.contains(a, b)) { + return 1; + } + return -1; + })[0]; + } + function isNodeInContext(node, context) { + 'use strict'; + var include = + context.include && + getDeepest( + context.include.filter(function (candidate) { + return axe.utils.contains(candidate, node); + }) + ); + var exclude = + context.exclude && + getDeepest( + context.exclude.filter(function (candidate) { + return axe.utils.contains(candidate, node); + }) + ); + if ( + (!exclude && include) || + (exclude && axe.utils.contains(exclude, include)) + ) { + return true; + } + return false; + } + function pushNode(result, nodes, context) { + 'use strict'; + for (var i = 0, l = nodes.length; i < l; i++) { + if ( + result.indexOf(nodes[i]) === -1 && + isNodeInContext(nodes[i], context) + ) { + result.push(nodes[i]); + } + } + } + axe.utils.select = function select(selector, context) { + 'use strict'; + var result = [], + candidate; + for (var i = 0, l = context.include.length; i < l; i++) { + candidate = context.include[i]; + if ( + candidate.nodeType === candidate.ELEMENT_NODE && + axe.utils.matchesSelector(candidate, selector) + ) { + pushNode(result, [candidate], context); + } + pushNode(result, candidate.querySelectorAll(selector), context); + } + return result.sort(axe.utils.nodeSorter); + }; + ('use strict'); + axe.utils.toArray = function (thing) { + 'use strict'; + return Array.prototype.slice.call(thing); + }; + ('use strict'); + var uuid; + (function (_global) { + var _rng; + var _crypto = _global.crypto || _global.msCrypto; + if (!_rng && _crypto && _crypto.getRandomValues) { + var _rnds8 = new Uint8Array(16); + _rng = function whatwgRNG() { + _crypto.getRandomValues(_rnds8); + return _rnds8; + }; + } + if (!_rng) { + var _rnds = new Array(16); + _rng = function _rng() { + for (var i = 0, r; i < 16; i++) { + if ((i & 3) === 0) { + r = Math.random() * 4294967296; + } + _rnds[i] = (r >>> ((i & 3) << 3)) & 255; + } + return _rnds; + }; + } + var BufferClass = + typeof _global.Buffer == 'function' ? _global.Buffer : Array; + var _byteToHex = []; + var _hexToByte = {}; + for (var i = 0; i < 256; i++) { + _byteToHex[i] = (i + 256).toString(16).substr(1); + _hexToByte[_byteToHex[i]] = i; + } + function parse(s, buf, offset) { + var i = (buf && offset) || 0, + ii = 0; + buf = buf || []; + s.toLowerCase().replace(/[0-9a-f]{2}/g, function (oct) { + if (ii < 16) { + buf[i + ii++] = _hexToByte[oct]; + } + }); + while (ii < 16) { + buf[i + ii++] = 0; + } + return buf; + } + function unparse(buf, offset) { + var i = offset || 0, + bth = _byteToHex; + return ( + bth[buf[i++]] + + bth[buf[i++]] + + bth[buf[i++]] + + bth[buf[i++]] + + '-' + + bth[buf[i++]] + + bth[buf[i++]] + + '-' + + bth[buf[i++]] + + bth[buf[i++]] + + '-' + + bth[buf[i++]] + + bth[buf[i++]] + + '-' + + bth[buf[i++]] + + bth[buf[i++]] + + bth[buf[i++]] + + bth[buf[i++]] + + bth[buf[i++]] + + bth[buf[i++]] + ); + } + var _seedBytes = _rng(); + var _nodeId = [ + _seedBytes[0] | 1, + _seedBytes[1], + _seedBytes[2], + _seedBytes[3], + _seedBytes[4], + _seedBytes[5] + ]; + var _clockseq = ((_seedBytes[6] << 8) | _seedBytes[7]) & 16383; + var _lastMSecs = 0, + _lastNSecs = 0; + function v1(options, buf, offset) { + var i = (buf && offset) || 0; + var b = buf || []; + options = options || {}; + var clockseq = options.clockseq != null ? options.clockseq : _clockseq; + var msecs = options.msecs != null ? options.msecs : new Date().getTime(); + var nsecs = options.nsecs != null ? options.nsecs : _lastNSecs + 1; + var dt = msecs - _lastMSecs + (nsecs - _lastNSecs) / 1e4; + if (dt < 0 && options.clockseq == null) { + clockseq = (clockseq + 1) & 16383; + } + if ((dt < 0 || msecs > _lastMSecs) && options.nsecs == null) { + nsecs = 0; + } + if (nsecs >= 1e4) { + throw new Error("uuid.v1(): Can't create more than 10M uuids/sec"); + } + _lastMSecs = msecs; + _lastNSecs = nsecs; + _clockseq = clockseq; + msecs += 122192928e5; + var tl = ((msecs & 268435455) * 1e4 + nsecs) % 4294967296; + b[i++] = (tl >>> 24) & 255; + b[i++] = (tl >>> 16) & 255; + b[i++] = (tl >>> 8) & 255; + b[i++] = tl & 255; + var tmh = ((msecs / 4294967296) * 1e4) & 268435455; + b[i++] = (tmh >>> 8) & 255; + b[i++] = tmh & 255; + b[i++] = ((tmh >>> 24) & 15) | 16; + b[i++] = (tmh >>> 16) & 255; + b[i++] = (clockseq >>> 8) | 128; + b[i++] = clockseq & 255; + var node = options.node || _nodeId; + for (var n = 0; n < 6; n++) { + b[i + n] = node[n]; + } + return buf ? buf : unparse(b); + } + function v4(options, buf, offset) { + var i = (buf && offset) || 0; + if (typeof options == 'string') { + buf = options == 'binary' ? new BufferClass(16) : null; + options = null; + } + options = options || {}; + var rnds = options.random || (options.rng || _rng)(); + rnds[6] = (rnds[6] & 15) | 64; + rnds[8] = (rnds[8] & 63) | 128; + if (buf) { + for (var ii = 0; ii < 16; ii++) { + buf[i + ii] = rnds[ii]; + } + } + return buf || unparse(rnds); + } + uuid = v4; + uuid.v1 = v1; + uuid.v4 = v4; + uuid.parse = parse; + uuid.unparse = unparse; + uuid.BufferClass = BufferClass; + })(window); + ('use strict'); + axe._load({ + data: { + rules: { + accesskeys: { + description: 'Ensures every accesskey attribute value is unique', + help: 'accesskey attribute value must be unique' + }, + 'area-alt': { + description: + 'Ensures elements of image maps have alternate text', + help: 'Active elements must have alternate text' + }, + 'aria-allowed-attr': { + description: + "Ensures ARIA attributes are allowed for an element's role", + help: 'Elements must only use allowed ARIA attributes' + }, + 'aria-hidden-body': { + description: + "Ensures aria-hidden='true' is not present on the document body.", + help: "aria-hidden='true' must not be present on the document body" + }, + 'aria-required-attr': { + description: + 'Ensures elements with ARIA roles have all required ARIA attributes', + help: 'Required ARIA attributes must be provided' + }, + 'aria-required-children': { + description: + 'Ensures elements with an ARIA role that require child roles contain them', + help: 'Certain ARIA roles must contain particular children' + }, + 'aria-required-parent': { + description: + 'Ensures elements with an ARIA role that require parent roles are contained by them', + help: 'Certain ARIA roles must be contained by particular parents' + }, + 'aria-roles': { + description: + 'Ensures all elements with a role attribute use a valid value', + help: 'ARIA roles used must conform to valid values' + }, + 'aria-valid-attr-value': { + description: 'Ensures all ARIA attributes have valid values', + help: 'ARIA attributes must conform to valid values' + }, + 'aria-valid-attr': { + description: + 'Ensures attributes that begin with aria- are valid ARIA attributes', + help: 'ARIA attributes must conform to valid names' + }, + 'audio-caption': { + description: 'Ensures