From 3896113a64fc81f01271aa892e561abfb0d03f48 Mon Sep 17 00:00:00 2001 From: Oliver Byford Date: Thu, 11 Jan 2024 11:51:29 +0000 Subject: [PATCH 1/3] Remove Cypress tests from docs site MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit These tests are currently failing for pull requests against the main branch [1], seemingly because they’re running against an old version of the Prototype Kit [2] which does not support GOV.UK Frontend v5.0. The tests are also designed to test functionality of the Prototype Kit itself (rather than the docs site) and are largely (possibly entirely) duplicated in the Cypress tests in the Prototype Kit repo [3] from which this repo was forked [4]. Given this duplication (and the fact that the tests run against an old version of the Prototype Kit), this commit: - removes the Cypress tests - removes the related npm scripts and GitHub workflow step - uninstalls Cypress, including cleaning up its config file and other references across the repo [1]: https://github.com/alphagov/govuk-prototype-kit-docs/actions/runs/7486740334 [2]: https://github.com/alphagov/govuk-prototype-kit-docs/blob/main/cypress/scripts/run-starter-prototype.js#L10 [3]: https://github.com/alphagov/govuk-prototype-kit/tree/03d1bc43aca6357d9e5e09bfdff5a1a04f7fc069/cypress [4]: https://github.com/alphagov/govuk-prototype-kit-docs/issues/22#issuecomment-1162876785 --- .github/workflows/test.yaml | 8 - cypress.config.js | 15 - .../e2e/0-smoke-tests/index-page.cypress.js | 4 - .../e2e/1-watch-files/watch-config.cypress.js | 35 - .../watch-custom-styles.cypress.js | 72 - .../e2e/1-watch-files/watch-images.cypress.js | 74 - .../watch-javascripts.cypress.js | 41 - .../e2e/1-watch-files/watch-routes.cypress.js | 49 - .../e2e/1-watch-files/watch-styles.cypress.js | 60 - .../e2e/1-watch-files/watch-views.cypress.js | 34 - .../checkboxes.cypress.js | 53 - .../branching-journey.cypress.js | 52 - .../change-answers.cypress.js | 77 - .../link-index-to-start.cypress.js | 41 - .../e2e/3-link-page-tests/link-page-utils.js | 130 - .../simple-journey.cypress.js | 52 - .../step-by-step-journey.cypress.js | 99 - cypress/e2e/utils.js | 26 - .../components/juggling-balls-component.html | 30 - .../juggling-balls-route-component.js | 15 - .../components/juggling-trick-component.html | 12 - cypress/fixtures/custom-styles.html | 30 - cypress/fixtures/images/larry-the-cat.jpg | Bin 21710 -> 0 bytes cypress/fixtures/larry-the-cat.html | 27 - cypress/fixtures/routes.js | 16 - cypress/fixtures/sass/custom-styles.scss | 2 - cypress/fixtures/views/checkbox-test.html | 49 - .../views/juggling-check-answers.html | 66 - cypress/plugins/index.js | 115 - cypress/scripts/run-starter-prototype.js | 22 - cypress/support/commands.js | 92 - cypress/support/e2e.js | 20 - cypress/temp/temp-application.js | 3 - lib/build/config.json | 1 - lib/build/tasks.js | 1 - package-lock.json | 2165 +---------------- package.json | 12 - 37 files changed, 62 insertions(+), 3538 deletions(-) delete mode 100644 cypress.config.js delete mode 100644 cypress/e2e/0-smoke-tests/index-page.cypress.js delete mode 100644 cypress/e2e/1-watch-files/watch-config.cypress.js delete mode 100644 cypress/e2e/1-watch-files/watch-custom-styles.cypress.js delete mode 100644 cypress/e2e/1-watch-files/watch-images.cypress.js delete mode 100644 cypress/e2e/1-watch-files/watch-javascripts.cypress.js delete mode 100644 cypress/e2e/1-watch-files/watch-routes.cypress.js delete mode 100644 cypress/e2e/1-watch-files/watch-styles.cypress.js delete mode 100644 cypress/e2e/1-watch-files/watch-views.cypress.js delete mode 100644 cypress/e2e/2-page-component-tests/checkboxes.cypress.js delete mode 100644 cypress/e2e/3-link-page-tests/branching-journey.cypress.js delete mode 100644 cypress/e2e/3-link-page-tests/change-answers.cypress.js delete mode 100644 cypress/e2e/3-link-page-tests/link-index-to-start.cypress.js delete mode 100644 cypress/e2e/3-link-page-tests/link-page-utils.js delete mode 100644 cypress/e2e/3-link-page-tests/simple-journey.cypress.js delete mode 100644 cypress/e2e/4-step-by-step-tests/step-by-step-journey.cypress.js delete mode 100644 cypress/e2e/utils.js delete mode 100644 cypress/fixtures/components/juggling-balls-component.html delete mode 100644 cypress/fixtures/components/juggling-balls-route-component.js delete mode 100644 cypress/fixtures/components/juggling-trick-component.html delete mode 100644 cypress/fixtures/custom-styles.html delete mode 100644 cypress/fixtures/images/larry-the-cat.jpg delete mode 100644 cypress/fixtures/larry-the-cat.html delete mode 100644 cypress/fixtures/routes.js delete mode 100644 cypress/fixtures/sass/custom-styles.scss delete mode 100644 cypress/fixtures/views/checkbox-test.html delete mode 100644 cypress/fixtures/views/juggling-check-answers.html delete mode 100644 cypress/plugins/index.js delete mode 100644 cypress/scripts/run-starter-prototype.js delete mode 100644 cypress/support/commands.js delete mode 100644 cypress/support/e2e.js delete mode 100644 cypress/temp/temp-application.js diff --git a/.github/workflows/test.yaml b/.github/workflows/test.yaml index 218276cce..9d9b99f93 100644 --- a/.github/workflows/test.yaml +++ b/.github/workflows/test.yaml @@ -53,11 +53,3 @@ jobs: env: CI: true GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} - - - run: npm run test:acceptance - env: - CYPRESS_REQUEST_TIMEOUT: 20000 - CYPRESS_DEFAULT_COMMAND_TIMEOUT: 40000 - CYPRESS_PAGE_LOAD_TIMEOUT: 120000 - CYPRESS_RETRIES: 3 - GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} diff --git a/cypress.config.js b/cypress.config.js deleted file mode 100644 index da1472965..000000000 --- a/cypress.config.js +++ /dev/null @@ -1,15 +0,0 @@ -const { defineConfig } = require('cypress') -const plugins = require('./cypress/plugins') - -module.exports = defineConfig({ - video: false, - chromeWebSecurity: false, - trashAssetsBeforeRun: true, - e2e: { - setupNodeEvents (on, config) { - return plugins(on, config) - }, - baseUrl: 'http://localhost:3000', - specPattern: 'cypress/e2e/**/*.cypress.js' - } -}) diff --git a/cypress/e2e/0-smoke-tests/index-page.cypress.js b/cypress/e2e/0-smoke-tests/index-page.cypress.js deleted file mode 100644 index 027eedcd6..000000000 --- a/cypress/e2e/0-smoke-tests/index-page.cypress.js +++ /dev/null @@ -1,4 +0,0 @@ -specify('index page', () => { - cy.visit('/') - cy.contains('GOV.UK Prototype Kit') -}) diff --git a/cypress/e2e/1-watch-files/watch-config.cypress.js b/cypress/e2e/1-watch-files/watch-config.cypress.js deleted file mode 100644 index 72e6bdf11..000000000 --- a/cypress/e2e/1-watch-files/watch-config.cypress.js +++ /dev/null @@ -1,35 +0,0 @@ -const path = require('path') - -const { waitForApplication } = require('../utils') - -const appConfig = path.join(Cypress.env('projectFolder'), 'app', 'config.js') -const backupAppConfig = path.join(Cypress.env('tempFolder'), 'temp-config.js') - -const originalText = 'Service name goes here' -const newText = 'Cypress test' - -const serverNameQuery = 'a.govuk-header__link.govuk-header__service-name, a.govuk-header__link--service-name' - -describe('watch config file', () => { - describe(`service name in config file ${appConfig} should be changed and restored`, () => { - before(() => { - waitForApplication() - // backup config.js - cy.task('copyFile', { source: appConfig, target: backupAppConfig }) - waitForApplication() - }) - - after(() => { - // restore config.js - cy.task('copyFile', { source: backupAppConfig, target: appConfig }) - cy.task('deleteFile', { filename: backupAppConfig }) - }) - - it('The service name should change to "cypress test"', () => { - cy.get(serverNameQuery).should('contains.text', originalText) - cy.task('replaceTextInFile', { filename: appConfig, originalText, newText }) - waitForApplication() - cy.get(serverNameQuery).should('contains.text', newText) - }) - }) -}) diff --git a/cypress/e2e/1-watch-files/watch-custom-styles.cypress.js b/cypress/e2e/1-watch-files/watch-custom-styles.cypress.js deleted file mode 100644 index ce2735a96..000000000 --- a/cypress/e2e/1-watch-files/watch-custom-styles.cypress.js +++ /dev/null @@ -1,72 +0,0 @@ -const path = require('path') - -const { waitForApplication } = require('../utils') - -const customStylesFixture = 'custom-styles' -const customStylesFixtureName = `${customStylesFixture}.scss` -const customStylesFixturePath = path.join(Cypress.config('fixturesFolder'), 'sass', customStylesFixtureName) -const customStylesAppPath = path.join(Cypress.env('projectFolder'), 'app', 'assets', 'sass', customStylesFixtureName) -const customStylesPublicPath = 'public/stylesheets/custom-styles.css' - -const pageFixture = 'custom-styles' -const pageFixtureName = `${pageFixture}.html` -const pageFixturePath = path.join(Cypress.config('fixturesFolder'), pageFixtureName) -const pageAppPath = path.join(Cypress.env('projectFolder'), 'app', 'views', pageFixtureName) - -function cleanUp () { - cy.task('deleteFile', { filename: path.join(Cypress.env('projectFolder'), customStylesPublicPath) }) - cy.task('deleteFile', { filename: customStylesAppPath }) - cy.task('deleteFile', { filename: pageAppPath }) -} - -describe('watch custom sass files', () => { - describe(`sass file ${customStylesFixtureName} should be created and linked within ${pageFixturePath} and accessible from the browser as /${customStylesPublicPath}`, () => { - beforeEach(() => { - waitForApplication() - cleanUp() - waitForApplication() - }) - - afterEach(() => { - cleanUp() - }) - - it('The colour of the paragraph should be changed to green', () => { - // FIXME: the expected behaviour is that it shouldn't make a difference - // whether the stylesheet exists or not, but currently for Browsersync to - // update the page properly the stylesheet has to be created first, so we - // create an empty one. See issue #1440 for more details. - cy.task('log', 'Create an empty custom stylesheet') - cy.task('createFile', { filename: customStylesAppPath, data: '// Custom styles\n' }) - - cy.task('log', 'Create a page to view our custom styles') - cy.task('copyFile', { - source: pageFixturePath, - target: pageAppPath - }) - - cy.task('log', 'The colour of the paragraph should be black') - cy.visit(`/${pageFixture}`) - cy.get('p.app-custom-style').should('have.css', 'background-color', 'rgba(0, 0, 0, 0)') - - cy.task('log', `Create ${customStylesAppPath}`) - cy.task('copyFile', { - source: customStylesFixturePath, - target: customStylesAppPath - }) - - // When we add our stylesheet, we expect Browsersync to detect that and - // tell the browser to fetch it, so let's wait for that resource to - // become available. - cy.task('log', 'Wait for the stylesheet to be loaded') - cy.waitForResource(`${customStylesFixture}.css`) - - cy.task('log', 'The colour of the paragraph should be changed to green') - cy.get('p.app-custom-style').should('have.css', 'background-color', 'rgb(0, 255, 0)') - - cy.task('log', `Request ${customStylesPublicPath}`) - cy.request(`/${customStylesPublicPath}`) - .then(response => expect(response.status).to.eq(200)) - }) - }) -}) diff --git a/cypress/e2e/1-watch-files/watch-images.cypress.js b/cypress/e2e/1-watch-files/watch-images.cypress.js deleted file mode 100644 index b6bfda2d1..000000000 --- a/cypress/e2e/1-watch-files/watch-images.cypress.js +++ /dev/null @@ -1,74 +0,0 @@ -const path = require('path') - -const { waitForApplication } = require('../utils') - -const imageFile = 'larry-the-cat.jpg' -const cypressImages = path.join(Cypress.config('fixturesFolder'), 'images') -const appImages = path.join(Cypress.env('projectFolder'), 'app', 'assets', 'images') -const publicImages = 'public/images' - -const pageFixture = 'larry-the-cat' -const pageFixtureName = `${pageFixture}.html` -const pageFixturePath = path.join(Cypress.config('fixturesFolder'), pageFixtureName) -const pageAppPath = path.join(Cypress.env('projectFolder'), 'app', 'views', pageFixtureName) - -function cleanUp () { - cy.task('deleteFile', { filename: path.join(appImages, imageFile) }) - cy.task('deleteFile', { filename: path.join(Cypress.env('projectFolder'), publicImages, imageFile) }) - cy.task('deleteFile', { filename: pageAppPath }) -} - -describe('watch image files', () => { - before(() => { - waitForApplication() - cleanUp() - waitForApplication() - }) - - afterEach(() => { - cleanUp() - }) - - it(`image created in ${appImages} should be copied to ${publicImages} and accessible from the browser`, () => { - const source = path.join(cypressImages, imageFile) - const target = path.join(appImages, imageFile) - const publicImage = `${publicImages}/${imageFile}` - - cy.task('log', 'Creating a page to view our image') - cy.task('copyFile', { source: pageFixturePath, target: pageAppPath }) - - cy.task('log', 'Our page should be missing its image') - cy.visit(`/${pageFixture}`) - cy.get('img#larry') - .should('be.visible') - .and(($img) => { - // "naturalWidth" and "naturalHeight" are set when the image loads - expect($img[0].naturalWidth).to.equal(0) - }) - - cy.task('log', 'Copying the image to the app folder') - cy.task('copyFile', { source, target }) - - cy.task('log', 'Wait for the image to be loaded') - cy.waitForResource(imageFile) - - // FIXME: the expected behaviour is that the page should update itself, - // however there is a bug in our setup where on Windows the image doesn't - // show up without a page reload. When this is fixed, remove this step. - // See issue #1440 for other details. - cy.task('log', 'Reload the page') - cy.reload() - - cy.task('log', 'Our page should now have its image') - cy.get('img#larry') - .should('be.visible') - .and(($img) => { - // "naturalWidth" and "naturalHeight" are set when the image loads - expect($img[0].naturalWidth).not.to.equal(0) - }) - - cy.task('log', `Requesting ${publicImage}`) - cy.request(`/${publicImage}`, { retryOnStatusCodeFailure: true }) - .then(response => expect(response.status).to.eq(200)) - }) -}) diff --git a/cypress/e2e/1-watch-files/watch-javascripts.cypress.js b/cypress/e2e/1-watch-files/watch-javascripts.cypress.js deleted file mode 100644 index 51cae5b8e..000000000 --- a/cypress/e2e/1-watch-files/watch-javascripts.cypress.js +++ /dev/null @@ -1,41 +0,0 @@ -const path = require('path') - -const { waitForApplication } = require('../utils') - -const appJs = path.join(Cypress.env('projectFolder'), 'app', 'assets', 'javascripts', 'application.js') -const backupAppJs = path.join(Cypress.env('tempFolder'), 'temp-application.js') - -describe('watch application.js', () => { - before(() => { - waitForApplication() - - // backup application.js - cy.task('copyFile', { source: appJs, target: backupAppJs }) - }) - - after(() => { - // restore files - cy.task('copyFile', { source: backupAppJs, target: appJs }) - }) - - it('changes to application.js should be reflected in browser', (done) => { - const onAlert = cy.stub() - cy.on('window:alert', onAlert) - - const markerText = '// Add JavaScript here' - const newText = markerText + '\n ' + "window.alert('Test')" - - cy.task('replaceTextInFile', { - filename: appJs, - originalText: markerText, - newText - }) - - // wait for page to be reloaded by Browsersync - cy.once('window:load', () => { - cy.wait(1000) - expect(onAlert).to.be.calledWith('Test') - done() - }) - }) -}) diff --git a/cypress/e2e/1-watch-files/watch-routes.cypress.js b/cypress/e2e/1-watch-files/watch-routes.cypress.js deleted file mode 100644 index 16e4795bd..000000000 --- a/cypress/e2e/1-watch-files/watch-routes.cypress.js +++ /dev/null @@ -1,49 +0,0 @@ -const path = require('path') - -const { waitForApplication } = require('../utils') - -const routesFixture = path.join(Cypress.config('fixturesFolder'), 'routes.js') -const appRoutes = path.join(Cypress.env('projectFolder'), 'app', 'routes.js') -const backupRoutes = path.join(Cypress.env('tempFolder'), 'temp-routes.js') -const pagePath = '/cypress-test' - -describe('watch route file', () => { - before(() => { - waitForApplication() - // backup routes - cy.task('copyFile', { source: appRoutes, target: backupRoutes }) - waitForApplication() - }) - - after(() => { - // delete backup routes - cy.task('deleteFile', { filename: backupRoutes }) - }) - - it(`add and remove ${pagePath} route`, () => { - cy.task('log', 'The cypress test page should not be found') - cy.visit(pagePath, { failOnStatusCode: false }) - cy.get('body') - .should('contains.text', `Page not found: ${pagePath}`) - - cy.task('log', `Replace ${appRoutes} with Cypress routes`) - cy.task('copyFile', { source: routesFixture, target: appRoutes }) - - waitForApplication() - - cy.task('log', 'The cypress test page should be displayed') - cy.visit(pagePath) - cy.get('h1') - .should('contains.text', 'CYPRESS TEST PAGE') - - cy.task('log', `Restore ${appRoutes}`) - cy.task('copyFile', { source: backupRoutes, target: appRoutes }) - - waitForApplication() - - cy.task('log', 'The cypress test page should not be found') - cy.visit(pagePath, { failOnStatusCode: false }) - cy.get('body') - .should('contains.text', `Page not found: ${pagePath}`) - }) -}) diff --git a/cypress/e2e/1-watch-files/watch-styles.cypress.js b/cypress/e2e/1-watch-files/watch-styles.cypress.js deleted file mode 100644 index 25c69fd6a..000000000 --- a/cypress/e2e/1-watch-files/watch-styles.cypress.js +++ /dev/null @@ -1,60 +0,0 @@ -const path = require('path') - -const { waitForApplication } = require('../utils') - -const appStyles = path.join(Cypress.env('projectFolder'), 'app', 'assets', 'sass') -const appStylesheet = path.join(appStyles, 'application.scss') -const cypressTestStyles = 'cypress-test' -const cypressTestStylePattern = `${appStyles}/patterns/_${cypressTestStyles}.scss` -const publicStylesheet = 'public/stylesheets/application.css' -const backupAppStylesheet = path.join(Cypress.env('tempFolder'), 'temp-application.scss') - -const RED = 'rgb(255, 0, 0)' -const BLACK = 'rgb(11, 12, 12)' - -describe('watch sass files', () => { - describe(`sass file ${cypressTestStylePattern} should be created and included within the ${appStylesheet} and accessible from the browser as /${publicStylesheet}`, () => { - const cssStatement = ` - .govuk-header { background: red; } - ` - - before(() => { - waitForApplication() - // backup application.scss - cy.task('copyFile', { source: appStylesheet, target: backupAppStylesheet }) - waitForApplication() - }) - - after(() => { - // restore files - cy.task('copyFile', { source: backupAppStylesheet, target: appStylesheet }) - - cy.task('deleteFile', { filename: cypressTestStylePattern }) - - cy.get('.govuk-header').should('have.css', 'background-color', BLACK) - cy.task('deleteFile', { filename: backupAppStylesheet }) - }) - - it('The colour of the header should be changed to red then back to black', () => { - cy.task('log', 'The colour of the header should be black') - cy.get('.govuk-header').should('have.css', 'background-color', BLACK) - - cy.task('log', `Create ${cypressTestStylePattern}`) - cy.task('createFile', { - filename: cypressTestStylePattern, - data: cssStatement - }) - - cy.task('log', `Amend ${appStylesheet} to import ${cypressTestStyles}`) - cy.task('appendFile', { - filename: appStylesheet, - data: ` - @import "patterns/${cypressTestStyles}"; - ` - }) - - cy.task('log', 'The colour of the header should be changed to red') - cy.get('.govuk-header').should('have.css', 'background-color', RED) - }) - }) -}) diff --git a/cypress/e2e/1-watch-files/watch-views.cypress.js b/cypress/e2e/1-watch-files/watch-views.cypress.js deleted file mode 100644 index 26c3a0f14..000000000 --- a/cypress/e2e/1-watch-files/watch-views.cypress.js +++ /dev/null @@ -1,34 +0,0 @@ -const path = require('path') - -const { waitForApplication } = require('../utils') - -const templatesView = path.join(Cypress.env('docsFolder'), 'views', 'templates', 'start.html') -const appView = path.join(Cypress.env('projectFolder'), 'app', 'views', 'start.html') -const pagePath = '/start' - -describe('watching start page', () => { - before(() => { - waitForApplication() - cy.task('deleteFile', { filename: appView }) - waitForApplication() - }) - - after(() => { - cy.task('deleteFile', { filename: appView }) - }) - - it('Add and remove the start page', () => { - cy.task('log', 'The start page should not be found') - cy.visit(pagePath, { failOnStatusCode: false }) - cy.get('body') - .should('contains.text', `Page not found: ${pagePath}`) - - cy.task('log', `Copy ${templatesView} to ${appView}`) - cy.task('copyFile', { source: templatesView, target: appView }) - - cy.task('log', 'The start page should be displayed') - cy.visit(pagePath) - cy.get('h1') - .should('contains.text', 'Service name goes here') - }) -}) diff --git a/cypress/e2e/2-page-component-tests/checkboxes.cypress.js b/cypress/e2e/2-page-component-tests/checkboxes.cypress.js deleted file mode 100644 index d40cdf65c..000000000 --- a/cypress/e2e/2-page-component-tests/checkboxes.cypress.js +++ /dev/null @@ -1,53 +0,0 @@ -const path = require('path') - -const { waitForApplication } = require('../utils') - -const templatesView = path.join(Cypress.config('fixturesFolder'), 'views', 'checkbox-test.html') -const appView = path.join(Cypress.env('projectFolder'), 'app', 'views', 'checkbox-test.html') - -const pagePath = '/checkbox-test' - -describe('checkbox tests', () => { - before(() => { - waitForApplication() - cy.task('deleteFile', { filename: appView }) - cy.task('log', `Copy ${templatesView} to ${appView}`) - cy.task('copyFile', { source: templatesView, target: appView }) - waitForApplication() - - // load test view - cy.task('log', 'The checkbox-test page should be displayed') - cy.visit(pagePath) - cy.get('h1') - .should('contains.text', 'Checkbox tests') - }) - - after(() => { - waitForApplication() - // cy.task('deleteFile', { filename: appView }) - }) - - const submitAndCheck = async (matchData) => { - cy.intercept('POST', pagePath).as('submitPage') - cy.get('button[data-module="govuk-button"]') - .should('contains.text', 'Continue') - .click() - cy.wait('@submitPage').its('request.body') - .then((body) => { - const data = decodeURIComponent(body).split('&') - cy.expect(data.length).equal(matchData.length) - matchData.forEach((match) => { - cy.expect(data).includes(match) - }) - }) - } - - it('request should include the _unchecked option only', () => { - submitAndCheck(['vehicle1[vehicle-features]=_unchecked']) - }) - - it('when the GPS checkbox is selected, the request should include the GPS option', () => { - cy.get('input[value="GPS"]').check() - submitAndCheck(['vehicle1[vehicle-features]=_unchecked', 'vehicle1[vehicle-features]=GPS']) - }) -}) diff --git a/cypress/e2e/3-link-page-tests/branching-journey.cypress.js b/cypress/e2e/3-link-page-tests/branching-journey.cypress.js deleted file mode 100644 index 1b855d628..000000000 --- a/cypress/e2e/3-link-page-tests/branching-journey.cypress.js +++ /dev/null @@ -1,52 +0,0 @@ - -const { waitForApplication } = require('../utils') -const { setUpPages, setUpBranchingPages, cleanUpPages, cleanUpBranchingPages, backUpRoutes, restoreRoutes } = require('./link-page-utils') - -const jugglingBallsPath = '/juggling-balls' - -const eligibleHowManyBalls = '3 or more' -const ineligibleHowManyBalls = '1 or 2' - -describe('Branching journey', async () => { - before(() => { - waitForApplication() - cleanUpPages() - cleanUpBranchingPages() - backUpRoutes() - setUpPages() - setUpBranchingPages() - waitForApplication() - }) - - after(() => { - cleanUpPages() - cleanUpBranchingPages() - restoreRoutes() - }) - - it('eligible journey', () => { - // Visit Juggling balls page, click continue - cy.visit(jugglingBallsPath) - cy.task('log', 'The juggling balls page should be displayed') - cy.get('h1').should('contains.text', 'How many balls can you juggle?') - cy.get(`input[value="${eligibleHowManyBalls}"]`).check() - cy.get('button.govuk-button').should('contains.text', 'Continue').click() - - // Juggling trick page should be displayed correctly - cy.task('log', 'The juggling trick page should be displayed') - cy.get('h1').should('contains.text', 'What is your most impressive juggling trick?') - }) - - it('Ineligible journey', () => { - // Visit Juggling balls page, click continue - cy.visit(jugglingBallsPath) - cy.task('log', 'The juggling balls page should be displayed') - cy.get('h1').should('contains.text', 'How many balls can you juggle?') - cy.get(`input[value="${ineligibleHowManyBalls}"]`).check() - cy.get('button.govuk-button').should('contains.text', 'Continue').click() - - // Juggling trick page should be displayed correctly - cy.task('log', 'The juggling trick page should be displayed') - cy.get('h1').should('contains.text', 'Sorry, you are ineligible for juggling tricks') - }) -}) diff --git a/cypress/e2e/3-link-page-tests/change-answers.cypress.js b/cypress/e2e/3-link-page-tests/change-answers.cypress.js deleted file mode 100644 index 3b8380766..000000000 --- a/cypress/e2e/3-link-page-tests/change-answers.cypress.js +++ /dev/null @@ -1,77 +0,0 @@ - -const { waitForApplication } = require('../utils') -const { setUpPages, setUpData, cleanUpPages, clearUpData } = require('./link-page-utils') - -const checkAnswersPath = '/check-answers' - -const howManyBalls = '3 or more' -const mostImpressiveTrick = 'Standing on my head' - -const defaultHowManyBalls = 'None - I cannot juggle' -const defaultMostImpressiveTrick = 'None - I cannot do tricks' - -describe('Change answers', async () => { - before(() => { - waitForApplication() - cleanUpPages() - setUpPages() - setUpData() - waitForApplication() - }) - - after(() => { - clearUpData() - cleanUpPages() - }) - - it('Change juggling balls journey', () => { - // Visit Check answers page, click change juggling balls - cy.task('log', 'The check answers page should be displayed') - cy.visit(checkAnswersPath) - cy.get('h1').should('contains.text', 'Check your answers before sending your application') - cy.get('.govuk-summary-list__value:first').should('contains.text', defaultHowManyBalls) - cy.get('.govuk-summary-list__value:last').should('contains.text', defaultMostImpressiveTrick) - cy.get('a[href="/juggling-balls"]').should('contains.text', 'Change').click() - - // On Juggling balls page, click continue - cy.task('log', 'The juggling balls page should be displayed') - cy.get('h1').should('contains.text', 'How many balls can you juggle?') - cy.get(`input[value="${defaultHowManyBalls}"]`).should('be.checked') - cy.get(`input[value="${howManyBalls}"]`).check() - cy.get('button.govuk-button').should('contains.text', 'Continue').click() - - // On Juggling trick page, click continue - cy.task('log', 'The juggling trick page should be displayed') - cy.get('h1').should('contains.text', 'What is your most impressive juggling trick?') - cy.get('textarea#most-impressive-trick').should('contains.text', defaultMostImpressiveTrick) - cy.get('button.govuk-button').should('contains.text', 'Continue').click() - - // On Check answers page, click accept and send - cy.task('log', 'The check answers page should be displayed') - cy.get('h1').should('contains.text', 'Check your answers before sending your application') - cy.get('.govuk-summary-list__value:first').should('contains.text', howManyBalls) - cy.get('.govuk-summary-list__value:last').should('contains.text', defaultMostImpressiveTrick) - }) - - it('Change juggling trick journey', () => { - // Visit Check answers page, click change juggling trick - cy.task('log', 'The check answers page should be displayed') - cy.visit(checkAnswersPath) - cy.get('h1').should('contains.text', 'Check your answers before sending your application') - cy.get('.govuk-summary-list__value:first').should('contains.text', defaultHowManyBalls) - cy.get('.govuk-summary-list__value:last').should('contains.text', defaultMostImpressiveTrick) - cy.get('a[href="/juggling-trick"]').should('contains.text', 'Change').click() - - // On Juggling trick page, click continue - cy.task('log', 'The juggling trick page should be displayed') - cy.get('h1').should('contains.text', 'What is your most impressive juggling trick?') - cy.get('textarea#most-impressive-trick').should('contains.text', defaultMostImpressiveTrick).type(mostImpressiveTrick) - cy.get('button.govuk-button').should('contains.text', 'Continue').click() - - // On Check answers page, click accept and send - cy.task('log', 'The check answers page should be displayed') - cy.get('h1').should('contains.text', 'Check your answers before sending your application') - cy.get('.govuk-summary-list__value:first').should('contains.text', defaultHowManyBalls) - cy.get('.govuk-summary-list__value:last').should('contains.text', mostImpressiveTrick) - }) -}) diff --git a/cypress/e2e/3-link-page-tests/link-index-to-start.cypress.js b/cypress/e2e/3-link-page-tests/link-index-to-start.cypress.js deleted file mode 100644 index cd5cdfc88..000000000 --- a/cypress/e2e/3-link-page-tests/link-index-to-start.cypress.js +++ /dev/null @@ -1,41 +0,0 @@ -const path = require('path') -const { waitForApplication, copyFile, deleteFile } = require('../utils') - -const appViews = path.join(Cypress.env('projectFolder'), 'app', 'views') -const indexView = path.join(appViews, 'index.html') -const startView = path.join(appViews, 'start.html') -const templateStartView = path.join(Cypress.env('docsFolder'), 'views', 'templates', 'start.html') - -const commentText = '

