From 804363e86e7c9d5ea740178bc88cf4e447afcd2b Mon Sep 17 00:00:00 2001 From: Prakash Date: Tue, 26 May 2026 21:54:07 +0530 Subject: [PATCH] @uppy: upgrade vitest to v4 (#6309) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit This PR Bumps the `vitest` across the monorepo: AI Disclaimer : **AI Used** | Package | From | To | |---|---|---| | `vitest` | `^3.2.4` | `^4.1.6` | | `@vitest/browser` | `^3.2.4` | `^4.1.6` | | `@vitest/browser-playwright` | _(new)_ | `^4.1.6` | | `vitest-browser-react/-vue/-svelte` | `^1.0.0` | `^2.x` (required by vitest 4) | Covers **21 `package.json` files** for `vitest`/`@vitest/browser` + the **7 browser-mode packages** that need the new `@vitest/browser-playwright` provider. ### Code changes required by vitest 4 Per the [official migration guide](https://vitest.dev/guide/migration.html#vitest-4): - **Browser provider rework** — `provider: 'playwright'` (string) → `playwright()` factory. Migrated 7 `vitest.config.ts` files (`@uppy/{url,dashboard,golden-retriever,xhr-upload}` + `examples/{react,vue,sveltekit}`). - **Deprecated `@vitest/browser/context` imports** → `vitest/browser`. Migrated 8 test files. - **`vi.fn(arrow)` no longer constructible with `new`.** Vitest 4 made `vi.fn()` callable as a constructor but arrow-fn implementations throw. Switched `@uppy/transloadit`'s `EventSource` mock to a regular function: ```js global.EventSource = vi.fn(function MockEventSource() { return { /* ... */ } }) ``` - **`Mock` generic shape changed.** `ReturnType` now resolves to `Mock` (not directly callable). Updated `@uppy/core`'s two `acquirerPlugin*.ts` mock helpers to use an explicit `Mock<(...args: any[]) => any>`. - **`vitest-browser-*` v2 made `render()` async.** Added `await render(...)` in the 3 example test files. - **`@types/node` needed in TS program for 4 packages** whose test files import `node:assert`/`node:fs`/`node:path` (`@uppy/{core,compressor,aws-s3,store-default}`). Vitest 3 transitively pulled in `@types/node`; vitest 4 does not. Added the devDep + `types: ["preact", "node"]` to those four tsconfigs. - **`@uppy/utils` `AbortController.test.ts`** — vitest 4's jsdom env puts jsdom's `Event` on `globalThis`, while Node's `AbortController` fires Node-realm `Event`s, breaking cross-realm `instanceof`. Added `// @vitest-environment node` to that one file (DOM-agnostic test, no behavior change). ### Notes - This PR is built on top of `uppy-upgrade-deps-v2` (the no-code-changes dep bumps PR) and inherits those. If merging out of order, rebase onto `main` after `uppy-upgrade-deps-v2` lands. --------- Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com> --- examples/react/package.json | 7 +- examples/react/test/index.test.tsx | 12 +- examples/react/vitest.config.ts | 3 +- examples/sveltekit/package.json | 7 +- examples/sveltekit/test/index.test.ts | 16 +- examples/sveltekit/vitest.config.ts | 3 +- examples/vue/package.json | 7 +- examples/vue/test/index.test.ts | 12 +- examples/vue/vitest.config.ts | 3 +- packages/@uppy/audio/package.json | 2 +- packages/@uppy/aws-s3/package.json | 3 +- packages/@uppy/aws-s3/tsconfig.json | 3 +- packages/@uppy/companion-client/package.json | 2 +- packages/@uppy/compressor/package.json | 3 +- packages/@uppy/compressor/tsconfig.json | 3 +- packages/@uppy/core/package.json | 3 +- .../@uppy/core/src/mocks/acquirerPlugin1.ts | 4 +- .../@uppy/core/src/mocks/acquirerPlugin2.ts | 4 +- packages/@uppy/core/tsconfig.json | 3 +- packages/@uppy/dashboard/package.json | 5 +- .../src/GlobalSearch.browser.test.ts | 2 +- .../@uppy/dashboard/src/index.browser.test.ts | 2 +- packages/@uppy/dashboard/vitest.config.ts | 3 +- packages/@uppy/golden-retriever/package.json | 6 +- .../src/goldenRetriever.browser.test.ts | 2 +- .../@uppy/golden-retriever/vitest.config.ts | 3 +- packages/@uppy/provider-views/package.json | 2 +- packages/@uppy/react/package.json | 2 +- packages/@uppy/remote-sources/package.json | 2 +- packages/@uppy/store-default/package.json | 3 +- packages/@uppy/store-default/tsconfig.json | 3 +- .../@uppy/thumbnail-generator/package.json | 2 +- packages/@uppy/transloadit/package.json | 2 +- packages/@uppy/transloadit/src/index.test.js | 16 +- packages/@uppy/tus/package.json | 2 +- packages/@uppy/url/package.json | 5 +- packages/@uppy/url/src/Url.browser.test.ts | 2 +- packages/@uppy/url/vitest.config.ts | 3 +- packages/@uppy/utils/package.json | 2 +- .../@uppy/utils/src/AbortController.test.ts | 5 + packages/@uppy/webcam/package.json | 2 +- packages/@uppy/xhr-upload/package.json | 5 +- .../xhr-upload/src/xhrUpload.browser.test.ts | 2 +- packages/@uppy/xhr-upload/vitest.config.ts | 3 +- yarn.lock | 437 +++++------------- 45 files changed, 227 insertions(+), 396 deletions(-) diff --git a/examples/react/package.json b/examples/react/package.json index 3870d59da..58928dd05 100644 --- a/examples/react/package.json +++ b/examples/react/package.json @@ -24,12 +24,13 @@ "@types/react": "^19.0.10", "@types/react-dom": "^19.0.4", "@vitejs/plugin-react": "^4.6.0", - "@vitest/browser": "^3.2.4", + "@vitest/browser": "^4.1.6", + "@vitest/browser-playwright": "^4.1.6", "msw": "^2.10.4", "playwright": "1.57.0", "typescript": "^5.7.3", "vite": "^7.1.11", - "vitest": "^3.2.4", - "vitest-browser-react": "^1.0.0" + "vitest": "^4.1.6", + "vitest-browser-react": "^2.2.0" } } diff --git a/examples/react/test/index.test.tsx b/examples/react/test/index.test.tsx index 886023456..53fe0ca7e 100644 --- a/examples/react/test/index.test.tsx +++ b/examples/react/test/index.test.tsx @@ -1,6 +1,6 @@ -import { userEvent } from '@vitest/browser/context' import { setupWorker } from 'msw/browser' import { afterAll, beforeAll, describe, expect, test } from 'vitest' +import { userEvent } from 'vitest/browser' import { render } from 'vitest-browser-react' import { tusHandlers } from '../../shared/tusHandlers.js' import App from '../src/App' @@ -19,7 +19,7 @@ const createMockFile = (name: string, type: string, size: number = 1024) => { describe('App', () => { test('renders all main sections and upload button is initially disabled', async () => { - const screen = render() + const screen = await render() await expect.element(screen.getByText('With list')).toBeInTheDocument() await expect.element(screen.getByText('With grid')).toBeInTheDocument() @@ -33,7 +33,7 @@ describe('App', () => { }) test('can add and remove files and upload', async () => { - const screen = render() + const screen = await render() const fileInput = document.getElementById( 'uppy-dropzone-file-input-uppy', @@ -59,7 +59,7 @@ describe('App', () => { describe('ScreenCapture Component', () => { test('renders with title, control buttons, and close functionality works', async () => { - const screen = render() + const screen = await render() await screen.getByRole('button', { name: 'Screen Capture' }).click() @@ -90,7 +90,7 @@ describe('ScreenCapture Component', () => { describe('Webcam Component', () => { test('renders with title, control buttons, and close functionality works', async () => { - const screen = render() + const screen = await render() await screen.getByRole('button', { name: 'Webcam' }).click() @@ -121,7 +121,7 @@ describe('Webcam Component', () => { describe('RemoteSource Component', () => { test('renders login button and login interaction works', async () => { - const screen = render() + const screen = await render() await screen.getByRole('button', { name: 'Dropbox' }).click() diff --git a/examples/react/vitest.config.ts b/examples/react/vitest.config.ts index b054ef272..8f6e0a434 100644 --- a/examples/react/vitest.config.ts +++ b/examples/react/vitest.config.ts @@ -1,5 +1,6 @@ import tailwindcss from '@tailwindcss/vite' import react from '@vitejs/plugin-react' +import { playwright } from '@vitest/browser-playwright' import { defineConfig } from 'vitest/config' export default defineConfig({ @@ -7,7 +8,7 @@ export default defineConfig({ test: { browser: { enabled: true, - provider: 'playwright', + provider: playwright(), instances: [{ browser: 'chromium' }], }, }, diff --git a/examples/sveltekit/package.json b/examples/sveltekit/package.json index 07f02607d..b3fc6e5aa 100644 --- a/examples/sveltekit/package.json +++ b/examples/sveltekit/package.json @@ -26,7 +26,8 @@ "@sveltejs/kit": "^2.49.5", "@sveltejs/vite-plugin-svelte": "^5.0.0", "@tailwindcss/vite": "^4.0.0", - "@vitest/browser": "^3.2.4", + "@vitest/browser": "^4.1.6", + "@vitest/browser-playwright": "^4.1.6", "msw": "^2.10.4", "playwright": "1.57.0", "svelte": "^5.0.0", @@ -34,7 +35,7 @@ "tailwindcss": "^4.0.0", "typescript": "^5.0.0", "vite": "^6.2.5", - "vitest": "^3.2.4", - "vitest-browser-svelte": "^1.0.0" + "vitest": "^4.1.6", + "vitest-browser-svelte": "^2.1.1" } } diff --git a/examples/sveltekit/test/index.test.ts b/examples/sveltekit/test/index.test.ts index a14fb3537..b2c019428 100644 --- a/examples/sveltekit/test/index.test.ts +++ b/examples/sveltekit/test/index.test.ts @@ -1,6 +1,6 @@ -import { userEvent } from '@vitest/browser/context' import { setupWorker } from 'msw/browser' import { afterAll, beforeAll, describe, expect, test } from 'vitest' +import { userEvent } from 'vitest/browser' import { render } from 'vitest-browser-svelte' import { tusHandlers } from '../../shared/tusHandlers.js' import PropsReactivity from '../src/components/test/props-reactivity.svelte' @@ -20,7 +20,7 @@ const createMockFile = (name: string, type: string, size: number = 1024) => { describe('App', () => { test('renders all main sections and upload button is initially disabled', async () => { - const screen = render(App) + const screen = await render(App) await expect.element(screen.getByText('With list')).toBeInTheDocument() await expect.element(screen.getByText('With grid')).toBeInTheDocument() @@ -34,7 +34,7 @@ describe('App', () => { }) test('can add and remove files and upload', async () => { - const screen = render(App) + const screen = await render(App) const fileInput = document.getElementById( 'uppy-dropzone-file-input-uppy', @@ -60,7 +60,7 @@ describe('App', () => { describe('ScreenCapture Component', () => { test('renders with title, control buttons, and close functionality works', async () => { - const screen = render(App) + const screen = await render(App) await screen .getByRole('button', { name: 'Screen Capture', exact: true }) @@ -93,7 +93,7 @@ describe('ScreenCapture Component', () => { describe('Webcam Component', () => { test('renders with title, control buttons, and close functionality works', async () => { - const screen = render(App) + const screen = await render(App) await screen.getByRole('button', { name: 'Webcam', exact: true }).click() @@ -124,7 +124,7 @@ describe('Webcam Component', () => { describe('RemoteSource Component', () => { test('renders login button and login interaction works', async () => { - const screen = render(App) + const screen = await render(App) await screen.getByRole('button', { name: 'Dropbox', exact: true }).click() @@ -136,7 +136,7 @@ describe('RemoteSource Component', () => { }) test('Dashboard reacts to prop changes', async () => { - const screen = render(PropsReactivity) + const screen = await render(PropsReactivity) const toggleButton = screen.getByText('Toggle dashboard') const dashboard = screen.container.querySelector('.uppy-Dashboard') @@ -147,7 +147,7 @@ test('Dashboard reacts to prop changes', async () => { }) test('StatusBar reacts to prop changes', async () => { - const screen = render(PropsReactivity) + const screen = await render(PropsReactivity) const toggleButton = screen.getByText('Toggle statusbar') expect( diff --git a/examples/sveltekit/vitest.config.ts b/examples/sveltekit/vitest.config.ts index 924d3f7db..5a22254af 100644 --- a/examples/sveltekit/vitest.config.ts +++ b/examples/sveltekit/vitest.config.ts @@ -1,5 +1,6 @@ import { sveltekit } from '@sveltejs/kit/vite' import tailwindcss from '@tailwindcss/vite' +import { playwright } from '@vitest/browser-playwright' import { defineConfig } from 'vite' export default defineConfig({ @@ -7,7 +8,7 @@ export default defineConfig({ test: { browser: { enabled: true, - provider: 'playwright', + provider: playwright(), instances: [{ browser: 'chromium' }], }, }, diff --git a/examples/vue/package.json b/examples/vue/package.json index 03ab1288a..417f57875 100644 --- a/examples/vue/package.json +++ b/examples/vue/package.json @@ -22,12 +22,13 @@ "devDependencies": { "@tailwindcss/vite": "^4.1.11", "@vitejs/plugin-vue": "^6.0.1", - "@vitest/browser": "^3.2.4", + "@vitest/browser": "^4.1.6", + "@vitest/browser-playwright": "^4.1.6", "msw": "^2.10.4", "playwright": "1.57.0", "tailwindcss": "^4.0.0", "vite": "^7.1.11", - "vitest": "^3.2.4", - "vitest-browser-vue": "^1.0.0" + "vitest": "^4.1.6", + "vitest-browser-vue": "^2.1.0" } } diff --git a/examples/vue/test/index.test.ts b/examples/vue/test/index.test.ts index 1aa54275d..183749623 100644 --- a/examples/vue/test/index.test.ts +++ b/examples/vue/test/index.test.ts @@ -1,6 +1,6 @@ -import { userEvent } from '@vitest/browser/context' import { setupWorker } from 'msw/browser' import { afterAll, beforeAll, describe, expect, test } from 'vitest' +import { userEvent } from 'vitest/browser' import { render } from 'vitest-browser-vue' import { tusHandlers } from '../../shared/tusHandlers.js' import App from '../src/App.vue' @@ -19,7 +19,7 @@ const createMockFile = (name: string, type: string, size: number = 1024) => { describe('App', () => { test('renders all main sections and upload button is initially disabled', async () => { - const screen = render(App) + const screen = await render(App) await expect.element(screen.getByText('With list')).toBeInTheDocument() await expect.element(screen.getByText('With grid')).toBeInTheDocument() @@ -33,7 +33,7 @@ describe('App', () => { }) test('can add and remove files and upload', async () => { - const screen = render(App) + const screen = await render(App) const fileInput = document.getElementById( 'uppy-dropzone-file-input-uppy', @@ -59,7 +59,7 @@ describe('App', () => { describe('ScreenCapture Component', () => { test('renders with title, control buttons, and close functionality works', async () => { - const screen = render(App) + const screen = await render(App) await screen .getByRole('button', { name: 'Screen Capture', exact: true }) @@ -92,7 +92,7 @@ describe('ScreenCapture Component', () => { describe('Webcam Component', () => { test('renders with title, control buttons, and close functionality works', async () => { - const screen = render(App) + const screen = await render(App) await screen.getByRole('button', { name: 'Webcam', exact: true }).click() @@ -123,7 +123,7 @@ describe('Webcam Component', () => { describe('RemoteSource Component', () => { test('renders login button and login interaction works', async () => { - const screen = render(App) + const screen = await render(App) await screen.getByRole('button', { name: 'Dropbox', exact: true }).click() diff --git a/examples/vue/vitest.config.ts b/examples/vue/vitest.config.ts index 77d0e1624..308255596 100644 --- a/examples/vue/vitest.config.ts +++ b/examples/vue/vitest.config.ts @@ -1,5 +1,6 @@ import tailwindcss from '@tailwindcss/vite' import vue from '@vitejs/plugin-vue' +import { playwright } from '@vitest/browser-playwright' import { defineConfig } from 'vite' export default defineConfig({ @@ -7,7 +8,7 @@ export default defineConfig({ test: { browser: { enabled: true, - provider: 'playwright', + provider: playwright(), instances: [{ browser: 'chromium' }], }, }, diff --git a/packages/@uppy/audio/package.json b/packages/@uppy/audio/package.json index d7a7285e7..e6299125c 100644 --- a/packages/@uppy/audio/package.json +++ b/packages/@uppy/audio/package.json @@ -50,7 +50,7 @@ "postcss-cli": "^11.0.1", "sass": "^1.89.2", "typescript": "^5.8.3", - "vitest": "^3.2.4" + "vitest": "^4.1.6" }, "peerDependencies": { "@uppy/core": "workspace:^" diff --git a/packages/@uppy/aws-s3/package.json b/packages/@uppy/aws-s3/package.json index 840997fad..2be35d170 100644 --- a/packages/@uppy/aws-s3/package.json +++ b/packages/@uppy/aws-s3/package.json @@ -44,11 +44,12 @@ "devDependencies": { "@aws-sdk/client-s3": "^3.362.0", "@aws-sdk/s3-request-presigner": "^3.362.0", + "@types/node": "^20.19.0", "@uppy/core": "workspace:^", "jsdom": "^26.1.0", "nock": "^13.1.0", "typescript": "^5.8.3", - "vitest": "^3.2.4", + "vitest": "^4.1.6", "whatwg-fetch": "3.6.2" }, "peerDependencies": { diff --git a/packages/@uppy/aws-s3/tsconfig.json b/packages/@uppy/aws-s3/tsconfig.json index 4c4f37f88..324ec94b3 100644 --- a/packages/@uppy/aws-s3/tsconfig.json +++ b/packages/@uppy/aws-s3/tsconfig.json @@ -2,7 +2,8 @@ "extends": "../../../tsconfig.shared", "compilerOptions": { "emitDeclarationOnly": false, - "noEmit": true + "noEmit": true, + "types": ["preact", "node"] }, "include": ["./package.json", "./src/**/*.*"], "references": [ diff --git a/packages/@uppy/companion-client/package.json b/packages/@uppy/companion-client/package.json index 4da8b79e7..b6741da4c 100644 --- a/packages/@uppy/companion-client/package.json +++ b/packages/@uppy/companion-client/package.json @@ -43,7 +43,7 @@ "devDependencies": { "jsdom": "^26.1.0", "typescript": "^5.8.3", - "vitest": "^3.2.4" + "vitest": "^4.1.6" }, "peerDependencies": { "@uppy/core": "workspace:^" diff --git a/packages/@uppy/compressor/package.json b/packages/@uppy/compressor/package.json index 4c4768f60..cb116dfda 100644 --- a/packages/@uppy/compressor/package.json +++ b/packages/@uppy/compressor/package.json @@ -44,9 +44,10 @@ "access": "public" }, "devDependencies": { + "@types/node": "^20.19.0", "jsdom": "^26.1.0", "typescript": "^5.8.3", - "vitest": "^3.2.4" + "vitest": "^4.1.6" }, "scripts": { "build": "tsc --build tsconfig.build.json", diff --git a/packages/@uppy/compressor/tsconfig.json b/packages/@uppy/compressor/tsconfig.json index 991d79cbd..c761a6e68 100644 --- a/packages/@uppy/compressor/tsconfig.json +++ b/packages/@uppy/compressor/tsconfig.json @@ -2,7 +2,8 @@ "extends": "../../../tsconfig.shared", "compilerOptions": { "emitDeclarationOnly": false, - "noEmit": true + "noEmit": true, + "types": ["preact", "node"] }, "include": ["./package.json", "./src/**/*.*"], "references": [ diff --git a/packages/@uppy/core/package.json b/packages/@uppy/core/package.json index 6c9b2089b..e97a2c1d0 100644 --- a/packages/@uppy/core/package.json +++ b/packages/@uppy/core/package.json @@ -52,6 +52,7 @@ }, "devDependencies": { "@types/deep-freeze": "^0", + "@types/node": "^20.19.0", "cssnano": "^7.0.7", "deep-freeze": "^0.0.1", "jsdom": "^26.1.0", @@ -59,6 +60,6 @@ "postcss-cli": "^11.0.1", "sass": "^1.89.2", "typescript": "^5.8.3", - "vitest": "^3.2.4" + "vitest": "^4.1.6" } } diff --git a/packages/@uppy/core/src/mocks/acquirerPlugin1.ts b/packages/@uppy/core/src/mocks/acquirerPlugin1.ts index 3495fc72a..baf98f18a 100644 --- a/packages/@uppy/core/src/mocks/acquirerPlugin1.ts +++ b/packages/@uppy/core/src/mocks/acquirerPlugin1.ts @@ -1,8 +1,8 @@ -import { vi } from 'vitest' +import { type Mock, vi } from 'vitest' import UIPlugin from '../UIPlugin.js' import type Uppy from '../Uppy.js' -type mock = ReturnType +type mock = Mock<(...args: any[]) => any> export default class TestSelector1 extends UIPlugin { name: string diff --git a/packages/@uppy/core/src/mocks/acquirerPlugin2.ts b/packages/@uppy/core/src/mocks/acquirerPlugin2.ts index bced2d75a..917de0b1f 100644 --- a/packages/@uppy/core/src/mocks/acquirerPlugin2.ts +++ b/packages/@uppy/core/src/mocks/acquirerPlugin2.ts @@ -1,8 +1,8 @@ -import { vi } from 'vitest' +import { type Mock, vi } from 'vitest' import UIPlugin from '../UIPlugin.js' import type Uppy from '../Uppy.js' -type mock = ReturnType +type mock = Mock<(...args: any[]) => any> export default class TestSelector2 extends UIPlugin { name: string diff --git a/packages/@uppy/core/tsconfig.json b/packages/@uppy/core/tsconfig.json index 2362543d8..66c8a6882 100644 --- a/packages/@uppy/core/tsconfig.json +++ b/packages/@uppy/core/tsconfig.json @@ -2,7 +2,8 @@ "extends": "../../../tsconfig.shared", "compilerOptions": { "emitDeclarationOnly": false, - "noEmit": true + "noEmit": true, + "types": ["preact", "node"] }, "include": ["./package.json", "./src/**/*.*"], "references": [ diff --git a/packages/@uppy/dashboard/package.json b/packages/@uppy/dashboard/package.json index 2969589b9..338dbe132 100644 --- a/packages/@uppy/dashboard/package.json +++ b/packages/@uppy/dashboard/package.json @@ -60,7 +60,8 @@ "@uppy/google-drive": "workspace:^", "@uppy/url": "workspace:^", "@uppy/webcam": "workspace:^", - "@vitest/browser": "^3.2.4", + "@vitest/browser": "^4.1.6", + "@vitest/browser-playwright": "^4.1.6", "cssnano": "^7.0.7", "jsdom": "^26.1.0", "playwright": "1.57.0", @@ -69,7 +70,7 @@ "resize-observer-polyfill": "^1.5.0", "sass": "^1.89.2", "typescript": "^5.8.3", - "vitest": "^3.2.4" + "vitest": "^4.1.6" }, "peerDependencies": { "@uppy/core": "workspace:^" diff --git a/packages/@uppy/dashboard/src/GlobalSearch.browser.test.ts b/packages/@uppy/dashboard/src/GlobalSearch.browser.test.ts index 16eaa00df..5222ee753 100644 --- a/packages/@uppy/dashboard/src/GlobalSearch.browser.test.ts +++ b/packages/@uppy/dashboard/src/GlobalSearch.browser.test.ts @@ -3,8 +3,8 @@ import Dashboard from '@uppy/dashboard' import Dropbox from '@uppy/dropbox' import GoogleDrive from '@uppy/google-drive' import { ProviderViews } from '@uppy/provider-views' -import { page, userEvent } from '@vitest/browser/context' import { afterAll, afterEach, beforeAll, describe, expect, test } from 'vitest' +import { page, userEvent } from 'vitest/browser' import { worker } from './setup.js' import '@uppy/core/css/style.css' diff --git a/packages/@uppy/dashboard/src/index.browser.test.ts b/packages/@uppy/dashboard/src/index.browser.test.ts index 4d5f03be6..584672fbc 100644 --- a/packages/@uppy/dashboard/src/index.browser.test.ts +++ b/packages/@uppy/dashboard/src/index.browser.test.ts @@ -1,6 +1,6 @@ import Uppy from '@uppy/core' -import { page, userEvent } from '@vitest/browser/context' import { expect, test } from 'vitest' +import { page, userEvent } from 'vitest/browser' import Dashboard from './Dashboard.js' import '@uppy/core/css/style.css' import '@uppy/dashboard/css/style.css' diff --git a/packages/@uppy/dashboard/vitest.config.ts b/packages/@uppy/dashboard/vitest.config.ts index b316316fc..6e0dfd6b1 100644 --- a/packages/@uppy/dashboard/vitest.config.ts +++ b/packages/@uppy/dashboard/vitest.config.ts @@ -1,3 +1,4 @@ +import { playwright } from '@vitest/browser-playwright' import { defineConfig } from 'vitest/config' export default defineConfig({ @@ -19,7 +20,7 @@ export default defineConfig({ include: ['src/**/*.browser.test.{ts,tsx}'], browser: { enabled: true, - provider: 'playwright', + provider: playwright(), instances: [{ browser: 'chromium' }], }, }, diff --git a/packages/@uppy/golden-retriever/package.json b/packages/@uppy/golden-retriever/package.json index f1c17b8c7..f6ef682a5 100644 --- a/packages/@uppy/golden-retriever/package.json +++ b/packages/@uppy/golden-retriever/package.json @@ -52,8 +52,10 @@ "@uppy/core": "workspace:^", "@uppy/dashboard": "workspace:^", "@uppy/xhr-upload": "workspace:^", - "@vitest/browser": "^3.2.4", + "@vitest/browser": "^4.1.6", + "@vitest/browser-playwright": "^4.1.6", + "playwright": "1.57.0", "typescript": "^5.8.3", - "vitest": "^3.2.4" + "vitest": "^4.1.6" } } diff --git a/packages/@uppy/golden-retriever/src/goldenRetriever.browser.test.ts b/packages/@uppy/golden-retriever/src/goldenRetriever.browser.test.ts index 3e351a8bf..a40216b81 100644 --- a/packages/@uppy/golden-retriever/src/goldenRetriever.browser.test.ts +++ b/packages/@uppy/golden-retriever/src/goldenRetriever.browser.test.ts @@ -1,8 +1,8 @@ import Uppy, { type UppyEventMap, type UppyOptions } from '@uppy/core' import Dashboard from '@uppy/dashboard' import XHRUpload from '@uppy/xhr-upload' -import { page, userEvent } from '@vitest/browser/context' import { beforeEach, describe, expect } from 'vitest' +import { page, userEvent } from 'vitest/browser' import '@uppy/core/css/style.css' import '@uppy/dashboard/css/style.css' import { HttpResponse, http } from 'msw' diff --git a/packages/@uppy/golden-retriever/vitest.config.ts b/packages/@uppy/golden-retriever/vitest.config.ts index b316316fc..6e0dfd6b1 100644 --- a/packages/@uppy/golden-retriever/vitest.config.ts +++ b/packages/@uppy/golden-retriever/vitest.config.ts @@ -1,3 +1,4 @@ +import { playwright } from '@vitest/browser-playwright' import { defineConfig } from 'vitest/config' export default defineConfig({ @@ -19,7 +20,7 @@ export default defineConfig({ include: ['src/**/*.browser.test.{ts,tsx}'], browser: { enabled: true, - provider: 'playwright', + provider: playwright(), instances: [{ browser: 'chromium' }], }, }, diff --git a/packages/@uppy/provider-views/package.json b/packages/@uppy/provider-views/package.json index 074b6048c..2a081c544 100644 --- a/packages/@uppy/provider-views/package.json +++ b/packages/@uppy/provider-views/package.json @@ -57,7 +57,7 @@ "postcss-cli": "^11.0.1", "sass": "^1.89.2", "typescript": "^5.8.3", - "vitest": "^3.2.4" + "vitest": "^4.1.6" }, "peerDependencies": { "@uppy/core": "workspace:^" diff --git a/packages/@uppy/react/package.json b/packages/@uppy/react/package.json index fad40892d..09d5951e9 100644 --- a/packages/@uppy/react/package.json +++ b/packages/@uppy/react/package.json @@ -50,7 +50,7 @@ "react": "^19.2.6", "react-dom": "^19.2.6", "typescript": "^5.8.3", - "vitest": "^3.2.4" + "vitest": "^4.1.6" }, "exports": { ".": "./lib/index.js", diff --git a/packages/@uppy/remote-sources/package.json b/packages/@uppy/remote-sources/package.json index 0648b4e77..425e07639 100644 --- a/packages/@uppy/remote-sources/package.json +++ b/packages/@uppy/remote-sources/package.json @@ -61,6 +61,6 @@ "jsdom": "^26.1.0", "resize-observer-polyfill": "^1.5.1", "typescript": "^5.8.3", - "vitest": "^3.2.4" + "vitest": "^4.1.6" } } diff --git a/packages/@uppy/store-default/package.json b/packages/@uppy/store-default/package.json index 038e518cc..be4e10858 100644 --- a/packages/@uppy/store-default/package.json +++ b/packages/@uppy/store-default/package.json @@ -21,9 +21,10 @@ "url": "https://github.com/transloadit/uppy/issues" }, "devDependencies": { + "@types/node": "^20.19.0", "jsdom": "^26.1.0", "typescript": "^5.8.3", - "vitest": "^3.2.4" + "vitest": "^4.1.6" }, "repository": { "type": "git", diff --git a/packages/@uppy/store-default/tsconfig.json b/packages/@uppy/store-default/tsconfig.json index 687288fd8..4fc6da5a4 100644 --- a/packages/@uppy/store-default/tsconfig.json +++ b/packages/@uppy/store-default/tsconfig.json @@ -2,7 +2,8 @@ "extends": "../../../tsconfig.shared", "compilerOptions": { "emitDeclarationOnly": false, - "noEmit": true + "noEmit": true, + "types": ["preact", "node"] }, "include": ["./package.json", "./src/**/*.*"], "references": [] diff --git a/packages/@uppy/thumbnail-generator/package.json b/packages/@uppy/thumbnail-generator/package.json index 894de2e5f..60eca96de 100644 --- a/packages/@uppy/thumbnail-generator/package.json +++ b/packages/@uppy/thumbnail-generator/package.json @@ -44,7 +44,7 @@ "jsdom": "^26.1.0", "namespace-emitter": "2.0.1", "typescript": "^5.8.3", - "vitest": "^3.2.4" + "vitest": "^4.1.6" }, "peerDependencies": { "@uppy/core": "workspace:^" diff --git a/packages/@uppy/transloadit/package.json b/packages/@uppy/transloadit/package.json index 73bcadfe2..c2336b4f9 100644 --- a/packages/@uppy/transloadit/package.json +++ b/packages/@uppy/transloadit/package.json @@ -55,7 +55,7 @@ "jsdom": "^26.1.0", "msw": "^2.10.4", "typescript": "^5.8.3", - "vitest": "^3.2.4", + "vitest": "^4.1.6", "whatwg-fetch": "^3.6.2" } } diff --git a/packages/@uppy/transloadit/src/index.test.js b/packages/@uppy/transloadit/src/index.test.js index 0bd6f1854..999e64c3c 100644 --- a/packages/@uppy/transloadit/src/index.test.js +++ b/packages/@uppy/transloadit/src/index.test.js @@ -5,12 +5,16 @@ import { describe, expect, it, vi } from 'vitest' import Transloadit from './index.ts' import 'whatwg-fetch' -// Mock EventSource for testing -global.EventSource = vi.fn(() => ({ - addEventListener: vi.fn(), - removeEventListener: vi.fn(), - close: vi.fn(), -})) +// Mock EventSource for testing. Vitest 4 made `vi.fn()` callable as a constructor, +// but arrow-function implementations throw "is not a constructor" when invoked +// with `new`. Use a regular function so `new EventSource(...)` works. +global.EventSource = vi.fn(function MockEventSource() { + return { + addEventListener: vi.fn(), + removeEventListener: vi.fn(), + close: vi.fn(), + } +}) describe('Transloadit', () => { it('Does not leave lingering progress if getAssemblyOptions fails', () => { diff --git a/packages/@uppy/tus/package.json b/packages/@uppy/tus/package.json index 1595c2ee2..4227b33e4 100644 --- a/packages/@uppy/tus/package.json +++ b/packages/@uppy/tus/package.json @@ -45,7 +45,7 @@ "@uppy/core": "workspace:^", "jsdom": "^26.1.0", "typescript": "^5.8.3", - "vitest": "^3.2.4" + "vitest": "^4.1.6" }, "peerDependencies": { "@uppy/core": "workspace:^" diff --git a/packages/@uppy/url/package.json b/packages/@uppy/url/package.json index 8d9375477..be8e6209d 100644 --- a/packages/@uppy/url/package.json +++ b/packages/@uppy/url/package.json @@ -55,13 +55,14 @@ }, "devDependencies": { "@uppy/core": "workspace:^", - "@vitest/browser": "^3.2.4", + "@vitest/browser": "^4.1.6", + "@vitest/browser-playwright": "^4.1.6", "cssnano": "^7.0.7", "playwright": "1.57.0", "postcss": "^8.5.6", "postcss-cli": "^11.0.1", "sass": "^1.89.2", "typescript": "^5.8.3", - "vitest": "^3.2.4" + "vitest": "^4.1.6" } } diff --git a/packages/@uppy/url/src/Url.browser.test.ts b/packages/@uppy/url/src/Url.browser.test.ts index 1485f6d6d..c0fbbf9e2 100644 --- a/packages/@uppy/url/src/Url.browser.test.ts +++ b/packages/@uppy/url/src/Url.browser.test.ts @@ -1,6 +1,6 @@ import Uppy from '@uppy/core' -import { page } from '@vitest/browser/context' import { expect, test } from 'vitest' +import { page } from 'vitest/browser' import Url from './Url.js' // Normally you would use one of vitest's framework renderers, such as vitest-browser-react, diff --git a/packages/@uppy/url/vitest.config.ts b/packages/@uppy/url/vitest.config.ts index 08eeefd25..657a2de41 100644 --- a/packages/@uppy/url/vitest.config.ts +++ b/packages/@uppy/url/vitest.config.ts @@ -1,3 +1,4 @@ +import { playwright } from '@vitest/browser-playwright' import { defineConfig } from 'vitest/config' export default defineConfig({ @@ -10,7 +11,7 @@ export default defineConfig({ globalSetup: './vitest.setup.ts', browser: { enabled: true, - provider: 'playwright', + provider: playwright(), instances: [{ browser: 'chromium' }], }, }, diff --git a/packages/@uppy/utils/package.json b/packages/@uppy/utils/package.json index e37471d8c..5ca0a0238 100644 --- a/packages/@uppy/utils/package.json +++ b/packages/@uppy/utils/package.json @@ -40,6 +40,6 @@ "@types/lodash": "^4.14.199", "jsdom": "^26.1.0", "typescript": "^5.8.3", - "vitest": "^3.2.4" + "vitest": "^4.1.6" } } diff --git a/packages/@uppy/utils/src/AbortController.test.ts b/packages/@uppy/utils/src/AbortController.test.ts index 9ae956e58..d1bc6d64c 100644 --- a/packages/@uppy/utils/src/AbortController.test.ts +++ b/packages/@uppy/utils/src/AbortController.test.ts @@ -1,3 +1,8 @@ +// @vitest-environment node +// `AbortController`/`AbortSignal` resolve to Node's globals; their abort event +// is a Node `Event`. Under the jsdom environment vitest 4 swaps in jsdom's +// `Event`, so cross-realm `instanceof Event` fails. This shim is DOM-agnostic, +// so the node environment keeps both in the same realm. import { describe, expect, it, vi } from 'vitest' import { AbortController, AbortSignal } from './AbortController.js' diff --git a/packages/@uppy/webcam/package.json b/packages/@uppy/webcam/package.json index a80ecc19a..c9c27fb71 100644 --- a/packages/@uppy/webcam/package.json +++ b/packages/@uppy/webcam/package.json @@ -58,7 +58,7 @@ "postcss-cli": "^11.0.1", "sass": "^1.89.2", "typescript": "^5.8.3", - "vitest": "^3.2.4" + "vitest": "^4.1.6" }, "peerDependencies": { "@uppy/core": "workspace:^" diff --git a/packages/@uppy/xhr-upload/package.json b/packages/@uppy/xhr-upload/package.json index 8b06983ac..69652ee1d 100644 --- a/packages/@uppy/xhr-upload/package.json +++ b/packages/@uppy/xhr-upload/package.json @@ -46,13 +46,14 @@ "devDependencies": { "@uppy/core": "workspace:^", "@uppy/dashboard": "workspace:^", - "@vitest/browser": "^3.2.4", + "@vitest/browser": "^4.1.6", + "@vitest/browser-playwright": "^4.1.6", "jsdom": "^26.1.0", "msw": "^2.10.4", "nock": "^13.1.0", "playwright": "1.57.0", "typescript": "^5.8.3", - "vitest": "^3.2.4" + "vitest": "^4.1.6" }, "peerDependencies": { "@uppy/core": "workspace:^" diff --git a/packages/@uppy/xhr-upload/src/xhrUpload.browser.test.ts b/packages/@uppy/xhr-upload/src/xhrUpload.browser.test.ts index 722a0e426..f89bee6a4 100644 --- a/packages/@uppy/xhr-upload/src/xhrUpload.browser.test.ts +++ b/packages/@uppy/xhr-upload/src/xhrUpload.browser.test.ts @@ -1,8 +1,8 @@ import Uppy, { type UppyEventMap } from '@uppy/core' import Dashboard from '@uppy/dashboard' -import { page, userEvent } from '@vitest/browser/context' import { HttpResponse, http } from 'msw' import { afterEach, beforeEach, describe, expect } from 'vitest' +import { page, userEvent } from 'vitest/browser' import '@uppy/core/css/style.css' import '@uppy/dashboard/css/style.css' import XHRUpload from './index.js' diff --git a/packages/@uppy/xhr-upload/vitest.config.ts b/packages/@uppy/xhr-upload/vitest.config.ts index b316316fc..6e0dfd6b1 100644 --- a/packages/@uppy/xhr-upload/vitest.config.ts +++ b/packages/@uppy/xhr-upload/vitest.config.ts @@ -1,3 +1,4 @@ +import { playwright } from '@vitest/browser-playwright' import { defineConfig } from 'vitest/config' export default defineConfig({ @@ -19,7 +20,7 @@ export default defineConfig({ include: ['src/**/*.browser.test.{ts,tsx}'], browser: { enabled: true, - provider: 'playwright', + provider: playwright(), instances: [{ browser: 'chromium' }], }, }, diff --git a/yarn.lock b/yarn.lock index c502a17e5..e509a536b 100644 --- a/yarn.lock +++ b/yarn.lock @@ -3061,6 +3061,13 @@ __metadata: languageName: node linkType: hard +"@blazediff/core@npm:1.9.1": + version: 1.9.1 + resolution: "@blazediff/core@npm:1.9.1" + checksum: 10/6bb615f104da313934bcabc09627f3c803461bf85182453d5c13a6a354be4d32b35504b84f1043c21e95d0f6c0acb45083caeb72e72c1d6a76ca5e1f61f25510 + languageName: node + linkType: hard + "@bundled-es-modules/cookie@npm:^2.0.1": version: 2.0.1 resolution: "@bundled-es-modules/cookie@npm:2.0.1" @@ -7651,12 +7658,12 @@ __metadata: languageName: node linkType: hard -"@testing-library/user-event@npm:^14.6.1": - version: 14.6.1 - resolution: "@testing-library/user-event@npm:14.6.1" +"@testing-library/svelte-core@npm:^1.0.0": + version: 1.0.0 + resolution: "@testing-library/svelte-core@npm:1.0.0" peerDependencies: - "@testing-library/dom": ">=7.21.4" - checksum: 10/34b74fff56a0447731a94b40d4cf246deb8dbc1c1e3aec93acd1c3377a760bb062e979f1572bb34ec164ad28ee2a391744b42d0d6d6cc16c4ce527e5e09610e1 + svelte: ^3 || ^4 || ^5 || ^5.0.0-next.0 + checksum: 10/f2556ae13411860ab7d3f73e563374502e23d08157c2dc67419f9057b50f81f1d944de674affca31c633d56c9ff39f0539db4201b9b0942adcb2bf456107f8e9 languageName: node linkType: hard @@ -8510,7 +8517,7 @@ __metadata: preact: "npm:^10.29.2" sass: "npm:^1.89.2" typescript: "npm:^5.8.3" - vitest: "npm:^3.2.4" + vitest: "npm:^4.1.6" peerDependencies: "@uppy/core": "workspace:^" languageName: unknown @@ -8522,13 +8529,14 @@ __metadata: dependencies: "@aws-sdk/client-s3": "npm:^3.362.0" "@aws-sdk/s3-request-presigner": "npm:^3.362.0" + "@types/node": "npm:^20.19.0" "@uppy/companion-client": "workspace:^" "@uppy/core": "workspace:^" "@uppy/utils": "workspace:^" jsdom: "npm:^26.1.0" nock: "npm:^13.1.0" typescript: "npm:^5.8.3" - vitest: "npm:^3.2.4" + vitest: "npm:^4.1.6" whatwg-fetch: "npm:3.6.2" peerDependencies: "@uppy/core": "workspace:^" @@ -8559,7 +8567,7 @@ __metadata: namespace-emitter: "npm:^2.0.1" p-retry: "npm:^6.1.0" typescript: "npm:^5.8.3" - vitest: "npm:^3.2.4" + vitest: "npm:^4.1.6" peerDependencies: "@uppy/core": "workspace:^" languageName: unknown @@ -8678,13 +8686,14 @@ __metadata: resolution: "@uppy/compressor@workspace:packages/@uppy/compressor" dependencies: "@transloadit/prettier-bytes": "npm:^0.3.4" + "@types/node": "npm:^20.19.0" "@uppy/utils": "workspace:^" compressorjs: "npm:^1.3.0" jsdom: "npm:^26.1.0" preact: "npm:^10.29.2" promise-queue: "npm:^2.2.5" typescript: "npm:^5.8.3" - vitest: "npm:^3.2.4" + vitest: "npm:^4.1.6" peerDependencies: "@uppy/core": "workspace:^" languageName: unknown @@ -8696,6 +8705,7 @@ __metadata: dependencies: "@transloadit/prettier-bytes": "npm:^0.3.4" "@types/deep-freeze": "npm:^0" + "@types/node": "npm:^20.19.0" "@uppy/store-default": "workspace:^" "@uppy/utils": "workspace:^" cssnano: "npm:^7.0.7" @@ -8710,7 +8720,7 @@ __metadata: preact: "npm:^10.29.2" sass: "npm:^1.89.2" typescript: "npm:^5.8.3" - vitest: "npm:^3.2.4" + vitest: "npm:^4.1.6" languageName: unknown linkType: soft @@ -8727,7 +8737,8 @@ __metadata: "@uppy/url": "workspace:^" "@uppy/utils": "workspace:^" "@uppy/webcam": "workspace:^" - "@vitest/browser": "npm:^3.2.4" + "@vitest/browser": "npm:^4.1.6" + "@vitest/browser-playwright": "npm:^4.1.6" classnames: "npm:^2.5.1" cssnano: "npm:^7.0.7" jsdom: "npm:^26.1.0" @@ -8741,7 +8752,7 @@ __metadata: sass: "npm:^1.89.2" shallow-equal: "npm:^3.1.0" typescript: "npm:^5.8.3" - vitest: "npm:^3.2.4" + vitest: "npm:^4.1.6" peerDependencies: "@uppy/core": "workspace:^" languageName: unknown @@ -8828,10 +8839,12 @@ __metadata: "@uppy/dashboard": "workspace:^" "@uppy/utils": "workspace:^" "@uppy/xhr-upload": "workspace:^" - "@vitest/browser": "npm:^3.2.4" + "@vitest/browser": "npm:^4.1.6" + "@vitest/browser-playwright": "npm:^4.1.6" lodash: "npm:^4.18.1" + playwright: "npm:1.57.0" typescript: "npm:^5.8.3" - vitest: "npm:^3.2.4" + vitest: "npm:^4.1.6" peerDependencies: "@uppy/core": "workspace:^" languageName: unknown @@ -8963,7 +8976,7 @@ __metadata: preact: "npm:^10.29.2" sass: "npm:^1.89.2" typescript: "npm:^5.8.3" - vitest: "npm:^3.2.4" + vitest: "npm:^4.1.6" peerDependencies: "@uppy/core": "workspace:^" languageName: unknown @@ -8986,7 +8999,7 @@ __metadata: react-dom: "npm:^19.2.6" typescript: "npm:^5.8.3" use-sync-external-store: "npm:^1.6.0" - vitest: "npm:^3.2.4" + vitest: "npm:^4.1.6" peerDependencies: "@uppy/core": "workspace:^" "@uppy/dashboard": "workspace:^" @@ -9024,7 +9037,7 @@ __metadata: jsdom: "npm:^26.1.0" resize-observer-polyfill: "npm:^1.5.1" typescript: "npm:^5.8.3" - vitest: "npm:^3.2.4" + vitest: "npm:^4.1.6" peerDependencies: "@uppy/core": "workspace:^" languageName: unknown @@ -9068,9 +9081,10 @@ __metadata: version: 0.0.0-use.local resolution: "@uppy/store-default@workspace:packages/@uppy/store-default" dependencies: + "@types/node": "npm:^20.19.0" jsdom: "npm:^26.1.0" typescript: "npm:^5.8.3" - vitest: "npm:^3.2.4" + vitest: "npm:^4.1.6" languageName: unknown linkType: soft @@ -9118,7 +9132,7 @@ __metadata: jsdom: "npm:^26.1.0" namespace-emitter: "npm:2.0.1" typescript: "npm:^5.8.3" - vitest: "npm:^3.2.4" + vitest: "npm:^4.1.6" peerDependencies: "@uppy/core": "workspace:^" languageName: unknown @@ -9136,7 +9150,7 @@ __metadata: jsdom: "npm:^26.1.0" msw: "npm:^2.10.4" typescript: "npm:^5.8.3" - vitest: "npm:^3.2.4" + vitest: "npm:^4.1.6" whatwg-fetch: "npm:^3.6.2" peerDependencies: "@uppy/core": "workspace:^" @@ -9153,7 +9167,7 @@ __metadata: jsdom: "npm:^26.1.0" tus-js-client: "npm:^4.3.1" typescript: "npm:^5.8.3" - vitest: "npm:^3.2.4" + vitest: "npm:^4.1.6" peerDependencies: "@uppy/core": "workspace:^" languageName: unknown @@ -9181,7 +9195,8 @@ __metadata: "@uppy/companion-client": "workspace:^" "@uppy/core": "workspace:^" "@uppy/utils": "workspace:^" - "@vitest/browser": "npm:^3.2.4" + "@vitest/browser": "npm:^4.1.6" + "@vitest/browser-playwright": "npm:^4.1.6" cssnano: "npm:^7.0.7" nanoid: "npm:^5.1.11" playwright: "npm:1.57.0" @@ -9190,7 +9205,7 @@ __metadata: preact: "npm:^10.29.2" sass: "npm:^1.89.2" typescript: "npm:^5.8.3" - vitest: "npm:^3.2.4" + vitest: "npm:^4.1.6" peerDependencies: "@uppy/core": "workspace:^" languageName: unknown @@ -9205,7 +9220,7 @@ __metadata: lodash: "npm:^4.18.1" preact: "npm:^10.29.2" typescript: "npm:^5.8.3" - vitest: "npm:^3.2.4" + vitest: "npm:^4.1.6" languageName: unknown linkType: soft @@ -9251,7 +9266,7 @@ __metadata: preact: "npm:^10.29.2" sass: "npm:^1.89.2" typescript: "npm:^5.8.3" - vitest: "npm:^3.2.4" + vitest: "npm:^4.1.6" peerDependencies: "@uppy/core": "workspace:^" languageName: unknown @@ -9280,13 +9295,14 @@ __metadata: "@uppy/core": "workspace:^" "@uppy/dashboard": "workspace:^" "@uppy/utils": "workspace:^" - "@vitest/browser": "npm:^3.2.4" + "@vitest/browser": "npm:^4.1.6" + "@vitest/browser-playwright": "npm:^4.1.6" jsdom: "npm:^26.1.0" msw: "npm:^2.10.4" nock: "npm:^13.1.0" playwright: "npm:1.57.0" typescript: "npm:^5.8.3" - vitest: "npm:^3.2.4" + vitest: "npm:^4.1.6" peerDependencies: "@uppy/core": "workspace:^" languageName: unknown @@ -9344,43 +9360,38 @@ __metadata: languageName: node linkType: hard -"@vitest/browser@npm:^3.2.4": - version: 3.2.4 - resolution: "@vitest/browser@npm:3.2.4" +"@vitest/browser-playwright@npm:^4.1.6": + version: 4.1.6 + resolution: "@vitest/browser-playwright@npm:4.1.6" dependencies: - "@testing-library/dom": "npm:^10.4.0" - "@testing-library/user-event": "npm:^14.6.1" - "@vitest/mocker": "npm:3.2.4" - "@vitest/utils": "npm:3.2.4" - magic-string: "npm:^0.30.17" - sirv: "npm:^3.0.1" - tinyrainbow: "npm:^2.0.0" - ws: "npm:^8.18.2" + "@vitest/browser": "npm:4.1.6" + "@vitest/mocker": "npm:4.1.6" + tinyrainbow: "npm:^3.1.0" peerDependencies: playwright: "*" - vitest: 3.2.4 - webdriverio: ^7.0.0 || ^8.0.0 || ^9.0.0 + vitest: 4.1.6 peerDependenciesMeta: playwright: - optional: true - safaridriver: - optional: true - webdriverio: - optional: true - checksum: 10/f8ec0bff4006a81c3b843b5cf04f4ba1ffd8226eb5d4a98b134eddb83de8decced8788d2569aa632920ed6a346d3cfd856fcd53ee9083080a78c5baae3aae2de + optional: false + checksum: 10/a899da787418f3748b0076ab3e63261b968dd53bbcd9a0323f2a29ce45a439c7bf8b5746fbe331ac675a166b0a789e6643b22df81965767f8c1a8b9f904ece00 languageName: node linkType: hard -"@vitest/expect@npm:3.2.4": - version: 3.2.4 - resolution: "@vitest/expect@npm:3.2.4" +"@vitest/browser@npm:4.1.6, @vitest/browser@npm:^4.1.6": + version: 4.1.6 + resolution: "@vitest/browser@npm:4.1.6" dependencies: - "@types/chai": "npm:^5.2.2" - "@vitest/spy": "npm:3.2.4" - "@vitest/utils": "npm:3.2.4" - chai: "npm:^5.2.0" - tinyrainbow: "npm:^2.0.0" - checksum: 10/dc69ce886c13714dfbbff78f2d2cb7eb536017e82301a73c42d573a9e9d2bf91005ac7abd9b977adf0a3bd431209f45a8ac2418029b68b0a377e092607c843ce + "@blazediff/core": "npm:1.9.1" + "@vitest/mocker": "npm:4.1.6" + "@vitest/utils": "npm:4.1.6" + magic-string: "npm:^0.30.21" + pngjs: "npm:^7.0.0" + sirv: "npm:^3.0.2" + tinyrainbow: "npm:^3.1.0" + ws: "npm:^8.19.0" + peerDependencies: + vitest: 4.1.6 + checksum: 10/d62d0d5d67880f09799faa1c496377dcf0270343b15bf17cac9d27416c93e24db91498bebd8c33e102fc982caeb11693cf2f82bdf07f59b43589be4f2f03c693 languageName: node linkType: hard @@ -9398,25 +9409,6 @@ __metadata: languageName: node linkType: hard -"@vitest/mocker@npm:3.2.4": - version: 3.2.4 - resolution: "@vitest/mocker@npm:3.2.4" - dependencies: - "@vitest/spy": "npm:3.2.4" - estree-walker: "npm:^3.0.3" - magic-string: "npm:^0.30.17" - peerDependencies: - msw: ^2.4.9 - vite: ^5.0.0 || ^6.0.0 || ^7.0.0-0 - peerDependenciesMeta: - msw: - optional: true - vite: - optional: true - checksum: 10/5e92431b6ed9fc1679060e4caef3e4623f4750542a5d7cd944774f8217c4d231e273202e8aea00bab33260a5a9222ecb7005d80da0348c3c829bd37d123071a8 - languageName: node - linkType: hard - "@vitest/mocker@npm:4.1.6": version: 4.1.6 resolution: "@vitest/mocker@npm:4.1.6" @@ -9436,15 +9428,6 @@ __metadata: languageName: node linkType: hard -"@vitest/pretty-format@npm:3.2.4, @vitest/pretty-format@npm:^3.2.4": - version: 3.2.4 - resolution: "@vitest/pretty-format@npm:3.2.4" - dependencies: - tinyrainbow: "npm:^2.0.0" - checksum: 10/8dd30cbf956e01fbab042fe651fb5175d9f0cd00b7b569a46cd98df89c4fec47dab12916201ad6e09a4f25f2a2ec8927a4bfdc61118593097f759c90b18a51d4 - languageName: node - linkType: hard - "@vitest/pretty-format@npm:4.1.6": version: 4.1.6 resolution: "@vitest/pretty-format@npm:4.1.6" @@ -9454,17 +9437,6 @@ __metadata: languageName: node linkType: hard -"@vitest/runner@npm:3.2.4": - version: 3.2.4 - resolution: "@vitest/runner@npm:3.2.4" - dependencies: - "@vitest/utils": "npm:3.2.4" - pathe: "npm:^2.0.3" - strip-literal: "npm:^3.0.0" - checksum: 10/197bd55def519ef202f990b7c1618c212380831827c116240871033e4973decb780503c705ba9245a12bd8121f3ac4086ffcb3e302148b62d9bd77fd18dd1deb - languageName: node - linkType: hard - "@vitest/runner@npm:4.1.6": version: 4.1.6 resolution: "@vitest/runner@npm:4.1.6" @@ -9475,17 +9447,6 @@ __metadata: languageName: node linkType: hard -"@vitest/snapshot@npm:3.2.4": - version: 3.2.4 - resolution: "@vitest/snapshot@npm:3.2.4" - dependencies: - "@vitest/pretty-format": "npm:3.2.4" - magic-string: "npm:^0.30.17" - pathe: "npm:^2.0.3" - checksum: 10/acfb682491b9ca9345bf9fed02c2779dec43e0455a380c1966b0aad8dd81c79960902cf34621ab48fe80a0eaf8c61cc42dec186a1321dc3c9897ef2ebd5f1bc4 - languageName: node - linkType: hard - "@vitest/snapshot@npm:4.1.6": version: 4.1.6 resolution: "@vitest/snapshot@npm:4.1.6" @@ -9498,15 +9459,6 @@ __metadata: languageName: node linkType: hard -"@vitest/spy@npm:3.2.4": - version: 3.2.4 - resolution: "@vitest/spy@npm:3.2.4" - dependencies: - tinyspy: "npm:^4.0.3" - checksum: 10/7d38c299f42a8c7e5e41652b203af98ca54e63df69c3b072d0e401d5a57fbbba3e39d8538ac1b3022c26718a6388d0bcc222bc2f07faab75942543b9247c007d - languageName: node - linkType: hard - "@vitest/spy@npm:4.1.6": version: 4.1.6 resolution: "@vitest/spy@npm:4.1.6" @@ -9514,17 +9466,6 @@ __metadata: languageName: node linkType: hard -"@vitest/utils@npm:3.2.4": - version: 3.2.4 - resolution: "@vitest/utils@npm:3.2.4" - dependencies: - "@vitest/pretty-format": "npm:3.2.4" - loupe: "npm:^3.1.4" - tinyrainbow: "npm:^2.0.0" - checksum: 10/7f12ef63bd8ee13957744d1f336b0405f164ade4358bf9dfa531f75bbb58ffac02bf61aba65724311ddbc50b12ba54853a169e59c6b837c16086173b9a480710 - languageName: node - linkType: hard - "@vitest/utils@npm:4.1.6": version: 4.1.6 resolution: "@vitest/utils@npm:4.1.6" @@ -10220,13 +10161,6 @@ __metadata: languageName: node linkType: hard -"assertion-error@npm:^2.0.1": - version: 2.0.1 - resolution: "assertion-error@npm:2.0.1" - checksum: 10/a0789dd882211b87116e81e2648ccb7f60340b34f19877dd020b39ebb4714e475eb943e14ba3e22201c221ef6645b7bfe10297e76b6ac95b48a9898c1211ce66 - languageName: node - linkType: hard - "asynckit@npm:^0.4.0": version: 0.4.0 resolution: "asynckit@npm:0.4.0" @@ -10808,19 +10742,6 @@ __metadata: languageName: node linkType: hard -"chai@npm:^5.2.0": - version: 5.2.1 - resolution: "chai@npm:5.2.1" - dependencies: - assertion-error: "npm:^2.0.1" - check-error: "npm:^2.1.1" - deep-eql: "npm:^5.0.1" - loupe: "npm:^3.1.0" - pathval: "npm:^2.0.0" - checksum: 10/2d9b14c9bbb9b791641ecee0d74a53f34d2c86f05c10b5567041ed376177f87af9dc7f5398207fd2711affbfeb9f0f1f60e11bcaf021f78ef37b7c65a6d94e7d - languageName: node - linkType: hard - "chai@npm:^6.2.2": version: 6.2.2 resolution: "chai@npm:6.2.2" @@ -10880,13 +10801,6 @@ __metadata: languageName: node linkType: hard -"check-error@npm:^2.1.1": - version: 2.1.1 - resolution: "check-error@npm:2.1.1" - checksum: 10/d785ed17b1d4a4796b6e75c765a9a290098cf52ff9728ce0756e8ffd4293d2e419dd30c67200aee34202463b474306913f2fcfaf1890641026d9fc6966fea27a - languageName: node - linkType: hard - "chokidar@npm:^3.3.0, chokidar@npm:^3.5.1, chokidar@npm:^3.6.0": version: 3.6.0 resolution: "chokidar@npm:3.6.0" @@ -11908,13 +11822,6 @@ __metadata: languageName: node linkType: hard -"deep-eql@npm:^5.0.1": - version: 5.0.2 - resolution: "deep-eql@npm:5.0.2" - checksum: 10/a529b81e2ef8821621d20a36959a0328873a3e49d393ad11f8efe8559f31239494c2eb889b80342808674c475802ba95b9d6c4c27641b9a029405104c1b59fcf - languageName: node - linkType: hard - "deep-freeze@npm:^0.0.1": version: 0.0.1 resolution: "deep-freeze@npm:0.0.1" @@ -13158,7 +13065,8 @@ __metadata: "@uppy/tus": "workspace:*" "@uppy/webcam": "workspace:*" "@vitejs/plugin-react": "npm:^4.6.0" - "@vitest/browser": "npm:^3.2.4" + "@vitest/browser": "npm:^4.1.6" + "@vitest/browser-playwright": "npm:^4.1.6" msw: "npm:^2.10.4" playwright: "npm:1.57.0" react: "npm:^19.0.0" @@ -13166,8 +13074,8 @@ __metadata: tailwindcss: "npm:^4.0.9" typescript: "npm:^5.7.3" vite: "npm:^7.1.11" - vitest: "npm:^3.2.4" - vitest-browser-react: "npm:^1.0.0" + vitest: "npm:^4.1.6" + vitest-browser-react: "npm:^2.2.0" languageName: unknown linkType: soft @@ -13215,7 +13123,8 @@ __metadata: "@uppy/svelte": "workspace:*" "@uppy/tus": "workspace:*" "@uppy/webcam": "workspace:*" - "@vitest/browser": "npm:^3.2.4" + "@vitest/browser": "npm:^4.1.6" + "@vitest/browser-playwright": "npm:^4.1.6" msw: "npm:^2.10.4" playwright: "npm:1.57.0" svelte: "npm:^5.0.0" @@ -13223,8 +13132,8 @@ __metadata: tailwindcss: "npm:^4.0.0" typescript: "npm:^5.0.0" vite: "npm:^6.2.5" - vitest: "npm:^3.2.4" - vitest-browser-svelte: "npm:^1.0.0" + vitest: "npm:^4.1.6" + vitest-browser-svelte: "npm:^2.1.1" languageName: unknown linkType: soft @@ -13260,13 +13169,14 @@ __metadata: "@uppy/vue": "workspace:*" "@uppy/webcam": "workspace:*" "@vitejs/plugin-vue": "npm:^6.0.1" - "@vitest/browser": "npm:^3.2.4" + "@vitest/browser": "npm:^4.1.6" + "@vitest/browser-playwright": "npm:^4.1.6" msw: "npm:^2.10.4" playwright: "npm:1.57.0" tailwindcss: "npm:^4.0.0" vite: "npm:^7.1.11" - vitest: "npm:^3.2.4" - vitest-browser-vue: "npm:^1.0.0" + vitest: "npm:^4.1.6" + vitest-browser-vue: "npm:^2.1.0" vue: "npm:^3.5.14" languageName: unknown linkType: soft @@ -13360,13 +13270,6 @@ __metadata: languageName: node linkType: hard -"expect-type@npm:^1.2.1": - version: 1.2.2 - resolution: "expect-type@npm:1.2.2" - checksum: 10/1703e6e47b575f79d801d87f24c639f4d0af71b327a822e6922d0ccb7eb3f6559abb240b8bd43bab6a477903de4cc322908e194d05132c18f52a217115e8e870 - languageName: node - linkType: hard - "expect-type@npm:^1.3.0": version: 1.3.0 resolution: "expect-type@npm:1.3.0" @@ -15611,13 +15514,6 @@ __metadata: languageName: node linkType: hard -"js-tokens@npm:^9.0.1": - version: 9.0.1 - resolution: "js-tokens@npm:9.0.1" - checksum: 10/3288ba73bb2023adf59501979fb4890feb6669cc167b13771b226814fde96a1583de3989249880e3f4d674040d1815685db9a9880db9153307480d39dc760365 - languageName: node - linkType: hard - "js-yaml@npm:^3.13.1, js-yaml@npm:^3.6.1": version: 3.14.2 resolution: "js-yaml@npm:3.14.2" @@ -16758,13 +16654,6 @@ __metadata: languageName: node linkType: hard -"loupe@npm:^3.1.0, loupe@npm:^3.1.4": - version: 3.1.4 - resolution: "loupe@npm:3.1.4" - checksum: 10/06ab1893731f167f2ce71f464a8a68372dc4cb807ecae20f9b844660c93813a298ca76bcd747ba6568b057af725ea63f0034ba3140c8f1d1fbb482d797e593ef - languageName: node - linkType: hard - "lower-case@npm:^2.0.2": version: 2.0.2 resolution: "lower-case@npm:2.0.2" @@ -18824,13 +18713,6 @@ __metadata: languageName: node linkType: hard -"pathval@npm:^2.0.0": - version: 2.0.1 - resolution: "pathval@npm:2.0.1" - checksum: 10/f5e8b82f6b988a5bba197970af050268fd800780d0f9ee026e6f0b544ac4b17ab52bebeabccb790d63a794530a1641ae399ad07ecfc67ad337504c85dc9e5693 - languageName: node - linkType: hard - "picocolors@npm:^1.0.0, picocolors@npm:^1.0.1, picocolors@npm:^1.1.0, picocolors@npm:^1.1.1": version: 1.1.1 resolution: "picocolors@npm:1.1.1" @@ -18973,6 +18855,13 @@ __metadata: languageName: node linkType: hard +"pngjs@npm:^7.0.0": + version: 7.0.0 + resolution: "pngjs@npm:7.0.0" + checksum: 10/e843ebbb0df092ee0f3a3e7dbd91ff87a239a4e4c4198fff202916bfb33b67622f4b83b3c29f3ccae94fcb97180c289df06068624554f61686fe6b9a4811f7db + languageName: node + linkType: hard + "possible-typed-array-names@npm:^1.0.0": version: 1.0.0 resolution: "possible-typed-array-names@npm:1.0.0" @@ -21198,7 +21087,7 @@ __metadata: languageName: node linkType: hard -"sirv@npm:^3.0.0, sirv@npm:^3.0.1": +"sirv@npm:^3.0.0": version: 3.0.1 resolution: "sirv@npm:3.0.1" dependencies: @@ -21209,6 +21098,17 @@ __metadata: languageName: node linkType: hard +"sirv@npm:^3.0.2": + version: 3.0.2 + resolution: "sirv@npm:3.0.2" + dependencies: + "@polka/url": "npm:^1.0.0-next.24" + mrmime: "npm:^2.0.0" + totalist: "npm:^3.0.0" + checksum: 10/259617f4ab57664be6d963f5b27b38a6351d3e91ce70d6726985d087b40efd595fcf7f72ae010babf5e0acb63bcb3e3d6db8de34604da1011be6e28ee32aa15d + languageName: node + linkType: hard + "slash@npm:^3.0.0": version: 3.0.0 resolution: "slash@npm:3.0.0" @@ -21536,13 +21436,6 @@ __metadata: languageName: node linkType: hard -"std-env@npm:^3.9.0": - version: 3.9.0 - resolution: "std-env@npm:3.9.0" - checksum: 10/3044b2c54a74be4f460db56725571241ab3ac89a91f39c7709519bc90fa37148784bc4cd7d3a301aa735f43bd174496f263563f76703ce3e81370466ab7c235b - languageName: node - linkType: hard - "std-env@npm:^4.0.0-rc.1": version: 4.1.0 resolution: "std-env@npm:4.1.0" @@ -21737,15 +21630,6 @@ __metadata: languageName: node linkType: hard -"strip-literal@npm:^3.0.0": - version: 3.0.0 - resolution: "strip-literal@npm:3.0.0" - dependencies: - js-tokens: "npm:^9.0.1" - checksum: 10/da1616f654f3ff481e078597b4565373a5eeed78b83de4a11a1a1b98292a9036f2474e528eff19b6eed93370428ff957a473827057c117495086436725d7efad - languageName: node - linkType: hard - "strnum@npm:^2.1.0": version: 2.1.1 resolution: "strnum@npm:2.1.1" @@ -22127,13 +22011,6 @@ __metadata: languageName: node linkType: hard -"tinyexec@npm:^0.3.2": - version: 0.3.2 - resolution: "tinyexec@npm:0.3.2" - checksum: 10/b9d5fed3166fb1acd1e7f9a89afcd97ccbe18b9c1af0278e429455f6976d69271ba2d21797e7c36d57d6b05025e525d2882d88c2ab435b60d1ddf2fea361de57 - languageName: node - linkType: hard - "tinyexec@npm:^1.0.2": version: 1.1.2 resolution: "tinyexec@npm:1.1.2" @@ -22161,20 +22038,6 @@ __metadata: languageName: node linkType: hard -"tinypool@npm:^1.1.1": - version: 1.1.1 - resolution: "tinypool@npm:1.1.1" - checksum: 10/0d54139e9dbc6ef33349768fa78890a4d708d16a7ab68e4e4ef3bb740609ddf0f9fd13292c2f413fbba756166c97051a657181c8f7ae92ade690604f183cc01d - languageName: node - linkType: hard - -"tinyrainbow@npm:^2.0.0": - version: 2.0.0 - resolution: "tinyrainbow@npm:2.0.0" - checksum: 10/94d4e16246972614a5601eeb169ba94f1d49752426312d3cf8cc4f2cc663a2e354ffc653aa4de4eebccbf9eeebdd0caef52d1150271fdfde65d7ae7f3dcb9eb5 - languageName: node - linkType: hard - "tinyrainbow@npm:^3.1.0": version: 3.1.0 resolution: "tinyrainbow@npm:3.1.0" @@ -22182,13 +22045,6 @@ __metadata: languageName: node linkType: hard -"tinyspy@npm:^4.0.3": - version: 4.0.3 - resolution: "tinyspy@npm:4.0.3" - checksum: 10/b6a3ed40dd76a2b3c020250cf1401506b456509d1fb9dba0c7b0e644d258dac722843b85c57ccc36c8687db1e7978cb6adcc43e3b71c475910c085b96d41cb53 - languageName: node - linkType: hard - "tldts-core@npm:^6.1.86": version: 6.1.86 resolution: "tldts-core@npm:6.1.86" @@ -22950,7 +22806,7 @@ __metadata: languageName: node linkType: hard -"vite-node@npm:3.2.4, vite-node@npm:^3.2.2": +"vite-node@npm:^3.2.2": version: 3.2.4 resolution: "vite-node@npm:3.2.4" dependencies: @@ -23208,50 +23064,49 @@ __metadata: languageName: node linkType: hard -"vitest-browser-react@npm:^1.0.0": - version: 1.0.0 - resolution: "vitest-browser-react@npm:1.0.0" +"vitest-browser-react@npm:^2.2.0": + version: 2.2.0 + resolution: "vitest-browser-react@npm:2.2.0" peerDependencies: "@types/react": ^18.0.0 || ^19.0.0 "@types/react-dom": ^18.0.0 || ^19.0.0 - "@vitest/browser": ^2.1.0 || ^3.0.0 || ^4.0.0-0 react: ^18.0.0 || ^19.0.0 react-dom: ^18.0.0 || ^19.0.0 - vitest: ^2.1.0 || ^3.0.0 || ^4.0.0-0 + vitest: ^4.0.0 peerDependenciesMeta: "@types/react": optional: true "@types/react-dom": optional: true - checksum: 10/1e397bd5157e765fb82a714601b0fb6e8936c3cc631b9fb3d2eb24a407fd9a3144750765447ba33159fad2962965925e71592729c61f852e912f1a2c8f936fd5 + checksum: 10/44d1e9cabec5bb51f2a422abbb080db1a47c7efbcab4461fa24049cc2e8caf5cbe0204e99fe224b2141931ba23a753e35caf412db4875129c1768e9a1e6a81a0 languageName: node linkType: hard -"vitest-browser-svelte@npm:^1.0.0": - version: 1.0.0 - resolution: "vitest-browser-svelte@npm:1.0.0" +"vitest-browser-svelte@npm:^2.1.1": + version: 2.1.1 + resolution: "vitest-browser-svelte@npm:2.1.1" + dependencies: + "@testing-library/svelte-core": "npm:^1.0.0" peerDependencies: - "@vitest/browser": ^2.1.0 || ^3.0.0 || ^4.0.0-0 svelte: ^3 || ^4 || ^5 || ^5.0.0-next.0 - vitest: ^2.1.0 || ^3.0.0 || ^4.0.0-0 - checksum: 10/2416f780e195611a917b2dbe7769058d6fe43f85a4edd279e87a7678914faa8f053bca7b43fecdd2e45fba7f03c5fcd6bca8210aa088996059d9380be141a44c + vitest: ^4.0.0 + checksum: 10/a8569cdfed512bcc406a171b40cf477429aea446f18211f9e5f908a846d52894774278d27c313b004baf9bfa145f5d874714e7825284c646b2bce938c912d488 languageName: node linkType: hard -"vitest-browser-vue@npm:^1.0.0": - version: 1.0.0 - resolution: "vitest-browser-vue@npm:1.0.0" +"vitest-browser-vue@npm:^2.1.0": + version: 2.1.0 + resolution: "vitest-browser-vue@npm:2.1.0" dependencies: "@vue/test-utils": "npm:^2.4.6" peerDependencies: - "@vitest/browser": ^2.1.0 || ^3.0.0 || ^4.0.0-0 - vitest: ^2.1.0 || ^3.0.0 || ^4.0.0-0 + vitest: ^4.0.0-0 vue: ^3.0.0 - checksum: 10/e28150c03fef9c3763b52add83f565c4b0e5b15c2c0f0cf73b1b98a4028e917eb33d0628257e700e6cce9a267cd26bc2215b9884f60de14227222dff26a580a7 + checksum: 10/45d5586270fa6e92a645fcfcf2f7953bc08beff63a9046834da3a47008ecac5b7029ad5cc6a573bec0236f15310a80bbf1dabaa1896c46a1f048d3f112f29704 languageName: node linkType: hard -"vitest@npm:4.1.6": +"vitest@npm:4.1.6, vitest@npm:^4.1.6": version: 4.1.6 resolution: "vitest@npm:4.1.6" dependencies: @@ -23319,62 +23174,6 @@ __metadata: languageName: node linkType: hard -"vitest@npm:^3.2.4": - version: 3.2.4 - resolution: "vitest@npm:3.2.4" - dependencies: - "@types/chai": "npm:^5.2.2" - "@vitest/expect": "npm:3.2.4" - "@vitest/mocker": "npm:3.2.4" - "@vitest/pretty-format": "npm:^3.2.4" - "@vitest/runner": "npm:3.2.4" - "@vitest/snapshot": "npm:3.2.4" - "@vitest/spy": "npm:3.2.4" - "@vitest/utils": "npm:3.2.4" - chai: "npm:^5.2.0" - debug: "npm:^4.4.1" - expect-type: "npm:^1.2.1" - magic-string: "npm:^0.30.17" - pathe: "npm:^2.0.3" - picomatch: "npm:^4.0.2" - std-env: "npm:^3.9.0" - tinybench: "npm:^2.9.0" - tinyexec: "npm:^0.3.2" - tinyglobby: "npm:^0.2.14" - tinypool: "npm:^1.1.1" - tinyrainbow: "npm:^2.0.0" - vite: "npm:^5.0.0 || ^6.0.0 || ^7.0.0-0" - vite-node: "npm:3.2.4" - why-is-node-running: "npm:^2.3.0" - peerDependencies: - "@edge-runtime/vm": "*" - "@types/debug": ^4.1.12 - "@types/node": ^18.0.0 || ^20.0.0 || >=22.0.0 - "@vitest/browser": 3.2.4 - "@vitest/ui": 3.2.4 - happy-dom: "*" - jsdom: "*" - peerDependenciesMeta: - "@edge-runtime/vm": - optional: true - "@types/debug": - optional: true - "@types/node": - optional: true - "@vitest/browser": - optional: true - "@vitest/ui": - optional: true - happy-dom: - optional: true - jsdom: - optional: true - bin: - vitest: vitest.mjs - checksum: 10/f10bbce093ecab310ecbe484536ef4496fb9151510b2be0c5907c65f6d31482d9c851f3182531d1d27d558054aa78e8efd9d4702ba6c82058657e8b6a52507ee - languageName: node - linkType: hard - "void-elements@npm:^2.0.0": version: 2.0.1 resolution: "void-elements@npm:2.0.1" @@ -23851,7 +23650,7 @@ __metadata: languageName: node linkType: hard -"ws@npm:8.20.1": +"ws@npm:8.20.1, ws@npm:^8.19.0": version: 8.20.1 resolution: "ws@npm:8.20.1" peerDependencies: @@ -23881,7 +23680,7 @@ __metadata: languageName: node linkType: hard -"ws@npm:^8.18.0, ws@npm:^8.18.2": +"ws@npm:^8.18.0": version: 8.18.3 resolution: "ws@npm:8.18.3" peerDependencies: