From a3f14182a45390eab22b6d63a7a8c62f1cd0b76b Mon Sep 17 00:00:00 2001 From: Carlos Valente <34649812+cpvalente@users.noreply.github.com> Date: Sat, 29 Oct 2022 20:40:38 +0200 Subject: [PATCH] V2 message manager (#234) * refactor: server run script * refactor: extract message control feature * refactor: socket usage for message control feature * refactor: migrate e2e testing to playwright * chore: add feature tests * refactor: add validation on socket controller * chore: jest tests server logic * chore: update tests * chore: run playwright tests on pull_requests --- .github/workflows/ontime_cy.yml | 23 +- .../components/buttons/TooltipActionBtn.tsx | 1 - .../src/features/control/message/InputRow.tsx | 4 +- client/src/features/viewers/ViewWrapper.jsx | 49 +- .../features/viewers/studio/StudioClock.jsx | 7 +- server/.gitignore | 4 + server/cypress.json | 5 - server/cypress/integration/navigation.spec.js | 172 ----- server/cypress/plugins/index.js | 22 - server/cypress/support/commands.js | 25 - server/cypress/support/index.js | 20 - server/package.json | 20 +- server/playwright.config.ts | 84 +++ server/src/app.js | 16 +- .../classes/message-manager/MessageManager.js | 102 +++ server/src/classes/socket/SocketController.js | 77 ++- server/src/classes/socket/socketConfig.js | 1 + server/src/classes/timer/EventTimer.js | 101 +-- .../timer/__tests__/eventtimer.test.js | 10 - server/src/controllers/playbackController.js | 12 - .../routes/__tests__/playbackRouter.tests.js | 18 - server/src/routes/playbackRouter.js | 26 +- server/tests/features/message-control.spec.ts | 38 ++ server/tests/features/minimal-url.spec.ts | 14 + server/tests/smoke-tests.test.ts | 78 +++ server/yarn.lock | 595 ++---------------- 26 files changed, 476 insertions(+), 1048 deletions(-) create mode 100644 server/.gitignore delete mode 100644 server/cypress.json delete mode 100644 server/cypress/integration/navigation.spec.js delete mode 100644 server/cypress/plugins/index.js delete mode 100644 server/cypress/support/commands.js delete mode 100644 server/cypress/support/index.js create mode 100644 server/playwright.config.ts create mode 100644 server/src/classes/message-manager/MessageManager.js create mode 100644 server/src/classes/socket/socketConfig.js create mode 100644 server/tests/features/message-control.spec.ts create mode 100644 server/tests/features/minimal-url.spec.ts create mode 100644 server/tests/smoke-tests.test.ts diff --git a/.github/workflows/ontime_cy.yml b/.github/workflows/ontime_cy.yml index d7a15ee00..e08c03b40 100644 --- a/.github/workflows/ontime_cy.yml +++ b/.github/workflows/ontime_cy.yml @@ -3,7 +3,7 @@ name: ontime_test_CI -on: [push, pull_request] +on: [pull_request] jobs: build: @@ -43,12 +43,21 @@ jobs: run: yarn install && yarn setdb working-directory: ./server - - name: Electron - Run tests + - name: Server - run tests run: yarn test working-directory: ./server - - name: Cypress run - uses: cypress-io/github-action@v2 - with: - working-directory: ./server - start: yarn cypress +# - name: Install Playwright Browsers +# run: npx playwright install --with-deps +# working-directory: ./server +# +# - name: Run Playwright tests +# run: yarn e2e +# working-directory: ./server +# +# - uses: actions/upload-artifact@v3 +# if: always() +# with: +# name: playwright-report +# path: playwright-report/ +# retention-days: 7 diff --git a/client/src/common/components/buttons/TooltipActionBtn.tsx b/client/src/common/components/buttons/TooltipActionBtn.tsx index a7da4148e..3fff1c293 100644 --- a/client/src/common/components/buttons/TooltipActionBtn.tsx +++ b/client/src/common/components/buttons/TooltipActionBtn.tsx @@ -12,7 +12,6 @@ export default function TooltipActionBtn(props: TooltipActionBtnProps) { - {label} +
actionHandler('update', { field: 'isPublic', value: !visible })} tooltip={visible ? 'Make invisible' : 'Make visible'} - aria-label='Toggle tooltip visibility' + aria-label={`Toggle ${label}`} openDelay={tooltipDelayMid} icon={} colorScheme='blue' diff --git a/client/src/features/viewers/ViewWrapper.jsx b/client/src/features/viewers/ViewWrapper.jsx index 425f3a019..67f904444 100644 --- a/client/src/features/viewers/ViewWrapper.jsx +++ b/client/src/features/viewers/ViewWrapper.jsx @@ -2,6 +2,7 @@ import { useEffect, useMemo, useState } from 'react'; import { useSocket } from '../../common/context/socketContext'; +import { useMessageControlProvider } from '../../common/hooks/useSocketProvider'; import useSubscription from '../../common/hooks/useSubscription'; import useEvent from '../../common/hooks-query/useEvent'; import useEventsList from '../../common/hooks-query/useEventsList'; @@ -12,20 +13,9 @@ const withSocket = (Component) => { const { data: eventsData } = useEventsList(); const { data: genData } = useEvent(); const { data: viewSettings } = useViewSettings(); + const { data: messages } = useMessageControlProvider(); const socket = useSocket(); - const [pres, setPres] = useState({ - text: '', - visible: false, - }); - const [publ, setPubl] = useState({ - text: '', - visible: false, - }); - const [lower, setLower] = useState({ - text: '', - visible: false, - }); const [publicSelectedId, setPublicSelectedId] = useState(null); const [timer] = useSubscription('timer', { @@ -61,35 +51,10 @@ const withSocket = (Component) => { if (!socket) { return; } - - // Handle timer messages - socket.on('messages-timer', (data) => { - setPres({ ...data }); - }); - - // Handle public messages - socket.on('messages-public', (data) => { - setPubl({ ...data }); - }); - - // Handle lower third messages - socket.on('messages-lower', (data) => { - setLower({ ...data }); - }); - + // todo: remove socket.on('publicselected-id', (data) => { setPublicSelectedId(data); }); - - // Ask for up to date data - socket.emit('get-messages'); - - // Clear listeners - return () => { - socket.off('messages-public'); - socket.off('messages-timer'); - socket.off('messages-lower'); - }; }, [socket]); @@ -161,9 +126,9 @@ const withSocket = (Component) => { return ( { viewSettings={viewSettings} nextId={nextId} general={genData} - onAir={onAir} + onAir={messages.onAir} /> ); }; diff --git a/client/src/features/viewers/studio/StudioClock.jsx b/client/src/features/viewers/studio/StudioClock.jsx index dc68dc6fb..2027e6176 100644 --- a/client/src/features/viewers/studio/StudioClock.jsx +++ b/client/src/features/viewers/studio/StudioClock.jsx @@ -94,7 +94,12 @@ export default function StudioClock(props) {
-
ON AIR
+
+ ON AIR +
    {schedule.map((s) => ( diff --git a/server/.gitignore b/server/.gitignore new file mode 100644 index 000000000..75e854d8d --- /dev/null +++ b/server/.gitignore @@ -0,0 +1,4 @@ +node_modules/ +/test-results/ +/playwright-report/ +/playwright/.cache/ diff --git a/server/cypress.json b/server/cypress.json deleted file mode 100644 index f247843b4..000000000 --- a/server/cypress.json +++ /dev/null @@ -1,5 +0,0 @@ -{ - "viewportWidth": 1920, - "viewportHeight": 1080, - "video": false -} diff --git a/server/cypress/integration/navigation.spec.js b/server/cypress/integration/navigation.spec.js deleted file mode 100644 index 434829e62..000000000 --- a/server/cypress/integration/navigation.spec.js +++ /dev/null @@ -1,172 +0,0 @@ -// go through routes and make sure things render as expected -describe('validate routes', () => { - describe('viewer routes', () => { - it('default to stage timer', () => { - cy.visit('http://localhost:4001/'); - cy.get('[data-testid="timer-view"]').should('exist'); - cy.contains('Time Now'); - }); - - it('renders stage timer routes', () => { - cy.visit('http://localhost:4001/timer'); - cy.get('[data-testid="timer-view"]').should('exist'); - cy.contains('Time Now'); - - cy.visit('http://localhost:4001/presenter'); - cy.get('[data-testid="timer-view"]').should('exist'); - cy.contains('Time Now'); - - cy.visit('http://localhost:4001/speaker'); - cy.get('[data-testid="timer-view"]').should('exist'); - cy.contains('Time Now'); - - cy.visit('http://localhost:4001/stage'); - cy.get('[data-testid="timer-view"]').should('exist'); - cy.contains('Time Now'); - }); - - it('renders backstage routes', () => { - cy.visit('http://localhost:4001/backstage'); - cy.get('[data-testid="backstage-view"]').should('exist'); - cy.contains('Today'); - cy.contains('Time Now'); - cy.contains('Info'); - - cy.visit('http://localhost:4001/sm'); - cy.get('[data-testid="backstage-view"]').should('exist'); - cy.contains('Today'); - cy.contains('Time Now'); - cy.contains('Info'); - }); - - it('renders public view', () => { - cy.visit('http://localhost:4001/public'); - cy.get('[data-testid="public-view"]').should('exist'); - cy.contains('Today'); - cy.contains('Time Now'); - cy.contains('Info'); - }); - - it('renders pip view', () => { - cy.visit('http://localhost:4001/pip'); - cy.get('[data-testid="pip-view"]').should('exist'); - cy.contains('Today'); - }); - - it('renders lower third with no errors', () => { - cy.visit('http://localhost:4001/lower'); - cy.get('[data-testid="error-container"]').should('not.exist'); - }); - - it('renders lower third with no errors', () => { - cy.visit('http://localhost:4001/lower'); - cy.get('[data-testid="error-container"]').should('not.exist'); - }); - - it('renders studio clock', () => { - cy.visit('http://localhost:4001/studio'); - cy.get('[data-testid="studio-view"]').should('exist'); - cy.contains('ON AIR'); - }); - - it('renders countdown selection', () => { - cy.visit('http://localhost:4001/countdown'); - cy.get('[data-testid="countdown-view"]').should('exist'); - cy.get('[data-testid="countdown-select"]').should('exist'); - cy.contains('Select an event to follow'); - }); - - it('renders countdown with event', () => { - cy.visit('http://localhost:4001/countdown?event=1'); - cy.get('[data-testid="countdown-view"]').should('exist'); - cy.get('[data-testid="countdown-event"]').should('exist'); - cy.contains('Time Now'); - cy.contains('Start Time'); - cy.contains('End Time'); - }); - }); - - describe('clock view timer', () => { - it('renders base route', () => { - cy.visit('http://localhost:4001/clock'); - cy.get('[data-testid="clock-view"]').should('exist'); - cy.get('.App').should('not.contain', 'Time Now'); - }); - }); - - describe('minimal timer and options', () => { - it('renders base route', () => { - cy.visit('http://localhost:4001/minimal'); - cy.get('[data-testid="minimal-timer"]').should('exist'); - cy.get('.App').should('not.contain', 'Time Now'); - }); - - it('renders with defined options', () => { - cy.visit( - 'http://localhost:4001/minimal?font=arial=1&size=1.5&text=0f0&key=ff0&hideovertime=true&alignx=start&aligny=end&offsetx=100&offsety=-100&hidemessages=true' - ); - cy.get('[data-testid="minimal-timer"]').should('exist'); - cy.get('.App').should('not.contain', 'Time Now'); - }); - - it('hides nav on given option', () => { - cy.visit('http://localhost:4001/minimal?hidenav=true'); - cy.get('[data-testid="minimal-timer"]').should('exist'); - cy.get('.App').should('not.contain', 'Time Now'); - cy.get('[data-testid="nav-logo"]').should('not.exist'); - }); - }); - - describe('editor routes', () => { - it('app editor', () => { - cy.visit('http://localhost:4001/editor'); - cy.get('[data-testid="event-editor"]').should('exist'); - cy.get('[data-testid="panel-event-list"]').should('exist'); - cy.get('[data-testid="panel-timer-control"]').should('exist'); - cy.get('[data-testid="panel-messages-control"]').should('exist'); - cy.get('[data-testid="panel-info"]').should('exist'); - }); - it('self contained eventlist', () => { - cy.visit('http://localhost:4001/eventlist'); - cy.get('[data-testid="panel-event-list"]').should('exist'); - cy.get('[data-testid="panel-timer-control"]').should('not.exist'); - cy.get('[data-testid="panel-messages-control"]').should('not.exist'); - cy.get('[data-testid="panel-info"]').should('not.exist'); - }); - it('self contained timercontrol', () => { - cy.visit('http://localhost:4001/timercontrol'); - cy.get('[data-testid="panel-event-list"]').should('not.exist'); - cy.get('[data-testid="panel-timer-control"]').should('exist'); - cy.get('[data-testid="panel-messages-control"]').should('not.exist'); - cy.get('[data-testid="panel-info"]').should('not.exist'); - }); - it('self contained messagecontrol', () => { - cy.visit('http://localhost:4001/messagecontrol'); - cy.get('[data-testid="panel-event-list"]').should('not.exist'); - cy.get('[data-testid="panel-timer-control"]').should('not.exist'); - cy.get('[data-testid="panel-messages-control"]').should('exist'); - cy.get('[data-testid="panel-info"]').should('not.exist'); - }); - it('self contained info', () => { - cy.visit('http://localhost:4001/info'); - cy.get('[data-testid="panel-event-list"]').should('not.exist'); - cy.get('[data-testid="panel-timer-control"]').should('not.exist'); - cy.get('[data-testid="panel-messages-control"]').should('not.exist'); - cy.get('[data-testid="panel-info"]').should('exist'); - }); - }); - - it('table routes', () => { - cy.visit('http://localhost:4001/table'); - cy.contains('Running Timer'); - cy.get('[data-testid="cuesheet"]').should('exist'); - - cy.visit('http://localhost:4001/cuesheet'); - cy.contains('Running Timer'); - cy.get('[data-testid="cuesheet"]').should('exist'); - - cy.visit('http://localhost:4001/cuelist'); - cy.contains('Running Timer'); - cy.get('[data-testid="cuesheet"]').should('exist'); - }); -}); diff --git a/server/cypress/plugins/index.js b/server/cypress/plugins/index.js deleted file mode 100644 index 59b2bab6e..000000000 --- a/server/cypress/plugins/index.js +++ /dev/null @@ -1,22 +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) - -/** - * @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 -} diff --git a/server/cypress/support/commands.js b/server/cypress/support/commands.js deleted file mode 100644 index 119ab03f7..000000000 --- a/server/cypress/support/commands.js +++ /dev/null @@ -1,25 +0,0 @@ -// *********************************************** -// 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/server/cypress/support/index.js b/server/cypress/support/index.js deleted file mode 100644 index d68db96df..000000000 --- a/server/cypress/support/index.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/server/package.json b/server/package.json index f7764e975..3791a19f9 100644 --- a/server/package.json +++ b/server/package.json @@ -12,7 +12,7 @@ "license": "AGPL-3.0-only", "main": "main.js", "devDependencies": { - "cypress": "^9.6.0", + "@playwright/test": "^1.27.1", "electron": "^21.1.0", "electron-builder": "^23.6.0", "eslint": "^8.25.0", @@ -32,9 +32,8 @@ "prep": "yarn clean && yarn setdb", "test": "node --experimental-vm-modules node_modules/jest/bin/jest.js", "start": "NODE_ENV=development electron .", - "start:server": "nodemon --experimental-modules --es-module-specifier-resolution=node src/app.js", - "cy:run": "cypress run", - "cypress": "start-server-and-test start http://localhost:4001 cy:run", + "start:server": "nodemon --experimental-modules --es-module-specifier-resolution=node src/run.js", + "e2e": "set IS_TEST=true && playwright test", "pack": "electron-builder --dir", "dist": "electron-builder", "dist-win": "electron-builder --publish=never --x64 --win", @@ -44,10 +43,7 @@ }, "jest": { "testEnvironment": "node", - "testPathIgnorePatterns": [ - "dist", - "cypress" - ] + "rootDir": "src" }, "build": { "productName": "ontime", @@ -88,7 +84,7 @@ "!**/{yarn.lock,yarn-error.log}", "!**/{test,tests,__test__,__tests__}", "!**/{mock,mocks,__mock__,__mocks__}", - "!*{.spec.js,*.test.js}" + "!*{.spec.js,*.test.js,*.spec.ts,.test.ts}" ], "directories": { "buildResources": "./assets/" @@ -101,7 +97,8 @@ "**/*", "!**/{yarn.lock,yarn-error.log}", "!**/{test,tests,__test__,__tests__}", - "!**/{mock,mocks,__mock__,__mocks__}" + "!**/{mock,mocks,__mock__,__mocks__}", + "!*{.spec.js,*.test.js,*.spec.ts,.test.ts}" ] }, { @@ -111,7 +108,8 @@ "**/*", "!**/{yarn.lock,yarn-error.log}", "!**/{test,tests,__test__,__tests__}", - "!**/{mock,mocks,__mock__,__mocks__}" + "!**/{mock,mocks,__mock__,__mocks__}", + "!*{.spec.js,*.test.js,*.spec.ts,.test.ts}" ] } ] diff --git a/server/playwright.config.ts b/server/playwright.config.ts new file mode 100644 index 000000000..80a3b73b1 --- /dev/null +++ b/server/playwright.config.ts @@ -0,0 +1,84 @@ +import type { PlaywrightTestConfig } from '@playwright/test'; +import { devices } from '@playwright/test'; + +/** + * Read environment variables from file. + * https://github.com/motdotla/dotenv + */ +// require('dotenv').config(); + +/** + * See https://playwright.dev/docs/test-configuration. + */ +const config: PlaywrightTestConfig = { + testDir: './tests', + /* Maximum time one test can run for. */ + timeout: 30 * 1000, + expect: { + /** + * Maximum time expect() should wait for the condition to be met. + * For example in `await expect(locator).toHaveText();` + */ + timeout: 5000 + }, + /* Run tests in files in parallel */ + fullyParallel: true, + /* Fail the build on CI if you accidentally left test.only in the source code. */ + forbidOnly: !!process.env.CI, + /* Retry on CI only */ + retries: process.env.CI ? 2 : 0, + /* Opt out of parallel tests on CI. */ + workers: process.env.CI ? 1 : undefined, + /* Reporter to use. See https://playwright.dev/docs/test-reporters */ + reporter: 'html', + /* Shared settings for all the projects below. See https://playwright.dev/docs/api/class-testoptions. */ + use: { + screenshot: 'only-on-failure', // Capture screenshot after each test failure + viewport: { width: 1920, height: 1080 }, + /* Maximum time each action such as `click()` can take. Defaults to 0 (no limit). */ + actionTimeout: 0, + /* Base URL to use in actions like `await page.goto('/')`. */ + baseURL: 'http://localhost:4001', + + /* Collect trace when retrying the failed test. See https://playwright.dev/docs/trace-viewer */ + trace: 'on-first-retry', + }, + + /* Configure projects for major browsers */ + projects: [ + { + name: 'chromium', + use: { + ...devices['Desktop Chrome'], + }, + }, + + { + name: 'firefox', + testMatch: /.*.spec.ts/, + use: { + ...devices['Desktop Firefox'], + }, + }, + + { + name: 'webkit', + testMatch: /.*.spec.ts/, + use: { + ...devices['Desktop Safari'], + }, + }, + ], + + /* Folder for test artifacts such as screenshots, videos, traces, etc. */ + outputDir: 'test-results/', + + /* Run your local dev server before starting the tests */ + webServer: { + command: 'yarn start:server', + timeout: 120 * 1000, + port: 4001, + }, +}; + +export default config; diff --git a/server/src/app.js b/server/src/app.js index 513a80170..ae06db389 100644 --- a/server/src/app.js +++ b/server/src/app.js @@ -31,6 +31,7 @@ import { DataProvider } from './classes/data-provider/DataProvider.js'; const env = process.env.NODE_ENV || 'production'; const __filename = fileURLToPath(import.meta.url); const __dirname = dirname(__filename); +const isTest = process.env.IS_TEST; export const { db, data } = await loadDb(__dirname); console.log(`Starting ontime version ${process.env.npm_package_version}`); @@ -60,12 +61,21 @@ app.use('/playback', playbackRouter); // serve static - css app.use('/external', express.static(join(__dirname, 'external'))); -// serve static - react -app.use(express.static(join(__dirname, env === 'production' ? '../' : '../../', 'client/build'))); + +// serve static - react, in test mode we fetch the react app from module +const resolvedPath = () => { + const sameModule = '../'; + const siblingModule = '../../'; + if (env === 'production' && !isTest) { + return sameModule; + } + return siblingModule; +}; +app.use(express.static(join(__dirname, resolvedPath(), 'client/build'))); app.get('*', (req, res) => { res.sendFile( - resolve(__dirname, env === 'production' ? '../' : '../../', 'client', 'build', 'index.html'), + resolve(__dirname, resolvedPath(), 'client', 'build', 'index.html'), ); }); diff --git a/server/src/classes/message-manager/MessageManager.js b/server/src/classes/message-manager/MessageManager.js new file mode 100644 index 000000000..e0bf03c25 --- /dev/null +++ b/server/src/classes/message-manager/MessageManager.js @@ -0,0 +1,102 @@ +let instance; + +export class MessageManager { + constructor() { + if (instance) { + throw new Error('There can be only one'); + } + instance = this; + this.socket = null; + + this.presenter = { + text: '', + visible: false, + }; + this.public = { + text: '', + visible: false, + }; + this.lower = { + text: '', + visible: false, + }; + this.onAir = false; + } + + /** + * @description sets message on stage timer screen + * @param payload {string} + */ + setTimerText(payload) { + this.presenter.text = payload; + return this.getAll(); + } + + /** + * @description sets message visibility on stage timer screen + * @param status {boolean} + */ + setTimerVisibility(status) { + this.presenter.visible = status; + return this.getAll(); + } + + /** + * @description sets message on public screen + * @param payload {string} + */ + setPublicText(payload) { + this.public.text = payload; + return this.getAll(); + } + + /** + * @description sets message visibility on public screen + * @param status {boolean} + */ + setPublicVisibility(status) { + this.public.visible = status; + return this.getAll(); + } + + /** + * @description sets message on lower third screen + * @param payload {string} + */ + setLowerText(payload) { + this.lower.text = payload; + return this.getAll(); + } + + /** + * @description sets message visibility on lower third screen + * @param status {boolean} + */ + setLowerVisibility(status) { + this.lower.visible = status; + return this.getAll(); + } + + /** + * @description set state of onAir + * @param status {boolean} + */ + setOnAir(status) { + this.onAir = status; + return this.getAll(); + } + + /** + * @description Returns feature data + */ + getAll() { + return { + presenter: this.presenter, + public: this.public, + lower: this.lower, + onAir: this.onAir, + }; + } +} + +export const messageManager = new MessageManager(); diff --git a/server/src/classes/socket/SocketController.js b/server/src/classes/socket/SocketController.js index 8778592e6..872d02b8b 100644 --- a/server/src/classes/socket/SocketController.js +++ b/server/src/classes/socket/SocketController.js @@ -1,8 +1,12 @@ import { Server } from 'socket.io'; + import getRandomName from '../../utils/getRandomName.js'; import { generateId } from '../../utils/generate_id.js'; import { stringFromMillis } from '../../utils/time.js'; import { Timer } from '../timer/Timer.js'; +import { messageManager } from '../message-manager/MessageManager.js'; + +import { ADDRESS_MESSAGE_CONTROL } from './socketConfig.js'; class SocketController { constructor() { @@ -167,17 +171,6 @@ class SocketController { global.timer.increment(delayTime * 1000 * 60); }); - socket.on('set-onAir', (data) => { - try { - const d = JSON.parse(data); - d ? global.timer.trigger('onAir') : global.timer.trigger('offAir'); - } catch (error) { - this.error('RX', `Failed to parse message ${data}`); - } - this.send('onAir', global.timer.onAir); - global.timer._broadcastFeatureMessageControl(); - }); - /*******************************************/ // general playback state, useful for external sync socket.on('ontime-poll', () => { @@ -249,41 +242,71 @@ class SocketController { /*** ------------------------- ***/ /***********************************/ - /*******************************************/ + // On Air + socket.on('set-onAir', (data) => { + if (typeof data === 'boolean') { + try { + const featureData = messageManager.setOnAir(data); + this.info('PLAYBACK', featureData.onAir ? 'Going On Air' : 'Going Off Air'); + this.socket.emit(ADDRESS_MESSAGE_CONTROL, featureData); + } catch (error) { + this.error('RX', `Failed to parse message ${data} : ${error}`); + } + } + this.send('onAir', messageManager.onAir); + }); // Presenter message socket.on('set-timer-message-text', (data) => { - global.timer._setTitles('set-timer-text', data); - global.timer._broadcastFeatureMessageControl(); + if (typeof data !== 'string') { + return; + } + const featureData = messageManager.setTimerText(data); + this.socket.emit(ADDRESS_MESSAGE_CONTROL, featureData); }); socket.on('set-timer-message-visible', (data) => { - global.timer._setTitles('set-timer-visible', data); - global.timer._broadcastFeatureMessageControl(); + if (typeof data !== 'boolean') { + return; + } + const featureData = messageManager.setTimerVisibility(data); + this.socket.emit(ADDRESS_MESSAGE_CONTROL, featureData); }); /*******************************************/ // Public message socket.on('set-public-message-text', (data) => { - global.timer._setTitles('set-public-text', data); - global.timer._broadcastFeatureMessageControl(); + if (typeof data !== 'string') { + return; + } + const featureData = messageManager.setPublicText(data); + this.socket.emit(ADDRESS_MESSAGE_CONTROL, featureData); }); socket.on('set-public-message-visible', (data) => { - global.timer._setTitles('set-public-visible', data); - global.timer._broadcastFeatureMessageControl(); + if (typeof data !== 'boolean') { + return; + } + const featureData = messageManager.setPublicVisibility(data); + this.socket.emit(ADDRESS_MESSAGE_CONTROL, featureData); }); /*******************************************/ // Lower third message socket.on('set-lower-message-text', (data) => { - global.timer._setTitles('set-lower-text', data); - global.timer._broadcastFeatureMessageControl(); + if (typeof data !== 'string') { + return; + } + const featureData = messageManager.setLowerText(data); + this.socket.emit(ADDRESS_MESSAGE_CONTROL, featureData); }); socket.on('set-lower-message-visible', (data) => { - global.timer._setTitles('set-lower-visible', data); - global.timer._broadcastFeatureMessageControl(); + if (typeof data !== 'boolean') { + return; + } + const featureData = messageManager.setLowerVisibility(data); + this.socket.emit(ADDRESS_MESSAGE_CONTROL, featureData); }); /* MOLECULAR ENDPOINTS @@ -303,7 +326,8 @@ class SocketController { // 2. MESSAGE CONTROL socket.on('get-ontime-feat-messagecontrol', () => { - global.timer._broadcastFeatureMessageControl(); + const featureData = messageManager.getAll(); + this.socket.emit(ADDRESS_MESSAGE_CONTROL, featureData); }); // 3. PLAYBACK CONTROL @@ -337,9 +361,6 @@ class SocketController { /** * Logger logic * ------------- - * - * This should be separate of event timer, left here for convenience - * */ /** diff --git a/server/src/classes/socket/socketConfig.js b/server/src/classes/socket/socketConfig.js new file mode 100644 index 000000000..321f85115 --- /dev/null +++ b/server/src/classes/socket/socketConfig.js @@ -0,0 +1 @@ +export const ADDRESS_MESSAGE_CONTROL = 'ontime-feat-messagecontrol'; diff --git a/server/src/classes/timer/EventTimer.js b/server/src/classes/timer/EventTimer.js index d54025c45..11ff98c0c 100644 --- a/server/src/classes/timer/EventTimer.js +++ b/server/src/classes/timer/EventTimer.js @@ -47,26 +47,11 @@ export class EventTimer extends Timer { // HTTP Client Object this.http = null; - this._interval = null; - - this.presenter = { - text: '', - visible: false, - }; - this.public = { - text: '', - visible: false, - }; - this.lower = { - text: '', - visible: false, - }; - // call general title reset this._resetSelection(); this._eventlist = []; - this.onAir = false; + // set recurrent emits this._interval = setInterval(() => this.runCycle(), timerConfig?.refresh || 1000); @@ -154,20 +139,6 @@ export class EventTimer extends Timer { this.socket.send('ontime-feat-eventlist', featureData); } - /** - * @description Broadcast data for Message Control feature - * @private - */ - _broadcastFeatureMessageControl() { - const featureData = { - presenter: this.presenter, - public: this.public, - lower: this.lower, - onAir: this.onAir, - }; - this.socket.send('ontime-feat-messagecontrol', featureData); - } - /** * @description Broadcast data for Playback Control feature * @private @@ -213,7 +184,6 @@ export class EventTimer extends Timer { broadcastState() { // feature sync this._broadcastFeatureEventList(); - this._broadcastFeatureMessageControl(); this._broadcastFeaturePlaybackControl(); this._broadcastFeatureInfo(); this._broadcastFeatureCuesheet(); @@ -234,7 +204,6 @@ export class EventTimer extends Timer { this.socket.send('publicnext-id', this.nextPublicEventId); this.socket.send('titles', this.titles); this.socket.send('publictitles', this.titlesPublic); - this.socket.send('onAir', this.onAir); } /** @@ -347,18 +316,6 @@ export class EventTimer extends Timer { this.reload(); break; } - case 'onAir': { - // Call action - this.socket.info('PLAYBACK', 'Going On Air'); - this.setonAir(true); - break; - } - case 'offAir': { - // Call action and force update - this.socket.info('PLAYBACK', 'Going Off Air'); - this.setonAir(false); - break; - } default: { // Error, disable flag this.socket.error('RX', `Unhandled action triggered ${action}`); @@ -572,52 +529,6 @@ export class EventTimer extends Timer { } } - /** - * Set titles and broadcast change - * @param {string} action - * @param {any} payload - * @private - */ - _setTitles(action, payload) { - switch (action) { - /*******************************************/ - // Presenter message - case 'set-timer-text': - this.presenter.text = payload; - this.socket.send('messages-timer', this.presenter); - break; - case 'set-timer-visible': - this.presenter.visible = payload; - this.socket.send('messages-timer', this.presenter); - break; - - /*******************************************/ - // Public message - case 'set-public-text': - this.public.text = payload; - this.socket.send('messages-public', this.public); - break; - case 'set-public-visible': - this.public.visible = payload; - this.socket.send('messages-public', this.public); - break; - - /*******************************************/ - // Lower third message - case 'set-lower-text': - this.lower.text = payload; - this.socket.send('messages-lower', this.lower); - break; - case 'set-lower-visible': - this.lower.visible = payload; - this.socket.send('messages-lower', this.lower); - break; - - default: - break; - } - } - /** * Deletes running event list from object */ @@ -1112,16 +1023,6 @@ export class EventTimer extends Timer { this.nextPublicEventId = null; } - /** - * @description Set onAir property of timer - * @param {boolean} onAir - whether flag is active - */ - setonAir(onAir) { - this.onAir = onAir; - // broadcast change - this.socket.send('onAir', onAir); - } - /** * @description start timer */ diff --git a/server/src/classes/timer/__tests__/eventtimer.test.js b/server/src/classes/timer/__tests__/eventtimer.test.js index 764e10e5b..a10f3ce89 100644 --- a/server/src/classes/timer/__tests__/eventtimer.test.js +++ b/server/src/classes/timer/__tests__/eventtimer.test.js @@ -36,10 +36,6 @@ test('object instantiates correctly', async () => { expect(t.osc).toBeNull(); expect(t.http).toBeNull(); expect(t._interval).not.toBeNull(); - expect(t.presenter).toStrictEqual({ text: '', visible: false }); - expect(t.public).toStrictEqual({ text: '', visible: false }); - expect(t.lower).toStrictEqual({ text: '', visible: false }); - expect(t.lower).toStrictEqual({ text: '', visible: false }); const expectTitlesPublic = { titleNow: null, @@ -90,12 +86,6 @@ describe('test triggers behaviour', () => { expect(t.trigger('previous')).toBeFalsy(); expect(t.trigger('next')).toBeFalsy(); expect(t.trigger('reload')).toBeFalsy(); - - expect(t.onAir).toBeFalsy(); - expect(t.trigger('onAir')).toBeTruthy(); - expect(t.onAir).toBeTruthy(); - expect(t.trigger('offAir')).toBeTruthy(); - expect(t.onAir).toBeFalsy(); done(); }); diff --git a/server/src/controllers/playbackController.js b/server/src/controllers/playbackController.js index 5ea8445c2..5224f0097 100644 --- a/server/src/controllers/playbackController.js +++ b/server/src/controllers/playbackController.js @@ -4,18 +4,6 @@ export const pbGet = async (req, res) => { res.send({ playback: global.timer.state }); }; -// Create controller for GET request to '/playback/onAir' -// Turns onAir flag to true -export const onAir = async (req, res) => { - global.timer.trigger('onAir') ? res.sendStatus(200) : res.sendStatus(400); -}; - -// Create controller for GET request to '/playback/onAir' -// Turns onAir flag to true -export const offAir = async (req, res) => { - global.timer.trigger('offAir') ? res.sendStatus(200) : res.sendStatus(400); -}; - // Create controller for GET request to '/playback/start' // Starts timer object export const pbStart = async (req, res) => { diff --git a/server/src/routes/__tests__/playbackRouter.tests.js b/server/src/routes/__tests__/playbackRouter.tests.js index 6c555246e..2d306ca22 100644 --- a/server/src/routes/__tests__/playbackRouter.tests.js +++ b/server/src/routes/__tests__/playbackRouter.tests.js @@ -19,24 +19,6 @@ describe('When a GET request request is sent', () => { }); describe('When a POST state change is sent', () => { - test('POST /playback/onAir returns 200', async () => { - await supertest(server) - .post('/playback/onAir') - .expect(200) - .then((response) => { - expect(response.text.includes('')).toBe(false); - }); - }); - - test('POST /playback/offAir returns 200', async () => { - await supertest(server) - .post('/playback/offAir') - .expect(200) - .then((response) => { - expect(response.text.includes('')).toBe(false); - }); - }); - test('POST /playback/start returns 200', async () => { await supertest(server) .post('/playback/start') diff --git a/server/src/routes/playbackRouter.js b/server/src/routes/playbackRouter.js index 4967c512f..621a4c8b9 100644 --- a/server/src/routes/playbackRouter.js +++ b/server/src/routes/playbackRouter.js @@ -1,31 +1,23 @@ import express from 'express'; -export const router = express.Router(); - // import playback controllers import { pbGet, - onAir, - offAir, - pbStart, - pbPause, - pbStop, - pbRoll, - pbPrevious, - pbNext, pbLoad, - pbUnload, + pbNext, + pbPause, + pbPrevious, pbReload, + pbRoll, + pbStart, + pbStop, + pbUnload, } from '../controllers/playbackController.js'; +export const router = express.Router(); + // create route between controller and '/playback/' endpoint router.get('/', pbGet); -// create route between controller and '/playback/onAir' endpoint -router.post('/onAir', onAir); - -// create route between controller and '/playback/offAir' endpoint -router.post('/offAir', offAir); - // create route between controller and '/playback/start' endpoint router.post('/start', pbStart); diff --git a/server/tests/features/message-control.spec.ts b/server/tests/features/message-control.spec.ts new file mode 100644 index 000000000..7e5d55b0b --- /dev/null +++ b/server/tests/features/message-control.spec.ts @@ -0,0 +1,38 @@ +import { expect, test } from '@playwright/test'; + +test('test', async ({ context }) => { + const editorPage = await context.newPage(); + const featurePage = await context.newPage(); + + await editorPage.goto('http://localhost:4001/messagecontrol'); + + // stage timer message + await editorPage.getByPlaceholder('Shown in stage timer').click(); + await editorPage.getByPlaceholder('Shown in stage timer').fill('testing'); + await editorPage.getByRole('button', { name: 'toggle timer screen message' }).click(); + + await featurePage.goto('http://localhost:4001/timer'); + await featurePage.getByText('testing').click(); + + // public screen message + await editorPage.getByPlaceholder('Shown in public screens').click(); + await editorPage.getByPlaceholder('Shown in public screens').fill('testing public'); + await editorPage.getByRole('button', { name: /toggle public screen message/i }).click(); + + await featurePage.goto('http://localhost:4001/public'); + await featurePage.getByText('testing public').click(); + + // lower third message + await editorPage.getByPlaceholder('Shown in lower third').click(); + await editorPage.getByPlaceholder('Shown in lower third').fill('testing lower'); + await editorPage.getByRole('button', { name: /toggle lower third message/i }).click(); + await featurePage.goto('http://localhost:4001/lower'); + await featurePage.getByText('testing lower').click(); + + // on air state + await editorPage.getByRole('button', { name: 'Toggle On Air' }).click(); + await featurePage.goto('http://localhost:4001/studio'); + await featurePage.getByText('ON AIR').click(); + const onAirActive = await featurePage.locator('data-testid=on-air-enabled'); + await expect(onAirActive).toHaveText(/on air/i); +}); diff --git a/server/tests/features/minimal-url.spec.ts b/server/tests/features/minimal-url.spec.ts new file mode 100644 index 000000000..57f1ab312 --- /dev/null +++ b/server/tests/features/minimal-url.spec.ts @@ -0,0 +1,14 @@ +import { expect, test } from '@playwright/test'; + +test.describe('minimal view behaviour can be changed through params', () => { + test.use({ viewport: { width: 1920, height: 1080 } }); + test('without overloads', async ({ page }) => { + await page.goto('http://localhost:4001/minimal'); + await page.getByTestId('minimal-timer').click(); + }); + test('hide nav', async ({ page }) => { + await page.goto('http://localhost:4001/minimal?hidenav=true'); + const navBar = await page.locator('data-test-id=nav-logo'); + await expect(navBar).toHaveCount(0); + }); +}); diff --git a/server/tests/smoke-tests.test.ts b/server/tests/smoke-tests.test.ts new file mode 100644 index 000000000..6d51a301c --- /dev/null +++ b/server/tests/smoke-tests.test.ts @@ -0,0 +1,78 @@ +import { expect, test } from '@playwright/test'; + +test.describe('pages routes are available', () => { + test.use({ viewport: { width: 1920, height: 1080 } }); + test.describe('backstage views', () => { + test('editor', async ({ page }) => { + await page.goto('http://localhost:4001/editor'); + + await expect(page).toHaveTitle(/ontime/); + await page.getByTestId('event-editor').click(); + await page.getByTestId('panel-event-list').click(); + await page.getByTestId('panel-timer-control').click(); + await page.getByTestId('panel-messages-control').click(); + await page.getByTestId('panel-info').click(); + }); + test('cuesheet', async ({ page }) => { + await page.goto('http://localhost:4001/cuesheet'); + + await expect(page).toHaveTitle(/ontime/); + await page.getByTestId('cuesheet').click(); + }); + }); + + test.describe('detached views', () => { + test('rundown', async ({ page }) => { + await page.goto('http://localhost:4001/eventlist'); + await page.getByTestId('panel-event-list').click(); + }); + test('timer control', async ({ page }) => { + await page.goto('http://localhost:4001/timercontrol'); + await page.getByTestId('panel-timer-control').click(); + }); + test('message control', async ({ page }) => { + await page.goto('http://localhost:4001/messagecontrol'); + await page.getByTestId('panel-messages-control').click(); + }); + test('info', async ({ page }) => { + await page.goto('http://localhost:4001/info'); + await page.getByTestId('panel-info').click(); + }); + }); + + test.describe('client routes', () => { + test('stage timer', async ({ page }) => { + await page.goto('http://localhost:4001/timer'); + await page.getByTestId('timer-view').click(); + }); + test('clock', async ({ page }) => { + await page.goto('http://localhost:4001/clock'); + await page.getByTestId('clock-view').click(); + }); + test('minimal timer', async ({ page }) => { + await page.goto('http://localhost:4001/minimal'); + await page.getByTestId('minimal-timer').click(); + }); + test('backstage', async ({ page }) => { + await page.goto('http://localhost:4001/backstage'); + await page.getByTestId('backstage-view').click(); + }); + test('public', async ({ page }) => { + await page.goto('http://localhost:4001/public'); + await page.getByTestId('public-view').click(); + }); + test('pip', async ({ page }) => { + await page.goto('http://localhost:4001/pip'); + await page.getByTestId('pip-view').click(); + }); + test('studio clock', async ({ page }) => { + await page.goto('http://localhost:4001/studio'); + await page.getByTestId('studio-view').click(); + }); + test('lower', async ({ page }) => { + await page.goto('http://localhost:4001/lower'); + const errorBoundary = await page.locator('data-test-id=error-container'); + await expect(errorBoundary).toHaveCount(0); + }); + }); +}); diff --git a/server/yarn.lock b/server/yarn.lock index c83032505..b1ed83dd9 100644 --- a/server/yarn.lock +++ b/server/yarn.lock @@ -487,38 +487,6 @@ resolved "https://registry.yarnpkg.com/@bcoe/v8-coverage/-/v8-coverage-0.2.3.tgz#75a2e8b51cb758a7553d6804a5932d7aace75c39" integrity sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw== -"@cypress/request@^2.88.10": - version "2.88.10" - resolved "https://registry.yarnpkg.com/@cypress/request/-/request-2.88.10.tgz#b66d76b07f860d3a4b8d7a0604d020c662752cce" - integrity sha512-Zp7F+R93N0yZyG34GutyTNr+okam7s/Fzc1+i3kcqOP8vk6OuajuE9qZJ6Rs+10/1JFtXFYMdyarnU1rZuJesg== - dependencies: - aws-sign2 "~0.7.0" - aws4 "^1.8.0" - caseless "~0.12.0" - combined-stream "~1.0.6" - extend "~3.0.2" - forever-agent "~0.6.1" - form-data "~2.3.2" - http-signature "~1.3.6" - is-typedarray "~1.0.0" - isstream "~0.1.2" - json-stringify-safe "~5.0.1" - mime-types "~2.1.19" - performance-now "^2.1.0" - qs "~6.5.2" - safe-buffer "^5.1.2" - tough-cookie "~2.5.0" - tunnel-agent "^0.6.0" - uuid "^8.3.2" - -"@cypress/xvfb@^1.2.4": - version "1.2.4" - resolved "https://registry.yarnpkg.com/@cypress/xvfb/-/xvfb-1.2.4.tgz#2daf42e8275b39f4aa53c14214e557bd14e7748a" - integrity sha512-skbBzPggOVYCbnGgV+0dmBdW/s77ZkAOXIC1knS8NagwDjBrNC1LuXtQJeiN6l+m7lzmHtaoUw/ctJKdqkG57Q== - dependencies: - debug "^3.1.0" - lodash.once "^4.1.1" - "@develar/schema-utils@~2.6.5": version "2.6.5" resolved "https://registry.yarnpkg.com/@develar/schema-utils/-/schema-utils-2.6.5.tgz#3ece22c5838402419a6e0425f85742b961d9b6c6" @@ -878,6 +846,14 @@ "@nodelib/fs.scandir" "2.1.5" fastq "^1.6.0" +"@playwright/test@^1.27.1": + version "1.27.1" + resolved "https://registry.yarnpkg.com/@playwright/test/-/test-1.27.1.tgz#9364d1e02021261211c8ff586d903faa79ce95c4" + integrity sha512-mrL2q0an/7tVqniQQF6RBL2saskjljXzqNcCOVMUjRIgE6Y38nCNaP+Dc2FBW06bcpD3tqIws/HT9qiMHbNU0A== + dependencies: + "@types/node" "*" + playwright-core "1.27.1" + "@sideway/address@^4.1.3": version "4.1.3" resolved "https://registry.yarnpkg.com/@sideway/address/-/address-4.1.3.tgz#d93cce5d45c5daec92ad76db492cc2ee3c64ab27" @@ -1027,11 +1003,6 @@ resolved "https://registry.yarnpkg.com/@types/node/-/node-17.0.0.tgz#62797cee3b8b497f6547503b2312254d4fe3c2bb" integrity sha512-eMhwJXc931Ihh4tkU+Y7GiLzT/y/DBNpNtr4yU9O2w3SYBsr9NaOPhQlLKRmoWtI54uNwuo0IOUFQjVOTZYRvw== -"@types/node@^14.14.31": - version "14.18.5" - resolved "https://registry.yarnpkg.com/@types/node/-/node-14.18.5.tgz#0dd636fe7b2c6055cbed0d4ca3b7fb540f130a96" - integrity sha512-LMy+vDDcQR48EZdEx5wRX1q/sEl6NdGuHXPnfeL8ixkwCOSZ2qnIyIZmcCbdX0MeRqHhAcHmX+haCbrS8Run+A== - "@types/node@^16.11.26": version "16.11.68" resolved "https://registry.yarnpkg.com/@types/node/-/node-16.11.68.tgz#30ee923f4d940793e0380f5ce61c0bd4b7196b6c" @@ -1050,16 +1021,6 @@ resolved "https://registry.yarnpkg.com/@types/prettier/-/prettier-2.4.2.tgz#4c62fae93eb479660c3bd93f9d24d561597a8281" integrity sha512-ekoj4qOQYp7CvjX8ZDBgN86w3MqQhLE1hczEJbEIjgFEumDy+na/4AJAbLXfgEWFNB2pKadM5rPFtuSGMWK7xA== -"@types/sinonjs__fake-timers@8.1.1": - version "8.1.1" - resolved "https://registry.yarnpkg.com/@types/sinonjs__fake-timers/-/sinonjs__fake-timers-8.1.1.tgz#b49c2c70150141a15e0fa7e79cf1f92a72934ce3" - integrity sha512-0kSuKjAS0TrGLJ0M/+8MaFkGsQhZpB6pxOmvS3K8FYI72K//YmdfoW9X2qPsAKh1mkwxGD5zib9s1FIFed6E8g== - -"@types/sizzle@^2.3.2": - version "2.3.3" - resolved "https://registry.yarnpkg.com/@types/sizzle/-/sizzle-2.3.3.tgz#ff5e2f1902969d305225a047c8a0fd5c915cebef" - integrity sha512-JYM8x9EGF163bEyhdJBpR2QX1R5naCJHC8ucJylJ3w9/CVBaskdQ8WqBf8MmQrd1kRvp/a4TS8HJ+bxzR7ZJYQ== - "@types/stack-utils@^2.0.0": version "2.0.1" resolved "https://registry.yarnpkg.com/@types/stack-utils/-/stack-utils-2.0.1.tgz#20f18294f797f2209b5f65c8e3b5c8e8261d127c" @@ -1118,14 +1079,6 @@ agent-base@6: dependencies: debug "4" -aggregate-error@^3.0.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/aggregate-error/-/aggregate-error-3.1.0.tgz#92670ff50f5359bdb7a3e0d40d0ec30c5737687a" - integrity sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA== - dependencies: - clean-stack "^2.0.0" - indent-string "^4.0.0" - ajv-keywords@^3.4.1: version "3.5.2" resolved "https://registry.yarnpkg.com/ajv-keywords/-/ajv-keywords-3.5.2.tgz#31f29da5ab6e00d1c2d329acf7b5929614d5014d" @@ -1148,12 +1101,7 @@ ansi-align@^3.0.0: dependencies: string-width "^4.1.0" -ansi-colors@^4.1.1: - version "4.1.1" - resolved "https://registry.yarnpkg.com/ansi-colors/-/ansi-colors-4.1.1.tgz#cbb9ae256bf750af1eab344f229aa27fe94ba348" - integrity sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA== - -ansi-escapes@^4.2.1, ansi-escapes@^4.3.0: +ansi-escapes@^4.2.1: version "4.3.2" resolved "https://registry.yarnpkg.com/ansi-escapes/-/ansi-escapes-4.3.2.tgz#6b2291d1db7d98b6521d5f1efa42d0f3a9feb65e" integrity sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ== @@ -1229,11 +1177,6 @@ app-builder-lib@23.6.0: tar "^6.1.11" temp-file "^3.4.0" -arch@^2.2.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/arch/-/arch-2.2.0.tgz#1bc47818f305764f23ab3306b0bfc086c5a29d11" - integrity sha512-Of/R0wqp83cgHozfIYLbBMnej79U/SVGOOyuB3VVFv1NRM/PSFMK12x9KVtiYzJqmnU5WR2qp0Z5rHb7sWGnFQ== - argparse@^1.0.7: version "1.0.10" resolved "https://registry.yarnpkg.com/argparse/-/argparse-1.0.10.tgz#bcd6791ea5ae09725e17e5ad988134cd40b3d911" @@ -1268,14 +1211,7 @@ asar@^3.1.0: optionalDependencies: "@types/glob" "^7.1.1" -asn1@~0.2.3: - version "0.2.6" - resolved "https://registry.yarnpkg.com/asn1/-/asn1-0.2.6.tgz#0d3a7bb6e64e02a90c0303b31f292868ea09a08d" - integrity sha512-ix/FxPn0MDjeyJ7i/yoHGFt/EX6LyNbxSEhPPXODPL+KB0VPk86UYfL0lMdy+KCnv+fmvIzySwaK5COwqVbWTQ== - dependencies: - safer-buffer "~2.1.0" - -assert-plus@1.0.0, assert-plus@^1.0.0: +assert-plus@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/assert-plus/-/assert-plus-1.0.0.tgz#f12e0f3c5d77b0b1cdd9146942e4e96c1e4dd525" integrity sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU= @@ -1290,11 +1226,6 @@ async-exit-hook@^2.0.1: resolved "https://registry.yarnpkg.com/async-exit-hook/-/async-exit-hook-2.0.1.tgz#8bd8b024b0ec9b1c01cccb9af9db29bd717dfaf3" integrity sha512-NW2cX8m1Q7KPA7a5M2ULQeZ2wR5qI5PAbw5L0UOMxdioVk9PMZ0h1TmyZEkPYrCvYjDlFICusOu1dlEKAAeXBw== -async@^3.2.0: - version "3.2.2" - resolved "https://registry.yarnpkg.com/async/-/async-3.2.2.tgz#2eb7671034bb2194d45d30e31e24ec7e7f9670cd" - integrity sha512-H0E+qZaDEfx/FY4t7iLRv1W2fFI6+pyCeTw1uN20AQPiwqwM6ojPxHxdLv4z8hi2DtnW9BOckSspLucW7pIE5g== - async@^3.2.3: version "3.2.4" resolved "https://registry.yarnpkg.com/async/-/async-3.2.4.tgz#2d22e00f8cddeb5fde5dd33522b56d1cf569a81c" @@ -1310,16 +1241,6 @@ at-least-node@^1.0.0: resolved "https://registry.yarnpkg.com/at-least-node/-/at-least-node-1.0.0.tgz#602cd4b46e844ad4effc92a8011a3c46e0238dc2" integrity sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg== -aws-sign2@~0.7.0: - version "0.7.0" - resolved "https://registry.yarnpkg.com/aws-sign2/-/aws-sign2-0.7.0.tgz#b46e890934a9591f2d2f6f86d7e6a9f1b3fe76a8" - integrity sha1-tG6JCTSpWR8tL2+G1+ap8bP+dqg= - -aws4@^1.8.0: - version "1.11.0" - resolved "https://registry.yarnpkg.com/aws4/-/aws4-1.11.0.tgz#d61f46d83b2519250e2784daf5b09479a8b41c59" - integrity sha512-xh1Rl34h6Fi1DC2WWKfxUTVqRsNnr6LsKz2+hfwDxQJWmrx8+c7ylaqBMcHfl1U1r2dsifOvKX3LQuLNZ+XSvA== - axios@^0.21.1: version "0.21.4" resolved "https://registry.yarnpkg.com/axios/-/axios-0.21.4.tgz#c67b90dc0568e5c1cf2b0b858c43ba28e2eda575" @@ -1397,23 +1318,11 @@ base64-js@^1.3.1, base64-js@^1.5.1: resolved "https://registry.yarnpkg.com/base64-js/-/base64-js-1.5.1.tgz#1b1b440160a5bf7ad40b650f095963481903930a" integrity sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA== -bcrypt-pbkdf@^1.0.0: - version "1.0.2" - resolved "https://registry.yarnpkg.com/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz#a4301d389b6a43f9b67ff3ca11a3f6637e360e9e" - integrity sha1-pDAdOJtqQ/m2f/PKEaP2Y342Dp4= - dependencies: - tweetnacl "^0.14.3" - binary-extensions@^2.0.0: version "2.2.0" resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-2.2.0.tgz#75f502eeaf9ffde42fc98829645be4ea76bd9e2d" integrity sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA== -blob-util@^2.0.2: - version "2.0.2" - resolved "https://registry.yarnpkg.com/blob-util/-/blob-util-2.0.2.tgz#3b4e3c281111bb7f11128518006cdc60b403a1eb" - integrity sha512-T7JQa+zsXXEa6/8ZhHcQEW1UFfVM49Ts65uBkFL6fz2QmrElqmbajIDJvuA0tEhRe5eIjpV9ZF+0RfZR9voJFQ== - bluebird-lst@^1.0.9: version "1.0.9" resolved "https://registry.yarnpkg.com/bluebird-lst/-/bluebird-lst-1.0.9.tgz#a64a0e4365658b9ab5fe875eb9dfb694189bb41c" @@ -1421,7 +1330,7 @@ bluebird-lst@^1.0.9: dependencies: bluebird "^3.5.5" -bluebird@3.7.2, bluebird@^3.5.0, bluebird@^3.5.5, bluebird@^3.7.2: +bluebird@3.7.2, bluebird@^3.5.0, bluebird@^3.5.5: version "3.7.2" resolved "https://registry.yarnpkg.com/bluebird/-/bluebird-3.7.2.tgz#9f229c15be272454ffa973ace0dbee79a1b0c36f" integrity sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg== @@ -1522,7 +1431,7 @@ buffer-from@^1.0.0: resolved "https://registry.yarnpkg.com/buffer-from/-/buffer-from-1.1.2.tgz#2b146a6fd72e80b4f55d255f35ed59a3a9a41bd5" integrity sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ== -buffer@^5.1.0, buffer@^5.6.0: +buffer@^5.1.0: version "5.7.1" resolved "https://registry.yarnpkg.com/buffer/-/buffer-5.7.1.tgz#ba62e7c13133053582197160851a8f648e99eed0" integrity sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ== @@ -1574,11 +1483,6 @@ cacheable-request@^6.0.0: normalize-url "^4.1.0" responselike "^1.0.2" -cachedir@^2.3.0: - version "2.3.0" - resolved "https://registry.yarnpkg.com/cachedir/-/cachedir-2.3.0.tgz#0c75892a052198f0b21c7c1804d8331edfcae0e8" - integrity sha512-A+Fezp4zxnit6FanDmv9EqXNAi3vt9DWp51/71UEhXukb7QUuvtv9344h91dyAxuTLoSYJFU299qzR3tzwPAhw== - call-bind@^1.0.0: version "1.0.2" resolved "https://registry.yarnpkg.com/call-bind/-/call-bind-1.0.2.tgz#b1d4e89e688119c3c9a903ad30abb2f6a919be3c" @@ -1612,11 +1516,6 @@ caniuse-lite@^1.0.30001332: resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001334.tgz#892e9965b35285033fc2b8a8eff499fe02f13d8b" integrity sha512-kbaCEBRRVSoeNs74sCuq92MJyGrMtjWVfhltoHUCW4t4pXFvGjUBrfo47weBRViHkiV3eBYyIsfl956NtHGazw== -caseless@~0.12.0: - version "0.12.0" - resolved "https://registry.yarnpkg.com/caseless/-/caseless-0.12.0.tgz#1b681c21ff84033c826543090689420d187151dc" - integrity sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw= - chalk@^2.0.0: version "2.4.2" resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.4.2.tgz#cd42541677a54333cf541a49108c1432b44c9424" @@ -1639,7 +1538,7 @@ char-regex@^1.0.2: resolved "https://registry.yarnpkg.com/char-regex/-/char-regex-1.0.2.tgz#d744358226217f981ed58f479b1d6bcc29545dcf" integrity sha512-kWWXztvZ5SBQV+eRgKFeh8q5sLuZY2+8WUIzlxWVTg+oGwY14qylx1KbKzHd8P6ZYkAg0xyIDU9JMHhyJMZ1jw== -check-more-types@2.24.0, check-more-types@^2.24.0: +check-more-types@2.24.0: version "2.24.0" resolved "https://registry.yarnpkg.com/check-more-types/-/check-more-types-2.24.0.tgz#1420ffb10fd444dcfc79b43891bbfffd32a84600" integrity sha1-FCD/sQ/URNz8ebQ4kbv//TKoRgA= @@ -1684,32 +1583,11 @@ cjs-module-lexer@^1.0.0: resolved "https://registry.yarnpkg.com/cjs-module-lexer/-/cjs-module-lexer-1.2.2.tgz#9f84ba3244a512f3a54e5277e8eef4c489864e40" integrity sha512-cOU9usZw8/dXIXKtwa8pM0OTJQuJkxMN6w30csNRUerHfeQ5R6U3kkU/FtJeIf3M202OHfY2U8ccInBG7/xogA== -clean-stack@^2.0.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/clean-stack/-/clean-stack-2.2.0.tgz#ee8472dbb129e727b31e8a10a427dee9dfe4008b" - integrity sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A== - cli-boxes@^2.2.1: version "2.2.1" resolved "https://registry.yarnpkg.com/cli-boxes/-/cli-boxes-2.2.1.tgz#ddd5035d25094fce220e9cab40a45840a440318f" integrity sha512-y4coMcylgSCdVinjiDBuR8PCC2bLjyGTwEmPb9NHR/QaNU6EUOXcTY/s6VjGMD6ENSEaeQYHCY0GNGS5jfMwPw== -cli-cursor@^3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/cli-cursor/-/cli-cursor-3.1.0.tgz#264305a7ae490d1d03bf0c9ba7c925d1753af307" - integrity sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw== - dependencies: - restore-cursor "^3.1.0" - -cli-table3@~0.6.1: - version "0.6.1" - resolved "https://registry.yarnpkg.com/cli-table3/-/cli-table3-0.6.1.tgz#36ce9b7af4847f288d3cdd081fbd09bf7bd237b8" - integrity sha512-w0q/enDHhPLq44ovMGdQeeDLvwxwavsJX7oQGYt/LrBlYsyaxyDnp6z3QzFut/6kLLKnlcUVJLrpB7KBfgG/RA== - dependencies: - string-width "^4.2.0" - optionalDependencies: - colors "1.4.0" - cli-truncate@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/cli-truncate/-/cli-truncate-2.1.0.tgz#c39e28bf05edcde5be3b98992a22deed5a2b93c7" @@ -1777,22 +1655,12 @@ color-name@~1.1.4: resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.4.tgz#c2a09a87acbde69543de6f63fa3995c826c536a2" integrity sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA== -colorette@^2.0.16: - version "2.0.16" - resolved "https://registry.yarnpkg.com/colorette/-/colorette-2.0.16.tgz#713b9af84fdb000139f04546bd4a93f62a5085da" - integrity sha512-hUewv7oMjCp+wkBv5Rm0v87eJhq4woh5rSR+42YSQJKecCqgIqNkZ6lAlQms/BwHPJA5NKMRlpxPRv0n8HQW6g== - colors@1.0.3: version "1.0.3" resolved "https://registry.yarnpkg.com/colors/-/colors-1.0.3.tgz#0433f44d809680fdeb60ed260f1b0c262e82a40b" integrity sha1-BDP0TYCWgP3rYO0mDxsMJi6CpAs= -colors@1.4.0: - version "1.4.0" - resolved "https://registry.yarnpkg.com/colors/-/colors-1.4.0.tgz#c50491479d4c1bdaed2c9ced32cf7c7dc2360f78" - integrity sha512-a+UqTh4kgZg/SlGvfbzDHpgRu7AAQOmmqRHJnxhRZICKFUT91brVhNNt58CMWU9PsBbv3PDCZUHbVxuDiH2mtA== - -combined-stream@^1.0.6, combined-stream@^1.0.8, combined-stream@~1.0.6: +combined-stream@^1.0.8: version "1.0.8" resolved "https://registry.yarnpkg.com/combined-stream/-/combined-stream-1.0.8.tgz#c3d45a8b34fd730631a110a8a2520682b31d5a7f" integrity sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg== @@ -1806,16 +1674,11 @@ commander@2.9.0: dependencies: graceful-readlink ">= 1.0.0" -commander@^5.0.0, commander@^5.1.0: +commander@^5.0.0: version "5.1.0" resolved "https://registry.yarnpkg.com/commander/-/commander-5.1.0.tgz#46abbd1652f8e059bddaef99bbdcb2ad9cf179ae" integrity sha512-P0CysNDQ7rtVw4QIQtm+MRxV66vKFSvlsQvGYXZWR3qFU0jlMKHZZZgw8e+8DSah4UDKMqnknRDQz+xuQXQ/Zg== -common-tags@^1.8.0: - version "1.8.2" - resolved "https://registry.yarnpkg.com/common-tags/-/common-tags-1.8.2.tgz#94ebb3c076d26032745fd54face7f688ef5ac9c6" - integrity sha512-gk/Z852D2Wtb//0I+kRFNKKE9dIIVirjoqPoA1wJU+XePVXZfGeBpk45+A1rKO4Q43prqWBNY/MiIeRLbPWUaA== - compare-version@^0.1.2: version "0.1.2" resolved "https://registry.yarnpkg.com/compare-version/-/compare-version-0.1.2.tgz#0162ec2d9351f5ddd59a9202cba935366a725080" @@ -1875,7 +1738,7 @@ crc@^3.8.0: dependencies: buffer "^5.1.0" -cross-spawn@^7.0.0, cross-spawn@^7.0.1, cross-spawn@^7.0.2, cross-spawn@^7.0.3: +cross-spawn@^7.0.1, cross-spawn@^7.0.2, cross-spawn@^7.0.3: version "7.0.3" resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-7.0.3.tgz#f73a85b9d5d41d045551c177e2882d4ac85728a6" integrity sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w== @@ -1889,66 +1752,6 @@ crypto-random-string@^2.0.0: resolved "https://registry.yarnpkg.com/crypto-random-string/-/crypto-random-string-2.0.0.tgz#ef2a7a966ec11083388369baa02ebead229b30d5" integrity sha512-v1plID3y9r/lPhviJ1wrXpLeyUIGAZ2SHNYTEapm7/8A9nLPoyvVp3RK/EPFqn5kEznyWgYZNsRtYYIWbuG8KA== -cypress@^9.6.0: - version "9.6.0" - resolved "https://registry.yarnpkg.com/cypress/-/cypress-9.6.0.tgz#84473b3362255fa8f5e627a596e58575c9e5320f" - integrity sha512-nNwt9eBQmSENamwa8LxvggXksfyzpyYaQ7lNBLgks3XZ6dPE/6BCQFBzeAyAPt/bNXfH3tKPkAyhiAZPYkWoEg== - 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" - -dashdash@^1.12.0: - version "1.14.1" - resolved "https://registry.yarnpkg.com/dashdash/-/dashdash-1.14.1.tgz#853cfa0f7cbe2fed5de20326b8dd581035f6e2f0" - integrity sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA= - dependencies: - assert-plus "^1.0.0" - -dayjs@^1.10.4: - version "1.10.7" - resolved "https://registry.yarnpkg.com/dayjs/-/dayjs-1.10.7.tgz#2cf5f91add28116748440866a0a1d26f3a6ce468" - integrity sha512-P6twpd70BcPK34K26uJ1KT3wlhpuOAPoMwJzpsIWUxHZ7wpmbdZL/hQqBDfz7hGurYSa5PhzdhDHtt319hL3ig== - debug@4, debug@^4.1.0, debug@^4.1.1, debug@^4.3.1, debug@^4.3.2, debug@^4.3.3: version "4.3.3" resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.3.tgz#04266e0b70a98d4462e6e288e38259213332b664" @@ -1970,7 +1773,7 @@ debug@^2.6.8: dependencies: ms "2.0.0" -debug@^3.1.0, debug@^3.2.7: +debug@^3.2.7: version "3.2.7" resolved "https://registry.yarnpkg.com/debug/-/debug-3.2.7.tgz#72580b7e9145fb39b6676f9c5e5fb100b934179a" integrity sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ== @@ -2130,14 +1933,6 @@ duplexer@~0.1.1: resolved "https://registry.yarnpkg.com/duplexer/-/duplexer-0.1.2.tgz#3abe43aef3835f8ae077d136ddce0f276b0400e6" integrity sha512-jtD6YG370ZCIi/9GTaJKQxWTZD045+4R4hTk/x1UyoqadyJ9x9CgSi1RlVDQF8U2sxLLSnFkCaMihqljHIWgMg== -ecc-jsbn@~0.1.1: - version "0.1.2" - resolved "https://registry.yarnpkg.com/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz#3a83a904e54353287874c564b7549386849a98c9" - integrity sha1-OoOpBOVDUyh4dMVkt1SThoSamMk= - dependencies: - jsbn "~0.1.0" - safer-buffer "^2.1.0" - ejs@^3.1.7: version "3.1.8" resolved "https://registry.yarnpkg.com/ejs/-/ejs-3.1.8.tgz#758d32910c78047585c7ef1f92f9ee041c1c190b" @@ -2229,13 +2024,6 @@ end-of-stream@^1.1.0: dependencies: once "^1.4.0" -enquirer@^2.3.6: - version "2.3.6" - resolved "https://registry.yarnpkg.com/enquirer/-/enquirer-2.3.6.tgz#2a7fe5dd634a1e4125a975ec994ff5456dc3734d" - integrity sha512-yjNnPr315/FjS4zIsUxYguYUPP2e1NK4d7E7ZOLiyYCcbFBiTMyID+2wvm2w6+pZ/odMA7cRkjhsPbltwBOrLg== - dependencies: - ansi-colors "^4.1.1" - env-paths@^2.2.0: version "2.2.1" resolved "https://registry.yarnpkg.com/env-paths/-/env-paths-2.2.1.tgz#420399d416ce1fbe9bc0a07c62fa68d67fd0f8f2" @@ -2417,26 +2205,6 @@ event-stream@=3.3.4: stream-combiner "~0.0.4" through "~2.3.1" -eventemitter2@^6.4.3: - version "6.4.5" - resolved "https://registry.yarnpkg.com/eventemitter2/-/eventemitter2-6.4.5.tgz#97380f758ae24ac15df8353e0cc27f8b95644655" - integrity sha512-bXE7Dyc1i6oQElDG0jMRZJrRAn9QR2xyyFGmBdZleNmyQX0FqGYmhZIrIrpPfm/w//LTo4tVQGOGQcGCb5q9uw== - -execa@4.1.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/execa/-/execa-4.1.0.tgz#4e5491ad1572f2f17a77d388c6c857135b22847a" - integrity sha512-j5W0//W7f8UxAn8hXVnwG8tLwdiUy4FJLcSupCg6maBYZDpyBvTApK7KyuI4bKj8KOh1r2YH+6ucuYtJv1bTZA== - 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" - execa@5.1.1, execa@^5.0.0: version "5.1.1" resolved "https://registry.yarnpkg.com/execa/-/execa-5.1.1.tgz#f80ad9cbf4298f7bd1d4c9555c21e93741c411dd" @@ -2452,13 +2220,6 @@ execa@5.1.1, execa@^5.0.0: signal-exit "^3.0.3" strip-final-newline "^2.0.0" -executable@^4.1.1: - version "4.1.1" - resolved "https://registry.yarnpkg.com/executable/-/executable-4.1.1.tgz#41532bff361d3e57af4d763b70582db18f5d133c" - integrity sha512-8iA79xD3uAch729dUG8xaaBBFGaEa0wdD2VkYLFHwlqosEj/jT66AzcreRDSgV7ehnNLBW2WR5jIXwGKjVdTLg== - dependencies: - pify "^2.2.0" - exit@^0.1.2: version "0.1.2" resolved "https://registry.yarnpkg.com/exit/-/exit-0.1.2.tgz#0632638f8d877cc82107d30a0fff1a17cba1cd0c" @@ -2475,12 +2236,7 @@ expect@^28.0.2: jest-message-util "^28.0.2" jest-util "^28.0.2" -extend@~3.0.2: - version "3.0.2" - resolved "https://registry.yarnpkg.com/extend/-/extend-3.0.2.tgz#f8b1136b4071fbd8eb140aff858b1019ec2915fa" - integrity sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g== - -extract-zip@2.0.1, extract-zip@^2.0.1: +extract-zip@^2.0.1: version "2.0.1" resolved "https://registry.yarnpkg.com/extract-zip/-/extract-zip-2.0.1.tgz#663dca56fe46df890d5f131ef4a06d22bb8ba13a" integrity sha512-GDhU9ntwuKyGXdZBUgTIe+vXnWj0fppUEtMDL0+idd5Sta8TGpHssn/eusA9mrPr9qNDym6SxAYZjNvCn/9RBg== @@ -2491,11 +2247,6 @@ extract-zip@2.0.1, extract-zip@^2.0.1: optionalDependencies: "@types/yauzl" "^2.9.1" -extsprintf@1.3.0: - version "1.3.0" - resolved "https://registry.yarnpkg.com/extsprintf/-/extsprintf-1.3.0.tgz#96918440e3041a7a414f8c52e3c574eb3c3e1e05" - integrity sha1-lpGEQOMEGnpBT4xS48V06zw+HgU= - extsprintf@^1.2.0: version "1.4.1" resolved "https://registry.yarnpkg.com/extsprintf/-/extsprintf-1.4.1.tgz#8d172c064867f235c0c84a596806d279bf4bcc07" @@ -2558,13 +2309,6 @@ fd-slicer@~1.1.0: dependencies: pend "~1.2.0" -figures@^3.2.0: - version "3.2.0" - resolved "https://registry.yarnpkg.com/figures/-/figures-3.2.0.tgz#625c18bd293c604dc4a8ddb2febf0c88341746af" - integrity sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg== - dependencies: - escape-string-regexp "^1.0.5" - file-entry-cache@^6.0.1: version "6.0.1" resolved "https://registry.yarnpkg.com/file-entry-cache/-/file-entry-cache-6.0.1.tgz#211b2dd9659cb0394b073e7323ac3c933d522027" @@ -2620,11 +2364,6 @@ follow-redirects@^1.14.0: resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.14.6.tgz#8cfb281bbc035b3c067d6cd975b0f6ade6e855cd" integrity sha512-fhUl5EwSJbbl8AR+uYL2KQDxLkdSjZGR36xy46AO7cOMTrCMON6Sa28FmAnC2tRTDbd/Uuzz3aJBv7EBN7JH8A== -forever-agent@~0.6.1: - version "0.6.1" - resolved "https://registry.yarnpkg.com/forever-agent/-/forever-agent-0.6.1.tgz#fbc71f0c41adeb37f96c577ad1ed42d8fdacca91" - integrity sha1-+8cfDEGt6zf5bFd60e1C2P2sypE= - form-data@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/form-data/-/form-data-4.0.0.tgz#93919daeaf361ee529584b9b31664dc12c9fa452" @@ -2634,15 +2373,6 @@ form-data@^4.0.0: combined-stream "^1.0.8" mime-types "^2.1.12" -form-data@~2.3.2: - version "2.3.3" - resolved "https://registry.yarnpkg.com/form-data/-/form-data-2.3.3.tgz#dcce52c05f644f298c6a7ab936bd724ceffbf3a6" - integrity sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ== - dependencies: - asynckit "^0.4.0" - combined-stream "^1.0.6" - mime-types "^2.1.12" - formidable@^2.0.1: version "2.0.1" resolved "https://registry.yarnpkg.com/formidable/-/formidable-2.0.1.tgz#4310bc7965d185536f9565184dee74fbb75557ff" @@ -2685,7 +2415,7 @@ fs-extra@^8.1.0: jsonfile "^4.0.0" universalify "^0.1.0" -fs-extra@^9.0.0, fs-extra@^9.0.1, fs-extra@^9.1.0: +fs-extra@^9.0.0, fs-extra@^9.0.1: version "9.1.0" resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-9.1.0.tgz#5954460c764a8da2094ba3554bf839e6b9a7c86d" integrity sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ== @@ -2748,7 +2478,7 @@ get-stream@^4.1.0: dependencies: pump "^3.0.0" -get-stream@^5.0.0, get-stream@^5.1.0: +get-stream@^5.1.0: version "5.2.0" resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-5.2.0.tgz#4966a1795ee5ace65e706c4b7beb71257d6e22d3" integrity sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA== @@ -2760,20 +2490,6 @@ get-stream@^6.0.0: resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-6.0.1.tgz#a262d8eef67aced57c2852ad6167526a43cbf7b7" integrity sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg== -getos@^3.2.1: - version "3.2.1" - resolved "https://registry.yarnpkg.com/getos/-/getos-3.2.1.tgz#0134d1f4e00eb46144c5a9c0ac4dc087cbb27dc5" - integrity sha512-U56CfOK17OKgTVqozZjUKNdkfEv6jk5WISBJ8SHoagjE6L69zOwl3Z+O8myjY9MEW3i2HPWQBt/LTbCgcC973Q== - dependencies: - async "^3.2.0" - -getpass@^0.1.1: - version "0.1.7" - resolved "https://registry.yarnpkg.com/getpass/-/getpass-0.1.7.tgz#5eff8e3e684d569ae4cb2b1282604e8ba62149fa" - integrity sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo= - dependencies: - assert-plus "^1.0.0" - glob-parent@^5.1.2, glob-parent@~5.1.2: version "5.1.2" resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-5.1.2.tgz#869832c58034fe68a4093c17dc15e8340d8401c4" @@ -2955,15 +2671,6 @@ http-proxy-agent@^5.0.0: agent-base "6" debug "4" -http-signature@~1.3.6: - version "1.3.6" - resolved "https://registry.yarnpkg.com/http-signature/-/http-signature-1.3.6.tgz#cb6fbfdf86d1c974f343be94e87f7fc128662cf9" - integrity sha512-3adrsD6zqo4GsTqtO7FyrejHNv+NgiIfAfv68+jVlFmSr9OGy7zrxONceFRLKvnnZA5jbxQBX1u9PpB6Wi32Gw== - dependencies: - assert-plus "^1.0.0" - jsprim "^2.0.2" - sshpk "^1.14.1" - https-proxy-agent@^5.0.0: version "5.0.0" resolved "https://registry.yarnpkg.com/https-proxy-agent/-/https-proxy-agent-5.0.0.tgz#e2a90542abb68a762e0a0850f6c9edadfd8506b2" @@ -2972,11 +2679,6 @@ https-proxy-agent@^5.0.0: agent-base "6" debug "4" -human-signals@^1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/human-signals/-/human-signals-1.1.1.tgz#c5b1cd14f50aeae09ab6c59fe63ba3395fe4dfa3" - integrity sha512-SEQu7vl8KjNL2eoGBLF3+wAjpsNfA9XMlXAYj/3EdaNfAlxKthD1xjEQfGOUhllCGGJVNY34bRr6lPINhNjyZw== - human-signals@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/human-signals/-/human-signals-2.1.0.tgz#dc91fcba42e4d06e4abaed33b3e7a3c02f514ea0" @@ -3038,11 +2740,6 @@ imurmurhash@^0.1.4: resolved "https://registry.yarnpkg.com/imurmurhash/-/imurmurhash-0.1.4.tgz#9218b9b2b928a238b13dc4fb6b6d576f231453ea" integrity sha1-khi5srkoojixPcT7a21XbyMUU+o= -indent-string@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/indent-string/-/indent-string-4.0.0.tgz#624f8f4497d619b2d9768531d58f4122854d7251" - integrity sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg== - inflight@^1.0.4: version "1.0.6" resolved "https://registry.yarnpkg.com/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9" @@ -3121,7 +2818,7 @@ is-glob@^4.0.0, is-glob@^4.0.1, is-glob@^4.0.3, is-glob@~4.0.1: dependencies: is-extglob "^2.1.1" -is-installed-globally@^0.4.0, is-installed-globally@~0.4.0: +is-installed-globally@^0.4.0: version "0.4.0" resolved "https://registry.yarnpkg.com/is-installed-globally/-/is-installed-globally-0.4.0.tgz#9a0fd407949c30f86eb6959ef1b7994ed0b7b520" integrity sha512-iwGqO3J21aaSkC7jWnHP/difazwS7SFeIqxv6wEtLU8Y5KlzFTjyqcSIT0d8s4+dDhKytsk9PJZ2BkS5eZwQRQ== @@ -3154,16 +2851,11 @@ is-stream@^2.0.0: resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-2.0.1.tgz#fac1e3d53b97ad5a9d0ae9cef2389f5810a5c077" integrity sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg== -is-typedarray@^1.0.0, is-typedarray@~1.0.0: +is-typedarray@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/is-typedarray/-/is-typedarray-1.0.0.tgz#e479c80858df0c1b11ddda6940f96011fcda4a9a" integrity sha1-5HnICFjfDBsR3dppQPlgEfzaSpo= -is-unicode-supported@^0.1.0: - version "0.1.0" - resolved "https://registry.yarnpkg.com/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz#3f26c76a809593b52bfa2ecb5710ed2779b522a7" - integrity sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw== - is-yarn-global@^0.3.0: version "0.3.0" resolved "https://registry.yarnpkg.com/is-yarn-global/-/is-yarn-global-0.3.0.tgz#d502d3382590ea3004893746754c89139973e232" @@ -3186,11 +2878,6 @@ isexe@^2.0.0: resolved "https://registry.yarnpkg.com/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10" integrity sha1-6PvzdNxVb/iUehDcsFctYz8s+hA= -isstream@~0.1.2: - version "0.1.2" - resolved "https://registry.yarnpkg.com/isstream/-/isstream-0.1.2.tgz#47e63f7af55afa6f92e1500e690eb8b8529c099a" - integrity sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo= - istanbul-lib-coverage@^3.0.0, istanbul-lib-coverage@^3.2.0: version "3.2.0" resolved "https://registry.yarnpkg.com/istanbul-lib-coverage/-/istanbul-lib-coverage-3.2.0.tgz#189e7909d0a39fa5a3dfad5b03f71947770191d3" @@ -3636,11 +3323,6 @@ js-yaml@^4.1.0: dependencies: argparse "^2.0.1" -jsbn@~0.1.0: - version "0.1.1" - resolved "https://registry.yarnpkg.com/jsbn/-/jsbn-0.1.1.tgz#a5e654c2e5a2deb5f201d96cefbca80c0ef2f513" - integrity sha1-peZUwuWi3rXyAdls77yoDA7y9RM= - jsesc@^2.5.1: version "2.5.2" resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-2.5.2.tgz#80564d2e483dacf6e8ef209650a67df3f0c283a4" @@ -3661,17 +3343,12 @@ json-schema-traverse@^0.4.1: resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz#69f6a87d9513ab8bb8fe63bdb0979c448e684660" integrity sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg== -json-schema@0.4.0: - version "0.4.0" - resolved "https://registry.yarnpkg.com/json-schema/-/json-schema-0.4.0.tgz#f7de4cf6efab838ebaeb3236474cbba5a1930ab5" - integrity sha512-es94M3nTIfsEPisRafak+HDLfHXnKBhV3vU5eqPcS3flIWqcxJWgXHXiey3YrpaNsanY5ei1VoYEbOzijuq9BA== - json-stable-stringify-without-jsonify@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz#9db7b59496ad3f3cfef30a75142d2d930ad72651" integrity sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE= -json-stringify-safe@^5.0.1, json-stringify-safe@~5.0.1: +json-stringify-safe@^5.0.1: version "5.0.1" resolved "https://registry.yarnpkg.com/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz#1296a2d58fd45f19a0f6ce01d65701e2c735b6eb" integrity sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus= @@ -3704,16 +3381,6 @@ jsonfile@^6.0.1: optionalDependencies: graceful-fs "^4.1.6" -jsprim@^2.0.2: - version "2.0.2" - resolved "https://registry.yarnpkg.com/jsprim/-/jsprim-2.0.2.tgz#77ca23dbcd4135cd364800d22ff82c2185803d4d" - integrity sha512-gqXddjPqQ6G40VdnI6T6yObEC+pDNvyP95wdQhkWkg7crHH3km5qP1FsOXEkzEQwnz6gz5qGTn1c2Y52wP3OyQ== - dependencies: - assert-plus "1.0.0" - extsprintf "1.3.0" - json-schema "0.4.0" - verror "1.10.0" - keyv@^3.0.0: version "3.1.0" resolved "https://registry.yarnpkg.com/keyv/-/keyv-3.1.0.tgz#ecc228486f69991e49e9476485a5be1e8fc5c4d9" @@ -3733,7 +3400,7 @@ latest-version@^5.1.0: dependencies: package-json "^6.3.0" -lazy-ass@1.6.0, lazy-ass@^1.6.0: +lazy-ass@1.6.0: version "1.6.0" resolved "https://registry.yarnpkg.com/lazy-ass/-/lazy-ass-1.6.0.tgz#7999655e8646c17f089fdd187d150d3324d54513" integrity sha1-eZllXoZGwX8In90YfRUNMyTVRRM= @@ -3761,20 +3428,6 @@ lines-and-columns@^1.1.6: resolved "https://registry.yarnpkg.com/lines-and-columns/-/lines-and-columns-1.2.4.tgz#eca284f75d2965079309dc0ad9255abb2ebc1632" integrity sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg== -listr2@^3.8.3: - version "3.14.0" - resolved "https://registry.yarnpkg.com/listr2/-/listr2-3.14.0.tgz#23101cc62e1375fd5836b248276d1d2b51fdbe9e" - integrity sha512-TyWI8G99GX9GjE54cJ+RrNMcIFBfwMPxc3XTFiAYGN4s10hWROGtOg7+O6u6LE3mNkyld7RSLE6nrKBvTfcs3g== - dependencies: - cli-truncate "^2.1.0" - colorette "^2.0.16" - log-update "^4.0.0" - p-map "^4.0.0" - rfdc "^1.3.0" - rxjs "^7.5.1" - through "^2.3.8" - wrap-ansi "^7.0.0" - locate-path@^5.0.0: version "5.0.0" resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-5.0.0.tgz#1afba396afd676a6d42504d0a67a3a7eb9f62aa0" @@ -3794,34 +3447,11 @@ lodash.merge@^4.6.2: resolved "https://registry.yarnpkg.com/lodash.merge/-/lodash.merge-4.6.2.tgz#558aa53b43b661e1925a0afdfa36a9a1085fe57a" integrity sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ== -lodash.once@^4.1.1: - version "4.1.1" - resolved "https://registry.yarnpkg.com/lodash.once/-/lodash.once-4.1.1.tgz#0dd3971213c7c56df880977d504c88fb471a97ac" - integrity sha1-DdOXEhPHxW34gJd9UEyI+0cal6w= - lodash@^4.17.10, lodash@^4.17.15, lodash@^4.17.21: version "4.17.21" resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.21.tgz#679591c564c3bffaae8454cf0b3df370c3d6911c" integrity sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg== -log-symbols@^4.0.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/log-symbols/-/log-symbols-4.1.0.tgz#3fbdbb95b4683ac9fc785111e792e558d4abd503" - integrity sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg== - dependencies: - chalk "^4.1.0" - is-unicode-supported "^0.1.0" - -log-update@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/log-update/-/log-update-4.0.0.tgz#589ecd352471f2a1c0c570287543a64dfd20e0a1" - integrity sha512-9fkkDevMefjg0mmzWFBW8YkFP91OrizzkW3diF7CpG+S2EYdy4+TVfGwz1zeF8x7hCx1ovSPTOE9Ngib74qqUg== - dependencies: - ansi-escapes "^4.3.0" - cli-cursor "^3.1.0" - slice-ansi "^4.0.0" - wrap-ansi "^6.2.0" - lowercase-keys@^1.0.0, lowercase-keys@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/lowercase-keys/-/lowercase-keys-1.0.1.tgz#6f9e30b47084d971a7c820ff15a6c5167b74c26f" @@ -3893,7 +3523,7 @@ mime-db@1.51.0: resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.51.0.tgz#d9ff62451859b18342d960850dc3cfb77e63fb0c" integrity sha512-5y8A56jg7XVQx2mbv1lu49NR4dokRnhZYTtL+KGfaa27uq4pSTXkwQkFJl4pkRMyNFz/EtYDSkiiEHx3F7UN6g== -mime-types@^2.1.12, mime-types@~2.1.19: +mime-types@^2.1.12: version "2.1.34" resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.34.tgz#5a712f9ec1503511a945803640fafe09d3793c24" integrity sha512-6cP692WwGIs9XXdOO4++N+7qjqv0rqxxVvJ3VHPh/Sc9mVZcQP+ZGhkKiTvWMQRr2tbHkJP/Yn7Y0npb3ZBs4A== @@ -3934,11 +3564,6 @@ minimist@^1.2.0, minimist@^1.2.5: resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.5.tgz#67d66014b66a6a8aaa0c083c5fd58df4e4e97602" integrity sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw== -minimist@^1.2.6: - version "1.2.6" - resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.6.tgz#8637a5b759ea0d6e98702cfb3a9283323c93af44" - integrity sha512-Jsjnk4bw3YJqYzbdyBiNsPWHPfO++UGG749Cxs6peCu5Xg4nrena6OVxOYxrQTqww0Jmwt+Ref8rggumkTLz9Q== - minipass@^3.0.0: version "3.3.4" resolved "https://registry.yarnpkg.com/minipass/-/minipass-3.3.4.tgz#ca99f95dd77c43c7a76bf51e6d200025eee0ffae" @@ -4040,7 +3665,7 @@ npm-conf@^1.1.3: config-chain "^1.1.11" pify "^3.0.0" -npm-run-path@^4.0.0, npm-run-path@^4.0.1: +npm-run-path@^4.0.1: version "4.0.1" resolved "https://registry.yarnpkg.com/npm-run-path/-/npm-run-path-4.0.1.tgz#b7ecd1e5ed53da8e37a55e1c2269e0b97ed748ea" integrity sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw== @@ -4064,7 +3689,7 @@ once@1.4.0, once@^1.3.0, once@^1.3.1, once@^1.4.0: dependencies: wrappy "1" -onetime@^5.1.0, onetime@^5.1.2: +onetime@^5.1.2: version "5.1.2" resolved "https://registry.yarnpkg.com/onetime/-/onetime-5.1.2.tgz#d0e96ebb56b07476df1dd9c4806e5237985ca45e" integrity sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg== @@ -4083,11 +3708,6 @@ optionator@^0.9.1: type-check "^0.4.0" word-wrap "^1.2.3" -ospath@^1.2.2: - version "1.2.2" - resolved "https://registry.yarnpkg.com/ospath/-/ospath-1.2.2.tgz#1276639774a3f8ef2572f7fe4280e0ea4550c07b" - integrity sha1-EnZjl3Sj+O8lcvf+QoDg6kVQwHs= - p-cancelable@^1.0.0: version "1.1.0" resolved "https://registry.yarnpkg.com/p-cancelable/-/p-cancelable-1.1.0.tgz#d078d15a3af409220c886f1d9a0ca2e441ab26cc" @@ -4121,13 +3741,6 @@ p-locate@^5.0.0: dependencies: p-limit "^3.0.2" -p-map@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/p-map/-/p-map-4.0.0.tgz#bb2f95a5eda2ec168ec9274e06a747c3e2904d2b" - integrity sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ== - dependencies: - aggregate-error "^3.0.0" - p-try@^2.0.0: version "2.2.0" resolved "https://registry.yarnpkg.com/p-try/-/p-try-2.2.0.tgz#cb2868540e313d61de58fafbe35ce9004d5540e6" @@ -4197,11 +3810,6 @@ pend@~1.2.0: resolved "https://registry.yarnpkg.com/pend/-/pend-1.2.0.tgz#7a57eb550a6783f9115331fcf4663d5c8e007a50" integrity sha1-elfrVQpng/kRUzH89GY9XI4AelA= -performance-now@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/performance-now/-/performance-now-2.1.0.tgz#6309f4e0e5fa913ec1c69307ae364b4b377c9e7b" - integrity sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns= - picocolors@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/picocolors/-/picocolors-1.0.0.tgz#cb5bdc74ff3f51892236eaf79d68bc44564ab81c" @@ -4217,11 +3825,6 @@ picomatch@^2.2.1: resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.3.1.tgz#3ba3833733646d9d3e4995946c1365a67fb07a42" integrity sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA== -pify@^2.2.0: - version "2.3.0" - resolved "https://registry.yarnpkg.com/pify/-/pify-2.3.0.tgz#ed141a6ac043a849ea588498e7dca8b15330e90c" - integrity sha1-7RQaasBDqEnqWISY59yosVMw6Qw= - pify@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/pify/-/pify-3.0.0.tgz#e5a4acd2c101fdf3d9a4d07f0dbc4db49dd28176" @@ -4239,6 +3842,11 @@ pkg-dir@^4.2.0: dependencies: find-up "^4.0.0" +playwright-core@1.27.1: + version "1.27.1" + resolved "https://registry.yarnpkg.com/playwright-core/-/playwright-core-1.27.1.tgz#840ef662e55a3ed759d8b5d3d00a5f885a7184f4" + integrity sha512-9EmeXDncC2Pmp/z+teoVYlvmPWUC6ejSSYZUln7YaP89Z6lpAaiaAnqroUt/BoLo8tn7WYShcfaCh+xofZa44Q== + plist@^3.0.1, plist@^3.0.4: version "3.0.4" resolved "https://registry.yarnpkg.com/plist/-/plist-3.0.4.tgz#a62df837e3aed2bb3b735899d510c4f186019cbe" @@ -4269,11 +3877,6 @@ prettier@^2.6.2: resolved "https://registry.yarnpkg.com/prettier/-/prettier-2.6.2.tgz#e26d71a18a74c3d0f0597f55f01fb6c06c206032" integrity sha512-PkUpF+qoXTqhOeWL9fu7As8LXsIUZ1WYaJiY/a7McAQzxjk82OF0tibkFXVCDImZtWxbvojFjerkiLb0/q8mew== -pretty-bytes@^5.6.0: - version "5.6.0" - resolved "https://registry.yarnpkg.com/pretty-bytes/-/pretty-bytes-5.6.0.tgz#356256f643804773c82f64723fe78c92c62beaeb" - integrity sha512-FFw039TmrBqFK8ma/7OL3sDz/VytdtJr044/QUJtH0wK9lb9jLq9tJyIxUwtQJHwar2BqtiA4iCWSwo9JLkzFg== - pretty-format@^28.0.2: version "28.0.2" resolved "https://registry.yarnpkg.com/pretty-format/-/pretty-format-28.0.2.tgz#6a24d71cbb61a5e5794ba7513fe22101675481bc" @@ -4302,11 +3905,6 @@ proto-list@~1.2.1: resolved "https://registry.yarnpkg.com/proto-list/-/proto-list-1.2.4.tgz#212d5bfe1318306a420f6402b8e26ff39647a849" integrity sha1-IS1b/hMYMGpCD2QCuOJv85ZHqEk= -proxy-from-env@1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/proxy-from-env/-/proxy-from-env-1.0.0.tgz#33c50398f70ea7eb96d21f7b817630a55791c7ee" - integrity sha1-M8UDmPcOp+uW0h97gXYwpVeRx+4= - ps-tree@1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/ps-tree/-/ps-tree-1.2.0.tgz#5e7425b89508736cdd4f2224d028f7bb3f722ebd" @@ -4314,11 +3912,6 @@ ps-tree@1.2.0: dependencies: event-stream "=3.3.4" -psl@^1.1.28: - version "1.8.0" - resolved "https://registry.yarnpkg.com/psl/-/psl-1.8.0.tgz#9326f8bcfb013adcc005fdff056acce020e51c24" - integrity sha512-RIdOzyoavK+hA18OGGWDqUTsCLhtA7IcZ/6NCs4fFJaHBDab+pDDmDIByWFRQJq2Cd7r1OoQxBGKOaztq+hjIQ== - pstree.remy@^1.1.8: version "1.1.8" resolved "https://registry.yarnpkg.com/pstree.remy/-/pstree.remy-1.1.8.tgz#c242224f4a67c21f686839bbdb4ac282b8373d3a" @@ -4332,7 +3925,7 @@ pump@^3.0.0: end-of-stream "^1.1.0" once "^1.3.1" -punycode@^2.1.0, punycode@^2.1.1: +punycode@^2.1.0: version "2.1.1" resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.1.1.tgz#b58b010ac40c22c5657616c8d2c2c02c7bf479ec" integrity sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A== @@ -4356,11 +3949,6 @@ qs@^6.10.1: dependencies: side-channel "^1.0.4" -qs@~6.5.2: - version "6.5.2" - resolved "https://registry.yarnpkg.com/qs/-/qs-6.5.2.tgz#cb3ae806e8740444584ef154ce8ee98d403f3e36" - integrity sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA== - queue-microtask@^1.2.2: version "1.2.3" resolved "https://registry.yarnpkg.com/queue-microtask/-/queue-microtask-1.2.3.tgz#4929228bbc724dfac43e0efb058caf7b6cfb6243" @@ -4427,13 +4015,6 @@ registry-url@^5.0.0: dependencies: rc "^1.2.8" -request-progress@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/request-progress/-/request-progress-3.0.0.tgz#4ca754081c7fec63f505e4faa825aa06cd669dbe" - integrity sha1-TKdUCBx/7GP1BeT6qCWqBs1mnb4= - dependencies: - throttleit "^1.0.0" - require-directory@^2.1.1: version "2.1.1" resolved "https://registry.yarnpkg.com/require-directory/-/require-directory-2.1.1.tgz#8c64ad5fd30dab1c976e2344ffe7f792a6a6df42" @@ -4476,24 +4057,11 @@ responselike@^1.0.2: dependencies: lowercase-keys "^1.0.0" -restore-cursor@^3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/restore-cursor/-/restore-cursor-3.1.0.tgz#39f67c54b3a7a58cea5236d95cf0034239631f7e" - integrity sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA== - dependencies: - onetime "^5.1.0" - signal-exit "^3.0.2" - reusify@^1.0.4: version "1.0.4" resolved "https://registry.yarnpkg.com/reusify/-/reusify-1.0.4.tgz#90da382b1e126efc02146e90845a88db12925d76" integrity sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw== -rfdc@^1.3.0: - version "1.3.0" - resolved "https://registry.yarnpkg.com/rfdc/-/rfdc-1.3.0.tgz#d0b7c441ab2720d05dc4cf26e01c89631d9da08b" - integrity sha512-V2hovdzFbOi77/WajaSMXk2OLm+xNIeQdMMuB7icj7bk6zi2F8GGAxigcnDFpJHbNyNcgyJDiP+8nOrY5cZGrA== - rimraf@^3.0.0, rimraf@^3.0.2: version "3.0.2" resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-3.0.2.tgz#f1a5402ba6220ad52cc1282bac1ae3aa49fd061a" @@ -4520,24 +4088,24 @@ run-parallel@^1.1.9: dependencies: queue-microtask "^1.2.2" -rxjs@^7.1.0, rxjs@^7.5.1: +rxjs@^7.1.0: version "7.5.1" resolved "https://registry.yarnpkg.com/rxjs/-/rxjs-7.5.1.tgz#af73df343cbcab37628197f43ea0c8256f54b157" integrity sha512-KExVEeZWxMZnZhUZtsJcFwz8IvPvgu4G2Z2QyqjZQzUGr32KDYuSxrEYO4w3tFFNbfLozcrKUTvTPi+E9ywJkQ== dependencies: tslib "^2.1.0" -safe-buffer@^5.0.1, safe-buffer@^5.1.2, safe-buffer@~5.2.0: - version "5.2.1" - resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.2.1.tgz#1eaf9fa9bdb1fdd4ec75f58f9cdb4e6b7827eec6" - integrity sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ== - safe-buffer@~5.1.1: version "5.1.2" resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.2.tgz#991ec69d296e0313747d59bdfd2b745c35f8828d" integrity sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g== -"safer-buffer@>= 2.1.2 < 3.0.0", safer-buffer@^2.0.2, safer-buffer@^2.1.0, safer-buffer@~2.1.0: +safe-buffer@~5.2.0: + version "5.2.1" + resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.2.1.tgz#1eaf9fa9bdb1fdd4ec75f58f9cdb4e6b7827eec6" + integrity sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ== + +"safer-buffer@>= 2.1.2 < 3.0.0": version "2.1.2" resolved "https://registry.yarnpkg.com/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a" integrity sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg== @@ -4659,15 +4227,6 @@ slice-ansi@^3.0.0: astral-regex "^2.0.0" is-fullwidth-code-point "^3.0.0" -slice-ansi@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/slice-ansi/-/slice-ansi-4.0.0.tgz#500e8dd0fd55b05815086255b3195adf2a45fe6b" - integrity sha512-qMCMfhY040cVHT43K9BFygqYbUPFZKHOg7K73mtTWJRb8pyP3fzf4Ixd5SzdEJQ6MRUg/WBnOLxghZtKKurENQ== - dependencies: - ansi-styles "^4.0.0" - astral-regex "^2.0.0" - is-fullwidth-code-point "^3.0.0" - smart-buffer@^4.0.2: version "4.2.0" resolved "https://registry.yarnpkg.com/smart-buffer/-/smart-buffer-4.2.0.tgz#6e1d71fa4f18c05f7d0ff216dd16a481d0e8d9ae" @@ -4716,21 +4275,6 @@ sprintf-js@~1.0.2: resolved "https://registry.yarnpkg.com/sprintf-js/-/sprintf-js-1.0.3.tgz#04e6926f662895354f3dd015203633b857297e2c" integrity sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw= -sshpk@^1.14.1: - version "1.17.0" - resolved "https://registry.yarnpkg.com/sshpk/-/sshpk-1.17.0.tgz#578082d92d4fe612b13007496e543fa0fbcbe4c5" - integrity sha512-/9HIEs1ZXGhSPE8X6Ccm7Nam1z8KcoCqPdI7ecm1N33EzAetWahvQWVqLZtaZQ+IDKX4IyA2o0gBzqIMkAagHQ== - dependencies: - asn1 "~0.2.3" - assert-plus "^1.0.0" - bcrypt-pbkdf "^1.0.0" - dashdash "^1.12.0" - ecc-jsbn "~0.1.1" - getpass "^0.1.1" - jsbn "~0.1.0" - safer-buffer "^2.0.2" - tweetnacl "~0.14.0" - stack-utils@^2.0.3: version "2.0.5" resolved "https://registry.yarnpkg.com/stack-utils/-/stack-utils-2.0.5.tgz#d25265fca995154659dbbfba3b49254778d2fdd5" @@ -4860,7 +4404,7 @@ supports-color@^7.0.0, supports-color@^7.1.0: dependencies: has-flag "^4.0.0" -supports-color@^8.0.0, supports-color@^8.1.1: +supports-color@^8.0.0: version "8.1.1" resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-8.1.1.tgz#cd6fc17e28500cff56c1b86c0a7fd4a54a73005c" integrity sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q== @@ -4922,12 +4466,7 @@ throat@^6.0.1: resolved "https://registry.yarnpkg.com/throat/-/throat-6.0.1.tgz#d514fedad95740c12c2d7fc70ea863eb51ade375" integrity sha512-8hmiGIJMDlwjg7dlJ4yKGLK8EsYqKgPWbG3b4wjJddKNwc7N7Dpn08Df4szr/sZdMVeOstrdYSsqzX6BYbcB+w== -throttleit@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/throttleit/-/throttleit-1.0.0.tgz#9e785836daf46743145a5984b6268d828528ac6c" - integrity sha1-nnhYNtr0Z0MUWlmEtiaNgoUorGw= - -through@2, through@^2.3.8, through@~2.3, through@~2.3.1: +through@2, through@~2.3, through@~2.3.1: version "2.3.8" resolved "https://registry.yarnpkg.com/through/-/through-2.3.8.tgz#0dd4c9ffaabc357960b1b724115d7e0e86a2e1f5" integrity sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU= @@ -4939,7 +4478,7 @@ tmp-promise@^3.0.2: dependencies: tmp "^0.2.0" -tmp@^0.2.0, tmp@~0.2.1: +tmp@^0.2.0: version "0.2.1" resolved "https://registry.yarnpkg.com/tmp/-/tmp-0.2.1.tgz#8457fc3037dcf4719c251367a1af6500ee1ccf14" integrity sha512-76SUhtfqR2Ijn+xllcI5P1oyannHNHByD80W1q447gU3mp9G9PSpGdWmjUOHRDPiHYacIk66W7ubDTuPF3BEtQ== @@ -4975,14 +4514,6 @@ touch@^3.1.0: dependencies: nopt "~1.0.10" -tough-cookie@~2.5.0: - version "2.5.0" - resolved "https://registry.yarnpkg.com/tough-cookie/-/tough-cookie-2.5.0.tgz#cd9fb2a0aa1d5a12b473bd9fb96fa3dcff65ade2" - integrity sha512-nlLsUzgm1kfLXSXfRZMc1KLAugd4hqJHDTvc2hDIwS3mZAfMEuMbc03SujMF+GEcpaX/qboeycw6iO8JwVv2+g== - dependencies: - psl "^1.1.28" - punycode "^2.1.1" - truncate-utf8-bytes@^1.0.0: version "1.0.2" resolved "https://registry.yarnpkg.com/truncate-utf8-bytes/-/truncate-utf8-bytes-1.0.2.tgz#405923909592d56f78a5818434b0b78489ca5f2b" @@ -4995,23 +4526,11 @@ tslib@^2.1.0: resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.3.1.tgz#e8a335add5ceae51aa261d32a490158ef042ef01" integrity sha512-77EbyPPpMz+FRFRuAFlWMtmgUWGe9UOG2Z25NqCwiIjRhOf5iKGuzSe5P2w1laq+FkRy4p+PCuVkJSGkzTEKVw== -tunnel-agent@^0.6.0: - version "0.6.0" - resolved "https://registry.yarnpkg.com/tunnel-agent/-/tunnel-agent-0.6.0.tgz#27a5dea06b36b04a0a9966774b290868f0fc40fd" - integrity sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0= - dependencies: - safe-buffer "^5.0.1" - tunnel@^0.0.6: version "0.0.6" resolved "https://registry.yarnpkg.com/tunnel/-/tunnel-0.0.6.tgz#72f1314b34a5b192db012324df2cc587ca47f92c" integrity sha512-1h/Lnq9yajKY2PEbBadPXj3VxsDDu844OnaAo52UVmIzIvwwtBPIuNvkjuzBlTWpfJyUbG3ez0KSBibQkj4ojg== -tweetnacl@^0.14.3, tweetnacl@~0.14.0: - version "0.14.5" - resolved "https://registry.yarnpkg.com/tweetnacl/-/tweetnacl-0.14.5.tgz#5ae68177f192d4456269d108afa93ff8743f4f64" - integrity sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q= - type-check@^0.4.0, type-check@~0.4.0: version "0.4.0" resolved "https://registry.yarnpkg.com/type-check/-/type-check-0.4.0.tgz#07b8203bfa7056c0657050e3ccd2c37730bab8f1" @@ -5068,11 +4587,6 @@ universalify@^2.0.0: resolved "https://registry.yarnpkg.com/universalify/-/universalify-2.0.0.tgz#75a4984efedc4b08975c5aeb73f530d02df25717" integrity sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ== -untildify@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/untildify/-/untildify-4.0.0.tgz#2bc947b953652487e4600949fb091e3ae8cd919b" - integrity sha512-KK8xQ1mkzZeg9inewmFVDNkg3l5LUhoq9kN6iWYB/CC9YMG8HA+c1Q8HwDe6dEX7kErrEVNVBO3fWsVq5iDgtw== - update-notifier@^5.1.0: version "5.1.0" resolved "https://registry.yarnpkg.com/update-notifier/-/update-notifier-5.1.0.tgz#4ab0d7c7f36a231dd7316cf7729313f0214d9ad9" @@ -5117,11 +4631,6 @@ util-deprecate@^1.0.1: resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf" integrity sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8= -uuid@^8.3.2: - version "8.3.2" - resolved "https://registry.yarnpkg.com/uuid/-/uuid-8.3.2.tgz#80d5b5ced271bb9af6c445f21a1a04c606cefbe2" - integrity sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg== - v8-to-istanbul@^9.0.0: version "9.0.0" resolved "https://registry.yarnpkg.com/v8-to-istanbul/-/v8-to-istanbul-9.0.0.tgz#be0dae58719fc53cb97e5c7ac1d7e6d4f5b19511" @@ -5131,15 +4640,6 @@ v8-to-istanbul@^9.0.0: "@types/istanbul-lib-coverage" "^2.0.1" convert-source-map "^1.6.0" -verror@1.10.0: - version "1.10.0" - resolved "https://registry.yarnpkg.com/verror/-/verror-1.10.0.tgz#3a105ca17053af55d6e270c1f8288682e18da400" - integrity sha1-OhBcoXBTr1XW4nDB+CiGguGNpAA= - dependencies: - assert-plus "^1.0.0" - core-util-is "1.0.2" - extsprintf "^1.2.0" - verror@^1.10.0: version "1.10.1" resolved "https://registry.yarnpkg.com/verror/-/verror-1.10.1.tgz#4bf09eeccf4563b109ed4b3d458380c972b0cdeb" @@ -5186,15 +4686,6 @@ word-wrap@^1.2.3: resolved "https://registry.yarnpkg.com/word-wrap/-/word-wrap-1.2.3.tgz#610636f6b1f703891bd34771ccb17fb93b47079c" integrity sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ== -wrap-ansi@^6.2.0: - version "6.2.0" - resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-6.2.0.tgz#e9393ba07102e6c91a3b221478f0257cd2856e53" - integrity sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA== - dependencies: - ansi-styles "^4.0.0" - string-width "^4.1.0" - strip-ansi "^6.0.0" - wrap-ansi@^7.0.0: version "7.0.0" resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-7.0.0.tgz#67e145cff510a6a6984bdf1152911d69d2eb9e43"