You can change the service name by editing the file \'/app/config.js\'.

' - -const startText = 'Click here to start' - -const linkText = `${startText}` - -describe('Link index page to start page', async () => { - before(() => { - waitForApplication() - copyFile(templateStartView, startView) - cy.task('replaceTextInFile', { - filename: indexView, - originalText: commentText, - newText: linkText - }) - waitForApplication() - }) - - after(() => { - cy.task('replaceTextInFile', { - filename: indexView, - originalText: linkText, - newText: commentText - }) - deleteFile(startView) - }) - - it('click start link', () => { - cy.get('a[href="/start"]').should('contains.text', startText).click() - cy.get('a[data-module="govuk-button"]') - .should('contains.text', 'Start') - }) -}) diff --git a/cypress/e2e/3-link-page-tests/link-page-utils.js b/cypress/e2e/3-link-page-tests/link-page-utils.js deleted file mode 100644 index 3fbc8d208..000000000 --- a/cypress/e2e/3-link-page-tests/link-page-utils.js +++ /dev/null @@ -1,130 +0,0 @@ -const path = require('path') -const { copyFile, deleteFile } = require('../utils') - -const templates = path.join(Cypress.env('docsFolder'), 'views', 'templates') -const startTemplate = path.join(templates, 'start.html') -const questionTemplate = path.join(templates, 'question.html') -const confirmationTemplate = path.join(templates, 'confirmation.html') -const contentTemplate = path.join(templates, 'content.html') - -const fixtures = path.join(Cypress.config('fixturesFolder')) - -const fixtureViews = path.join(fixtures, 'views') -const jugglingCheckAnswersFixtureView = path.join(fixtureViews, 'juggling-check-answers.html') - -const components = path.join(fixtures, 'components') -const jugglingBallsComponent = path.join(components, 'juggling-balls-component.html') -const jugglingTrickComponent = path.join(components, 'juggling-trick-component.html') -const jugglingBallsAnswerComponent = path.join(components, 'juggling-balls-route-component.js') - -const appViews = path.join(Cypress.env('projectFolder'), 'app', 'views') -const startView = path.join(appViews, 'start.html') -const jugglingBallsView = path.join(appViews, 'juggling-balls.html') -const jugglingTrickView = path.join(appViews, 'juggling-trick.html') -const checkAnswersView = path.join(appViews, 'check-answers.html') -const confirmationView = path.join(appViews, 'confirmation.html') -const ineligibleView = path.join(appViews, 'ineligible.html') - -const appRoutes = path.join(Cypress.env('projectFolder'), 'app', 'routes.js') -const backedUpRoutes = path.join(Cypress.env('tempFolder'), 'temp-routes.js') - -const appDataFile = path.join(Cypress.env('projectFolder'), 'app', 'data', 'session-data-defaults.js') - -const jugglingBallsPath = '/juggling-balls' -const jugglingTrickPath = '/juggling-trick' -const checkAnswersPath = '/check-answers' - -const jugglingBallsAnswerRoute = '/juggling-balls-answer' - -const defaultHowManyBalls = 'None - I cannot juggle' -const defaultMostImpressiveTrick = 'None - I cannot do tricks' - -const cleanUpPages = () => { - deleteFile(startView) - deleteFile(jugglingBallsView) - deleteFile(jugglingTrickView) - deleteFile(checkAnswersView) - deleteFile(confirmationView) -} - -const createQuestionView = (view, content, nextPath) => { - copyFile(questionTemplate, view) - cy.task('replaceMultipleTextInFile', { - filename: view, - list: [ - { originalText: '

Heading or question goes here

', newText: '' }, - { originalText: '

[See the GOV.UK Design System for examples]

', newText: '' }, - { originalText: '

[Insert question content here]

', source: content }, - { originalText: '/url/of/next/page', newText: nextPath } - ] - }) -} - -const setUpPages = () => { - // Set up start view - copyFile(startTemplate, startView) - cy.task('replaceTextInFile', { filename: startView, originalText: ' { - cy.task('replaceTextInFile', { filename: appDataFile, originalText: '// Insert values here', newText: `"how-many-balls": "${defaultHowManyBalls}", "most-impressive-trick": "${defaultMostImpressiveTrick}"` }) -} - -const clearUpData = () => { - cy.task('replaceTextInFile', { filename: appDataFile, originalText: `"how-many-balls": "${defaultHowManyBalls}", "most-impressive-trick": "${defaultMostImpressiveTrick}"`, newText: '// Insert values here' }) -} - -const setUpBranchingPages = () => { - // Set up ineligible view - copyFile(contentTemplate, ineligibleView) - cy.task('replaceMultipleTextInFile', { - filename: ineligibleView, - list: [ - { originalText: 'Heading goes here', newText: 'Sorry, you are ineligible for juggling tricks' }, - { originalText: 'This is a paragraph of text. It explains in more detail what has happened and wraps across several lines.', newText: 'Keep practicing and when you can juggle 3 or more balls, you will be eligible for tricks.' }, - { originalText: '

Read more about this topic.

', newText: '' } - ] - }) - - // Update the juggling balls action - cy.task('replaceTextInFile', { filename: jugglingBallsView, originalText: jugglingTrickPath, newText: jugglingBallsAnswerRoute }) - - // Update routes with juggling balls answer component - cy.task('replaceTextInFile', { filename: appRoutes, originalText: '// Add your routes here', source: jugglingBallsAnswerComponent }) -} - -const cleanUpBranchingPages = () => { - deleteFile(ineligibleView) -} - -const backUpRoutes = () => { - copyFile(appRoutes, backedUpRoutes) -} - -const restoreRoutes = () => { - copyFile(backedUpRoutes, appRoutes) - deleteFile(backedUpRoutes) -} - -module.exports = { - setUpPages, - setUpBranchingPages, - setUpData, - cleanUpPages, - cleanUpBranchingPages, - clearUpData, - backUpRoutes, - restoreRoutes -} diff --git a/cypress/e2e/3-link-page-tests/simple-journey.cypress.js b/cypress/e2e/3-link-page-tests/simple-journey.cypress.js deleted file mode 100644 index 35f415042..000000000 --- a/cypress/e2e/3-link-page-tests/simple-journey.cypress.js +++ /dev/null @@ -1,52 +0,0 @@ - -const { waitForApplication } = require('../utils') -const { setUpPages, cleanUpPages } = require('./link-page-utils') - -const startPath = '/start' - -const howManyBalls = '3 or more' -const mostImpressiveTrick = 'Standing on my head' - -describe('Question journey', async () => { - before(() => { - waitForApplication() - cleanUpPages() - setUpPages() - waitForApplication() - }) - - after(() => { - cleanUpPages() - }) - - it('Happy path journey', () => { - // Visit start page and click start - cy.task('log', 'The start page should be displayed') - cy.visit(startPath) - cy.get('h1').should('contains.text', 'Service name goes here') - cy.get('a.govuk-button--start').click() - - // On Juggling balls page, click continue - cy.task('log', 'The juggling balls page should be displayed') - cy.get('h1').should('contains.text', 'How many balls can you juggle?') - cy.get(`input[value="${howManyBalls}"]`).check() - cy.get('button.govuk-button').should('contains.text', 'Continue').click() - - // On Juggling trick page, click continue - cy.task('log', 'The juggling trick page should be displayed') - cy.get('h1').should('contains.text', 'What is your most impressive juggling trick?') - cy.get('textarea#most-impressive-trick').type(mostImpressiveTrick) - cy.get('button.govuk-button').should('contains.text', 'Continue').click() - - // On Check answers page, click accept and send - cy.task('log', 'The check answers page should be displayed') - cy.get('h1').should('contains.text', 'Check your answers before sending your application') - cy.get('.govuk-summary-list__value:first').should('contains.text', howManyBalls) - cy.get('.govuk-summary-list__value:last').should('contains.text', mostImpressiveTrick) - cy.get('button.govuk-button').should('contains.text', 'Accept and send').click() - - // Confirmation page should be displayed correctly - cy.task('log', 'The confirmation page should be displayed') - cy.get('h1.govuk-panel__title').should('contains.text', 'Application complete') - }) -}) diff --git a/cypress/e2e/4-step-by-step-tests/step-by-step-journey.cypress.js b/cypress/e2e/4-step-by-step-tests/step-by-step-journey.cypress.js deleted file mode 100644 index 1930c03a6..000000000 --- a/cypress/e2e/4-step-by-step-tests/step-by-step-journey.cypress.js +++ /dev/null @@ -1,99 +0,0 @@ -import path from 'path' -import { deleteFile } from '../utils' - -const { waitForApplication, copyFile } = require('../utils') - -const projectFolder = Cypress.env('projectFolder') - -const appViews = path.join(projectFolder, 'app', 'views') - -const showHideAllLinkQuery = '.app-step-nav__controls button' -const toggleButtonQuery = (step) => `[data-position="${step}"]` -const showHideLinkQuery = (step) => `[data-position="${step}"]` -const panelQuery = (step) => `[data-position="${step}.1"]` -const titleQuery = (step) => `[data-position="${step}"] .js-step-title-text` - -const assertVisible = (step) => { - cy.get(showHideLinkQuery(step)).should('contains.text', 'Hide') - cy.get(panelQuery(step)).should('be.visible') -} - -const assertHidden = (step) => { - cy.get(panelQuery(step)).should('not.be.visible') - cy.get(showHideLinkQuery(step)).should('contains.text', 'Show') -} - -const stepByStepTestData = [{ - name: 'step-by-step-navigation', - heading: 'Learn to drive a car: step by step', - title1: 'Check you\'re allowed to drive', - title2: 'Get a provisional licence' -}, { - name: 'start-with-step-by-step', - heading: 'Check what age you can drive', - title1: 'Check you\'re allowed to drive', - title2: 'Get a provisional licence' -}] - -stepByStepTestData.forEach(({ name, heading, title1, title2 }) => { - const stepByStepTemplateView = path.join(Cypress.env('docsFolder'), 'views', 'templates', `${name}.html`) - const stepByStepView = path.join(appViews, `${name}.html`) - const stepByStepPath = `/${name}` - - describe(`${name} journey`, async () => { - before(() => { - waitForApplication() - copyFile(stepByStepTemplateView, stepByStepView) - waitForApplication() - cy.visit(stepByStepPath) - cy.get('h1').should('contains.text', heading) - }) - - after(() => { - deleteFile(stepByStepView) - }) - - it('renders ok', () => { - cy.get(titleQuery(1)).should('contain.text', title1) - cy.get(titleQuery(2)).should('contain.text', title2) - assertHidden(1) - assertHidden(2) - }) - - it('toggle step 1', () => { - // click toggle button and check that only step 1 details are visible - cy.get(toggleButtonQuery(1)).click() - assertVisible(1) - assertHidden(2) - - // click toggle button and check that only both steps are hidden - cy.get(toggleButtonQuery(1)).click() - assertHidden(1) - assertHidden(2) - }) - - it('toggle step 2', () => { - // click toggle button and check that only step 1 details are visible - cy.get(toggleButtonQuery(2)).click() - assertHidden(1) - assertVisible(2) - - // click toggle button and check that only both steps are hidden - cy.get(toggleButtonQuery(2)).click() - assertHidden(1) - assertHidden(2) - }) - - it('toggle all steps', () => { - // click toggle button and check that all steps details are visible - cy.get(showHideAllLinkQuery).should('contains.text', 'Show all').click() - assertVisible(1) - assertVisible(2) - - // click toggle button and check that all steps details are hidden - cy.get(showHideAllLinkQuery).should('contains.text', 'Hide all').click() - assertHidden(1) - assertHidden(2) - }) - }) -}) diff --git a/cypress/e2e/utils.js b/cypress/e2e/utils.js deleted file mode 100644 index 77181728d..000000000 --- a/cypress/e2e/utils.js +++ /dev/null @@ -1,26 +0,0 @@ -const sleep = (ms) => new Promise((resolve) => setTimeout(resolve, ms)) - -const waitForApplication = async () => { - cy.task('log', 'Waiting for app to restart and load home page') - cy.task('waitUntilAppRestarts') - cy.visit('/index') - cy.get('h1.govuk-heading-xl') - .should('contains.text', 'Prototype your service using GOV.UK Prototype Kit') -} - -const copyFile = (source, target) => { - cy.task('log', `Copy ${source} to ${target}`) - cy.task('copyFile', { source, target }) -} - -const deleteFile = (filename) => { - cy.task('log', `Delete ${filename}`) - cy.task('deleteFile', { filename }) -} - -module.exports = { - sleep, - waitForApplication, - copyFile, - deleteFile -} diff --git a/cypress/fixtures/components/juggling-balls-component.html b/cypress/fixtures/components/juggling-balls-component.html deleted file mode 100644 index 91e0ff902..000000000 --- a/cypress/fixtures/components/juggling-balls-component.html +++ /dev/null @@ -1,30 +0,0 @@ -{% from "govuk/components/radios/macro.njk" import govukRadios %} - -{{ govukRadios({ - idPrefix: "how-many-balls", - name: "how-many-balls", - fieldset: { - legend: { - text: "How many balls can you juggle?", - isPageHeading: true, - classes: "govuk-fieldset__legend--l" - } - }, - items: [ - { - value: "3 or more", - text: "3 or more", - checked: checked("how-many-balls", "3 or more") - }, - { - value: "1 or 2", - text: "1 or 2", - checked: checked("how-many-balls", "1 or 2") - }, - { - value: "None - I cannot juggle", - text: "None - I cannot juggle", - checked: checked("how-many-balls", "None - I cannot juggle") - } - ] -}) }} \ No newline at end of file diff --git a/cypress/fixtures/components/juggling-balls-route-component.js b/cypress/fixtures/components/juggling-balls-route-component.js deleted file mode 100644 index 995bc3775..000000000 --- a/cypress/fixtures/components/juggling-balls-route-component.js +++ /dev/null @@ -1,15 +0,0 @@ -// Run this code when a form is submitted to 'juggling-balls-answer' -// eslint-disable-next-line -router.post('/juggling-balls-answer', function (req, res) { - // Make a variable and give it the value from 'how-many-balls' - const howManyBalls = req.session.data['how-many-balls'] - - // Check whether the variable matches a condition - if (howManyBalls === '3 or more') { - // Send user to next page - res.redirect('/juggling-trick') - } else { - // Send user to ineligible page - res.redirect('/ineligible') - } -}) diff --git a/cypress/fixtures/components/juggling-trick-component.html b/cypress/fixtures/components/juggling-trick-component.html deleted file mode 100644 index 4cf7ec55e..000000000 --- a/cypress/fixtures/components/juggling-trick-component.html +++ /dev/null @@ -1,12 +0,0 @@ -{% from "govuk/components/textarea/macro.njk" import govukTextarea %} - -{{ govukTextarea({ - name: "most-impressive-trick", - id: "most-impressive-trick", - value: data["most-impressive-trick"], - label: { - text: "What is your most impressive juggling trick?", - classes: "govuk-label--l", - isPageHeading: true - } -}) }} \ No newline at end of file diff --git a/cypress/fixtures/custom-styles.html b/cypress/fixtures/custom-styles.html deleted file mode 100644 index 40eeda20f..000000000 --- a/cypress/fixtures/custom-styles.html +++ /dev/null @@ -1,30 +0,0 @@ -{% extends "layout.html" %} - -{% block head %} - {{ super() }} - -{% endblock head %} - -{% block pageTitle %} - Custom styles – {{ serviceName }} – GOV.UK Prototype Kit -{% endblock %} - -{% block beforeContent %} - Back -{% endblock %} - -{% block content %} - -
-
- -

- Custom styles -

- -

This is a paragraph of text. It has a custom style.

- -
-
- -{% endblock %} diff --git a/cypress/fixtures/images/larry-the-cat.jpg b/cypress/fixtures/images/larry-the-cat.jpg deleted file mode 100644 index 9cef78cca54ac4211f5b5d69ff7f83b53bdae8da..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 21710 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 Z^D}Sge-rpt-_!R00O+mD7A^f>|JmqB8?XQX diff --git a/cypress/fixtures/larry-the-cat.html b/cypress/fixtures/larry-the-cat.html deleted file mode 100644 index df5cc5647..000000000 --- a/cypress/fixtures/larry-the-cat.html +++ /dev/null @@ -1,27 +0,0 @@ -{% extends "layout.html" %} - -{% block pageTitle %} - Larry the cat – {{ serviceName }} – GOV.UK Prototype Kit -{% endblock %} - -{% block beforeContent %} - Back -{% endblock %} - -{% block content %} - -
-
- -

