From d613f4bd0699e40d9e8fdc41c21891e857aca349 Mon Sep 17 00:00:00 2001 From: Paul D'Ambra Date: Thu, 9 Jun 2022 11:14:21 +0100 Subject: [PATCH] chore: upgrade cypress to v10x (#9650) * update cypress * really click something that's actually there * obey cypress and use done * run cypress 9 in CI * no need for before each when only one test * no need to set window size to the default * get tests passing file by file * delay checking for a graph in a test * be more specific cypress * use cy command * select text like a human * silly cypress * try and avoid cypress deciding that a visible field is not valid * select delete button correctly * find save button differently * try and avoid not always typing the first character * better trends selections * use cy command to navigate * conitnue trying to get tests to pass in CI * another try at setting feature flag names in CI * can CI find undo button without a wait? * better assertion for cypress * up to v10 * fix splitting specs with v10 path * show cypress how to wait for the test to finish * remove redundant file * change return to satisfy new cypress * move import --- .github/workflows/e2e.yml | 11 +- bin/e2e-test-runner | 8 +- cypress.e2e.config.ts | 99 ++++ cypress.e2e.json | 10 - cypress.json | 12 - cypress/{integration => e2e}/actions.js | 0 cypress/{integration => e2e}/annotations.js | 0 cypress/{integration => e2e}/auth.js | 0 cypress/{integration => e2e}/cohorts.js | 0 .../{integration => e2e}/commandPalette.js | 0 cypress/{integration => e2e}/dashboard.js | 4 +- .../{integration => e2e}/dashboardPremium.js | 0 cypress/{integration => e2e}/events.js | 0 cypress/{integration => e2e}/exports.js | 0 cypress/{integration => e2e}/featureFlags.js | 28 +- cypress/{integration => e2e}/funnels.js | 0 cypress/{integration => e2e}/insights.js | 0 .../{integration => e2e}/insightsPremium.js | 0 cypress/{integration => e2e}/invites.js | 0 cypress/{integration => e2e}/licenses.js | 0 .../organizationSettings.js | 0 cypress/{integration => e2e}/paths.js | 0 cypress/{integration => e2e}/person.js | 0 cypress/{integration => e2e}/persons.js | 0 cypress/{integration => e2e}/preflight.js | 0 cypress/{integration => e2e}/retention.js | 0 cypress/{integration => e2e}/signup.js | 0 cypress/{integration => e2e}/systemStatus.js | 0 cypress/{integration => e2e}/toolbar.js | 6 +- cypress/{integration => e2e}/trends.js | 19 +- cypress/plugins/index.js | 83 ---- cypress/support/{index.js => e2e.js} | 0 package.json | 4 + yarn.lock | 429 +++++++++++++++++- 34 files changed, 555 insertions(+), 158 deletions(-) create mode 100644 cypress.e2e.config.ts delete mode 100644 cypress.e2e.json delete mode 100644 cypress.json rename cypress/{integration => e2e}/actions.js (100%) rename cypress/{integration => e2e}/annotations.js (100%) rename cypress/{integration => e2e}/auth.js (100%) rename cypress/{integration => e2e}/cohorts.js (100%) rename cypress/{integration => e2e}/commandPalette.js (100%) rename cypress/{integration => e2e}/dashboard.js (99%) rename cypress/{integration => e2e}/dashboardPremium.js (100%) rename cypress/{integration => e2e}/events.js (100%) rename cypress/{integration => e2e}/exports.js (100%) rename cypress/{integration => e2e}/featureFlags.js (76%) rename cypress/{integration => e2e}/funnels.js (100%) rename cypress/{integration => e2e}/insights.js (100%) rename cypress/{integration => e2e}/insightsPremium.js (100%) rename cypress/{integration => e2e}/invites.js (100%) rename cypress/{integration => e2e}/licenses.js (100%) rename cypress/{integration => e2e}/organizationSettings.js (100%) rename cypress/{integration => e2e}/paths.js (100%) rename cypress/{integration => e2e}/person.js (100%) rename cypress/{integration => e2e}/persons.js (100%) rename cypress/{integration => e2e}/preflight.js (100%) rename cypress/{integration => e2e}/retention.js (100%) rename cypress/{integration => e2e}/signup.js (100%) rename cypress/{integration => e2e}/systemStatus.js (100%) rename cypress/{integration => e2e}/toolbar.js (74%) rename cypress/{integration => e2e}/trends.js (94%) delete mode 100644 cypress/plugins/index.js rename cypress/support/{index.js => e2e.js} (100%) diff --git a/.github/workflows/e2e.yml b/.github/workflows/e2e.yml index 78027ea3360..59a1d4cecc6 100644 --- a/.github/workflows/e2e.yml +++ b/.github/workflows/e2e.yml @@ -35,8 +35,8 @@ jobs: steps: - uses: actions/checkout@v2 - id: set-specs - # List cypress/integration and produce a JSON array of the files, in chunks - run: echo "::set-output name=specs::$(ls cypress/integration/* | jq --slurp --raw-input -c 'split("\n")[:-1] | _nwise(3) | join("\n")' | jq --slurp -c .)" + # List cypress/e2e and produce a JSON array of the files, in chunks + run: echo "::set-output name=specs::$(ls cypress/e2e/* | jq --slurp --raw-input -c 'split("\n")[:-1] | _nwise(3) | join("\n")' | jq --slurp -c .)" - uses: actions/cache@v2 id: cypress-node-modules-cache-3 @@ -51,7 +51,7 @@ jobs: if: steps.cypress-node-modules-cache-3.outputs.cache-hit != 'true' run: | yarn install --frozen-lockfile - yarn add cypress@6.7.0 cypress-terminal-report@2.1.0 @cypress/react@4.16.4 @cypress/webpack-preprocessor@5.7.0 + yarn add cypress@10.0.3 cypress-terminal-report@3.5.2 cd plugin-server yarn install --frozen-lockfile cypress: @@ -117,7 +117,7 @@ jobs: # should still get some cache benefits. run: | yarn install --frozen-lockfile - yarn add cypress@6.7.0 cypress-terminal-report@2.1.0 @cypress/react@4.16.4 @cypress/webpack-preprocessor@5.7.0 + yarn add cypress@10.0.3 cypress-terminal-report@3.5.2 cd plugin-server yarn install --frozen-lockfile - name: Yarn build @@ -139,8 +139,7 @@ jobs: - name: Cypress run uses: cypress-io/github-action@v2 with: - config-file: cypress.e2e.json - config: retries=2 + config-file: cypress.e2e.config.ts # We're already installing cypress above # We have to install it separately otherwise the tests fail. install: false diff --git a/bin/e2e-test-runner b/bin/e2e-test-runner index 59f755b75e9..3045a2ffb7b 100755 --- a/bin/e2e-test-runner +++ b/bin/e2e-test-runner @@ -27,7 +27,7 @@ nc -z localhost 9092 || ( echo -e "\033[0;31mKafka isn't running. Please run\n\t wget -nv -t1 --spider 'http://localhost:8123/' || ( echo -e "\033[0;31mClickhouse isn't running. Please run\n\tdocker compose -f docker-compose.arm64.yml up zookeeper kafka clickhouse db redis.\nI'll wait while you do that.\033[0m" ; bin/check_kafka_clickhouse_up ) -trap "trap - SIGTERM && yarn remove cypress cypress-terminal-report @cypress/react @cypress/webpack-preprocessor && kill -- -$$" SIGINT SIGTERM EXIT +trap "trap - SIGTERM && yarn remove cypress cypress-terminal-report @cypress/webpack-preprocessor && kill -- -$$" SIGINT SIGTERM EXIT dropdb --if-exists $DATABASE createdb $DATABASE @@ -41,14 +41,14 @@ python manage.py migrate_clickhouse ## parallel block python manage.py setup_dev & -yarn add cypress@6.7.0 cypress-terminal-report@2.1.0 @cypress/react@4.16.4 @cypress/webpack-preprocessor@5.7.0 & wait +yarn add cypress@10.0.3 cypress-terminal-report@3.5.2 & wait ## parallel block ./bin/plugin-server & # Only start webpack if not already running nc -vz 127.0.0.1 8234 2> /dev/null || ./bin/start-frontend & -npx cypress open --config-file cypress.e2e.json & +npx cypress open --config-file cypress.e2e.config.ts & python manage.py runserver 8080 ## Will be called once killed -yarn remove cypress cypress-terminal-report @cypress/react @cypress/webpack-preprocessor +yarn remove cypress cypress-terminal-report diff --git a/cypress.e2e.config.ts b/cypress.e2e.config.ts new file mode 100644 index 00000000000..bfc1ed81783 --- /dev/null +++ b/cypress.e2e.config.ts @@ -0,0 +1,99 @@ +import { defineConfig } from 'cypress' +import webpackPreprocessor from '@cypress/webpack-preprocessor' +import { PNG } from 'pngjs' +import pixelmatch from 'pixelmatch' +import fs from 'fs' +import path from 'path' +import { createEntry } from './webpack.config' + +const downloadDirectory = path.join(__dirname, '..', 'downloads') + +const checkFileDownloaded = async (filename: string, timeout: number, delayMs = 10): Promise => { + const start = Date.now() + const fullFileName = `${downloadDirectory}/${filename}` + + while (Date.now() - start < timeout) { + await new Promise((res) => setTimeout(res, delayMs)) + + if (fs.existsSync(fullFileName)) { + return fullFileName + } + } +} + +export default defineConfig({ + video: false, + defaultCommandTimeout: 20000, + requestTimeout: 8000, + pageLoadTimeout: 80000, + projectId: 'twojfp', + viewportWidth: 1200, + viewportHeight: 1080, + retries: 2, + trashAssetsBeforeRuns: true, + e2e: { + // We've imported your old cypress plugins here. + // You may want to clean this up later by importing these. + setupNodeEvents(on, config) { + const options = { + webpackOptions: createEntry('cypress'), + watchOptions: {}, + } + + // @ts-expect-error -- ignore errors in options type + on('file:preprocessor', webpackPreprocessor(options)) + try { + // eslint-disable-next-line @typescript-eslint/no-var-requires + require('cypress-terminal-report/src/installLogsPrinter')(on) + } catch (e) {} + + on('before:browser:launch', (browser, launchOptions) => { + if (browser.name === 'chrome') { + // https://www.ghacks.net/2013/10/06/list-useful-google-chrome-command-line-switches/ + // Compatibility with gh actions + launchOptions.args.push('--window-size=1280,720') + return launchOptions + } + }) + + on('task', { + compareToReferenceImage({ source, reference, diffThreshold = 0.01, ms = 10000 }) { + return checkFileDownloaded(source, ms).then((fileExists) => { + if (!fileExists) { + return null + } + + const imgSrc = PNG.sync.read(fs.readFileSync(`${downloadDirectory}/${source}`)) + const imgRef = PNG.sync.read(fs.readFileSync(path.join(__dirname, reference))) + const { width, height } = imgSrc + const imgDiff = new PNG({ width, height }) + + const numDiffPixels = pixelmatch(imgSrc.data, imgRef.data, imgDiff.data, width, height, { + threshold: 0.1, + }) + + const imgDiffFilename = `${downloadDirectory}/${source}.diff.png` + + fs.writeFileSync(imgDiffFilename, PNG.sync.write(imgDiff)) + + const percentageDiff = numDiffPixels / (width * height) + + if (percentageDiff > diffThreshold) { + throw new Error( + `Reference image is off by ${(percentageDiff * 100).toFixed( + 2 + )}% (${numDiffPixels}) pixels. See ${imgDiffFilename} for more info` + ) + } + + return true + }) + }, + }) + + return config + }, + baseUrl: 'http://localhost:8000', + specPattern: 'cypress/e2e/**/*.{js,jsx,ts,tsx}', + }, +}) diff --git a/cypress.e2e.json b/cypress.e2e.json deleted file mode 100644 index 3afa385f155..00000000000 --- a/cypress.e2e.json +++ /dev/null @@ -1,10 +0,0 @@ -{ - "video": true, - "baseUrl": "http://localhost:8000", - "defaultCommandTimeout": 20000, - "requestTimeout": 8000, - "pageLoadTimeout": 80000, - "projectId": "twojfp", - "viewportWidth": 1200, - "trashAssetsBeforeRuns": true -} diff --git a/cypress.json b/cypress.json deleted file mode 100644 index 76da7524127..00000000000 --- a/cypress.json +++ /dev/null @@ -1,12 +0,0 @@ -{ - "video": false, - "experimentalComponentTesting": true, - "testFiles": "**/*cy-spec.js", - "componentFolder": "frontend/src", - "projectId": "twojfp", - "ignoreTestFiles": ["**/__snapshots__/*", "**/__image_snapshots__/*"], - "viewportWidth": 1920, - "viewportHeight": 1080, - "retries": 2, - "env": {} -} diff --git a/cypress/integration/actions.js b/cypress/e2e/actions.js similarity index 100% rename from cypress/integration/actions.js rename to cypress/e2e/actions.js diff --git a/cypress/integration/annotations.js b/cypress/e2e/annotations.js similarity index 100% rename from cypress/integration/annotations.js rename to cypress/e2e/annotations.js diff --git a/cypress/integration/auth.js b/cypress/e2e/auth.js similarity index 100% rename from cypress/integration/auth.js rename to cypress/e2e/auth.js diff --git a/cypress/integration/cohorts.js b/cypress/e2e/cohorts.js similarity index 100% rename from cypress/integration/cohorts.js rename to cypress/e2e/cohorts.js diff --git a/cypress/integration/commandPalette.js b/cypress/e2e/commandPalette.js similarity index 100% rename from cypress/integration/commandPalette.js rename to cypress/e2e/commandPalette.js diff --git a/cypress/integration/dashboard.js b/cypress/e2e/dashboard.js similarity index 99% rename from cypress/integration/dashboard.js rename to cypress/e2e/dashboard.js index 6d10d042b4d..6c11e0bcf07 100644 --- a/cypress/integration/dashboard.js +++ b/cypress/e2e/dashboard.js @@ -55,7 +55,7 @@ describe('Dashboard', () => { cy.get('.SideBar__pinned-dashboards div').should('contain', 'App Analytics') }) - it('Share dashboard', () => { + it('Share dashboard', (done) => { createDashboardFromTemplate('to be shared') cy.get('.InsightCard').should('exist') @@ -66,9 +66,9 @@ describe('Dashboard', () => { cy.get('[data-attr=share-dashboard-link-button]').click() cy.window().then((win) => { win.navigator.clipboard.readText().then((linkFromClipboard) => { - cy.wait(200) cy.visit(linkFromClipboard) cy.get('[data-attr=dashboard-item-title]').should('contain', 'to be shared') + done() }) }) }) diff --git a/cypress/integration/dashboardPremium.js b/cypress/e2e/dashboardPremium.js similarity index 100% rename from cypress/integration/dashboardPremium.js rename to cypress/e2e/dashboardPremium.js diff --git a/cypress/integration/events.js b/cypress/e2e/events.js similarity index 100% rename from cypress/integration/events.js rename to cypress/e2e/events.js diff --git a/cypress/integration/exports.js b/cypress/e2e/exports.js similarity index 100% rename from cypress/integration/exports.js rename to cypress/e2e/exports.js diff --git a/cypress/integration/featureFlags.js b/cypress/e2e/featureFlags.js similarity index 76% rename from cypress/integration/featureFlags.js rename to cypress/e2e/featureFlags.js index 1d2954a46b6..a8b3516e42b 100644 --- a/cypress/integration/featureFlags.js +++ b/cypress/e2e/featureFlags.js @@ -1,14 +1,16 @@ describe('Feature Flags', () => { + let name + beforeEach(() => { + name = 'feature-flag-' + Math.floor(Math.random() * 10000000) cy.visit('/feature_flags') }) it('Create feature flag', () => { // ensure unique names to avoid clashes - const name = 'beta-feature' + Math.floor(Math.random() * 10000000) cy.get('h1').should('contain', 'Feature Flags') cy.get('[data-attr=new-feature-flag]').click() - cy.get('[data-attr=feature-flag-key]').type(name).should('have.value', name) + cy.get('[data-attr=feature-flag-key]').click().type(`{moveToEnd}${name}`).should('have.value', name) cy.get('[data-attr=feature-flag-description]') .type('This is a new feature.') .should('have.value', 'This is a new feature.') @@ -29,22 +31,26 @@ describe('Feature Flags', () => { // save the feature flag cy.get('[data-attr=feature-flag-submit]').click() + // after save there should be a delete button + cy.get('button[data-attr="delete-flag"]').should('have.text', 'Delete') + // make sure the data is there as expected after a page reload! cy.reload() // click the sidebar item to go back to the list - cy.get('[data-attr="menu-item-featureflags"]').click() + cy.clickNavMenu('featureflags') cy.get('[data-attr=feature-flag-table]').should('contain', name) cy.get('[data-attr=feature-flag-table]').should('not.contain', '%') // By default it's released to everyone, if a % is not specified cy.get('[data-attr=feature-flag-table]').should('contain', 'is_demo') cy.get(`[data-row-key=${name}]`).contains(name).click() cy.get('[data-attr=feature-flag-key]') - .type('-updated') + .click() + .type(`{moveToEnd}-updated`) .should('have.value', name + '-updated') cy.get('[data-attr=feature-flag-submit]').click() cy.wait(100) - cy.get('[data-attr="menu-item-featureflags"]').click() + cy.clickNavMenu('featureflags') cy.get('[data-attr=feature-flag-table]').should('contain', name + '-updated') cy.get(`[data-row-key=${name}-updated] [data-attr=more-button]`).click() @@ -55,16 +61,18 @@ describe('Feature Flags', () => { }) it('Delete feature flag', () => { - const name = 'to-be-deleted' + Math.floor(Math.random() * 10000000) cy.get('h1').should('contain', 'Feature Flags') cy.get('[data-attr=new-feature-flag]').click() - cy.get('[data-attr=feature-flag-key]').type(name).should('have.value', name) + cy.get('[data-attr=feature-flag-key]').focus().type(name).should('have.value', name) cy.get('[data-attr=feature-flag-submit]').click() - cy.get('[data-attr="menu-item-featureflags"]').click() + + // after save there should be a delete button + cy.get('button[data-attr="delete-flag"]').should('have.text', 'Delete') + + cy.clickNavMenu('featureflags') cy.get('[data-attr=feature-flag-table]').should('contain', name) cy.get(`[data-row-key=${name}]`).contains(name).click() cy.get('[data-attr=delete-flag]').click() - cy.wait(200) - cy.get('.Toastify__toast .LemonButton').contains('Undo').should('exist') + cy.get('.Toastify').contains('Undo').should('be.visible') }) }) diff --git a/cypress/integration/funnels.js b/cypress/e2e/funnels.js similarity index 100% rename from cypress/integration/funnels.js rename to cypress/e2e/funnels.js diff --git a/cypress/integration/insights.js b/cypress/e2e/insights.js similarity index 100% rename from cypress/integration/insights.js rename to cypress/e2e/insights.js diff --git a/cypress/integration/insightsPremium.js b/cypress/e2e/insightsPremium.js similarity index 100% rename from cypress/integration/insightsPremium.js rename to cypress/e2e/insightsPremium.js diff --git a/cypress/integration/invites.js b/cypress/e2e/invites.js similarity index 100% rename from cypress/integration/invites.js rename to cypress/e2e/invites.js diff --git a/cypress/integration/licenses.js b/cypress/e2e/licenses.js similarity index 100% rename from cypress/integration/licenses.js rename to cypress/e2e/licenses.js diff --git a/cypress/integration/organizationSettings.js b/cypress/e2e/organizationSettings.js similarity index 100% rename from cypress/integration/organizationSettings.js rename to cypress/e2e/organizationSettings.js diff --git a/cypress/integration/paths.js b/cypress/e2e/paths.js similarity index 100% rename from cypress/integration/paths.js rename to cypress/e2e/paths.js diff --git a/cypress/integration/person.js b/cypress/e2e/person.js similarity index 100% rename from cypress/integration/person.js rename to cypress/e2e/person.js diff --git a/cypress/integration/persons.js b/cypress/e2e/persons.js similarity index 100% rename from cypress/integration/persons.js rename to cypress/e2e/persons.js diff --git a/cypress/integration/preflight.js b/cypress/e2e/preflight.js similarity index 100% rename from cypress/integration/preflight.js rename to cypress/e2e/preflight.js diff --git a/cypress/integration/retention.js b/cypress/e2e/retention.js similarity index 100% rename from cypress/integration/retention.js rename to cypress/e2e/retention.js diff --git a/cypress/integration/signup.js b/cypress/e2e/signup.js similarity index 100% rename from cypress/integration/signup.js rename to cypress/e2e/signup.js diff --git a/cypress/integration/systemStatus.js b/cypress/e2e/systemStatus.js similarity index 100% rename from cypress/integration/systemStatus.js rename to cypress/e2e/systemStatus.js diff --git a/cypress/integration/toolbar.js b/cypress/e2e/toolbar.js similarity index 74% rename from cypress/integration/toolbar.js rename to cypress/e2e/toolbar.js index e151a3b9ef8..99386d63edf 100644 --- a/cypress/integration/toolbar.js +++ b/cypress/e2e/toolbar.js @@ -1,10 +1,6 @@ describe('Toolbar', () => { - beforeEach(() => { - cy.visit('/demo') - cy.wait(200) - }) - it('Toolbar loads', () => { + cy.visit('/demo') cy.get('#__POSTHOG_TOOLBAR__').should('exist') }) }) diff --git a/cypress/integration/trends.js b/cypress/e2e/trends.js similarity index 94% rename from cypress/integration/trends.js rename to cypress/e2e/trends.js index 3d04a25e301..b6c55c6d945 100644 --- a/cypress/integration/trends.js +++ b/cypress/e2e/trends.js @@ -1,5 +1,14 @@ import { urls } from 'scenes/urls' +function expandPropertiesList() { + cy.get('body').then(($body) => { + // sometimes the event list isn't expanded + if ($body.find('[data-attr="expand-list-event_properties"]')) { + cy.get('[data-attr="expand-list-event_properties"]').click() + } + }) +} + describe('Trends', () => { beforeEach(() => { cy.visit(urls.insightNew()) @@ -51,8 +60,10 @@ describe('Trends', () => { // Apply a property filter cy.get('[data-attr=show-prop-filter-0]').click() cy.get('[data-attr=property-select-toggle-0]').click() - cy.get('[data-attr="expand-list-event_properties"]').click() + + expandPropertiesList() cy.get('[data-attr=prop-filter-event_properties-1]').click({ force: true }) + cy.get('[data-attr=prop-val]').click({ force: true }) // cypress is odd and even though when a human clicks this the right dropdown opens // in the test that doesn't happen @@ -72,7 +83,7 @@ describe('Trends', () => { cy.get('[data-attr=trends-filters-add-filter-group]').click() cy.get('[data-attr=property-select-toggle-0]').click() cy.get('[data-attr=taxonomic-filter-searchfield]').click() - cy.get('[data-attr="expand-list-event_properties"]').click() + expandPropertiesList() cy.get('[data-attr=prop-filter-event_properties-1]').click({ force: true }) cy.get('[data-attr=prop-val]').click({ force: true }) // cypress is odd and even though when a human clicks this the right dropdown opens @@ -125,7 +136,7 @@ describe('Trends', () => { it('Apply property breakdown', () => { cy.get('[data-attr=add-breakdown-button]').click() - cy.get('[data-attr="expand-list-event_properties"]').click() + expandPropertiesList() cy.get('[data-attr=prop-filter-event_properties-1]').click({ force: true }) cy.get('[data-attr=trend-line-graph]').should('exist') }) @@ -142,7 +153,7 @@ describe('Trends', () => { cy.get('[data-attr=trends-filters-add-filter-group]').click() cy.get('[data-attr=property-select-toggle-0]').click() cy.get('[data-attr=taxonomic-filter-searchfield]').click() - cy.get('[data-attr="expand-list-event_properties"]').click() + expandPropertiesList() cy.get('[data-attr=prop-filter-event_properties-1]').click({ force: true }) cy.get('[data-attr=prop-val]').click({ force: true }) // cypress is odd and even though when a human clicks this the right dropdown opens diff --git a/cypress/plugins/index.js b/cypress/plugins/index.js deleted file mode 100644 index 47bb0227679..00000000000 --- a/cypress/plugins/index.js +++ /dev/null @@ -1,83 +0,0 @@ -const path = require('path') -const fs = require('fs') -const pixelmatch = require('pixelmatch') -const PNG = require('pngjs').PNG - -const downloadDirectory = path.join(__dirname, '..', 'downloads') - -const checkFileDownloaded = async (filename, timeout, delayMs = 10) => { - const start = Date.now() - const fullFileName = `${downloadDirectory}/${filename}` - - while (Date.now() - start < timeout) { - await new Promise((res) => setTimeout(res, delayMs)) - - if (fs.existsSync(fullFileName)) { - return fullFileName - } - } - return -} - -const webpackPreprocessor = require('@cypress/webpack-preprocessor') - -const { createEntry } = require('../../webpack.config') - -module.exports = (on, config) => { - const options = { - webpackOptions: createEntry('cypress'), - watchOptions: {}, - } - - on('file:preprocessor', webpackPreprocessor(options)) - try { - // eslint-disable-next-line @typescript-eslint/no-var-requires - require('cypress-terminal-report/src/installLogsPrinter')(on) - } catch (e) {} - - on('before:browser:launch', (browser, launchOptions) => { - if (browser.name === 'chrome') { - // https://www.ghacks.net/2013/10/06/list-useful-google-chrome-command-line-switches/ - // Compatibility with gh actions - launchOptions.args.push('--window-size=1280,720') - return launchOptions - } - }) - - on('task', { - compareToReferenceImage({ source, reference, diffThreshold = 0.01, ms = 10000 }) { - return checkFileDownloaded(source, ms).then((fileExists) => { - if (!fileExists) { - return undefined - } - - const imgSrc = PNG.sync.read(fs.readFileSync(`${downloadDirectory}/${source}`)) - const imgRef = PNG.sync.read(fs.readFileSync(path.join(__dirname, reference))) - const { width, height } = imgSrc - const imgDiff = new PNG({ width, height }) - - const numDiffPixels = pixelmatch(imgSrc.data, imgRef.data, imgDiff.data, width, height, { - threshold: 0.1, - }) - - const imgDiffFilename = `${downloadDirectory}/${source}.diff.png` - - fs.writeFileSync(imgDiffFilename, PNG.sync.write(imgDiff)) - - const percentageDiff = numDiffPixels / (width * height) - - if (percentageDiff > diffThreshold) { - throw new Error( - `Reference image is off by ${(percentageDiff * 100).toFixed( - 2 - )}% (${numDiffPixels}) pixels. See ${imgDiffFilename} for more info` - ) - } - - return true - }) - }, - }) - - return config -} diff --git a/cypress/support/index.js b/cypress/support/e2e.js similarity index 100% rename from cypress/support/index.js rename to cypress/support/e2e.js diff --git a/package.json b/package.json index 673bb66a23d..4123401f5e1 100644 --- a/package.json +++ b/package.json @@ -119,6 +119,7 @@ "@babel/plugin-transform-runtime": "^7.17.10", "@babel/preset-env": "^7.17.10", "@babel/preset-typescript": "^7.16.7", + "@cypress/webpack-preprocessor": "5.12.0", "@hot-loader/react-dom": "^16.13.0", "@storybook/addon-actions": "^6.4.19", "@storybook/addon-essentials": "^6.4.19", @@ -131,8 +132,11 @@ "@types/chart.js": "^2.9.34", "@types/chartjs-plugin-crosshair": "^1.1.1", "@types/clone": "^2.1.1", + "@types/cypress": "^1.1.3", "@types/d3": "^7.0.0", "@types/jest": "^26.0.15", + "@types/pixelmatch": "^5.2.4", + "@types/pngjs": "^6.0.1", "@types/query-selector-shadow-dom": "^1.0.0", "@types/react": "^16.14.2", "@types/react-dom": "^16.9.8", diff --git a/yarn.lock b/yarn.lock index 2d519cdb3d9..4e0203856b2 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2248,11 +2248,57 @@ exec-sh "^0.3.2" minimist "^1.2.0" +"@colors/colors@1.5.0": + version "1.5.0" + resolved "https://registry.yarnpkg.com/@colors/colors/-/colors-1.5.0.tgz#bb504579c1cae923e6576a4f5da43d25f97bdbd9" + integrity sha512-ooWCrlZP11i8GImSjTHYHLkvFDP48nS4+204nGb1RiX/WXYHmJA2III9/e2DWVabCESdW7hBAEzHRqUn9OUVvQ== + "@ctrl/tinycolor@^3.4.0": version "3.4.0" resolved "https://registry.yarnpkg.com/@ctrl/tinycolor/-/tinycolor-3.4.0.tgz#c3c5ae543c897caa9c2a68630bed355be5f9990f" integrity sha512-JZButFdZ1+/xAfpguQHoabIXkcqRRKpMrWKBkpEZZyxfY9C1DpADFB8PEqGSTeFr135SaTRfKqGKx5xSCLI7ZQ== +"@cypress/request@^2.88.10": + version "2.88.10" + resolved "https://registry.yarnpkg.com/@cypress/request/-/request-2.88.10.tgz#b66d76b07f860d3a4b8d7a0604d020c662752cce" + integrity sha512-Zp7F+R93N0yZyG34GutyTNr+okam7s/Fzc1+i3kcqOP8vk6OuajuE9qZJ6Rs+10/1JFtXFYMdyarnU1rZuJesg== + dependencies: + aws-sign2 "~0.7.0" + aws4 "^1.8.0" + caseless "~0.12.0" + combined-stream "~1.0.6" + extend "~3.0.2" + forever-agent "~0.6.1" + form-data "~2.3.2" + http-signature "~1.3.6" + is-typedarray "~1.0.0" + isstream "~0.1.2" + json-stringify-safe "~5.0.1" + mime-types "~2.1.19" + performance-now "^2.1.0" + qs "~6.5.2" + safe-buffer "^5.1.2" + tough-cookie "~2.5.0" + tunnel-agent "^0.6.0" + uuid "^8.3.2" + +"@cypress/webpack-preprocessor@5.12.0": + version "5.12.0" + resolved "https://registry.yarnpkg.com/@cypress/webpack-preprocessor/-/webpack-preprocessor-5.12.0.tgz#231f6c86423237e17eaf12ce6193d4b67290b852" + integrity sha512-D/eLKKlgx6c/307FaCmjZGjFA64G29aA8KcCy6WqpNK/bSnRdPquMW2plemIsT/B80TK2DDKzZX/H3FcS41ZDA== + dependencies: + bluebird "3.7.1" + debug "^4.3.2" + lodash "^4.17.20" + +"@cypress/xvfb@^1.2.4": + version "1.2.4" + resolved "https://registry.yarnpkg.com/@cypress/xvfb/-/xvfb-1.2.4.tgz#2daf42e8275b39f4aa53c14214e557bd14e7748a" + integrity sha512-skbBzPggOVYCbnGgV+0dmBdW/s77ZkAOXIC1knS8NagwDjBrNC1LuXtQJeiN6l+m7lzmHtaoUw/ctJKdqkG57Q== + dependencies: + debug "^3.1.0" + lodash.once "^4.1.1" + "@discoveryjs/json-ext@^0.5.0": version "0.5.2" resolved "https://registry.yarnpkg.com/@discoveryjs/json-ext/-/json-ext-0.5.2.tgz#8f03a22a04de437254e8ce8cc84ba39689288752" @@ -3985,6 +4031,13 @@ resolved "https://registry.yarnpkg.com/@types/css-font-loading-module/-/css-font-loading-module-0.0.7.tgz#2f98ede46acc0975de85c0b7b0ebe06041d24601" integrity sha512-nl09VhutdjINdWyXxHWN/w9zlNCfr60JUqJbd24YXUuCwgeL0TpFSdElCwb6cxfB6ybE19Gjj4g0jsgkXxKv1Q== +"@types/cypress@^1.1.3": + version "1.1.3" + resolved "https://registry.yarnpkg.com/@types/cypress/-/cypress-1.1.3.tgz#0a700c040d53e9e12b5af98e41d4a88c39f39b6a" + integrity sha512-OXe0Gw8LeCflkG1oPgFpyrYWJmEKqYncBsD/J0r17r0ETx/TnIGDNLwXt/pFYSYuYTpzcq1q3g62M9DrfsBL4g== + dependencies: + cypress "*" + "@types/d3-array@*": version "3.0.1" resolved "https://registry.yarnpkg.com/@types/d3-array/-/d3-array-3.0.1.tgz#0ff28ee7052a2e504cb951d17df7437c33d442d6" @@ -4369,6 +4422,11 @@ resolved "https://registry.yarnpkg.com/@types/node/-/node-14.17.11.tgz#82d266d657aec5ff01ca59f2ffaff1bb43f7bf0f" integrity sha512-n2OQ+0Bz6WEsUjrvcHD1xZ8K+Kgo4cn9/w94s1bJS690QMUWfJPW/m7CCb7gPkA1fcYwL2UpjXP/rq/Eo41m6w== +"@types/node@^14.14.31": + version "14.18.20" + resolved "https://registry.yarnpkg.com/@types/node/-/node-14.18.20.tgz#268f028b36eaf51181c3300252f605488c4f0650" + integrity sha512-Q8KKwm9YqEmUBRsqJ2GWJDtXltBDxTdC4m5vTdXBolu2PeQh8LX+f6BTwU+OuXPu37fLxoN6gidqBmnky36FXA== + "@types/normalize-package-data@^2.4.0": version "2.4.0" resolved "https://registry.yarnpkg.com/@types/normalize-package-data/-/normalize-package-data-2.4.0.tgz#e486d0d97396d79beedd0a6e33f4534ff6b4973e" @@ -4394,6 +4452,20 @@ resolved "https://registry.yarnpkg.com/@types/parse5/-/parse5-5.0.3.tgz#e7b5aebbac150f8b5fdd4a46e7f0bd8e65e19109" integrity sha512-kUNnecmtkunAoQ3CnjmMkzNU/gtxG8guhi+Fk2U/kOpIKjIMKnXGp4IJCgQJrXSgMsWYimYG4TGjz/UzbGEBTw== +"@types/pixelmatch@^5.2.4": + version "5.2.4" + resolved "https://registry.yarnpkg.com/@types/pixelmatch/-/pixelmatch-5.2.4.tgz#ca145cc5ede1388c71c68edf2d1f5190e5ddd0f6" + integrity sha512-HDaSHIAv9kwpMN7zlmwfTv6gax0PiporJOipcrGsVNF3Ba+kryOZc0Pio5pn6NhisgWr7TaajlPEKTbTAypIBQ== + dependencies: + "@types/node" "*" + +"@types/pngjs@^6.0.1": + version "6.0.1" + resolved "https://registry.yarnpkg.com/@types/pngjs/-/pngjs-6.0.1.tgz#c711ec3fbbf077fed274ecccaf85dd4673130072" + integrity sha512-J39njbdW1U/6YyVXvC9+1iflZghP8jgRf2ndYghdJb5xL49LYDB+1EuAxfbuJ2IBbWIL3AjHPQhgaTxT3YaYeg== + dependencies: + "@types/node" "*" + "@types/prettier@^2.0.0": version "2.1.5" resolved "https://registry.yarnpkg.com/@types/prettier/-/prettier-2.1.5.tgz#b6ab3bba29e16b821d84e09ecfaded462b816b00" @@ -4494,6 +4566,16 @@ dependencies: "@types/node" "*" +"@types/sinonjs__fake-timers@8.1.1": + version "8.1.1" + resolved "https://registry.yarnpkg.com/@types/sinonjs__fake-timers/-/sinonjs__fake-timers-8.1.1.tgz#b49c2c70150141a15e0fa7e79cf1f92a72934ce3" + integrity sha512-0kSuKjAS0TrGLJ0M/+8MaFkGsQhZpB6pxOmvS3K8FYI72K//YmdfoW9X2qPsAKh1mkwxGD5zib9s1FIFed6E8g== + +"@types/sizzle@^2.3.2": + version "2.3.3" + resolved "https://registry.yarnpkg.com/@types/sizzle/-/sizzle-2.3.3.tgz#ff5e2f1902969d305225a047c8a0fd5c915cebef" + integrity sha512-JYM8x9EGF163bEyhdJBpR2QX1R5naCJHC8ucJylJ3w9/CVBaskdQ8WqBf8MmQrd1kRvp/a4TS8HJ+bxzR7ZJYQ== + "@types/source-list-map@*": version "0.1.2" resolved "https://registry.yarnpkg.com/@types/source-list-map/-/source-list-map-0.1.2.tgz#0078836063ffaf17412349bba364087e0ac02ec9" @@ -4597,6 +4679,13 @@ dependencies: "@types/yargs-parser" "*" +"@types/yauzl@^2.9.1": + version "2.10.0" + resolved "https://registry.yarnpkg.com/@types/yauzl/-/yauzl-2.10.0.tgz#b3248295276cf8c6f153ebe6a9aba0c988cb2599" + integrity sha512-Cn6WYCm0tXv8p6k+A8PvbDG763EDpBoTzHdA+Q/MF6H3sapGjCm9NzoaJncJS9tUKSuCoDs9XHxYYsQDgxR6kw== + dependencies: + "@types/node" "*" + "@types/zxcvbn@^4.4.0": version "4.4.0" resolved "https://registry.yarnpkg.com/@types/zxcvbn/-/zxcvbn-4.4.0.tgz#fbc1d941cc6d9d37d18405c513ba6b294f89b609" @@ -5181,6 +5270,11 @@ aproba@^1.1.1: resolved "https://registry.yarnpkg.com/aproba/-/aproba-1.2.0.tgz#6802e6264efd18c790a1b0d517f0f2627bf2c94a" integrity sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw== +arch@^2.2.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/arch/-/arch-2.2.0.tgz#1bc47818f305764f23ab3306b0bfc086c5a29d11" + integrity sha512-Of/R0wqp83cgHozfIYLbBMnej79U/SVGOOyuB3VVFv1NRM/PSFMK12x9KVtiYzJqmnU5WR2qp0Z5rHb7sWGnFQ== + are-we-there-yet@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/are-we-there-yet/-/are-we-there-yet-2.0.0.tgz#372e0e7bd279d8e94c653aaa1f67200884bf3e1c" @@ -5379,6 +5473,11 @@ async-validator@^4.0.2: resolved "https://registry.yarnpkg.com/async-validator/-/async-validator-4.0.7.tgz#034a0fd2103a6b2ebf010da75183bec299247afe" integrity sha512-Pj2IR7u8hmUEDOwB++su6baaRi+QvsgajuFB9j95foM1N2gy5HM4z60hfusIO0fBPG5uLAEl6yCJr1jNSVugEQ== +async@^3.2.0: + version "3.2.4" + resolved "https://registry.yarnpkg.com/async/-/async-3.2.4.tgz#2d22e00f8cddeb5fde5dd33522b56d1cf569a81c" + integrity sha512-iAB+JbDEGXhyIUavoDl9WP/Jj106Kz9DEn1DPgYw5ruDn0e3Wgi3sKFm55sASdGBNOQB8F59d9qQ7deqrHA8wQ== + asynckit@^0.4.0: version "0.4.0" resolved "https://registry.yarnpkg.com/asynckit/-/asynckit-0.4.0.tgz#c79ed97f7f34cb8f2ba1bc9790bcc366474b4b79" @@ -5779,7 +5878,17 @@ bl@^4.1.0: inherits "^2.0.4" readable-stream "^3.4.0" -bluebird@^3.3.5, bluebird@^3.5.5: +blob-util@^2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/blob-util/-/blob-util-2.0.2.tgz#3b4e3c281111bb7f11128518006cdc60b403a1eb" + integrity sha512-T7JQa+zsXXEa6/8ZhHcQEW1UFfVM49Ts65uBkFL6fz2QmrElqmbajIDJvuA0tEhRe5eIjpV9ZF+0RfZR9voJFQ== + +bluebird@3.7.1: + version "3.7.1" + resolved "https://registry.yarnpkg.com/bluebird/-/bluebird-3.7.1.tgz#df70e302b471d7473489acf26a93d63b53f874de" + integrity sha512-DdmyoGCleJnkbp3nkbxTLJ18rjDsE4yCggEwKNXkeV123sPNfOCYeDoeuOY+F2FrSjO1YXcTU+dsy96KMy+gcg== + +bluebird@^3.3.5, bluebird@^3.5.5, bluebird@^3.7.2: version "3.7.2" resolved "https://registry.yarnpkg.com/bluebird/-/bluebird-3.7.2.tgz#9f229c15be272454ffa973ace0dbee79a1b0c36f" integrity sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg== @@ -5976,6 +6085,11 @@ bser@2.1.1: dependencies: node-int64 "^0.4.0" +buffer-crc32@~0.2.3: + version "0.2.13" + resolved "https://registry.yarnpkg.com/buffer-crc32/-/buffer-crc32-0.2.13.tgz#0d333e3f00eac50aa1454abd30ef8c2a5d9a7242" + integrity sha512-VO9Ht/+p3SN7SKWqcrgEzjGbRSJYTx+Q1pTQC0wrWqHx0vpJraQ6GtHx8tvcg1rlK1byhU5gccxgOgj7B0TDkQ== + buffer-from@^1.0.0: version "1.1.1" resolved "https://registry.yarnpkg.com/buffer-from/-/buffer-from-1.1.1.tgz#32713bc028f75c02fdb710d7c7bcec1f2c6070ef" @@ -5995,7 +6109,7 @@ buffer@^4.3.0: ieee754 "^1.1.4" isarray "^1.0.0" -buffer@^5.5.0: +buffer@^5.5.0, buffer@^5.6.0: version "5.7.1" resolved "https://registry.yarnpkg.com/buffer/-/buffer-5.7.1.tgz#ba62e7c13133053582197160851a8f648e99eed0" integrity sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ== @@ -6095,6 +6209,11 @@ cache-base@^1.0.1: union-value "^1.0.0" unset-value "^1.0.0" +cachedir@^2.3.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/cachedir/-/cachedir-2.3.0.tgz#0c75892a052198f0b21c7c1804d8331edfcae0e8" + integrity sha512-A+Fezp4zxnit6FanDmv9EqXNAi3vt9DWp51/71UEhXukb7QUuvtv9344h91dyAxuTLoSYJFU299qzR3tzwPAhw== + call-bind@^1.0.0, call-bind@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/call-bind/-/call-bind-1.0.2.tgz#b1d4e89e688119c3c9a903ad30abb2f6a919be3c" @@ -6300,6 +6419,11 @@ chartjs-plugin-crosshair@^1.2.0: resolved "https://registry.yarnpkg.com/chartjs-plugin-crosshair/-/chartjs-plugin-crosshair-1.2.0.tgz#54c8223ed40db4a5c380f17967fcf1a11cb2a284" integrity sha512-yohsbME+wT1ODBdErBzWnC6xUDcn2tLeWmGjGDTykjpiT7+FMgibffajxqaCVmdzselxNPirpt76vx33EewSSQ== +check-more-types@^2.24.0: + version "2.24.0" + resolved "https://registry.yarnpkg.com/check-more-types/-/check-more-types-2.24.0.tgz#1420ffb10fd444dcfc79b43891bbfffd32a84600" + integrity sha512-Pj779qHxV2tuapviy1bSZNEL1maXr13bPYpsvSDB68HlYcYuhlDrmGd63i0JHMCLKzc7rUSNIrpdJlhVlNwrxA== + "chokidar@>=2.0.0 <4.0.0", chokidar@^3.4.1: version "3.5.1" resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-3.5.1.tgz#ee9ce7bbebd2b79f49f304799d5468e31e14e68a" @@ -6442,6 +6566,15 @@ cli-table3@^0.6.1: optionalDependencies: colors "1.4.0" +cli-table3@~0.6.1: + version "0.6.2" + resolved "https://registry.yarnpkg.com/cli-table3/-/cli-table3-0.6.2.tgz#aaf5df9d8b5bf12634dc8b3040806a0c07120d2a" + integrity sha512-QyavHCaIC80cMivimWu4aWHilIpiDpfm3hGmqAmXVL1UsnbLuBSMd21hTX6VY4ZSDSM73ESLeF8TOYId3rBTbw== + dependencies: + string-width "^4.2.0" + optionalDependencies: + "@colors/colors" "1.5.0" + cli-truncate@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/cli-truncate/-/cli-truncate-2.1.0.tgz#c39e28bf05edcde5be3b98992a22deed5a2b93c7" @@ -6597,6 +6730,11 @@ colorette@^1.3.0: resolved "https://registry.yarnpkg.com/colorette/-/colorette-1.3.0.tgz#ff45d2f0edb244069d3b772adeb04fed38d0a0af" integrity sha512-ecORCqbSFP7Wm8Y6lyqMJjexBQqXSF7SSeaTyGGphogUjBlFP9m9o08wy86HL2uB7fMTxtOUzLMk7ogKcxMg1w== +colorette@^2.0.16: + version "2.0.17" + resolved "https://registry.yarnpkg.com/colorette/-/colorette-2.0.17.tgz#5dd4c0d15e2984b7433cb4a9f2ead45063b80c47" + integrity sha512-hJo+3Bkn0NCHybn9Tu35fIeoOKGOk5OCC32y4Hz2It+qlCO2Q3DeQ1hRn/tDDMQKRYUEzqsl7jbF6dYKjlE60g== + colors@1.4.0: version "1.4.0" resolved "https://registry.yarnpkg.com/colors/-/colors-1.4.0.tgz#c50491479d4c1bdaed2c9ced32cf7c7dc2360f78" @@ -6624,6 +6762,11 @@ commander@^4.1.1: resolved "https://registry.yarnpkg.com/commander/-/commander-4.1.1.tgz#9fd602bd936294e9e9ef46a3f4d6964044b18068" integrity sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA== +commander@^5.1.0: + version "5.1.0" + resolved "https://registry.yarnpkg.com/commander/-/commander-5.1.0.tgz#46abbd1652f8e059bddaef99bbdcb2ad9cf179ae" + integrity sha512-P0CysNDQ7rtVw4QIQtm+MRxV66vKFSvlsQvGYXZWR3qFU0jlMKHZZZgw8e+8DSah4UDKMqnknRDQz+xuQXQ/Zg== + commander@^6.0.0: version "6.2.0" resolved "https://registry.yarnpkg.com/commander/-/commander-6.2.0.tgz#b990bfb8ac030aedc6d11bc04d1488ffef56db75" @@ -6644,6 +6787,11 @@ common-path-prefix@^3.0.0: resolved "https://registry.yarnpkg.com/common-path-prefix/-/common-path-prefix-3.0.0.tgz#7d007a7e07c58c4b4d5f433131a19141b29f11e0" integrity sha512-QE33hToZseCH3jS0qN96O/bSh3kaw/h+Tq7ngyY9eWDUnTlTNUyqfqvCXioLe5Na5jFsL78ra/wuBU4iuEgd4w== +common-tags@^1.8.0: + version "1.8.2" + resolved "https://registry.yarnpkg.com/common-tags/-/common-tags-1.8.2.tgz#94ebb3c076d26032745fd54face7f688ef5ac9c6" + integrity sha512-gk/Z852D2Wtb//0I+kRFNKKE9dIIVirjoqPoA1wJU+XePVXZfGeBpk45+A1rKO4Q43prqWBNY/MiIeRLbPWUaA== + commondir@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/commondir/-/commondir-1.0.1.tgz#ddd800da0c66127393cca5950ea968a3aaf1253b" @@ -7200,6 +7348,54 @@ cyclist@^1.0.1: resolved "https://registry.yarnpkg.com/cyclist/-/cyclist-1.0.1.tgz#596e9698fd0c80e12038c2b82d6eb1b35b6224d9" integrity sha1-WW6WmP0MgOEgOMK4LW6xs1tiJNk= +cypress@*: + version "10.0.3" + resolved "https://registry.yarnpkg.com/cypress/-/cypress-10.0.3.tgz#889b4bef863b7d1ef1b608b85b964394ad350c5f" + integrity sha512-8C82XTybsEmJC9POYSNITGUhMLCRwB9LadP0x33H+52QVoBjhsWvIzrI+ybCe0+TyxaF0D5/9IL2kSTgjqCB9A== + dependencies: + "@cypress/request" "^2.88.10" + "@cypress/xvfb" "^1.2.4" + "@types/node" "^14.14.31" + "@types/sinonjs__fake-timers" "8.1.1" + "@types/sizzle" "^2.3.2" + arch "^2.2.0" + blob-util "^2.0.2" + bluebird "^3.7.2" + buffer "^5.6.0" + cachedir "^2.3.0" + chalk "^4.1.0" + check-more-types "^2.24.0" + cli-cursor "^3.1.0" + cli-table3 "~0.6.1" + commander "^5.1.0" + common-tags "^1.8.0" + dayjs "^1.10.4" + debug "^4.3.2" + enquirer "^2.3.6" + eventemitter2 "^6.4.3" + execa "4.1.0" + executable "^4.1.1" + extract-zip "2.0.1" + figures "^3.2.0" + fs-extra "^9.1.0" + getos "^3.2.1" + is-ci "^3.0.0" + is-installed-globally "~0.4.0" + lazy-ass "^1.6.0" + listr2 "^3.8.3" + lodash "^4.17.21" + log-symbols "^4.0.0" + minimist "^1.2.6" + ospath "^1.2.2" + pretty-bytes "^5.6.0" + proxy-from-env "1.0.0" + request-progress "^3.0.0" + semver "^7.3.2" + supports-color "^8.1.1" + tmp "~0.2.1" + untildify "^4.0.0" + yauzl "^2.10.0" + d3-array@1, d3-array@^1.1.1, d3-array@^1.2.0: version "1.2.4" resolved "https://registry.yarnpkg.com/d3-array/-/d3-array-1.2.4.tgz#635ce4d5eea759f6f605863dbcfc30edc737f71f" @@ -7492,6 +7688,11 @@ dayjs@1.x, dayjs@^1.10.7: resolved "https://registry.yarnpkg.com/dayjs/-/dayjs-1.10.7.tgz#2cf5f91add28116748440866a0a1d26f3a6ce468" integrity sha512-P6twpd70BcPK34K26uJ1KT3wlhpuOAPoMwJzpsIWUxHZ7wpmbdZL/hQqBDfz7hGurYSa5PhzdhDHtt319hL3ig== +dayjs@^1.10.4: + version "1.11.3" + resolved "https://registry.yarnpkg.com/dayjs/-/dayjs-1.11.3.tgz#4754eb694a624057b9ad2224b67b15d552589258" + integrity sha512-xxwlswWOlGhzgQ4TKzASQkUhqERI3egRNqgV4ScR8wlANA/A9tZ7miXa44vTTKEq5l7vWoL5G57bG3zA+Kow0A== + debug@2.6.9, debug@^2.2.0, debug@^2.3.3, debug@^2.6.0: version "2.6.9" resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.9.tgz#5d128515df134ff327e90a4c93f4e077a536341f" @@ -7499,7 +7700,7 @@ debug@2.6.9, debug@^2.2.0, debug@^2.3.3, debug@^2.6.0: dependencies: ms "2.0.0" -debug@^3.0.0, debug@^3.2.6: +debug@^3.0.0, debug@^3.1.0, debug@^3.2.6: version "3.2.7" resolved "https://registry.yarnpkg.com/debug/-/debug-3.2.7.tgz#72580b7e9145fb39b6676f9c5e5fb100b934179a" integrity sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ== @@ -8499,6 +8700,11 @@ etag@~1.8.1: resolved "https://registry.yarnpkg.com/etag/-/etag-1.8.1.tgz#41ae2eeb65efa62268aebfea83ac7d79299b0887" integrity sha1-Qa4u62XvpiJorr/qg6x9eSmbCIc= +eventemitter2@^6.4.3: + version "6.4.5" + resolved "https://registry.yarnpkg.com/eventemitter2/-/eventemitter2-6.4.5.tgz#97380f758ae24ac15df8353e0cc27f8b95644655" + integrity sha512-bXE7Dyc1i6oQElDG0jMRZJrRAn9QR2xyyFGmBdZleNmyQX0FqGYmhZIrIrpPfm/w//LTo4tVQGOGQcGCb5q9uw== + events@^3.0.0, events@^3.3.0: version "3.3.0" resolved "https://registry.yarnpkg.com/events/-/events-3.3.0.tgz#31a95ad0a924e2d2c419a813aeb2c4e878ea7400" @@ -8517,20 +8723,7 @@ exec-sh@^0.3.2: resolved "https://registry.yarnpkg.com/exec-sh/-/exec-sh-0.3.4.tgz#3a018ceb526cc6f6df2bb504b2bfe8e3a4934ec5" integrity sha512-sEFIkc61v75sWeOe72qyrqg2Qg0OuLESziUDk/O/z2qgS15y2gWVFrI6f2Qn/qw/0/NCfCEsmNA4zOjkwEZT1A== -execa@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/execa/-/execa-1.0.0.tgz#c6236a5bb4df6d6f15e88e7f017798216749ddd8" - integrity sha512-adbxcyWV46qiHyvSp50TKt05tB4tK3HcmF7/nxfAdhnox83seTDbwnaqKO4sXRy7roHAIFqJP/Rw/AuEbX61LA== - dependencies: - cross-spawn "^6.0.0" - get-stream "^4.0.0" - is-stream "^1.1.0" - npm-run-path "^2.0.0" - p-finally "^1.0.0" - signal-exit "^3.0.0" - strip-eof "^1.0.0" - -execa@^4.0.0, execa@^4.0.3: +execa@4.1.0, execa@^4.0.0, execa@^4.0.3: version "4.1.0" resolved "https://registry.yarnpkg.com/execa/-/execa-4.1.0.tgz#4e5491ad1572f2f17a77d388c6c857135b22847a" integrity sha512-j5W0//W7f8UxAn8hXVnwG8tLwdiUy4FJLcSupCg6maBYZDpyBvTApK7KyuI4bKj8KOh1r2YH+6ucuYtJv1bTZA== @@ -8545,6 +8738,19 @@ execa@^4.0.0, execa@^4.0.3: signal-exit "^3.0.2" strip-final-newline "^2.0.0" +execa@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/execa/-/execa-1.0.0.tgz#c6236a5bb4df6d6f15e88e7f017798216749ddd8" + integrity sha512-adbxcyWV46qiHyvSp50TKt05tB4tK3HcmF7/nxfAdhnox83seTDbwnaqKO4sXRy7roHAIFqJP/Rw/AuEbX61LA== + dependencies: + cross-spawn "^6.0.0" + get-stream "^4.0.0" + is-stream "^1.1.0" + npm-run-path "^2.0.0" + p-finally "^1.0.0" + signal-exit "^3.0.0" + strip-eof "^1.0.0" + execa@^5.0.0: version "5.0.0" resolved "https://registry.yarnpkg.com/execa/-/execa-5.0.0.tgz#4029b0007998a841fbd1032e5f4de86a3c1e3376" @@ -8560,6 +8766,13 @@ execa@^5.0.0: signal-exit "^3.0.3" strip-final-newline "^2.0.0" +executable@^4.1.1: + version "4.1.1" + resolved "https://registry.yarnpkg.com/executable/-/executable-4.1.1.tgz#41532bff361d3e57af4d763b70582db18f5d133c" + integrity sha512-8iA79xD3uAch729dUG8xaaBBFGaEa0wdD2VkYLFHwlqosEj/jT66AzcreRDSgV7ehnNLBW2WR5jIXwGKjVdTLg== + dependencies: + pify "^2.2.0" + exit@^0.1.2: version "0.1.2" resolved "https://registry.yarnpkg.com/exit/-/exit-0.1.2.tgz#0632638f8d877cc82107d30a0fff1a17cba1cd0c" @@ -8674,6 +8887,17 @@ extglob@^2.0.4: snapdragon "^0.8.1" to-regex "^3.0.1" +extract-zip@2.0.1: + 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: version "1.3.0" resolved "https://registry.yarnpkg.com/extsprintf/-/extsprintf-1.3.0.tgz#96918440e3041a7a414f8c52e3c574eb3c3e1e05" @@ -8779,6 +9003,13 @@ fb-watchman@^2.0.0: dependencies: bser "2.1.1" +fd-slicer@~1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/fd-slicer/-/fd-slicer-1.1.0.tgz#25c7c89cb1f9077f8891bbe61d8f390eae256f1e" + integrity sha512-cE1qsB/VwyQozZ+q1dGxR8LBYNZeofhEdUNGSMbQD3Gw2lAzX9Zb3uIU6Ebc/Fmyjo9AWWfnn0AUCHqtevs/8g== + dependencies: + pend "~1.2.0" + fflate@^0.4.1, fflate@^0.4.4: version "0.4.8" resolved "https://registry.yarnpkg.com/fflate/-/fflate-0.4.8.tgz#f90b82aefbd8ac174213abb338bd7ef848f0f5ae" @@ -9054,7 +9285,7 @@ fs-extra@^10.0.0: jsonfile "^6.0.1" universalify "^2.0.0" -fs-extra@^9.0.0, fs-extra@^9.0.1: +fs-extra@^9.0.0, fs-extra@^9.0.1, fs-extra@^9.1.0: version "9.1.0" resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-9.1.0.tgz#5954460c764a8da2094ba3554bf839e6b9a7c86d" integrity sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ== @@ -9190,7 +9421,7 @@ get-stream@^4.0.0: dependencies: pump "^3.0.0" -get-stream@^5.0.0: +get-stream@^5.0.0, get-stream@^5.1.0: version "5.2.0" resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-5.2.0.tgz#4966a1795ee5ace65e706c4b7beb71257d6e22d3" integrity sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA== @@ -9215,6 +9446,13 @@ get-value@^2.0.3, get-value@^2.0.6: resolved "https://registry.yarnpkg.com/get-value/-/get-value-2.0.6.tgz#dc15ca1c672387ca76bd37ac0a395ba2042a2c28" integrity sha1-3BXKHGcjh8p2vTesCjlbogQqLCg= +getos@^3.2.1: + version "3.2.1" + resolved "https://registry.yarnpkg.com/getos/-/getos-3.2.1.tgz#0134d1f4e00eb46144c5a9c0ac4dc087cbb27dc5" + integrity sha512-U56CfOK17OKgTVqozZjUKNdkfEv6jk5WISBJ8SHoagjE6L69zOwl3Z+O8myjY9MEW3i2HPWQBt/LTbCgcC973Q== + dependencies: + async "^3.2.0" + getpass@^0.1.1: version "0.1.7" resolved "https://registry.yarnpkg.com/getpass/-/getpass-0.1.7.tgz#5eff8e3e684d569ae4cb2b1282604e8ba62149fa" @@ -9285,6 +9523,13 @@ glob@^7.1.1, glob@^7.1.2, glob@^7.1.3, glob@^7.1.4, glob@^7.1.6: once "^1.3.0" path-is-absolute "^1.0.0" +global-dirs@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/global-dirs/-/global-dirs-3.0.0.tgz#70a76fe84ea315ab37b1f5576cbde7d48ef72686" + integrity sha512-v8ho2DS5RiCjftj1nD9NmnfaOzTdud7RRnVd9kFNOjqZbISlx5DQ+OrTkywgd0dIt7oFCvKetZSHoHcP3sDdiA== + dependencies: + ini "2.0.0" + global@^4.4.0: version "4.4.0" resolved "https://registry.yarnpkg.com/global/-/global-4.4.0.tgz#3e7b105179006a323ed71aafca3e9c57a5cc6406" @@ -9766,6 +10011,15 @@ http-signature@~1.2.0: jsprim "^1.2.2" sshpk "^1.7.0" +http-signature@~1.3.6: + version "1.3.6" + resolved "https://registry.yarnpkg.com/http-signature/-/http-signature-1.3.6.tgz#cb6fbfdf86d1c974f343be94e87f7fc128662cf9" + integrity sha512-3adrsD6zqo4GsTqtO7FyrejHNv+NgiIfAfv68+jVlFmSr9OGy7zrxONceFRLKvnnZA5jbxQBX1u9PpB6Wi32Gw== + dependencies: + assert-plus "^1.0.0" + jsprim "^2.0.2" + sshpk "^1.14.1" + https-browserify@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/https-browserify/-/https-browserify-1.0.0.tgz#ec06c10e0a34c0f2faf199f7fd7fc78fffd03c73" @@ -9926,6 +10180,11 @@ inherits@2.0.3: resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.3.tgz#633c2c83e3da42a502f52466022480f4208261de" integrity sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4= +ini@2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/ini/-/ini-2.0.0.tgz#e5fd556ecdd5726be978fa1001862eacb0a94bc5" + integrity sha512-7PnF4oN3CvZF23ADhA5wRaYEQpJ8qygSkbtTXWBeXWXmEVRXK+1ITciHWwHhsjv1TmW0MgacIv6hEi5pX5NQdA== + inline-style-parser@0.1.1: version "0.1.1" resolved "https://registry.yarnpkg.com/inline-style-parser/-/inline-style-parser-0.1.1.tgz#ec8a3b429274e9c0a1f1c4ffa9453a7fef72cea1" @@ -10264,6 +10523,14 @@ is-hexadecimal@^1.0.0: resolved "https://registry.yarnpkg.com/is-hexadecimal/-/is-hexadecimal-1.0.4.tgz#cc35c97588da4bd49a8eedd6bc4082d44dcb23a7" integrity sha512-gyPJuv83bHMpocVYoqof5VDiZveEoGoFL8m3BXNb2VW8Xs+rz9kqO8LOQ5DH6EsuvilT1ApazU0pyl+ytbPtlw== +is-installed-globally@~0.4.0: + version "0.4.0" + resolved "https://registry.yarnpkg.com/is-installed-globally/-/is-installed-globally-0.4.0.tgz#9a0fd407949c30f86eb6959ef1b7994ed0b7b520" + integrity sha512-iwGqO3J21aaSkC7jWnHP/difazwS7SFeIqxv6wEtLU8Y5KlzFTjyqcSIT0d8s4+dDhKytsk9PJZ2BkS5eZwQRQ== + dependencies: + global-dirs "^3.0.0" + is-path-inside "^3.0.2" + is-interactive@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/is-interactive/-/is-interactive-1.0.0.tgz#cea6e6ae5c870a7b0a0004070b7b587e0252912e" @@ -10316,6 +10583,11 @@ is-object@^1.0.1: resolved "https://registry.yarnpkg.com/is-object/-/is-object-1.0.2.tgz#a56552e1c665c9e950b4a025461da87e72f86fcf" integrity sha512-2rRIahhZr2UWb45fIOuvZGpFtz0TyOZLf32KxBbSoUCeZR495zCKlWUKKUByk3geS2eAs7ZAABt0Y/Rx0GiQGA== +is-path-inside@^3.0.2: + version "3.0.3" + resolved "https://registry.yarnpkg.com/is-path-inside/-/is-path-inside-3.0.3.tgz#d231362e53a07ff2b0e0ea7fed049161ffd16283" + integrity sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ== + is-plain-obj@^2.0.0: version "2.1.0" resolved "https://registry.yarnpkg.com/is-plain-obj/-/is-plain-obj-2.1.0.tgz#45e42e37fccf1f40da8e5f76ee21515840c09287" @@ -11304,6 +11576,11 @@ klona@^2.0.4: resolved "https://registry.yarnpkg.com/klona/-/klona-2.0.4.tgz#7bb1e3affb0cb8624547ef7e8f6708ea2e39dfc0" integrity sha512-ZRbnvdg/NxqzC7L9Uyqzf4psi1OM4Cuc+sJAkQPjO6XkQIJTNbfK2Rsmbw8fx1p2mkZdp2FZYo2+LwXYY/uwIA== +lazy-ass@^1.6.0: + version "1.6.0" + resolved "https://registry.yarnpkg.com/lazy-ass/-/lazy-ass-1.6.0.tgz#7999655e8646c17f089fdd187d150d3324d54513" + integrity sha512-cc8oEVoctTvsFZ/Oje/kGnHbpWHYBe8IAJe4C0QNc3t8uM/0Y8+erSz/7Y1ALuXTEZTMvxXwO6YbX1ey3ujiZw== + lazy-universal-dotenv@^3.0.1: version "3.0.1" resolved "https://registry.yarnpkg.com/lazy-universal-dotenv/-/lazy-universal-dotenv-3.0.1.tgz#a6c8938414bca426ab8c9463940da451a911db38" @@ -11417,6 +11694,20 @@ listr2@^2.6.0: rxjs "^6.6.2" through "^2.3.8" +listr2@^3.8.3: + version "3.14.0" + resolved "https://registry.yarnpkg.com/listr2/-/listr2-3.14.0.tgz#23101cc62e1375fd5836b248276d1d2b51fdbe9e" + integrity sha512-TyWI8G99GX9GjE54cJ+RrNMcIFBfwMPxc3XTFiAYGN4s10hWROGtOg7+O6u6LE3mNkyld7RSLE6nrKBvTfcs3g== + dependencies: + cli-truncate "^2.1.0" + colorette "^2.0.16" + log-update "^4.0.0" + p-map "^4.0.0" + rfdc "^1.3.0" + rxjs "^7.5.1" + through "^2.3.8" + wrap-ansi "^7.0.0" + loader-runner@^2.4.0: version "2.4.0" resolved "https://registry.yarnpkg.com/loader-runner/-/loader-runner-2.4.0.tgz#ed47066bfe534d7e84c4c7b9998c2a75607d9357" @@ -11497,6 +11788,11 @@ lodash.memoize@^4.1.2: resolved "https://registry.yarnpkg.com/lodash.memoize/-/lodash.memoize-4.1.2.tgz#bcc6c49a42a2840ed997f323eada5ecd182e0bfe" integrity sha1-vMbEmkKihA7Zl/Mj6tpezRguC/4= +lodash.once@^4.1.1: + version "4.1.1" + resolved "https://registry.yarnpkg.com/lodash.once/-/lodash.once-4.1.1.tgz#0dd3971213c7c56df880977d504c88fb471a97ac" + integrity sha512-Sb487aTOCr9drQVL8pIxOzVhafOjZN9UU54hiN8PU3uAiSV7lx1yYNpbNmex2PK6dSJoNTSJUUswT651yww3Mg== + lodash.set@^4.3.2: version "4.3.2" resolved "https://registry.yarnpkg.com/lodash.set/-/lodash.set-4.3.2.tgz#d8757b1da807dde24816b0d6a84bea1a76230b23" @@ -11927,7 +12223,7 @@ minimatch@^3.0.2, minimatch@^3.0.4: dependencies: brace-expansion "^1.1.7" -minimist@^1.1.1, minimist@^1.2.0, minimist@^1.2.5: +minimist@^1.1.1, minimist@^1.2.0, minimist@^1.2.5, minimist@^1.2.6: version "1.2.6" resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.6.tgz#8637a5b759ea0d6e98702cfb3a9283323c93af44" integrity sha512-Jsjnk4bw3YJqYzbdyBiNsPWHPfO++UGG749Cxs6peCu5Xg4nrena6OVxOYxrQTqww0Jmwt+Ref8rggumkTLz9Q== @@ -12533,6 +12829,11 @@ os-tmpdir@~1.0.2: resolved "https://registry.yarnpkg.com/os-tmpdir/-/os-tmpdir-1.0.2.tgz#bbe67406c79aa85c5cfec766fe5734555dfa1274" integrity sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ= +ospath@^1.2.2: + version "1.2.2" + resolved "https://registry.yarnpkg.com/ospath/-/ospath-1.2.2.tgz#1276639774a3f8ef2572f7fe4280e0ea4550c07b" + integrity sha512-o6E5qJV5zkAbIDNhGSIlyOhScKXgQrSRMilfph0clDfM0nEnBOlKlH4sWDmG95BW/CvwNz0vmm7dJVtU2KlMiA== + outvariant@^1.2.0: version "1.2.1" resolved "https://registry.yarnpkg.com/outvariant/-/outvariant-1.2.1.tgz#e630f6cdc1dbf398ed857e36f219de4a005ccd35" @@ -12816,6 +13117,11 @@ pbkdf2@^3.0.3: safe-buffer "^5.0.1" sha.js "^2.4.8" +pend@~1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/pend/-/pend-1.2.0.tgz#7a57eb550a6783f9115331fcf4663d5c8e007a50" + integrity sha512-F3asv42UuXchdzt+xXqfW1OGlVBe+mxa2mqI0pg5yAHZPvFmY3Y6drSf/GQ1A86WgWEN9Kzh/WrgKa6iGcHXLg== + performance-now@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/performance-now/-/performance-now-2.1.0.tgz#6309f4e0e5fa913ec1c69307ae364b4b377c9e7b" @@ -12836,6 +13142,11 @@ picomatch@^2.2.3, picomatch@^2.3.0: resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.3.0.tgz#f1f061de8f6a4bf022892e2d128234fb98302972" integrity sha512-lY1Q/PiJGC2zOv/z391WOTD+Z02bCgsFfvxoXXf6h7kv9o+WmsmzYqrAwY63sNgOxE4xEdq0WyUnXfKeBrSvYw== +pify@^2.2.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/pify/-/pify-2.3.0.tgz#ed141a6ac043a849ea588498e7dca8b15330e90c" + integrity sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog== + pify@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/pify/-/pify-3.0.0.tgz#e5a4acd2c101fdf3d9a4d07f0dbc4db49dd28176" @@ -13312,6 +13623,11 @@ prettier@^2.5.1: resolved "https://registry.yarnpkg.com/prettier/-/prettier-2.6.0.tgz#12f8f504c4d8ddb76475f441337542fa799207d4" integrity sha512-m2FgJibYrBGGgQXNzfd0PuDGShJgRavjUoRCw1mZERIWVSXF0iLzLm+aOqTAbLnC3n6JzUhAA8uZnFVghHJ86A== +pretty-bytes@^5.6.0: + version "5.6.0" + resolved "https://registry.yarnpkg.com/pretty-bytes/-/pretty-bytes-5.6.0.tgz#356256f643804773c82f64723fe78c92c62beaeb" + integrity sha512-FFw039TmrBqFK8ma/7OL3sDz/VytdtJr044/QUJtH0wK9lb9jLq9tJyIxUwtQJHwar2BqtiA4iCWSwo9JLkzFg== + pretty-error@^2.1.1: version "2.1.2" resolved "https://registry.yarnpkg.com/pretty-error/-/pretty-error-2.1.2.tgz#be89f82d81b1c86ec8fdfbc385045882727f93b6" @@ -13451,6 +13767,11 @@ proxy-addr@~2.0.5: forwarded "~0.1.2" ipaddr.js "1.9.1" +proxy-from-env@1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/proxy-from-env/-/proxy-from-env-1.0.0.tgz#33c50398f70ea7eb96d21f7b817630a55791c7ee" + integrity sha512-F2JHgJQ1iqwnHDcQjVBsq3n/uoaFL+iPW/eAeL7kVxy/2RrWaN4WroKjjvbsoRtv0ftelNyC01bjRhn/bhcf4A== + prr@~1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/prr/-/prr-1.0.1.tgz#d3fc114ba06995a45ec6893f484ceb1d78f5f476" @@ -14666,6 +14987,13 @@ replace-ext@1.0.0: resolved "https://registry.yarnpkg.com/replace-ext/-/replace-ext-1.0.0.tgz#de63128373fcbf7c3ccfa4de5a480c45a67958eb" integrity sha1-3mMSg3P8v3w8z6TeWkgMRaZ5WOs= +request-progress@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/request-progress/-/request-progress-3.0.0.tgz#4ca754081c7fec63f505e4faa825aa06cd669dbe" + integrity sha512-MnWzEHHaxHO2iWiQuHrUPBi/1WeBf5PkxQqNyNvLl9VAYSdXkP8tQ3pBSeCPD+yw0v0Aq1zosWLz0BdeXpWwZg== + dependencies: + throttleit "^1.0.0" + request-promise-core@1.1.4: version "1.1.4" resolved "https://registry.yarnpkg.com/request-promise-core/-/request-promise-core-1.1.4.tgz#3eedd4223208d419867b78ce815167d10593a22f" @@ -14786,6 +15114,11 @@ reusify@^1.0.4: resolved "https://registry.yarnpkg.com/reusify/-/reusify-1.0.4.tgz#90da382b1e126efc02146e90845a88db12925d76" integrity sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw== +rfdc@^1.3.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/rfdc/-/rfdc-1.3.0.tgz#d0b7c441ab2720d05dc4cf26e01c89631d9da08b" + integrity sha512-V2hovdzFbOi77/WajaSMXk2OLm+xNIeQdMMuB7icj7bk6zi2F8GGAxigcnDFpJHbNyNcgyJDiP+8nOrY5cZGrA== + rgb-regex@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/rgb-regex/-/rgb-regex-1.0.1.tgz#c0e0d6882df0e23be254a475e8edd41915feaeb1" @@ -14915,6 +15248,13 @@ rxjs@^7.2.0: dependencies: tslib "~2.1.0" +rxjs@^7.5.1: + version "7.5.5" + resolved "https://registry.yarnpkg.com/rxjs/-/rxjs-7.5.5.tgz#2ebad89af0f560f460ad5cc4213219e1f7dd4e9f" + integrity sha512-sy+H0pQofO95VDmFLzyaw9xNJU4KTRSwQIGM6+iG3SypAtCiLDzpeG8sJrNCWn2Up9km+KhkvTdbkrdy+yzZdw== + dependencies: + tslib "^2.1.0" + safe-buffer@5.1.1: version "5.1.1" resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.1.tgz#893312af69b2123def71f57889001671eeb2c853" @@ -15445,6 +15785,21 @@ sprintf-js@~1.0.2: resolved "https://registry.yarnpkg.com/sprintf-js/-/sprintf-js-1.0.3.tgz#04e6926f662895354f3dd015203633b857297e2c" integrity sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw= +sshpk@^1.14.1: + version "1.17.0" + resolved "https://registry.yarnpkg.com/sshpk/-/sshpk-1.17.0.tgz#578082d92d4fe612b13007496e543fa0fbcbe4c5" + integrity sha512-/9HIEs1ZXGhSPE8X6Ccm7Nam1z8KcoCqPdI7ecm1N33EzAetWahvQWVqLZtaZQ+IDKX4IyA2o0gBzqIMkAagHQ== + dependencies: + asn1 "~0.2.3" + assert-plus "^1.0.0" + bcrypt-pbkdf "^1.0.0" + dashdash "^1.12.0" + ecc-jsbn "~0.1.1" + getpass "^0.1.1" + jsbn "~0.1.0" + safer-buffer "^2.0.2" + tweetnacl "~0.14.0" + sshpk@^1.7.0: version "1.16.1" resolved "https://registry.yarnpkg.com/sshpk/-/sshpk-1.16.1.tgz#fb661c0bef29b39db40769ee39fa70093d6f6877" @@ -15849,7 +16204,7 @@ supports-color@^7.0.0, supports-color@^7.1.0: dependencies: has-flag "^4.0.0" -supports-color@^8.0.0: +supports-color@^8.0.0, supports-color@^8.1.1: version "8.1.1" resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-8.1.1.tgz#cd6fc17e28500cff56c1b86c0a7fd4a54a73005c" integrity sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q== @@ -16034,6 +16389,11 @@ throttle-debounce@^3.0.1: resolved "https://registry.yarnpkg.com/throttle-debounce/-/throttle-debounce-3.0.1.tgz#32f94d84dfa894f786c9a1f290e7a645b6a19abb" integrity sha512-dTEWWNu6JmeVXY0ZYoPuH5cRIwc0MeGbJwah9KUNYSJwommQpCzTySTpEe8Gs1J23aeWEuAobe4Ag7EHVt/LOg== +throttleit@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/throttleit/-/throttleit-1.0.0.tgz#9e785836daf46743145a5984b6268d828528ac6c" + integrity sha1-nnhYNtr0Z0MUWlmEtiaNgoUorGw= + through2@^2.0.0: version "2.0.5" resolved "https://registry.yarnpkg.com/through2/-/through2-2.0.5.tgz#01c1e39eb31d07cb7d03a96a70823260b23132cd" @@ -16081,6 +16441,13 @@ tmp@^0.0.33: dependencies: os-tmpdir "~1.0.2" +tmp@~0.2.1: + version "0.2.1" + resolved "https://registry.yarnpkg.com/tmp/-/tmp-0.2.1.tgz#8457fc3037dcf4719c251367a1af6500ee1ccf14" + integrity sha512-76SUhtfqR2Ijn+xllcI5P1oyannHNHByD80W1q447gU3mp9G9PSpGdWmjUOHRDPiHYacIk66W7ubDTuPF3BEtQ== + dependencies: + rimraf "^3.0.0" + tmpl@1.0.x: version "1.0.5" resolved "https://registry.yarnpkg.com/tmpl/-/tmpl-1.0.5.tgz#8683e0b902bb9c20c4f726e3c0b69f36518c07cc" @@ -16234,6 +16601,11 @@ tslib@^2.0.1, tslib@^2.3.0: resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.3.1.tgz#e8a335add5ceae51aa261d32a490158ef042ef01" integrity sha512-77EbyPPpMz+FRFRuAFlWMtmgUWGe9UOG2Z25NqCwiIjRhOf5iKGuzSe5P2w1laq+FkRy4p+PCuVkJSGkzTEKVw== +tslib@^2.1.0: + version "2.4.0" + resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.4.0.tgz#7cecaa7f073ce680a05847aa77be941098f36dc3" + integrity sha512-d6xOpEDfsi2CZVlPQzGeux8XMwLT9hssAsaPYExaQMuYskwb+x1x7J371tWlbBdWHroy99KnVB6qIkUbs5X3UQ== + tslib@~2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.1.0.tgz#da60860f1c2ecaa5703ab7d39bc05b6bf988b97a" @@ -16555,6 +16927,11 @@ unset-value@^1.0.0: has-value "^0.3.1" isobject "^3.0.0" +untildify@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/untildify/-/untildify-4.0.0.tgz#2bc947b953652487e4600949fb091e3ae8cd919b" + integrity sha512-KK8xQ1mkzZeg9inewmFVDNkg3l5LUhoq9kN6iWYB/CC9YMG8HA+c1Q8HwDe6dEX7kErrEVNVBO3fWsVq5iDgtw== + upath@^1.1.1: version "1.2.0" resolved "https://registry.yarnpkg.com/upath/-/upath-1.2.0.tgz#8f66dbcd55a883acdae4408af8b035a5044c1894" @@ -16702,7 +17079,7 @@ uuid@^3.3.2: resolved "https://registry.yarnpkg.com/uuid/-/uuid-3.4.0.tgz#b23e4358afa8a202fe7a100af1f5f883f02007ee" integrity sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A== -uuid@^8.3.0: +uuid@^8.3.0, uuid@^8.3.2: version "8.3.2" resolved "https://registry.yarnpkg.com/uuid/-/uuid-8.3.2.tgz#80d5b5ced271bb9af6c445f21a1a04c606cefbe2" integrity sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg== @@ -17272,6 +17649,14 @@ yargs@^17.0.1: y18n "^5.0.5" yargs-parser "^20.2.2" +yauzl@^2.10.0: + version "2.10.0" + resolved "https://registry.yarnpkg.com/yauzl/-/yauzl-2.10.0.tgz#c7eb17c93e112cb1086fa6d8e51fb0667b79a5f9" + integrity sha1-x+sXyT4RLLEIb6bY5R+wZnt5pfk= + dependencies: + buffer-crc32 "~0.2.3" + fd-slicer "~1.1.0" + yn@3.1.1: version "3.1.1" resolved "https://registry.yarnpkg.com/yn/-/yn-3.1.1.tgz#1e87401a09d767c1d5eab26a6e4c185182d2eb50"