From 03e742834835c30c1fc8b5b50167aedee32cb9e3 Mon Sep 17 00:00:00 2001 From: Carlos Valente <34649812+cpvalente@users.noreply.github.com> Date: Sun, 2 Apr 2023 19:07:13 +0200 Subject: [PATCH] V2 e2e (#320) * chore: cleanup handling of a bad read * chore: configure e2e testing * chore: version bump --- .github/workflows/test_v2.yml | 42 ++- apps/client/package.json | 6 +- .../control/message/MessageControl.tsx | 1 + apps/electron/package.json | 2 +- apps/server/package.json | 8 +- apps/server/src/app.ts | 3 - apps/server/src/modules/loadDb.ts | 4 + apps/server/src/setup.ts | 7 +- apps/server/src/utils/parser.ts | 5 +- ...-tests.test.ts => 000-smoke-tests.spec.ts} | 0 ...on.test.ts => 001-view-navigation.spec.ts} | 12 +- ...al-url.spec.ts => 101-minimal-url.spec.ts} | 2 +- ...ol.spec.ts => 201-message-control.spec.ts} | 17 +- package.json | 17 +- playwright.config.ts | 27 +- pnpm-lock.yaml | 287 +++--------------- turbo.json | 3 + 17 files changed, 140 insertions(+), 303 deletions(-) rename e2e/tests/{smoke-tests.test.ts => 000-smoke-tests.spec.ts} (100%) rename e2e/tests/{features/view-navigation.test.ts => 001-view-navigation.spec.ts} (86%) rename e2e/tests/features/{minimal-url.spec.ts => 101-minimal-url.spec.ts} (99%) rename e2e/tests/features/{message-control.spec.ts => 201-message-control.spec.ts} (62%) diff --git a/.github/workflows/test_v2.yml b/.github/workflows/test_v2.yml index a97bedd94..48980776d 100644 --- a/.github/workflows/test_v2.yml +++ b/.github/workflows/test_v2.yml @@ -6,9 +6,43 @@ on: workflow_dispatch: jobs: - e2e-test: - timeout-minutes: 20 + unit-test: runs-on: ubuntu-latest + timeout-minutes: 20 + env: + CI: '' + + steps: + - uses: actions/checkout@v3 + - name: Use Node.js + uses: actions/setup-node@v3 + with: + node-version: 16 + + - name: Setup pnpm + uses: pnpm/action-setup@v2.2.4 + with: + version: 7.26.3 + + - name: Install dependencies + run: pnpm install --frozen-lockfile + + # We choose to run tests separately + - name: React - Run unit tests + run: pnpm test:pipeline + working-directory: ./apps/client + + - name: Server - Run unit tests + run: pnpm test:pipeline + working-directory: ./apps/server + + - name: Utils - Run unit tests + run: pnpm test:pipeline + working-directory: ./packages/utils + + e2e-test: + runs-on: ubuntu-latest + timeout-minutes: 20 steps: - uses: actions/checkout@v3 @@ -26,13 +60,13 @@ jobs: run: pnpm install --frozen-lockfile - name: Build client - run: turbo build:local + run: pnpm build:local - name: Install Playwright Browsers run: npx playwright install --with-deps - name: Run Playwright tests - run: npx playwright test + run: pnpm e2e - uses: actions/upload-artifact@v3 if: always() diff --git a/apps/client/package.json b/apps/client/package.json index d6b25f399..5a6149ceb 100644 --- a/apps/client/package.json +++ b/apps/client/package.json @@ -1,6 +1,6 @@ { "name": "ontime-ui", - "version": "2.0.0-alpha", + "version": "2.0.0-beta1", "private": true, "dependencies": { "@chakra-ui/react": "^2.5.1", @@ -35,9 +35,9 @@ "scripts": { "addversion": "node -p \"'export const ONTIME_VERSION = ' + JSON.stringify(require('../../package.json').version) + ';'\" > src/ONTIME_VERSION.js", "postinstall": "pnpm addversion", - "dev": "set BROWSER=none&&vite", + "dev": "cross-env BROWSER=none vite", "build": "vite build", - "build:local": "NODE_ENV=local vite build", + "build:local": "cross-env NODE_ENV=local vite build", "build:docker": "vite build", "lint": "eslint .", "stylelint": "npx stylelint \"**/*.scss\"\n", diff --git a/apps/client/src/features/control/message/MessageControl.tsx b/apps/client/src/features/control/message/MessageControl.tsx index 20d754974..8bea4648a 100644 --- a/apps/client/src/features/control/message/MessageControl.tsx +++ b/apps/client/src/features/control/message/MessageControl.tsx @@ -43,6 +43,7 @@ export default function MessageControl() { variant={data.onAir ? 'ontime-filled' : 'ontime-subtle'} leftIcon={data.onAir ? : } onClick={() => setMessage.onAir(!data.onAir)} + data-testid='toggle on air' > {data?.onAir ? 'Ontime is On Air' : 'Ontime is Off Air'} diff --git a/apps/electron/package.json b/apps/electron/package.json index 07d92b106..8a2e4a5fa 100644 --- a/apps/electron/package.json +++ b/apps/electron/package.json @@ -1,6 +1,6 @@ { "name": "ontime", - "version": "2.0.0-alpha", + "version": "2.0.0-beta1", "author": "Carlos Valente", "description": "Time keeping for live events", "repository": "https://github.com/cpvalente/ontime", diff --git a/apps/server/package.json b/apps/server/package.json index 4ae78e20f..41a6a4d7c 100644 --- a/apps/server/package.json +++ b/apps/server/package.json @@ -2,7 +2,7 @@ "name": "ontime-server", "type": "module", "main": "src/index.ts", - "version": "2.0.0-alpha", + "version": "2.0.0-beta1", "exports": "./src/index.js", "dependencies": { "@sentry/node": "^7.24.1", @@ -42,10 +42,10 @@ }, "scripts": { "addversion": "node -p \"'export const ONTIME_VERSION = ' + JSON.stringify(require('../../package.json').version) + ';'\" > src/ONTIME_VERSION.js", - "postinstall": "pnpm addversion", - "dev": "set NODE_ENV=development && nodemon --exec \"ts-node-esm\" ./src/index.ts", - "dev:test": "set IS_TEST=true && nodemon --exec \"ts-node-esm\" ./src/index.ts", "setdb": "shx cp ../../demo-db/db.json src/preloaded-db/db.json", + "postinstall": "pnpm addversion && pnpm setdb", + "dev": "cross-env NODE_ENV=development nodemon --exec \"ts-node-esm\" ./src/index.ts", + "dev:test": "cross-env IS_TEST=true nodemon --exec \"ts-node-esm\" ./src/index.ts", "prebuild": "pnpm setdb", "build": "pnpm prebuild && esbuild src/app.ts --log-level=error --platform=node --format=cjs --bundle --minify --outfile=dist/index.cjs", "build:docker": "pnpm prebuild && esbuild src/index.ts --log-level=error --platform=node --format=cjs --minify --bundle --outfile=dist/docker.cjs", diff --git a/apps/server/src/app.ts b/apps/server/src/app.ts index 629039164..47e271fc2 100644 --- a/apps/server/src/app.ts +++ b/apps/server/src/app.ts @@ -64,9 +64,6 @@ app.use('/playback', playbackRouter); app.use('/external', express.static(join(currentDirectory, 'external'))); // serve static - react, in test mode we fetch the React app from module -const newpath = join(currentDirectory, resolvedPath()); -console.log('serving content at ', newpath); - app.use(express.static(join(currentDirectory, resolvedPath()))); app.get('*', (req, res) => { diff --git a/apps/server/src/modules/loadDb.ts b/apps/server/src/modules/loadDb.ts index e7934ae36..35868e0f2 100644 --- a/apps/server/src/modules/loadDb.ts +++ b/apps/server/src/modules/loadDb.ts @@ -57,6 +57,10 @@ async function loadDb() { const db = new Low(adapter); const data = await parseDb(dbInDisk, db); + if (data === null) { + console.log('ERROR: Invalid JSON format'); + return; + } db.data = data; await db.write(); diff --git a/apps/server/src/setup.ts b/apps/server/src/setup.ts index d936300ed..2c3d9135f 100644 --- a/apps/server/src/setup.ts +++ b/apps/server/src/setup.ts @@ -46,12 +46,15 @@ const devPath = '../../client/build/'; const dockerPath = 'client/'; export const resolvedPath = (): string => { - if (isProduction) { - return productionPath; + if (isTest) { + return devPath; } if (isDocker) { return dockerPath; } + if (isProduction) { + return productionPath; + } return devPath; }; diff --git a/apps/server/src/utils/parser.ts b/apps/server/src/utils/parser.ts index 40d1e4115..84df30ca5 100644 --- a/apps/server/src/utils/parser.ts +++ b/apps/server/src/utils/parser.ts @@ -258,10 +258,9 @@ export const parseExcel = async (excelData) => { * @param {boolean} [enforce=false] - flag, tells to create an object anyway * @returns {object} - parsed object */ -export const parseJson = async (jsonData, enforce = false): Promise => { +export const parseJson = async (jsonData, enforce = false): Promise => { if (!jsonData || typeof jsonData !== 'object') { - console.log('ERROR: Invalid JSON format'); - return -1; + return null; } // object containing the parsed data diff --git a/e2e/tests/smoke-tests.test.ts b/e2e/tests/000-smoke-tests.spec.ts similarity index 100% rename from e2e/tests/smoke-tests.test.ts rename to e2e/tests/000-smoke-tests.spec.ts diff --git a/e2e/tests/features/view-navigation.test.ts b/e2e/tests/001-view-navigation.spec.ts similarity index 86% rename from e2e/tests/features/view-navigation.test.ts rename to e2e/tests/001-view-navigation.spec.ts index 124d57a77..d3078a993 100644 --- a/e2e/tests/features/view-navigation.test.ts +++ b/e2e/tests/001-view-navigation.spec.ts @@ -8,7 +8,7 @@ test.describe('test view navigation feature', () => { await page.getByRole('button', { name: 'toggle menu' }).click(); await page.locator('data-test-id=navigation-menu'); - await page.getByRole('link', { name: 'Clock' }).click(); + await page.getByRole('link', { name: 'Clock', exact: true }).click(); await page.locator('data-test-id=clock-view'); await expect(page).toHaveURL('http://localhost:4001/clock'); @@ -37,12 +37,6 @@ test.describe('test view navigation feature', () => { const errorBoundary = await page.locator('data-test-id=error-container'); await expect(errorBoundary).toHaveCount(0); - await page.getByRole('button', { name: 'toggle menu' }).click(); - await page.locator('data-test-id=navigation-menu'); - await page.getByRole('link', { name: 'PiP' }).click(); - await page.locator('data-test-id=pip-view'); - await expect(page).toHaveURL('http://localhost:4001/pip'); - await page.getByRole('button', { name: 'toggle menu' }).click(); await page.locator('data-test-id=navigation-menu'); await page.getByRole('link', { name: 'Studio Clock' }).click(); @@ -57,8 +51,8 @@ test.describe('test view navigation feature', () => { await page.getByRole('button', { name: 'toggle menu' }).click(); await page.locator('data-test-id=navigation-menu'); - await page.getByRole('link', { name: 'Timer' }).click(); + await page.getByRole('link', { name: 'Timer', exact: true }).click(); await page.locator('data-test-id=timer-view'); await expect(page).toHaveURL('http://localhost:4001/timer'); }); -}); +}); \ No newline at end of file diff --git a/e2e/tests/features/minimal-url.spec.ts b/e2e/tests/features/101-minimal-url.spec.ts similarity index 99% rename from e2e/tests/features/minimal-url.spec.ts rename to e2e/tests/features/101-minimal-url.spec.ts index 57f1ab312..0de4b5373 100644 --- a/e2e/tests/features/minimal-url.spec.ts +++ b/e2e/tests/features/101-minimal-url.spec.ts @@ -11,4 +11,4 @@ test.describe('minimal view behaviour can be changed through params', () => { const navBar = await page.locator('data-test-id=nav-logo'); await expect(navBar).toHaveCount(0); }); -}); +}); \ No newline at end of file diff --git a/e2e/tests/features/message-control.spec.ts b/e2e/tests/features/201-message-control.spec.ts similarity index 62% rename from e2e/tests/features/message-control.spec.ts rename to e2e/tests/features/201-message-control.spec.ts index 76a9a0e52..e6f763517 100644 --- a/e2e/tests/features/message-control.spec.ts +++ b/e2e/tests/features/201-message-control.spec.ts @@ -8,29 +8,32 @@ test('test', async ({ context }) => { // stage timer message await editorPage.getByPlaceholder('Shown in stage timer').click(); + await expect(editorPage.getByPlaceholder('Shown in stage timer')).toBeEnabled(true); + await editorPage.getByPlaceholder('Shown in stage timer').fill('testing stage'); - await editorPage.getByRole('button', { name: 'toggle timer screen message' }).click(); + await editorPage.getByRole('button', { name: /toggle timer screen message/i }).click({ timeout: 5000 }); await featurePage.goto('http://localhost:4001/timer'); await featurePage.getByText('testing stage').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 editorPage.getByPlaceholder('Shown in public and backstage screens').click(); + await editorPage.getByPlaceholder('Shown in public and backstage screens').fill('testing public'); + await editorPage.getByRole('button', { name: 'Toggle Public / Backstage screen message' }).click(); await featurePage.goto('http://localhost:4001/public'); - await featurePage.getByText('testing public').click(); + await featurePage.getByText('testing public').click({ timeout: 10000 }); // 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(); + // increase the timeout to accommodate animation + await featurePage.getByText('testing lower').click({ timeout: 10000 }); // on air state - await editorPage.getByRole('button', { name: 'Toggle On Air' }).click(); + await editorPage.getByTestId('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'); diff --git a/package.json b/package.json index ebe687f10..7cafef114 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "ontime", - "version": "2.0.0-alpha", + "version": "2.0.0-beta1", "description": "Time keeping for live events", "keywords": [ "lighdev", @@ -26,22 +26,25 @@ "dev:electron": "turbo run dev --filter=ontime", "dev:server": "turbo run dev --filter=ontime-server", "build": "turbo run build", + "build:local": "turbo run build:local", + "dist-win": "turbo run dist-win", + "dist-mac": "turbo run dist-mac", + "dist-linux": "turbo run dist-linux", "test": "vitest", - "e2e": "start-test \"turbo dev --filter=ontime-server\" 4001 e2e:local", - "e2e:local": "npx playwright test -c playwright.config.ts", + "e2e": "cross-env DEBUG=pw:webserver npx playwright test -c playwright.config.ts", "cleanup": "rm -rf node_modules && rm -rf **/node_modules && rm -rf **/**/node_modules" }, "devDependencies": { - "@playwright/test": "^1.30.0", + "@playwright/test": "^1.32.1", "@types/node": "^18.11.18", "@typescript-eslint/eslint-plugin": "^5.48.0", "@typescript-eslint/parser": "^5.48.0", + "cross-env": "^7.0.3", "eslint": "^8.31.0", "eslint-config-prettier": "^8.6.0", - "eslint-plugin-playwright": "^0.11.2", + "eslint-plugin-playwright": "^0.12.0", "prettier": "^2.8.2", - "start-server-and-test": "^1.15.2", - "turbo": "^1.6.3", + "turbo": "^1.8.8", "typescript": "^4.8.3" } } diff --git a/playwright.config.ts b/playwright.config.ts index 691b6be6e..42a7b257b 100644 --- a/playwright.config.ts +++ b/playwright.config.ts @@ -1,12 +1,6 @@ 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. */ @@ -19,8 +13,14 @@ const config: PlaywrightTestConfig = { fullyParallel: true, forbidOnly: !!process.env.CI, retries: process.env.CI ? 2 : 0, - workers: process.env.CI ? 1 : undefined, + workers: 1, reporter: 'html', + webServer: { + command: "turbo run dev:test", + port: 4001, + reuseExistingServer: false, + timeout: 60 * 1000, + }, use: { screenshot: 'only-on-failure', viewport: { width: 1920, height: 1080 }, @@ -29,9 +29,6 @@ const config: PlaywrightTestConfig = { ignoreHTTPSErrors: true, trace: 'on-first-retry', }, - webServer: { - command: "pnpm dev:server" - }, projects: [ { name: 'chromium', @@ -40,17 +37,9 @@ const config: PlaywrightTestConfig = { }, }, - { - name: 'firefox', - testMatch: /.*.spec.all.ts/, - use: { - ...devices['Desktop Firefox'], - }, - }, - { name: 'webkit', - testMatch: /.*.spec.ts/, + testMatch: /.*.spec.mac.ts/, use: { ...devices['Desktop Safari'], }, diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 20b1ad683..8ef008903 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -4,28 +4,28 @@ importers: .: specifiers: - '@playwright/test': ^1.30.0 + '@playwright/test': ^1.32.1 '@types/node': ^18.11.18 '@typescript-eslint/eslint-plugin': ^5.48.0 '@typescript-eslint/parser': ^5.48.0 + cross-env: ^7.0.3 eslint: ^8.31.0 eslint-config-prettier: ^8.6.0 - eslint-plugin-playwright: ^0.11.2 + eslint-plugin-playwright: ^0.12.0 prettier: ^2.8.2 - start-server-and-test: ^1.15.2 - turbo: ^1.6.3 + turbo: ^1.8.8 typescript: ^4.8.3 devDependencies: - '@playwright/test': 1.30.0 + '@playwright/test': 1.32.1 '@types/node': 18.11.18 '@typescript-eslint/eslint-plugin': 5.48.0_k73wpmdolxikpyqun3p36akaaq '@typescript-eslint/parser': 5.48.0_iukboom6ndih5an6iafl45j2fe + cross-env: 7.0.3 eslint: 8.31.0 eslint-config-prettier: 8.6.0_eslint@8.31.0 - eslint-plugin-playwright: 0.11.2_eslint@8.31.0 + eslint-plugin-playwright: 0.12.0_eslint@8.31.0 prettier: 2.8.2 - start-server-and-test: 1.15.2 - turbo: 1.6.3 + turbo: 1.8.8 typescript: 4.9.4 apps/client: @@ -2251,16 +2251,6 @@ packages: - supports-color dev: true - /@hapi/hoek/9.3.0: - resolution: {integrity: sha512-/c6rf4UJlmHlC9b5BaNvzAcFv7HZ2QHaV0D4/HNlBdvFnvQq8RI4kYdhyPCl7Xj+oWvTWQ8ujhqS53LIgAe6KQ==} - dev: true - - /@hapi/topo/5.1.0: - resolution: {integrity: sha512-foQZKJig7Ob0BMAYBfcJk8d77QtOe7Wo4ox7ff1lQYoNNAb6jwcY1ncdoy2e9wQZzvNy7ODZCYJkK8kzmcAnAg==} - dependencies: - '@hapi/hoek': 9.3.0 - dev: true - /@humanwhocodes/config-array/0.11.8: resolution: {integrity: sha512-UybHIJzJnR5Qc/MsD9Kr+RpO2h+/P1GhOwdiLPXK5TWk5sgTdu88bTD9UP+CKbPPh5Rni1u0GjAdYQLemG8g+g==} engines: {node: '>=10.10.0'} @@ -2439,13 +2429,15 @@ packages: fastq: 1.15.0 dev: true - /@playwright/test/1.30.0: - resolution: {integrity: sha512-SVxkQw1xvn/Wk/EvBnqWIq6NLo1AppwbYOjNLmyU0R1RoQ3rLEBtmjTnElcnz8VEtn11fptj1ECxK0tgURhajw==} + /@playwright/test/1.32.1: + resolution: {integrity: sha512-FTwjCuhlm1qHUGf4hWjfr64UMJD/z0hXYbk+O387Ioe6WdyZQ+0TBDAc6P+pHjx2xCv1VYNgrKbYrNixFWy4Dg==} engines: {node: '>=14'} hasBin: true dependencies: '@types/node': 18.11.18 - playwright-core: 1.30.0 + playwright-core: 1.32.1 + optionalDependencies: + fsevents: 2.3.2 dev: true /@popperjs/core/2.11.6: @@ -2598,20 +2590,6 @@ packages: - supports-color dev: true - /@sideway/address/4.1.4: - resolution: {integrity: sha512-7vwq+rOHVWjyXxVlR76Agnvhy8I9rpzjosTESvmhNeXOXdZZB15Fl+TI9x1SiHZH5Jv2wTGduSxFDIaq0m3DUw==} - dependencies: - '@hapi/hoek': 9.3.0 - dev: true - - /@sideway/formula/3.0.1: - resolution: {integrity: sha512-/poHZJJVjx3L+zVD6g9KgHfYnb443oi7wLu/XKojDviHy6HOEOA6z1Trk5aR1dGcmPenJEgb2sK2I80LeS3MIg==} - dev: true - - /@sideway/pinpoint/2.0.0: - resolution: {integrity: sha512-RNiOoTPkptFtSVzQevY/yWtZwf/RxyVnPy/OcA9HBM3MlGDnBEYL5B41H0MTn0Uec8Hi+2qUtTfG2WWZBmMejQ==} - dev: true - /@sinclair/typebox/0.24.51: resolution: {integrity: sha512-1P1OROm/rdubP5aFDSZQILU0vrLCJ4fvHt6EoqHEM+2D/G5MK3bIaymUKLit8Js9gbns5UyJnkP/TZROLw4tUA==} dev: true @@ -3623,10 +3601,6 @@ packages: resolution: {integrity: sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==} dev: true - /arg/5.0.2: - resolution: {integrity: sha512-PYjyFOLKQ9y57JvQ6QLo8dAgNqswh8M1RMJYdQduT6xbWSgK36P/Z/v+p888pM69jMMfS8Xd8F6I1kQ/I9HUGg==} - dev: true - /argparse/2.0.1: resolution: {integrity: sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==} dev: true @@ -3745,14 +3719,6 @@ packages: engines: {node: '>= 0.4'} dev: true - /axios/0.25.0_debug@4.3.4: - resolution: {integrity: sha512-cD8FOb0tRH3uuEe6+evtAbgJtfxr7ly3fQjYcMcuPlgkwVS9xboaVIpcDV+cYQe+yGykgwZCs1pzjntcGa6l5g==} - dependencies: - follow-redirects: 1.15.2 - transitivePeerDependencies: - - debug - dev: true - /axios/1.2.2: resolution: {integrity: sha512-bz/J4gS2S3I7mpN/YZfGFTqhXTYzRho8Ay38w2otuuDR322KzFIWm/4W2K6gIwvWaws5n+mnb7D1lN9uD+QH6Q==} dependencies: @@ -4043,11 +4009,6 @@ packages: resolution: {integrity: sha512-BrgHpW9NURQgzoNyjfq0Wu6VFO6D7IZEmJNdtgNqpzGG8RuNFHt2jQxWlAs4HMe119chBnv+34syEZtc6IhLtA==} dev: true - /check-more-types/2.24.0: - resolution: {integrity: sha512-Pj779qHxV2tuapviy1bSZNEL1maXr13bPYpsvSDB68HlYcYuhlDrmGd63i0JHMCLKzc7rUSNIrpdJlhVlNwrxA==} - engines: {node: '>= 0.8.0'} - dev: true - /chokidar/3.5.3: resolution: {integrity: sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==} engines: {node: '>= 8.10.0'} @@ -4296,6 +4257,14 @@ packages: resolution: {integrity: sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==} dev: true + /cross-env/7.0.3: + resolution: {integrity: sha512-+/HKd6EgcQCJGh2PSjZuUitQBQynKor4wrFbRg4DtAgS1aWO+gU52xpH7M9ScGgXSYmAVS9bIJ8EzuaGw0oNAw==} + engines: {node: '>=10.14', npm: '>=6', yarn: '>=1'} + hasBin: true + dependencies: + cross-spawn: 7.0.3 + dev: true + /cross-spawn/7.0.3: resolution: {integrity: sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==} engines: {node: '>= 8'} @@ -4599,10 +4568,6 @@ packages: engines: {node: '>=10'} dev: true - /duplexer/0.1.2: - resolution: {integrity: sha512-jtD6YG370ZCIi/9GTaJKQxWTZD045+4R4hTk/x1UyoqadyJ9x9CgSi1RlVDQF8U2sxLLSnFkCaMihqljHIWgMg==} - dev: true - /duplexer3/0.1.5: resolution: {integrity: sha512-1A8za6ws41LQgv9HrE/66jyC5yuSjQ3L/KOpFtoBilsAK2iA2wuS5rTt1OCzIvtS2V7nVmedsUU+DGRcjBmOYA==} dev: true @@ -4931,8 +4896,8 @@ packages: - typescript dev: true - /eslint-plugin-playwright/0.11.2_eslint@8.31.0: - resolution: {integrity: sha512-uRLRLk7uTzc8NE6t4wBU8dijQwHvC66R/h7xwdM779jsJjMUtSmeaB8ayRkkpfwi+UU5BEfwvDANwmE+ccMVDw==} + /eslint-plugin-playwright/0.12.0_eslint@8.31.0: + resolution: {integrity: sha512-KXuzQjVzca5irMT/7rvzJKsVDGbQr43oQPc8i+SLEBqmfrTxlwMwRqfv9vtZqh4hpU0jmrnA/EOfwtls+5QC1w==} peerDependencies: eslint: '>=7' eslint-plugin-jest: '>=24' @@ -5167,33 +5132,6 @@ packages: engines: {node: '>= 0.6'} dev: false - /event-stream/3.3.4: - resolution: {integrity: sha512-QHpkERcGsR0T7Qm3HNJSyXKEEj8AHNxkY3PK8TS2KJvQ7NiSHe3DDpwVKKtoYprL/AreyzFBeIkBIWChAqn60g==} - dependencies: - duplexer: 0.1.2 - from: 0.1.7 - map-stream: 0.1.0 - pause-stream: 0.0.11 - split: 0.3.3 - stream-combiner: 0.0.4 - through: 2.3.8 - dev: true - - /execa/5.1.1: - resolution: {integrity: sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==} - engines: {node: '>=10'} - dependencies: - cross-spawn: 7.0.3 - get-stream: 6.0.1 - human-signals: 2.1.0 - is-stream: 2.0.1 - merge-stream: 2.0.0 - npm-run-path: 4.0.1 - onetime: 5.1.2 - signal-exit: 3.0.7 - strip-final-newline: 2.0.0 - dev: true - /exit-on-epipe/1.0.1: resolution: {integrity: sha512-h2z5mrROTxce56S+pnvAV890uu7ls7f1kEvVGJbw1OlFH3/mlJ5bkXu0KRyW94v37zzHPiUd55iLn3DA7TjWpw==} engines: {node: '>=0.8'} @@ -5420,6 +5358,7 @@ packages: peerDependenciesMeta: debug: optional: true + dev: false /for-each/0.3.3: resolution: {integrity: sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==} @@ -5471,10 +5410,6 @@ packages: engines: {node: '>= 0.6'} dev: false - /from/0.1.7: - resolution: {integrity: sha512-twe20eF1OxVxp/ML/kq2p1uc6KvFK/+vs8WjEbeKmV2He22MKm7YF2ANIt+EOqhJ5L3K/SuuPhk0hWQDjOM23g==} - dev: true - /fs-extra/10.1.0: resolution: {integrity: sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ==} engines: {node: '>=12'} @@ -5579,11 +5514,6 @@ packages: pump: 3.0.0 dev: true - /get-stream/6.0.1: - resolution: {integrity: sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==} - engines: {node: '>=10'} - dev: true - /get-symbol-description/1.0.0: resolution: {integrity: sha512-2EmdH1YvIQiZpltCNgkuiUnyukzxM/R6NDJX31Ke3BG1Nq5b0S2PhX59UKi9vZpPDQVdqn+1IcaAwnzTT5vCjw==} engines: {node: '>= 0.4'} @@ -5849,11 +5779,6 @@ packages: transitivePeerDependencies: - supports-color - /human-signals/2.1.0: - resolution: {integrity: sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==} - engines: {node: '>=10.17.0'} - dev: true - /iconv-corefoundation/1.1.7: resolution: {integrity: sha512-T10qvkw0zz4wnm560lOEg0PovVqUXuOFhhHAkixw8/sycy7TJt7v/RrkEKEQnAw2viPSJu6iAkErxnzR0g8PpQ==} engines: {node: ^8.11.2 || >=10} @@ -6107,11 +6032,6 @@ packages: call-bind: 1.0.2 dev: true - /is-stream/2.0.1: - resolution: {integrity: sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==} - engines: {node: '>=8'} - dev: true - /is-string/1.0.7: resolution: {integrity: sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==} engines: {node: '>= 0.4'} @@ -6250,16 +6170,6 @@ packages: picomatch: 2.3.1 dev: true - /joi/17.7.0: - resolution: {integrity: sha512-1/ugc8djfn93rTE3WRKdCzGGt/EtiYKxITMO4Wiv6q5JL1gl9ePt4kBsl1S499nbosspfctIQTpYIhSmHA3WAg==} - dependencies: - '@hapi/hoek': 9.3.0 - '@hapi/topo': 5.1.0 - '@sideway/address': 4.1.4 - '@sideway/formula': 3.0.1 - '@sideway/pinpoint': 2.0.0 - dev: true - /js-sdsl/4.2.0: resolution: {integrity: sha512-dyBIzQBDkCqCu+0upx25Y2jGdbTGxE9fshMsCdK0ViOongpV+n5tXRcZY9v7CaVQ79AGS9KA1KHtojxiM7aXSQ==} dev: true @@ -6392,11 +6302,6 @@ packages: resolution: {integrity: sha512-5FZRzrZzNTBruuurWpvZnvP9pum+fe0HcK8z/ooo+U+Hmp4vtbyp1/QDsqmufirXy4egGzbaH/y2uCZf+6W5Kg==} dev: true - /lazy-ass/1.6.0: - resolution: {integrity: sha512-cc8oEVoctTvsFZ/Oje/kGnHbpWHYBe8IAJe4C0QNc3t8uM/0Y8+erSz/7Y1ALuXTEZTMvxXwO6YbX1ey3ujiZw==} - engines: {node: '> 0.8'} - dev: true - /lazy-val/1.0.5: resolution: {integrity: sha512-0/BnGCCfyUMkBpeDgWihanIAF9JmZhHBgUhEqzvf+adhNGLoP6TaiI5oF8oyb3I45P+PcnrqihSf01M0l0G5+Q==} dev: true @@ -6530,10 +6435,6 @@ packages: engines: {node: '>=8'} dev: true - /map-stream/0.1.0: - resolution: {integrity: sha512-CkYQrPYZfWnu/DAmVCpTSX/xHpKZ80eKh2lAkyA6AJTef6bW+6JpbQZN5rofum7da+SyN1bi5ctTm+lTfcCW3g==} - dev: true - /matcher/3.0.0: resolution: {integrity: sha512-OkeDaAZ/bQCxeFAozM55PKcKU0yJMPGifLwV4Qgjitu+5MoAfSQN4lsLJeXZ1b8w0x+/Emda6MZgXS1jvsapng==} engines: {node: '>=10'} @@ -6573,10 +6474,6 @@ packages: resolution: {integrity: sha512-cCi6g3/Zr1iqQi6ySbseM1Xvooa98N0w31jzUYrXPX2xqObmFGHJ0tQ5u74H3mVh7wLouTseZyYIq39g8cNp1w==} dev: false - /merge-stream/2.0.0: - resolution: {integrity: sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==} - dev: true - /merge2/1.4.1: resolution: {integrity: sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==} engines: {node: '>= 8'} @@ -6617,11 +6514,6 @@ packages: hasBin: true dev: true - /mimic-fn/2.1.0: - resolution: {integrity: sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==} - engines: {node: '>=6'} - dev: true - /mimic-response/1.0.1: resolution: {integrity: sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ==} engines: {node: '>=4'} @@ -6855,13 +6747,6 @@ packages: dev: true optional: true - /npm-run-path/4.0.1: - resolution: {integrity: sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==} - engines: {node: '>=8'} - dependencies: - path-key: 3.1.1 - dev: true - /nwsapi/2.2.2: resolution: {integrity: sha512-90yv+6538zuvUMnN+zCr8LuV6bPFdq50304114vJYJ8RDyK8D5O9Phpbd6SZWgI7PwzmmfN1upeOJlvybDSgCw==} dev: true @@ -6948,13 +6833,6 @@ packages: wrappy: 1.0.2 dev: true - /onetime/5.1.2: - resolution: {integrity: sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==} - engines: {node: '>=6'} - dependencies: - mimic-fn: 2.1.0 - dev: true - /optionator/0.8.3: resolution: {integrity: sha512-+IW9pACdk3XWmmTXG8m3upGUJst5XRGzxMRjXzAuJ1XnIFNvfhjjIuYkDvysnPQ7qzqVzLt78BCruntqRhWQbA==} engines: {node: '>= 0.8.0'} @@ -7112,12 +6990,6 @@ packages: resolution: {integrity: sha512-Dp6zGqpTdETdR63lehJYPeIOqpiNBNtc7BpWSLrOje7UaIsE5aY92r/AunQA7rsXvet3lrJ3JnZX29UPTKXyKQ==} dev: true - /pause-stream/0.0.11: - resolution: {integrity: sha512-e3FBlXLmN/D1S+zHzanP4E/4Z60oFAa3O051qt1pxa7DEJWKAyil6upYVXCWadEnuoqa4Pkc9oUx9zsxYeRv8A==} - dependencies: - through: 2.3.8 - dev: true - /pause/0.0.1: resolution: {integrity: sha512-KG8UEiEVkR3wGEb4m5yZkVCzigAD+cVEJck2CzYZO37ZGJfctvVptVO192MwrtPhzONn6go8ylnOdMhKqi4nfg==} dev: false @@ -7149,8 +7021,8 @@ packages: pathe: 1.1.0 dev: true - /playwright-core/1.30.0: - resolution: {integrity: sha512-7AnRmTCf+GVYhHbLJsGUtskWTE33SwMZkybJ0v6rqR1boxq2x36U7p1vDRV7HO2IwTZgmycracLxPEJI49wu4g==} + /playwright-core/1.32.1: + resolution: {integrity: sha512-KZYUQC10mXD2Am1rGlidaalNGYk3LU1vZqqNk0gT4XPty1jOqgup8KDP8l2CUlqoNKhXM5IfGjWgW37xvGllBA==} engines: {node: '>=14'} hasBin: true dev: true @@ -7298,14 +7170,6 @@ packages: /proxy-from-env/1.1.0: resolution: {integrity: sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==} - /ps-tree/1.2.0: - resolution: {integrity: sha512-0VnamPPYHl4uaU/nSFeZZpR21QAWRz+sRv4iW9+v/GS/J5U5iZB5BNN6J0RMoOvdx2gWM2+ZFMIm58q24e4UYA==} - engines: {node: '>= 0.10'} - hasBin: true - dependencies: - event-stream: 3.3.4 - dev: true - /psl/1.9.0: resolution: {integrity: sha512-E/ZsdU4HLs/68gYzgGTkMicWTLPdAftJLfJFlLUAAKZGkStNU72sZjT66SnMDVOfOWY/YAoiD7Jxa9iHvngcag==} dev: true @@ -7718,12 +7582,6 @@ packages: queue-microtask: 1.2.3 dev: true - /rxjs/7.8.0: - resolution: {integrity: sha512-F2+gxDshqmIub1KdvZkaEfGDwLNpPvk9Fs6LD/MyQxNgMds/WH9OdDDXOmxUZpME+iSK3rQCctkL0DYyytUqMg==} - dependencies: - tslib: 2.4.1 - dev: true - /safe-buffer/5.1.2: resolution: {integrity: sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==} dev: false @@ -7992,12 +7850,6 @@ packages: resolution: {integrity: sha512-rr+VVSXtRhO4OHbXUiAF7xW3Bo9DuuF6C5jH+q/x15j2jniycgKbxU09Hr0WqlSLUs4i4ltHGXqTe7VHclYWyA==} dev: true - /split/0.3.3: - resolution: {integrity: sha512-wD2AeVmxXRBoX44wAycgjVpMhvbwdI2aZjCkvfNcH1YqHQvJVa1duWc73OyVGJUc05fhFaTZeQ/PYsrmyH0JVA==} - dependencies: - through: 2.3.8 - dev: true - /sprintf-js/1.1.2: resolution: {integrity: sha512-VE0SOVEHCk7Qc8ulkWw3ntAzXuqf7S2lvwQaDLRnUeIEaKNQJzV6BwmLKhOqT61aGhfUMrXeaBk+oDGCzvhcug==} dev: true @@ -8021,23 +7873,6 @@ packages: resolution: {integrity: sha512-1XMJE5fQo1jGH6Y/7ebnwPOBEkIEnT4QF32d5R1+VXdXveM0IBMJt8zfaxX1P3QhVwrYe+576+jkANtSS2mBbw==} dev: true - /start-server-and-test/1.15.2: - resolution: {integrity: sha512-t5xJX04Hg7hqxiKHMJBz/n4zIMsE6G7hpAcerFAH+4Vh9le/LeyFcJERJM7WLiPygWF9TOg33oroJF1XOzJtYQ==} - engines: {node: '>=6'} - hasBin: true - dependencies: - arg: 5.0.2 - bluebird: 3.7.2 - check-more-types: 2.24.0 - debug: 4.3.4 - execa: 5.1.1 - lazy-ass: 1.6.0 - ps-tree: 1.2.0 - wait-on: 6.0.1_debug@4.3.4 - transitivePeerDependencies: - - supports-color - dev: true - /stat-mode/1.0.0: resolution: {integrity: sha512-jH9EhtKIjuXZ2cWxmXS8ZP80XyC3iasQxMDV8jzhNJpfDb7VbQLVW4Wvsxz9QZvzV+G4YoSfBUVKDOyxLzi/sg==} engines: {node: '>= 6'} @@ -8064,12 +7899,6 @@ packages: internal-slot: 1.0.4 dev: true - /stream-combiner/0.0.4: - resolution: {integrity: sha512-rT00SPnTVyRsaSz5zgSPma/aHSOic5U1prhYdRy5HS2kTZviFpmDgzilbtsJsxiroqACmayynDN/9VzIbX5DOw==} - dependencies: - duplexer: 0.1.2 - dev: true - /streamsearch/0.1.2: resolution: {integrity: sha512-jos8u++JKm0ARcSUTAZXOVC0mSox7Bhn6sBgty73P1f3JGf7yG2clTbBNHUdde/kdvP2FESam+vM6l8jBrNxHA==} engines: {node: '>=0.8.0'} @@ -8146,11 +7975,6 @@ packages: ansi-regex: 6.0.1 dev: true - /strip-final-newline/2.0.0: - resolution: {integrity: sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==} - engines: {node: '>=6'} - dev: true - /strip-indent/3.0.0: resolution: {integrity: sha512-laJTa3Jb+VQpaC6DseHhF7dXVqHTfJPCRDaEbid/drOhgitgYku/letMUqOXFoWV0zIIUbjpdH2t+tYj4bQMRQ==} engines: {node: '>=8'} @@ -8380,10 +8204,6 @@ packages: resolution: {integrity: sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==} dev: true - /through/2.3.8: - resolution: {integrity: sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==} - dev: true - /tiny-invariant/1.3.1: resolution: {integrity: sha512-AD5ih2NlSssTCwsMznbvwMZpJ1cbhkGd2uueNxzv2jDlEeZdU04JQfRnggJQ8DrcVBGjAsCKwFBbDlVNtEMlzw==} dev: false @@ -8532,6 +8352,7 @@ packages: /tslib/2.4.1: resolution: {integrity: sha512-tGyy4dAjRIEwI7BzsB0lynWgOpfqjUdq91XXAlIWD2OwKBH7oCl/GZG/HT4BOHrTlPMOASlMQ7veyTqpmRcrNA==} + dev: false /tslib/2.5.0: resolution: {integrity: sha512-336iVw3rtn2BUK7ORdIAHTyxHGRIHVReokCR3XjbckJMK7ms8FysBfhLR8IXnAgy7T0PTPNBWKiH514FOW/WSg==} @@ -8553,65 +8374,65 @@ packages: dev: true optional: true - /turbo-darwin-64/1.6.3: - resolution: {integrity: sha512-QmDIX0Yh1wYQl0bUS0gGWwNxpJwrzZU2GIAYt3aOKoirWA2ecnyb3R6ludcS1znfNV2MfunP+l8E3ncxUHwtjA==} + /turbo-darwin-64/1.8.8: + resolution: {integrity: sha512-18cSeIm7aeEvIxGyq7PVoFyEnPpWDM/0CpZvXKHpQ6qMTkfNt517qVqUTAwsIYqNS8xazcKAqkNbvU1V49n65Q==} cpu: [x64] os: [darwin] requiresBuild: true dev: true optional: true - /turbo-darwin-arm64/1.6.3: - resolution: {integrity: sha512-75DXhFpwE7CinBbtxTxH08EcWrxYSPFow3NaeFwsG8aymkWXF+U2aukYHJA6I12n9/dGqf7yRXzkF0S/9UtdyQ==} + /turbo-darwin-arm64/1.8.8: + resolution: {integrity: sha512-ruGRI9nHxojIGLQv1TPgN7ud4HO4V8mFBwSgO6oDoZTNuk5ybWybItGR+yu6fni5vJoyMHXOYA2srnxvOc7hjQ==} cpu: [arm64] os: [darwin] requiresBuild: true dev: true optional: true - /turbo-linux-64/1.6.3: - resolution: {integrity: sha512-O9uc6J0yoRPWdPg9THRQi69K6E2iZ98cRHNvus05lZbcPzZTxJYkYGb5iagCmCW/pq6fL4T4oLWAd6evg2LGQA==} + /turbo-linux-64/1.8.8: + resolution: {integrity: sha512-N/GkHTHeIQogXB1/6ZWfxHx+ubYeb8Jlq3b/3jnU4zLucpZzTQ8XkXIAfJG/TL3Q7ON7xQ8yGOyGLhHL7MpFRg==} cpu: [x64] os: [linux] requiresBuild: true dev: true optional: true - /turbo-linux-arm64/1.6.3: - resolution: {integrity: sha512-dCy667qqEtZIhulsRTe8hhWQNCJO0i20uHXv7KjLHuFZGCeMbWxB8rsneRoY+blf8+QNqGuXQJxak7ayjHLxiA==} + /turbo-linux-arm64/1.8.8: + resolution: {integrity: sha512-hKqLbBHgUkYf2Ww8uBL9UYdBFQ5677a7QXdsFhONXoACbDUPvpK4BKlz3NN7G4NZ+g9dGju+OJJjQP0VXRHb5w==} cpu: [arm64] os: [linux] requiresBuild: true dev: true optional: true - /turbo-windows-64/1.6.3: - resolution: {integrity: sha512-lKRqwL3mrVF09b9KySSaOwetehmGknV9EcQTF7d2dxngGYYX1WXoQLjFP9YYH8ZV07oPm+RUOAKSCQuDuMNhiA==} + /turbo-windows-64/1.8.8: + resolution: {integrity: sha512-2ndjDJyzkNslXxLt+PQuU21AHJWc8f6MnLypXy3KsN4EyX/uKKGZS0QJWz27PeHg0JS75PVvhfFV+L9t9i+Yyg==} cpu: [x64] os: [win32] requiresBuild: true dev: true optional: true - /turbo-windows-arm64/1.6.3: - resolution: {integrity: sha512-BXY1sDPEA1DgPwuENvDCD8B7Hb0toscjus941WpL8CVd10hg9pk/MWn9CNgwDO5Q9ks0mw+liDv2EMnleEjeNA==} + /turbo-windows-arm64/1.8.8: + resolution: {integrity: sha512-xCA3oxgmW9OMqpI34AAmKfOVsfDljhD5YBwgs0ZDsn5h3kCHhC4x9W5dDk1oyQ4F5EXSH3xVym5/xl1J6WRpUg==} cpu: [arm64] os: [win32] requiresBuild: true dev: true optional: true - /turbo/1.6.3: - resolution: {integrity: sha512-FtfhJLmEEtHveGxW4Ye/QuY85AnZ2ZNVgkTBswoap7UMHB1+oI4diHPNyqrQLG4K1UFtCkjOlVoLsllUh/9QRw==} + /turbo/1.8.8: + resolution: {integrity: sha512-qYJ5NjoTX+591/x09KgsDOPVDUJfU9GoS+6jszQQlLp1AHrf1wRFA3Yps8U+/HTG03q0M4qouOfOLtRQP4QypA==} hasBin: true requiresBuild: true optionalDependencies: - turbo-darwin-64: 1.6.3 - turbo-darwin-arm64: 1.6.3 - turbo-linux-64: 1.6.3 - turbo-linux-arm64: 1.6.3 - turbo-windows-64: 1.6.3 - turbo-windows-arm64: 1.6.3 + turbo-darwin-64: 1.8.8 + turbo-darwin-arm64: 1.8.8 + turbo-linux-64: 1.8.8 + turbo-linux-arm64: 1.8.8 + turbo-windows-64: 1.8.8 + turbo-windows-arm64: 1.8.8 dev: true /type-check/0.3.2: @@ -9168,20 +8989,6 @@ packages: xml-name-validator: 4.0.0 dev: true - /wait-on/6.0.1_debug@4.3.4: - resolution: {integrity: sha512-zht+KASY3usTY5u2LgaNqn/Cd8MukxLGjdcZxT2ns5QzDmTFc4XoWBgC+C/na+sMRZTuVygQoMYwdcVjHnYIVw==} - engines: {node: '>=10.0.0'} - hasBin: true - dependencies: - axios: 0.25.0_debug@4.3.4 - joi: 17.7.0 - lodash: 4.17.21 - minimist: 1.2.7 - rxjs: 7.8.0 - transitivePeerDependencies: - - debug - dev: true - /web-vitals/3.1.1: resolution: {integrity: sha512-qvllU+ZeQChqzBhZ1oyXmWsjJ8a2jHYpH8AMaVuf29yscOPZfTQTjQFRX6+eADTdsDE8IanOZ0cetweHMs8/2A==} dev: false diff --git a/turbo.json b/turbo.json index 8a85a9cf9..cdd3a342f 100644 --- a/turbo.json +++ b/turbo.json @@ -2,7 +2,10 @@ "$schema": "https://turbo.build/schema.json", "pipeline":{ "dev": {}, + "dev:server": {}, + "dev:test": {}, "build": {}, + "build:local": {}, "build:docker": {}, "test": {}, "test:pipeline": {},