- Larry the cat -

- - Larry the cat, Chief Mouser to the Cabinet Office, sitting on a meeting table wearing a Union Jack bowtie. - -

Read more about this topic.

- -
-
- -{% endblock %} diff --git a/cypress/fixtures/routes.js b/cypress/fixtures/routes.js deleted file mode 100644 index 44db18caf..000000000 --- a/cypress/fixtures/routes.js +++ /dev/null @@ -1,16 +0,0 @@ -/* eslint-disable-next-line no-unused-vars */ -const router = require('govuk-prototype-kit').requests.setupRouter() - -router.get('/cypress-test', (req, res) => { - const heading = 'CYPRESS TEST PAGE' - res.send(` - - - ${heading} - - -

${heading}

- - -`) -}) diff --git a/cypress/fixtures/sass/custom-styles.scss b/cypress/fixtures/sass/custom-styles.scss deleted file mode 100644 index 5c6dd5bf8..000000000 --- a/cypress/fixtures/sass/custom-styles.scss +++ /dev/null @@ -1,2 +0,0 @@ -// Custom styles -.app-custom-style { background: rgb(0, 255, 0); } diff --git a/cypress/fixtures/views/checkbox-test.html b/cypress/fixtures/views/checkbox-test.html deleted file mode 100644 index 7e0ef4f71..000000000 --- a/cypress/fixtures/views/checkbox-test.html +++ /dev/null @@ -1,49 +0,0 @@ -{% extends "layout.html" %} - -{% from "govuk/components/checkboxes/macro.njk" import govukCheckboxes %} - -{% block content %} - -

Checkbox tests

- -
-
- -
- {{ govukCheckboxes({ - idPrefix: "vehicle-features", - name: "vehicle1[vehicle-features]", - fieldset: { - legend: { - text: "Which of these applies to your vehicle?" - } - }, - hint: { - text: "Select all that apply" - }, - items: [ - { - value: "Heated seats", - text: "Heated seats", - checked: checked("['vehicle1']['vehicle-features']", "Heated seats") - }, - { - value: "GPS", - text: "GPS", - checked: checked("['vehicle1']['vehicle-features']", "GPS") - }, - { - value: "Radio", - text: "Radio", - checked: checked("['vehicle1']['vehicle-features']", "Radio") - } - ] - }) }} - - - -
- -
-
-{% endblock %} \ No newline at end of file diff --git a/cypress/fixtures/views/juggling-check-answers.html b/cypress/fixtures/views/juggling-check-answers.html deleted file mode 100644 index cfcdf84e9..000000000 --- a/cypress/fixtures/views/juggling-check-answers.html +++ /dev/null @@ -1,66 +0,0 @@ -{% extends "layout.html" %} - -{% block pageTitle %} - Check your answers template – {{ serviceName }} – GOV.UK Prototype Kit -{% endblock %} - -{% block beforeContent %} - Back -{% endblock %} - -{% block content %} -
-
- -

Check your answers before sending your application

- -

Personal details

- -
-
-
- Number of balls you can juggle -
-
- {{ data['how-many-balls'] }} -
-
- - Change - number of balls you can juggle - -
-
-
-
- Your most impressive juggling trick -
-
- {{ data['most-impressive-trick'] }} -
-
- - Change - your most impressive juggling trick - -
-
-
- -

Now send your application

- -

By submitting this application you are confirming that, to the best of your knowledge, the details you are providing are correct.

