diff --git a/.nvmrc b/.nvmrc index 65466b83f74..1de6ab5e261 100644 --- a/.nvmrc +++ b/.nvmrc @@ -1 +1 @@ -v10.15.0 +v10.18.1 diff --git a/.travis.yml b/.travis.yml index 059bea3fbbf..f21e0339cd5 100644 --- a/.travis.yml +++ b/.travis.yml @@ -1,6 +1,6 @@ language: node_js node_js: - - '10.15.0' + - '10.18.1' cache: yarn jobs: diff --git a/UNRELEASED.md b/UNRELEASED.md index fa215e7a761..b1720924700 100644 --- a/UNRELEASED.md +++ b/UNRELEASED.md @@ -14,6 +14,8 @@ Use [the changelog guidelines](https://git.io/polaris-changelog-guidelines) to f ### Development workflow +- Update pa11y test to focus on kitchen sink pages ([#3280](https://github.com/Shopify/polaris-react/pull/3280)) + ### Dependency upgrades ### Code quality diff --git a/dev.yml b/dev.yml index 5f9c3c27cc3..8de5e4265c4 100644 --- a/dev.yml +++ b/dev.yml @@ -2,7 +2,7 @@ name: polaris-react up: - node: yarn: v1.13.0 - version: v10.15.0 # to be kept in sync with .nvmrc and .travis.yml + version: v10.18.1 # to be kept in sync with .nvmrc and .travis.yml - git_hooks: pre-commit: pre-commit diff --git a/package.json b/package.json index ac60d93849c..5bf935f50d4 100644 --- a/package.json +++ b/package.json @@ -124,7 +124,7 @@ "babel-core": "7.0.0-bridge.0", "babel-loader": "^8.1.0", "babel-preset-shopify": "^21.0.0", - "chalk": "^2.4.2", + "chalk": "^4.1.0", "change-case": "^3.1.0", "chromatic": "^5.0.0", "codecov": "^3.5.0", @@ -146,10 +146,10 @@ "node-sass": "^4.12.0", "npm-run-all": "^4.1.5", "object-hash": "^1.3.1", - "pa11y": "^5.2.0", + "pa11y": "^5.3.0", "postcss": "^7.0.18", "postcss-modules": "^3.1.0", - "puppeteer": "^1.20.0", + "puppeteer": "^5.3.0", "react": "^16.9.0", "react-dom": "^16.9.0", "react-is": "^16.9.0", diff --git a/scripts/pa11y.js b/scripts/pa11y.js index 5c97243d47e..004fa2190fc 100644 --- a/scripts/pa11y.js +++ b/scripts/pa11y.js @@ -1,151 +1,65 @@ /* eslint-disable no-console */ const puppeteer = require('puppeteer'); const pa11y = require('pa11y'); +const chalk = require('chalk'); + +// eslint-disable-next-line node/no-path-concat +const iframePath = `file://${__dirname}/../build/storybook/static/iframe.html`; +const sinkUrl = `${iframePath}?id=playground-playground--kitchen-sink&viewMode=story`; + +const testUrls = [ + sinkUrl, + `${sinkUrl}&contexts=Global%20Theming=Enabled%20-%20Light%20Mode`, + // Dark mode has lots of errors. It is still very WIP so ignore for now + // `${sinkUrl}&contexts=Global%20Theming=Enabled%20-%20Dark%20Mode`, +]; + +const printTitle = ({type, message}) => { + switch (type) { + case 'error': + return `${chalk.red('Error:')} ${message}`; + case 'warning': + return `${chalk.yellow('Warning:')} ${message}`; + case 'notice': + return `${chalk.blue('Notice:')} ${message}`; + } +}; -const NUMBER_OF_BROWSERS = 5; - -async function runPa11y() { - const browsers = [ - { - browser: await puppeteer.launch(), - taken: new Promise((resolve) => { - resolve(); - }), - }, - { - browser: await puppeteer.launch(), - taken: new Promise((resolve) => { - resolve(); - }), - }, - { - browser: await puppeteer.launch(), - taken: new Promise((resolve) => { - resolve(); - }), - }, - { - browser: await puppeteer.launch(), - taken: new Promise((resolve) => { - resolve(); - }), - }, - { - browser: await puppeteer.launch(), - taken: new Promise((resolve) => { - resolve(); - }), - }, - ]; - - await browsers.forEach(async (instance) => { - // eslint-disable-next-line require-atomic-updates - instance.page = await instance.browser.newPage(); - }); - - let browserIndex = 0; - - const results = []; - - const setupBrowser = browsers[0].browser; - const page = await setupBrowser.newPage(); - - // eslint-disable-next-line node/no-path-concat - const iframePath = `file://${__dirname}/../build/storybook/static/iframe.html`; +const allowedErrors = [ + 'Duplicate id attribute value "AppFrameMain" found on the web page.', + 'Duplicate id attribute value "AppFrameMainContent" found on the web page.', +]; - const stories = await page - .goto(iframePath) - .then(() => page.evaluate(() => window.__STORYBOOK_CLIENT_API__.raw())); +const testPages = async (urls) => { + const browser = await puppeteer.launch(); - const storyQueryStrings = stories.reduce((memo, story) => { - // There is no need to test the Playground, or the "All Examples" stories - const isSkippedStory = - story.kind === 'Playground/Playground' || story.name === 'All Examples'; + const testPage = async (url) => { + const page = await browser.newPage(); + const result = await pa11y(url, {browser}); + await page.close(); + return result; + }; - if (!isSkippedStory) { - const idParam = `id=${encodeURIComponent(story.id)}`; - memo.push( - idParam, - `${idParam}&contexts=Global%20Theming=Enabled%20-%20Light%20Mode`, - // Dark mode has lots of errors. It is still very WIP so ignore for now - // `${idParam}&contexts=Global%20Theming=Enabled%20-%20Dark%20Mode`, - ); - } - return memo; - }, []); + const pagePromises = urls.map((url) => testPage(url)); + const pageResults = await Promise.all(pagePromises); - storyQueryStrings.forEach((queryString) => { - const currentBrowser = browsers[browserIndex % NUMBER_OF_BROWSERS]; - browserIndex++; - currentBrowser.taken = currentBrowser.taken.then(async () => { - console.log('Testing ', queryString); - const result = await pa11y(`${iframePath}?${queryString}`, { - browser: currentBrowser.browser, - ignore: [ - // Missing lang attribute on tag - // Storybook does not include this property so ignore it - 'WCAG2AA.Principle3.Guideline3_1.3_1_1.H57.2', - ], - }); - result.exampleID = queryString; - delete result.pageUrl; - results.push(result); - }); - }); + await browser.close(); - await Promise.all(browsers.map((instance) => instance.taken)); - await Promise.all(browsers.map((instance) => instance.browser.close())); - return results; -} + const issues = [].concat(...pageResults.map((result) => result.issues)); + return issues + .filter((issue) => !allowedErrors.includes(issue.message)) + .map((issue) => `${chalk.bold(printTitle(issue))}\n${issue.context}`); +}; (async () => { - let rawResults; - try { - rawResults = await runPa11y(); - - if (rawResults.length === 0) { - throw new Error('Component URLs could not be crawled'); - } - } catch (error) { - console.log(error); - process.exit(1); - } - - const results = rawResults.filter((result) => result.issues.length); - - if (results.length) { - console.log( - ` - -======================================================================== -The following issues were discovered and need to be fixed before this code can be merged -======================================================================== -`, - ); - - results.forEach((result) => { - console.log( - '------------------------------------------------------------------------', - ); - console.log(result.exampleID); - console.log( - '------------------------------------------------------------------------', - ); - console.log(JSON.stringify(result.issues, null, 2)); - }); - } else { - console.log( - ` - -======================================================================== -No issues were discovered! -======================================================================== -`, - ); - } + const results = await testPages(testUrls); if (results.length) { + console.log(results.join('\n\n')); + console.log(chalk.bold(`\nFound ${results.length} issues testing URLs:`)); + console.log(`- ${testUrls.join('\n -')}`); process.exit(1); } + console.log(`${chalk.bold.green('Success: ')} No issues were discovered!`); process.exit(0); })(); diff --git a/src/components/AppProvider/README.md b/src/components/AppProvider/README.md index 8b486dee2aa..b54ab06fe9b 100644 --- a/src/components/AppProvider/README.md +++ b/src/components/AppProvider/README.md @@ -60,8 +60,8 @@ AppProvider works by default without any additional options passed to it. showHeader items={[ { - id: 341, - url: 'customers/341', + id: 340, + url: 'customers/340', name: 'Mae Jemison', location: 'Decatur, USA', }, @@ -126,8 +126,8 @@ With an `i18n`, `AppProvider` will provide these translations to polaris compone location: 'Decatur, USA', }, { - id: 256, - url: 'customers/256', + id: 255, + url: 'customers/255', name: 'Ellen Ochoa', location: 'Los Angeles, USA', }, diff --git a/src/components/Filters/README.md b/src/components/Filters/README.md index 6b8ba1a6388..42ac62c4b86 100644 --- a/src/components/Filters/README.md +++ b/src/components/Filters/README.md @@ -184,7 +184,7 @@ function ResourceListFiltersExample() { const filters = [ { - key: 'accountStatus', + key: 'accountStatus1', label: 'Account status', filter: ( All 10+ ), accessibilityLabel: 'All customers', - panelID: 'all-customers-fitted-content', + panelID: 'all-customers-fitted-content2', }, { - id: 'accepts-marketing-fitted', + id: 'accepts-marketing-fitted2', content: ( Accepts marketing 4 ), - panelID: 'accepts-marketing-fitted-Ccontent', + panelID: 'accepts-marketing-fitted-Content2', }, ]; diff --git a/yarn.lock b/yarn.lock index 16547e8fb47..e3b8cc55791 100644 --- a/yarn.lock +++ b/yarn.lock @@ -3968,6 +3968,13 @@ dependencies: "@types/yargs-parser" "*" +"@types/yauzl@^2.9.1": + version "2.9.1" + resolved "https://registry.yarnpkg.com/@types/yauzl/-/yauzl-2.9.1.tgz#d10f69f9f522eef3cf98e30afb684a1e1ec923af" + integrity sha512-A1b8SU4D10uoPjwb0lnHmmu8wZhR9d+9o2PKBQT2jU5YPTKsxac6M2qGAdY7VcL+dHHhARVUDmeg0rOrcd9EjA== + dependencies: + "@types/node" "*" + "@typescript-eslint/eslint-plugin@^2.33.0": version "2.34.0" resolved "https://registry.yarnpkg.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-2.34.0.tgz#6f8ce8a46c7dea4a6f1d171d2bb8fbae6dac2be9" @@ -5114,7 +5121,7 @@ aws4@^1.8.0: resolved "https://registry.yarnpkg.com/aws4/-/aws4-1.8.0.tgz#f0e003d9ca9e7f59c7a508945d7b2ef9a04a542f" integrity sha512-ReZxvNHIOv88FlT7rxcXIIC0fPt4KZqZbOlivyWtXLt8ESx84zd3kMC6iK5jVeS2qt+g7ftS7ye4fi06X5rtRQ== -axe-core@^3.5.2: +axe-core@^3.5.1, axe-core@^3.5.2: version "3.5.5" resolved "https://registry.yarnpkg.com/axe-core/-/axe-core-3.5.5.tgz#84315073b53fa3c0c51676c588d59da09a192227" integrity sha512-5P0QZ6J5xGikH780pghEdbEKijCTrruK9KxtPZCFWUpef0f6GipO+xEZ5GKCb020mmqgbiNO6TcA55CriL784Q== @@ -5722,6 +5729,15 @@ bl@^1.0.0: readable-stream "^2.3.5" safe-buffer "^5.1.1" +bl@^4.0.3: + version "4.0.3" + resolved "https://registry.yarnpkg.com/bl/-/bl-4.0.3.tgz#12d6287adc29080e22a705e5764b2a9522cdc489" + integrity sha512-fs4G6/Hu4/EE+F75J8DuN/0IpQqNjAdC7aEQv7Qt8MHGUH7Ckv2MwTEEeN9QehD0pfIDkMI1bkHYkKy7xHyKIg== + dependencies: + buffer "^5.5.0" + inherits "^2.0.4" + readable-stream "^3.4.0" + block-stream@*: version "0.0.9" resolved "https://registry.yarnpkg.com/block-stream/-/block-stream-0.0.9.tgz#13ebfe778a03205cfe03751481ebb4b3300c126a" @@ -6012,7 +6028,7 @@ buffer@^4.3.0: ieee754 "^1.1.4" isarray "^1.0.0" -buffer@^5.2.1: +buffer@^5.2.1, buffer@^5.5.0: version "5.6.0" resolved "https://registry.yarnpkg.com/buffer/-/buffer-5.6.0.tgz#a31749dc7d81d84db08abf937b6b8c4033f62786" integrity sha512-/gDYp/UtU0eA1ys8bOs9J6a+E/KWIY+DZ+Q2WESNUA0jFRsJOc0SNUO6xJ5SGA1xueg3NL65W6s+NY5l9cunuw== @@ -6845,6 +6861,11 @@ commander@^2.11.0, commander@^2.18.0, commander@^2.19.0, commander@^2.20.0: resolved "https://registry.yarnpkg.com/commander/-/commander-2.20.3.tgz#fd485e84c03eb4881c20722ba48035e8531aeb33" integrity sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ== +commander@^3.0.2: + version "3.0.2" + resolved "https://registry.yarnpkg.com/commander/-/commander-3.0.2.tgz#6837c3fb677ad9933d1cfba42dd14d5117d6b39e" + integrity sha512-Gar0ASD4BDyKC4hl4DwHqDrmvjoxWKZigVnAbn5H1owvm4CxCPdb0HQDehwNYMJpla5+M2tPmPARzhtYuwpHow== + commander@^4.0.1, commander@^4.1.0, commander@^4.1.1: version "4.1.1" resolved "https://registry.yarnpkg.com/commander/-/commander-4.1.1.tgz#9fd602bd936294e9e9ef46a3f4d6964044b18068" @@ -7813,6 +7834,11 @@ detect-port@^1.3.0: address "^1.0.1" debug "^2.6.0" +devtools-protocol@0.0.799653: + version "0.0.799653" + resolved "https://registry.yarnpkg.com/devtools-protocol/-/devtools-protocol-0.0.799653.tgz#86fc95ce5bf4fdf4b77a58047ba9d2301078f119" + integrity sha512-t1CcaZbvm8pOlikqrsIM9GOa7Ipp07+4h/q9u0JXBWjPCjHdBl9KkddX87Vv9vBHoBGtwV79sYQNGnQM6iS5gg== + diff-sequences@^25.2.6: version "25.2.6" resolved "https://registry.yarnpkg.com/diff-sequences/-/diff-sequences-25.2.6.tgz#5f467c00edd35352b7bca46d7927d60e687a76dd" @@ -9028,6 +9054,17 @@ extract-zip@^1.6.6: mkdirp "0.5.1" yauzl "2.4.1" +extract-zip@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/extract-zip/-/extract-zip-2.0.1.tgz#663dca56fe46df890d5f131ef4a06d22bb8ba13a" + integrity sha512-GDhU9ntwuKyGXdZBUgTIe+vXnWj0fppUEtMDL0+idd5Sta8TGpHssn/eusA9mrPr9qNDym6SxAYZjNvCn/9RBg== + dependencies: + debug "^4.1.1" + get-stream "^5.1.0" + yauzl "^2.10.0" + optionalDependencies: + "@types/yauzl" "^2.9.1" + extsprintf@1.3.0, extsprintf@^1.2.0: version "1.3.0" resolved "https://registry.yarnpkg.com/extsprintf/-/extsprintf-1.3.0.tgz#96918440e3041a7a414f8c52e3c574eb3c3e1e05" @@ -9535,15 +9572,6 @@ fs-extra@^0.30.0: path-is-absolute "^1.0.0" rimraf "^2.2.8" -fs-extra@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-5.0.0.tgz#414d0110cdd06705734d055652c5411260c31abd" - integrity sha512-66Pm4RYbjzdyeuqudYqhFiNBbCIuI9kgRqLPSHIlXHidW8NIQtVdkM1yeZ4lXwuhbTETv3EUGMNHAAw6hiundQ== - dependencies: - graceful-fs "^4.1.2" - jsonfile "^4.0.0" - universalify "^0.1.0" - fs-extra@^7.0.1: version "7.0.1" resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-7.0.1.tgz#4f189c44aa123b895f722804f55ea23eadc348e9" @@ -10590,10 +10618,10 @@ html-webpack-plugin@^4.2.1: tapable "^1.1.3" util.promisify "1.0.0" -html_codesniffer@^2.4.0: - version "2.4.1" - resolved "https://registry.yarnpkg.com/html_codesniffer/-/html_codesniffer-2.4.1.tgz#c1ea1412360e44079b82eb2b06c816c5933aac9e" - integrity sha512-7g4Z8+7agJFi7XJGu2r0onIqA7ig9b26vFEvUE6DgtFJlJzy1ELYEKzzd5Xwam4xjHiHQ/w8yHO7KTGNcXnwzg== +html_codesniffer@^2.4.1: + version "2.5.1" + resolved "https://registry.yarnpkg.com/html_codesniffer/-/html_codesniffer-2.5.1.tgz#d76d124b8f5cd0e58b3c1b142fd095a40573ea28" + integrity sha512-vcz0yAaX/OaV6sdNHuT9alBOKkSxYb8h5Yq26dUqgi7XmCgGUSa7U9PiY1PBXQFMjKv1wVPs5/QzHlGuxPDUGg== htmlparser2@^3.10.0, htmlparser2@^3.3.0, htmlparser2@^3.9.1: version "3.10.1" @@ -10972,6 +11000,11 @@ inherits@2.0.1: resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.1.tgz#b17d08d326b4423e568eff719f91b0b1cbdf69f1" integrity sha1-sX0I0ya0Qj5Wjv9xn5GwscvfafE= +inherits@^2.0.4: + version "2.0.4" + resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c" + integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ== + ini@^1.3.4, ini@^1.3.5, ini@~1.3.0: version "1.3.5" resolved "https://registry.yarnpkg.com/ini/-/ini-1.3.5.tgz#eee25f56db1c9ec6085e0c22778083f596abf927" @@ -13577,6 +13610,11 @@ mixin-object@^2.0.1: for-in "^0.1.3" is-extendable "^0.1.1" +mkdirp-classic@^0.5.2: + version "0.5.3" + resolved "https://registry.yarnpkg.com/mkdirp-classic/-/mkdirp-classic-0.5.3.tgz#fa10c9115cc6d8865be221ba47ee9bed78601113" + integrity sha512-gKLcREMhtuZRwRAfqP3RFW+TK4JqApVBtOIftVgjuABpAtpxhPGaDcfvbhNvD0B8iD1oUr/txX35NjcaY6Ns/A== + mkdirp@0.5.1: version "0.5.1" resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.1.tgz#30057438eac6cf7f8c4767f38648d6697d75c903" @@ -14602,19 +14640,33 @@ pa11y-reporter-json@^1.0.0: dependencies: bfj "^4.2.3" -pa11y@^5.2.0: - version "5.2.0" - resolved "https://registry.yarnpkg.com/pa11y/-/pa11y-5.2.0.tgz#fcaa50b66bce457b8bb541c5c8057c593abacd47" - integrity sha512-cREwqossTA/GALOcvk6P/e/uaV/hooKW8hLLhmGpt6YtKOXlFTw/MlOhQ7cP2s8m0Yhtnj/quO2gy4zCzMDabQ== +pa11y-runner-axe@^1.0.1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/pa11y-runner-axe/-/pa11y-runner-axe-1.0.2.tgz#3cdd8e6ff8fba40e7466ad603ac5df38c1475927" + integrity sha512-HMw5kQZz16vS5Bhe067esgeuULNzFYP4ixOFAHxOurwGDptlyc2OqH6zfUuK4szB9tbgb5F23v3qz9hCbkGRpw== dependencies: - commander "^2.19.0" - fs-extra "^5.0.0" - html_codesniffer "^2.4.0" + axe-core "^3.5.1" + +pa11y-runner-htmlcs@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/pa11y-runner-htmlcs/-/pa11y-runner-htmlcs-1.2.0.tgz#e880d7813f11267b631b9f1b8a72032e73090755" + integrity sha512-uf0wEsoeRfyALXVcZeDadV7ot7pE6JZ3EZwbspwmyXW30ahjCClAfE/FtaNo1y2Mlxx5J9ui1sW2YzhHXocV5g== + dependencies: + html_codesniffer "^2.4.1" + +pa11y@^5.3.0: + version "5.3.0" + resolved "https://registry.yarnpkg.com/pa11y/-/pa11y-5.3.0.tgz#b3c628a3163cb281906e39a1be300d6c7a13c29d" + integrity sha512-g1cVpmRQQXClTZYbx4JC+FqCu6AfM9K3px2TPb2NY9JrorxYiInOKQCa9eF6URjY//bDkQmkn65rTWmbwTC07A== + dependencies: + commander "^3.0.2" node.extend "^2.0.2" p-timeout "^2.0.1" pa11y-reporter-cli "^1.0.1" pa11y-reporter-csv "^1.0.0" pa11y-reporter-json "^1.0.0" + pa11y-runner-axe "^1.0.1" + pa11y-runner-htmlcs "^1.2.0" puppeteer "^1.13.0" semver "^5.6.0" @@ -15748,7 +15800,7 @@ punycode@^2.1.0, punycode@^2.1.1: resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.1.1.tgz#b58b010ac40c22c5657616c8d2c2c02c7bf479ec" integrity sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A== -puppeteer@^1.13.0, puppeteer@^1.20.0, puppeteer@^1.4.0: +puppeteer@^1.13.0, puppeteer@^1.4.0: version "1.20.0" resolved "https://registry.yarnpkg.com/puppeteer/-/puppeteer-1.20.0.tgz#e3d267786f74e1d87cf2d15acc59177f471bbe38" integrity sha512-bt48RDBy2eIwZPrkgbcwHtb51mj2nKvHOPMaSH2IsWiv7lOG9k9zhaRzpDZafrk05ajMc3cu+lSQYYOfH2DkVQ== @@ -15762,6 +15814,24 @@ puppeteer@^1.13.0, puppeteer@^1.20.0, puppeteer@^1.4.0: rimraf "^2.6.1" ws "^6.1.0" +puppeteer@^5.3.0: + version "5.3.0" + resolved "https://registry.yarnpkg.com/puppeteer/-/puppeteer-5.3.0.tgz#0abf83d0f2d1273baf2b56885a813f8052903e33" + integrity sha512-GjqMk5GRro3TO0sw3QMsF1H7n+/jaK2OW45qMvqjYUyJ7y4oA//9auy969HHhTG3HZXaMxY/NWXF/NXlAFIvtw== + dependencies: + debug "^4.1.0" + devtools-protocol "0.0.799653" + extract-zip "^2.0.0" + https-proxy-agent "^4.0.0" + mime "^2.0.3" + pkg-dir "^4.2.0" + progress "^2.0.1" + proxy-from-env "^1.0.0" + rimraf "^3.0.2" + tar-fs "^2.0.0" + unbzip2-stream "^1.3.3" + ws "^7.2.3" + q@^1.1.2: version "1.5.1" resolved "https://registry.yarnpkg.com/q/-/q-1.5.1.tgz#7e32f75b41381291d04611f1bf14109ac00651d7" @@ -18406,6 +18476,16 @@ tapable@^1.0.0, tapable@^1.1.3: resolved "https://registry.yarnpkg.com/tapable/-/tapable-1.1.3.tgz#a1fccc06b58db61fd7a45da2da44f5f3a3e67ba2" integrity sha512-4WK/bYZmj8xLr+HUCODHGF1ZFzsYffasLUgEiMBY4fgtltdO6B4WJtlSbPaDTLpYTcGVwM2qLnFTICEcNxs3kA== +tar-fs@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/tar-fs/-/tar-fs-2.1.0.tgz#d1cdd121ab465ee0eb9ccde2d35049d3f3daf0d5" + integrity sha512-9uW5iDvrIMCVpvasdFHW0wJPez0K4JnMZtsuIeDI7HyMGJNxmDZDOCQROr7lXyS+iL/QMpj07qcjGYTSdRFXUg== + dependencies: + chownr "^1.1.1" + mkdirp-classic "^0.5.2" + pump "^3.0.0" + tar-stream "^2.0.0" + tar-stream@^1.5.2: version "1.6.2" resolved "https://registry.yarnpkg.com/tar-stream/-/tar-stream-1.6.2.tgz#8ea55dab37972253d9a9af90fdcd559ae435c555" @@ -18419,6 +18499,17 @@ tar-stream@^1.5.2: to-buffer "^1.1.1" xtend "^4.0.0" +tar-stream@^2.0.0: + version "2.1.4" + resolved "https://registry.yarnpkg.com/tar-stream/-/tar-stream-2.1.4.tgz#c4fb1a11eb0da29b893a5b25476397ba2d053bfa" + integrity sha512-o3pS2zlG4gxr67GmFYBLlq+dM8gyRGUOvsrHclSkvtVtQbjV0s/+ZE8OpICbaj8clrX3tjeHngYGP7rweaBnuw== + dependencies: + bl "^4.0.3" + end-of-stream "^1.4.1" + fs-constants "^1.0.0" + inherits "^2.0.3" + readable-stream "^3.1.1" + tar@^2.0.0: version "2.2.2" resolved "https://registry.yarnpkg.com/tar/-/tar-2.2.2.tgz#0ca8848562c7299b8b446ff6a4d60cdbb23edc40" @@ -18984,7 +19075,7 @@ typescript@^3.7.2, typescript@^3.8.0-dev.20200111, typescript@~3.9.2: resolved "https://registry.yarnpkg.com/typescript/-/typescript-3.9.2.tgz#64e9c8e9be6ea583c54607677dd4680a1cf35db9" integrity sha512-q2ktq4n/uLuNNShyayit+DTobV2ApPEo/6so68JaD5ojvc/6GClBipedB9zNWYxRSAlZXAe405Rlijzl6qDiSw== -unbzip2-stream@^1.0.9: +unbzip2-stream@^1.0.9, unbzip2-stream@^1.3.3: version "1.4.3" resolved "https://registry.yarnpkg.com/unbzip2-stream/-/unbzip2-stream-1.4.3.tgz#b0da04c4371311df771cdc215e87f2130991ace7" integrity sha512-mlExGW4w71ebDJviH16lQLtZS32VKqsSfk80GCfUlwT/4/hNRFsoscrF/c++9xinkMzECL1uL9DDwXqFWkruPg== @@ -19945,6 +20036,11 @@ ws@^7.0.0: resolved "https://registry.yarnpkg.com/ws/-/ws-7.3.0.tgz#4b2f7f219b3d3737bc1a2fbf145d825b94d38ffd" integrity sha512-iFtXzngZVXPGgpTlP1rBqsUK82p9tKqsWRPg5L56egiljujJT3vGAYnHANvFxBieXrTFavhzhxW52jnaWV+w2w== +ws@^7.2.3: + version "7.3.1" + resolved "https://registry.yarnpkg.com/ws/-/ws-7.3.1.tgz#d0547bf67f7ce4f12a72dfe31262c68d7dc551c8" + integrity sha512-D3RuNkynyHmEJIpD2qrgVkc9DQ23OrN/moAwZX4L8DfvszsJxpjQuUq3LMx6HoYji9fbIOBY18XWBsAux1ZZUA== + xdg-basedir@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/xdg-basedir/-/xdg-basedir-4.0.0.tgz#4bc8d9984403696225ef83a1573cbbcb4e79db13" @@ -20099,7 +20195,7 @@ yauzl@2.4.1: dependencies: fd-slicer "~1.0.1" -yauzl@^2.4.2: +yauzl@^2.10.0, yauzl@^2.4.2: version "2.10.0" resolved "https://registry.yarnpkg.com/yauzl/-/yauzl-2.10.0.tgz#c7eb17c93e112cb1086fa6d8e51fb0667b79a5f9" integrity sha1-x+sXyT4RLLEIb6bY5R+wZnt5pfk=