- -
- - - - - -
- -
-
-{% endblock %} diff --git a/cypress/plugins/index.js b/cypress/plugins/index.js deleted file mode 100644 index e29bc368f..000000000 --- a/cypress/plugins/index.js +++ /dev/null @@ -1,115 +0,0 @@ -/// -// *********************************************************** -// This example plugins/index.js can be used to load plugins -// -// You can change the location of this file or turn off loading -// the plugins file with the 'pluginsFile' configuration option. -// -// You can read more here: -// https://on.cypress.io/plugins-guide -// *********************************************************** - -// This function is called when a project is opened or re-opened (e.g. due to -// the project's config changing) -// const spawn = require('child_process').spawn -const fs = require('fs') -const fsp = fs.promises -const path = require('path') - -const waitOn = require('wait-on') - -const { sleep } = require('../e2e/utils') - -const createFolderForFile = async (filepath) => { - const dir = filepath.substring(0, filepath.lastIndexOf('/')) - if (dir && !fs.existsSync(dir)) { - await fsp.mkdir(dir, { - recursive: true - }) - } -} - -/** - * @type {Cypress.PluginConfig} - */ -// eslint-disable-next-line no-unused-vars -module.exports = (on, config) => { - // `on` is used to hook into various events Cypress emits - // `config` is the resolved Cypress config - - config.env.projectFolder = path.resolve(process.env.KIT_TEST_DIR || process.cwd()) - config.env.tempFolder = path.join(__dirname, '..', 'temp') - config.env.docsFolder = path.join(__dirname, '..', '..', 'docs', 'v12') - - const waitUntilAppRestarts = async (timeout) => await waitOn({ delay: 2000, resources: [config.baseUrl], timeout }) - const getReplacementText = async (text, source) => source ? fsp.readFile(source) : text - const replaceText = ({ text, originalText, newText, source }) => { - return getReplacementText(newText, source) - .then((replacementText) => { - if (text.includes(originalText)) { - return text.replace(originalText, replacementText) - } else { - throw new Error('Text to be replaced not found') - } - }) - } - - const replaceMultipleText = async (text, list) => { - let resultText = text - let index = 0 - while (index < list.length) { - resultText = await replaceText({ text: resultText, ...list[index] }) - index++ - } - return resultText - } - - const makeSureCypressCanInterpretTheResult = () => null - - on('task', { - copyFile: ({ source, target }) => createFolderForFile(target) - .then(() => fsp.copyFile(source, target)) - // The sleep of 2 seconds allows for the file to be copied completely to prevent - // it from not existing when the file is needed in a subsequent step - .then(() => sleep(2000)) // pause after the copy - .then(makeSureCypressCanInterpretTheResult), - - createFile: ({ filename, data, replace = false }) => createFolderForFile(filename) - .then(() => fsp.writeFile(filename, data, { - flag: replace ? 'w' : '' // Flag of w will overwrite - })) - .then(makeSureCypressCanInterpretTheResult), - - appendFile: ({ filename, data }) => fsp.appendFile(filename, data) - .then(makeSureCypressCanInterpretTheResult), - - deleteFile: ({ filename, timeout }) => fsp.unlink(filename) - .then(() => sleep(timeout)) - .then(makeSureCypressCanInterpretTheResult) - .catch((err) => err.code !== 'ENOENT' ? err : null - ), - - waitUntilAppRestarts: (config) => { - const { timeout = 20000 } = config || {} - return waitUntilAppRestarts(timeout) - .then(makeSureCypressCanInterpretTheResult) - }, - - replaceTextInFile: ({ filename, ...options }) => fsp.readFile(filename) - .then((buffer) => replaceText({ text: buffer.toString(), ...options })) - .then((text) => fsp.writeFile(filename, text.toString())) - .then(makeSureCypressCanInterpretTheResult), - - replaceMultipleTextInFile: ({ filename, list }) => fsp.readFile(filename) - .then((buffer) => replaceMultipleText(buffer.toString(), list)) - .then((text) => fsp.writeFile(filename, text.toString())) - .then(makeSureCypressCanInterpretTheResult), - - log: (message) => { - console.log(`${new Date().toLocaleTimeString()} => ${message}`) - return makeSureCypressCanInterpretTheResult() - } - }) - - return config -} diff --git a/cypress/scripts/run-starter-prototype.js b/cypress/scripts/run-starter-prototype.js deleted file mode 100644 index c47a79203..000000000 --- a/cypress/scripts/run-starter-prototype.js +++ /dev/null @@ -1,22 +0,0 @@ -const os = require('os') -const path = require('path') -const fs = require('fs-extra') -const child_process = require('child_process') // eslint-disable-line camelcase - -const defaultKitPath = path.join(os.tmpdir(), 'cypress/temp/test-project') - -const testDir = path.resolve(process.env.KIT_TEST_DIR || defaultKitPath) - -const kitVersion = '0.0.1-alpha.3' -const kitModule = `govuk-prototype-kit@${kitVersion}` - -const npmInstall = (module) => child_process.execSync(`cd ${testDir} && npm install ${module}`, { inherit: true }) - -const npx = (command) => child_process.execSync(`npx ${kitModule} ${command}`, { cwd: testDir, env: { ...process.env, env: 'test' }, stdio: 'inherit' }) - -fs.removeSync(testDir) -fs.ensureDirSync(testDir) -fs.writeJsonSync(path.join(testDir, 'usage-data-config.json'), { collectUsageData: false }) -npx(`install ${kitVersion}`) -npmInstall('@govuk-prototype-kit/step-by-step@2') -npx('start') diff --git a/cypress/support/commands.js b/cypress/support/commands.js deleted file mode 100644 index ef495626f..000000000 --- a/cypress/support/commands.js +++ /dev/null @@ -1,92 +0,0 @@ -/** - * Adds command "cy.waitForResource(name)" that checks performance entries - * for resource that ends with the given name. - * - * @see https://developers.google.com/web/tools/chrome-devtools/network/understanding-resource-timing - * - * Copied from https://github.com/cypress-io/cypress-example-recipes/blob/434f3b9b62555e53134c160b1f051b0c74a714e2/examples/testing-dom__wait-for-resource/cypress/e2e/spec.cy.js - */ -Cypress.Commands.add('waitForResource', (name, options = {}) => { - if (Cypress.browser.family === 'firefox') { - cy.log('Skip waitForResource in Firefox') - - return - } - - cy.log(`Waiting for resource ${name}`) - - const log = false // let's not log inner commands - const timeout = options.timeout || Cypress.config('defaultCommandTimeout') - - cy.window({ log }).then( - // note that ".then" method has options first, callback second - // https://on.cypress.io/then - { log, timeout }, - (win) => { - return new Cypress.Promise((resolve, reject) => { - let foundResource - - // control how long we should try finding the resource - // and if it is still not found. An explicit "reject" - // allows us to show nice informative message - setTimeout(() => { - if (foundResource) { - // nothing needs to be done, successfully found the resource - return - } - - clearInterval(interval) - reject(new Error(`Timed out waiting for resource ${name}`)) - }, timeout) - - const interval = setInterval(() => { - foundResource = win.performance - .getEntriesByType('resource') - .find((item) => item.name.endsWith(name)) - - if (!foundResource) { - // resource not found, will try again - return - } - - clearInterval(interval) - // because cy.log changes the subject, let's resolve the returned promise - // with log + returned actual result - resolve( - cy.log('✅ success').then(() => { - // let's resolve with the found performance object - // to allow tests to inspect it - return foundResource - }) - ) - }, 100) - }) - } - ) -}) - -// *********************************************** -// This example commands.js shows you how to -// create various custom commands and overwrite -// existing commands. -// -// For more comprehensive examples of custom -// commands please read more here: -// https://on.cypress.io/custom-commands -// *********************************************** -// -// -// -- This is a parent command -- -// Cypress.Commands.add('login', (email, password) => { ... }) -// -// -// -- This is a child command -- -// Cypress.Commands.add('drag', { prevSubject: 'element'}, (subject, options) => { ... }) -// -// -// -- This is a dual command -- -// Cypress.Commands.add('dismiss', { prevSubject: 'optional'}, (subject, options) => { ... }) -// -// -// -- This will overwrite an existing command -- -// Cypress.Commands.overwrite('visit', (originalFn, url, options) => { ... }) diff --git a/cypress/support/e2e.js b/cypress/support/e2e.js deleted file mode 100644 index 0f22b26ae..000000000 --- a/cypress/support/e2e.js +++ /dev/null @@ -1,20 +0,0 @@ -// *********************************************************** -// This example support/index.js is processed and -// loaded automatically before your test files. -// -// This is a great place to put global configuration and -// behavior that modifies Cypress. -// -// You can change the location of this file or turn off -// automatically serving support files with the -// 'supportFile' configuration option. -// -// You can read more here: -// https://on.cypress.io/configuration -// *********************************************************** - -// Import commands.js using ES2015 syntax: -// import './commands' - -// Alternatively you can use CommonJS syntax: -require('./commands') diff --git a/cypress/temp/temp-application.js b/cypress/temp/temp-application.js deleted file mode 100644 index 277b4f557..000000000 --- a/cypress/temp/temp-application.js +++ /dev/null @@ -1,3 +0,0 @@ -window.GOVUKPrototypeKit.documentReady(() => { - // Add JavaScript here -}) diff --git a/lib/build/config.json b/lib/build/config.json index 6fa5064c9..ac0ae695e 100644 --- a/lib/build/config.json +++ b/lib/build/config.json @@ -1,7 +1,6 @@ { "paths": { "public": "public", - "cypress": "cypress", "nodeModules": "node_modules", "lib": "lib" } diff --git a/lib/build/tasks.js b/lib/build/tasks.js index 51a000fd0..6f9b41a2b 100644 --- a/lib/build/tasks.js +++ b/lib/build/tasks.js @@ -152,7 +152,6 @@ function runNodemon () { script: path.join(packageDir, 'listen-on-port.js'), ignore: [ 'public/*', - 'cypress/*', `${paths.docsAssets}*`, 'node_modules/*' ] diff --git a/package-lock.json b/package-lock.json index 2e51a494a..ffdee5678 100644 --- a/package-lock.json +++ b/package-lock.json @@ -37,8 +37,6 @@ "uuid": "^8.3.2" }, "devDependencies": { - "cypress": "^10.6.0", - "eslint-plugin-cypress": "^2.12.1", "glob": "^7.1.4", "govuk-prototype-kit": "^0.0.1-alpha.3", "jest": "^28.1.1", @@ -650,79 +648,6 @@ "integrity": "sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw==", "dev": true }, - "node_modules/@colors/colors": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/@colors/colors/-/colors-1.5.0.tgz", - "integrity": "sha512-ooWCrlZP11i8GImSjTHYHLkvFDP48nS4+204nGb1RiX/WXYHmJA2III9/e2DWVabCESdW7hBAEzHRqUn9OUVvQ==", - "dev": true, - "optional": true, - "engines": { - "node": ">=0.1.90" - } - }, - "node_modules/@cypress/request": { - "version": "2.88.10", - "resolved": "https://registry.npmjs.org/@cypress/request/-/request-2.88.10.tgz", - "integrity": "sha512-Zp7F+R93N0yZyG34GutyTNr+okam7s/Fzc1+i3kcqOP8vk6OuajuE9qZJ6Rs+10/1JFtXFYMdyarnU1rZuJesg==", - "dev": true, - "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" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/@cypress/request/node_modules/qs": { - "version": "6.5.3", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.3.tgz", - "integrity": "sha512-qxXIEh4pCGfHICj1mAJQ2/2XVZkjCDTcEgfoSQxc/fYivUZxTkk7L3bDBJSoNrEzXI17oUO5Dp07ktqE5KzczA==", - "dev": true, - "engines": { - "node": ">=0.6" - } - }, - "node_modules/@cypress/xvfb": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/@cypress/xvfb/-/xvfb-1.2.4.tgz", - "integrity": "sha512-skbBzPggOVYCbnGgV+0dmBdW/s77ZkAOXIC1knS8NagwDjBrNC1LuXtQJeiN6l+m7lzmHtaoUw/ctJKdqkG57Q==", - "dev": true, - "dependencies": { - "debug": "^3.1.0", - "lodash.once": "^4.1.1" - } - }, - "node_modules/@cypress/xvfb/node_modules/debug": { - "version": "3.2.7", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", - "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", - "dev": true, - "dependencies": { - "ms": "^2.1.1" - } - }, - "node_modules/@cypress/xvfb/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/@govuk-prototype-kit/step-by-step": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/@govuk-prototype-kit/step-by-step/-/step-by-step-2.0.0.tgz", @@ -1624,18 +1549,6 @@ "resolved": "https://registry.npmjs.org/@types/qs/-/qs-6.9.7.tgz", "integrity": "sha512-FGa1F62FT09qcrueBA6qYTrJPVDzah9a+493+o2PCXsesWHIn27G98TsSMs3WPNbZIEj4+VJf6saSFpvD+3Zsw==" }, - "node_modules/@types/sinonjs__fake-timers": { - "version": "8.1.1", - "resolved": "https://registry.npmjs.org/@types/sinonjs__fake-timers/-/sinonjs__fake-timers-8.1.1.tgz", - "integrity": "sha512-0kSuKjAS0TrGLJ0M/+8MaFkGsQhZpB6pxOmvS3K8FYI72K//YmdfoW9X2qPsAKh1mkwxGD5zib9s1FIFed6E8g==", - "dev": true - }, - "node_modules/@types/sizzle": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/@types/sizzle/-/sizzle-2.3.3.tgz", - "integrity": "sha512-JYM8x9EGF163bEyhdJBpR2QX1R5naCJHC8ucJylJ3w9/CVBaskdQ8WqBf8MmQrd1kRvp/a4TS8HJ+bxzR7ZJYQ==", - "dev": true - }, "node_modules/@types/stack-utils": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/@types/stack-utils/-/stack-utils-2.0.1.tgz", @@ -1657,16 +1570,6 @@ "integrity": "sha512-iO9ZQHkZxHn4mSakYV0vFHAVDyEOIJQrV2uZ06HxEPcx+mt8swXoZHIbaaJ2crJYFfErySgktuTZ3BeLz+XmFA==", "dev": true }, - "node_modules/@types/yauzl": { - "version": "2.10.0", - "resolved": "https://registry.npmjs.org/@types/yauzl/-/yauzl-2.10.0.tgz", - "integrity": "sha512-Cn6WYCm0tXv8p6k+A8PvbDG763EDpBoTzHdA+Q/MF6H3sapGjCm9NzoaJncJS9tUKSuCoDs9XHxYYsQDgxR6kw==", - "dev": true, - "optional": true, - "dependencies": { - "@types/node": "*" - } - }, "node_modules/a-sync-waterfall": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/a-sync-waterfall/-/a-sync-waterfall-1.0.1.tgz", @@ -1820,26 +1723,6 @@ "node": ">= 8" } }, - "node_modules/arch": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/arch/-/arch-2.2.0.tgz", - "integrity": "sha512-Of/R0wqp83cgHozfIYLbBMnej79U/SVGOOyuB3VVFv1NRM/PSFMK12x9KVtiYzJqmnU5WR2qp0Z5rHb7sWGnFQ==", - "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/argparse": { "version": "1.0.10", "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", @@ -1885,24 +1768,6 @@ "resolved": "https://registry.npmjs.org/asap/-/asap-2.0.6.tgz", "integrity": "sha1-5QNHYR1+aQlDIIu9r+vLwvuGbUY=" }, - "node_modules/asn1": { - "version": "0.2.6", - "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.6.tgz", - "integrity": "sha512-ix/FxPn0MDjeyJ7i/yoHGFt/EX6LyNbxSEhPPXODPL+KB0VPk86UYfL0lMdy+KCnv+fmvIzySwaK5COwqVbWTQ==", - "dev": true, - "dependencies": { - "safer-buffer": "~2.1.0" - } - }, - "node_modules/assert-plus": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", - "integrity": "sha512-NfJ4UzBCcQGLDlQq7nHxH+tv3kyZ0hHQqF5BO6J7tNJeP5do1llPr8dZ8zHonfhAu0PHAdMkSo+8o0wxg9lZWw==", - "dev": true, - "engines": { - "node": ">=0.8" - } - }, "node_modules/astral-regex": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/astral-regex/-/astral-regex-1.0.0.tgz", @@ -1912,12 +1777,6 @@ "node": ">=4" } }, - "node_modules/async": { - "version": "3.2.4", - "resolved": "https://registry.npmjs.org/async/-/async-3.2.4.tgz", - "integrity": "sha512-iAB+JbDEGXhyIUavoDl9WP/Jj106Kz9DEn1DPgYw5ruDn0e3Wgi3sKFm55sASdGBNOQB8F59d9qQ7deqrHA8wQ==", - "dev": true - }, "node_modules/async-each-series": { "version": "0.1.1", "resolved": "https://registry.npmjs.org/async-each-series/-/async-each-series-0.1.1.tgz", @@ -1931,30 +1790,6 @@ "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=" }, - "node_modules/at-least-node": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/at-least-node/-/at-least-node-1.0.0.tgz", - "integrity": "sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg==", - "dev": true, - "engines": { - "node": ">= 4.0.0" - } - }, - "node_modules/aws-sign2": { - "version": "0.7.0", - "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.7.0.tgz", - "integrity": "sha512-08kcGqnYf/YmjoRhfxyu+CLxBjUtHLXLXX/vUfx9l2LYzG3c1m61nrpyFUZI6zeS+Li/wWMMidD9KgrqtGq3mA==", - "dev": true, - "engines": { - "node": "*" - } - }, - "node_modules/aws4": { - "version": "1.11.0", - "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.11.0.tgz", - "integrity": "sha512-xh1Rl34h6Fi1DC2WWKfxUTVqRsNnr6LsKz2+hfwDxQJWmrx8+c7ylaqBMcHfl1U1r2dsifOvKX3LQuLNZ+XSvA==", - "dev": true - }, "node_modules/axios": { "version": "0.21.4", "resolved": "https://registry.npmjs.org/axios/-/axios-0.21.4.tgz", @@ -2143,15 +1978,6 @@ "resolved": "https://registry.npmjs.org/batch/-/batch-0.6.1.tgz", "integrity": "sha1-3DQxT05nkxgJP8dgJyUl+UvyXBY=" }, - "node_modules/bcrypt-pbkdf": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz", - "integrity": "sha512-qeFIXtP4MSoi6NLqO12WfqARWWuCKi2Rn/9hJLEmtB5yTNr9DqFWkJRCf2qShWzPeAMRnOgCrq0sg/KLv5ES9w==", - "dev": true, - "dependencies": { - "tweetnacl": "^0.14.3" - } - }, "node_modules/binary-extensions": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz", @@ -2188,12 +2014,6 @@ "node": ">= 6" } }, - "node_modules/blob-util": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/blob-util/-/blob-util-2.0.2.tgz", - "integrity": "sha512-T7JQa+zsXXEa6/8ZhHcQEW1UFfVM49Ts65uBkFL6fz2QmrElqmbajIDJvuA0tEhRe5eIjpV9ZF+0RfZR9voJFQ==", - "dev": true - }, "node_modules/bluebird": { "version": "3.7.2", "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.7.2.tgz", @@ -2431,15 +2251,6 @@ "ieee754": "^1.1.13" } }, - "node_modules/buffer-crc32": { - "version": "0.2.13", - "resolved": "https://registry.npmjs.org/buffer-crc32/-/buffer-crc32-0.2.13.tgz", - "integrity": "sha512-VO9Ht/+p3SN7SKWqcrgEzjGbRSJYTx+Q1pTQC0wrWqHx0vpJraQ6GtHx8tvcg1rlK1byhU5gccxgOgj7B0TDkQ==", - "dev": true, - "engines": { - "node": "*" - } - }, "node_modules/buffer-equal-constant-time": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/buffer-equal-constant-time/-/buffer-equal-constant-time-1.0.1.tgz", @@ -2458,15 +2269,6 @@ "node": ">= 0.8" } }, - "node_modules/cachedir": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/cachedir/-/cachedir-2.3.0.tgz", - "integrity": "sha512-A+Fezp4zxnit6FanDmv9EqXNAi3vt9DWp51/71UEhXukb7QUuvtv9344h91dyAxuTLoSYJFU299qzR3tzwPAhw==", - "dev": true, - "engines": { - "node": ">=6" - } - }, "node_modules/call-bind": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz", @@ -2618,75 +2420,6 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/cli-table3": { - "version": "0.6.2", - "resolved": "https://registry.npmjs.org/cli-table3/-/cli-table3-0.6.2.tgz", - "integrity": "sha512-QyavHCaIC80cMivimWu4aWHilIpiDpfm3hGmqAmXVL1UsnbLuBSMd21hTX6VY4ZSDSM73ESLeF8TOYId3rBTbw==", - "dev": true, - "dependencies": { - "string-width": "^4.2.0" - }, - "engines": { - "node": "10.* || >= 12.*" - }, - "optionalDependencies": { - "@colors/colors": "1.5.0" - } - }, - "node_modules/cli-truncate": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/cli-truncate/-/cli-truncate-2.1.0.tgz", - "integrity": "sha512-n8fOixwDD6b/ObinzTrp1ZKFzbgvKZvuz/TvejnLn1aQfC6r52XEx85FmuC+3HI+JM7coBRXUvNqEU2PHVrHpg==", - "dev": true, - "dependencies": { - "slice-ansi": "^3.0.0", - "string-width": "^4.2.0" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/cli-truncate/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/cli-truncate/node_modules/astral-regex": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/astral-regex/-/astral-regex-2.0.0.tgz", - "integrity": "sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/cli-truncate/node_modules/slice-ansi": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-3.0.0.tgz", - "integrity": "sha512-pSyv7bSTC7ig9Dcgbw9AuRNUb5k5V6oDudjZoMBSr13qpLBG7tB+zgCkARjq7xIUgdz5P1Qe8u+rSGdouOOIyQ==", - "dev": true, - "dependencies": { - "ansi-styles": "^4.0.0", - "astral-regex": "^2.0.0", - "is-fullwidth-code-point": "^3.0.0" - }, - "engines": { - "node": ">=8" - } - }, "node_modules/cli-width": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/cli-width/-/cli-width-3.0.0.tgz", @@ -2785,12 +2518,6 @@ "color-support": "bin.js" } }, - "node_modules/colorette": { - "version": "2.0.19", - "resolved": "https://registry.npmjs.org/colorette/-/colorette-2.0.19.tgz", - "integrity": "sha512-3tlv/dIP7FWvj3BsbHrGLJ6l/oKh1O3TcgBqMn+yyCagOxc23fyzDS6HypQbgxWbkpDnf52p1LuR4eWDQ/K9WQ==", - "dev": true - }, "node_modules/combined-stream": { "version": "1.0.8", "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", @@ -2807,15 +2534,6 @@ "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==" }, - "node_modules/common-tags": { - "version": "1.8.2", - "resolved": "https://registry.npmjs.org/common-tags/-/common-tags-1.8.2.tgz", - "integrity": "sha512-gk/Z852D2Wtb//0I+kRFNKKE9dIIVirjoqPoA1wJU+XePVXZfGeBpk45+A1rKO4Q43prqWBNY/MiIeRLbPWUaA==", - "dev": true, - "engines": { - "node": ">=4.0.0" - } - }, "node_modules/component-emitter": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.3.0.tgz", @@ -2993,364 +2711,68 @@ "node": ">= 8" } }, - "node_modules/cypress": { - "version": "10.6.0", - "resolved": "https://registry.npmjs.org/cypress/-/cypress-10.6.0.tgz", - "integrity": "sha512-6sOpHjostp8gcLO34p6r/Ci342lBs8S5z9/eb3ZCQ22w2cIhMWGUoGKkosabPBfKcvRS9BE4UxybBtlIs8gTQA==", - "dev": true, - "hasInstallScript": true, + "node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", "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" - }, - "bin": { - "cypress": "bin/cypress" - }, + "ms": "2.0.0" + } + }, + "node_modules/debug-log": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/debug-log/-/debug-log-1.0.1.tgz", + "integrity": "sha1-IwdjLUwEOCuN+KMvcLiVBG1SdF8=", + "dev": true, "engines": { - "node": ">=12.0.0" + "node": ">=0.10.0" } }, - "node_modules/cypress/node_modules/@types/node": { - "version": "14.18.26", - "resolved": "https://registry.npmjs.org/@types/node/-/node-14.18.26.tgz", - "integrity": "sha512-0b+utRBSYj8L7XAp0d+DX7lI4cSmowNaaTkk6/1SKzbKkG+doLuPusB9EOvzLJ8ahJSk03bTLIL6cWaEd4dBKA==", + "node_modules/dedent": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/dedent/-/dedent-0.7.0.tgz", + "integrity": "sha512-Q6fKUPqnAHAyhiUgFU7BUzLiv0kd8saH9al7tnu5Q/okj6dnupxyTgFIBjVzJATdfIAm9NAsvXNzjaKa+bxVyA==", + "dev": true + }, + "node_modules/deep-is": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", + "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==", "dev": true }, - "node_modules/cypress/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==", + "node_modules/deepmerge": { + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.2.2.tgz", + "integrity": "sha512-FJ3UgI4gIl+PHZm53knsuSFpE+nESMr7M4v9QcgB7S63Kj/6WqMiFQJpBBYz1Pt+66bZpP3Q7Lye0Oo9MPKEdg==", "dev": true, - "dependencies": { - "color-convert": "^2.0.1" - }, "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" + "node": ">=0.10.0" } }, - "node_modules/cypress/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, + "node_modules/defaults": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/defaults/-/defaults-1.0.3.tgz", + "integrity": "sha1-xlYFHpgX2f8I7YgUd/P+QBnz730=", "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" + "clone": "^1.0.2" } }, - "node_modules/cypress/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==", + "node_modules/define-properties": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.3.tgz", + "integrity": "sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ==", "dev": true, "dependencies": { - "has-flag": "^4.0.0" + "object-keys": "^1.0.12" }, "engines": { - "node": ">=8" + "node": ">= 0.4" } }, - "node_modules/cypress/node_modules/ci-info": { - "version": "3.3.2", - "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.3.2.tgz", - "integrity": "sha512-xmDt/QIAdeZ9+nfdPsaBCpMvHNLFiLdjj59qjqn+6iPe6YmHGQ35sBnQ8uslRBXFmXkiZQOJRjvQeoGppoTjjg==", - "dev": true - }, - "node_modules/cypress/node_modules/commander": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-5.1.0.tgz", - "integrity": "sha512-P0CysNDQ7rtVw4QIQtm+MRxV66vKFSvlsQvGYXZWR3qFU0jlMKHZZZgw8e+8DSah4UDKMqnknRDQz+xuQXQ/Zg==", - "dev": true, - "engines": { - "node": ">= 6" - } - }, - "node_modules/cypress/node_modules/debug": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", - "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", - "dev": true, - "dependencies": { - "ms": "2.1.2" - }, - "engines": { - "node": ">=6.0" - }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } - } - }, - "node_modules/cypress/node_modules/execa": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/execa/-/execa-4.1.0.tgz", - "integrity": "sha512-j5W0//W7f8UxAn8hXVnwG8tLwdiUy4FJLcSupCg6maBYZDpyBvTApK7KyuI4bKj8KOh1r2YH+6ucuYtJv1bTZA==", - "dev": true, - "dependencies": { - "cross-spawn": "^7.0.0", - "get-stream": "^5.0.0", - "human-signals": "^1.1.1", - "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", - "strip-final-newline": "^2.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sindresorhus/execa?sponsor=1" - } - }, - "node_modules/cypress/node_modules/fs-extra": { - "version": "9.1.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz", - "integrity": "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==", - "dev": true, - "dependencies": { - "at-least-node": "^1.0.0", - "graceful-fs": "^4.2.0", - "jsonfile": "^6.0.1", - "universalify": "^2.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/cypress/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==", - "dev": true, - "dependencies": { - "pump": "^3.0.0" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/cypress/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/cypress/node_modules/human-signals": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-1.1.1.tgz", - "integrity": "sha512-SEQu7vl8KjNL2eoGBLF3+wAjpsNfA9XMlXAYj/3EdaNfAlxKthD1xjEQfGOUhllCGGJVNY34bRr6lPINhNjyZw==", - "dev": true, - "engines": { - "node": ">=8.12.0" - } - }, - "node_modules/cypress/node_modules/is-ci": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/is-ci/-/is-ci-3.0.1.tgz", - "integrity": "sha512-ZYvCgrefwqoQ6yTyYUbQu64HsITZ3NfKX1lzaEYdkTDcfKzzCI/wthRRYKkdjHKFVgNiXKAKm65Zo1pk2as/QQ==", - "dev": true, - "dependencies": { - "ci-info": "^3.2.0" - }, - "bin": { - "is-ci": "bin.js" - } - }, - "node_modules/cypress/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==", - "dev": true - }, - "node_modules/cypress/node_modules/semver": { - "version": "7.3.7", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.7.tgz", - "integrity": "sha512-QlYTucUYOews+WeEujDoEGziz4K6c47V/Bd+LjSSYcA94p+DmINdf7ncaUinThfvZyu13lN9OY1XDxt8C0Tw0g==", - "dev": true, - "dependencies": { - "lru-cache": "^6.0.0" - }, - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/cypress/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/cypress/node_modules/tmp": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.2.1.tgz", - "integrity": "sha512-76SUhtfqR2Ijn+xllcI5P1oyannHNHByD80W1q447gU3mp9G9PSpGdWmjUOHRDPiHYacIk66W7ubDTuPF3BEtQ==", - "dev": true, - "dependencies": { - "rimraf": "^3.0.0" - }, - "engines": { - "node": ">=8.17.0" - } - }, - "node_modules/cypress/node_modules/universalify": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz", - "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==", - "dev": true, - "engines": { - "node": ">= 10.0.0" - } - }, - "node_modules/dashdash": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz", - "integrity": "sha512-jRFi8UDGo6j+odZiEpjazZaWqEal3w/basFjQHQEwVtZJGDpxbH1MeYluwCS8Xq5wmLJooDlMgvVarmWfGM44g==", - "dev": true, - "dependencies": { - "assert-plus": "^1.0.0" - }, - "engines": { - "node": ">=0.10" - } - }, - "node_modules/dayjs": { - "version": "1.11.5", - "resolved": "https://registry.npmjs.org/dayjs/-/dayjs-1.11.5.tgz", - "integrity": "sha512-CAdX5Q3YW3Gclyo5Vpqkgpj8fSdLQcRuzfX6mC6Phy0nfJ0eGYOeS7m4mt2plDWLAtA4TqTakvbboHvUxfe4iA==", - "dev": true - }, - "node_modules/debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dependencies": { - "ms": "2.0.0" - } - }, - "node_modules/debug-log": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/debug-log/-/debug-log-1.0.1.tgz", - "integrity": "sha1-IwdjLUwEOCuN+KMvcLiVBG1SdF8=", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/dedent": { - "version": "0.7.0", - "resolved": "https://registry.npmjs.org/dedent/-/dedent-0.7.0.tgz", - "integrity": "sha512-Q6fKUPqnAHAyhiUgFU7BUzLiv0kd8saH9al7tnu5Q/okj6dnupxyTgFIBjVzJATdfIAm9NAsvXNzjaKa+bxVyA==", - "dev": true - }, - "node_modules/deep-is": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", - "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==", - "dev": true - }, - "node_modules/deepmerge": { - "version": "4.2.2", - "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.2.2.tgz", - "integrity": "sha512-FJ3UgI4gIl+PHZm53knsuSFpE+nESMr7M4v9QcgB7S63Kj/6WqMiFQJpBBYz1Pt+66bZpP3Q7Lye0Oo9MPKEdg==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/defaults": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/defaults/-/defaults-1.0.3.tgz", - "integrity": "sha1-xlYFHpgX2f8I7YgUd/P+QBnz730=", - "dependencies": { - "clone": "^1.0.2" - } - }, - "node_modules/define-properties": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.3.tgz", - "integrity": "sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ==", - "dev": true, - "dependencies": { - "object-keys": "^1.0.12" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/deglob": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/deglob/-/deglob-4.0.1.tgz", - "integrity": "sha512-/g+RDZ7yf2HvoW+E5Cy+K94YhgcFgr6C8LuHZD1O5HoNPkf3KY6RfXJ0DBGlB/NkLi5gml+G9zqRzk9S0mHZCg==", + "node_modules/deglob": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/deglob/-/deglob-4.0.1.tgz", + "integrity": "sha512-/g+RDZ7yf2HvoW+E5Cy+K94YhgcFgr6C8LuHZD1O5HoNPkf3KY6RfXJ0DBGlB/NkLi5gml+G9zqRzk9S0mHZCg==", "dev": true, "dependencies": { "find-root": "^1.0.0", @@ -3506,16 +2928,6 @@ "node": ">= 0.8.0" } }, - "node_modules/ecc-jsbn": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz", - "integrity": "sha512-eh9O+hwRHNbG4BLTjEl3nw044CkGm5X6LoaCf7LPp7UU8Qrt47JYNi6nPX8xjW97TKGKm1ouctg0QSpZe9qrnw==", - "dev": true, - "dependencies": { - "jsbn": "~0.1.0", - "safer-buffer": "^2.1.0" - } - }, "node_modules/ecdsa-sig-formatter": { "version": "1.0.11", "resolved": "https://registry.npmjs.org/ecdsa-sig-formatter/-/ecdsa-sig-formatter-1.0.11.tgz", @@ -3560,15 +2972,6 @@ "node": ">= 0.8" } }, - "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==", - "dev": true, - "dependencies": { - "once": "^1.4.0" - } - }, "node_modules/engine.io": { "version": "6.2.1", "resolved": "https://registry.npmjs.org/engine.io/-/engine.io-6.2.1.tgz", @@ -3654,18 +3057,6 @@ "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" }, - "node_modules/enquirer": { - "version": "2.3.6", - "resolved": "https://registry.npmjs.org/enquirer/-/enquirer-2.3.6.tgz", - "integrity": "sha512-yjNnPr315/FjS4zIsUxYguYUPP2e1NK4d7E7ZOLiyYCcbFBiTMyID+2wvm2w6+pZ/odMA7cRkjhsPbltwBOrLg==", - "dev": true, - "dependencies": { - "ansi-colors": "^4.1.1" - }, - "engines": { - "node": ">=8.6" - } - }, "node_modules/error-ex": { "version": "1.3.2", "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", @@ -3957,18 +3348,6 @@ "node": ">=4" } }, - "node_modules/eslint-plugin-cypress": { - "version": "2.12.1", - "resolved": "https://registry.npmjs.org/eslint-plugin-cypress/-/eslint-plugin-cypress-2.12.1.tgz", - "integrity": "sha512-c2W/uPADl5kospNDihgiLc7n87t5XhUbFDoTl6CfVkmG+kDAb5Ux10V9PoLPu9N+r7znpc+iQlcmAqT1A/89HA==", - "dev": true, - "dependencies": { - "globals": "^11.12.0" - }, - "peerDependencies": { - "eslint": ">= 3.2.1" - } - }, "node_modules/eslint-plugin-es": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/eslint-plugin-es/-/eslint-plugin-es-2.0.0.tgz", @@ -4767,12 +4146,6 @@ "through": "~2.3.1" } }, - "node_modules/eventemitter2": { - "version": "6.4.7", - "resolved": "https://registry.npmjs.org/eventemitter2/-/eventemitter2-6.4.7.tgz", - "integrity": "sha512-tYUSVOGeQPKt/eC1ABfhHy5Xd96N3oIijJvN3O9+TsC28T5V9yX9oEfEK5faP0EFSNVOG97qtAS68GBrQB2hDg==", - "dev": true - }, "node_modules/eventemitter3": { "version": "4.0.7", "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-4.0.7.tgz", @@ -4813,18 +4186,6 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/executable": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/executable/-/executable-4.1.1.tgz", - "integrity": "sha512-8iA79xD3uAch729dUG8xaaBBFGaEa0wdD2VkYLFHwlqosEj/jT66AzcreRDSgV7ehnNLBW2WR5jIXwGKjVdTLg==", - "dev": true, - "dependencies": { - "pify": "^2.2.0" - }, - "engines": { - "node": ">=4" - } - }, "node_modules/exit": { "version": "0.1.2", "resolved": "https://registry.npmjs.org/exit/-/exit-0.1.2.tgz", @@ -5077,12 +4438,6 @@ "node": ">= 0.8" } }, - "node_modules/extend": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", - "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==", - "dev": true - }, "node_modules/external-editor": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/external-editor/-/external-editor-3.1.0.tgz", @@ -5096,73 +4451,6 @@ "node": ">=4" } }, - "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==", - "dev": true, - "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/debug": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", - "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", - "dev": true, - "dependencies": { - "ms": "2.1.2" - }, - "engines": { - "node": ">=6.0" - }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } - } - }, - "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==", - "dev": true, - "dependencies": { - "pump": "^3.0.0" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/extract-zip/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==", - "dev": true - }, - "node_modules/extsprintf": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz", - "integrity": "sha512-11Ndz7Nv+mvAC1j0ktTa7fAb0vLyGGX+rMHNBYQviQDGU0Hw7lhctJANqbPhu9nV9/izT/IntTgZ7Im/9LJs9g==", - "dev": true, - "engines": [ - "node >=0.6.0" - ] - }, "node_modules/fancy-log": { "version": "1.3.3", "resolved": "https://registry.npmjs.org/fancy-log/-/fancy-log-1.3.3.tgz", @@ -5221,20 +4509,11 @@ }, "node_modules/fb-watchman": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/fb-watchman/-/fb-watchman-2.0.1.tgz", - "integrity": "sha512-DkPJKQeY6kKwmuMretBhr7G6Vodr7bFwDYTXIkfG1gjvNpaxBTQV3PbXg6bR1c1UP4jPOX0jHUbbHANL9vRjVg==", - "dev": true, - "dependencies": { - "bser": "2.1.1" - } - }, - "node_modules/fd-slicer": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/fd-slicer/-/fd-slicer-1.1.0.tgz", - "integrity": "sha512-cE1qsB/VwyQozZ+q1dGxR8LBYNZeofhEdUNGSMbQD3Gw2lAzX9Zb3uIU6Ebc/Fmyjo9AWWfnn0AUCHqtevs/8g==", + "resolved": "https://registry.npmjs.org/fb-watchman/-/fb-watchman-2.0.1.tgz", + "integrity": "sha512-DkPJKQeY6kKwmuMretBhr7G6Vodr7bFwDYTXIkfG1gjvNpaxBTQV3PbXg6bR1c1UP4jPOX0jHUbbHANL9vRjVg==", "dev": true, "dependencies": { - "pend": "~1.2.0" + "bser": "2.1.1" } }, "node_modules/figures": { @@ -5369,15 +4648,6 @@ } } }, - "node_modules/forever-agent": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz", - "integrity": "sha512-j0KLYPhm6zeac4lz3oJ3o65qvgQCcPubiyotZrXqEaG4hNagNYO8qdlUrX5vwqv9ohqeT/Z3j6+yW067yWWdUw==", - "dev": true, - "engines": { - "node": "*" - } - }, "node_modules/form-data": { "version": "2.3.3", "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.3.3.tgz", @@ -5541,24 +4811,6 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/getos": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/getos/-/getos-3.2.1.tgz", - "integrity": "sha512-U56CfOK17OKgTVqozZjUKNdkfEv6jk5WISBJ8SHoagjE6L69zOwl3Z+O8myjY9MEW3i2HPWQBt/LTbCgcC973Q==", - "dev": true, - "dependencies": { - "async": "^3.2.0" - } - }, - "node_modules/getpass": { - "version": "0.1.7", - "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz", - "integrity": "sha512-0fzj9JxOLfJ+XGLhR8ze3unN0KZCgZwiSSDz168VERjK8Wl8kVSdcu2kspd4s4wtAa1y/qrVRiAA0WclVsu0ng==", - "dev": true, - "dependencies": { - "assert-plus": "^1.0.0" - } - }, "node_modules/glob": { "version": "7.2.0", "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.0.tgz", @@ -5589,30 +4841,6 @@ "node": ">= 6" } }, - "node_modules/global-dirs": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/global-dirs/-/global-dirs-3.0.0.tgz", - "integrity": "sha512-v8ho2DS5RiCjftj1nD9NmnfaOzTdud7RRnVd9kFNOjqZbISlx5DQ+OrTkywgd0dIt7oFCvKetZSHoHcP3sDdiA==", - "dev": true, - "dependencies": { - "ini": "2.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/global-dirs/node_modules/ini": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ini/-/ini-2.0.0.tgz", - "integrity": "sha512-7PnF4oN3CvZF23ADhA5wRaYEQpJ8qygSkbtTXWBeXWXmEVRXK+1ITciHWwHhsjv1TmW0MgacIv6hEi5pX5NQdA==", - "dev": true, - "engines": { - "node": ">=10" - } - }, "node_modules/globals": { "version": "11.12.0", "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", @@ -5872,20 +5100,6 @@ "resolved": "https://registry.npmjs.org/@types/node/-/node-10.17.60.tgz", "integrity": "sha512-F0KIgDJfy2nA3zMLmWGKxcH2ZVEtCZXHHdOQs2gSaQ27+lNeEfGxzkIw90aXswATX7AZ33tahPbzy6KAfUreVw==" }, - "node_modules/http-signature": { - "version": "1.3.6", - "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.3.6.tgz", - "integrity": "sha512-3adrsD6zqo4GsTqtO7FyrejHNv+NgiIfAfv68+jVlFmSr9OGy7zrxONceFRLKvnnZA5jbxQBX1u9PpB6Wi32Gw==", - "dev": true, - "dependencies": { - "assert-plus": "^1.0.0", - "jsprim": "^2.0.2", - "sshpk": "^1.14.1" - }, - "engines": { - "node": ">=0.10" - } - }, "node_modules/human-signals": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-2.1.0.tgz", @@ -6270,22 +5484,6 @@ "node": ">=0.10.0" } }, - "node_modules/is-installed-globally": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/is-installed-globally/-/is-installed-globally-0.4.0.tgz", - "integrity": "sha512-iwGqO3J21aaSkC7jWnHP/difazwS7SFeIqxv6wEtLU8Y5KlzFTjyqcSIT0d8s4+dDhKytsk9PJZ2BkS5eZwQRQ==", - "dev": true, - "dependencies": { - "global-dirs": "^3.0.0", - "is-path-inside": "^3.0.2" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/is-interactive": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/is-interactive/-/is-interactive-1.0.0.tgz", @@ -6420,12 +5618,6 @@ "url": "https://github.com/sponsors/ljharb" } }, - "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-unicode-supported": { "version": "0.1.0", "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz", @@ -6467,12 +5659,6 @@ "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=" }, - "node_modules/isstream": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz", - "integrity": "sha512-Yljz7ffyPbrLpLngrMtZ7NduUgVvi6wG9RJ9IUcyCd59YQ911PBJphODUcbOVbqYfxe1wuYf/LJ8PauMRwsM/g==", - "dev": true - }, "node_modules/istanbul-lib-coverage": { "version": "3.2.0", "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-3.2.0.tgz", @@ -7972,12 +7158,6 @@ "js-yaml": "bin/js-yaml.js" } }, - "node_modules/jsbn": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz", - "integrity": "sha512-UVU9dibq2JcFWxQPA6KCqj5O42VOmAY3zQUfEKxU0KpTGXwNoCjkX1e13eHNvw/xPynt6pU0rZ1htjWTNTSXsg==", - "dev": true - }, "node_modules/jsesc": { "version": "2.5.2", "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz", @@ -8002,12 +7182,6 @@ "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==", "dev": true }, - "node_modules/json-schema": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.4.0.tgz", - "integrity": "sha512-es94M3nTIfsEPisRafak+HDLfHXnKBhV3vU5eqPcS3flIWqcxJWgXHXiey3YrpaNsanY5ei1VoYEbOzijuq9BA==", - "dev": true - }, "node_modules/json-schema-traverse": { "version": "0.4.1", "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", @@ -8020,12 +7194,6 @@ "integrity": "sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE=", "dev": true }, - "node_modules/json-stringify-safe": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz", - "integrity": "sha512-ZClg6AaYvamvYEE82d3Iyd3vSSIjQ+odgjaTzRuO3s7toCdFKczob2i0zCh7JE8kWn17yvAWhUVxvqGwUalsRA==", - "dev": true - }, "node_modules/json5": { "version": "2.2.1", "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.1.tgz", @@ -8083,21 +7251,6 @@ "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==" }, - "node_modules/jsprim": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-2.0.2.tgz", - "integrity": "sha512-gqXddjPqQ6G40VdnI6T6yObEC+pDNvyP95wdQhkWkg7crHH3km5qP1FsOXEkzEQwnz6gz5qGTn1c2Y52wP3OyQ==", - "dev": true, - "engines": [ - "node >=0.6.0" - ], - "dependencies": { - "assert-plus": "1.0.0", - "extsprintf": "1.3.0", - "json-schema": "0.4.0", - "verror": "1.10.0" - } - }, "node_modules/jsx-ast-utils": { "version": "2.4.1", "resolved": "https://registry.npmjs.org/jsx-ast-utils/-/jsx-ast-utils-2.4.1.tgz", @@ -8198,42 +7351,6 @@ "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==", "dev": true }, - "node_modules/listr2": { - "version": "3.14.0", - "resolved": "https://registry.npmjs.org/listr2/-/listr2-3.14.0.tgz", - "integrity": "sha512-TyWI8G99GX9GjE54cJ+RrNMcIFBfwMPxc3XTFiAYGN4s10hWROGtOg7+O6u6LE3mNkyld7RSLE6nrKBvTfcs3g==", - "dev": true, - "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" - }, - "engines": { - "node": ">=10.0.0" - }, - "peerDependencies": { - "enquirer": ">= 2.3.0 < 3" - }, - "peerDependenciesMeta": { - "enquirer": { - "optional": true - } - } - }, - "node_modules/listr2/node_modules/rxjs": { - "version": "7.5.6", - "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-7.5.6.tgz", - "integrity": "sha512-dnyv2/YsXhnm461G+R/Pe5bWP41Nm6LBXEYWI6eiFP4fiwx6WRI/CD0zbdVAudd9xwLEF2IDcKXLHit0FYjUzw==", - "dev": true, - "dependencies": { - "tslib": "^2.1.0" - } - }, "node_modules/localtunnel": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/localtunnel/-/localtunnel-2.0.2.tgz", @@ -8409,100 +7526,6 @@ "node": ">=8" } }, - "node_modules/log-update": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/log-update/-/log-update-4.0.0.tgz", - "integrity": "sha512-9fkkDevMefjg0mmzWFBW8YkFP91OrizzkW3diF7CpG+S2EYdy4+TVfGwz1zeF8x7hCx1ovSPTOE9Ngib74qqUg==", - "dev": true, - "dependencies": { - "ansi-escapes": "^4.3.0", - "cli-cursor": "^3.1.0", - "slice-ansi": "^4.0.0", - "wrap-ansi": "^6.2.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/log-update/node_modules/ansi-regex": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", - "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/log-update/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/log-update/node_modules/astral-regex": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/astral-regex/-/astral-regex-2.0.0.tgz", - "integrity": "sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/log-update/node_modules/slice-ansi": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-4.0.0.tgz", - "integrity": "sha512-qMCMfhY040cVHT43K9BFygqYbUPFZKHOg7K73mtTWJRb8pyP3fzf4Ixd5SzdEJQ6MRUg/WBnOLxghZtKKurENQ==", - "dev": true, - "dependencies": { - "ansi-styles": "^4.0.0", - "astral-regex": "^2.0.0", - "is-fullwidth-code-point": "^3.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/slice-ansi?sponsor=1" - } - }, - "node_modules/log-update/node_modules/strip-ansi": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", - "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", - "dev": true, - "dependencies": { - "ansi-regex": "^5.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/log-update/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/loose-envify": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz", @@ -9189,12 +8212,6 @@ "node": ">=0.10.0" } }, - "node_modules/ospath": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/ospath/-/ospath-1.2.2.tgz", - "integrity": "sha512-o6E5qJV5zkAbIDNhGSIlyOhScKXgQrSRMilfph0clDfM0nEnBOlKlH4sWDmG95BW/CvwNz0vmm7dJVtU2KlMiA==", - "dev": true - }, "node_modules/p-limit": { "version": "2.3.0", "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", @@ -9344,18 +8361,6 @@ "through": "~2.3" } }, - "node_modules/pend": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/pend/-/pend-1.2.0.tgz", - "integrity": "sha512-F3asv42UuXchdzt+xXqfW1OGlVBe+mxa2mqI0pg5yAHZPvFmY3Y6drSf/GQ1A86WgWEN9Kzh/WrgKa6iGcHXLg==", - "dev": true - }, - "node_modules/performance-now": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz", - "integrity": "sha512-7EAHlyLHI56VEIdK57uwHdHKIaAGbnXPiw0yWbarQZOKaKpvUIgW0jWRVLiatnM+XXlSwsanIBH/hzGMJulMow==", - "dev": true - }, "node_modules/picocolors": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", @@ -9562,18 +8567,6 @@ "node": ">= 0.8.0" } }, - "node_modules/pretty-bytes": { - "version": "5.6.0", - "resolved": "https://registry.npmjs.org/pretty-bytes/-/pretty-bytes-5.6.0.tgz", - "integrity": "sha512-FFw039TmrBqFK8ma/7OL3sDz/VytdtJr044/QUJtH0wK9lb9jLq9tJyIxUwtQJHwar2BqtiA4iCWSwo9JLkzFg==", - "dev": true, - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/pretty-format": { "version": "28.1.1", "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-28.1.1.tgz", @@ -9674,12 +8667,6 @@ "node": ">= 0.10" } }, - "node_modules/proxy-from-env": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.0.0.tgz", - "integrity": "sha512-F2JHgJQ1iqwnHDcQjVBsq3n/uoaFL+iPW/eAeL7kVxy/2RrWaN4WroKjjvbsoRtv0ftelNyC01bjRhn/bhcf4A==", - "dev": true - }, "node_modules/ps-tree": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/ps-tree/-/ps-tree-1.2.0.tgz", @@ -9700,27 +8687,11 @@ "resolved": "https://registry.npmjs.org/pseudomap/-/pseudomap-1.0.2.tgz", "integrity": "sha512-b/YwNhb8lk1Zz2+bXXpS/LK9OisiZZ1SNsSLxN1x2OXVEhW2Ckr/7mWE5vrC1ZTiJlD9g19jWszTmJsB+oEpFQ==" }, - "node_modules/psl": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/psl/-/psl-1.9.0.tgz", - "integrity": "sha512-E/ZsdU4HLs/68gYzgGTkMicWTLPdAftJLfJFlLUAAKZGkStNU72sZjT66SnMDVOfOWY/YAoiD7Jxa9iHvngcag==", - "dev": true - }, "node_modules/pstree.remy": { "version": "1.1.8", "resolved": "https://registry.npmjs.org/pstree.remy/-/pstree.remy-1.1.8.tgz", "integrity": "sha512-77DZwxQmxKnu3aR542U+X8FypNzbfJ+C5XQDk3uWjWxn6151aIMGthWYRXTqT1E5oJvg+ljaa2OJi+VfvCOQ8w==" }, - "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==", - "dev": true, - "dependencies": { - "end-of-stream": "^1.1.0", - "once": "^1.3.1" - } - }, "node_modules/punycode": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", @@ -9833,15 +8804,6 @@ "node": ">=6.5.0" } }, - "node_modules/request-progress": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/request-progress/-/request-progress-3.0.0.tgz", - "integrity": "sha512-MnWzEHHaxHO2iWiQuHrUPBi/1WeBf5PkxQqNyNvLl9VAYSdXkP8tQ3pBSeCPD+yw0v0Aq1zosWLz0BdeXpWwZg==", - "dev": true, - "dependencies": { - "throttleit": "^1.0.0" - } - }, "node_modules/require-dir": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/require-dir/-/require-dir-1.2.0.tgz", @@ -9939,12 +8901,6 @@ "node": ">=0.10.0" } }, - "node_modules/rfdc": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/rfdc/-/rfdc-1.3.0.tgz", - "integrity": "sha512-V2hovdzFbOi77/WajaSMXk2OLm+xNIeQdMMuB7icj7bk6zi2F8GGAxigcnDFpJHbNyNcgyJDiP+8nOrY5cZGrA==", - "dev": true - }, "node_modules/rimraf": { "version": "3.0.2", "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", @@ -10483,31 +9439,6 @@ "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=" }, - "node_modules/sshpk": { - "version": "1.17.0", - "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.17.0.tgz", - "integrity": "sha512-/9HIEs1ZXGhSPE8X6Ccm7Nam1z8KcoCqPdI7ecm1N33EzAetWahvQWVqLZtaZQ+IDKX4IyA2o0gBzqIMkAagHQ==", - "dev": true, - "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" - }, - "bin": { - "sshpk-conv": "bin/sshpk-conv", - "sshpk-sign": "bin/sshpk-sign", - "sshpk-verify": "bin/sshpk-verify" - }, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/stack-utils": { "version": "2.0.5", "resolved": "https://registry.npmjs.org/stack-utils/-/stack-utils-2.0.5.tgz", @@ -11130,12 +10061,6 @@ "integrity": "sha512-8hmiGIJMDlwjg7dlJ4yKGLK8EsYqKgPWbG3b4wjJddKNwc7N7Dpn08Df4szr/sZdMVeOstrdYSsqzX6BYbcB+w==", "dev": true }, - "node_modules/throttleit": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/throttleit/-/throttleit-1.0.0.tgz", - "integrity": "sha512-rkTVqu6IjfQ/6+uNuuc3sZek4CEYxTJom3IktzgdSxcZqdARuebbA/f4QmAxMQIxqq9ZLEUkSYqvuk1I6VKq4g==", - "dev": true - }, "node_modules/through": { "version": "2.3.8", "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", @@ -11206,42 +10131,11 @@ "nodetouch": "bin/nodetouch.js" } }, - "node_modules/tough-cookie": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.5.0.tgz", - "integrity": "sha512-nlLsUzgm1kfLXSXfRZMc1KLAugd4hqJHDTvc2hDIwS3mZAfMEuMbc03SujMF+GEcpaX/qboeycw6iO8JwVv2+g==", - "dev": true, - "dependencies": { - "psl": "^1.1.28", - "punycode": "^2.1.1" - }, - "engines": { - "node": ">=0.8" - } - }, "node_modules/tslib": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.1.0.tgz", "integrity": "sha512-hcVC3wYEziELGGmEEXue7D75zbwIIVUMWAVbHItGPx0ziyXxrOMQx4rQEVEV45Ut/1IotuEvwqPopzIOkDMf0A==" }, - "node_modules/tunnel-agent": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz", - "integrity": "sha512-McnNiV1l8RYeY8tBgEpuodCC1mLUdbSN+CYBL7kJsJNInOP8UjDDEwdk6Mw60vdLLrr5NHKZhMAOSrR2NZuQ+w==", - "dev": true, - "dependencies": { - "safe-buffer": "^5.0.1" - }, - "engines": { - "node": "*" - } - }, - "node_modules/tweetnacl": { - "version": "0.14.5", - "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz", - "integrity": "sha512-KXXFFdAbFXY4geFIwoyNK+f5Z1b7swfXABfL7HXCmoIWMKU3dmS26672A4EeQtDzLKy7SXmfBu51JolvEKwtGA==", - "dev": true - }, "node_modules/type-check": { "version": "0.3.2", "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.3.2.tgz", @@ -11401,15 +10295,6 @@ "node": ">= 0.8" } }, - "node_modules/untildify": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/untildify/-/untildify-4.0.0.tgz", - "integrity": "sha512-KK8xQ1mkzZeg9inewmFVDNkg3l5LUhoq9kN6iWYB/CC9YMG8HA+c1Q8HwDe6dEX7kErrEVNVBO3fWsVq5iDgtw==", - "dev": true, - "engines": { - "node": ">=8" - } - }, "node_modules/uri-js": { "version": "4.4.1", "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", @@ -11478,26 +10363,6 @@ "node": ">= 0.8" } }, - "node_modules/verror": { - "version": "1.10.0", - "resolved": "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz", - "integrity": "sha512-ZZKSmDAEFOijERBLkmYfJ+vmk3w+7hOLYDNkRCuRuMJGEmqYNCNLyBBFwWKVMhfwaEF3WOd0Zlw86U/WC/+nYw==", - "dev": true, - "engines": [ - "node >=0.6.0" - ], - "dependencies": { - "assert-plus": "^1.0.0", - "core-util-is": "1.0.2", - "extsprintf": "^1.2.0" - } - }, - "node_modules/verror/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": "sha512-3lqz5YjWTYnW6dlDa5TLaTCcShfar1e40rmcJVwCBJC6mWlFuj0eCHIElmG1g5kyuJ/GD+8Wn4FFCcz4gJPfaQ==", - "dev": true - }, "node_modules/wait-on": { "version": "6.0.1", "resolved": "https://registry.npmjs.org/wait-on/-/wait-on-6.0.1.tgz", @@ -11736,19 +10601,9 @@ "node_modules/yargs/node_modules/yargs-parser": { "version": "21.0.1", "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.0.1.tgz", - "integrity": "sha512-9BK1jFpLzJROCI5TzwZL/TU4gqjK5xiHV/RfWLOahrjAko/e4DJkRDZQXfvqAsiZzzYhgAzbgz6lg48jcm4GLg==", - "engines": { - "node": ">=12" - } - }, - "node_modules/yauzl": { - "version": "2.10.0", - "resolved": "https://registry.npmjs.org/yauzl/-/yauzl-2.10.0.tgz", - "integrity": "sha512-p4a9I6X6nu6IhoGmBqAcbJy1mlC4j27vEPZX9F4L4/vZT3Lyq1VkFHw/V/PUcB9Buo+DG3iHkT0x3Qya58zc3g==", - "dev": true, - "dependencies": { - "buffer-crc32": "~0.2.3", - "fd-slicer": "~1.1.0" + "integrity": "sha512-9BK1jFpLzJROCI5TzwZL/TU4gqjK5xiHV/RfWLOahrjAko/e4DJkRDZQXfvqAsiZzzYhgAzbgz6lg48jcm4GLg==", + "engines": { + "node": ">=12" } } }, @@ -12207,74 +11062,6 @@ "integrity": "sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw==", "dev": true }, - "@colors/colors": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/@colors/colors/-/colors-1.5.0.tgz", - "integrity": "sha512-ooWCrlZP11i8GImSjTHYHLkvFDP48nS4+204nGb1RiX/WXYHmJA2III9/e2DWVabCESdW7hBAEzHRqUn9OUVvQ==", - "dev": true, - "optional": true - }, - "@cypress/request": { - "version": "2.88.10", - "resolved": "https://registry.npmjs.org/@cypress/request/-/request-2.88.10.tgz", - "integrity": "sha512-Zp7F+R93N0yZyG34GutyTNr+okam7s/Fzc1+i3kcqOP8vk6OuajuE9qZJ6Rs+10/1JFtXFYMdyarnU1rZuJesg==", - "dev": true, - "requires": { - "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" - }, - "dependencies": { - "qs": { - "version": "6.5.3", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.3.tgz", - "integrity": "sha512-qxXIEh4pCGfHICj1mAJQ2/2XVZkjCDTcEgfoSQxc/fYivUZxTkk7L3bDBJSoNrEzXI17oUO5Dp07ktqE5KzczA==", - "dev": true - } - } - }, - "@cypress/xvfb": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/@cypress/xvfb/-/xvfb-1.2.4.tgz", - "integrity": "sha512-skbBzPggOVYCbnGgV+0dmBdW/s77ZkAOXIC1knS8NagwDjBrNC1LuXtQJeiN6l+m7lzmHtaoUw/ctJKdqkG57Q==", - "dev": true, - "requires": { - "debug": "^3.1.0", - "lodash.once": "^4.1.1" - }, - "dependencies": { - "debug": { - "version": "3.2.7", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", - "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", - "dev": true, - "requires": { - "ms": "^2.1.1" - } - }, - "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 - } - } - }, "@govuk-prototype-kit/step-by-step": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/@govuk-prototype-kit/step-by-step/-/step-by-step-2.0.0.tgz", @@ -12996,18 +11783,6 @@ "resolved": "https://registry.npmjs.org/@types/qs/-/qs-6.9.7.tgz", "integrity": "sha512-FGa1F62FT09qcrueBA6qYTrJPVDzah9a+493+o2PCXsesWHIn27G98TsSMs3WPNbZIEj4+VJf6saSFpvD+3Zsw==" }, - "@types/sinonjs__fake-timers": { - "version": "8.1.1", - "resolved": "https://registry.npmjs.org/@types/sinonjs__fake-timers/-/sinonjs__fake-timers-8.1.1.tgz", - "integrity": "sha512-0kSuKjAS0TrGLJ0M/+8MaFkGsQhZpB6pxOmvS3K8FYI72K//YmdfoW9X2qPsAKh1mkwxGD5zib9s1FIFed6E8g==", - "dev": true - }, - "@types/sizzle": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/@types/sizzle/-/sizzle-2.3.3.tgz", - "integrity": "sha512-JYM8x9EGF163bEyhdJBpR2QX1R5naCJHC8ucJylJ3w9/CVBaskdQ8WqBf8MmQrd1kRvp/a4TS8HJ+bxzR7ZJYQ==", - "dev": true - }, "@types/stack-utils": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/@types/stack-utils/-/stack-utils-2.0.1.tgz", @@ -13029,16 +11804,6 @@ "integrity": "sha512-iO9ZQHkZxHn4mSakYV0vFHAVDyEOIJQrV2uZ06HxEPcx+mt8swXoZHIbaaJ2crJYFfErySgktuTZ3BeLz+XmFA==", "dev": true }, - "@types/yauzl": { - "version": "2.10.0", - "resolved": "https://registry.npmjs.org/@types/yauzl/-/yauzl-2.10.0.tgz", - "integrity": "sha512-Cn6WYCm0tXv8p6k+A8PvbDG763EDpBoTzHdA+Q/MF6H3sapGjCm9NzoaJncJS9tUKSuCoDs9XHxYYsQDgxR6kw==", - "dev": true, - "optional": true, - "requires": { - "@types/node": "*" - } - }, "a-sync-waterfall": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/a-sync-waterfall/-/a-sync-waterfall-1.0.1.tgz", @@ -13146,12 +11911,6 @@ "picomatch": "^2.0.4" } }, - "arch": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/arch/-/arch-2.2.0.tgz", - "integrity": "sha512-Of/R0wqp83cgHozfIYLbBMnej79U/SVGOOyuB3VVFv1NRM/PSFMK12x9KVtiYzJqmnU5WR2qp0Z5rHb7sWGnFQ==", - "dev": true - }, "argparse": { "version": "1.0.10", "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", @@ -13188,33 +11947,12 @@ "resolved": "https://registry.npmjs.org/asap/-/asap-2.0.6.tgz", "integrity": "sha1-5QNHYR1+aQlDIIu9r+vLwvuGbUY=" }, - "asn1": { - "version": "0.2.6", - "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.6.tgz", - "integrity": "sha512-ix/FxPn0MDjeyJ7i/yoHGFt/EX6LyNbxSEhPPXODPL+KB0VPk86UYfL0lMdy+KCnv+fmvIzySwaK5COwqVbWTQ==", - "dev": true, - "requires": { - "safer-buffer": "~2.1.0" - } - }, - "assert-plus": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", - "integrity": "sha512-NfJ4UzBCcQGLDlQq7nHxH+tv3kyZ0hHQqF5BO6J7tNJeP5do1llPr8dZ8zHonfhAu0PHAdMkSo+8o0wxg9lZWw==", - "dev": true - }, "astral-regex": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/astral-regex/-/astral-regex-1.0.0.tgz", "integrity": "sha512-+Ryf6g3BKoRc7jfp7ad8tM4TtMiaWvbF/1/sQcZPkkS7ag3D5nMBCe2UfOTONtAkaG0tO0ij3C5Lwmf1EiyjHg==", "dev": true }, - "async": { - "version": "3.2.4", - "resolved": "https://registry.npmjs.org/async/-/async-3.2.4.tgz", - "integrity": "sha512-iAB+JbDEGXhyIUavoDl9WP/Jj106Kz9DEn1DPgYw5ruDn0e3Wgi3sKFm55sASdGBNOQB8F59d9qQ7deqrHA8wQ==", - "dev": true - }, "async-each-series": { "version": "0.1.1", "resolved": "https://registry.npmjs.org/async-each-series/-/async-each-series-0.1.1.tgz", @@ -13225,24 +11963,6 @@ "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=" }, - "at-least-node": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/at-least-node/-/at-least-node-1.0.0.tgz", - "integrity": "sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg==", - "dev": true - }, - "aws-sign2": { - "version": "0.7.0", - "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.7.0.tgz", - "integrity": "sha512-08kcGqnYf/YmjoRhfxyu+CLxBjUtHLXLXX/vUfx9l2LYzG3c1m61nrpyFUZI6zeS+Li/wWMMidD9KgrqtGq3mA==", - "dev": true - }, - "aws4": { - "version": "1.11.0", - "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.11.0.tgz", - "integrity": "sha512-xh1Rl34h6Fi1DC2WWKfxUTVqRsNnr6LsKz2+hfwDxQJWmrx8+c7ylaqBMcHfl1U1r2dsifOvKX3LQuLNZ+XSvA==", - "dev": true - }, "axios": { "version": "0.21.4", "resolved": "https://registry.npmjs.org/axios/-/axios-0.21.4.tgz", @@ -13377,15 +12097,6 @@ "resolved": "https://registry.npmjs.org/batch/-/batch-0.6.1.tgz", "integrity": "sha1-3DQxT05nkxgJP8dgJyUl+UvyXBY=" }, - "bcrypt-pbkdf": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz", - "integrity": "sha512-qeFIXtP4MSoi6NLqO12WfqARWWuCKi2Rn/9hJLEmtB5yTNr9DqFWkJRCf2qShWzPeAMRnOgCrq0sg/KLv5ES9w==", - "dev": true, - "requires": { - "tweetnacl": "^0.14.3" - } - }, "binary-extensions": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz", @@ -13418,12 +12129,6 @@ } } }, - "blob-util": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/blob-util/-/blob-util-2.0.2.tgz", - "integrity": "sha512-T7JQa+zsXXEa6/8ZhHcQEW1UFfVM49Ts65uBkFL6fz2QmrElqmbajIDJvuA0tEhRe5eIjpV9ZF+0RfZR9voJFQ==", - "dev": true - }, "bluebird": { "version": "3.7.2", "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.7.2.tgz", @@ -13609,12 +12314,6 @@ "ieee754": "^1.1.13" } }, - "buffer-crc32": { - "version": "0.2.13", - "resolved": "https://registry.npmjs.org/buffer-crc32/-/buffer-crc32-0.2.13.tgz", - "integrity": "sha512-VO9Ht/+p3SN7SKWqcrgEzjGbRSJYTx+Q1pTQC0wrWqHx0vpJraQ6GtHx8tvcg1rlK1byhU5gccxgOgj7B0TDkQ==", - "dev": true - }, "buffer-equal-constant-time": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/buffer-equal-constant-time/-/buffer-equal-constant-time-1.0.1.tgz", @@ -13630,12 +12329,6 @@ "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==" }, - "cachedir": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/cachedir/-/cachedir-2.3.0.tgz", - "integrity": "sha512-A+Fezp4zxnit6FanDmv9EqXNAi3vt9DWp51/71UEhXukb7QUuvtv9344h91dyAxuTLoSYJFU299qzR3tzwPAhw==", - "dev": true - }, "call-bind": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz", @@ -13736,54 +12429,6 @@ "resolved": "https://registry.npmjs.org/cli-spinners/-/cli-spinners-2.6.1.tgz", "integrity": "sha512-x/5fWmGMnbKQAaNwN+UZlV79qBLM9JFnJuJ03gIi5whrob0xV0ofNVHy9DhwGdsMJQc2OKv0oGmLzvaqvAVv+g==" }, - "cli-table3": { - "version": "0.6.2", - "resolved": "https://registry.npmjs.org/cli-table3/-/cli-table3-0.6.2.tgz", - "integrity": "sha512-QyavHCaIC80cMivimWu4aWHilIpiDpfm3hGmqAmXVL1UsnbLuBSMd21hTX6VY4ZSDSM73ESLeF8TOYId3rBTbw==", - "dev": true, - "requires": { - "@colors/colors": "1.5.0", - "string-width": "^4.2.0" - } - }, - "cli-truncate": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/cli-truncate/-/cli-truncate-2.1.0.tgz", - "integrity": "sha512-n8fOixwDD6b/ObinzTrp1ZKFzbgvKZvuz/TvejnLn1aQfC6r52XEx85FmuC+3HI+JM7coBRXUvNqEU2PHVrHpg==", - "dev": true, - "requires": { - "slice-ansi": "^3.0.0", - "string-width": "^4.2.0" - }, - "dependencies": { - "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" - } - }, - "astral-regex": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/astral-regex/-/astral-regex-2.0.0.tgz", - "integrity": "sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ==", - "dev": true - }, - "slice-ansi": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-3.0.0.tgz", - "integrity": "sha512-pSyv7bSTC7ig9Dcgbw9AuRNUb5k5V6oDudjZoMBSr13qpLBG7tB+zgCkARjq7xIUgdz5P1Qe8u+rSGdouOOIyQ==", - "dev": true, - "requires": { - "ansi-styles": "^4.0.0", - "astral-regex": "^2.0.0", - "is-fullwidth-code-point": "^3.0.0" - } - } - } - }, "cli-width": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/cli-width/-/cli-width-3.0.0.tgz", @@ -13859,12 +12504,6 @@ "integrity": "sha512-qiBjkpbMLO/HL68y+lh4q0/O1MZFj2RX6X/KmMa3+gJD3z+WwI1ZzDHysvqHGS3mP6mznPckpXmw1nI9cJjyRg==", "dev": true }, - "colorette": { - "version": "2.0.19", - "resolved": "https://registry.npmjs.org/colorette/-/colorette-2.0.19.tgz", - "integrity": "sha512-3tlv/dIP7FWvj3BsbHrGLJ6l/oKh1O3TcgBqMn+yyCagOxc23fyzDS6HypQbgxWbkpDnf52p1LuR4eWDQ/K9WQ==", - "dev": true - }, "combined-stream": { "version": "1.0.8", "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", @@ -13878,12 +12517,6 @@ "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==" }, - "common-tags": { - "version": "1.8.2", - "resolved": "https://registry.npmjs.org/common-tags/-/common-tags-1.8.2.tgz", - "integrity": "sha512-gk/Z852D2Wtb//0I+kRFNKKE9dIIVirjoqPoA1wJU+XePVXZfGeBpk45+A1rKO4Q43prqWBNY/MiIeRLbPWUaA==", - "dev": true - }, "component-emitter": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.3.0.tgz", @@ -13998,246 +12631,24 @@ "integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==" }, "cors": { - "version": "2.8.5", - "resolved": "https://registry.npmjs.org/cors/-/cors-2.8.5.tgz", - "integrity": "sha512-KIHbLJqu73RGr/hnbrO9uBeixNGuvSQjul/jdFvS/KFSIH1hWVd1ng7zOHx+YrEfInLG7q4n6GHQ9cDtxv/P6g==", - "requires": { - "object-assign": "^4", - "vary": "^1" - } - }, - "cross-spawn": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", - "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", - "requires": { - "path-key": "^3.1.0", - "shebang-command": "^2.0.0", - "which": "^2.0.1" - } - }, - "cypress": { - "version": "10.6.0", - "resolved": "https://registry.npmjs.org/cypress/-/cypress-10.6.0.tgz", - "integrity": "sha512-6sOpHjostp8gcLO34p6r/Ci342lBs8S5z9/eb3ZCQ22w2cIhMWGUoGKkosabPBfKcvRS9BE4UxybBtlIs8gTQA==", - "dev": true, - "requires": { - "@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" - }, - "dependencies": { - "@types/node": { - "version": "14.18.26", - "resolved": "https://registry.npmjs.org/@types/node/-/node-14.18.26.tgz", - "integrity": "sha512-0b+utRBSYj8L7XAp0d+DX7lI4cSmowNaaTkk6/1SKzbKkG+doLuPusB9EOvzLJ8ahJSk03bTLIL6cWaEd4dBKA==", - "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" - } - }, - "chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "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" - } - } - } - }, - "ci-info": { - "version": "3.3.2", - "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.3.2.tgz", - "integrity": "sha512-xmDt/QIAdeZ9+nfdPsaBCpMvHNLFiLdjj59qjqn+6iPe6YmHGQ35sBnQ8uslRBXFmXkiZQOJRjvQeoGppoTjjg==", - "dev": true - }, - "commander": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-5.1.0.tgz", - "integrity": "sha512-P0CysNDQ7rtVw4QIQtm+MRxV66vKFSvlsQvGYXZWR3qFU0jlMKHZZZgw8e+8DSah4UDKMqnknRDQz+xuQXQ/Zg==", - "dev": true - }, - "debug": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", - "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", - "dev": true, - "requires": { - "ms": "2.1.2" - } - }, - "execa": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/execa/-/execa-4.1.0.tgz", - "integrity": "sha512-j5W0//W7f8UxAn8hXVnwG8tLwdiUy4FJLcSupCg6maBYZDpyBvTApK7KyuI4bKj8KOh1r2YH+6ucuYtJv1bTZA==", - "dev": true, - "requires": { - "cross-spawn": "^7.0.0", - "get-stream": "^5.0.0", - "human-signals": "^1.1.1", - "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", - "strip-final-newline": "^2.0.0" - } - }, - "fs-extra": { - "version": "9.1.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz", - "integrity": "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==", - "dev": true, - "requires": { - "at-least-node": "^1.0.0", - "graceful-fs": "^4.2.0", - "jsonfile": "^6.0.1", - "universalify": "^2.0.0" - } - }, - "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==", - "dev": true, - "requires": { - "pump": "^3.0.0" - } - }, - "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 - }, - "human-signals": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-1.1.1.tgz", - "integrity": "sha512-SEQu7vl8KjNL2eoGBLF3+wAjpsNfA9XMlXAYj/3EdaNfAlxKthD1xjEQfGOUhllCGGJVNY34bRr6lPINhNjyZw==", - "dev": true - }, - "is-ci": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/is-ci/-/is-ci-3.0.1.tgz", - "integrity": "sha512-ZYvCgrefwqoQ6yTyYUbQu64HsITZ3NfKX1lzaEYdkTDcfKzzCI/wthRRYKkdjHKFVgNiXKAKm65Zo1pk2as/QQ==", - "dev": true, - "requires": { - "ci-info": "^3.2.0" - } - }, - "ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "dev": true - }, - "semver": { - "version": "7.3.7", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.7.tgz", - "integrity": "sha512-QlYTucUYOews+WeEujDoEGziz4K6c47V/Bd+LjSSYcA94p+DmINdf7ncaUinThfvZyu13lN9OY1XDxt8C0Tw0g==", - "dev": true, - "requires": { - "lru-cache": "^6.0.0" - } - }, - "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, - "requires": { - "has-flag": "^4.0.0" - } - }, - "tmp": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.2.1.tgz", - "integrity": "sha512-76SUhtfqR2Ijn+xllcI5P1oyannHNHByD80W1q447gU3mp9G9PSpGdWmjUOHRDPiHYacIk66W7ubDTuPF3BEtQ==", - "dev": true, - "requires": { - "rimraf": "^3.0.0" - } - }, - "universalify": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz", - "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==", - "dev": true - } + "version": "2.8.5", + "resolved": "https://registry.npmjs.org/cors/-/cors-2.8.5.tgz", + "integrity": "sha512-KIHbLJqu73RGr/hnbrO9uBeixNGuvSQjul/jdFvS/KFSIH1hWVd1ng7zOHx+YrEfInLG7q4n6GHQ9cDtxv/P6g==", + "requires": { + "object-assign": "^4", + "vary": "^1" } }, - "dashdash": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz", - "integrity": "sha512-jRFi8UDGo6j+odZiEpjazZaWqEal3w/basFjQHQEwVtZJGDpxbH1MeYluwCS8Xq5wmLJooDlMgvVarmWfGM44g==", - "dev": true, + "cross-spawn": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", + "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", "requires": { - "assert-plus": "^1.0.0" + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" } }, - "dayjs": { - "version": "1.11.5", - "resolved": "https://registry.npmjs.org/dayjs/-/dayjs-1.11.5.tgz", - "integrity": "sha512-CAdX5Q3YW3Gclyo5Vpqkgpj8fSdLQcRuzfX6mC6Phy0nfJ0eGYOeS7m4mt2plDWLAtA4TqTakvbboHvUxfe4iA==", - "dev": true - }, "debug": { "version": "2.6.9", "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", @@ -14407,16 +12818,6 @@ "tfunk": "^4.0.0" } }, - "ecc-jsbn": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz", - "integrity": "sha512-eh9O+hwRHNbG4BLTjEl3nw044CkGm5X6LoaCf7LPp7UU8Qrt47JYNi6nPX8xjW97TKGKm1ouctg0QSpZe9qrnw==", - "dev": true, - "requires": { - "jsbn": "~0.1.0", - "safer-buffer": "^2.1.0" - } - }, "ecdsa-sig-formatter": { "version": "1.0.11", "resolved": "https://registry.npmjs.org/ecdsa-sig-formatter/-/ecdsa-sig-formatter-1.0.11.tgz", @@ -14452,15 +12853,6 @@ "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", "integrity": "sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k=" }, - "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==", - "dev": true, - "requires": { - "once": "^1.4.0" - } - }, "engine.io": { "version": "6.2.1", "resolved": "https://registry.npmjs.org/engine.io/-/engine.io-6.2.1.tgz", @@ -14528,15 +12920,6 @@ "@socket.io/base64-arraybuffer": "~1.0.2" } }, - "enquirer": { - "version": "2.3.6", - "resolved": "https://registry.npmjs.org/enquirer/-/enquirer-2.3.6.tgz", - "integrity": "sha512-yjNnPr315/FjS4zIsUxYguYUPP2e1NK4d7E7ZOLiyYCcbFBiTMyID+2wvm2w6+pZ/odMA7cRkjhsPbltwBOrLg==", - "dev": true, - "requires": { - "ansi-colors": "^4.1.1" - } - }, "error-ex": { "version": "1.3.2", "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", @@ -15034,15 +13417,6 @@ } } }, - "eslint-plugin-cypress": { - "version": "2.12.1", - "resolved": "https://registry.npmjs.org/eslint-plugin-cypress/-/eslint-plugin-cypress-2.12.1.tgz", - "integrity": "sha512-c2W/uPADl5kospNDihgiLc7n87t5XhUbFDoTl6CfVkmG+kDAb5Ux10V9PoLPu9N+r7znpc+iQlcmAqT1A/89HA==", - "dev": true, - "requires": { - "globals": "^11.12.0" - } - }, "eslint-plugin-es": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/eslint-plugin-es/-/eslint-plugin-es-2.0.0.tgz", @@ -15367,12 +13741,6 @@ "through": "~2.3.1" } }, - "eventemitter2": { - "version": "6.4.7", - "resolved": "https://registry.npmjs.org/eventemitter2/-/eventemitter2-6.4.7.tgz", - "integrity": "sha512-tYUSVOGeQPKt/eC1ABfhHy5Xd96N3oIijJvN3O9+TsC28T5V9yX9oEfEK5faP0EFSNVOG97qtAS68GBrQB2hDg==", - "dev": true - }, "eventemitter3": { "version": "4.0.7", "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-4.0.7.tgz", @@ -15403,15 +13771,6 @@ } } }, - "executable": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/executable/-/executable-4.1.1.tgz", - "integrity": "sha512-8iA79xD3uAch729dUG8xaaBBFGaEa0wdD2VkYLFHwlqosEj/jT66AzcreRDSgV7ehnNLBW2WR5jIXwGKjVdTLg==", - "dev": true, - "requires": { - "pify": "^2.2.0" - } - }, "exit": { "version": "0.1.2", "resolved": "https://registry.npmjs.org/exit/-/exit-0.1.2.tgz", @@ -15591,12 +13950,6 @@ } } }, - "extend": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", - "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==", - "dev": true - }, "external-editor": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/external-editor/-/external-editor-3.1.0.tgz", @@ -15607,50 +13960,6 @@ "tmp": "^0.0.33" } }, - "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==", - "dev": true, - "requires": { - "@types/yauzl": "^2.9.1", - "debug": "^4.1.1", - "get-stream": "^5.1.0", - "yauzl": "^2.10.0" - }, - "dependencies": { - "debug": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", - "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", - "dev": true, - "requires": { - "ms": "2.1.2" - } - }, - "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==", - "dev": true, - "requires": { - "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==", - "dev": true - } - } - }, - "extsprintf": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz", - "integrity": "sha512-11Ndz7Nv+mvAC1j0ktTa7fAb0vLyGGX+rMHNBYQviQDGU0Hw7lhctJANqbPhu9nV9/izT/IntTgZ7Im/9LJs9g==", - "dev": true - }, "fancy-log": { "version": "1.3.3", "resolved": "https://registry.npmjs.org/fancy-log/-/fancy-log-1.3.3.tgz", @@ -15710,15 +14019,6 @@ "bser": "2.1.1" } }, - "fd-slicer": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/fd-slicer/-/fd-slicer-1.1.0.tgz", - "integrity": "sha512-cE1qsB/VwyQozZ+q1dGxR8LBYNZeofhEdUNGSMbQD3Gw2lAzX9Zb3uIU6Ebc/Fmyjo9AWWfnn0AUCHqtevs/8g==", - "dev": true, - "requires": { - "pend": "~1.2.0" - } - }, "figures": { "version": "3.2.0", "resolved": "https://registry.npmjs.org/figures/-/figures-3.2.0.tgz", @@ -15814,12 +14114,6 @@ "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.14.8.tgz", "integrity": "sha512-1x0S9UVJHsQprFcEC/qnNzBLcIxsjAV905f/UkQxbclCsoTWlacCNOpQa/anodLl2uaEKFhfWOvM2Qg77+15zA==" }, - "forever-agent": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz", - "integrity": "sha512-j0KLYPhm6zeac4lz3oJ3o65qvgQCcPubiyotZrXqEaG4hNagNYO8qdlUrX5vwqv9ohqeT/Z3j6+yW067yWWdUw==", - "dev": true - }, "form-data": { "version": "2.3.3", "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.3.3.tgz", @@ -15939,24 +14233,6 @@ "get-intrinsic": "^1.1.1" } }, - "getos": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/getos/-/getos-3.2.1.tgz", - "integrity": "sha512-U56CfOK17OKgTVqozZjUKNdkfEv6jk5WISBJ8SHoagjE6L69zOwl3Z+O8myjY9MEW3i2HPWQBt/LTbCgcC973Q==", - "dev": true, - "requires": { - "async": "^3.2.0" - } - }, - "getpass": { - "version": "0.1.7", - "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz", - "integrity": "sha512-0fzj9JxOLfJ+XGLhR8ze3unN0KZCgZwiSSDz168VERjK8Wl8kVSdcu2kspd4s4wtAa1y/qrVRiAA0WclVsu0ng==", - "dev": true, - "requires": { - "assert-plus": "^1.0.0" - } - }, "glob": { "version": "7.2.0", "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.0.tgz", @@ -15978,23 +14254,6 @@ "is-glob": "^4.0.1" } }, - "global-dirs": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/global-dirs/-/global-dirs-3.0.0.tgz", - "integrity": "sha512-v8ho2DS5RiCjftj1nD9NmnfaOzTdud7RRnVd9kFNOjqZbISlx5DQ+OrTkywgd0dIt7oFCvKetZSHoHcP3sDdiA==", - "dev": true, - "requires": { - "ini": "2.0.0" - }, - "dependencies": { - "ini": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ini/-/ini-2.0.0.tgz", - "integrity": "sha512-7PnF4oN3CvZF23ADhA5wRaYEQpJ8qygSkbtTXWBeXWXmEVRXK+1ITciHWwHhsjv1TmW0MgacIv6hEi5pX5NQdA==", - "dev": true - } - } - }, "globals": { "version": "11.12.0", "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", @@ -16195,17 +14454,6 @@ } } }, - "http-signature": { - "version": "1.3.6", - "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.3.6.tgz", - "integrity": "sha512-3adrsD6zqo4GsTqtO7FyrejHNv+NgiIfAfv68+jVlFmSr9OGy7zrxONceFRLKvnnZA5jbxQBX1u9PpB6Wi32Gw==", - "dev": true, - "requires": { - "assert-plus": "^1.0.0", - "jsprim": "^2.0.2", - "sshpk": "^1.14.1" - } - }, "human-signals": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-2.1.0.tgz", @@ -16469,16 +14717,6 @@ "is-extglob": "^2.1.1" } }, - "is-installed-globally": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/is-installed-globally/-/is-installed-globally-0.4.0.tgz", - "integrity": "sha512-iwGqO3J21aaSkC7jWnHP/difazwS7SFeIqxv6wEtLU8Y5KlzFTjyqcSIT0d8s4+dDhKytsk9PJZ2BkS5eZwQRQ==", - "dev": true, - "requires": { - "global-dirs": "^3.0.0", - "is-path-inside": "^3.0.2" - } - }, "is-interactive": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/is-interactive/-/is-interactive-1.0.0.tgz", @@ -16562,12 +14800,6 @@ "has-symbols": "^1.0.2" } }, - "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-unicode-supported": { "version": "0.1.0", "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz", @@ -16597,12 +14829,6 @@ "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=" }, - "isstream": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz", - "integrity": "sha512-Yljz7ffyPbrLpLngrMtZ7NduUgVvi6wG9RJ9IUcyCd59YQ911PBJphODUcbOVbqYfxe1wuYf/LJ8PauMRwsM/g==", - "dev": true - }, "istanbul-lib-coverage": { "version": "3.2.0", "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-3.2.0.tgz", @@ -17697,12 +15923,6 @@ "esprima": "^4.0.0" } }, - "jsbn": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz", - "integrity": "sha512-UVU9dibq2JcFWxQPA6KCqj5O42VOmAY3zQUfEKxU0KpTGXwNoCjkX1e13eHNvw/xPynt6pU0rZ1htjWTNTSXsg==", - "dev": true - }, "jsesc": { "version": "2.5.2", "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz", @@ -17721,12 +15941,6 @@ "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==", "dev": true }, - "json-schema": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.4.0.tgz", - "integrity": "sha512-es94M3nTIfsEPisRafak+HDLfHXnKBhV3vU5eqPcS3flIWqcxJWgXHXiey3YrpaNsanY5ei1VoYEbOzijuq9BA==", - "dev": true - }, "json-schema-traverse": { "version": "0.4.1", "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", @@ -17739,12 +15953,6 @@ "integrity": "sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE=", "dev": true }, - "json-stringify-safe": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz", - "integrity": "sha512-ZClg6AaYvamvYEE82d3Iyd3vSSIjQ+odgjaTzRuO3s7toCdFKczob2i0zCh7JE8kWn17yvAWhUVxvqGwUalsRA==", - "dev": true - }, "json5": { "version": "2.2.1", "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.1.tgz", @@ -17791,18 +15999,6 @@ } } }, - "jsprim": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-2.0.2.tgz", - "integrity": "sha512-gqXddjPqQ6G40VdnI6T6yObEC+pDNvyP95wdQhkWkg7crHH3km5qP1FsOXEkzEQwnz6gz5qGTn1c2Y52wP3OyQ==", - "dev": true, - "requires": { - "assert-plus": "1.0.0", - "extsprintf": "1.3.0", - "json-schema": "0.4.0", - "verror": "1.10.0" - } - }, "jsx-ast-utils": { "version": "2.4.1", "resolved": "https://registry.npmjs.org/jsx-ast-utils/-/jsx-ast-utils-2.4.1.tgz", @@ -17882,33 +16078,6 @@ "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==", "dev": true }, - "listr2": { - "version": "3.14.0", - "resolved": "https://registry.npmjs.org/listr2/-/listr2-3.14.0.tgz", - "integrity": "sha512-TyWI8G99GX9GjE54cJ+RrNMcIFBfwMPxc3XTFiAYGN4s10hWROGtOg7+O6u6LE3mNkyld7RSLE6nrKBvTfcs3g==", - "dev": true, - "requires": { - "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" - }, - "dependencies": { - "rxjs": { - "version": "7.5.6", - "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-7.5.6.tgz", - "integrity": "sha512-dnyv2/YsXhnm461G+R/Pe5bWP41Nm6LBXEYWI6eiFP4fiwx6WRI/CD0zbdVAudd9xwLEF2IDcKXLHit0FYjUzw==", - "dev": true, - "requires": { - "tslib": "^2.1.0" - } - } - } - }, "localtunnel": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/localtunnel/-/localtunnel-2.0.2.tgz", @@ -18044,72 +16213,6 @@ } } }, - "log-update": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/log-update/-/log-update-4.0.0.tgz", - "integrity": "sha512-9fkkDevMefjg0mmzWFBW8YkFP91OrizzkW3diF7CpG+S2EYdy4+TVfGwz1zeF8x7hCx1ovSPTOE9Ngib74qqUg==", - "dev": true, - "requires": { - "ansi-escapes": "^4.3.0", - "cli-cursor": "^3.1.0", - "slice-ansi": "^4.0.0", - "wrap-ansi": "^6.2.0" - }, - "dependencies": { - "ansi-regex": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", - "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", - "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" - } - }, - "astral-regex": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/astral-regex/-/astral-regex-2.0.0.tgz", - "integrity": "sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ==", - "dev": true - }, - "slice-ansi": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-4.0.0.tgz", - "integrity": "sha512-qMCMfhY040cVHT43K9BFygqYbUPFZKHOg7K73mtTWJRb8pyP3fzf4Ixd5SzdEJQ6MRUg/WBnOLxghZtKKurENQ==", - "dev": true, - "requires": { - "ansi-styles": "^4.0.0", - "astral-regex": "^2.0.0", - "is-fullwidth-code-point": "^3.0.0" - } - }, - "strip-ansi": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", - "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", - "dev": true, - "requires": { - "ansi-regex": "^5.0.1" - } - }, - "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" - } - } - } - }, "loose-envify": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz", @@ -18620,12 +16723,6 @@ "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz", "integrity": "sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ=" }, - "ospath": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/ospath/-/ospath-1.2.2.tgz", - "integrity": "sha512-o6E5qJV5zkAbIDNhGSIlyOhScKXgQrSRMilfph0clDfM0nEnBOlKlH4sWDmG95BW/CvwNz0vmm7dJVtU2KlMiA==", - "dev": true - }, "p-limit": { "version": "2.3.0", "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", @@ -18733,18 +16830,6 @@ "through": "~2.3" } }, - "pend": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/pend/-/pend-1.2.0.tgz", - "integrity": "sha512-F3asv42UuXchdzt+xXqfW1OGlVBe+mxa2mqI0pg5yAHZPvFmY3Y6drSf/GQ1A86WgWEN9Kzh/WrgKa6iGcHXLg==", - "dev": true - }, - "performance-now": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz", - "integrity": "sha512-7EAHlyLHI56VEIdK57uwHdHKIaAGbnXPiw0yWbarQZOKaKpvUIgW0jWRVLiatnM+XXlSwsanIBH/hzGMJulMow==", - "dev": true - }, "picocolors": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", @@ -18900,12 +16985,6 @@ "integrity": "sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ=", "dev": true }, - "pretty-bytes": { - "version": "5.6.0", - "resolved": "https://registry.npmjs.org/pretty-bytes/-/pretty-bytes-5.6.0.tgz", - "integrity": "sha512-FFw039TmrBqFK8ma/7OL3sDz/VytdtJr044/QUJtH0wK9lb9jLq9tJyIxUwtQJHwar2BqtiA4iCWSwo9JLkzFg==", - "dev": true - }, "pretty-format": { "version": "28.1.1", "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-28.1.1.tgz", @@ -18987,12 +17066,6 @@ "ipaddr.js": "1.9.1" } }, - "proxy-from-env": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.0.0.tgz", - "integrity": "sha512-F2JHgJQ1iqwnHDcQjVBsq3n/uoaFL+iPW/eAeL7kVxy/2RrWaN4WroKjjvbsoRtv0ftelNyC01bjRhn/bhcf4A==", - "dev": true - }, "ps-tree": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/ps-tree/-/ps-tree-1.2.0.tgz", @@ -19007,27 +17080,11 @@ "resolved": "https://registry.npmjs.org/pseudomap/-/pseudomap-1.0.2.tgz", "integrity": "sha512-b/YwNhb8lk1Zz2+bXXpS/LK9OisiZZ1SNsSLxN1x2OXVEhW2Ckr/7mWE5vrC1ZTiJlD9g19jWszTmJsB+oEpFQ==" }, - "psl": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/psl/-/psl-1.9.0.tgz", - "integrity": "sha512-E/ZsdU4HLs/68gYzgGTkMicWTLPdAftJLfJFlLUAAKZGkStNU72sZjT66SnMDVOfOWY/YAoiD7Jxa9iHvngcag==", - "dev": true - }, "pstree.remy": { "version": "1.1.8", "resolved": "https://registry.npmjs.org/pstree.remy/-/pstree.remy-1.1.8.tgz", "integrity": "sha512-77DZwxQmxKnu3aR542U+X8FypNzbfJ+C5XQDk3uWjWxn6151aIMGthWYRXTqT1E5oJvg+ljaa2OJi+VfvCOQ8w==" }, - "pump": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz", - "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==", - "dev": true, - "requires": { - "end-of-stream": "^1.1.0", - "once": "^1.3.1" - } - }, "punycode": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", @@ -19102,15 +17159,6 @@ "integrity": "sha512-lv0M6+TkDVniA3aD1Eg0DVpfU/booSu7Eev3TDO/mZKHBfVjgCGTV4t4buppESEYDtkArYFOxTJWv6S5C+iaNw==", "dev": true }, - "request-progress": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/request-progress/-/request-progress-3.0.0.tgz", - "integrity": "sha512-MnWzEHHaxHO2iWiQuHrUPBi/1WeBf5PkxQqNyNvLl9VAYSdXkP8tQ3pBSeCPD+yw0v0Aq1zosWLz0BdeXpWwZg==", - "dev": true, - "requires": { - "throttleit": "^1.0.0" - } - }, "require-dir": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/require-dir/-/require-dir-1.2.0.tgz", @@ -19180,12 +17228,6 @@ "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==" }, - "rfdc": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/rfdc/-/rfdc-1.3.0.tgz", - "integrity": "sha512-V2hovdzFbOi77/WajaSMXk2OLm+xNIeQdMMuB7icj7bk6zi2F8GGAxigcnDFpJHbNyNcgyJDiP+8nOrY5cZGrA==", - "dev": true - }, "rimraf": { "version": "3.0.2", "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", @@ -19614,23 +17656,6 @@ "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=" }, - "sshpk": { - "version": "1.17.0", - "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.17.0.tgz", - "integrity": "sha512-/9HIEs1ZXGhSPE8X6Ccm7Nam1z8KcoCqPdI7ecm1N33EzAetWahvQWVqLZtaZQ+IDKX4IyA2o0gBzqIMkAagHQ==", - "dev": true, - "requires": { - "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" - } - }, "stack-utils": { "version": "2.0.5", "resolved": "https://registry.npmjs.org/stack-utils/-/stack-utils-2.0.5.tgz", @@ -20112,12 +18137,6 @@ "integrity": "sha512-8hmiGIJMDlwjg7dlJ4yKGLK8EsYqKgPWbG3b4wjJddKNwc7N7Dpn08Df4szr/sZdMVeOstrdYSsqzX6BYbcB+w==", "dev": true }, - "throttleit": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/throttleit/-/throttleit-1.0.0.tgz", - "integrity": "sha512-rkTVqu6IjfQ/6+uNuuc3sZek4CEYxTJom3IktzgdSxcZqdARuebbA/f4QmAxMQIxqq9ZLEUkSYqvuk1I6VKq4g==", - "dev": true - }, "through": { "version": "2.3.8", "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", @@ -20170,36 +18189,11 @@ "nopt": "~1.0.10" } }, - "tough-cookie": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.5.0.tgz", - "integrity": "sha512-nlLsUzgm1kfLXSXfRZMc1KLAugd4hqJHDTvc2hDIwS3mZAfMEuMbc03SujMF+GEcpaX/qboeycw6iO8JwVv2+g==", - "dev": true, - "requires": { - "psl": "^1.1.28", - "punycode": "^2.1.1" - } - }, "tslib": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.1.0.tgz", "integrity": "sha512-hcVC3wYEziELGGmEEXue7D75zbwIIVUMWAVbHItGPx0ziyXxrOMQx4rQEVEV45Ut/1IotuEvwqPopzIOkDMf0A==" }, - "tunnel-agent": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz", - "integrity": "sha512-McnNiV1l8RYeY8tBgEpuodCC1mLUdbSN+CYBL7kJsJNInOP8UjDDEwdk6Mw60vdLLrr5NHKZhMAOSrR2NZuQ+w==", - "dev": true, - "requires": { - "safe-buffer": "^5.0.1" - } - }, - "tweetnacl": { - "version": "0.14.5", - "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz", - "integrity": "sha512-KXXFFdAbFXY4geFIwoyNK+f5Z1b7swfXABfL7HXCmoIWMKU3dmS26672A4EeQtDzLKy7SXmfBu51JolvEKwtGA==", - "dev": true - }, "type-check": { "version": "0.3.2", "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.3.2.tgz", @@ -20309,12 +18303,6 @@ "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", "integrity": "sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw=" }, - "untildify": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/untildify/-/untildify-4.0.0.tgz", - "integrity": "sha512-KK8xQ1mkzZeg9inewmFVDNkg3l5LUhoq9kN6iWYB/CC9YMG8HA+c1Q8HwDe6dEX7kErrEVNVBO3fWsVq5iDgtw==", - "dev": true - }, "uri-js": { "version": "4.4.1", "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", @@ -20371,25 +18359,6 @@ "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", "integrity": "sha1-IpnwLG3tMNSllhsLn3RSShj2NPw=" }, - "verror": { - "version": "1.10.0", - "resolved": "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz", - "integrity": "sha512-ZZKSmDAEFOijERBLkmYfJ+vmk3w+7hOLYDNkRCuRuMJGEmqYNCNLyBBFwWKVMhfwaEF3WOd0Zlw86U/WC/+nYw==", - "dev": true, - "requires": { - "assert-plus": "^1.0.0", - "core-util-is": "1.0.2", - "extsprintf": "^1.2.0" - }, - "dependencies": { - "core-util-is": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", - "integrity": "sha512-3lqz5YjWTYnW6dlDa5TLaTCcShfar1e40rmcJVwCBJC6mWlFuj0eCHIElmG1g5kyuJ/GD+8Wn4FFCcz4gJPfaQ==", - "dev": true - } - } - }, "wait-on": { "version": "6.0.1", "resolved": "https://registry.npmjs.org/wait-on/-/wait-on-6.0.1.tgz", @@ -20567,16 +18536,6 @@ "version": "20.2.9", "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.9.tgz", "integrity": "sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==" - }, - "yauzl": { - "version": "2.10.0", - "resolved": "https://registry.npmjs.org/yauzl/-/yauzl-2.10.0.tgz", - "integrity": "sha512-p4a9I6X6nu6IhoGmBqAcbJy1mlC4j27vEPZX9F4L4/vZT3Lyq1VkFHw/V/PUcB9Buo+DG3iHkT0x3Qya58zc3g==", - "dev": true, - "requires": { - "buffer-crc32": "~0.2.3", - "fd-slicer": "~1.1.0" - } } } } diff --git a/package.json b/package.json index 07883b6be..360574abc 100644 --- a/package.json +++ b/package.json @@ -13,8 +13,6 @@ "lint": "standard", "rapidtest": "jest --bail", "test:heroku": "start-server-and-test 'npx --yes heroku local --port 3000' 3000 'curl localhost:3000'", - "test:acceptance": "KIT_TEST_DIR=tmp/test-prototype-package start-server-and-test 'node cypress/scripts/run-starter-prototype' 3000 'cypress run'", - "test:acceptance:open": "KIT_TEST_DIR=tmp/test-prototype-package start-server-and-test 'node cypress/scripts/run-starter-prototype' 3000 'cypress open'", "test": "jest && npm run lint" }, "dependencies": { @@ -47,8 +45,6 @@ "uuid": "^8.3.2" }, "devDependencies": { - "cypress": "^10.6.0", - "eslint-plugin-cypress": "^2.12.1", "glob": "^7.1.4", "govuk-prototype-kit": "^0.0.1-alpha.3", "jest": "^28.1.1", @@ -57,14 +53,6 @@ "supertest": "^6.3.3", "wait-on": "^6.0.1" }, - "standard": { - "plugins": [ - "cypress" - ], - "env": { - "cypress/globals": true - } - }, "jest": { "testPathIgnorePatterns": [ "__tests__/spec/utils.js", From a2554f72a2ad518d2c94d0b34321605fa1e00336 Mon Sep 17 00:00:00 2001 From: Oliver Byford Date: Thu, 11 Jan 2024 11:54:06 +0000 Subject: [PATCH 2/3] Remove unused test utils MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit None of the members exported from this file are used by any other file – looks like the last references to them were removed in 77132ea and 9ee7348. --- __tests__/spec/utils.js | 111 ---------------------------------------- package.json | 1 - 2 files changed, 112 deletions(-) delete mode 100644 __tests__/spec/utils.js diff --git a/__tests__/spec/utils.js b/__tests__/spec/utils.js deleted file mode 100644 index 9f02d5a26..000000000 --- a/__tests__/spec/utils.js +++ /dev/null @@ -1,111 +0,0 @@ -const child_process = require('child_process') // eslint-disable-line camelcase -const fs = require('fs') -const os = require('os') -const path = require('path') - -const repoDir = path.resolve(__dirname, '..', '..') - -var _releaseVersion - -/** - * Returns the temporary directory path for this jest process - * - * @returns {string} - */ -function mkdtempSync () { - const tempdir = path.join(os.tmpdir(), `jest.${process.ppid}.${process.pid}`) - fs.mkdirSync(tempdir, { recursive: true }) - return tempdir -} - -/** - * Return a string representing the current git index version - * - * @returns {string} - */ -function getReleaseVersion () { - if (_releaseVersion === undefined) { - _releaseVersion = child_process.execSync( - 'git rev-parse HEAD', - { cwd: repoDir, encoding: 'utf8' } - ).trim() - } - return _releaseVersion -} - -/** - * Return a path to the release archive for the current git index - * - * Creates a release archive from the git HEAD for the project we are currently - * running tests in. This will include uncommitted changes for tracked files, but - * not untracked changes. - * - * @param {Object} [options] - * @param {string} [options.archiveType=zip] - The type of archive to make, tar or zip - * @param {string} [options.dir] - The folder to place the archive in, by default is a fixture folder in the temporary directory - * @returns {string} - The absolute path to the archive - */ -function mkReleaseArchiveSync ({ archiveType = 'zip', dir } = {}) { - dir = dir || path.join(mkdtempSync(), '__fixtures__') - const name = `govuk-prototype-kit-${getReleaseVersion()}` - const archive = path.format({ dir, name, ext: '.' + archiveType }) - - fs.mkdirSync(dir, { recursive: true }) - - try { - fs.accessSync(archive) - } catch (err) { - _mkReleaseArchiveSync({ archive: archive, prefix: name }) - } - - return archive -} - -function _mkReleaseArchiveSync ({ archive, prefix }) { - // Create a stash commit so we can include files modified in the worktree in the archive - // TODO: this doesn't pick up unstaged files - const ref = child_process.execSync('git stash create', { cwd: repoDir, encoding: 'utf8' }) || 'HEAD' - archive = path.parse(archive) - const archiveType = archive.ext.slice(1) - - child_process.execSync( - `node scripts/create-release-archive --releaseName ${getReleaseVersion()} --destDir ${archive.dir} --archiveType ${archiveType} ${ref}`, - { cwd: repoDir } - ) -} - -/** - * Create a test prototype from the current release archive - * - * Creates a prototype at `prototypePath`. - * - * @param {string} prototypePath - * @param {Object} [options] - * @param {string} [options.archivePath] - Path to archive to use to create prototype, if not provided uses mkReleaseArchiveSync - * @returns {void} - */ -function mkPrototypeSync (prototypePath, { archivePath } = {}) { - if (fs.existsSync(prototypePath)) { - const err = new Error(`path already exists '${prototypePath}'`) - err.path = prototypePath - err.code = 'EEXIST' - throw err - } - - archivePath = archivePath || mkReleaseArchiveSync() - const releaseDir = path.parse(archivePath).name - - const parentDir = path.dirname(prototypePath) - const name = path.basename(prototypePath) - - fs.mkdirSync(parentDir, { recursive: true }) - - child_process.execSync(`unzip -q ${archivePath}`, { cwd: parentDir }) - child_process.execSync(`mv ${releaseDir} ${name}`, { cwd: parentDir }) -} - -module.exports = { - mkdtempSync, - mkReleaseArchiveSync, - mkPrototypeSync -} diff --git a/package.json b/package.json index 360574abc..1899f8d49 100644 --- a/package.json +++ b/package.json @@ -55,7 +55,6 @@ }, "jest": { "testPathIgnorePatterns": [ - "__tests__/spec/utils.js", "/node_modules/", "/tmp/" ] From 0853eff6bdef6ba4432fa5c3b073c0eacda70ac2 Mon Sep 17 00:00:00 2001 From: Oliver Byford Date: Thu, 11 Jan 2024 11:56:01 +0000 Subject: [PATCH 3/3] Remove notifications-node-client MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit This is only needed for people building prototypes who want to use Notify and is not needed for the docs site. (It’s leftover from when this repo was forked from the Prototype Kit) --- package-lock.json | 71 +++++++++++++++++++++++++++++++++-------------- package.json | 1 - 2 files changed, 50 insertions(+), 22 deletions(-) diff --git a/package-lock.json b/package-lock.json index ffdee5678..c941c0556 100644 --- a/package-lock.json +++ b/package-lock.json @@ -27,7 +27,6 @@ "marked": "^4.0.10", "memorystore": "^1.6.7", "nodemon": "^2.0.15", - "notifications-node-client": "^5.1.0", "nunjucks": "^3.2.1", "portscanner": "^2.1.1", "require-dir": "^1.0.0", @@ -2254,7 +2253,8 @@ "node_modules/buffer-equal-constant-time": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/buffer-equal-constant-time/-/buffer-equal-constant-time-1.0.1.tgz", - "integrity": "sha1-+OcRMvf/5uAaXJaXpMbz5I1cyBk=" + "integrity": "sha1-+OcRMvf/5uAaXJaXpMbz5I1cyBk=", + "dev": true }, "node_modules/buffer-from": { "version": "1.1.2", @@ -2932,6 +2932,7 @@ "version": "1.0.11", "resolved": "https://registry.npmjs.org/ecdsa-sig-formatter/-/ecdsa-sig-formatter-1.0.11.tgz", "integrity": "sha512-nagl3RYrbNv6kQkeJIpt6NJZy8twLB/2vtz6yN9Z4vRKHN4/QZJIEbqohALSgwKdnksuY3k5Addp5lg8sVoVcQ==", + "dev": true, "dependencies": { "safe-buffer": "^5.0.1" } @@ -7229,6 +7230,7 @@ "version": "8.5.1", "resolved": "https://registry.npmjs.org/jsonwebtoken/-/jsonwebtoken-8.5.1.tgz", "integrity": "sha512-XjwVfRS6jTMsqYs0EsuJ4LGxXV14zQybNd4L2r0UvbVnSF9Af8x7p5MzbJ90Ioz/9TI41/hTCvznF/loiSzn8w==", + "dev": true, "dependencies": { "jws": "^3.2.2", "lodash.includes": "^4.3.0", @@ -7249,7 +7251,8 @@ "node_modules/jsonwebtoken/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==" + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "dev": true }, "node_modules/jsx-ast-utils": { "version": "2.4.1", @@ -7268,6 +7271,7 @@ "version": "1.4.1", "resolved": "https://registry.npmjs.org/jwa/-/jwa-1.4.1.tgz", "integrity": "sha512-qiLX/xhEEFKUAJ6FiBMbes3w9ATzyk5W7Hvzpa/SLYdxNtng+gcurvrI7TbACjIXlsJyr05/S1oUhZrc63evQA==", + "dev": true, "dependencies": { "buffer-equal-constant-time": "1.0.1", "ecdsa-sig-formatter": "1.0.11", @@ -7278,6 +7282,7 @@ "version": "3.2.2", "resolved": "https://registry.npmjs.org/jws/-/jws-3.2.2.tgz", "integrity": "sha512-YHlZCB6lMTllWDtSPHz/ZXTsi8S00usEV6v1tjq8tOUZzw7DpSDWVXjXDre6ed1w/pd495ODpHZYSdkRTsa0HA==", + "dev": true, "dependencies": { "jwa": "^1.4.1", "safe-buffer": "^5.0.1" @@ -7426,12 +7431,14 @@ "node_modules/lodash.includes": { "version": "4.3.0", "resolved": "https://registry.npmjs.org/lodash.includes/-/lodash.includes-4.3.0.tgz", - "integrity": "sha1-YLuYqHy5I8aMoeUTJUgzFISfVT8=" + "integrity": "sha1-YLuYqHy5I8aMoeUTJUgzFISfVT8=", + "dev": true }, "node_modules/lodash.isboolean": { "version": "3.0.3", "resolved": "https://registry.npmjs.org/lodash.isboolean/-/lodash.isboolean-3.0.3.tgz", - "integrity": "sha1-bC4XHbKiV82WgC/UOwGyDV9YcPY=" + "integrity": "sha1-bC4XHbKiV82WgC/UOwGyDV9YcPY=", + "dev": true }, "node_modules/lodash.isfinite": { "version": "3.3.2", @@ -7441,27 +7448,32 @@ "node_modules/lodash.isinteger": { "version": "4.0.4", "resolved": "https://registry.npmjs.org/lodash.isinteger/-/lodash.isinteger-4.0.4.tgz", - "integrity": "sha1-YZwK89A/iwTDH1iChAt3sRzWg0M=" + "integrity": "sha1-YZwK89A/iwTDH1iChAt3sRzWg0M=", + "dev": true }, "node_modules/lodash.isnumber": { "version": "3.0.3", "resolved": "https://registry.npmjs.org/lodash.isnumber/-/lodash.isnumber-3.0.3.tgz", - "integrity": "sha1-POdoEMWSjQM1IwGsKHMX8RwLH/w=" + "integrity": "sha1-POdoEMWSjQM1IwGsKHMX8RwLH/w=", + "dev": true }, "node_modules/lodash.isplainobject": { "version": "4.0.6", "resolved": "https://registry.npmjs.org/lodash.isplainobject/-/lodash.isplainobject-4.0.6.tgz", - "integrity": "sha1-fFJqUtibRcRcxpC4gWO+BJf1UMs=" + "integrity": "sha1-fFJqUtibRcRcxpC4gWO+BJf1UMs=", + "dev": true }, "node_modules/lodash.isstring": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/lodash.isstring/-/lodash.isstring-4.0.1.tgz", - "integrity": "sha1-1SfftUVuynzJu5XV2ur4i6VKVFE=" + "integrity": "sha1-1SfftUVuynzJu5XV2ur4i6VKVFE=", + "dev": true }, "node_modules/lodash.once": { "version": "4.1.1", "resolved": "https://registry.npmjs.org/lodash.once/-/lodash.once-4.1.1.tgz", - "integrity": "sha1-DdOXEhPHxW34gJd9UEyI+0cal6w=" + "integrity": "sha1-DdOXEhPHxW34gJd9UEyI+0cal6w=", + "dev": true }, "node_modules/log-symbols": { "version": "4.1.0", @@ -7894,6 +7906,7 @@ "version": "5.1.0", "resolved": "https://registry.npmjs.org/notifications-node-client/-/notifications-node-client-5.1.0.tgz", "integrity": "sha512-a3aoSZPHSc/8VaccfGvKKsIZ/crqbglP9dNvg0pHHTgWi6BYiJc+Md7wOPizzEPACa+SKdifs06VY8ktbTzySA==", + "dev": true, "dependencies": { "axios": "^0.21.1", "jsonwebtoken": "^8.2.1", @@ -10238,7 +10251,8 @@ "node_modules/underscore": { "version": "1.13.1", "resolved": "https://registry.npmjs.org/underscore/-/underscore-1.13.1.tgz", - "integrity": "sha512-hzSoAVtJF+3ZtiFX0VgfFPHEDRm7Y/QPjGyNo4TVdnDTdft3tr8hEkD25a1jC+TjTuE7tkHGKkhwCgs9dgBB2g==" + "integrity": "sha512-hzSoAVtJF+3ZtiFX0VgfFPHEDRm7Y/QPjGyNo4TVdnDTdft3tr8hEkD25a1jC+TjTuE7tkHGKkhwCgs9dgBB2g==", + "dev": true }, "node_modules/uniq": { "version": "1.0.1", @@ -12317,7 +12331,8 @@ "buffer-equal-constant-time": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/buffer-equal-constant-time/-/buffer-equal-constant-time-1.0.1.tgz", - "integrity": "sha1-+OcRMvf/5uAaXJaXpMbz5I1cyBk=" + "integrity": "sha1-+OcRMvf/5uAaXJaXpMbz5I1cyBk=", + "dev": true }, "buffer-from": { "version": "1.1.2", @@ -12822,6 +12837,7 @@ "version": "1.0.11", "resolved": "https://registry.npmjs.org/ecdsa-sig-formatter/-/ecdsa-sig-formatter-1.0.11.tgz", "integrity": "sha512-nagl3RYrbNv6kQkeJIpt6NJZy8twLB/2vtz6yN9Z4vRKHN4/QZJIEbqohALSgwKdnksuY3k5Addp5lg8sVoVcQ==", + "dev": true, "requires": { "safe-buffer": "^5.0.1" } @@ -15979,6 +15995,7 @@ "version": "8.5.1", "resolved": "https://registry.npmjs.org/jsonwebtoken/-/jsonwebtoken-8.5.1.tgz", "integrity": "sha512-XjwVfRS6jTMsqYs0EsuJ4LGxXV14zQybNd4L2r0UvbVnSF9Af8x7p5MzbJ90Ioz/9TI41/hTCvznF/loiSzn8w==", + "dev": true, "requires": { "jws": "^3.2.2", "lodash.includes": "^4.3.0", @@ -15995,7 +16012,8 @@ "ms": { "version": "2.1.3", "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", - "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==" + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "dev": true } } }, @@ -16013,6 +16031,7 @@ "version": "1.4.1", "resolved": "https://registry.npmjs.org/jwa/-/jwa-1.4.1.tgz", "integrity": "sha512-qiLX/xhEEFKUAJ6FiBMbes3w9ATzyk5W7Hvzpa/SLYdxNtng+gcurvrI7TbACjIXlsJyr05/S1oUhZrc63evQA==", + "dev": true, "requires": { "buffer-equal-constant-time": "1.0.1", "ecdsa-sig-formatter": "1.0.11", @@ -16023,6 +16042,7 @@ "version": "3.2.2", "resolved": "https://registry.npmjs.org/jws/-/jws-3.2.2.tgz", "integrity": "sha512-YHlZCB6lMTllWDtSPHz/ZXTsi8S00usEV6v1tjq8tOUZzw7DpSDWVXjXDre6ed1w/pd495ODpHZYSdkRTsa0HA==", + "dev": true, "requires": { "jwa": "^1.4.1", "safe-buffer": "^5.0.1" @@ -16135,12 +16155,14 @@ "lodash.includes": { "version": "4.3.0", "resolved": "https://registry.npmjs.org/lodash.includes/-/lodash.includes-4.3.0.tgz", - "integrity": "sha1-YLuYqHy5I8aMoeUTJUgzFISfVT8=" + "integrity": "sha1-YLuYqHy5I8aMoeUTJUgzFISfVT8=", + "dev": true }, "lodash.isboolean": { "version": "3.0.3", "resolved": "https://registry.npmjs.org/lodash.isboolean/-/lodash.isboolean-3.0.3.tgz", - "integrity": "sha1-bC4XHbKiV82WgC/UOwGyDV9YcPY=" + "integrity": "sha1-bC4XHbKiV82WgC/UOwGyDV9YcPY=", + "dev": true }, "lodash.isfinite": { "version": "3.3.2", @@ -16150,27 +16172,32 @@ "lodash.isinteger": { "version": "4.0.4", "resolved": "https://registry.npmjs.org/lodash.isinteger/-/lodash.isinteger-4.0.4.tgz", - "integrity": "sha1-YZwK89A/iwTDH1iChAt3sRzWg0M=" + "integrity": "sha1-YZwK89A/iwTDH1iChAt3sRzWg0M=", + "dev": true }, "lodash.isnumber": { "version": "3.0.3", "resolved": "https://registry.npmjs.org/lodash.isnumber/-/lodash.isnumber-3.0.3.tgz", - "integrity": "sha1-POdoEMWSjQM1IwGsKHMX8RwLH/w=" + "integrity": "sha1-POdoEMWSjQM1IwGsKHMX8RwLH/w=", + "dev": true }, "lodash.isplainobject": { "version": "4.0.6", "resolved": "https://registry.npmjs.org/lodash.isplainobject/-/lodash.isplainobject-4.0.6.tgz", - "integrity": "sha1-fFJqUtibRcRcxpC4gWO+BJf1UMs=" + "integrity": "sha1-fFJqUtibRcRcxpC4gWO+BJf1UMs=", + "dev": true }, "lodash.isstring": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/lodash.isstring/-/lodash.isstring-4.0.1.tgz", - "integrity": "sha1-1SfftUVuynzJu5XV2ur4i6VKVFE=" + "integrity": "sha1-1SfftUVuynzJu5XV2ur4i6VKVFE=", + "dev": true }, "lodash.once": { "version": "4.1.1", "resolved": "https://registry.npmjs.org/lodash.once/-/lodash.once-4.1.1.tgz", - "integrity": "sha1-DdOXEhPHxW34gJd9UEyI+0cal6w=" + "integrity": "sha1-DdOXEhPHxW34gJd9UEyI+0cal6w=", + "dev": true }, "log-symbols": { "version": "4.1.0", @@ -16500,6 +16527,7 @@ "version": "5.1.0", "resolved": "https://registry.npmjs.org/notifications-node-client/-/notifications-node-client-5.1.0.tgz", "integrity": "sha512-a3aoSZPHSc/8VaccfGvKKsIZ/crqbglP9dNvg0pHHTgWi6BYiJc+Md7wOPizzEPACa+SKdifs06VY8ktbTzySA==", + "dev": true, "requires": { "axios": "^0.21.1", "jsonwebtoken": "^8.2.1", @@ -18261,7 +18289,8 @@ "underscore": { "version": "1.13.1", "resolved": "https://registry.npmjs.org/underscore/-/underscore-1.13.1.tgz", - "integrity": "sha512-hzSoAVtJF+3ZtiFX0VgfFPHEDRm7Y/QPjGyNo4TVdnDTdft3tr8hEkD25a1jC+TjTuE7tkHGKkhwCgs9dgBB2g==" + "integrity": "sha512-hzSoAVtJF+3ZtiFX0VgfFPHEDRm7Y/QPjGyNo4TVdnDTdft3tr8hEkD25a1jC+TjTuE7tkHGKkhwCgs9dgBB2g==", + "dev": true }, "uniq": { "version": "1.0.1", diff --git a/package.json b/package.json index 1899f8d49..e01b75ad3 100644 --- a/package.json +++ b/package.json @@ -35,7 +35,6 @@ "marked": "^4.0.10", "memorystore": "^1.6.7", "nodemon": "^2.0.15", - "notifications-node-client": "^5.1.0", "nunjucks": "^3.2.1", "portscanner": "^2.1.1", "require-dir": "^1.0.0",