From 33d77a38c7d180e7584d78732dcf70d407bd63c4 Mon Sep 17 00:00:00 2001 From: Nathan Castle Date: Fri, 21 Mar 2025 15:24:56 -0700 Subject: [PATCH 01/24] feat(debug): support attach to headed browser This commit improves support for debugging in non-headless browser scenarios by adding the option to define an additional launch configuration to run after starting debugging. This enables connection to the browser running the tests, which enables setting breakpoints. This addresses https://github.com/vitest-dev/vscode/discussions/474. Implementation details: after the debug session starts, if configured, a second debug session is launched as a child of the first. I confirmed by inspection of VS Code source that child debug sessions are stopped when the parent is stopped, so I don't think additional clean up is needed. ([Evidence](https://github.com/microsoft/vscode/blob/3286791a7e920c9b61b84fc2dbba136da912bb64/src/vs/workbench/contrib/debug/browser/debugSession.ts#L426)) I have included a sample project that demonstrates how to configure headful browser tests; it is copy-pasted version of the browser sample, with some config changes. I have also updated the readme to document this feature. --- .vscode/launch.json | 10 + README.md | 5 + package.json | 5 + samples/browser-headed/.skip/vitest.config.ts | 1 + samples/browser-headed/.vscode/launch.json | 16 + samples/browser-headed/.vscode/settings.json | 11 + samples/browser-headed/package.json | 21 + samples/browser-headed/pnpm-lock.yaml | 1865 +++++++++++++++++ samples/browser-headed/src/add.ts | 7 + .../src/should_included_test.ts | 5 + samples/browser-headed/test/.gitignore | 1 + .../testing-all-fail--1----0-1.png | Bin 0 -> 3012 bytes .../testing-all-fail--2----0-1.png | Bin 0 -> 3012 bytes .../testing-all-fail--3----0-1.png | Bin 0 -> 3012 bytes .../testing-first-fail--3----1-1.png | Bin 0 -> 3012 bytes .../testing-first-pass--2----1-1.png | Bin 0 -> 3012 bytes .../testing-first-pass--3----1-1.png | Bin 0 -> 3012 bytes .../testing-last-fail--3----1-1.png | Bin 0 -> 3012 bytes .../testing-last-pass--3----1-1.png | Bin 0 -> 3012 bytes .../env.test.ts/process-env-1.png | Bin 0 -> 3012 bytes samples/browser-headed/test/add.test.ts | 52 + samples/browser-headed/test/console.test.ts | 25 + .../test/deep/deeper/deep.test.ts | 5 + .../browser-headed/test/duplicated.test.ts | 8 + samples/browser-headed/test/each.test.ts | 84 + samples/browser-headed/test/env.test.ts | 9 + .../browser-headed/test/fail_to_run.test.ts | 1 + samples/browser-headed/test/ignored.test.ts | 5 + samples/browser-headed/test/mul.test.ts | 6 + samples/browser-headed/test/snapshot.test.ts | 11 + samples/browser-headed/test/using.test.ts | 43 + samples/browser-headed/vitest.config.ts | 22 + src/config.ts | 3 + src/debug.ts | 26 + 34 files changed, 2247 insertions(+) create mode 100644 samples/browser-headed/.skip/vitest.config.ts create mode 100644 samples/browser-headed/.vscode/launch.json create mode 100644 samples/browser-headed/.vscode/settings.json create mode 100644 samples/browser-headed/package.json create mode 100644 samples/browser-headed/pnpm-lock.yaml create mode 100644 samples/browser-headed/src/add.ts create mode 100644 samples/browser-headed/src/should_included_test.ts create mode 100644 samples/browser-headed/test/.gitignore create mode 100644 samples/browser-headed/test/__screenshots__/each.test.ts/testing-all-fail--1----0-1.png create mode 100644 samples/browser-headed/test/__screenshots__/each.test.ts/testing-all-fail--2----0-1.png create mode 100644 samples/browser-headed/test/__screenshots__/each.test.ts/testing-all-fail--3----0-1.png create mode 100644 samples/browser-headed/test/__screenshots__/each.test.ts/testing-first-fail--3----1-1.png create mode 100644 samples/browser-headed/test/__screenshots__/each.test.ts/testing-first-pass--2----1-1.png create mode 100644 samples/browser-headed/test/__screenshots__/each.test.ts/testing-first-pass--3----1-1.png create mode 100644 samples/browser-headed/test/__screenshots__/each.test.ts/testing-last-fail--3----1-1.png create mode 100644 samples/browser-headed/test/__screenshots__/each.test.ts/testing-last-pass--3----1-1.png create mode 100644 samples/browser-headed/test/__screenshots__/env.test.ts/process-env-1.png create mode 100644 samples/browser-headed/test/add.test.ts create mode 100644 samples/browser-headed/test/console.test.ts create mode 100644 samples/browser-headed/test/deep/deeper/deep.test.ts create mode 100644 samples/browser-headed/test/duplicated.test.ts create mode 100644 samples/browser-headed/test/each.test.ts create mode 100644 samples/browser-headed/test/env.test.ts create mode 100644 samples/browser-headed/test/fail_to_run.test.ts create mode 100644 samples/browser-headed/test/ignored.test.ts create mode 100644 samples/browser-headed/test/mul.test.ts create mode 100644 samples/browser-headed/test/snapshot.test.ts create mode 100644 samples/browser-headed/test/using.test.ts create mode 100644 samples/browser-headed/vitest.config.ts diff --git a/.vscode/launch.json b/.vscode/launch.json index dc423605..c27155c0 100644 --- a/.vscode/launch.json +++ b/.vscode/launch.json @@ -25,6 +25,16 @@ ], "outFiles": ["${workspaceFolder}/dist/**/*.js"] }, + { + "name": "Run Extension Browser (Headed) Sample", + "type": "extensionHost", + "request": "launch", + "args": [ + "--extensionDevelopmentPath=${workspaceFolder}", + "${workspaceFolder}/samples/browser-headed" + ], + "outFiles": ["${workspaceFolder}/dist/**/*.js"] + }, { "name": "Run Extension Continuous Sample", "type": "extensionHost", diff --git a/README.md b/README.md index 4e4165a5..2ad313fd 100644 --- a/README.md +++ b/README.md @@ -81,6 +81,7 @@ These options are resolved relative to the [workspace file](https://code.visuals - `vitest.debuggerPort`: Port that the debugger will be attached to. By default uses 9229 or tries to find a free port if it's not available. - `vitest.debuggerAddress`: TCP/IP address of process to be debugged. Default: localhost - `vitest.cliArguments`: Additional arguments to pass to the Vitest CLI. Note that some arguments will be ignored: `watch`, `reporter`, `api`, and `ui`. Example: `--mode=staging` +- `vitest.debugSecondaryLaunchConfigName`: The name of the VS Code [launch configuration](https://code.visualstudio.com/docs/editor/debugging-configuration#_launch-versus-attach-configurations) to run after starting a test debug session but before running the tests. This is useful to support in-browser test scenarios, for example by specifying an 'attach' config. See [Browser mode debugging](https://vitest.dev/guide/debugging.html#browser-mode) in the Vitest docs for more information. > 💡 The `vitest.nodeExecutable` and `vitest.nodeExecArgs` settings are used as `execPath` and `execArgv` when spawning a new `child_process`, and as `runtimeExecutable` and `runtimeArgs` when [debugging a test](https://github.com/microsoft/vscode-js-debug/blob/main/OPTIONS.md). > The `vitest.terminalShellPath` and `vitest.terminalShellArgs` settings are used as `shellPath` and `shellArgs` when creating a new [terminal](https://code.visualstudio.com/api/references/vscode-api#Terminal) @@ -131,3 +132,7 @@ This is a vscode's built-in option and will control every plugin. ### I am using `vitest.shellType: terminal`, but I don't see the terminal The extension uses a modified Vitest script that removes the reporter output. For this reason, the terminal is hidden by default. However, it might be useful to debug issues with the extension or Vitest itself - to open the terminal in the "Terminals" view you can use the "Vitest: Show Shell Terminal" command. + +### How can I debug tests using the browser? + +You can configure a launch configuration to connect the VS Code debugger to the browser launched by Vitest using the `vitest.debugSecondaryLaunchConfigName` setting. See [the samples](./samples/browser-headed/) for an example. diff --git a/package.json b/package.json index f59c90bf..ea079b8e 100644 --- a/package.json +++ b/package.json @@ -184,6 +184,11 @@ "type": "array", "scope": "resource" }, + "vitest.debugSecondaryLaunchConfigName": { + "markdownDescription": "The name of the VS Code [launch configuration](https://code.visualstudio.com/docs/editor/debugging-configuration#_launch-versus-attach-configurations) to run after starting a test debug session but before running the tests. This is useful to support in-browser test scenarios, for example by specifying an 'attach' config. See [Browser mode debugging](https://vitest.dev/guide/debugging.html#browser-mode) in the Vitest docs for more information.", + "type": "string", + "scope": "resource" + }, "vitest.nodeEnv": { "markdownDescription": "The env passed to runner process in addition to `process.env`", "type": [ diff --git a/samples/browser-headed/.skip/vitest.config.ts b/samples/browser-headed/.skip/vitest.config.ts new file mode 100644 index 00000000..91480683 --- /dev/null +++ b/samples/browser-headed/.skip/vitest.config.ts @@ -0,0 +1 @@ +throw new Error('do not import') \ No newline at end of file diff --git a/samples/browser-headed/.vscode/launch.json b/samples/browser-headed/.vscode/launch.json new file mode 100644 index 00000000..8c1c7910 --- /dev/null +++ b/samples/browser-headed/.vscode/launch.json @@ -0,0 +1,16 @@ +{ + "version": "0.2.0", + "configurations": [ + { + "type": "chrome", + "request": "attach", + "name": "vitest:test-explorer:attach", + "presentation": { + "hidden": true, + "group": "test", + "order": 1 + }, + "port": 30001, + }, + ], + } \ No newline at end of file diff --git a/samples/browser-headed/.vscode/settings.json b/samples/browser-headed/.vscode/settings.json new file mode 100644 index 00000000..b4d2ef5f --- /dev/null +++ b/samples/browser-headed/.vscode/settings.json @@ -0,0 +1,11 @@ +{ + "vitest.nodeEnv": { + "TEST_CUSTOM_ENV": "hello" + }, + "[typescript]": { + "editor.defaultFormatter": "dbaeumer.vscode-eslint" + }, + // See launch.json + "vitest.debugSecondaryLaunchConfigName": "vitest:test-explorer:attach", + "vitest.cliArguments": "--inspect-brk=localhost:30001" +} diff --git a/samples/browser-headed/package.json b/samples/browser-headed/package.json new file mode 100644 index 00000000..d4d1ac54 --- /dev/null +++ b/samples/browser-headed/package.json @@ -0,0 +1,21 @@ +{ + "name": "basic", + "version": "1.0.0", + "description": "", + "author": "", + "license": "ISC", + "main": "index.js", + "scripts": { + "test": "vitest run" + }, + "dependencies": { + "birpc": "^0.2.2" + }, + "devDependencies": { + "@vitest/browser": "^2.1.8", + "@vitest/coverage-v8": "^2.1.8", + "playwright": "^1.47.0", + "vite": "^5.4.3", + "vitest": "^2.1.8" + } +} diff --git a/samples/browser-headed/pnpm-lock.yaml b/samples/browser-headed/pnpm-lock.yaml new file mode 100644 index 00000000..407dcb8f --- /dev/null +++ b/samples/browser-headed/pnpm-lock.yaml @@ -0,0 +1,1865 @@ +lockfileVersion: '9.0' + +settings: + autoInstallPeers: true + excludeLinksFromLockfile: false + +importers: + + .: + dependencies: + birpc: + specifier: ^0.2.2 + version: 0.2.19 + devDependencies: + '@vitest/browser': + specifier: ^2.1.8 + version: 2.1.9(playwright@1.50.1)(vite@5.4.14)(vitest@2.1.9) + '@vitest/coverage-v8': + specifier: ^2.1.8 + version: 2.1.9(@vitest/browser@2.1.9)(vitest@2.1.9) + playwright: + specifier: ^1.47.0 + version: 1.50.1 + vite: + specifier: ^5.4.3 + version: 5.4.14 + vitest: + specifier: ^2.1.8 + version: 2.1.9(@vitest/browser@2.1.9)(msw@2.7.0) + +packages: + + '@ampproject/remapping@2.3.0': + resolution: {integrity: sha512-30iZtAPgz+LTIYoeivqYo853f02jBYSd5uGnGpkFV0M3xOt9aN73erkgYAmZU43x4VfqcnLxW9Kpg3R5LC4YYw==} + engines: {node: '>=6.0.0'} + + '@babel/code-frame@7.26.2': + resolution: {integrity: sha512-RJlIHRueQgwWitWgF8OdFYGZX328Ax5BCemNGlqHfplnRT9ESi8JkFlvaVYbS+UubVY6dpv87Fs2u5M29iNFVQ==} + engines: {node: '>=6.9.0'} + + '@babel/helper-string-parser@7.25.9': + resolution: {integrity: sha512-4A/SCr/2KLd5jrtOMFzaKjVtAei3+2r/NChoBNoZ3EyP/+GlhoaEGoWOZUmFmoITP7zOJyHIMm+DYRd8o3PvHA==} + engines: {node: '>=6.9.0'} + + '@babel/helper-validator-identifier@7.25.9': + resolution: {integrity: sha512-Ed61U6XJc3CVRfkERJWDz4dJwKe7iLmmJsbOGu9wSloNSFttHV0I8g6UAgb7qnK5ly5bGLPd4oXZlxCdANBOWQ==} + engines: {node: '>=6.9.0'} + + '@babel/parser@7.26.8': + resolution: {integrity: sha512-TZIQ25pkSoaKEYYaHbbxkfL36GNsQ6iFiBbeuzAkLnXayKR1yP1zFe+NxuZWWsUyvt8icPU9CCq0sgWGXR1GEw==} + engines: {node: '>=6.0.0'} + hasBin: true + + '@babel/runtime@7.26.7': + resolution: {integrity: sha512-AOPI3D+a8dXnja+iwsUqGRjr1BbZIe771sXdapOtYI531gSqpi92vXivKcq2asu/DFpdl1ceFAKZyRzK2PCVcQ==} + engines: {node: '>=6.9.0'} + + '@babel/types@7.26.8': + resolution: {integrity: sha512-eUuWapzEGWFEpHFxgEaBG8e3n6S8L3MSu0oda755rOfabWPnh0Our1AozNFVUxGFIhbKgd1ksprsoDGMinTOTA==} + engines: {node: '>=6.9.0'} + + '@bcoe/v8-coverage@0.2.3': + resolution: {integrity: sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw==} + + '@bundled-es-modules/cookie@2.0.1': + resolution: {integrity: sha512-8o+5fRPLNbjbdGRRmJj3h6Hh1AQJf2dk3qQ/5ZFb+PXkRNiSoMGGUKlsgLfrxneb72axVJyIYji64E2+nNfYyw==} + + '@bundled-es-modules/statuses@1.0.1': + resolution: {integrity: sha512-yn7BklA5acgcBr+7w064fGV+SGIFySjCKpqjcWgBAIfrAkY+4GQTJJHQMeT3V/sgz23VTEVV8TtOmkvJAhFVfg==} + + '@bundled-es-modules/tough-cookie@0.1.6': + resolution: {integrity: sha512-dvMHbL464C0zI+Yqxbz6kZ5TOEp7GLW+pry/RWndAR8MJQAXZ2rPmIs8tziTZjeIyhSNZgZbCePtfSbdWqStJw==} + + '@esbuild/aix-ppc64@0.21.5': + resolution: {integrity: sha512-1SDgH6ZSPTlggy1yI6+Dbkiz8xzpHJEVAlF/AM1tHPLsf5STom9rwtjE4hKAF20FfXXNTFqEYXyJNWh1GiZedQ==} + engines: {node: '>=12'} + cpu: [ppc64] + os: [aix] + + '@esbuild/android-arm64@0.21.5': + resolution: {integrity: sha512-c0uX9VAUBQ7dTDCjq+wdyGLowMdtR/GoC2U5IYk/7D1H1JYC0qseD7+11iMP2mRLN9RcCMRcjC4YMclCzGwS/A==} + engines: {node: '>=12'} + cpu: [arm64] + os: [android] + + '@esbuild/android-arm@0.21.5': + resolution: {integrity: sha512-vCPvzSjpPHEi1siZdlvAlsPxXl7WbOVUBBAowWug4rJHb68Ox8KualB+1ocNvT5fjv6wpkX6o/iEpbDrf68zcg==} + engines: {node: '>=12'} + cpu: [arm] + os: [android] + + '@esbuild/android-x64@0.21.5': + resolution: {integrity: sha512-D7aPRUUNHRBwHxzxRvp856rjUHRFW1SdQATKXH2hqA0kAZb1hKmi02OpYRacl0TxIGz/ZmXWlbZgjwWYaCakTA==} + engines: {node: '>=12'} + cpu: [x64] + os: [android] + + '@esbuild/darwin-arm64@0.21.5': + resolution: {integrity: sha512-DwqXqZyuk5AiWWf3UfLiRDJ5EDd49zg6O9wclZ7kUMv2WRFr4HKjXp/5t8JZ11QbQfUS6/cRCKGwYhtNAY88kQ==} + engines: {node: '>=12'} + cpu: [arm64] + os: [darwin] + + '@esbuild/darwin-x64@0.21.5': + resolution: {integrity: sha512-se/JjF8NlmKVG4kNIuyWMV/22ZaerB+qaSi5MdrXtd6R08kvs2qCN4C09miupktDitvh8jRFflwGFBQcxZRjbw==} + engines: {node: '>=12'} + cpu: [x64] + os: [darwin] + + '@esbuild/freebsd-arm64@0.21.5': + resolution: {integrity: sha512-5JcRxxRDUJLX8JXp/wcBCy3pENnCgBR9bN6JsY4OmhfUtIHe3ZW0mawA7+RDAcMLrMIZaf03NlQiX9DGyB8h4g==} + engines: {node: '>=12'} + cpu: [arm64] + os: [freebsd] + + '@esbuild/freebsd-x64@0.21.5': + resolution: {integrity: sha512-J95kNBj1zkbMXtHVH29bBriQygMXqoVQOQYA+ISs0/2l3T9/kj42ow2mpqerRBxDJnmkUDCaQT/dfNXWX/ZZCQ==} + engines: {node: '>=12'} + cpu: [x64] + os: [freebsd] + + '@esbuild/linux-arm64@0.21.5': + resolution: {integrity: sha512-ibKvmyYzKsBeX8d8I7MH/TMfWDXBF3db4qM6sy+7re0YXya+K1cem3on9XgdT2EQGMu4hQyZhan7TeQ8XkGp4Q==} + engines: {node: '>=12'} + cpu: [arm64] + os: [linux] + + '@esbuild/linux-arm@0.21.5': + resolution: {integrity: sha512-bPb5AHZtbeNGjCKVZ9UGqGwo8EUu4cLq68E95A53KlxAPRmUyYv2D6F0uUI65XisGOL1hBP5mTronbgo+0bFcA==} + engines: {node: '>=12'} + cpu: [arm] + os: [linux] + + '@esbuild/linux-ia32@0.21.5': + resolution: {integrity: sha512-YvjXDqLRqPDl2dvRODYmmhz4rPeVKYvppfGYKSNGdyZkA01046pLWyRKKI3ax8fbJoK5QbxblURkwK/MWY18Tg==} + engines: {node: '>=12'} + cpu: [ia32] + os: [linux] + + '@esbuild/linux-loong64@0.21.5': + resolution: {integrity: sha512-uHf1BmMG8qEvzdrzAqg2SIG/02+4/DHB6a9Kbya0XDvwDEKCoC8ZRWI5JJvNdUjtciBGFQ5PuBlpEOXQj+JQSg==} + engines: {node: '>=12'} + cpu: [loong64] + os: [linux] + + '@esbuild/linux-mips64el@0.21.5': + resolution: {integrity: sha512-IajOmO+KJK23bj52dFSNCMsz1QP1DqM6cwLUv3W1QwyxkyIWecfafnI555fvSGqEKwjMXVLokcV5ygHW5b3Jbg==} + engines: {node: '>=12'} + cpu: [mips64el] + os: [linux] + + '@esbuild/linux-ppc64@0.21.5': + resolution: {integrity: sha512-1hHV/Z4OEfMwpLO8rp7CvlhBDnjsC3CttJXIhBi+5Aj5r+MBvy4egg7wCbe//hSsT+RvDAG7s81tAvpL2XAE4w==} + engines: {node: '>=12'} + cpu: [ppc64] + os: [linux] + + '@esbuild/linux-riscv64@0.21.5': + resolution: {integrity: sha512-2HdXDMd9GMgTGrPWnJzP2ALSokE/0O5HhTUvWIbD3YdjME8JwvSCnNGBnTThKGEB91OZhzrJ4qIIxk/SBmyDDA==} + engines: {node: '>=12'} + cpu: [riscv64] + os: [linux] + + '@esbuild/linux-s390x@0.21.5': + resolution: {integrity: sha512-zus5sxzqBJD3eXxwvjN1yQkRepANgxE9lgOW2qLnmr8ikMTphkjgXu1HR01K4FJg8h1kEEDAqDcZQtbrRnB41A==} + engines: {node: '>=12'} + cpu: [s390x] + os: [linux] + + '@esbuild/linux-x64@0.21.5': + resolution: {integrity: sha512-1rYdTpyv03iycF1+BhzrzQJCdOuAOtaqHTWJZCWvijKD2N5Xu0TtVC8/+1faWqcP9iBCWOmjmhoH94dH82BxPQ==} + engines: {node: '>=12'} + cpu: [x64] + os: [linux] + + '@esbuild/netbsd-x64@0.21.5': + resolution: {integrity: sha512-Woi2MXzXjMULccIwMnLciyZH4nCIMpWQAs049KEeMvOcNADVxo0UBIQPfSmxB3CWKedngg7sWZdLvLczpe0tLg==} + engines: {node: '>=12'} + cpu: [x64] + os: [netbsd] + + '@esbuild/openbsd-x64@0.21.5': + resolution: {integrity: sha512-HLNNw99xsvx12lFBUwoT8EVCsSvRNDVxNpjZ7bPn947b8gJPzeHWyNVhFsaerc0n3TsbOINvRP2byTZ5LKezow==} + engines: {node: '>=12'} + cpu: [x64] + os: [openbsd] + + '@esbuild/sunos-x64@0.21.5': + resolution: {integrity: sha512-6+gjmFpfy0BHU5Tpptkuh8+uw3mnrvgs+dSPQXQOv3ekbordwnzTVEb4qnIvQcYXq6gzkyTnoZ9dZG+D4garKg==} + engines: {node: '>=12'} + cpu: [x64] + os: [sunos] + + '@esbuild/win32-arm64@0.21.5': + resolution: {integrity: sha512-Z0gOTd75VvXqyq7nsl93zwahcTROgqvuAcYDUr+vOv8uHhNSKROyU961kgtCD1e95IqPKSQKH7tBTslnS3tA8A==} + engines: {node: '>=12'} + cpu: [arm64] + os: [win32] + + '@esbuild/win32-ia32@0.21.5': + resolution: {integrity: sha512-SWXFF1CL2RVNMaVs+BBClwtfZSvDgtL//G/smwAc5oVK/UPu2Gu9tIaRgFmYFFKrmg3SyAjSrElf0TiJ1v8fYA==} + engines: {node: '>=12'} + cpu: [ia32] + os: [win32] + + '@esbuild/win32-x64@0.21.5': + resolution: {integrity: sha512-tQd/1efJuzPC6rCFwEvLtci/xNFcTZknmXs98FYDfGE4wP9ClFV98nyKrzJKVPMhdDnjzLhdUyMX4PsQAPjwIw==} + engines: {node: '>=12'} + cpu: [x64] + os: [win32] + + '@inquirer/confirm@5.1.5': + resolution: {integrity: sha512-ZB2Cz8KeMINUvoeDi7IrvghaVkYT2RB0Zb31EaLWOE87u276w4wnApv0SH2qWaJ3r0VSUa3BIuz7qAV2ZvsZlg==} + engines: {node: '>=18'} + peerDependencies: + '@types/node': '>=18' + peerDependenciesMeta: + '@types/node': + optional: true + + '@inquirer/core@10.1.6': + resolution: {integrity: sha512-Bwh/Zk6URrHwZnSSzAZAKH7YgGYi0xICIBDFOqBQoXNNAzBHw/bgXgLmChfp+GyR3PnChcTbiCTZGC6YJNJkMA==} + engines: {node: '>=18'} + peerDependencies: + '@types/node': '>=18' + peerDependenciesMeta: + '@types/node': + optional: true + + '@inquirer/figures@1.0.10': + resolution: {integrity: sha512-Ey6176gZmeqZuY/W/nZiUyvmb1/qInjcpiZjXWi6nON+nxJpD1bxtSoBxNliGISae32n6OwbY+TSXPZ1CfS4bw==} + engines: {node: '>=18'} + + '@inquirer/type@3.0.4': + resolution: {integrity: sha512-2MNFrDY8jkFYc9Il9DgLsHhMzuHnOYM1+CUYVWbzu9oT0hC7V7EcYvdCKeoll/Fcci04A+ERZ9wcc7cQ8lTkIA==} + engines: {node: '>=18'} + peerDependencies: + '@types/node': '>=18' + peerDependenciesMeta: + '@types/node': + optional: true + + '@isaacs/cliui@8.0.2': + resolution: {integrity: sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==} + engines: {node: '>=12'} + + '@istanbuljs/schema@0.1.3': + resolution: {integrity: sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA==} + engines: {node: '>=8'} + + '@jridgewell/gen-mapping@0.3.8': + resolution: {integrity: sha512-imAbBGkb+ebQyxKgzv5Hu2nmROxoDOXHh80evxdoXNOrvAnVx7zimzc1Oo5h9RlfV4vPXaE2iM5pOFbvOCClWA==} + engines: {node: '>=6.0.0'} + + '@jridgewell/resolve-uri@3.1.2': + resolution: {integrity: sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==} + engines: {node: '>=6.0.0'} + + '@jridgewell/set-array@1.2.1': + resolution: {integrity: sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A==} + engines: {node: '>=6.0.0'} + + '@jridgewell/sourcemap-codec@1.5.0': + resolution: {integrity: sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ==} + + '@jridgewell/trace-mapping@0.3.25': + resolution: {integrity: sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==} + + '@mswjs/interceptors@0.37.6': + resolution: {integrity: sha512-wK+5pLK5XFmgtH3aQ2YVvA3HohS3xqV/OxuVOdNx9Wpnz7VE/fnC+e1A7ln6LFYeck7gOJ/dsZV6OLplOtAJ2w==} + engines: {node: '>=18'} + + '@open-draft/deferred-promise@2.2.0': + resolution: {integrity: sha512-CecwLWx3rhxVQF6V4bAgPS5t+So2sTbPgAzafKkVizyi7tlwpcFpdFqq+wqF2OwNBmqFuu6tOyouTuxgpMfzmA==} + + '@open-draft/logger@0.3.0': + resolution: {integrity: sha512-X2g45fzhxH238HKO4xbSr7+wBS8Fvw6ixhTDuvLd5mqh6bJJCFAPwU9mPDxbcrRtfxv4u5IHCEH77BmxvXmmxQ==} + + '@open-draft/until@2.1.0': + resolution: {integrity: sha512-U69T3ItWHvLwGg5eJ0n3I62nWuE6ilHlmz7zM0npLBRvPRd7e6NYmg54vvRtP5mZG7kZqZCFVdsTWo7BPtBujg==} + + '@pkgjs/parseargs@0.11.0': + resolution: {integrity: sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==} + engines: {node: '>=14'} + + '@polka/url@1.0.0-next.28': + resolution: {integrity: sha512-8LduaNlMZGwdZ6qWrKlfa+2M4gahzFkprZiAt2TF8uS0qQgBizKXpXURqvTJ4WtmupWxaLqjRb2UCTe72mu+Aw==} + + '@rollup/rollup-android-arm-eabi@4.34.6': + resolution: {integrity: sha512-+GcCXtOQoWuC7hhX1P00LqjjIiS/iOouHXhMdiDSnq/1DGTox4SpUvO52Xm+div6+106r+TcvOeo/cxvyEyTgg==} + cpu: [arm] + os: [android] + + '@rollup/rollup-android-arm64@4.34.6': + resolution: {integrity: sha512-E8+2qCIjciYUnCa1AiVF1BkRgqIGW9KzJeesQqVfyRITGQN+dFuoivO0hnro1DjT74wXLRZ7QF8MIbz+luGaJA==} + cpu: [arm64] + os: [android] + + '@rollup/rollup-darwin-arm64@4.34.6': + resolution: {integrity: sha512-z9Ib+OzqN3DZEjX7PDQMHEhtF+t6Mi2z/ueChQPLS/qUMKY7Ybn5A2ggFoKRNRh1q1T03YTQfBTQCJZiepESAg==} + cpu: [arm64] + os: [darwin] + + '@rollup/rollup-darwin-x64@4.34.6': + resolution: {integrity: sha512-PShKVY4u0FDAR7jskyFIYVyHEPCPnIQY8s5OcXkdU8mz3Y7eXDJPdyM/ZWjkYdR2m0izD9HHWA8sGcXn+Qrsyg==} + cpu: [x64] + os: [darwin] + + '@rollup/rollup-freebsd-arm64@4.34.6': + resolution: {integrity: sha512-YSwyOqlDAdKqs0iKuqvRHLN4SrD2TiswfoLfvYXseKbL47ht1grQpq46MSiQAx6rQEN8o8URtpXARCpqabqxGQ==} + cpu: [arm64] + os: [freebsd] + + '@rollup/rollup-freebsd-x64@4.34.6': + resolution: {integrity: sha512-HEP4CgPAY1RxXwwL5sPFv6BBM3tVeLnshF03HMhJYCNc6kvSqBgTMmsEjb72RkZBAWIqiPUyF1JpEBv5XT9wKQ==} + cpu: [x64] + os: [freebsd] + + '@rollup/rollup-linux-arm-gnueabihf@4.34.6': + resolution: {integrity: sha512-88fSzjC5xeH9S2Vg3rPgXJULkHcLYMkh8faix8DX4h4TIAL65ekwuQMA/g2CXq8W+NJC43V6fUpYZNjaX3+IIg==} + cpu: [arm] + os: [linux] + + '@rollup/rollup-linux-arm-musleabihf@4.34.6': + resolution: {integrity: sha512-wM4ztnutBqYFyvNeR7Av+reWI/enK9tDOTKNF+6Kk2Q96k9bwhDDOlnCUNRPvromlVXo04riSliMBs/Z7RteEg==} + cpu: [arm] + os: [linux] + + '@rollup/rollup-linux-arm64-gnu@4.34.6': + resolution: {integrity: sha512-9RyprECbRa9zEjXLtvvshhw4CMrRa3K+0wcp3KME0zmBe1ILmvcVHnypZ/aIDXpRyfhSYSuN4EPdCCj5Du8FIA==} + cpu: [arm64] + os: [linux] + + '@rollup/rollup-linux-arm64-musl@4.34.6': + resolution: {integrity: sha512-qTmklhCTyaJSB05S+iSovfo++EwnIEZxHkzv5dep4qoszUMX5Ca4WM4zAVUMbfdviLgCSQOu5oU8YoGk1s6M9Q==} + cpu: [arm64] + os: [linux] + + '@rollup/rollup-linux-loongarch64-gnu@4.34.6': + resolution: {integrity: sha512-4Qmkaps9yqmpjY5pvpkfOerYgKNUGzQpFxV6rnS7c/JfYbDSU0y6WpbbredB5cCpLFGJEqYX40WUmxMkwhWCjw==} + cpu: [loong64] + os: [linux] + + '@rollup/rollup-linux-powerpc64le-gnu@4.34.6': + resolution: {integrity: sha512-Zsrtux3PuaxuBTX/zHdLaFmcofWGzaWW1scwLU3ZbW/X+hSsFbz9wDIp6XvnT7pzYRl9MezWqEqKy7ssmDEnuQ==} + cpu: [ppc64] + os: [linux] + + '@rollup/rollup-linux-riscv64-gnu@4.34.6': + resolution: {integrity: sha512-aK+Zp+CRM55iPrlyKiU3/zyhgzWBxLVrw2mwiQSYJRobCURb781+XstzvA8Gkjg/hbdQFuDw44aUOxVQFycrAg==} + cpu: [riscv64] + os: [linux] + + '@rollup/rollup-linux-s390x-gnu@4.34.6': + resolution: {integrity: sha512-WoKLVrY9ogmaYPXwTH326+ErlCIgMmsoRSx6bO+l68YgJnlOXhygDYSZe/qbUJCSiCiZAQ+tKm88NcWuUXqOzw==} + cpu: [s390x] + os: [linux] + + '@rollup/rollup-linux-x64-gnu@4.34.6': + resolution: {integrity: sha512-Sht4aFvmA4ToHd2vFzwMFaQCiYm2lDFho5rPcvPBT5pCdC+GwHG6CMch4GQfmWTQ1SwRKS0dhDYb54khSrjDWw==} + cpu: [x64] + os: [linux] + + '@rollup/rollup-linux-x64-musl@4.34.6': + resolution: {integrity: sha512-zmmpOQh8vXc2QITsnCiODCDGXFC8LMi64+/oPpPx5qz3pqv0s6x46ps4xoycfUiVZps5PFn1gksZzo4RGTKT+A==} + cpu: [x64] + os: [linux] + + '@rollup/rollup-win32-arm64-msvc@4.34.6': + resolution: {integrity: sha512-3/q1qUsO/tLqGBaD4uXsB6coVGB3usxw3qyeVb59aArCgedSF66MPdgRStUd7vbZOsko/CgVaY5fo2vkvPLWiA==} + cpu: [arm64] + os: [win32] + + '@rollup/rollup-win32-ia32-msvc@4.34.6': + resolution: {integrity: sha512-oLHxuyywc6efdKVTxvc0135zPrRdtYVjtVD5GUm55I3ODxhU/PwkQFD97z16Xzxa1Fz0AEe4W/2hzRtd+IfpOA==} + cpu: [ia32] + os: [win32] + + '@rollup/rollup-win32-x64-msvc@4.34.6': + resolution: {integrity: sha512-0PVwmgzZ8+TZ9oGBmdZoQVXflbvuwzN/HRclujpl4N/q3i+y0lqLw8n1bXA8ru3sApDjlmONaNAuYr38y1Kr9w==} + cpu: [x64] + os: [win32] + + '@testing-library/dom@10.4.0': + resolution: {integrity: sha512-pemlzrSESWbdAloYml3bAJMEfNh1Z7EduzqPKprCH5S341frlpYnUEW0H72dLxa6IsYr+mPno20GiSm+h9dEdQ==} + engines: {node: '>=18'} + + '@testing-library/user-event@14.6.1': + resolution: {integrity: sha512-vq7fv0rnt+QTXgPxr5Hjc210p6YKq2kmdziLgnsZGgLJ9e6VAShx1pACLuRjd/AS/sr7phAR58OIIpf0LlmQNw==} + engines: {node: '>=12', npm: '>=6'} + peerDependencies: + '@testing-library/dom': '>=7.21.4' + + '@types/aria-query@5.0.4': + resolution: {integrity: sha512-rfT93uj5s0PRL7EzccGMs3brplhcrghnDoV26NqKhCAS1hVo+WdNsPvE/yb6ilfr5hi2MEk6d5EWJTKdxg8jVw==} + + '@types/cookie@0.6.0': + resolution: {integrity: sha512-4Kh9a6B2bQciAhf7FSuMRRkUWecJgJu9nPnx3yzpsfXX/c50REIqpHY4C82bXP90qrLtXtkDxTZosYO3UpOwlA==} + + '@types/estree@1.0.6': + resolution: {integrity: sha512-AYnb1nQyY49te+VRAVgmzfcgjYS91mY5P0TKUDCLEM+gNnA+3T6rWITXRLYCpahpqSQbN5cE+gHpnPyXjHWxcw==} + + '@types/statuses@2.0.5': + resolution: {integrity: sha512-jmIUGWrAiwu3dZpxntxieC+1n/5c3mjrImkmOSQ2NC5uP6cYO4aAZDdSmRcI5C1oiTmqlZGHC+/NmJrKogbP5A==} + + '@types/tough-cookie@4.0.5': + resolution: {integrity: sha512-/Ad8+nIOV7Rl++6f1BdKxFSMgmoqEoYbHRpPcx3JEfv8VRsQe9Z4mCXeJBzxs7mbHY/XOZZuXlRNfhpVPbs6ZA==} + + '@vitest/browser@2.1.9': + resolution: {integrity: sha512-AHDanTP4Ed6J5R6wRBcWRQ+AxgMnNJxsbaa229nFQz5KOMFZqlW11QkIDoLgCjBOpQ1+c78lTN5jVxO8ME+S4w==} + peerDependencies: + playwright: '*' + safaridriver: '*' + vitest: 2.1.9 + webdriverio: '*' + peerDependenciesMeta: + playwright: + optional: true + safaridriver: + optional: true + webdriverio: + optional: true + + '@vitest/coverage-v8@2.1.9': + resolution: {integrity: sha512-Z2cOr0ksM00MpEfyVE8KXIYPEcBFxdbLSs56L8PO0QQMxt/6bDj45uQfxoc96v05KW3clk7vvgP0qfDit9DmfQ==} + peerDependencies: + '@vitest/browser': 2.1.9 + vitest: 2.1.9 + peerDependenciesMeta: + '@vitest/browser': + optional: true + + '@vitest/expect@2.1.9': + resolution: {integrity: sha512-UJCIkTBenHeKT1TTlKMJWy1laZewsRIzYighyYiJKZreqtdxSos/S1t+ktRMQWu2CKqaarrkeszJx1cgC5tGZw==} + + '@vitest/mocker@2.1.9': + resolution: {integrity: sha512-tVL6uJgoUdi6icpxmdrn5YNo3g3Dxv+IHJBr0GXHaEdTcw3F+cPKnsXFhli6nO+f/6SDKPHEK1UN+k+TQv0Ehg==} + peerDependencies: + msw: ^2.4.9 + vite: ^5.0.0 + peerDependenciesMeta: + msw: + optional: true + vite: + optional: true + + '@vitest/pretty-format@2.1.9': + resolution: {integrity: sha512-KhRIdGV2U9HOUzxfiHmY8IFHTdqtOhIzCpd8WRdJiE7D/HUcZVD0EgQCVjm+Q9gkUXWgBvMmTtZgIG48wq7sOQ==} + + '@vitest/runner@2.1.9': + resolution: {integrity: sha512-ZXSSqTFIrzduD63btIfEyOmNcBmQvgOVsPNPe0jYtESiXkhd8u2erDLnMxmGrDCwHCCHE7hxwRDCT3pt0esT4g==} + + '@vitest/snapshot@2.1.9': + resolution: {integrity: sha512-oBO82rEjsxLNJincVhLhaxxZdEtV0EFHMK5Kmx5sJ6H9L183dHECjiefOAdnqpIgT5eZwT04PoggUnW88vOBNQ==} + + '@vitest/spy@2.1.9': + resolution: {integrity: sha512-E1B35FwzXXTs9FHNK6bDszs7mtydNi5MIfUWpceJ8Xbfb1gBMscAnwLbEu+B44ed6W3XjL9/ehLPHR1fkf1KLQ==} + + '@vitest/utils@2.1.9': + resolution: {integrity: sha512-v0psaMSkNJ3A2NMrUEHFRzJtDPFn+/VWZ5WxImB21T9fjucJRmS7xCS3ppEnARb9y11OAzaD+P2Ps+b+BGX5iQ==} + + ansi-escapes@4.3.2: + resolution: {integrity: sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==} + engines: {node: '>=8'} + + ansi-regex@5.0.1: + resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==} + engines: {node: '>=8'} + + ansi-regex@6.1.0: + resolution: {integrity: sha512-7HSX4QQb4CspciLpVFwyRe79O3xsIZDDLER21kERQ71oaPodF8jL725AgJMFAYbooIqolJoRLuM81SpeUkpkvA==} + engines: {node: '>=12'} + + ansi-styles@4.3.0: + resolution: {integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==} + engines: {node: '>=8'} + + ansi-styles@5.2.0: + resolution: {integrity: sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==} + engines: {node: '>=10'} + + ansi-styles@6.2.1: + resolution: {integrity: sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==} + engines: {node: '>=12'} + + aria-query@5.3.0: + resolution: {integrity: sha512-b0P0sZPKtyu8HkeRAfCq0IfURZK+SuwMjY1UXGBU27wpAiTwQAIlq56IbIO+ytk/JjS1fMR14ee5WBBfKi5J6A==} + + assertion-error@2.0.1: + resolution: {integrity: sha512-Izi8RQcffqCeNVgFigKli1ssklIbpHnCYc6AknXGYoB6grJqyeby7jv12JUQgmTAnIDnbck1uxksT4dzN3PWBA==} + engines: {node: '>=12'} + + balanced-match@1.0.2: + resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==} + + birpc@0.2.19: + resolution: {integrity: sha512-5WeXXAvTmitV1RqJFppT5QtUiz2p1mRSYU000Jkft5ZUCLJIk4uQriYNO50HknxKwM6jd8utNc66K1qGIwwWBQ==} + + brace-expansion@2.0.1: + resolution: {integrity: sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==} + + cac@6.7.14: + resolution: {integrity: sha512-b6Ilus+c3RrdDk+JhLKUAQfzzgLEPy6wcXqS7f/xe1EETvsDP6GORG7SFuOs6cID5YkqchW/LXZbX5bc8j7ZcQ==} + engines: {node: '>=8'} + + chai@5.1.2: + resolution: {integrity: sha512-aGtmf24DW6MLHHG5gCx4zaI3uBq3KRtxeVs0DjFH6Z0rDNbsvTxFASFvdj79pxjxZ8/5u3PIiN3IwEIQkiiuPw==} + engines: {node: '>=12'} + + chalk@4.1.2: + resolution: {integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==} + engines: {node: '>=10'} + + check-error@2.1.1: + resolution: {integrity: sha512-OAlb+T7V4Op9OwdkjmguYRqncdlx5JiofwOAUkmTF+jNdHwzTaTs4sRAGpzLF3oOz5xAyDGrPgeIDFQmDOTiJw==} + engines: {node: '>= 16'} + + cli-width@4.1.0: + resolution: {integrity: sha512-ouuZd4/dm2Sw5Gmqy6bGyNNNe1qt9RpmxveLSO7KcgsTnU7RXfsw+/bukWGo1abgBiMAic068rclZsO4IWmmxQ==} + engines: {node: '>= 12'} + + cliui@8.0.1: + resolution: {integrity: sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==} + engines: {node: '>=12'} + + color-convert@2.0.1: + resolution: {integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==} + engines: {node: '>=7.0.0'} + + color-name@1.1.4: + resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==} + + cookie@0.7.2: + resolution: {integrity: sha512-yki5XnKuf750l50uGTllt6kKILY4nQ1eNIQatoXEByZ5dWgnKqbnqmTrBE5B4N7lrMJKQ2ytWMiTO2o0v6Ew/w==} + engines: {node: '>= 0.6'} + + cross-spawn@7.0.6: + resolution: {integrity: sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==} + engines: {node: '>= 8'} + + debug@4.4.0: + resolution: {integrity: sha512-6WTZ/IxCY/T6BALoZHaE4ctp9xm+Z5kY/pzYaCHRFeyVhojxlrm+46y68HA6hr0TcwEssoxNiDEUJQjfPZ/RYA==} + engines: {node: '>=6.0'} + peerDependencies: + supports-color: '*' + peerDependenciesMeta: + supports-color: + optional: true + + deep-eql@5.0.2: + resolution: {integrity: sha512-h5k/5U50IJJFpzfL6nO9jaaumfjO/f2NjK/oYB2Djzm4p9L+3T9qWpZqZ2hAbLPuuYq9wrU08WQyBTL5GbPk5Q==} + engines: {node: '>=6'} + + dequal@2.0.3: + resolution: {integrity: sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA==} + engines: {node: '>=6'} + + dom-accessibility-api@0.5.16: + resolution: {integrity: sha512-X7BJ2yElsnOJ30pZF4uIIDfBEVgF4XEBxL9Bxhy6dnrm5hkzqmsWHGTiHqRiITNhMyFLyAiWndIJP7Z1NTteDg==} + + eastasianwidth@0.2.0: + resolution: {integrity: sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==} + + emoji-regex@8.0.0: + resolution: {integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==} + + emoji-regex@9.2.2: + resolution: {integrity: sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==} + + es-module-lexer@1.6.0: + resolution: {integrity: sha512-qqnD1yMU6tk/jnaMosogGySTZP8YtUgAffA9nMN+E/rjxcfRQ6IEk7IiozUjgxKoFHBGjTLnrHB/YC45r/59EQ==} + + esbuild@0.21.5: + resolution: {integrity: sha512-mg3OPMV4hXywwpoDxu3Qda5xCKQi+vCTZq8S9J/EpkhB2HzKXq4SNFZE3+NK93JYxc8VMSep+lOUSC/RVKaBqw==} + engines: {node: '>=12'} + hasBin: true + + escalade@3.2.0: + resolution: {integrity: sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==} + engines: {node: '>=6'} + + estree-walker@3.0.3: + resolution: {integrity: sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g==} + + expect-type@1.1.0: + resolution: {integrity: sha512-bFi65yM+xZgk+u/KRIpekdSYkTB5W1pEf0Lt8Q8Msh7b+eQ7LXVtIB1Bkm4fvclDEL1b2CZkMhv2mOeF8tMdkA==} + engines: {node: '>=12.0.0'} + + foreground-child@3.3.0: + resolution: {integrity: sha512-Ld2g8rrAyMYFXBhEqMz8ZAHBi4J4uS1i/CxGMDnjyFWddMXLVcDp051DZfu+t7+ab7Wv6SMqpWmyFIj5UbfFvg==} + engines: {node: '>=14'} + + fsevents@2.3.2: + resolution: {integrity: sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==} + engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0} + os: [darwin] + + fsevents@2.3.3: + resolution: {integrity: sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==} + engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0} + os: [darwin] + + get-caller-file@2.0.5: + resolution: {integrity: sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==} + engines: {node: 6.* || 8.* || >= 10.*} + + glob@10.4.5: + resolution: {integrity: sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg==} + hasBin: true + + graphql@16.10.0: + resolution: {integrity: sha512-AjqGKbDGUFRKIRCP9tCKiIGHyriz2oHEbPIbEtcSLSs4YjReZOIPQQWek4+6hjw62H9QShXHyaGivGiYVLeYFQ==} + engines: {node: ^12.22.0 || ^14.16.0 || ^16.0.0 || >=17.0.0} + + has-flag@4.0.0: + resolution: {integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==} + engines: {node: '>=8'} + + headers-polyfill@4.0.3: + resolution: {integrity: sha512-IScLbePpkvO846sIwOtOTDjutRMWdXdJmXdMvk6gCBHxFO8d+QKOQedyZSxFTTFYRSmlgSTDtXqqq4pcenBXLQ==} + + html-escaper@2.0.2: + resolution: {integrity: sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==} + + is-fullwidth-code-point@3.0.0: + resolution: {integrity: sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==} + engines: {node: '>=8'} + + is-node-process@1.2.0: + resolution: {integrity: sha512-Vg4o6/fqPxIjtxgUH5QLJhwZ7gW5diGCVlXpuUfELC62CuxM1iHcRe51f2W1FDy04Ai4KJkagKjx3XaqyfRKXw==} + + isexe@2.0.0: + resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==} + + istanbul-lib-coverage@3.2.2: + resolution: {integrity: sha512-O8dpsF+r0WV/8MNRKfnmrtCWhuKjxrq2w+jpzBL5UZKTi2LeVWnWOmWRxFlesJONmc+wLAGvKQZEOanko0LFTg==} + engines: {node: '>=8'} + + istanbul-lib-report@3.0.1: + resolution: {integrity: sha512-GCfE1mtsHGOELCU8e/Z7YWzpmybrx/+dSTfLrvY8qRmaY6zXTKWn6WQIjaAFw069icm6GVMNkgu0NzI4iPZUNw==} + engines: {node: '>=10'} + + istanbul-lib-source-maps@5.0.6: + resolution: {integrity: sha512-yg2d+Em4KizZC5niWhQaIomgf5WlL4vOOjZ5xGCmF8SnPE/mDWWXgvRExdcpCgh9lLRRa1/fSYp2ymmbJ1pI+A==} + engines: {node: '>=10'} + + istanbul-reports@3.1.7: + resolution: {integrity: sha512-BewmUXImeuRk2YY0PVbxgKAysvhRPUQE0h5QRM++nVWyubKGV0l8qQ5op8+B2DOmwSe63Jivj0BjkPQVf8fP5g==} + engines: {node: '>=8'} + + jackspeak@3.4.3: + resolution: {integrity: sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw==} + + js-tokens@4.0.0: + resolution: {integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==} + + loupe@3.1.3: + resolution: {integrity: sha512-kkIp7XSkP78ZxJEsSxW3712C6teJVoeHHwgo9zJ380de7IYyJ2ISlxojcH2pC5OFLewESmnRi/+XCDIEEVyoug==} + + lru-cache@10.4.3: + resolution: {integrity: sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==} + + lz-string@1.5.0: + resolution: {integrity: sha512-h5bgJWpxJNswbU7qCrV0tIKQCaS3blPDrqKWx+QxzuzL1zGUzij9XCWLrSLsJPu5t+eWA/ycetzYAO5IOMcWAQ==} + hasBin: true + + magic-string@0.30.17: + resolution: {integrity: sha512-sNPKHvyjVf7gyjwS4xGTaW/mCnF8wnjtifKBEhxfZ7E/S8tQ0rssrwGNn6q8JH/ohItJfSQp9mBtQYuTlH5QnA==} + + magicast@0.3.5: + resolution: {integrity: sha512-L0WhttDl+2BOsybvEOLK7fW3UA0OQ0IQ2d6Zl2x/a6vVRs3bAY0ECOSHHeL5jD+SbOpOCUEi0y1DgHEn9Qn1AQ==} + + make-dir@4.0.0: + resolution: {integrity: sha512-hXdUTZYIVOt1Ex//jAQi+wTZZpUpwBj/0QsOzqegb3rGMMeJiSEu5xLHnYfBrRV4RH2+OCSOO95Is/7x1WJ4bw==} + engines: {node: '>=10'} + + minimatch@9.0.5: + resolution: {integrity: sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==} + engines: {node: '>=16 || 14 >=14.17'} + + minipass@7.1.2: + resolution: {integrity: sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==} + engines: {node: '>=16 || 14 >=14.17'} + + mrmime@2.0.0: + resolution: {integrity: sha512-eu38+hdgojoyq63s+yTpN4XMBdt5l8HhMhc4VKLO9KM5caLIBvUm4thi7fFaxyTmCKeNnXZ5pAlBwCUnhA09uw==} + engines: {node: '>=10'} + + ms@2.1.3: + resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==} + + msw@2.7.0: + resolution: {integrity: sha512-BIodwZ19RWfCbYTxWTUfTXc+sg4OwjCAgxU1ZsgmggX/7S3LdUifsbUPJs61j0rWb19CZRGY5if77duhc0uXzw==} + engines: {node: '>=18'} + hasBin: true + peerDependencies: + typescript: '>= 4.8.x' + peerDependenciesMeta: + typescript: + optional: true + + mute-stream@2.0.0: + resolution: {integrity: sha512-WWdIxpyjEn+FhQJQQv9aQAYlHoNVdzIzUySNV1gHUPDSdZJ3yZn7pAAbQcV7B56Mvu881q9FZV+0Vx2xC44VWA==} + engines: {node: ^18.17.0 || >=20.5.0} + + nanoid@3.3.8: + resolution: {integrity: sha512-WNLf5Sd8oZxOm+TzppcYk8gVOgP+l58xNy58D0nbUnOxOWRWvlcCV4kUF7ltmI6PsrLl/BgKEyS4mqsGChFN0w==} + engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} + hasBin: true + + outvariant@1.4.3: + resolution: {integrity: sha512-+Sl2UErvtsoajRDKCE5/dBz4DIvHXQQnAxtQTF04OJxY0+DyZXSo5P5Bb7XYWOh81syohlYL24hbDwxedPUJCA==} + + package-json-from-dist@1.0.1: + resolution: {integrity: sha512-UEZIS3/by4OC8vL3P2dTXRETpebLI2NiI5vIrjaD/5UtrkFX/tNbwjTSRAGC/+7CAo2pIcBaRgWmcBBHcsaCIw==} + + path-key@3.1.1: + resolution: {integrity: sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==} + engines: {node: '>=8'} + + path-scurry@1.11.1: + resolution: {integrity: sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA==} + engines: {node: '>=16 || 14 >=14.18'} + + path-to-regexp@6.3.0: + resolution: {integrity: sha512-Yhpw4T9C6hPpgPeA28us07OJeqZ5EzQTkbfwuhsUg0c237RomFoETJgmp2sa3F/41gfLE6G5cqcYwznmeEeOlQ==} + + pathe@1.1.2: + resolution: {integrity: sha512-whLdWMYL2TwI08hn8/ZqAbrVemu0LNaNNJZX73O6qaIdCTfXutsLhMkjdENX0qhsQ9uIimo4/aQOmXkoon2nDQ==} + + pathval@2.0.0: + resolution: {integrity: sha512-vE7JKRyES09KiunauX7nd2Q9/L7lhok4smP9RZTDeD4MVs72Dp2qNFVz39Nz5a0FVEW0BJR6C0DYrq6unoziZA==} + engines: {node: '>= 14.16'} + + picocolors@1.1.1: + resolution: {integrity: sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==} + + playwright-core@1.50.1: + resolution: {integrity: sha512-ra9fsNWayuYumt+NiM069M6OkcRb1FZSK8bgi66AtpFoWkg2+y0bJSNmkFrWhMbEBbVKC/EruAHH3g0zmtwGmQ==} + engines: {node: '>=18'} + hasBin: true + + playwright@1.50.1: + resolution: {integrity: sha512-G8rwsOQJ63XG6BbKj2w5rHeavFjy5zynBA9zsJMMtBoe/Uf757oG12NXz6e6OirF7RCrTVAKFXbLmn1RbL7Qaw==} + engines: {node: '>=18'} + hasBin: true + + postcss@8.5.2: + resolution: {integrity: sha512-MjOadfU3Ys9KYoX0AdkBlFEF1Vx37uCCeN4ZHnmwm9FfpbsGWMZeBLMmmpY+6Ocqod7mkdZ0DT31OlbsFrLlkA==} + engines: {node: ^10 || ^12 || >=14} + + pretty-format@27.5.1: + resolution: {integrity: sha512-Qb1gy5OrP5+zDf2Bvnzdl3jsTf1qXVMazbvCoKhtKqVs4/YK4ozX4gKQJJVyNe+cajNPn0KoC0MC3FUmaHWEmQ==} + engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} + + psl@1.15.0: + resolution: {integrity: sha512-JZd3gMVBAVQkSs6HdNZo9Sdo0LNcQeMNP3CozBJb3JYC/QUYZTnKxP+f8oWRX4rHP5EurWxqAHTSwUCjlNKa1w==} + + punycode@2.3.1: + resolution: {integrity: sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==} + engines: {node: '>=6'} + + querystringify@2.2.0: + resolution: {integrity: sha512-FIqgj2EUvTa7R50u0rGsyTftzjYmv/a3hO345bZNrqabNqjtgiDMgmo4mkUjd+nzU5oF3dClKqFIPUKybUyqoQ==} + + react-is@17.0.2: + resolution: {integrity: sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w==} + + regenerator-runtime@0.14.1: + resolution: {integrity: sha512-dYnhHh0nJoMfnkZs6GmmhFknAGRrLznOu5nc9ML+EJxGvrx6H7teuevqVqCuPcPK//3eDrrjQhehXVx9cnkGdw==} + + require-directory@2.1.1: + resolution: {integrity: sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==} + engines: {node: '>=0.10.0'} + + requires-port@1.0.0: + resolution: {integrity: sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ==} + + rollup@4.34.6: + resolution: {integrity: sha512-wc2cBWqJgkU3Iz5oztRkQbfVkbxoz5EhnCGOrnJvnLnQ7O0WhQUYyv18qQI79O8L7DdHrrlJNeCHd4VGpnaXKQ==} + engines: {node: '>=18.0.0', npm: '>=8.0.0'} + hasBin: true + + semver@7.7.1: + resolution: {integrity: sha512-hlq8tAfn0m/61p4BVRcPzIGr6LKiMwo4VM6dGi6pt4qcRkmNzTcWq6eCEjEh+qXjkMDvPlOFFSGwQjoEa6gyMA==} + engines: {node: '>=10'} + hasBin: true + + shebang-command@2.0.0: + resolution: {integrity: sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==} + engines: {node: '>=8'} + + shebang-regex@3.0.0: + resolution: {integrity: sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==} + engines: {node: '>=8'} + + siginfo@2.0.0: + resolution: {integrity: sha512-ybx0WO1/8bSBLEWXZvEd7gMW3Sn3JFlW3TvX1nREbDLRNQNaeNN8WK0meBwPdAaOI7TtRRRJn/Es1zhrrCHu7g==} + + signal-exit@4.1.0: + resolution: {integrity: sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==} + engines: {node: '>=14'} + + sirv@3.0.0: + resolution: {integrity: sha512-BPwJGUeDaDCHihkORDchNyyTvWFhcusy1XMmhEVTQTwGeybFbp8YEmB+njbPnth1FibULBSBVwCQni25XlCUDg==} + engines: {node: '>=18'} + + source-map-js@1.2.1: + resolution: {integrity: sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==} + engines: {node: '>=0.10.0'} + + stackback@0.0.2: + resolution: {integrity: sha512-1XMJE5fQo1jGH6Y/7ebnwPOBEkIEnT4QF32d5R1+VXdXveM0IBMJt8zfaxX1P3QhVwrYe+576+jkANtSS2mBbw==} + + statuses@2.0.1: + resolution: {integrity: sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==} + engines: {node: '>= 0.8'} + + std-env@3.8.0: + resolution: {integrity: sha512-Bc3YwwCB+OzldMxOXJIIvC6cPRWr/LxOp48CdQTOkPyk/t4JWWJbrilwBd7RJzKV8QW7tJkcgAmeuLLJugl5/w==} + + strict-event-emitter@0.5.1: + resolution: {integrity: sha512-vMgjE/GGEPEFnhFub6pa4FmJBRBVOLpIII2hvCZ8Kzb7K0hlHo7mQv6xYrBvCL2LtAIBwFUK8wvuJgTVSQ5MFQ==} + + string-width@4.2.3: + resolution: {integrity: sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==} + engines: {node: '>=8'} + + string-width@5.1.2: + resolution: {integrity: sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==} + engines: {node: '>=12'} + + strip-ansi@6.0.1: + resolution: {integrity: sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==} + engines: {node: '>=8'} + + strip-ansi@7.1.0: + resolution: {integrity: sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==} + engines: {node: '>=12'} + + supports-color@7.2.0: + resolution: {integrity: sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==} + engines: {node: '>=8'} + + test-exclude@7.0.1: + resolution: {integrity: sha512-pFYqmTw68LXVjeWJMST4+borgQP2AyMNbg1BpZh9LbyhUeNkeaPF9gzfPGUAnSMV3qPYdWUwDIjjCLiSDOl7vg==} + engines: {node: '>=18'} + + tinybench@2.9.0: + resolution: {integrity: sha512-0+DUvqWMValLmha6lr4kD8iAMK1HzV0/aKnCtWb9v9641TnP/MFb7Pc2bxoxQjTXAErryXVgUOfv2YqNllqGeg==} + + tinyexec@0.3.2: + resolution: {integrity: sha512-KQQR9yN7R5+OSwaK0XQoj22pwHoTlgYqmUscPYoknOoWCWfj/5/ABTMRi69FrKU5ffPVh5QcFikpWJI/P1ocHA==} + + tinypool@1.0.2: + resolution: {integrity: sha512-al6n+QEANGFOMf/dmUMsuS5/r9B06uwlyNjZZql/zv8J7ybHCgoihBNORZCY2mzUuAnomQa2JdhyHKzZxPCrFA==} + engines: {node: ^18.0.0 || >=20.0.0} + + tinyrainbow@1.2.0: + resolution: {integrity: sha512-weEDEq7Z5eTHPDh4xjX789+fHfF+P8boiFB+0vbWzpbnbsEr/GRaohi/uMKxg8RZMXnl1ItAi/IUHWMsjDV7kQ==} + engines: {node: '>=14.0.0'} + + tinyspy@3.0.2: + resolution: {integrity: sha512-n1cw8k1k0x4pgA2+9XrOkFydTerNcJ1zWCO5Nn9scWHTD+5tp8dghT2x1uduQePZTZgd3Tupf+x9BxJjeJi77Q==} + engines: {node: '>=14.0.0'} + + totalist@3.0.1: + resolution: {integrity: sha512-sf4i37nQ2LBx4m3wB74y+ubopq6W/dIzXg0FDGjsYnZHVa1Da8FH853wlL2gtUhg+xJXjfk3kUZS3BRoQeoQBQ==} + engines: {node: '>=6'} + + tough-cookie@4.1.4: + resolution: {integrity: sha512-Loo5UUvLD9ScZ6jh8beX1T6sO1w2/MpCRpEP7V280GKMVUQ0Jzar2U3UJPsrdbziLEMMhu3Ujnq//rhiFuIeag==} + engines: {node: '>=6'} + + type-fest@0.21.3: + resolution: {integrity: sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==} + engines: {node: '>=10'} + + type-fest@4.34.1: + resolution: {integrity: sha512-6kSc32kT0rbwxD6QL1CYe8IqdzN/J/ILMrNK+HMQCKH3insCDRY/3ITb0vcBss0a3t72fzh2YSzj8ko1HgwT3g==} + engines: {node: '>=16'} + + universalify@0.2.0: + resolution: {integrity: sha512-CJ1QgKmNg3CwvAv/kOFmtnEN05f0D/cn9QntgNOQlQF9dgvVTHj3t+8JPdjqawCHk7V/KA+fbUqzZ9XWhcqPUg==} + engines: {node: '>= 4.0.0'} + + url-parse@1.5.10: + resolution: {integrity: sha512-WypcfiRhfeUP9vvF0j6rw0J3hrWrw6iZv3+22h6iRMJ/8z1Tj6XfLP4DsUix5MhMPnXpiHDoKyoZ/bdCkwBCiQ==} + + vite-node@2.1.9: + resolution: {integrity: sha512-AM9aQ/IPrW/6ENLQg3AGY4K1N2TGZdR5e4gu/MmmR2xR3Ll1+dib+nook92g4TV3PXVyeyxdWwtaCAiUL0hMxA==} + engines: {node: ^18.0.0 || >=20.0.0} + hasBin: true + + vite@5.4.14: + resolution: {integrity: sha512-EK5cY7Q1D8JNhSaPKVK4pwBFvaTmZxEnoKXLG/U9gmdDcihQGNzFlgIvaxezFR4glP1LsuiedwMBqCXH3wZccA==} + engines: {node: ^18.0.0 || >=20.0.0} + hasBin: true + peerDependencies: + '@types/node': ^18.0.0 || >=20.0.0 + less: '*' + lightningcss: ^1.21.0 + sass: '*' + sass-embedded: '*' + stylus: '*' + sugarss: '*' + terser: ^5.4.0 + peerDependenciesMeta: + '@types/node': + optional: true + less: + optional: true + lightningcss: + optional: true + sass: + optional: true + sass-embedded: + optional: true + stylus: + optional: true + sugarss: + optional: true + terser: + optional: true + + vitest@2.1.9: + resolution: {integrity: sha512-MSmPM9REYqDGBI8439mA4mWhV5sKmDlBKWIYbA3lRb2PTHACE0mgKwA8yQ2xq9vxDTuk4iPrECBAEW2aoFXY0Q==} + engines: {node: ^18.0.0 || >=20.0.0} + hasBin: true + peerDependencies: + '@edge-runtime/vm': '*' + '@types/node': ^18.0.0 || >=20.0.0 + '@vitest/browser': 2.1.9 + '@vitest/ui': 2.1.9 + happy-dom: '*' + jsdom: '*' + peerDependenciesMeta: + '@edge-runtime/vm': + optional: true + '@types/node': + optional: true + '@vitest/browser': + optional: true + '@vitest/ui': + optional: true + happy-dom: + optional: true + jsdom: + optional: true + + which@2.0.2: + resolution: {integrity: sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==} + engines: {node: '>= 8'} + hasBin: true + + why-is-node-running@2.3.0: + resolution: {integrity: sha512-hUrmaWBdVDcxvYqnyh09zunKzROWjbZTiNy8dBEjkS7ehEDQibXJ7XvlmtbwuTclUiIyN+CyXQD4Vmko8fNm8w==} + engines: {node: '>=8'} + hasBin: true + + wrap-ansi@6.2.0: + resolution: {integrity: sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==} + engines: {node: '>=8'} + + wrap-ansi@7.0.0: + resolution: {integrity: sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==} + engines: {node: '>=10'} + + wrap-ansi@8.1.0: + resolution: {integrity: sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==} + engines: {node: '>=12'} + + ws@8.18.0: + resolution: {integrity: sha512-8VbfWfHLbbwu3+N6OKsOMpBdT4kXPDDB9cJk2bJ6mh9ucxdlnNvH1e+roYkKmN9Nxw2yjz7VzeO9oOz2zJ04Pw==} + engines: {node: '>=10.0.0'} + peerDependencies: + bufferutil: ^4.0.1 + utf-8-validate: '>=5.0.2' + peerDependenciesMeta: + bufferutil: + optional: true + utf-8-validate: + optional: true + + y18n@5.0.8: + resolution: {integrity: sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==} + engines: {node: '>=10'} + + yargs-parser@21.1.1: + resolution: {integrity: sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==} + engines: {node: '>=12'} + + yargs@17.7.2: + resolution: {integrity: sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==} + engines: {node: '>=12'} + + yoctocolors-cjs@2.1.2: + resolution: {integrity: sha512-cYVsTjKl8b+FrnidjibDWskAv7UKOfcwaVZdp/it9n1s9fU3IkgDbhdIRKCW4JDsAlECJY0ytoVPT3sK6kideA==} + engines: {node: '>=18'} + +snapshots: + + '@ampproject/remapping@2.3.0': + dependencies: + '@jridgewell/gen-mapping': 0.3.8 + '@jridgewell/trace-mapping': 0.3.25 + + '@babel/code-frame@7.26.2': + dependencies: + '@babel/helper-validator-identifier': 7.25.9 + js-tokens: 4.0.0 + picocolors: 1.1.1 + + '@babel/helper-string-parser@7.25.9': {} + + '@babel/helper-validator-identifier@7.25.9': {} + + '@babel/parser@7.26.8': + dependencies: + '@babel/types': 7.26.8 + + '@babel/runtime@7.26.7': + dependencies: + regenerator-runtime: 0.14.1 + + '@babel/types@7.26.8': + dependencies: + '@babel/helper-string-parser': 7.25.9 + '@babel/helper-validator-identifier': 7.25.9 + + '@bcoe/v8-coverage@0.2.3': {} + + '@bundled-es-modules/cookie@2.0.1': + dependencies: + cookie: 0.7.2 + + '@bundled-es-modules/statuses@1.0.1': + dependencies: + statuses: 2.0.1 + + '@bundled-es-modules/tough-cookie@0.1.6': + dependencies: + '@types/tough-cookie': 4.0.5 + tough-cookie: 4.1.4 + + '@esbuild/aix-ppc64@0.21.5': + optional: true + + '@esbuild/android-arm64@0.21.5': + optional: true + + '@esbuild/android-arm@0.21.5': + optional: true + + '@esbuild/android-x64@0.21.5': + optional: true + + '@esbuild/darwin-arm64@0.21.5': + optional: true + + '@esbuild/darwin-x64@0.21.5': + optional: true + + '@esbuild/freebsd-arm64@0.21.5': + optional: true + + '@esbuild/freebsd-x64@0.21.5': + optional: true + + '@esbuild/linux-arm64@0.21.5': + optional: true + + '@esbuild/linux-arm@0.21.5': + optional: true + + '@esbuild/linux-ia32@0.21.5': + optional: true + + '@esbuild/linux-loong64@0.21.5': + optional: true + + '@esbuild/linux-mips64el@0.21.5': + optional: true + + '@esbuild/linux-ppc64@0.21.5': + optional: true + + '@esbuild/linux-riscv64@0.21.5': + optional: true + + '@esbuild/linux-s390x@0.21.5': + optional: true + + '@esbuild/linux-x64@0.21.5': + optional: true + + '@esbuild/netbsd-x64@0.21.5': + optional: true + + '@esbuild/openbsd-x64@0.21.5': + optional: true + + '@esbuild/sunos-x64@0.21.5': + optional: true + + '@esbuild/win32-arm64@0.21.5': + optional: true + + '@esbuild/win32-ia32@0.21.5': + optional: true + + '@esbuild/win32-x64@0.21.5': + optional: true + + '@inquirer/confirm@5.1.5': + dependencies: + '@inquirer/core': 10.1.6 + '@inquirer/type': 3.0.4 + + '@inquirer/core@10.1.6': + dependencies: + '@inquirer/figures': 1.0.10 + '@inquirer/type': 3.0.4 + ansi-escapes: 4.3.2 + cli-width: 4.1.0 + mute-stream: 2.0.0 + signal-exit: 4.1.0 + wrap-ansi: 6.2.0 + yoctocolors-cjs: 2.1.2 + + '@inquirer/figures@1.0.10': {} + + '@inquirer/type@3.0.4': {} + + '@isaacs/cliui@8.0.2': + dependencies: + string-width: 5.1.2 + string-width-cjs: string-width@4.2.3 + strip-ansi: 7.1.0 + strip-ansi-cjs: strip-ansi@6.0.1 + wrap-ansi: 8.1.0 + wrap-ansi-cjs: wrap-ansi@7.0.0 + + '@istanbuljs/schema@0.1.3': {} + + '@jridgewell/gen-mapping@0.3.8': + dependencies: + '@jridgewell/set-array': 1.2.1 + '@jridgewell/sourcemap-codec': 1.5.0 + '@jridgewell/trace-mapping': 0.3.25 + + '@jridgewell/resolve-uri@3.1.2': {} + + '@jridgewell/set-array@1.2.1': {} + + '@jridgewell/sourcemap-codec@1.5.0': {} + + '@jridgewell/trace-mapping@0.3.25': + dependencies: + '@jridgewell/resolve-uri': 3.1.2 + '@jridgewell/sourcemap-codec': 1.5.0 + + '@mswjs/interceptors@0.37.6': + dependencies: + '@open-draft/deferred-promise': 2.2.0 + '@open-draft/logger': 0.3.0 + '@open-draft/until': 2.1.0 + is-node-process: 1.2.0 + outvariant: 1.4.3 + strict-event-emitter: 0.5.1 + + '@open-draft/deferred-promise@2.2.0': {} + + '@open-draft/logger@0.3.0': + dependencies: + is-node-process: 1.2.0 + outvariant: 1.4.3 + + '@open-draft/until@2.1.0': {} + + '@pkgjs/parseargs@0.11.0': + optional: true + + '@polka/url@1.0.0-next.28': {} + + '@rollup/rollup-android-arm-eabi@4.34.6': + optional: true + + '@rollup/rollup-android-arm64@4.34.6': + optional: true + + '@rollup/rollup-darwin-arm64@4.34.6': + optional: true + + '@rollup/rollup-darwin-x64@4.34.6': + optional: true + + '@rollup/rollup-freebsd-arm64@4.34.6': + optional: true + + '@rollup/rollup-freebsd-x64@4.34.6': + optional: true + + '@rollup/rollup-linux-arm-gnueabihf@4.34.6': + optional: true + + '@rollup/rollup-linux-arm-musleabihf@4.34.6': + optional: true + + '@rollup/rollup-linux-arm64-gnu@4.34.6': + optional: true + + '@rollup/rollup-linux-arm64-musl@4.34.6': + optional: true + + '@rollup/rollup-linux-loongarch64-gnu@4.34.6': + optional: true + + '@rollup/rollup-linux-powerpc64le-gnu@4.34.6': + optional: true + + '@rollup/rollup-linux-riscv64-gnu@4.34.6': + optional: true + + '@rollup/rollup-linux-s390x-gnu@4.34.6': + optional: true + + '@rollup/rollup-linux-x64-gnu@4.34.6': + optional: true + + '@rollup/rollup-linux-x64-musl@4.34.6': + optional: true + + '@rollup/rollup-win32-arm64-msvc@4.34.6': + optional: true + + '@rollup/rollup-win32-ia32-msvc@4.34.6': + optional: true + + '@rollup/rollup-win32-x64-msvc@4.34.6': + optional: true + + '@testing-library/dom@10.4.0': + dependencies: + '@babel/code-frame': 7.26.2 + '@babel/runtime': 7.26.7 + '@types/aria-query': 5.0.4 + aria-query: 5.3.0 + chalk: 4.1.2 + dom-accessibility-api: 0.5.16 + lz-string: 1.5.0 + pretty-format: 27.5.1 + + '@testing-library/user-event@14.6.1(@testing-library/dom@10.4.0)': + dependencies: + '@testing-library/dom': 10.4.0 + + '@types/aria-query@5.0.4': {} + + '@types/cookie@0.6.0': {} + + '@types/estree@1.0.6': {} + + '@types/statuses@2.0.5': {} + + '@types/tough-cookie@4.0.5': {} + + '@vitest/browser@2.1.9(playwright@1.50.1)(vite@5.4.14)(vitest@2.1.9)': + dependencies: + '@testing-library/dom': 10.4.0 + '@testing-library/user-event': 14.6.1(@testing-library/dom@10.4.0) + '@vitest/mocker': 2.1.9(msw@2.7.0)(vite@5.4.14) + '@vitest/utils': 2.1.9 + magic-string: 0.30.17 + msw: 2.7.0 + sirv: 3.0.0 + tinyrainbow: 1.2.0 + vitest: 2.1.9(@vitest/browser@2.1.9)(msw@2.7.0) + ws: 8.18.0 + optionalDependencies: + playwright: 1.50.1 + transitivePeerDependencies: + - '@types/node' + - bufferutil + - typescript + - utf-8-validate + - vite + + '@vitest/coverage-v8@2.1.9(@vitest/browser@2.1.9)(vitest@2.1.9)': + dependencies: + '@ampproject/remapping': 2.3.0 + '@bcoe/v8-coverage': 0.2.3 + debug: 4.4.0 + istanbul-lib-coverage: 3.2.2 + istanbul-lib-report: 3.0.1 + istanbul-lib-source-maps: 5.0.6 + istanbul-reports: 3.1.7 + magic-string: 0.30.17 + magicast: 0.3.5 + std-env: 3.8.0 + test-exclude: 7.0.1 + tinyrainbow: 1.2.0 + vitest: 2.1.9(@vitest/browser@2.1.9)(msw@2.7.0) + optionalDependencies: + '@vitest/browser': 2.1.9(playwright@1.50.1)(vite@5.4.14)(vitest@2.1.9) + transitivePeerDependencies: + - supports-color + + '@vitest/expect@2.1.9': + dependencies: + '@vitest/spy': 2.1.9 + '@vitest/utils': 2.1.9 + chai: 5.1.2 + tinyrainbow: 1.2.0 + + '@vitest/mocker@2.1.9(msw@2.7.0)(vite@5.4.14)': + dependencies: + '@vitest/spy': 2.1.9 + estree-walker: 3.0.3 + magic-string: 0.30.17 + optionalDependencies: + msw: 2.7.0 + vite: 5.4.14 + + '@vitest/pretty-format@2.1.9': + dependencies: + tinyrainbow: 1.2.0 + + '@vitest/runner@2.1.9': + dependencies: + '@vitest/utils': 2.1.9 + pathe: 1.1.2 + + '@vitest/snapshot@2.1.9': + dependencies: + '@vitest/pretty-format': 2.1.9 + magic-string: 0.30.17 + pathe: 1.1.2 + + '@vitest/spy@2.1.9': + dependencies: + tinyspy: 3.0.2 + + '@vitest/utils@2.1.9': + dependencies: + '@vitest/pretty-format': 2.1.9 + loupe: 3.1.3 + tinyrainbow: 1.2.0 + + ansi-escapes@4.3.2: + dependencies: + type-fest: 0.21.3 + + ansi-regex@5.0.1: {} + + ansi-regex@6.1.0: {} + + ansi-styles@4.3.0: + dependencies: + color-convert: 2.0.1 + + ansi-styles@5.2.0: {} + + ansi-styles@6.2.1: {} + + aria-query@5.3.0: + dependencies: + dequal: 2.0.3 + + assertion-error@2.0.1: {} + + balanced-match@1.0.2: {} + + birpc@0.2.19: {} + + brace-expansion@2.0.1: + dependencies: + balanced-match: 1.0.2 + + cac@6.7.14: {} + + chai@5.1.2: + dependencies: + assertion-error: 2.0.1 + check-error: 2.1.1 + deep-eql: 5.0.2 + loupe: 3.1.3 + pathval: 2.0.0 + + chalk@4.1.2: + dependencies: + ansi-styles: 4.3.0 + supports-color: 7.2.0 + + check-error@2.1.1: {} + + cli-width@4.1.0: {} + + cliui@8.0.1: + dependencies: + string-width: 4.2.3 + strip-ansi: 6.0.1 + wrap-ansi: 7.0.0 + + color-convert@2.0.1: + dependencies: + color-name: 1.1.4 + + color-name@1.1.4: {} + + cookie@0.7.2: {} + + cross-spawn@7.0.6: + dependencies: + path-key: 3.1.1 + shebang-command: 2.0.0 + which: 2.0.2 + + debug@4.4.0: + dependencies: + ms: 2.1.3 + + deep-eql@5.0.2: {} + + dequal@2.0.3: {} + + dom-accessibility-api@0.5.16: {} + + eastasianwidth@0.2.0: {} + + emoji-regex@8.0.0: {} + + emoji-regex@9.2.2: {} + + es-module-lexer@1.6.0: {} + + esbuild@0.21.5: + optionalDependencies: + '@esbuild/aix-ppc64': 0.21.5 + '@esbuild/android-arm': 0.21.5 + '@esbuild/android-arm64': 0.21.5 + '@esbuild/android-x64': 0.21.5 + '@esbuild/darwin-arm64': 0.21.5 + '@esbuild/darwin-x64': 0.21.5 + '@esbuild/freebsd-arm64': 0.21.5 + '@esbuild/freebsd-x64': 0.21.5 + '@esbuild/linux-arm': 0.21.5 + '@esbuild/linux-arm64': 0.21.5 + '@esbuild/linux-ia32': 0.21.5 + '@esbuild/linux-loong64': 0.21.5 + '@esbuild/linux-mips64el': 0.21.5 + '@esbuild/linux-ppc64': 0.21.5 + '@esbuild/linux-riscv64': 0.21.5 + '@esbuild/linux-s390x': 0.21.5 + '@esbuild/linux-x64': 0.21.5 + '@esbuild/netbsd-x64': 0.21.5 + '@esbuild/openbsd-x64': 0.21.5 + '@esbuild/sunos-x64': 0.21.5 + '@esbuild/win32-arm64': 0.21.5 + '@esbuild/win32-ia32': 0.21.5 + '@esbuild/win32-x64': 0.21.5 + + escalade@3.2.0: {} + + estree-walker@3.0.3: + dependencies: + '@types/estree': 1.0.6 + + expect-type@1.1.0: {} + + foreground-child@3.3.0: + dependencies: + cross-spawn: 7.0.6 + signal-exit: 4.1.0 + + fsevents@2.3.2: + optional: true + + fsevents@2.3.3: + optional: true + + get-caller-file@2.0.5: {} + + glob@10.4.5: + dependencies: + foreground-child: 3.3.0 + jackspeak: 3.4.3 + minimatch: 9.0.5 + minipass: 7.1.2 + package-json-from-dist: 1.0.1 + path-scurry: 1.11.1 + + graphql@16.10.0: {} + + has-flag@4.0.0: {} + + headers-polyfill@4.0.3: {} + + html-escaper@2.0.2: {} + + is-fullwidth-code-point@3.0.0: {} + + is-node-process@1.2.0: {} + + isexe@2.0.0: {} + + istanbul-lib-coverage@3.2.2: {} + + istanbul-lib-report@3.0.1: + dependencies: + istanbul-lib-coverage: 3.2.2 + make-dir: 4.0.0 + supports-color: 7.2.0 + + istanbul-lib-source-maps@5.0.6: + dependencies: + '@jridgewell/trace-mapping': 0.3.25 + debug: 4.4.0 + istanbul-lib-coverage: 3.2.2 + transitivePeerDependencies: + - supports-color + + istanbul-reports@3.1.7: + dependencies: + html-escaper: 2.0.2 + istanbul-lib-report: 3.0.1 + + jackspeak@3.4.3: + dependencies: + '@isaacs/cliui': 8.0.2 + optionalDependencies: + '@pkgjs/parseargs': 0.11.0 + + js-tokens@4.0.0: {} + + loupe@3.1.3: {} + + lru-cache@10.4.3: {} + + lz-string@1.5.0: {} + + magic-string@0.30.17: + dependencies: + '@jridgewell/sourcemap-codec': 1.5.0 + + magicast@0.3.5: + dependencies: + '@babel/parser': 7.26.8 + '@babel/types': 7.26.8 + source-map-js: 1.2.1 + + make-dir@4.0.0: + dependencies: + semver: 7.7.1 + + minimatch@9.0.5: + dependencies: + brace-expansion: 2.0.1 + + minipass@7.1.2: {} + + mrmime@2.0.0: {} + + ms@2.1.3: {} + + msw@2.7.0: + dependencies: + '@bundled-es-modules/cookie': 2.0.1 + '@bundled-es-modules/statuses': 1.0.1 + '@bundled-es-modules/tough-cookie': 0.1.6 + '@inquirer/confirm': 5.1.5 + '@mswjs/interceptors': 0.37.6 + '@open-draft/deferred-promise': 2.2.0 + '@open-draft/until': 2.1.0 + '@types/cookie': 0.6.0 + '@types/statuses': 2.0.5 + graphql: 16.10.0 + headers-polyfill: 4.0.3 + is-node-process: 1.2.0 + outvariant: 1.4.3 + path-to-regexp: 6.3.0 + picocolors: 1.1.1 + strict-event-emitter: 0.5.1 + type-fest: 4.34.1 + yargs: 17.7.2 + transitivePeerDependencies: + - '@types/node' + + mute-stream@2.0.0: {} + + nanoid@3.3.8: {} + + outvariant@1.4.3: {} + + package-json-from-dist@1.0.1: {} + + path-key@3.1.1: {} + + path-scurry@1.11.1: + dependencies: + lru-cache: 10.4.3 + minipass: 7.1.2 + + path-to-regexp@6.3.0: {} + + pathe@1.1.2: {} + + pathval@2.0.0: {} + + picocolors@1.1.1: {} + + playwright-core@1.50.1: {} + + playwright@1.50.1: + dependencies: + playwright-core: 1.50.1 + optionalDependencies: + fsevents: 2.3.2 + + postcss@8.5.2: + dependencies: + nanoid: 3.3.8 + picocolors: 1.1.1 + source-map-js: 1.2.1 + + pretty-format@27.5.1: + dependencies: + ansi-regex: 5.0.1 + ansi-styles: 5.2.0 + react-is: 17.0.2 + + psl@1.15.0: + dependencies: + punycode: 2.3.1 + + punycode@2.3.1: {} + + querystringify@2.2.0: {} + + react-is@17.0.2: {} + + regenerator-runtime@0.14.1: {} + + require-directory@2.1.1: {} + + requires-port@1.0.0: {} + + rollup@4.34.6: + dependencies: + '@types/estree': 1.0.6 + optionalDependencies: + '@rollup/rollup-android-arm-eabi': 4.34.6 + '@rollup/rollup-android-arm64': 4.34.6 + '@rollup/rollup-darwin-arm64': 4.34.6 + '@rollup/rollup-darwin-x64': 4.34.6 + '@rollup/rollup-freebsd-arm64': 4.34.6 + '@rollup/rollup-freebsd-x64': 4.34.6 + '@rollup/rollup-linux-arm-gnueabihf': 4.34.6 + '@rollup/rollup-linux-arm-musleabihf': 4.34.6 + '@rollup/rollup-linux-arm64-gnu': 4.34.6 + '@rollup/rollup-linux-arm64-musl': 4.34.6 + '@rollup/rollup-linux-loongarch64-gnu': 4.34.6 + '@rollup/rollup-linux-powerpc64le-gnu': 4.34.6 + '@rollup/rollup-linux-riscv64-gnu': 4.34.6 + '@rollup/rollup-linux-s390x-gnu': 4.34.6 + '@rollup/rollup-linux-x64-gnu': 4.34.6 + '@rollup/rollup-linux-x64-musl': 4.34.6 + '@rollup/rollup-win32-arm64-msvc': 4.34.6 + '@rollup/rollup-win32-ia32-msvc': 4.34.6 + '@rollup/rollup-win32-x64-msvc': 4.34.6 + fsevents: 2.3.3 + + semver@7.7.1: {} + + shebang-command@2.0.0: + dependencies: + shebang-regex: 3.0.0 + + shebang-regex@3.0.0: {} + + siginfo@2.0.0: {} + + signal-exit@4.1.0: {} + + sirv@3.0.0: + dependencies: + '@polka/url': 1.0.0-next.28 + mrmime: 2.0.0 + totalist: 3.0.1 + + source-map-js@1.2.1: {} + + stackback@0.0.2: {} + + statuses@2.0.1: {} + + std-env@3.8.0: {} + + strict-event-emitter@0.5.1: {} + + string-width@4.2.3: + dependencies: + emoji-regex: 8.0.0 + is-fullwidth-code-point: 3.0.0 + strip-ansi: 6.0.1 + + string-width@5.1.2: + dependencies: + eastasianwidth: 0.2.0 + emoji-regex: 9.2.2 + strip-ansi: 7.1.0 + + strip-ansi@6.0.1: + dependencies: + ansi-regex: 5.0.1 + + strip-ansi@7.1.0: + dependencies: + ansi-regex: 6.1.0 + + supports-color@7.2.0: + dependencies: + has-flag: 4.0.0 + + test-exclude@7.0.1: + dependencies: + '@istanbuljs/schema': 0.1.3 + glob: 10.4.5 + minimatch: 9.0.5 + + tinybench@2.9.0: {} + + tinyexec@0.3.2: {} + + tinypool@1.0.2: {} + + tinyrainbow@1.2.0: {} + + tinyspy@3.0.2: {} + + totalist@3.0.1: {} + + tough-cookie@4.1.4: + dependencies: + psl: 1.15.0 + punycode: 2.3.1 + universalify: 0.2.0 + url-parse: 1.5.10 + + type-fest@0.21.3: {} + + type-fest@4.34.1: {} + + universalify@0.2.0: {} + + url-parse@1.5.10: + dependencies: + querystringify: 2.2.0 + requires-port: 1.0.0 + + vite-node@2.1.9: + dependencies: + cac: 6.7.14 + debug: 4.4.0 + es-module-lexer: 1.6.0 + pathe: 1.1.2 + vite: 5.4.14 + transitivePeerDependencies: + - '@types/node' + - less + - lightningcss + - sass + - sass-embedded + - stylus + - sugarss + - supports-color + - terser + + vite@5.4.14: + dependencies: + esbuild: 0.21.5 + postcss: 8.5.2 + rollup: 4.34.6 + optionalDependencies: + fsevents: 2.3.3 + + vitest@2.1.9(@vitest/browser@2.1.9)(msw@2.7.0): + dependencies: + '@vitest/expect': 2.1.9 + '@vitest/mocker': 2.1.9(msw@2.7.0)(vite@5.4.14) + '@vitest/pretty-format': 2.1.9 + '@vitest/runner': 2.1.9 + '@vitest/snapshot': 2.1.9 + '@vitest/spy': 2.1.9 + '@vitest/utils': 2.1.9 + chai: 5.1.2 + debug: 4.4.0 + expect-type: 1.1.0 + magic-string: 0.30.17 + pathe: 1.1.2 + std-env: 3.8.0 + tinybench: 2.9.0 + tinyexec: 0.3.2 + tinypool: 1.0.2 + tinyrainbow: 1.2.0 + vite: 5.4.14 + vite-node: 2.1.9 + why-is-node-running: 2.3.0 + optionalDependencies: + '@vitest/browser': 2.1.9(playwright@1.50.1)(vite@5.4.14)(vitest@2.1.9) + transitivePeerDependencies: + - less + - lightningcss + - msw + - sass + - sass-embedded + - stylus + - sugarss + - supports-color + - terser + + which@2.0.2: + dependencies: + isexe: 2.0.0 + + why-is-node-running@2.3.0: + dependencies: + siginfo: 2.0.0 + stackback: 0.0.2 + + wrap-ansi@6.2.0: + dependencies: + ansi-styles: 4.3.0 + string-width: 4.2.3 + strip-ansi: 6.0.1 + + wrap-ansi@7.0.0: + dependencies: + ansi-styles: 4.3.0 + string-width: 4.2.3 + strip-ansi: 6.0.1 + + wrap-ansi@8.1.0: + dependencies: + ansi-styles: 6.2.1 + string-width: 5.1.2 + strip-ansi: 7.1.0 + + ws@8.18.0: {} + + y18n@5.0.8: {} + + yargs-parser@21.1.1: {} + + yargs@17.7.2: + dependencies: + cliui: 8.0.1 + escalade: 3.2.0 + get-caller-file: 2.0.5 + require-directory: 2.1.1 + string-width: 4.2.3 + y18n: 5.0.8 + yargs-parser: 21.1.1 + + yoctocolors-cjs@2.1.2: {} diff --git a/samples/browser-headed/src/add.ts b/samples/browser-headed/src/add.ts new file mode 100644 index 00000000..b8848d78 --- /dev/null +++ b/samples/browser-headed/src/add.ts @@ -0,0 +1,7 @@ +export function add(a: number, b: number) { + return a + b +} + +export function sum(from: number, to: number) { + return (from + to) * (to - from + 1) / 2 +} diff --git a/samples/browser-headed/src/should_included_test.ts b/samples/browser-headed/src/should_included_test.ts new file mode 100644 index 00000000..eb51c768 --- /dev/null +++ b/samples/browser-headed/src/should_included_test.ts @@ -0,0 +1,5 @@ +import { describe, it } from 'vitest' + +describe('should included', () => { + it('is included because of workspace plugin setting', () => {}) +}) diff --git a/samples/browser-headed/test/.gitignore b/samples/browser-headed/test/.gitignore new file mode 100644 index 00000000..b05c2dfa --- /dev/null +++ b/samples/browser-headed/test/.gitignore @@ -0,0 +1 @@ +__snapshots__ diff --git a/samples/browser-headed/test/__screenshots__/each.test.ts/testing-all-fail--1----0-1.png b/samples/browser-headed/test/__screenshots__/each.test.ts/testing-all-fail--1----0-1.png new file mode 100644 index 0000000000000000000000000000000000000000..f88c55c1cad7d3de8229e8a42a99ad5e0bc9e037 GIT binary patch literal 3012 zcmeAS@N?(olHy`uVBq!ia0y~yV4TOmz}&#W1QcnFZJGt77>k44ofy`glX=O&z+LC* z;uumf=k1k)oD2#A2MkL8&pofovQS0%%T-%r?gdZ(@G(@Jzty0S&D^wxmt&Ke!iiDN zXc&y9gVDS&S{{s+iKF$xXmvQ+Bp7WLjW!L*YaZ)u@!|YCPt|%AuvyOF>FVdQ&MBb@ E0IgVhRsaA1 literal 0 HcmV?d00001 diff --git a/samples/browser-headed/test/__screenshots__/each.test.ts/testing-all-fail--2----0-1.png b/samples/browser-headed/test/__screenshots__/each.test.ts/testing-all-fail--2----0-1.png new file mode 100644 index 0000000000000000000000000000000000000000..f88c55c1cad7d3de8229e8a42a99ad5e0bc9e037 GIT binary patch literal 3012 zcmeAS@N?(olHy`uVBq!ia0y~yV4TOmz}&#W1QcnFZJGt77>k44ofy`glX=O&z+LC* z;uumf=k1k)oD2#A2MkL8&pofovQS0%%T-%r?gdZ(@G(@Jzty0S&D^wxmt&Ke!iiDN zXc&y9gVDS&S{{s+iKF$xXmvQ+Bp7WLjW!L*YaZ)u@!|YCPt|%AuvyOF>FVdQ&MBb@ E0IgVhRsaA1 literal 0 HcmV?d00001 diff --git a/samples/browser-headed/test/__screenshots__/each.test.ts/testing-all-fail--3----0-1.png b/samples/browser-headed/test/__screenshots__/each.test.ts/testing-all-fail--3----0-1.png new file mode 100644 index 0000000000000000000000000000000000000000..f88c55c1cad7d3de8229e8a42a99ad5e0bc9e037 GIT binary patch literal 3012 zcmeAS@N?(olHy`uVBq!ia0y~yV4TOmz}&#W1QcnFZJGt77>k44ofy`glX=O&z+LC* z;uumf=k1k)oD2#A2MkL8&pofovQS0%%T-%r?gdZ(@G(@Jzty0S&D^wxmt&Ke!iiDN zXc&y9gVDS&S{{s+iKF$xXmvQ+Bp7WLjW!L*YaZ)u@!|YCPt|%AuvyOF>FVdQ&MBb@ E0IgVhRsaA1 literal 0 HcmV?d00001 diff --git a/samples/browser-headed/test/__screenshots__/each.test.ts/testing-first-fail--3----1-1.png b/samples/browser-headed/test/__screenshots__/each.test.ts/testing-first-fail--3----1-1.png new file mode 100644 index 0000000000000000000000000000000000000000..f88c55c1cad7d3de8229e8a42a99ad5e0bc9e037 GIT binary patch literal 3012 zcmeAS@N?(olHy`uVBq!ia0y~yV4TOmz}&#W1QcnFZJGt77>k44ofy`glX=O&z+LC* z;uumf=k1k)oD2#A2MkL8&pofovQS0%%T-%r?gdZ(@G(@Jzty0S&D^wxmt&Ke!iiDN zXc&y9gVDS&S{{s+iKF$xXmvQ+Bp7WLjW!L*YaZ)u@!|YCPt|%AuvyOF>FVdQ&MBb@ E0IgVhRsaA1 literal 0 HcmV?d00001 diff --git a/samples/browser-headed/test/__screenshots__/each.test.ts/testing-first-pass--2----1-1.png b/samples/browser-headed/test/__screenshots__/each.test.ts/testing-first-pass--2----1-1.png new file mode 100644 index 0000000000000000000000000000000000000000..f88c55c1cad7d3de8229e8a42a99ad5e0bc9e037 GIT binary patch literal 3012 zcmeAS@N?(olHy`uVBq!ia0y~yV4TOmz}&#W1QcnFZJGt77>k44ofy`glX=O&z+LC* z;uumf=k1k)oD2#A2MkL8&pofovQS0%%T-%r?gdZ(@G(@Jzty0S&D^wxmt&Ke!iiDN zXc&y9gVDS&S{{s+iKF$xXmvQ+Bp7WLjW!L*YaZ)u@!|YCPt|%AuvyOF>FVdQ&MBb@ E0IgVhRsaA1 literal 0 HcmV?d00001 diff --git a/samples/browser-headed/test/__screenshots__/each.test.ts/testing-first-pass--3----1-1.png b/samples/browser-headed/test/__screenshots__/each.test.ts/testing-first-pass--3----1-1.png new file mode 100644 index 0000000000000000000000000000000000000000..f88c55c1cad7d3de8229e8a42a99ad5e0bc9e037 GIT binary patch literal 3012 zcmeAS@N?(olHy`uVBq!ia0y~yV4TOmz}&#W1QcnFZJGt77>k44ofy`glX=O&z+LC* z;uumf=k1k)oD2#A2MkL8&pofovQS0%%T-%r?gdZ(@G(@Jzty0S&D^wxmt&Ke!iiDN zXc&y9gVDS&S{{s+iKF$xXmvQ+Bp7WLjW!L*YaZ)u@!|YCPt|%AuvyOF>FVdQ&MBb@ E0IgVhRsaA1 literal 0 HcmV?d00001 diff --git a/samples/browser-headed/test/__screenshots__/each.test.ts/testing-last-fail--3----1-1.png b/samples/browser-headed/test/__screenshots__/each.test.ts/testing-last-fail--3----1-1.png new file mode 100644 index 0000000000000000000000000000000000000000..f88c55c1cad7d3de8229e8a42a99ad5e0bc9e037 GIT binary patch literal 3012 zcmeAS@N?(olHy`uVBq!ia0y~yV4TOmz}&#W1QcnFZJGt77>k44ofy`glX=O&z+LC* z;uumf=k1k)oD2#A2MkL8&pofovQS0%%T-%r?gdZ(@G(@Jzty0S&D^wxmt&Ke!iiDN zXc&y9gVDS&S{{s+iKF$xXmvQ+Bp7WLjW!L*YaZ)u@!|YCPt|%AuvyOF>FVdQ&MBb@ E0IgVhRsaA1 literal 0 HcmV?d00001 diff --git a/samples/browser-headed/test/__screenshots__/each.test.ts/testing-last-pass--3----1-1.png b/samples/browser-headed/test/__screenshots__/each.test.ts/testing-last-pass--3----1-1.png new file mode 100644 index 0000000000000000000000000000000000000000..f88c55c1cad7d3de8229e8a42a99ad5e0bc9e037 GIT binary patch literal 3012 zcmeAS@N?(olHy`uVBq!ia0y~yV4TOmz}&#W1QcnFZJGt77>k44ofy`glX=O&z+LC* z;uumf=k1k)oD2#A2MkL8&pofovQS0%%T-%r?gdZ(@G(@Jzty0S&D^wxmt&Ke!iiDN zXc&y9gVDS&S{{s+iKF$xXmvQ+Bp7WLjW!L*YaZ)u@!|YCPt|%AuvyOF>FVdQ&MBb@ E0IgVhRsaA1 literal 0 HcmV?d00001 diff --git a/samples/browser-headed/test/__screenshots__/env.test.ts/process-env-1.png b/samples/browser-headed/test/__screenshots__/env.test.ts/process-env-1.png new file mode 100644 index 0000000000000000000000000000000000000000..f88c55c1cad7d3de8229e8a42a99ad5e0bc9e037 GIT binary patch literal 3012 zcmeAS@N?(olHy`uVBq!ia0y~yV4TOmz}&#W1QcnFZJGt77>k44ofy`glX=O&z+LC* z;uumf=k1k)oD2#A2MkL8&pofovQS0%%T-%r?gdZ(@G(@Jzty0S&D^wxmt&Ke!iiDN zXc&y9gVDS&S{{s+iKF$xXmvQ+Bp7WLjW!L*YaZ)u@!|YCPt|%AuvyOF>FVdQ&MBb@ E0IgVhRsaA1 literal 0 HcmV?d00001 diff --git a/samples/browser-headed/test/add.test.ts b/samples/browser-headed/test/add.test.ts new file mode 100644 index 00000000..2517c278 --- /dev/null +++ b/samples/browser-headed/test/add.test.ts @@ -0,0 +1,52 @@ +import { describe, expect, it } from 'vitest' +import { add, sum } from '../src/add' + +describe('addition', () => { + it('add', () => { + expect(add(1, 1)).toBe(2) + }) + + it('sum', () => { + expect(sum(0, 10)).toBe(55) + }) + + it.skip('skipped', () => { + expect(1 + 2).toBe(3) + }) + + it.todo('todo') + it('async task', async () => { + await new Promise(resolve => setTimeout(resolve, 100)) + }) + + it('async task 0.5s', async () => { + await new Promise(resolve => setTimeout(resolve, 500)) + }) + + it('async task 1s', async () => { + await new Promise(resolve => setTimeout(resolve, 1000)) + }) + + it('long task', () => { + let sum = 0 + for (let i = 0; i < 2e8; i++) + sum += i + + expect(sum).toBeGreaterThan(1) + }) +}) + +describe('testing', () => { + it('run', () => { + const a = 10 + expect(a).toBe(10) + }) + + it('mul', () => { + expect(5 * 5).toBe(25) + }) + + it("mul fail", () => { + expect(5 * 5).toBe(25) + }) +}) diff --git a/samples/browser-headed/test/console.test.ts b/samples/browser-headed/test/console.test.ts new file mode 100644 index 00000000..4efe8f6a --- /dev/null +++ b/samples/browser-headed/test/console.test.ts @@ -0,0 +1,25 @@ +import { describe, it } from 'vitest' + +const sleep = (ms: number) => new Promise(resolve => setTimeout(resolve, ms)) + +describe('console', () => { + it('basic', () => { + console.log([ + 'string', + { hello: 'world' }, + 1234, + /regex/g, + true, + false, + null, + ]) + }) + + it('async', async () => { + console.log('1st') + await sleep(200) + console.log('2nd') + await sleep(200) + console.log('3rd') + }) +}) diff --git a/samples/browser-headed/test/deep/deeper/deep.test.ts b/samples/browser-headed/test/deep/deeper/deep.test.ts new file mode 100644 index 00000000..64456cdf --- /dev/null +++ b/samples/browser-headed/test/deep/deeper/deep.test.ts @@ -0,0 +1,5 @@ +import { expect, it } from 'vitest' + +it('test', () => { + expect(1).toBe(1) +}) \ No newline at end of file diff --git a/samples/browser-headed/test/duplicated.test.ts b/samples/browser-headed/test/duplicated.test.ts new file mode 100644 index 00000000..8f839ba0 --- /dev/null +++ b/samples/browser-headed/test/duplicated.test.ts @@ -0,0 +1,8 @@ +import { describe, test } from "vitest"; + +describe("testing", () => { + test("number 1", () => { }) +}); +describe("testing", () => { + test("number 2", () => { }) +}); diff --git a/samples/browser-headed/test/each.test.ts b/samples/browser-headed/test/each.test.ts new file mode 100644 index 00000000..f7cff915 --- /dev/null +++ b/samples/browser-headed/test/each.test.ts @@ -0,0 +1,84 @@ +import { describe, expect, it, test, } from 'vitest' + +describe('testing', (a) => { + it.each([ + [1, 1], [2, 2], [3, 3] + ])(`all pass: %i => %i`, (a, b) => { + expect(a).toBe(b) + }) + it.each([ + [1, 1], [2, 1], [3, 1] + ])(`first pass: %i => %i`, (a, b) => { + expect(a).toBe(b) + }) + it.each([ + [1, 1], [2, 2], [3, 1] + ])(`last pass: %i => %i`, (a, b) => { + expect(a).toBe(b) + }) + it.each([ + [1, 1], [2, 2], [3, 1] + ])(`first fail: %i => %i`, (a, b) => { + expect(a).toBe(b) + }) + it.each([ + [1, 1], [2, 2], [3, 1] + ])(`last fail: %i => %i`, (a, b) => { + expect(a).toBe(b) + }) + it.each([ + [1, 0], [2, 0], [3, 0] + ])(`all fail: %i => %i`, (a, b) => { + expect(a).toBe(b) + }) + it.each([ + 1, 2, 3 + ])('run %i', (a) => { + expect(a).toBe(a) + }) + it.each([ + [1, 1], [2, 4], [3, 9] + ])('run mul %i', (a,b) => { + expect(a * a).toBe(b) + }) + test.each([ + ["test1", 1], + ["test2", 2], + ["test3", 3], + ])(`%s => %i`, (a, b) => { + expect(a.at(-1)).toBe(`${b}`) + }) + test.each` + a | b | expected + ${1} | ${1} | ${2} + ${'a'} | ${'b'} | ${'ab'} + ${[]} | ${'b'} | ${'b'} + ${{}} | ${'b'} | ${'[object Object]b'} + ${{ asd: 1 }} | ${'b'} | ${'[object Object]b'} + `('table1: returns $expected when $a is added $b', ({ a, b, expected }) => { + expect(a + b).toBe(expected) + }) + test.each` + a | b | expected + ${{v: 1}} | ${{v: 1}} | ${2} + `('table2: returns $expected when $a.v is added $b.v', ({ a, b, expected }) => { + expect(a.v + b.v).toBe(expected) + }) + test.each([ + { input: 1, add: 1, sum: 2 }, + { input: 2, add: 2, sum: 4 }, + ])('$input + $add = $sum', ({ input, add, sum }) => { + expect(input + add).toBe(sum) + }) +}) + +// 'Test result not fourd' error occurs as both .each patterns are matched +// TODO: Fix this +describe("over matched test patterns", () => { + test.each(['1', '2'])('run %s', (a) => { + expect(a).toBe(String(a)) + }) + test.each(['1', '2'])('run for %s', (a) => { + expect(a).toBe(String(a)) + }) +}) diff --git a/samples/browser-headed/test/env.test.ts b/samples/browser-headed/test/env.test.ts new file mode 100644 index 00000000..07b88808 --- /dev/null +++ b/samples/browser-headed/test/env.test.ts @@ -0,0 +1,9 @@ +import { test, expect } from "vitest"; + +test('process.env', () => { + expect(process.env.TEST).toBe('true'); + expect(process.env.VITEST).toBe('true'); + expect(process.env.NODE_ENV).toBe('test'); + expect(process.env.VITEST_VSCODE).toBe('true'); + expect(process.env.TEST_CUSTOM_ENV).toBe('hello'); +}); diff --git a/samples/browser-headed/test/fail_to_run.test.ts b/samples/browser-headed/test/fail_to_run.test.ts new file mode 100644 index 00000000..13900e21 --- /dev/null +++ b/samples/browser-headed/test/fail_to_run.test.ts @@ -0,0 +1 @@ +test('aaaaaa', () => {}) diff --git a/samples/browser-headed/test/ignored.test.ts b/samples/browser-headed/test/ignored.test.ts new file mode 100644 index 00000000..ff1c9074 --- /dev/null +++ b/samples/browser-headed/test/ignored.test.ts @@ -0,0 +1,5 @@ +import { describe, it } from 'vitest' + +describe('ignored test', () => { + it('is ignored because of vitest plugin setting', () => {}) +}) diff --git a/samples/browser-headed/test/mul.test.ts b/samples/browser-headed/test/mul.test.ts new file mode 100644 index 00000000..b1a6e21e --- /dev/null +++ b/samples/browser-headed/test/mul.test.ts @@ -0,0 +1,6 @@ +import { describe, it } from 'vitest' + +describe('mul', () => { + it.skip('run 1', () => {}) + it('run', () => {}) +}) diff --git a/samples/browser-headed/test/snapshot.test.ts b/samples/browser-headed/test/snapshot.test.ts new file mode 100644 index 00000000..2944c559 --- /dev/null +++ b/samples/browser-headed/test/snapshot.test.ts @@ -0,0 +1,11 @@ +import { describe, expect, it } from 'vitest' + +describe('snapshots', () => { + it('string', () => { + expect('bc').toMatchSnapshot() + }) + it('async', async () => { + await new Promise(resolve => setTimeout(resolve, 200)) + expect('bc').toMatchSnapshot() + }) +}) diff --git a/samples/browser-headed/test/using.test.ts b/samples/browser-headed/test/using.test.ts new file mode 100644 index 00000000..d7e13a31 --- /dev/null +++ b/samples/browser-headed/test/using.test.ts @@ -0,0 +1,43 @@ +import { describe, expect, it } from 'vitest'; + +(Symbol as any).dispose ??= Symbol('Symbol.dispose'); +(Symbol as any).asyncDispose ??= Symbol('Symbol.asyncDispose') + +describe('using keyword', () => { + it('dispose', () => { + function getDisposableResource() { + using resource = new SomeDisposableResource() + return resource + } + + const resource = getDisposableResource() + expect(resource.isDisposed).toBe(true) + }) + + it('asyncDispose', async () => { + async function getAsyncDisposableResource() { + await using resource = new SomeAsyncDisposableResource() + return resource + } + + const resource = await getAsyncDisposableResource() + expect(resource.isDisposed).toBe(true) + }) +}) + +class SomeDisposableResource implements Disposable { + public isDisposed = false; + + [Symbol.dispose](): void { + this.isDisposed = true + } +} + +class SomeAsyncDisposableResource implements AsyncDisposable { + public isDisposed = false + + async [Symbol.asyncDispose](): Promise { + await new Promise(resolve => setTimeout(resolve, 0)) + this.isDisposed = true + } +} diff --git a/samples/browser-headed/vitest.config.ts b/samples/browser-headed/vitest.config.ts new file mode 100644 index 00000000..920ca68d --- /dev/null +++ b/samples/browser-headed/vitest.config.ts @@ -0,0 +1,22 @@ +/// + +// Configure Vitest (https://vitest.dev/config) + +import { defineConfig } from 'vitest/config' + +export default defineConfig({ + esbuild: { + target: 'es2020', + }, + test: { + include: ['test/**/*.test.ts'], + exclude: ['test/ignored.test.ts'], + // This is needed for debugger connection to browser tests + fileParallelism: false, + browser: { + enabled: true, + name: 'chromium', + provider: 'playwright', + } + }, +}) diff --git a/src/config.ts b/src/config.ts index 8fe86606..aa559510 100644 --- a/src/config.ts +++ b/src/config.ts @@ -65,10 +65,13 @@ export function getConfig(workspaceFolder?: WorkspaceFolder) { const debugOutFiles = get('debugOutFiles', []) + const debugSecondaryLaunchConfigName = get('debugSecondaryLaunchConfigName') + return { env: get>('nodeEnv', null), debugExclude: get('debugExclude'), debugOutFiles, + debugSecondaryLaunchConfigName, filesWatcherInclude, terminalShellArgs, terminalShellPath, diff --git a/src/debug.ts b/src/debug.ts index 67041c5a..e9792988 100644 --- a/src/debug.ts +++ b/src/debug.ts @@ -125,6 +125,32 @@ export async function debugTests( await vscode.debug.stopDebugging(session) }) + // Start secondary debug config before running test + // Deliberately not awaiting, because attach config may depend on the test run to start (e.g. to attach) + if (config.debugSecondaryLaunchConfigName) { + vscode.debug.startDebugging( + pkg.folder, + config.debugSecondaryLaunchConfigName, + session, + ).then( + (fulfilled) => { + if (fulfilled) { + log.info('[DEBUG] Secondary debug launch config started') + } + else { + log.error('[DEBUG] Secondary debug launch config failed') + } + } + , + (err) => { + log.error('[DEBUG] Secondary debug launch config failed') + log.error(err.toString()) + deferredPromise.reject(new Error('Failed to start secondary launch config', { cause: err })) + }, + ) + } + + await runner.runTests(request, token) deferredPromise.resolve() From edaa90d02d571a45e6d0cd8929434a0b4f65262e Mon Sep 17 00:00:00 2001 From: Nathan Castle Date: Mon, 24 Mar 2025 18:18:46 -0700 Subject: [PATCH 02/24] feat: add setting for debug-specific CLI arguments This is useful because sometimes you want to use different arguments to vitest when debugging. In particular, you don't want to pass inspect-brk when not debugging, but you need to pass that for browser-based debugging. --- package.json | 5 +++++ samples/browser-headed/.vscode/settings.json | 3 ++- samples/browser-headed/vitest.config.ts | 2 -- src/api.ts | 4 ++++ src/api/pkg.ts | 1 + src/api/ws.ts | 3 ++- src/config.ts | 2 ++ src/debug.ts | 1 - src/extension.ts | 1 + 9 files changed, 17 insertions(+), 5 deletions(-) diff --git a/package.json b/package.json index 4101b2dc..ab7e9dcb 100644 --- a/package.json +++ b/package.json @@ -239,6 +239,11 @@ "markdownDescription": "Additional arguments to pass to the Vitest CLI. Note that some arguments will be ignored: `watch`, `reporter`, `api`, and `ui`. Example: `--mode=staging`.", "type": "string", "scope": "resource" + }, + "vitest.cliArgumentsDebug": { + "markdownDescription": "Additional arguments to pass to the Vitest CLI when debugging. If not specified, falls back to `#vitest.cliArguments#`. Note that some arguments will be ignored: `watch`, `reporter`, `api`, and `ui`. Example: `--mode=staging`.", + "type": "string", + "scope": "resource" } } } diff --git a/samples/browser-headed/.vscode/settings.json b/samples/browser-headed/.vscode/settings.json index b4d2ef5f..4359a37e 100644 --- a/samples/browser-headed/.vscode/settings.json +++ b/samples/browser-headed/.vscode/settings.json @@ -7,5 +7,6 @@ }, // See launch.json "vitest.debugSecondaryLaunchConfigName": "vitest:test-explorer:attach", - "vitest.cliArguments": "--inspect-brk=localhost:30001" + "vitest.cliArguments": "", + "vitest.cliArgumentsDebug": "--inspect-brk=localhost:30001 --browser --no-file-parallelism" } diff --git a/samples/browser-headed/vitest.config.ts b/samples/browser-headed/vitest.config.ts index 920ca68d..f09b9125 100644 --- a/samples/browser-headed/vitest.config.ts +++ b/samples/browser-headed/vitest.config.ts @@ -11,8 +11,6 @@ export default defineConfig({ test: { include: ['test/**/*.test.ts'], exclude: ['test/ignored.test.ts'], - // This is needed for debugger connection to browser tests - fileParallelism: false, browser: { enabled: true, name: 'chromium', diff --git a/src/api.ts b/src/api.ts index a3d90027..3784efa5 100644 --- a/src/api.ts +++ b/src/api.ts @@ -361,6 +361,9 @@ async function createVitestFolderAPI(usedConfigs: Set, pkg: VitestPackag if (config.cliArguments && !pkg.arguments) { pkg.arguments = `vitest ${config.cliArguments}` } + if (!pkg.debugArguments) { + pkg.debugArguments = `vitest ${config.cliArgumentsDebug ?? config.cliArguments}` + } const vitest = config.shellType === 'terminal' ? await createVitestTerminalProcess(pkg) : await createVitestProcess(pkg) @@ -374,6 +377,7 @@ export interface ResolvedMeta { rpc: VitestRPC process: ExtensionWorkerProcess workspaceSource: string | false + debug: boolean pkg: VitestPackage configs: string[] handlers: { diff --git a/src/api/pkg.ts b/src/api/pkg.ts index 53c706df..86959b39 100644 --- a/src/api/pkg.ts +++ b/src/api/pkg.ts @@ -23,6 +23,7 @@ export interface VitestPackage { cwd: string version: string arguments?: string + debugArguments?: string configFile?: string workspaceFile?: string loader?: string diff --git a/src/api/ws.ts b/src/api/ws.ts index 3d836eb7..3b2acc5c 100644 --- a/src/api/ws.ts +++ b/src/api/ws.ts @@ -37,6 +37,7 @@ export function waitForWsConnection( }) resolve({ rpc: api, + debug, workspaceSource: message.workspaceSource, handlers: { ...handlers, @@ -89,7 +90,7 @@ export function waitForWsConnection( env: getConfig(pkg.folder).env || undefined, configFile: pkg.configFile, cwd: pkg.cwd, - arguments: pkg.arguments, + arguments: debug ? pkg.debugArguments : pkg.arguments, workspaceFile: pkg.workspaceFile, id: pkg.id, pnpApi: pnp, diff --git a/src/config.ts b/src/config.ts index aa559510..7f4d8c69 100644 --- a/src/config.ts +++ b/src/config.ts @@ -62,6 +62,7 @@ export function getConfig(workspaceFolder?: WorkspaceFolder) { const experimentalStaticAstCollect = get('experimentalStaticAstCollect', false)! const cliArguments = get('cliArguments') + const cliArgumentsDebug = get('cliArgumentsDebug') const debugOutFiles = get('debugOutFiles', []) @@ -77,6 +78,7 @@ export function getConfig(workspaceFolder?: WorkspaceFolder) { terminalShellPath, shellType, cliArguments, + cliArgumentsDebug, nodeExecArgs, experimentalStaticAstCollect, vitestPackagePath: resolvedVitestPackagePath, diff --git a/src/debug.ts b/src/debug.ts index e9792988..536265f3 100644 --- a/src/debug.ts +++ b/src/debug.ts @@ -150,7 +150,6 @@ export async function debugTests( ) } - await runner.runTests(request, token) deferredPromise.resolve() diff --git a/src/extension.ts b/src/extension.ts index 45799543..9ca9ed87 100644 --- a/src/extension.ts +++ b/src/extension.ts @@ -260,6 +260,7 @@ class VitestExtension { 'vitest.filesWatcherInclude', 'vitest.experimentalStaticAstCollect', 'vitest.cliArguments', + 'vitest.cliArgumentsDebug', ] this.disposables = [ From 843eccc0606470cf021f55f4c501c7564a1832ae Mon Sep 17 00:00:00 2001 From: Nathan Castle Date: Mon, 24 Mar 2025 18:23:54 -0700 Subject: [PATCH 03/24] fix: Stop main session when child stopped Automatically stop the debugging session when the secondary session is stopped; otherwise user needs to press stop button twice. --- src/debug.ts | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/src/debug.ts b/src/debug.ts index 536265f3..2fc3a0bb 100644 --- a/src/debug.ts +++ b/src/debug.ts @@ -170,8 +170,14 @@ export async function debugTests( }) const onDidTerminate = vscode.debug.onDidTerminateDebugSession((session) => { - if (session.configuration.__name !== 'Vitest') + // Child/secondary debug session should stop the main debugging session + if (session.parentSession?.configuration.__name === 'Vitest') { + vscode.debug.stopDebugging(session.parentSession) + return + } + else if (session.configuration.__name !== 'Vitest') { return + } disposables.reverse().forEach(d => d.dispose()) server.close() }) From 218a495f2e5f53d649f8e31afb0dc910a4ccea27 Mon Sep 17 00:00:00 2001 From: Nathan Castle Date: Mon, 24 Mar 2025 18:44:46 -0700 Subject: [PATCH 04/24] doc: add arg to readme, remove redundant sample --- .vscode/launch.json | 10 - README.md | 1 + samples/browser-headed/.skip/vitest.config.ts | 1 - samples/browser-headed/.vscode/settings.json | 12 - samples/browser-headed/package.json | 21 - samples/browser-headed/pnpm-lock.yaml | 1865 ----------------- samples/browser-headed/src/add.ts | 7 - .../src/should_included_test.ts | 5 - samples/browser-headed/test/.gitignore | 1 - .../testing-all-fail--1----0-1.png | Bin 3012 -> 0 bytes .../testing-all-fail--2----0-1.png | Bin 3012 -> 0 bytes .../testing-all-fail--3----0-1.png | Bin 3012 -> 0 bytes .../testing-first-fail--3----1-1.png | Bin 3012 -> 0 bytes .../testing-first-pass--2----1-1.png | Bin 3012 -> 0 bytes .../testing-first-pass--3----1-1.png | Bin 3012 -> 0 bytes .../testing-last-fail--3----1-1.png | Bin 3012 -> 0 bytes .../testing-last-pass--3----1-1.png | Bin 3012 -> 0 bytes .../env.test.ts/process-env-1.png | Bin 3012 -> 0 bytes samples/browser-headed/test/add.test.ts | 52 - samples/browser-headed/test/console.test.ts | 25 - .../test/deep/deeper/deep.test.ts | 5 - .../browser-headed/test/duplicated.test.ts | 8 - samples/browser-headed/test/each.test.ts | 84 - samples/browser-headed/test/env.test.ts | 9 - .../browser-headed/test/fail_to_run.test.ts | 1 - samples/browser-headed/test/ignored.test.ts | 5 - samples/browser-headed/test/mul.test.ts | 6 - samples/browser-headed/test/snapshot.test.ts | 11 - samples/browser-headed/test/using.test.ts | 43 - samples/browser-headed/vitest.config.ts | 20 - .../.vscode/launch.json | 0 samples/browser/.vscode/settings.json | 5 +- 32 files changed, 5 insertions(+), 2192 deletions(-) delete mode 100644 samples/browser-headed/.skip/vitest.config.ts delete mode 100644 samples/browser-headed/.vscode/settings.json delete mode 100644 samples/browser-headed/package.json delete mode 100644 samples/browser-headed/pnpm-lock.yaml delete mode 100644 samples/browser-headed/src/add.ts delete mode 100644 samples/browser-headed/src/should_included_test.ts delete mode 100644 samples/browser-headed/test/.gitignore delete mode 100644 samples/browser-headed/test/__screenshots__/each.test.ts/testing-all-fail--1----0-1.png delete mode 100644 samples/browser-headed/test/__screenshots__/each.test.ts/testing-all-fail--2----0-1.png delete mode 100644 samples/browser-headed/test/__screenshots__/each.test.ts/testing-all-fail--3----0-1.png delete mode 100644 samples/browser-headed/test/__screenshots__/each.test.ts/testing-first-fail--3----1-1.png delete mode 100644 samples/browser-headed/test/__screenshots__/each.test.ts/testing-first-pass--2----1-1.png delete mode 100644 samples/browser-headed/test/__screenshots__/each.test.ts/testing-first-pass--3----1-1.png delete mode 100644 samples/browser-headed/test/__screenshots__/each.test.ts/testing-last-fail--3----1-1.png delete mode 100644 samples/browser-headed/test/__screenshots__/each.test.ts/testing-last-pass--3----1-1.png delete mode 100644 samples/browser-headed/test/__screenshots__/env.test.ts/process-env-1.png delete mode 100644 samples/browser-headed/test/add.test.ts delete mode 100644 samples/browser-headed/test/console.test.ts delete mode 100644 samples/browser-headed/test/deep/deeper/deep.test.ts delete mode 100644 samples/browser-headed/test/duplicated.test.ts delete mode 100644 samples/browser-headed/test/each.test.ts delete mode 100644 samples/browser-headed/test/env.test.ts delete mode 100644 samples/browser-headed/test/fail_to_run.test.ts delete mode 100644 samples/browser-headed/test/ignored.test.ts delete mode 100644 samples/browser-headed/test/mul.test.ts delete mode 100644 samples/browser-headed/test/snapshot.test.ts delete mode 100644 samples/browser-headed/test/using.test.ts delete mode 100644 samples/browser-headed/vitest.config.ts rename samples/{browser-headed => browser}/.vscode/launch.json (100%) diff --git a/.vscode/launch.json b/.vscode/launch.json index c27155c0..dc423605 100644 --- a/.vscode/launch.json +++ b/.vscode/launch.json @@ -25,16 +25,6 @@ ], "outFiles": ["${workspaceFolder}/dist/**/*.js"] }, - { - "name": "Run Extension Browser (Headed) Sample", - "type": "extensionHost", - "request": "launch", - "args": [ - "--extensionDevelopmentPath=${workspaceFolder}", - "${workspaceFolder}/samples/browser-headed" - ], - "outFiles": ["${workspaceFolder}/dist/**/*.js"] - }, { "name": "Run Extension Continuous Sample", "type": "extensionHost", diff --git a/README.md b/README.md index 2ad313fd..1aadc7f0 100644 --- a/README.md +++ b/README.md @@ -81,6 +81,7 @@ These options are resolved relative to the [workspace file](https://code.visuals - `vitest.debuggerPort`: Port that the debugger will be attached to. By default uses 9229 or tries to find a free port if it's not available. - `vitest.debuggerAddress`: TCP/IP address of process to be debugged. Default: localhost - `vitest.cliArguments`: Additional arguments to pass to the Vitest CLI. Note that some arguments will be ignored: `watch`, `reporter`, `api`, and `ui`. Example: `--mode=staging` +- `vitest.cliArgumentsDebug`: Additional arguments to pass to the Vitest CLI when debugging. Will fall back to `vitest.cliArguments` if not specified. Note that some arguments will be ignored: `watch`, `reporter`, `api`, and `ui`. Example: `--mode=staging` - `vitest.debugSecondaryLaunchConfigName`: The name of the VS Code [launch configuration](https://code.visualstudio.com/docs/editor/debugging-configuration#_launch-versus-attach-configurations) to run after starting a test debug session but before running the tests. This is useful to support in-browser test scenarios, for example by specifying an 'attach' config. See [Browser mode debugging](https://vitest.dev/guide/debugging.html#browser-mode) in the Vitest docs for more information. > 💡 The `vitest.nodeExecutable` and `vitest.nodeExecArgs` settings are used as `execPath` and `execArgv` when spawning a new `child_process`, and as `runtimeExecutable` and `runtimeArgs` when [debugging a test](https://github.com/microsoft/vscode-js-debug/blob/main/OPTIONS.md). diff --git a/samples/browser-headed/.skip/vitest.config.ts b/samples/browser-headed/.skip/vitest.config.ts deleted file mode 100644 index 91480683..00000000 --- a/samples/browser-headed/.skip/vitest.config.ts +++ /dev/null @@ -1 +0,0 @@ -throw new Error('do not import') \ No newline at end of file diff --git a/samples/browser-headed/.vscode/settings.json b/samples/browser-headed/.vscode/settings.json deleted file mode 100644 index 4359a37e..00000000 --- a/samples/browser-headed/.vscode/settings.json +++ /dev/null @@ -1,12 +0,0 @@ -{ - "vitest.nodeEnv": { - "TEST_CUSTOM_ENV": "hello" - }, - "[typescript]": { - "editor.defaultFormatter": "dbaeumer.vscode-eslint" - }, - // See launch.json - "vitest.debugSecondaryLaunchConfigName": "vitest:test-explorer:attach", - "vitest.cliArguments": "", - "vitest.cliArgumentsDebug": "--inspect-brk=localhost:30001 --browser --no-file-parallelism" -} diff --git a/samples/browser-headed/package.json b/samples/browser-headed/package.json deleted file mode 100644 index d4d1ac54..00000000 --- a/samples/browser-headed/package.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "name": "basic", - "version": "1.0.0", - "description": "", - "author": "", - "license": "ISC", - "main": "index.js", - "scripts": { - "test": "vitest run" - }, - "dependencies": { - "birpc": "^0.2.2" - }, - "devDependencies": { - "@vitest/browser": "^2.1.8", - "@vitest/coverage-v8": "^2.1.8", - "playwright": "^1.47.0", - "vite": "^5.4.3", - "vitest": "^2.1.8" - } -} diff --git a/samples/browser-headed/pnpm-lock.yaml b/samples/browser-headed/pnpm-lock.yaml deleted file mode 100644 index 407dcb8f..00000000 --- a/samples/browser-headed/pnpm-lock.yaml +++ /dev/null @@ -1,1865 +0,0 @@ -lockfileVersion: '9.0' - -settings: - autoInstallPeers: true - excludeLinksFromLockfile: false - -importers: - - .: - dependencies: - birpc: - specifier: ^0.2.2 - version: 0.2.19 - devDependencies: - '@vitest/browser': - specifier: ^2.1.8 - version: 2.1.9(playwright@1.50.1)(vite@5.4.14)(vitest@2.1.9) - '@vitest/coverage-v8': - specifier: ^2.1.8 - version: 2.1.9(@vitest/browser@2.1.9)(vitest@2.1.9) - playwright: - specifier: ^1.47.0 - version: 1.50.1 - vite: - specifier: ^5.4.3 - version: 5.4.14 - vitest: - specifier: ^2.1.8 - version: 2.1.9(@vitest/browser@2.1.9)(msw@2.7.0) - -packages: - - '@ampproject/remapping@2.3.0': - resolution: {integrity: sha512-30iZtAPgz+LTIYoeivqYo853f02jBYSd5uGnGpkFV0M3xOt9aN73erkgYAmZU43x4VfqcnLxW9Kpg3R5LC4YYw==} - engines: {node: '>=6.0.0'} - - '@babel/code-frame@7.26.2': - resolution: {integrity: sha512-RJlIHRueQgwWitWgF8OdFYGZX328Ax5BCemNGlqHfplnRT9ESi8JkFlvaVYbS+UubVY6dpv87Fs2u5M29iNFVQ==} - engines: {node: '>=6.9.0'} - - '@babel/helper-string-parser@7.25.9': - resolution: {integrity: sha512-4A/SCr/2KLd5jrtOMFzaKjVtAei3+2r/NChoBNoZ3EyP/+GlhoaEGoWOZUmFmoITP7zOJyHIMm+DYRd8o3PvHA==} - engines: {node: '>=6.9.0'} - - '@babel/helper-validator-identifier@7.25.9': - resolution: {integrity: sha512-Ed61U6XJc3CVRfkERJWDz4dJwKe7iLmmJsbOGu9wSloNSFttHV0I8g6UAgb7qnK5ly5bGLPd4oXZlxCdANBOWQ==} - engines: {node: '>=6.9.0'} - - '@babel/parser@7.26.8': - resolution: {integrity: sha512-TZIQ25pkSoaKEYYaHbbxkfL36GNsQ6iFiBbeuzAkLnXayKR1yP1zFe+NxuZWWsUyvt8icPU9CCq0sgWGXR1GEw==} - engines: {node: '>=6.0.0'} - hasBin: true - - '@babel/runtime@7.26.7': - resolution: {integrity: sha512-AOPI3D+a8dXnja+iwsUqGRjr1BbZIe771sXdapOtYI531gSqpi92vXivKcq2asu/DFpdl1ceFAKZyRzK2PCVcQ==} - engines: {node: '>=6.9.0'} - - '@babel/types@7.26.8': - resolution: {integrity: sha512-eUuWapzEGWFEpHFxgEaBG8e3n6S8L3MSu0oda755rOfabWPnh0Our1AozNFVUxGFIhbKgd1ksprsoDGMinTOTA==} - engines: {node: '>=6.9.0'} - - '@bcoe/v8-coverage@0.2.3': - resolution: {integrity: sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw==} - - '@bundled-es-modules/cookie@2.0.1': - resolution: {integrity: sha512-8o+5fRPLNbjbdGRRmJj3h6Hh1AQJf2dk3qQ/5ZFb+PXkRNiSoMGGUKlsgLfrxneb72axVJyIYji64E2+nNfYyw==} - - '@bundled-es-modules/statuses@1.0.1': - resolution: {integrity: sha512-yn7BklA5acgcBr+7w064fGV+SGIFySjCKpqjcWgBAIfrAkY+4GQTJJHQMeT3V/sgz23VTEVV8TtOmkvJAhFVfg==} - - '@bundled-es-modules/tough-cookie@0.1.6': - resolution: {integrity: sha512-dvMHbL464C0zI+Yqxbz6kZ5TOEp7GLW+pry/RWndAR8MJQAXZ2rPmIs8tziTZjeIyhSNZgZbCePtfSbdWqStJw==} - - '@esbuild/aix-ppc64@0.21.5': - resolution: {integrity: sha512-1SDgH6ZSPTlggy1yI6+Dbkiz8xzpHJEVAlF/AM1tHPLsf5STom9rwtjE4hKAF20FfXXNTFqEYXyJNWh1GiZedQ==} - engines: {node: '>=12'} - cpu: [ppc64] - os: [aix] - - '@esbuild/android-arm64@0.21.5': - resolution: {integrity: sha512-c0uX9VAUBQ7dTDCjq+wdyGLowMdtR/GoC2U5IYk/7D1H1JYC0qseD7+11iMP2mRLN9RcCMRcjC4YMclCzGwS/A==} - engines: {node: '>=12'} - cpu: [arm64] - os: [android] - - '@esbuild/android-arm@0.21.5': - resolution: {integrity: sha512-vCPvzSjpPHEi1siZdlvAlsPxXl7WbOVUBBAowWug4rJHb68Ox8KualB+1ocNvT5fjv6wpkX6o/iEpbDrf68zcg==} - engines: {node: '>=12'} - cpu: [arm] - os: [android] - - '@esbuild/android-x64@0.21.5': - resolution: {integrity: sha512-D7aPRUUNHRBwHxzxRvp856rjUHRFW1SdQATKXH2hqA0kAZb1hKmi02OpYRacl0TxIGz/ZmXWlbZgjwWYaCakTA==} - engines: {node: '>=12'} - cpu: [x64] - os: [android] - - '@esbuild/darwin-arm64@0.21.5': - resolution: {integrity: sha512-DwqXqZyuk5AiWWf3UfLiRDJ5EDd49zg6O9wclZ7kUMv2WRFr4HKjXp/5t8JZ11QbQfUS6/cRCKGwYhtNAY88kQ==} - engines: {node: '>=12'} - cpu: [arm64] - os: [darwin] - - '@esbuild/darwin-x64@0.21.5': - resolution: {integrity: sha512-se/JjF8NlmKVG4kNIuyWMV/22ZaerB+qaSi5MdrXtd6R08kvs2qCN4C09miupktDitvh8jRFflwGFBQcxZRjbw==} - engines: {node: '>=12'} - cpu: [x64] - os: [darwin] - - '@esbuild/freebsd-arm64@0.21.5': - resolution: {integrity: sha512-5JcRxxRDUJLX8JXp/wcBCy3pENnCgBR9bN6JsY4OmhfUtIHe3ZW0mawA7+RDAcMLrMIZaf03NlQiX9DGyB8h4g==} - engines: {node: '>=12'} - cpu: [arm64] - os: [freebsd] - - '@esbuild/freebsd-x64@0.21.5': - resolution: {integrity: sha512-J95kNBj1zkbMXtHVH29bBriQygMXqoVQOQYA+ISs0/2l3T9/kj42ow2mpqerRBxDJnmkUDCaQT/dfNXWX/ZZCQ==} - engines: {node: '>=12'} - cpu: [x64] - os: [freebsd] - - '@esbuild/linux-arm64@0.21.5': - resolution: {integrity: sha512-ibKvmyYzKsBeX8d8I7MH/TMfWDXBF3db4qM6sy+7re0YXya+K1cem3on9XgdT2EQGMu4hQyZhan7TeQ8XkGp4Q==} - engines: {node: '>=12'} - cpu: [arm64] - os: [linux] - - '@esbuild/linux-arm@0.21.5': - resolution: {integrity: sha512-bPb5AHZtbeNGjCKVZ9UGqGwo8EUu4cLq68E95A53KlxAPRmUyYv2D6F0uUI65XisGOL1hBP5mTronbgo+0bFcA==} - engines: {node: '>=12'} - cpu: [arm] - os: [linux] - - '@esbuild/linux-ia32@0.21.5': - resolution: {integrity: sha512-YvjXDqLRqPDl2dvRODYmmhz4rPeVKYvppfGYKSNGdyZkA01046pLWyRKKI3ax8fbJoK5QbxblURkwK/MWY18Tg==} - engines: {node: '>=12'} - cpu: [ia32] - os: [linux] - - '@esbuild/linux-loong64@0.21.5': - resolution: {integrity: sha512-uHf1BmMG8qEvzdrzAqg2SIG/02+4/DHB6a9Kbya0XDvwDEKCoC8ZRWI5JJvNdUjtciBGFQ5PuBlpEOXQj+JQSg==} - engines: {node: '>=12'} - cpu: [loong64] - os: [linux] - - '@esbuild/linux-mips64el@0.21.5': - resolution: {integrity: sha512-IajOmO+KJK23bj52dFSNCMsz1QP1DqM6cwLUv3W1QwyxkyIWecfafnI555fvSGqEKwjMXVLokcV5ygHW5b3Jbg==} - engines: {node: '>=12'} - cpu: [mips64el] - os: [linux] - - '@esbuild/linux-ppc64@0.21.5': - resolution: {integrity: sha512-1hHV/Z4OEfMwpLO8rp7CvlhBDnjsC3CttJXIhBi+5Aj5r+MBvy4egg7wCbe//hSsT+RvDAG7s81tAvpL2XAE4w==} - engines: {node: '>=12'} - cpu: [ppc64] - os: [linux] - - '@esbuild/linux-riscv64@0.21.5': - resolution: {integrity: sha512-2HdXDMd9GMgTGrPWnJzP2ALSokE/0O5HhTUvWIbD3YdjME8JwvSCnNGBnTThKGEB91OZhzrJ4qIIxk/SBmyDDA==} - engines: {node: '>=12'} - cpu: [riscv64] - os: [linux] - - '@esbuild/linux-s390x@0.21.5': - resolution: {integrity: sha512-zus5sxzqBJD3eXxwvjN1yQkRepANgxE9lgOW2qLnmr8ikMTphkjgXu1HR01K4FJg8h1kEEDAqDcZQtbrRnB41A==} - engines: {node: '>=12'} - cpu: [s390x] - os: [linux] - - '@esbuild/linux-x64@0.21.5': - resolution: {integrity: sha512-1rYdTpyv03iycF1+BhzrzQJCdOuAOtaqHTWJZCWvijKD2N5Xu0TtVC8/+1faWqcP9iBCWOmjmhoH94dH82BxPQ==} - engines: {node: '>=12'} - cpu: [x64] - os: [linux] - - '@esbuild/netbsd-x64@0.21.5': - resolution: {integrity: sha512-Woi2MXzXjMULccIwMnLciyZH4nCIMpWQAs049KEeMvOcNADVxo0UBIQPfSmxB3CWKedngg7sWZdLvLczpe0tLg==} - engines: {node: '>=12'} - cpu: [x64] - os: [netbsd] - - '@esbuild/openbsd-x64@0.21.5': - resolution: {integrity: sha512-HLNNw99xsvx12lFBUwoT8EVCsSvRNDVxNpjZ7bPn947b8gJPzeHWyNVhFsaerc0n3TsbOINvRP2byTZ5LKezow==} - engines: {node: '>=12'} - cpu: [x64] - os: [openbsd] - - '@esbuild/sunos-x64@0.21.5': - resolution: {integrity: sha512-6+gjmFpfy0BHU5Tpptkuh8+uw3mnrvgs+dSPQXQOv3ekbordwnzTVEb4qnIvQcYXq6gzkyTnoZ9dZG+D4garKg==} - engines: {node: '>=12'} - cpu: [x64] - os: [sunos] - - '@esbuild/win32-arm64@0.21.5': - resolution: {integrity: sha512-Z0gOTd75VvXqyq7nsl93zwahcTROgqvuAcYDUr+vOv8uHhNSKROyU961kgtCD1e95IqPKSQKH7tBTslnS3tA8A==} - engines: {node: '>=12'} - cpu: [arm64] - os: [win32] - - '@esbuild/win32-ia32@0.21.5': - resolution: {integrity: sha512-SWXFF1CL2RVNMaVs+BBClwtfZSvDgtL//G/smwAc5oVK/UPu2Gu9tIaRgFmYFFKrmg3SyAjSrElf0TiJ1v8fYA==} - engines: {node: '>=12'} - cpu: [ia32] - os: [win32] - - '@esbuild/win32-x64@0.21.5': - resolution: {integrity: sha512-tQd/1efJuzPC6rCFwEvLtci/xNFcTZknmXs98FYDfGE4wP9ClFV98nyKrzJKVPMhdDnjzLhdUyMX4PsQAPjwIw==} - engines: {node: '>=12'} - cpu: [x64] - os: [win32] - - '@inquirer/confirm@5.1.5': - resolution: {integrity: sha512-ZB2Cz8KeMINUvoeDi7IrvghaVkYT2RB0Zb31EaLWOE87u276w4wnApv0SH2qWaJ3r0VSUa3BIuz7qAV2ZvsZlg==} - engines: {node: '>=18'} - peerDependencies: - '@types/node': '>=18' - peerDependenciesMeta: - '@types/node': - optional: true - - '@inquirer/core@10.1.6': - resolution: {integrity: sha512-Bwh/Zk6URrHwZnSSzAZAKH7YgGYi0xICIBDFOqBQoXNNAzBHw/bgXgLmChfp+GyR3PnChcTbiCTZGC6YJNJkMA==} - engines: {node: '>=18'} - peerDependencies: - '@types/node': '>=18' - peerDependenciesMeta: - '@types/node': - optional: true - - '@inquirer/figures@1.0.10': - resolution: {integrity: sha512-Ey6176gZmeqZuY/W/nZiUyvmb1/qInjcpiZjXWi6nON+nxJpD1bxtSoBxNliGISae32n6OwbY+TSXPZ1CfS4bw==} - engines: {node: '>=18'} - - '@inquirer/type@3.0.4': - resolution: {integrity: sha512-2MNFrDY8jkFYc9Il9DgLsHhMzuHnOYM1+CUYVWbzu9oT0hC7V7EcYvdCKeoll/Fcci04A+ERZ9wcc7cQ8lTkIA==} - engines: {node: '>=18'} - peerDependencies: - '@types/node': '>=18' - peerDependenciesMeta: - '@types/node': - optional: true - - '@isaacs/cliui@8.0.2': - resolution: {integrity: sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==} - engines: {node: '>=12'} - - '@istanbuljs/schema@0.1.3': - resolution: {integrity: sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA==} - engines: {node: '>=8'} - - '@jridgewell/gen-mapping@0.3.8': - resolution: {integrity: sha512-imAbBGkb+ebQyxKgzv5Hu2nmROxoDOXHh80evxdoXNOrvAnVx7zimzc1Oo5h9RlfV4vPXaE2iM5pOFbvOCClWA==} - engines: {node: '>=6.0.0'} - - '@jridgewell/resolve-uri@3.1.2': - resolution: {integrity: sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==} - engines: {node: '>=6.0.0'} - - '@jridgewell/set-array@1.2.1': - resolution: {integrity: sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A==} - engines: {node: '>=6.0.0'} - - '@jridgewell/sourcemap-codec@1.5.0': - resolution: {integrity: sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ==} - - '@jridgewell/trace-mapping@0.3.25': - resolution: {integrity: sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==} - - '@mswjs/interceptors@0.37.6': - resolution: {integrity: sha512-wK+5pLK5XFmgtH3aQ2YVvA3HohS3xqV/OxuVOdNx9Wpnz7VE/fnC+e1A7ln6LFYeck7gOJ/dsZV6OLplOtAJ2w==} - engines: {node: '>=18'} - - '@open-draft/deferred-promise@2.2.0': - resolution: {integrity: sha512-CecwLWx3rhxVQF6V4bAgPS5t+So2sTbPgAzafKkVizyi7tlwpcFpdFqq+wqF2OwNBmqFuu6tOyouTuxgpMfzmA==} - - '@open-draft/logger@0.3.0': - resolution: {integrity: sha512-X2g45fzhxH238HKO4xbSr7+wBS8Fvw6ixhTDuvLd5mqh6bJJCFAPwU9mPDxbcrRtfxv4u5IHCEH77BmxvXmmxQ==} - - '@open-draft/until@2.1.0': - resolution: {integrity: sha512-U69T3ItWHvLwGg5eJ0n3I62nWuE6ilHlmz7zM0npLBRvPRd7e6NYmg54vvRtP5mZG7kZqZCFVdsTWo7BPtBujg==} - - '@pkgjs/parseargs@0.11.0': - resolution: {integrity: sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==} - engines: {node: '>=14'} - - '@polka/url@1.0.0-next.28': - resolution: {integrity: sha512-8LduaNlMZGwdZ6qWrKlfa+2M4gahzFkprZiAt2TF8uS0qQgBizKXpXURqvTJ4WtmupWxaLqjRb2UCTe72mu+Aw==} - - '@rollup/rollup-android-arm-eabi@4.34.6': - resolution: {integrity: sha512-+GcCXtOQoWuC7hhX1P00LqjjIiS/iOouHXhMdiDSnq/1DGTox4SpUvO52Xm+div6+106r+TcvOeo/cxvyEyTgg==} - cpu: [arm] - os: [android] - - '@rollup/rollup-android-arm64@4.34.6': - resolution: {integrity: sha512-E8+2qCIjciYUnCa1AiVF1BkRgqIGW9KzJeesQqVfyRITGQN+dFuoivO0hnro1DjT74wXLRZ7QF8MIbz+luGaJA==} - cpu: [arm64] - os: [android] - - '@rollup/rollup-darwin-arm64@4.34.6': - resolution: {integrity: sha512-z9Ib+OzqN3DZEjX7PDQMHEhtF+t6Mi2z/ueChQPLS/qUMKY7Ybn5A2ggFoKRNRh1q1T03YTQfBTQCJZiepESAg==} - cpu: [arm64] - os: [darwin] - - '@rollup/rollup-darwin-x64@4.34.6': - resolution: {integrity: sha512-PShKVY4u0FDAR7jskyFIYVyHEPCPnIQY8s5OcXkdU8mz3Y7eXDJPdyM/ZWjkYdR2m0izD9HHWA8sGcXn+Qrsyg==} - cpu: [x64] - os: [darwin] - - '@rollup/rollup-freebsd-arm64@4.34.6': - resolution: {integrity: sha512-YSwyOqlDAdKqs0iKuqvRHLN4SrD2TiswfoLfvYXseKbL47ht1grQpq46MSiQAx6rQEN8o8URtpXARCpqabqxGQ==} - cpu: [arm64] - os: [freebsd] - - '@rollup/rollup-freebsd-x64@4.34.6': - resolution: {integrity: sha512-HEP4CgPAY1RxXwwL5sPFv6BBM3tVeLnshF03HMhJYCNc6kvSqBgTMmsEjb72RkZBAWIqiPUyF1JpEBv5XT9wKQ==} - cpu: [x64] - os: [freebsd] - - '@rollup/rollup-linux-arm-gnueabihf@4.34.6': - resolution: {integrity: sha512-88fSzjC5xeH9S2Vg3rPgXJULkHcLYMkh8faix8DX4h4TIAL65ekwuQMA/g2CXq8W+NJC43V6fUpYZNjaX3+IIg==} - cpu: [arm] - os: [linux] - - '@rollup/rollup-linux-arm-musleabihf@4.34.6': - resolution: {integrity: sha512-wM4ztnutBqYFyvNeR7Av+reWI/enK9tDOTKNF+6Kk2Q96k9bwhDDOlnCUNRPvromlVXo04riSliMBs/Z7RteEg==} - cpu: [arm] - os: [linux] - - '@rollup/rollup-linux-arm64-gnu@4.34.6': - resolution: {integrity: sha512-9RyprECbRa9zEjXLtvvshhw4CMrRa3K+0wcp3KME0zmBe1ILmvcVHnypZ/aIDXpRyfhSYSuN4EPdCCj5Du8FIA==} - cpu: [arm64] - os: [linux] - - '@rollup/rollup-linux-arm64-musl@4.34.6': - resolution: {integrity: sha512-qTmklhCTyaJSB05S+iSovfo++EwnIEZxHkzv5dep4qoszUMX5Ca4WM4zAVUMbfdviLgCSQOu5oU8YoGk1s6M9Q==} - cpu: [arm64] - os: [linux] - - '@rollup/rollup-linux-loongarch64-gnu@4.34.6': - resolution: {integrity: sha512-4Qmkaps9yqmpjY5pvpkfOerYgKNUGzQpFxV6rnS7c/JfYbDSU0y6WpbbredB5cCpLFGJEqYX40WUmxMkwhWCjw==} - cpu: [loong64] - os: [linux] - - '@rollup/rollup-linux-powerpc64le-gnu@4.34.6': - resolution: {integrity: sha512-Zsrtux3PuaxuBTX/zHdLaFmcofWGzaWW1scwLU3ZbW/X+hSsFbz9wDIp6XvnT7pzYRl9MezWqEqKy7ssmDEnuQ==} - cpu: [ppc64] - os: [linux] - - '@rollup/rollup-linux-riscv64-gnu@4.34.6': - resolution: {integrity: sha512-aK+Zp+CRM55iPrlyKiU3/zyhgzWBxLVrw2mwiQSYJRobCURb781+XstzvA8Gkjg/hbdQFuDw44aUOxVQFycrAg==} - cpu: [riscv64] - os: [linux] - - '@rollup/rollup-linux-s390x-gnu@4.34.6': - resolution: {integrity: sha512-WoKLVrY9ogmaYPXwTH326+ErlCIgMmsoRSx6bO+l68YgJnlOXhygDYSZe/qbUJCSiCiZAQ+tKm88NcWuUXqOzw==} - cpu: [s390x] - os: [linux] - - '@rollup/rollup-linux-x64-gnu@4.34.6': - resolution: {integrity: sha512-Sht4aFvmA4ToHd2vFzwMFaQCiYm2lDFho5rPcvPBT5pCdC+GwHG6CMch4GQfmWTQ1SwRKS0dhDYb54khSrjDWw==} - cpu: [x64] - os: [linux] - - '@rollup/rollup-linux-x64-musl@4.34.6': - resolution: {integrity: sha512-zmmpOQh8vXc2QITsnCiODCDGXFC8LMi64+/oPpPx5qz3pqv0s6x46ps4xoycfUiVZps5PFn1gksZzo4RGTKT+A==} - cpu: [x64] - os: [linux] - - '@rollup/rollup-win32-arm64-msvc@4.34.6': - resolution: {integrity: sha512-3/q1qUsO/tLqGBaD4uXsB6coVGB3usxw3qyeVb59aArCgedSF66MPdgRStUd7vbZOsko/CgVaY5fo2vkvPLWiA==} - cpu: [arm64] - os: [win32] - - '@rollup/rollup-win32-ia32-msvc@4.34.6': - resolution: {integrity: sha512-oLHxuyywc6efdKVTxvc0135zPrRdtYVjtVD5GUm55I3ODxhU/PwkQFD97z16Xzxa1Fz0AEe4W/2hzRtd+IfpOA==} - cpu: [ia32] - os: [win32] - - '@rollup/rollup-win32-x64-msvc@4.34.6': - resolution: {integrity: sha512-0PVwmgzZ8+TZ9oGBmdZoQVXflbvuwzN/HRclujpl4N/q3i+y0lqLw8n1bXA8ru3sApDjlmONaNAuYr38y1Kr9w==} - cpu: [x64] - os: [win32] - - '@testing-library/dom@10.4.0': - resolution: {integrity: sha512-pemlzrSESWbdAloYml3bAJMEfNh1Z7EduzqPKprCH5S341frlpYnUEW0H72dLxa6IsYr+mPno20GiSm+h9dEdQ==} - engines: {node: '>=18'} - - '@testing-library/user-event@14.6.1': - resolution: {integrity: sha512-vq7fv0rnt+QTXgPxr5Hjc210p6YKq2kmdziLgnsZGgLJ9e6VAShx1pACLuRjd/AS/sr7phAR58OIIpf0LlmQNw==} - engines: {node: '>=12', npm: '>=6'} - peerDependencies: - '@testing-library/dom': '>=7.21.4' - - '@types/aria-query@5.0.4': - resolution: {integrity: sha512-rfT93uj5s0PRL7EzccGMs3brplhcrghnDoV26NqKhCAS1hVo+WdNsPvE/yb6ilfr5hi2MEk6d5EWJTKdxg8jVw==} - - '@types/cookie@0.6.0': - resolution: {integrity: sha512-4Kh9a6B2bQciAhf7FSuMRRkUWecJgJu9nPnx3yzpsfXX/c50REIqpHY4C82bXP90qrLtXtkDxTZosYO3UpOwlA==} - - '@types/estree@1.0.6': - resolution: {integrity: sha512-AYnb1nQyY49te+VRAVgmzfcgjYS91mY5P0TKUDCLEM+gNnA+3T6rWITXRLYCpahpqSQbN5cE+gHpnPyXjHWxcw==} - - '@types/statuses@2.0.5': - resolution: {integrity: sha512-jmIUGWrAiwu3dZpxntxieC+1n/5c3mjrImkmOSQ2NC5uP6cYO4aAZDdSmRcI5C1oiTmqlZGHC+/NmJrKogbP5A==} - - '@types/tough-cookie@4.0.5': - resolution: {integrity: sha512-/Ad8+nIOV7Rl++6f1BdKxFSMgmoqEoYbHRpPcx3JEfv8VRsQe9Z4mCXeJBzxs7mbHY/XOZZuXlRNfhpVPbs6ZA==} - - '@vitest/browser@2.1.9': - resolution: {integrity: sha512-AHDanTP4Ed6J5R6wRBcWRQ+AxgMnNJxsbaa229nFQz5KOMFZqlW11QkIDoLgCjBOpQ1+c78lTN5jVxO8ME+S4w==} - peerDependencies: - playwright: '*' - safaridriver: '*' - vitest: 2.1.9 - webdriverio: '*' - peerDependenciesMeta: - playwright: - optional: true - safaridriver: - optional: true - webdriverio: - optional: true - - '@vitest/coverage-v8@2.1.9': - resolution: {integrity: sha512-Z2cOr0ksM00MpEfyVE8KXIYPEcBFxdbLSs56L8PO0QQMxt/6bDj45uQfxoc96v05KW3clk7vvgP0qfDit9DmfQ==} - peerDependencies: - '@vitest/browser': 2.1.9 - vitest: 2.1.9 - peerDependenciesMeta: - '@vitest/browser': - optional: true - - '@vitest/expect@2.1.9': - resolution: {integrity: sha512-UJCIkTBenHeKT1TTlKMJWy1laZewsRIzYighyYiJKZreqtdxSos/S1t+ktRMQWu2CKqaarrkeszJx1cgC5tGZw==} - - '@vitest/mocker@2.1.9': - resolution: {integrity: sha512-tVL6uJgoUdi6icpxmdrn5YNo3g3Dxv+IHJBr0GXHaEdTcw3F+cPKnsXFhli6nO+f/6SDKPHEK1UN+k+TQv0Ehg==} - peerDependencies: - msw: ^2.4.9 - vite: ^5.0.0 - peerDependenciesMeta: - msw: - optional: true - vite: - optional: true - - '@vitest/pretty-format@2.1.9': - resolution: {integrity: sha512-KhRIdGV2U9HOUzxfiHmY8IFHTdqtOhIzCpd8WRdJiE7D/HUcZVD0EgQCVjm+Q9gkUXWgBvMmTtZgIG48wq7sOQ==} - - '@vitest/runner@2.1.9': - resolution: {integrity: sha512-ZXSSqTFIrzduD63btIfEyOmNcBmQvgOVsPNPe0jYtESiXkhd8u2erDLnMxmGrDCwHCCHE7hxwRDCT3pt0esT4g==} - - '@vitest/snapshot@2.1.9': - resolution: {integrity: sha512-oBO82rEjsxLNJincVhLhaxxZdEtV0EFHMK5Kmx5sJ6H9L183dHECjiefOAdnqpIgT5eZwT04PoggUnW88vOBNQ==} - - '@vitest/spy@2.1.9': - resolution: {integrity: sha512-E1B35FwzXXTs9FHNK6bDszs7mtydNi5MIfUWpceJ8Xbfb1gBMscAnwLbEu+B44ed6W3XjL9/ehLPHR1fkf1KLQ==} - - '@vitest/utils@2.1.9': - resolution: {integrity: sha512-v0psaMSkNJ3A2NMrUEHFRzJtDPFn+/VWZ5WxImB21T9fjucJRmS7xCS3ppEnARb9y11OAzaD+P2Ps+b+BGX5iQ==} - - ansi-escapes@4.3.2: - resolution: {integrity: sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==} - engines: {node: '>=8'} - - ansi-regex@5.0.1: - resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==} - engines: {node: '>=8'} - - ansi-regex@6.1.0: - resolution: {integrity: sha512-7HSX4QQb4CspciLpVFwyRe79O3xsIZDDLER21kERQ71oaPodF8jL725AgJMFAYbooIqolJoRLuM81SpeUkpkvA==} - engines: {node: '>=12'} - - ansi-styles@4.3.0: - resolution: {integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==} - engines: {node: '>=8'} - - ansi-styles@5.2.0: - resolution: {integrity: sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==} - engines: {node: '>=10'} - - ansi-styles@6.2.1: - resolution: {integrity: sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==} - engines: {node: '>=12'} - - aria-query@5.3.0: - resolution: {integrity: sha512-b0P0sZPKtyu8HkeRAfCq0IfURZK+SuwMjY1UXGBU27wpAiTwQAIlq56IbIO+ytk/JjS1fMR14ee5WBBfKi5J6A==} - - assertion-error@2.0.1: - resolution: {integrity: sha512-Izi8RQcffqCeNVgFigKli1ssklIbpHnCYc6AknXGYoB6grJqyeby7jv12JUQgmTAnIDnbck1uxksT4dzN3PWBA==} - engines: {node: '>=12'} - - balanced-match@1.0.2: - resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==} - - birpc@0.2.19: - resolution: {integrity: sha512-5WeXXAvTmitV1RqJFppT5QtUiz2p1mRSYU000Jkft5ZUCLJIk4uQriYNO50HknxKwM6jd8utNc66K1qGIwwWBQ==} - - brace-expansion@2.0.1: - resolution: {integrity: sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==} - - cac@6.7.14: - resolution: {integrity: sha512-b6Ilus+c3RrdDk+JhLKUAQfzzgLEPy6wcXqS7f/xe1EETvsDP6GORG7SFuOs6cID5YkqchW/LXZbX5bc8j7ZcQ==} - engines: {node: '>=8'} - - chai@5.1.2: - resolution: {integrity: sha512-aGtmf24DW6MLHHG5gCx4zaI3uBq3KRtxeVs0DjFH6Z0rDNbsvTxFASFvdj79pxjxZ8/5u3PIiN3IwEIQkiiuPw==} - engines: {node: '>=12'} - - chalk@4.1.2: - resolution: {integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==} - engines: {node: '>=10'} - - check-error@2.1.1: - resolution: {integrity: sha512-OAlb+T7V4Op9OwdkjmguYRqncdlx5JiofwOAUkmTF+jNdHwzTaTs4sRAGpzLF3oOz5xAyDGrPgeIDFQmDOTiJw==} - engines: {node: '>= 16'} - - cli-width@4.1.0: - resolution: {integrity: sha512-ouuZd4/dm2Sw5Gmqy6bGyNNNe1qt9RpmxveLSO7KcgsTnU7RXfsw+/bukWGo1abgBiMAic068rclZsO4IWmmxQ==} - engines: {node: '>= 12'} - - cliui@8.0.1: - resolution: {integrity: sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==} - engines: {node: '>=12'} - - color-convert@2.0.1: - resolution: {integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==} - engines: {node: '>=7.0.0'} - - color-name@1.1.4: - resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==} - - cookie@0.7.2: - resolution: {integrity: sha512-yki5XnKuf750l50uGTllt6kKILY4nQ1eNIQatoXEByZ5dWgnKqbnqmTrBE5B4N7lrMJKQ2ytWMiTO2o0v6Ew/w==} - engines: {node: '>= 0.6'} - - cross-spawn@7.0.6: - resolution: {integrity: sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==} - engines: {node: '>= 8'} - - debug@4.4.0: - resolution: {integrity: sha512-6WTZ/IxCY/T6BALoZHaE4ctp9xm+Z5kY/pzYaCHRFeyVhojxlrm+46y68HA6hr0TcwEssoxNiDEUJQjfPZ/RYA==} - engines: {node: '>=6.0'} - peerDependencies: - supports-color: '*' - peerDependenciesMeta: - supports-color: - optional: true - - deep-eql@5.0.2: - resolution: {integrity: sha512-h5k/5U50IJJFpzfL6nO9jaaumfjO/f2NjK/oYB2Djzm4p9L+3T9qWpZqZ2hAbLPuuYq9wrU08WQyBTL5GbPk5Q==} - engines: {node: '>=6'} - - dequal@2.0.3: - resolution: {integrity: sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA==} - engines: {node: '>=6'} - - dom-accessibility-api@0.5.16: - resolution: {integrity: sha512-X7BJ2yElsnOJ30pZF4uIIDfBEVgF4XEBxL9Bxhy6dnrm5hkzqmsWHGTiHqRiITNhMyFLyAiWndIJP7Z1NTteDg==} - - eastasianwidth@0.2.0: - resolution: {integrity: sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==} - - emoji-regex@8.0.0: - resolution: {integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==} - - emoji-regex@9.2.2: - resolution: {integrity: sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==} - - es-module-lexer@1.6.0: - resolution: {integrity: sha512-qqnD1yMU6tk/jnaMosogGySTZP8YtUgAffA9nMN+E/rjxcfRQ6IEk7IiozUjgxKoFHBGjTLnrHB/YC45r/59EQ==} - - esbuild@0.21.5: - resolution: {integrity: sha512-mg3OPMV4hXywwpoDxu3Qda5xCKQi+vCTZq8S9J/EpkhB2HzKXq4SNFZE3+NK93JYxc8VMSep+lOUSC/RVKaBqw==} - engines: {node: '>=12'} - hasBin: true - - escalade@3.2.0: - resolution: {integrity: sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==} - engines: {node: '>=6'} - - estree-walker@3.0.3: - resolution: {integrity: sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g==} - - expect-type@1.1.0: - resolution: {integrity: sha512-bFi65yM+xZgk+u/KRIpekdSYkTB5W1pEf0Lt8Q8Msh7b+eQ7LXVtIB1Bkm4fvclDEL1b2CZkMhv2mOeF8tMdkA==} - engines: {node: '>=12.0.0'} - - foreground-child@3.3.0: - resolution: {integrity: sha512-Ld2g8rrAyMYFXBhEqMz8ZAHBi4J4uS1i/CxGMDnjyFWddMXLVcDp051DZfu+t7+ab7Wv6SMqpWmyFIj5UbfFvg==} - engines: {node: '>=14'} - - fsevents@2.3.2: - resolution: {integrity: sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==} - engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0} - os: [darwin] - - fsevents@2.3.3: - resolution: {integrity: sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==} - engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0} - os: [darwin] - - get-caller-file@2.0.5: - resolution: {integrity: sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==} - engines: {node: 6.* || 8.* || >= 10.*} - - glob@10.4.5: - resolution: {integrity: sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg==} - hasBin: true - - graphql@16.10.0: - resolution: {integrity: sha512-AjqGKbDGUFRKIRCP9tCKiIGHyriz2oHEbPIbEtcSLSs4YjReZOIPQQWek4+6hjw62H9QShXHyaGivGiYVLeYFQ==} - engines: {node: ^12.22.0 || ^14.16.0 || ^16.0.0 || >=17.0.0} - - has-flag@4.0.0: - resolution: {integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==} - engines: {node: '>=8'} - - headers-polyfill@4.0.3: - resolution: {integrity: sha512-IScLbePpkvO846sIwOtOTDjutRMWdXdJmXdMvk6gCBHxFO8d+QKOQedyZSxFTTFYRSmlgSTDtXqqq4pcenBXLQ==} - - html-escaper@2.0.2: - resolution: {integrity: sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==} - - is-fullwidth-code-point@3.0.0: - resolution: {integrity: sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==} - engines: {node: '>=8'} - - is-node-process@1.2.0: - resolution: {integrity: sha512-Vg4o6/fqPxIjtxgUH5QLJhwZ7gW5diGCVlXpuUfELC62CuxM1iHcRe51f2W1FDy04Ai4KJkagKjx3XaqyfRKXw==} - - isexe@2.0.0: - resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==} - - istanbul-lib-coverage@3.2.2: - resolution: {integrity: sha512-O8dpsF+r0WV/8MNRKfnmrtCWhuKjxrq2w+jpzBL5UZKTi2LeVWnWOmWRxFlesJONmc+wLAGvKQZEOanko0LFTg==} - engines: {node: '>=8'} - - istanbul-lib-report@3.0.1: - resolution: {integrity: sha512-GCfE1mtsHGOELCU8e/Z7YWzpmybrx/+dSTfLrvY8qRmaY6zXTKWn6WQIjaAFw069icm6GVMNkgu0NzI4iPZUNw==} - engines: {node: '>=10'} - - istanbul-lib-source-maps@5.0.6: - resolution: {integrity: sha512-yg2d+Em4KizZC5niWhQaIomgf5WlL4vOOjZ5xGCmF8SnPE/mDWWXgvRExdcpCgh9lLRRa1/fSYp2ymmbJ1pI+A==} - engines: {node: '>=10'} - - istanbul-reports@3.1.7: - resolution: {integrity: sha512-BewmUXImeuRk2YY0PVbxgKAysvhRPUQE0h5QRM++nVWyubKGV0l8qQ5op8+B2DOmwSe63Jivj0BjkPQVf8fP5g==} - engines: {node: '>=8'} - - jackspeak@3.4.3: - resolution: {integrity: sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw==} - - js-tokens@4.0.0: - resolution: {integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==} - - loupe@3.1.3: - resolution: {integrity: sha512-kkIp7XSkP78ZxJEsSxW3712C6teJVoeHHwgo9zJ380de7IYyJ2ISlxojcH2pC5OFLewESmnRi/+XCDIEEVyoug==} - - lru-cache@10.4.3: - resolution: {integrity: sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==} - - lz-string@1.5.0: - resolution: {integrity: sha512-h5bgJWpxJNswbU7qCrV0tIKQCaS3blPDrqKWx+QxzuzL1zGUzij9XCWLrSLsJPu5t+eWA/ycetzYAO5IOMcWAQ==} - hasBin: true - - magic-string@0.30.17: - resolution: {integrity: sha512-sNPKHvyjVf7gyjwS4xGTaW/mCnF8wnjtifKBEhxfZ7E/S8tQ0rssrwGNn6q8JH/ohItJfSQp9mBtQYuTlH5QnA==} - - magicast@0.3.5: - resolution: {integrity: sha512-L0WhttDl+2BOsybvEOLK7fW3UA0OQ0IQ2d6Zl2x/a6vVRs3bAY0ECOSHHeL5jD+SbOpOCUEi0y1DgHEn9Qn1AQ==} - - make-dir@4.0.0: - resolution: {integrity: sha512-hXdUTZYIVOt1Ex//jAQi+wTZZpUpwBj/0QsOzqegb3rGMMeJiSEu5xLHnYfBrRV4RH2+OCSOO95Is/7x1WJ4bw==} - engines: {node: '>=10'} - - minimatch@9.0.5: - resolution: {integrity: sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==} - engines: {node: '>=16 || 14 >=14.17'} - - minipass@7.1.2: - resolution: {integrity: sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==} - engines: {node: '>=16 || 14 >=14.17'} - - mrmime@2.0.0: - resolution: {integrity: sha512-eu38+hdgojoyq63s+yTpN4XMBdt5l8HhMhc4VKLO9KM5caLIBvUm4thi7fFaxyTmCKeNnXZ5pAlBwCUnhA09uw==} - engines: {node: '>=10'} - - ms@2.1.3: - resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==} - - msw@2.7.0: - resolution: {integrity: sha512-BIodwZ19RWfCbYTxWTUfTXc+sg4OwjCAgxU1ZsgmggX/7S3LdUifsbUPJs61j0rWb19CZRGY5if77duhc0uXzw==} - engines: {node: '>=18'} - hasBin: true - peerDependencies: - typescript: '>= 4.8.x' - peerDependenciesMeta: - typescript: - optional: true - - mute-stream@2.0.0: - resolution: {integrity: sha512-WWdIxpyjEn+FhQJQQv9aQAYlHoNVdzIzUySNV1gHUPDSdZJ3yZn7pAAbQcV7B56Mvu881q9FZV+0Vx2xC44VWA==} - engines: {node: ^18.17.0 || >=20.5.0} - - nanoid@3.3.8: - resolution: {integrity: sha512-WNLf5Sd8oZxOm+TzppcYk8gVOgP+l58xNy58D0nbUnOxOWRWvlcCV4kUF7ltmI6PsrLl/BgKEyS4mqsGChFN0w==} - engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} - hasBin: true - - outvariant@1.4.3: - resolution: {integrity: sha512-+Sl2UErvtsoajRDKCE5/dBz4DIvHXQQnAxtQTF04OJxY0+DyZXSo5P5Bb7XYWOh81syohlYL24hbDwxedPUJCA==} - - package-json-from-dist@1.0.1: - resolution: {integrity: sha512-UEZIS3/by4OC8vL3P2dTXRETpebLI2NiI5vIrjaD/5UtrkFX/tNbwjTSRAGC/+7CAo2pIcBaRgWmcBBHcsaCIw==} - - path-key@3.1.1: - resolution: {integrity: sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==} - engines: {node: '>=8'} - - path-scurry@1.11.1: - resolution: {integrity: sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA==} - engines: {node: '>=16 || 14 >=14.18'} - - path-to-regexp@6.3.0: - resolution: {integrity: sha512-Yhpw4T9C6hPpgPeA28us07OJeqZ5EzQTkbfwuhsUg0c237RomFoETJgmp2sa3F/41gfLE6G5cqcYwznmeEeOlQ==} - - pathe@1.1.2: - resolution: {integrity: sha512-whLdWMYL2TwI08hn8/ZqAbrVemu0LNaNNJZX73O6qaIdCTfXutsLhMkjdENX0qhsQ9uIimo4/aQOmXkoon2nDQ==} - - pathval@2.0.0: - resolution: {integrity: sha512-vE7JKRyES09KiunauX7nd2Q9/L7lhok4smP9RZTDeD4MVs72Dp2qNFVz39Nz5a0FVEW0BJR6C0DYrq6unoziZA==} - engines: {node: '>= 14.16'} - - picocolors@1.1.1: - resolution: {integrity: sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==} - - playwright-core@1.50.1: - resolution: {integrity: sha512-ra9fsNWayuYumt+NiM069M6OkcRb1FZSK8bgi66AtpFoWkg2+y0bJSNmkFrWhMbEBbVKC/EruAHH3g0zmtwGmQ==} - engines: {node: '>=18'} - hasBin: true - - playwright@1.50.1: - resolution: {integrity: sha512-G8rwsOQJ63XG6BbKj2w5rHeavFjy5zynBA9zsJMMtBoe/Uf757oG12NXz6e6OirF7RCrTVAKFXbLmn1RbL7Qaw==} - engines: {node: '>=18'} - hasBin: true - - postcss@8.5.2: - resolution: {integrity: sha512-MjOadfU3Ys9KYoX0AdkBlFEF1Vx37uCCeN4ZHnmwm9FfpbsGWMZeBLMmmpY+6Ocqod7mkdZ0DT31OlbsFrLlkA==} - engines: {node: ^10 || ^12 || >=14} - - pretty-format@27.5.1: - resolution: {integrity: sha512-Qb1gy5OrP5+zDf2Bvnzdl3jsTf1qXVMazbvCoKhtKqVs4/YK4ozX4gKQJJVyNe+cajNPn0KoC0MC3FUmaHWEmQ==} - engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} - - psl@1.15.0: - resolution: {integrity: sha512-JZd3gMVBAVQkSs6HdNZo9Sdo0LNcQeMNP3CozBJb3JYC/QUYZTnKxP+f8oWRX4rHP5EurWxqAHTSwUCjlNKa1w==} - - punycode@2.3.1: - resolution: {integrity: sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==} - engines: {node: '>=6'} - - querystringify@2.2.0: - resolution: {integrity: sha512-FIqgj2EUvTa7R50u0rGsyTftzjYmv/a3hO345bZNrqabNqjtgiDMgmo4mkUjd+nzU5oF3dClKqFIPUKybUyqoQ==} - - react-is@17.0.2: - resolution: {integrity: sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w==} - - regenerator-runtime@0.14.1: - resolution: {integrity: sha512-dYnhHh0nJoMfnkZs6GmmhFknAGRrLznOu5nc9ML+EJxGvrx6H7teuevqVqCuPcPK//3eDrrjQhehXVx9cnkGdw==} - - require-directory@2.1.1: - resolution: {integrity: sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==} - engines: {node: '>=0.10.0'} - - requires-port@1.0.0: - resolution: {integrity: sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ==} - - rollup@4.34.6: - resolution: {integrity: sha512-wc2cBWqJgkU3Iz5oztRkQbfVkbxoz5EhnCGOrnJvnLnQ7O0WhQUYyv18qQI79O8L7DdHrrlJNeCHd4VGpnaXKQ==} - engines: {node: '>=18.0.0', npm: '>=8.0.0'} - hasBin: true - - semver@7.7.1: - resolution: {integrity: sha512-hlq8tAfn0m/61p4BVRcPzIGr6LKiMwo4VM6dGi6pt4qcRkmNzTcWq6eCEjEh+qXjkMDvPlOFFSGwQjoEa6gyMA==} - engines: {node: '>=10'} - hasBin: true - - shebang-command@2.0.0: - resolution: {integrity: sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==} - engines: {node: '>=8'} - - shebang-regex@3.0.0: - resolution: {integrity: sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==} - engines: {node: '>=8'} - - siginfo@2.0.0: - resolution: {integrity: sha512-ybx0WO1/8bSBLEWXZvEd7gMW3Sn3JFlW3TvX1nREbDLRNQNaeNN8WK0meBwPdAaOI7TtRRRJn/Es1zhrrCHu7g==} - - signal-exit@4.1.0: - resolution: {integrity: sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==} - engines: {node: '>=14'} - - sirv@3.0.0: - resolution: {integrity: sha512-BPwJGUeDaDCHihkORDchNyyTvWFhcusy1XMmhEVTQTwGeybFbp8YEmB+njbPnth1FibULBSBVwCQni25XlCUDg==} - engines: {node: '>=18'} - - source-map-js@1.2.1: - resolution: {integrity: sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==} - engines: {node: '>=0.10.0'} - - stackback@0.0.2: - resolution: {integrity: sha512-1XMJE5fQo1jGH6Y/7ebnwPOBEkIEnT4QF32d5R1+VXdXveM0IBMJt8zfaxX1P3QhVwrYe+576+jkANtSS2mBbw==} - - statuses@2.0.1: - resolution: {integrity: sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==} - engines: {node: '>= 0.8'} - - std-env@3.8.0: - resolution: {integrity: sha512-Bc3YwwCB+OzldMxOXJIIvC6cPRWr/LxOp48CdQTOkPyk/t4JWWJbrilwBd7RJzKV8QW7tJkcgAmeuLLJugl5/w==} - - strict-event-emitter@0.5.1: - resolution: {integrity: sha512-vMgjE/GGEPEFnhFub6pa4FmJBRBVOLpIII2hvCZ8Kzb7K0hlHo7mQv6xYrBvCL2LtAIBwFUK8wvuJgTVSQ5MFQ==} - - string-width@4.2.3: - resolution: {integrity: sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==} - engines: {node: '>=8'} - - string-width@5.1.2: - resolution: {integrity: sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==} - engines: {node: '>=12'} - - strip-ansi@6.0.1: - resolution: {integrity: sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==} - engines: {node: '>=8'} - - strip-ansi@7.1.0: - resolution: {integrity: sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==} - engines: {node: '>=12'} - - supports-color@7.2.0: - resolution: {integrity: sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==} - engines: {node: '>=8'} - - test-exclude@7.0.1: - resolution: {integrity: sha512-pFYqmTw68LXVjeWJMST4+borgQP2AyMNbg1BpZh9LbyhUeNkeaPF9gzfPGUAnSMV3qPYdWUwDIjjCLiSDOl7vg==} - engines: {node: '>=18'} - - tinybench@2.9.0: - resolution: {integrity: sha512-0+DUvqWMValLmha6lr4kD8iAMK1HzV0/aKnCtWb9v9641TnP/MFb7Pc2bxoxQjTXAErryXVgUOfv2YqNllqGeg==} - - tinyexec@0.3.2: - resolution: {integrity: sha512-KQQR9yN7R5+OSwaK0XQoj22pwHoTlgYqmUscPYoknOoWCWfj/5/ABTMRi69FrKU5ffPVh5QcFikpWJI/P1ocHA==} - - tinypool@1.0.2: - resolution: {integrity: sha512-al6n+QEANGFOMf/dmUMsuS5/r9B06uwlyNjZZql/zv8J7ybHCgoihBNORZCY2mzUuAnomQa2JdhyHKzZxPCrFA==} - engines: {node: ^18.0.0 || >=20.0.0} - - tinyrainbow@1.2.0: - resolution: {integrity: sha512-weEDEq7Z5eTHPDh4xjX789+fHfF+P8boiFB+0vbWzpbnbsEr/GRaohi/uMKxg8RZMXnl1ItAi/IUHWMsjDV7kQ==} - engines: {node: '>=14.0.0'} - - tinyspy@3.0.2: - resolution: {integrity: sha512-n1cw8k1k0x4pgA2+9XrOkFydTerNcJ1zWCO5Nn9scWHTD+5tp8dghT2x1uduQePZTZgd3Tupf+x9BxJjeJi77Q==} - engines: {node: '>=14.0.0'} - - totalist@3.0.1: - resolution: {integrity: sha512-sf4i37nQ2LBx4m3wB74y+ubopq6W/dIzXg0FDGjsYnZHVa1Da8FH853wlL2gtUhg+xJXjfk3kUZS3BRoQeoQBQ==} - engines: {node: '>=6'} - - tough-cookie@4.1.4: - resolution: {integrity: sha512-Loo5UUvLD9ScZ6jh8beX1T6sO1w2/MpCRpEP7V280GKMVUQ0Jzar2U3UJPsrdbziLEMMhu3Ujnq//rhiFuIeag==} - engines: {node: '>=6'} - - type-fest@0.21.3: - resolution: {integrity: sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==} - engines: {node: '>=10'} - - type-fest@4.34.1: - resolution: {integrity: sha512-6kSc32kT0rbwxD6QL1CYe8IqdzN/J/ILMrNK+HMQCKH3insCDRY/3ITb0vcBss0a3t72fzh2YSzj8ko1HgwT3g==} - engines: {node: '>=16'} - - universalify@0.2.0: - resolution: {integrity: sha512-CJ1QgKmNg3CwvAv/kOFmtnEN05f0D/cn9QntgNOQlQF9dgvVTHj3t+8JPdjqawCHk7V/KA+fbUqzZ9XWhcqPUg==} - engines: {node: '>= 4.0.0'} - - url-parse@1.5.10: - resolution: {integrity: sha512-WypcfiRhfeUP9vvF0j6rw0J3hrWrw6iZv3+22h6iRMJ/8z1Tj6XfLP4DsUix5MhMPnXpiHDoKyoZ/bdCkwBCiQ==} - - vite-node@2.1.9: - resolution: {integrity: sha512-AM9aQ/IPrW/6ENLQg3AGY4K1N2TGZdR5e4gu/MmmR2xR3Ll1+dib+nook92g4TV3PXVyeyxdWwtaCAiUL0hMxA==} - engines: {node: ^18.0.0 || >=20.0.0} - hasBin: true - - vite@5.4.14: - resolution: {integrity: sha512-EK5cY7Q1D8JNhSaPKVK4pwBFvaTmZxEnoKXLG/U9gmdDcihQGNzFlgIvaxezFR4glP1LsuiedwMBqCXH3wZccA==} - engines: {node: ^18.0.0 || >=20.0.0} - hasBin: true - peerDependencies: - '@types/node': ^18.0.0 || >=20.0.0 - less: '*' - lightningcss: ^1.21.0 - sass: '*' - sass-embedded: '*' - stylus: '*' - sugarss: '*' - terser: ^5.4.0 - peerDependenciesMeta: - '@types/node': - optional: true - less: - optional: true - lightningcss: - optional: true - sass: - optional: true - sass-embedded: - optional: true - stylus: - optional: true - sugarss: - optional: true - terser: - optional: true - - vitest@2.1.9: - resolution: {integrity: sha512-MSmPM9REYqDGBI8439mA4mWhV5sKmDlBKWIYbA3lRb2PTHACE0mgKwA8yQ2xq9vxDTuk4iPrECBAEW2aoFXY0Q==} - engines: {node: ^18.0.0 || >=20.0.0} - hasBin: true - peerDependencies: - '@edge-runtime/vm': '*' - '@types/node': ^18.0.0 || >=20.0.0 - '@vitest/browser': 2.1.9 - '@vitest/ui': 2.1.9 - happy-dom: '*' - jsdom: '*' - peerDependenciesMeta: - '@edge-runtime/vm': - optional: true - '@types/node': - optional: true - '@vitest/browser': - optional: true - '@vitest/ui': - optional: true - happy-dom: - optional: true - jsdom: - optional: true - - which@2.0.2: - resolution: {integrity: sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==} - engines: {node: '>= 8'} - hasBin: true - - why-is-node-running@2.3.0: - resolution: {integrity: sha512-hUrmaWBdVDcxvYqnyh09zunKzROWjbZTiNy8dBEjkS7ehEDQibXJ7XvlmtbwuTclUiIyN+CyXQD4Vmko8fNm8w==} - engines: {node: '>=8'} - hasBin: true - - wrap-ansi@6.2.0: - resolution: {integrity: sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==} - engines: {node: '>=8'} - - wrap-ansi@7.0.0: - resolution: {integrity: sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==} - engines: {node: '>=10'} - - wrap-ansi@8.1.0: - resolution: {integrity: sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==} - engines: {node: '>=12'} - - ws@8.18.0: - resolution: {integrity: sha512-8VbfWfHLbbwu3+N6OKsOMpBdT4kXPDDB9cJk2bJ6mh9ucxdlnNvH1e+roYkKmN9Nxw2yjz7VzeO9oOz2zJ04Pw==} - engines: {node: '>=10.0.0'} - peerDependencies: - bufferutil: ^4.0.1 - utf-8-validate: '>=5.0.2' - peerDependenciesMeta: - bufferutil: - optional: true - utf-8-validate: - optional: true - - y18n@5.0.8: - resolution: {integrity: sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==} - engines: {node: '>=10'} - - yargs-parser@21.1.1: - resolution: {integrity: sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==} - engines: {node: '>=12'} - - yargs@17.7.2: - resolution: {integrity: sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==} - engines: {node: '>=12'} - - yoctocolors-cjs@2.1.2: - resolution: {integrity: sha512-cYVsTjKl8b+FrnidjibDWskAv7UKOfcwaVZdp/it9n1s9fU3IkgDbhdIRKCW4JDsAlECJY0ytoVPT3sK6kideA==} - engines: {node: '>=18'} - -snapshots: - - '@ampproject/remapping@2.3.0': - dependencies: - '@jridgewell/gen-mapping': 0.3.8 - '@jridgewell/trace-mapping': 0.3.25 - - '@babel/code-frame@7.26.2': - dependencies: - '@babel/helper-validator-identifier': 7.25.9 - js-tokens: 4.0.0 - picocolors: 1.1.1 - - '@babel/helper-string-parser@7.25.9': {} - - '@babel/helper-validator-identifier@7.25.9': {} - - '@babel/parser@7.26.8': - dependencies: - '@babel/types': 7.26.8 - - '@babel/runtime@7.26.7': - dependencies: - regenerator-runtime: 0.14.1 - - '@babel/types@7.26.8': - dependencies: - '@babel/helper-string-parser': 7.25.9 - '@babel/helper-validator-identifier': 7.25.9 - - '@bcoe/v8-coverage@0.2.3': {} - - '@bundled-es-modules/cookie@2.0.1': - dependencies: - cookie: 0.7.2 - - '@bundled-es-modules/statuses@1.0.1': - dependencies: - statuses: 2.0.1 - - '@bundled-es-modules/tough-cookie@0.1.6': - dependencies: - '@types/tough-cookie': 4.0.5 - tough-cookie: 4.1.4 - - '@esbuild/aix-ppc64@0.21.5': - optional: true - - '@esbuild/android-arm64@0.21.5': - optional: true - - '@esbuild/android-arm@0.21.5': - optional: true - - '@esbuild/android-x64@0.21.5': - optional: true - - '@esbuild/darwin-arm64@0.21.5': - optional: true - - '@esbuild/darwin-x64@0.21.5': - optional: true - - '@esbuild/freebsd-arm64@0.21.5': - optional: true - - '@esbuild/freebsd-x64@0.21.5': - optional: true - - '@esbuild/linux-arm64@0.21.5': - optional: true - - '@esbuild/linux-arm@0.21.5': - optional: true - - '@esbuild/linux-ia32@0.21.5': - optional: true - - '@esbuild/linux-loong64@0.21.5': - optional: true - - '@esbuild/linux-mips64el@0.21.5': - optional: true - - '@esbuild/linux-ppc64@0.21.5': - optional: true - - '@esbuild/linux-riscv64@0.21.5': - optional: true - - '@esbuild/linux-s390x@0.21.5': - optional: true - - '@esbuild/linux-x64@0.21.5': - optional: true - - '@esbuild/netbsd-x64@0.21.5': - optional: true - - '@esbuild/openbsd-x64@0.21.5': - optional: true - - '@esbuild/sunos-x64@0.21.5': - optional: true - - '@esbuild/win32-arm64@0.21.5': - optional: true - - '@esbuild/win32-ia32@0.21.5': - optional: true - - '@esbuild/win32-x64@0.21.5': - optional: true - - '@inquirer/confirm@5.1.5': - dependencies: - '@inquirer/core': 10.1.6 - '@inquirer/type': 3.0.4 - - '@inquirer/core@10.1.6': - dependencies: - '@inquirer/figures': 1.0.10 - '@inquirer/type': 3.0.4 - ansi-escapes: 4.3.2 - cli-width: 4.1.0 - mute-stream: 2.0.0 - signal-exit: 4.1.0 - wrap-ansi: 6.2.0 - yoctocolors-cjs: 2.1.2 - - '@inquirer/figures@1.0.10': {} - - '@inquirer/type@3.0.4': {} - - '@isaacs/cliui@8.0.2': - dependencies: - string-width: 5.1.2 - string-width-cjs: string-width@4.2.3 - strip-ansi: 7.1.0 - strip-ansi-cjs: strip-ansi@6.0.1 - wrap-ansi: 8.1.0 - wrap-ansi-cjs: wrap-ansi@7.0.0 - - '@istanbuljs/schema@0.1.3': {} - - '@jridgewell/gen-mapping@0.3.8': - dependencies: - '@jridgewell/set-array': 1.2.1 - '@jridgewell/sourcemap-codec': 1.5.0 - '@jridgewell/trace-mapping': 0.3.25 - - '@jridgewell/resolve-uri@3.1.2': {} - - '@jridgewell/set-array@1.2.1': {} - - '@jridgewell/sourcemap-codec@1.5.0': {} - - '@jridgewell/trace-mapping@0.3.25': - dependencies: - '@jridgewell/resolve-uri': 3.1.2 - '@jridgewell/sourcemap-codec': 1.5.0 - - '@mswjs/interceptors@0.37.6': - dependencies: - '@open-draft/deferred-promise': 2.2.0 - '@open-draft/logger': 0.3.0 - '@open-draft/until': 2.1.0 - is-node-process: 1.2.0 - outvariant: 1.4.3 - strict-event-emitter: 0.5.1 - - '@open-draft/deferred-promise@2.2.0': {} - - '@open-draft/logger@0.3.0': - dependencies: - is-node-process: 1.2.0 - outvariant: 1.4.3 - - '@open-draft/until@2.1.0': {} - - '@pkgjs/parseargs@0.11.0': - optional: true - - '@polka/url@1.0.0-next.28': {} - - '@rollup/rollup-android-arm-eabi@4.34.6': - optional: true - - '@rollup/rollup-android-arm64@4.34.6': - optional: true - - '@rollup/rollup-darwin-arm64@4.34.6': - optional: true - - '@rollup/rollup-darwin-x64@4.34.6': - optional: true - - '@rollup/rollup-freebsd-arm64@4.34.6': - optional: true - - '@rollup/rollup-freebsd-x64@4.34.6': - optional: true - - '@rollup/rollup-linux-arm-gnueabihf@4.34.6': - optional: true - - '@rollup/rollup-linux-arm-musleabihf@4.34.6': - optional: true - - '@rollup/rollup-linux-arm64-gnu@4.34.6': - optional: true - - '@rollup/rollup-linux-arm64-musl@4.34.6': - optional: true - - '@rollup/rollup-linux-loongarch64-gnu@4.34.6': - optional: true - - '@rollup/rollup-linux-powerpc64le-gnu@4.34.6': - optional: true - - '@rollup/rollup-linux-riscv64-gnu@4.34.6': - optional: true - - '@rollup/rollup-linux-s390x-gnu@4.34.6': - optional: true - - '@rollup/rollup-linux-x64-gnu@4.34.6': - optional: true - - '@rollup/rollup-linux-x64-musl@4.34.6': - optional: true - - '@rollup/rollup-win32-arm64-msvc@4.34.6': - optional: true - - '@rollup/rollup-win32-ia32-msvc@4.34.6': - optional: true - - '@rollup/rollup-win32-x64-msvc@4.34.6': - optional: true - - '@testing-library/dom@10.4.0': - dependencies: - '@babel/code-frame': 7.26.2 - '@babel/runtime': 7.26.7 - '@types/aria-query': 5.0.4 - aria-query: 5.3.0 - chalk: 4.1.2 - dom-accessibility-api: 0.5.16 - lz-string: 1.5.0 - pretty-format: 27.5.1 - - '@testing-library/user-event@14.6.1(@testing-library/dom@10.4.0)': - dependencies: - '@testing-library/dom': 10.4.0 - - '@types/aria-query@5.0.4': {} - - '@types/cookie@0.6.0': {} - - '@types/estree@1.0.6': {} - - '@types/statuses@2.0.5': {} - - '@types/tough-cookie@4.0.5': {} - - '@vitest/browser@2.1.9(playwright@1.50.1)(vite@5.4.14)(vitest@2.1.9)': - dependencies: - '@testing-library/dom': 10.4.0 - '@testing-library/user-event': 14.6.1(@testing-library/dom@10.4.0) - '@vitest/mocker': 2.1.9(msw@2.7.0)(vite@5.4.14) - '@vitest/utils': 2.1.9 - magic-string: 0.30.17 - msw: 2.7.0 - sirv: 3.0.0 - tinyrainbow: 1.2.0 - vitest: 2.1.9(@vitest/browser@2.1.9)(msw@2.7.0) - ws: 8.18.0 - optionalDependencies: - playwright: 1.50.1 - transitivePeerDependencies: - - '@types/node' - - bufferutil - - typescript - - utf-8-validate - - vite - - '@vitest/coverage-v8@2.1.9(@vitest/browser@2.1.9)(vitest@2.1.9)': - dependencies: - '@ampproject/remapping': 2.3.0 - '@bcoe/v8-coverage': 0.2.3 - debug: 4.4.0 - istanbul-lib-coverage: 3.2.2 - istanbul-lib-report: 3.0.1 - istanbul-lib-source-maps: 5.0.6 - istanbul-reports: 3.1.7 - magic-string: 0.30.17 - magicast: 0.3.5 - std-env: 3.8.0 - test-exclude: 7.0.1 - tinyrainbow: 1.2.0 - vitest: 2.1.9(@vitest/browser@2.1.9)(msw@2.7.0) - optionalDependencies: - '@vitest/browser': 2.1.9(playwright@1.50.1)(vite@5.4.14)(vitest@2.1.9) - transitivePeerDependencies: - - supports-color - - '@vitest/expect@2.1.9': - dependencies: - '@vitest/spy': 2.1.9 - '@vitest/utils': 2.1.9 - chai: 5.1.2 - tinyrainbow: 1.2.0 - - '@vitest/mocker@2.1.9(msw@2.7.0)(vite@5.4.14)': - dependencies: - '@vitest/spy': 2.1.9 - estree-walker: 3.0.3 - magic-string: 0.30.17 - optionalDependencies: - msw: 2.7.0 - vite: 5.4.14 - - '@vitest/pretty-format@2.1.9': - dependencies: - tinyrainbow: 1.2.0 - - '@vitest/runner@2.1.9': - dependencies: - '@vitest/utils': 2.1.9 - pathe: 1.1.2 - - '@vitest/snapshot@2.1.9': - dependencies: - '@vitest/pretty-format': 2.1.9 - magic-string: 0.30.17 - pathe: 1.1.2 - - '@vitest/spy@2.1.9': - dependencies: - tinyspy: 3.0.2 - - '@vitest/utils@2.1.9': - dependencies: - '@vitest/pretty-format': 2.1.9 - loupe: 3.1.3 - tinyrainbow: 1.2.0 - - ansi-escapes@4.3.2: - dependencies: - type-fest: 0.21.3 - - ansi-regex@5.0.1: {} - - ansi-regex@6.1.0: {} - - ansi-styles@4.3.0: - dependencies: - color-convert: 2.0.1 - - ansi-styles@5.2.0: {} - - ansi-styles@6.2.1: {} - - aria-query@5.3.0: - dependencies: - dequal: 2.0.3 - - assertion-error@2.0.1: {} - - balanced-match@1.0.2: {} - - birpc@0.2.19: {} - - brace-expansion@2.0.1: - dependencies: - balanced-match: 1.0.2 - - cac@6.7.14: {} - - chai@5.1.2: - dependencies: - assertion-error: 2.0.1 - check-error: 2.1.1 - deep-eql: 5.0.2 - loupe: 3.1.3 - pathval: 2.0.0 - - chalk@4.1.2: - dependencies: - ansi-styles: 4.3.0 - supports-color: 7.2.0 - - check-error@2.1.1: {} - - cli-width@4.1.0: {} - - cliui@8.0.1: - dependencies: - string-width: 4.2.3 - strip-ansi: 6.0.1 - wrap-ansi: 7.0.0 - - color-convert@2.0.1: - dependencies: - color-name: 1.1.4 - - color-name@1.1.4: {} - - cookie@0.7.2: {} - - cross-spawn@7.0.6: - dependencies: - path-key: 3.1.1 - shebang-command: 2.0.0 - which: 2.0.2 - - debug@4.4.0: - dependencies: - ms: 2.1.3 - - deep-eql@5.0.2: {} - - dequal@2.0.3: {} - - dom-accessibility-api@0.5.16: {} - - eastasianwidth@0.2.0: {} - - emoji-regex@8.0.0: {} - - emoji-regex@9.2.2: {} - - es-module-lexer@1.6.0: {} - - esbuild@0.21.5: - optionalDependencies: - '@esbuild/aix-ppc64': 0.21.5 - '@esbuild/android-arm': 0.21.5 - '@esbuild/android-arm64': 0.21.5 - '@esbuild/android-x64': 0.21.5 - '@esbuild/darwin-arm64': 0.21.5 - '@esbuild/darwin-x64': 0.21.5 - '@esbuild/freebsd-arm64': 0.21.5 - '@esbuild/freebsd-x64': 0.21.5 - '@esbuild/linux-arm': 0.21.5 - '@esbuild/linux-arm64': 0.21.5 - '@esbuild/linux-ia32': 0.21.5 - '@esbuild/linux-loong64': 0.21.5 - '@esbuild/linux-mips64el': 0.21.5 - '@esbuild/linux-ppc64': 0.21.5 - '@esbuild/linux-riscv64': 0.21.5 - '@esbuild/linux-s390x': 0.21.5 - '@esbuild/linux-x64': 0.21.5 - '@esbuild/netbsd-x64': 0.21.5 - '@esbuild/openbsd-x64': 0.21.5 - '@esbuild/sunos-x64': 0.21.5 - '@esbuild/win32-arm64': 0.21.5 - '@esbuild/win32-ia32': 0.21.5 - '@esbuild/win32-x64': 0.21.5 - - escalade@3.2.0: {} - - estree-walker@3.0.3: - dependencies: - '@types/estree': 1.0.6 - - expect-type@1.1.0: {} - - foreground-child@3.3.0: - dependencies: - cross-spawn: 7.0.6 - signal-exit: 4.1.0 - - fsevents@2.3.2: - optional: true - - fsevents@2.3.3: - optional: true - - get-caller-file@2.0.5: {} - - glob@10.4.5: - dependencies: - foreground-child: 3.3.0 - jackspeak: 3.4.3 - minimatch: 9.0.5 - minipass: 7.1.2 - package-json-from-dist: 1.0.1 - path-scurry: 1.11.1 - - graphql@16.10.0: {} - - has-flag@4.0.0: {} - - headers-polyfill@4.0.3: {} - - html-escaper@2.0.2: {} - - is-fullwidth-code-point@3.0.0: {} - - is-node-process@1.2.0: {} - - isexe@2.0.0: {} - - istanbul-lib-coverage@3.2.2: {} - - istanbul-lib-report@3.0.1: - dependencies: - istanbul-lib-coverage: 3.2.2 - make-dir: 4.0.0 - supports-color: 7.2.0 - - istanbul-lib-source-maps@5.0.6: - dependencies: - '@jridgewell/trace-mapping': 0.3.25 - debug: 4.4.0 - istanbul-lib-coverage: 3.2.2 - transitivePeerDependencies: - - supports-color - - istanbul-reports@3.1.7: - dependencies: - html-escaper: 2.0.2 - istanbul-lib-report: 3.0.1 - - jackspeak@3.4.3: - dependencies: - '@isaacs/cliui': 8.0.2 - optionalDependencies: - '@pkgjs/parseargs': 0.11.0 - - js-tokens@4.0.0: {} - - loupe@3.1.3: {} - - lru-cache@10.4.3: {} - - lz-string@1.5.0: {} - - magic-string@0.30.17: - dependencies: - '@jridgewell/sourcemap-codec': 1.5.0 - - magicast@0.3.5: - dependencies: - '@babel/parser': 7.26.8 - '@babel/types': 7.26.8 - source-map-js: 1.2.1 - - make-dir@4.0.0: - dependencies: - semver: 7.7.1 - - minimatch@9.0.5: - dependencies: - brace-expansion: 2.0.1 - - minipass@7.1.2: {} - - mrmime@2.0.0: {} - - ms@2.1.3: {} - - msw@2.7.0: - dependencies: - '@bundled-es-modules/cookie': 2.0.1 - '@bundled-es-modules/statuses': 1.0.1 - '@bundled-es-modules/tough-cookie': 0.1.6 - '@inquirer/confirm': 5.1.5 - '@mswjs/interceptors': 0.37.6 - '@open-draft/deferred-promise': 2.2.0 - '@open-draft/until': 2.1.0 - '@types/cookie': 0.6.0 - '@types/statuses': 2.0.5 - graphql: 16.10.0 - headers-polyfill: 4.0.3 - is-node-process: 1.2.0 - outvariant: 1.4.3 - path-to-regexp: 6.3.0 - picocolors: 1.1.1 - strict-event-emitter: 0.5.1 - type-fest: 4.34.1 - yargs: 17.7.2 - transitivePeerDependencies: - - '@types/node' - - mute-stream@2.0.0: {} - - nanoid@3.3.8: {} - - outvariant@1.4.3: {} - - package-json-from-dist@1.0.1: {} - - path-key@3.1.1: {} - - path-scurry@1.11.1: - dependencies: - lru-cache: 10.4.3 - minipass: 7.1.2 - - path-to-regexp@6.3.0: {} - - pathe@1.1.2: {} - - pathval@2.0.0: {} - - picocolors@1.1.1: {} - - playwright-core@1.50.1: {} - - playwright@1.50.1: - dependencies: - playwright-core: 1.50.1 - optionalDependencies: - fsevents: 2.3.2 - - postcss@8.5.2: - dependencies: - nanoid: 3.3.8 - picocolors: 1.1.1 - source-map-js: 1.2.1 - - pretty-format@27.5.1: - dependencies: - ansi-regex: 5.0.1 - ansi-styles: 5.2.0 - react-is: 17.0.2 - - psl@1.15.0: - dependencies: - punycode: 2.3.1 - - punycode@2.3.1: {} - - querystringify@2.2.0: {} - - react-is@17.0.2: {} - - regenerator-runtime@0.14.1: {} - - require-directory@2.1.1: {} - - requires-port@1.0.0: {} - - rollup@4.34.6: - dependencies: - '@types/estree': 1.0.6 - optionalDependencies: - '@rollup/rollup-android-arm-eabi': 4.34.6 - '@rollup/rollup-android-arm64': 4.34.6 - '@rollup/rollup-darwin-arm64': 4.34.6 - '@rollup/rollup-darwin-x64': 4.34.6 - '@rollup/rollup-freebsd-arm64': 4.34.6 - '@rollup/rollup-freebsd-x64': 4.34.6 - '@rollup/rollup-linux-arm-gnueabihf': 4.34.6 - '@rollup/rollup-linux-arm-musleabihf': 4.34.6 - '@rollup/rollup-linux-arm64-gnu': 4.34.6 - '@rollup/rollup-linux-arm64-musl': 4.34.6 - '@rollup/rollup-linux-loongarch64-gnu': 4.34.6 - '@rollup/rollup-linux-powerpc64le-gnu': 4.34.6 - '@rollup/rollup-linux-riscv64-gnu': 4.34.6 - '@rollup/rollup-linux-s390x-gnu': 4.34.6 - '@rollup/rollup-linux-x64-gnu': 4.34.6 - '@rollup/rollup-linux-x64-musl': 4.34.6 - '@rollup/rollup-win32-arm64-msvc': 4.34.6 - '@rollup/rollup-win32-ia32-msvc': 4.34.6 - '@rollup/rollup-win32-x64-msvc': 4.34.6 - fsevents: 2.3.3 - - semver@7.7.1: {} - - shebang-command@2.0.0: - dependencies: - shebang-regex: 3.0.0 - - shebang-regex@3.0.0: {} - - siginfo@2.0.0: {} - - signal-exit@4.1.0: {} - - sirv@3.0.0: - dependencies: - '@polka/url': 1.0.0-next.28 - mrmime: 2.0.0 - totalist: 3.0.1 - - source-map-js@1.2.1: {} - - stackback@0.0.2: {} - - statuses@2.0.1: {} - - std-env@3.8.0: {} - - strict-event-emitter@0.5.1: {} - - string-width@4.2.3: - dependencies: - emoji-regex: 8.0.0 - is-fullwidth-code-point: 3.0.0 - strip-ansi: 6.0.1 - - string-width@5.1.2: - dependencies: - eastasianwidth: 0.2.0 - emoji-regex: 9.2.2 - strip-ansi: 7.1.0 - - strip-ansi@6.0.1: - dependencies: - ansi-regex: 5.0.1 - - strip-ansi@7.1.0: - dependencies: - ansi-regex: 6.1.0 - - supports-color@7.2.0: - dependencies: - has-flag: 4.0.0 - - test-exclude@7.0.1: - dependencies: - '@istanbuljs/schema': 0.1.3 - glob: 10.4.5 - minimatch: 9.0.5 - - tinybench@2.9.0: {} - - tinyexec@0.3.2: {} - - tinypool@1.0.2: {} - - tinyrainbow@1.2.0: {} - - tinyspy@3.0.2: {} - - totalist@3.0.1: {} - - tough-cookie@4.1.4: - dependencies: - psl: 1.15.0 - punycode: 2.3.1 - universalify: 0.2.0 - url-parse: 1.5.10 - - type-fest@0.21.3: {} - - type-fest@4.34.1: {} - - universalify@0.2.0: {} - - url-parse@1.5.10: - dependencies: - querystringify: 2.2.0 - requires-port: 1.0.0 - - vite-node@2.1.9: - dependencies: - cac: 6.7.14 - debug: 4.4.0 - es-module-lexer: 1.6.0 - pathe: 1.1.2 - vite: 5.4.14 - transitivePeerDependencies: - - '@types/node' - - less - - lightningcss - - sass - - sass-embedded - - stylus - - sugarss - - supports-color - - terser - - vite@5.4.14: - dependencies: - esbuild: 0.21.5 - postcss: 8.5.2 - rollup: 4.34.6 - optionalDependencies: - fsevents: 2.3.3 - - vitest@2.1.9(@vitest/browser@2.1.9)(msw@2.7.0): - dependencies: - '@vitest/expect': 2.1.9 - '@vitest/mocker': 2.1.9(msw@2.7.0)(vite@5.4.14) - '@vitest/pretty-format': 2.1.9 - '@vitest/runner': 2.1.9 - '@vitest/snapshot': 2.1.9 - '@vitest/spy': 2.1.9 - '@vitest/utils': 2.1.9 - chai: 5.1.2 - debug: 4.4.0 - expect-type: 1.1.0 - magic-string: 0.30.17 - pathe: 1.1.2 - std-env: 3.8.0 - tinybench: 2.9.0 - tinyexec: 0.3.2 - tinypool: 1.0.2 - tinyrainbow: 1.2.0 - vite: 5.4.14 - vite-node: 2.1.9 - why-is-node-running: 2.3.0 - optionalDependencies: - '@vitest/browser': 2.1.9(playwright@1.50.1)(vite@5.4.14)(vitest@2.1.9) - transitivePeerDependencies: - - less - - lightningcss - - msw - - sass - - sass-embedded - - stylus - - sugarss - - supports-color - - terser - - which@2.0.2: - dependencies: - isexe: 2.0.0 - - why-is-node-running@2.3.0: - dependencies: - siginfo: 2.0.0 - stackback: 0.0.2 - - wrap-ansi@6.2.0: - dependencies: - ansi-styles: 4.3.0 - string-width: 4.2.3 - strip-ansi: 6.0.1 - - wrap-ansi@7.0.0: - dependencies: - ansi-styles: 4.3.0 - string-width: 4.2.3 - strip-ansi: 6.0.1 - - wrap-ansi@8.1.0: - dependencies: - ansi-styles: 6.2.1 - string-width: 5.1.2 - strip-ansi: 7.1.0 - - ws@8.18.0: {} - - y18n@5.0.8: {} - - yargs-parser@21.1.1: {} - - yargs@17.7.2: - dependencies: - cliui: 8.0.1 - escalade: 3.2.0 - get-caller-file: 2.0.5 - require-directory: 2.1.1 - string-width: 4.2.3 - y18n: 5.0.8 - yargs-parser: 21.1.1 - - yoctocolors-cjs@2.1.2: {} diff --git a/samples/browser-headed/src/add.ts b/samples/browser-headed/src/add.ts deleted file mode 100644 index b8848d78..00000000 --- a/samples/browser-headed/src/add.ts +++ /dev/null @@ -1,7 +0,0 @@ -export function add(a: number, b: number) { - return a + b -} - -export function sum(from: number, to: number) { - return (from + to) * (to - from + 1) / 2 -} diff --git a/samples/browser-headed/src/should_included_test.ts b/samples/browser-headed/src/should_included_test.ts deleted file mode 100644 index eb51c768..00000000 --- a/samples/browser-headed/src/should_included_test.ts +++ /dev/null @@ -1,5 +0,0 @@ -import { describe, it } from 'vitest' - -describe('should included', () => { - it('is included because of workspace plugin setting', () => {}) -}) diff --git a/samples/browser-headed/test/.gitignore b/samples/browser-headed/test/.gitignore deleted file mode 100644 index b05c2dfa..00000000 --- a/samples/browser-headed/test/.gitignore +++ /dev/null @@ -1 +0,0 @@ -__snapshots__ diff --git a/samples/browser-headed/test/__screenshots__/each.test.ts/testing-all-fail--1----0-1.png b/samples/browser-headed/test/__screenshots__/each.test.ts/testing-all-fail--1----0-1.png deleted file mode 100644 index f88c55c1cad7d3de8229e8a42a99ad5e0bc9e037..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3012 zcmeAS@N?(olHy`uVBq!ia0y~yV4TOmz}&#W1QcnFZJGt77>k44ofy`glX=O&z+LC* z;uumf=k1k)oD2#A2MkL8&pofovQS0%%T-%r?gdZ(@G(@Jzty0S&D^wxmt&Ke!iiDN zXc&y9gVDS&S{{s+iKF$xXmvQ+Bp7WLjW!L*YaZ)u@!|YCPt|%AuvyOF>FVdQ&MBb@ E0IgVhRsaA1 diff --git a/samples/browser-headed/test/__screenshots__/each.test.ts/testing-all-fail--2----0-1.png b/samples/browser-headed/test/__screenshots__/each.test.ts/testing-all-fail--2----0-1.png deleted file mode 100644 index f88c55c1cad7d3de8229e8a42a99ad5e0bc9e037..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3012 zcmeAS@N?(olHy`uVBq!ia0y~yV4TOmz}&#W1QcnFZJGt77>k44ofy`glX=O&z+LC* z;uumf=k1k)oD2#A2MkL8&pofovQS0%%T-%r?gdZ(@G(@Jzty0S&D^wxmt&Ke!iiDN zXc&y9gVDS&S{{s+iKF$xXmvQ+Bp7WLjW!L*YaZ)u@!|YCPt|%AuvyOF>FVdQ&MBb@ E0IgVhRsaA1 diff --git a/samples/browser-headed/test/__screenshots__/each.test.ts/testing-all-fail--3----0-1.png b/samples/browser-headed/test/__screenshots__/each.test.ts/testing-all-fail--3----0-1.png deleted file mode 100644 index f88c55c1cad7d3de8229e8a42a99ad5e0bc9e037..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3012 zcmeAS@N?(olHy`uVBq!ia0y~yV4TOmz}&#W1QcnFZJGt77>k44ofy`glX=O&z+LC* z;uumf=k1k)oD2#A2MkL8&pofovQS0%%T-%r?gdZ(@G(@Jzty0S&D^wxmt&Ke!iiDN zXc&y9gVDS&S{{s+iKF$xXmvQ+Bp7WLjW!L*YaZ)u@!|YCPt|%AuvyOF>FVdQ&MBb@ E0IgVhRsaA1 diff --git a/samples/browser-headed/test/__screenshots__/each.test.ts/testing-first-fail--3----1-1.png b/samples/browser-headed/test/__screenshots__/each.test.ts/testing-first-fail--3----1-1.png deleted file mode 100644 index f88c55c1cad7d3de8229e8a42a99ad5e0bc9e037..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3012 zcmeAS@N?(olHy`uVBq!ia0y~yV4TOmz}&#W1QcnFZJGt77>k44ofy`glX=O&z+LC* z;uumf=k1k)oD2#A2MkL8&pofovQS0%%T-%r?gdZ(@G(@Jzty0S&D^wxmt&Ke!iiDN zXc&y9gVDS&S{{s+iKF$xXmvQ+Bp7WLjW!L*YaZ)u@!|YCPt|%AuvyOF>FVdQ&MBb@ E0IgVhRsaA1 diff --git a/samples/browser-headed/test/__screenshots__/each.test.ts/testing-first-pass--2----1-1.png b/samples/browser-headed/test/__screenshots__/each.test.ts/testing-first-pass--2----1-1.png deleted file mode 100644 index f88c55c1cad7d3de8229e8a42a99ad5e0bc9e037..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3012 zcmeAS@N?(olHy`uVBq!ia0y~yV4TOmz}&#W1QcnFZJGt77>k44ofy`glX=O&z+LC* z;uumf=k1k)oD2#A2MkL8&pofovQS0%%T-%r?gdZ(@G(@Jzty0S&D^wxmt&Ke!iiDN zXc&y9gVDS&S{{s+iKF$xXmvQ+Bp7WLjW!L*YaZ)u@!|YCPt|%AuvyOF>FVdQ&MBb@ E0IgVhRsaA1 diff --git a/samples/browser-headed/test/__screenshots__/each.test.ts/testing-first-pass--3----1-1.png b/samples/browser-headed/test/__screenshots__/each.test.ts/testing-first-pass--3----1-1.png deleted file mode 100644 index f88c55c1cad7d3de8229e8a42a99ad5e0bc9e037..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3012 zcmeAS@N?(olHy`uVBq!ia0y~yV4TOmz}&#W1QcnFZJGt77>k44ofy`glX=O&z+LC* z;uumf=k1k)oD2#A2MkL8&pofovQS0%%T-%r?gdZ(@G(@Jzty0S&D^wxmt&Ke!iiDN zXc&y9gVDS&S{{s+iKF$xXmvQ+Bp7WLjW!L*YaZ)u@!|YCPt|%AuvyOF>FVdQ&MBb@ E0IgVhRsaA1 diff --git a/samples/browser-headed/test/__screenshots__/each.test.ts/testing-last-fail--3----1-1.png b/samples/browser-headed/test/__screenshots__/each.test.ts/testing-last-fail--3----1-1.png deleted file mode 100644 index f88c55c1cad7d3de8229e8a42a99ad5e0bc9e037..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3012 zcmeAS@N?(olHy`uVBq!ia0y~yV4TOmz}&#W1QcnFZJGt77>k44ofy`glX=O&z+LC* z;uumf=k1k)oD2#A2MkL8&pofovQS0%%T-%r?gdZ(@G(@Jzty0S&D^wxmt&Ke!iiDN zXc&y9gVDS&S{{s+iKF$xXmvQ+Bp7WLjW!L*YaZ)u@!|YCPt|%AuvyOF>FVdQ&MBb@ E0IgVhRsaA1 diff --git a/samples/browser-headed/test/__screenshots__/each.test.ts/testing-last-pass--3----1-1.png b/samples/browser-headed/test/__screenshots__/each.test.ts/testing-last-pass--3----1-1.png deleted file mode 100644 index f88c55c1cad7d3de8229e8a42a99ad5e0bc9e037..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3012 zcmeAS@N?(olHy`uVBq!ia0y~yV4TOmz}&#W1QcnFZJGt77>k44ofy`glX=O&z+LC* z;uumf=k1k)oD2#A2MkL8&pofovQS0%%T-%r?gdZ(@G(@Jzty0S&D^wxmt&Ke!iiDN zXc&y9gVDS&S{{s+iKF$xXmvQ+Bp7WLjW!L*YaZ)u@!|YCPt|%AuvyOF>FVdQ&MBb@ E0IgVhRsaA1 diff --git a/samples/browser-headed/test/__screenshots__/env.test.ts/process-env-1.png b/samples/browser-headed/test/__screenshots__/env.test.ts/process-env-1.png deleted file mode 100644 index f88c55c1cad7d3de8229e8a42a99ad5e0bc9e037..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3012 zcmeAS@N?(olHy`uVBq!ia0y~yV4TOmz}&#W1QcnFZJGt77>k44ofy`glX=O&z+LC* z;uumf=k1k)oD2#A2MkL8&pofovQS0%%T-%r?gdZ(@G(@Jzty0S&D^wxmt&Ke!iiDN zXc&y9gVDS&S{{s+iKF$xXmvQ+Bp7WLjW!L*YaZ)u@!|YCPt|%AuvyOF>FVdQ&MBb@ E0IgVhRsaA1 diff --git a/samples/browser-headed/test/add.test.ts b/samples/browser-headed/test/add.test.ts deleted file mode 100644 index 2517c278..00000000 --- a/samples/browser-headed/test/add.test.ts +++ /dev/null @@ -1,52 +0,0 @@ -import { describe, expect, it } from 'vitest' -import { add, sum } from '../src/add' - -describe('addition', () => { - it('add', () => { - expect(add(1, 1)).toBe(2) - }) - - it('sum', () => { - expect(sum(0, 10)).toBe(55) - }) - - it.skip('skipped', () => { - expect(1 + 2).toBe(3) - }) - - it.todo('todo') - it('async task', async () => { - await new Promise(resolve => setTimeout(resolve, 100)) - }) - - it('async task 0.5s', async () => { - await new Promise(resolve => setTimeout(resolve, 500)) - }) - - it('async task 1s', async () => { - await new Promise(resolve => setTimeout(resolve, 1000)) - }) - - it('long task', () => { - let sum = 0 - for (let i = 0; i < 2e8; i++) - sum += i - - expect(sum).toBeGreaterThan(1) - }) -}) - -describe('testing', () => { - it('run', () => { - const a = 10 - expect(a).toBe(10) - }) - - it('mul', () => { - expect(5 * 5).toBe(25) - }) - - it("mul fail", () => { - expect(5 * 5).toBe(25) - }) -}) diff --git a/samples/browser-headed/test/console.test.ts b/samples/browser-headed/test/console.test.ts deleted file mode 100644 index 4efe8f6a..00000000 --- a/samples/browser-headed/test/console.test.ts +++ /dev/null @@ -1,25 +0,0 @@ -import { describe, it } from 'vitest' - -const sleep = (ms: number) => new Promise(resolve => setTimeout(resolve, ms)) - -describe('console', () => { - it('basic', () => { - console.log([ - 'string', - { hello: 'world' }, - 1234, - /regex/g, - true, - false, - null, - ]) - }) - - it('async', async () => { - console.log('1st') - await sleep(200) - console.log('2nd') - await sleep(200) - console.log('3rd') - }) -}) diff --git a/samples/browser-headed/test/deep/deeper/deep.test.ts b/samples/browser-headed/test/deep/deeper/deep.test.ts deleted file mode 100644 index 64456cdf..00000000 --- a/samples/browser-headed/test/deep/deeper/deep.test.ts +++ /dev/null @@ -1,5 +0,0 @@ -import { expect, it } from 'vitest' - -it('test', () => { - expect(1).toBe(1) -}) \ No newline at end of file diff --git a/samples/browser-headed/test/duplicated.test.ts b/samples/browser-headed/test/duplicated.test.ts deleted file mode 100644 index 8f839ba0..00000000 --- a/samples/browser-headed/test/duplicated.test.ts +++ /dev/null @@ -1,8 +0,0 @@ -import { describe, test } from "vitest"; - -describe("testing", () => { - test("number 1", () => { }) -}); -describe("testing", () => { - test("number 2", () => { }) -}); diff --git a/samples/browser-headed/test/each.test.ts b/samples/browser-headed/test/each.test.ts deleted file mode 100644 index f7cff915..00000000 --- a/samples/browser-headed/test/each.test.ts +++ /dev/null @@ -1,84 +0,0 @@ -import { describe, expect, it, test, } from 'vitest' - -describe('testing', (a) => { - it.each([ - [1, 1], [2, 2], [3, 3] - ])(`all pass: %i => %i`, (a, b) => { - expect(a).toBe(b) - }) - it.each([ - [1, 1], [2, 1], [3, 1] - ])(`first pass: %i => %i`, (a, b) => { - expect(a).toBe(b) - }) - it.each([ - [1, 1], [2, 2], [3, 1] - ])(`last pass: %i => %i`, (a, b) => { - expect(a).toBe(b) - }) - it.each([ - [1, 1], [2, 2], [3, 1] - ])(`first fail: %i => %i`, (a, b) => { - expect(a).toBe(b) - }) - it.each([ - [1, 1], [2, 2], [3, 1] - ])(`last fail: %i => %i`, (a, b) => { - expect(a).toBe(b) - }) - it.each([ - [1, 0], [2, 0], [3, 0] - ])(`all fail: %i => %i`, (a, b) => { - expect(a).toBe(b) - }) - it.each([ - 1, 2, 3 - ])('run %i', (a) => { - expect(a).toBe(a) - }) - it.each([ - [1, 1], [2, 4], [3, 9] - ])('run mul %i', (a,b) => { - expect(a * a).toBe(b) - }) - test.each([ - ["test1", 1], - ["test2", 2], - ["test3", 3], - ])(`%s => %i`, (a, b) => { - expect(a.at(-1)).toBe(`${b}`) - }) - test.each` - a | b | expected - ${1} | ${1} | ${2} - ${'a'} | ${'b'} | ${'ab'} - ${[]} | ${'b'} | ${'b'} - ${{}} | ${'b'} | ${'[object Object]b'} - ${{ asd: 1 }} | ${'b'} | ${'[object Object]b'} - `('table1: returns $expected when $a is added $b', ({ a, b, expected }) => { - expect(a + b).toBe(expected) - }) - test.each` - a | b | expected - ${{v: 1}} | ${{v: 1}} | ${2} - `('table2: returns $expected when $a.v is added $b.v', ({ a, b, expected }) => { - expect(a.v + b.v).toBe(expected) - }) - test.each([ - { input: 1, add: 1, sum: 2 }, - { input: 2, add: 2, sum: 4 }, - ])('$input + $add = $sum', ({ input, add, sum }) => { - expect(input + add).toBe(sum) - }) -}) - -// 'Test result not fourd' error occurs as both .each patterns are matched -// TODO: Fix this -describe("over matched test patterns", () => { - test.each(['1', '2'])('run %s', (a) => { - expect(a).toBe(String(a)) - }) - test.each(['1', '2'])('run for %s', (a) => { - expect(a).toBe(String(a)) - }) -}) diff --git a/samples/browser-headed/test/env.test.ts b/samples/browser-headed/test/env.test.ts deleted file mode 100644 index 07b88808..00000000 --- a/samples/browser-headed/test/env.test.ts +++ /dev/null @@ -1,9 +0,0 @@ -import { test, expect } from "vitest"; - -test('process.env', () => { - expect(process.env.TEST).toBe('true'); - expect(process.env.VITEST).toBe('true'); - expect(process.env.NODE_ENV).toBe('test'); - expect(process.env.VITEST_VSCODE).toBe('true'); - expect(process.env.TEST_CUSTOM_ENV).toBe('hello'); -}); diff --git a/samples/browser-headed/test/fail_to_run.test.ts b/samples/browser-headed/test/fail_to_run.test.ts deleted file mode 100644 index 13900e21..00000000 --- a/samples/browser-headed/test/fail_to_run.test.ts +++ /dev/null @@ -1 +0,0 @@ -test('aaaaaa', () => {}) diff --git a/samples/browser-headed/test/ignored.test.ts b/samples/browser-headed/test/ignored.test.ts deleted file mode 100644 index ff1c9074..00000000 --- a/samples/browser-headed/test/ignored.test.ts +++ /dev/null @@ -1,5 +0,0 @@ -import { describe, it } from 'vitest' - -describe('ignored test', () => { - it('is ignored because of vitest plugin setting', () => {}) -}) diff --git a/samples/browser-headed/test/mul.test.ts b/samples/browser-headed/test/mul.test.ts deleted file mode 100644 index b1a6e21e..00000000 --- a/samples/browser-headed/test/mul.test.ts +++ /dev/null @@ -1,6 +0,0 @@ -import { describe, it } from 'vitest' - -describe('mul', () => { - it.skip('run 1', () => {}) - it('run', () => {}) -}) diff --git a/samples/browser-headed/test/snapshot.test.ts b/samples/browser-headed/test/snapshot.test.ts deleted file mode 100644 index 2944c559..00000000 --- a/samples/browser-headed/test/snapshot.test.ts +++ /dev/null @@ -1,11 +0,0 @@ -import { describe, expect, it } from 'vitest' - -describe('snapshots', () => { - it('string', () => { - expect('bc').toMatchSnapshot() - }) - it('async', async () => { - await new Promise(resolve => setTimeout(resolve, 200)) - expect('bc').toMatchSnapshot() - }) -}) diff --git a/samples/browser-headed/test/using.test.ts b/samples/browser-headed/test/using.test.ts deleted file mode 100644 index d7e13a31..00000000 --- a/samples/browser-headed/test/using.test.ts +++ /dev/null @@ -1,43 +0,0 @@ -import { describe, expect, it } from 'vitest'; - -(Symbol as any).dispose ??= Symbol('Symbol.dispose'); -(Symbol as any).asyncDispose ??= Symbol('Symbol.asyncDispose') - -describe('using keyword', () => { - it('dispose', () => { - function getDisposableResource() { - using resource = new SomeDisposableResource() - return resource - } - - const resource = getDisposableResource() - expect(resource.isDisposed).toBe(true) - }) - - it('asyncDispose', async () => { - async function getAsyncDisposableResource() { - await using resource = new SomeAsyncDisposableResource() - return resource - } - - const resource = await getAsyncDisposableResource() - expect(resource.isDisposed).toBe(true) - }) -}) - -class SomeDisposableResource implements Disposable { - public isDisposed = false; - - [Symbol.dispose](): void { - this.isDisposed = true - } -} - -class SomeAsyncDisposableResource implements AsyncDisposable { - public isDisposed = false - - async [Symbol.asyncDispose](): Promise { - await new Promise(resolve => setTimeout(resolve, 0)) - this.isDisposed = true - } -} diff --git a/samples/browser-headed/vitest.config.ts b/samples/browser-headed/vitest.config.ts deleted file mode 100644 index f09b9125..00000000 --- a/samples/browser-headed/vitest.config.ts +++ /dev/null @@ -1,20 +0,0 @@ -/// - -// Configure Vitest (https://vitest.dev/config) - -import { defineConfig } from 'vitest/config' - -export default defineConfig({ - esbuild: { - target: 'es2020', - }, - test: { - include: ['test/**/*.test.ts'], - exclude: ['test/ignored.test.ts'], - browser: { - enabled: true, - name: 'chromium', - provider: 'playwright', - } - }, -}) diff --git a/samples/browser-headed/.vscode/launch.json b/samples/browser/.vscode/launch.json similarity index 100% rename from samples/browser-headed/.vscode/launch.json rename to samples/browser/.vscode/launch.json diff --git a/samples/browser/.vscode/settings.json b/samples/browser/.vscode/settings.json index 53d6bf68..83b9c56c 100644 --- a/samples/browser/.vscode/settings.json +++ b/samples/browser/.vscode/settings.json @@ -4,5 +4,8 @@ }, "[typescript]": { "editor.defaultFormatter": "dbaeumer.vscode-eslint" - } + }, + // See launch.json + "vitest.debugSecondaryLaunchConfigName": "vitest:test-explorer:attach", + "vitest.cliArgumentsDebug": "--inspect-brk=localhost:30001 --browser --no-file-parallelism" } From 0038ccc8d3a78126a7713f716fac2ed03006550a Mon Sep 17 00:00:00 2001 From: Nathan Castle Date: Fri, 28 Mar 2025 21:10:45 -0700 Subject: [PATCH 05/24] feat: no-config auto attach to browser - Removes existing implementation using explicit config options - Updates the rpc/worker to support reading vite's resolved browser configuration. This information is used to determine when the secondary attach config should be started. This information is also used to set the inspect-brk and browser flags on the vitest CLI when starting the debug session. This enables zero-config debugging when the user has started a test debug without interfering with running without debug. inspect-brk is used to guarantee that breakpoints early in the test run are hit (otherwise it is possible tests run before the debugger is attached). - Adds samples which verify that this feature works correctly when there are multiple instances configured and when webdriverio is being used (note: debugging is not supported for webdriverio, this just makes sure the feature doesn't break test running). Only chromium with playwright is supported by the current implementation. --- .vscode/launch.json | 20 + README.md | 6 - package.json | 10 - .../browser-multiple/.skip/vitest.config.ts | 1 + .../browser-multiple/.vscode/settings.json | 8 + samples/browser-multiple/package.json | 21 + samples/browser-multiple/pnpm-lock.yaml | 1869 +++++++ samples/browser-multiple/src/add.ts | 7 + .../src/should_included_test.ts | 5 + samples/browser-multiple/test/.gitignore | 1 + .../testing-all-fail--1----0-1.png | Bin 0 -> 3012 bytes .../testing-all-fail--2----0-1.png | Bin 0 -> 3012 bytes .../testing-all-fail--3----0-1.png | Bin 0 -> 3012 bytes .../testing-first-fail--3----1-1.png | Bin 0 -> 3012 bytes .../testing-first-pass--2----1-1.png | Bin 0 -> 3012 bytes .../testing-first-pass--3----1-1.png | Bin 0 -> 3012 bytes .../testing-last-fail--3----1-1.png | Bin 0 -> 3012 bytes .../testing-last-pass--3----1-1.png | Bin 0 -> 3012 bytes .../env.test.ts/process-env-1.png | Bin 0 -> 3012 bytes samples/browser-multiple/test/add.test.ts | 52 + samples/browser-multiple/test/console.test.ts | 25 + .../test/deep/deeper/deep.test.ts | 5 + .../browser-multiple/test/duplicated.test.ts | 8 + samples/browser-multiple/test/each.test.ts | 84 + samples/browser-multiple/test/env.test.ts | 9 + .../browser-multiple/test/fail_to_run.test.ts | 1 + samples/browser-multiple/test/ignored.test.ts | 5 + samples/browser-multiple/test/mul.test.ts | 6 + .../browser-multiple/test/snapshot.test.ts | 11 + samples/browser-multiple/test/using.test.ts | 43 + samples/browser-multiple/vitest.config.ts | 30 + .../.skip/vitest.config.ts | 1 + .../browser-webdriverio/.vscode/settings.json | 8 + samples/browser-webdriverio/package.json | 22 + samples/browser-webdriverio/pnpm-lock.yaml | 4493 +++++++++++++++++ samples/browser-webdriverio/readme.md | 1 + samples/browser-webdriverio/src/add.ts | 7 + .../src/should_included_test.ts | 5 + samples/browser-webdriverio/test/.gitignore | 1 + .../testing-all-fail--1----0-1.png | Bin 0 -> 3306 bytes .../testing-all-fail--2----0-1.png | Bin 0 -> 3306 bytes .../testing-all-fail--3----0-1.png | Bin 0 -> 3306 bytes .../testing-first-fail--3----1-1.png | Bin 0 -> 3306 bytes .../testing-first-pass--2----1-1.png | Bin 0 -> 3306 bytes .../testing-first-pass--3----1-1.png | Bin 0 -> 3306 bytes .../testing-last-fail--3----1-1.png | Bin 0 -> 3306 bytes .../testing-last-pass--3----1-1.png | Bin 0 -> 3306 bytes .../env.test.ts/process-env-1.png | Bin 0 -> 3306 bytes samples/browser-webdriverio/test/add.test.ts | 52 + .../browser-webdriverio/test/console.test.ts | 25 + .../test/deep/deeper/deep.test.ts | 5 + .../test/duplicated.test.ts | 8 + samples/browser-webdriverio/test/each.test.ts | 84 + samples/browser-webdriverio/test/env.test.ts | 9 + .../test/fail_to_run.test.ts | 1 + .../browser-webdriverio/test/ignored.test.ts | 5 + samples/browser-webdriverio/test/mul.test.ts | 6 + .../browser-webdriverio/test/snapshot.test.ts | 11 + .../browser-webdriverio/test/using.test.ts | 43 + samples/browser-webdriverio/vitest.config.ts | 33 + samples/browser/.vscode/launch.json | 16 - samples/browser/.vscode/settings.json | 3 - src/api.ts | 12 +- src/api/child_process.ts | 2 +- src/api/pkg.ts | 4 +- src/api/rpc.ts | 3 + src/api/terminal.ts | 2 +- src/api/ws.ts | 4 +- src/config.ts | 5 - src/debug.ts | 31 +- src/worker/worker.ts | 6 +- 71 files changed, 7080 insertions(+), 55 deletions(-) create mode 100644 samples/browser-multiple/.skip/vitest.config.ts create mode 100644 samples/browser-multiple/.vscode/settings.json create mode 100644 samples/browser-multiple/package.json create mode 100644 samples/browser-multiple/pnpm-lock.yaml create mode 100644 samples/browser-multiple/src/add.ts create mode 100644 samples/browser-multiple/src/should_included_test.ts create mode 100644 samples/browser-multiple/test/.gitignore create mode 100644 samples/browser-multiple/test/__screenshots__/each.test.ts/testing-all-fail--1----0-1.png create mode 100644 samples/browser-multiple/test/__screenshots__/each.test.ts/testing-all-fail--2----0-1.png create mode 100644 samples/browser-multiple/test/__screenshots__/each.test.ts/testing-all-fail--3----0-1.png create mode 100644 samples/browser-multiple/test/__screenshots__/each.test.ts/testing-first-fail--3----1-1.png create mode 100644 samples/browser-multiple/test/__screenshots__/each.test.ts/testing-first-pass--2----1-1.png create mode 100644 samples/browser-multiple/test/__screenshots__/each.test.ts/testing-first-pass--3----1-1.png create mode 100644 samples/browser-multiple/test/__screenshots__/each.test.ts/testing-last-fail--3----1-1.png create mode 100644 samples/browser-multiple/test/__screenshots__/each.test.ts/testing-last-pass--3----1-1.png create mode 100644 samples/browser-multiple/test/__screenshots__/env.test.ts/process-env-1.png create mode 100644 samples/browser-multiple/test/add.test.ts create mode 100644 samples/browser-multiple/test/console.test.ts create mode 100644 samples/browser-multiple/test/deep/deeper/deep.test.ts create mode 100644 samples/browser-multiple/test/duplicated.test.ts create mode 100644 samples/browser-multiple/test/each.test.ts create mode 100644 samples/browser-multiple/test/env.test.ts create mode 100644 samples/browser-multiple/test/fail_to_run.test.ts create mode 100644 samples/browser-multiple/test/ignored.test.ts create mode 100644 samples/browser-multiple/test/mul.test.ts create mode 100644 samples/browser-multiple/test/snapshot.test.ts create mode 100644 samples/browser-multiple/test/using.test.ts create mode 100644 samples/browser-multiple/vitest.config.ts create mode 100644 samples/browser-webdriverio/.skip/vitest.config.ts create mode 100644 samples/browser-webdriverio/.vscode/settings.json create mode 100644 samples/browser-webdriverio/package.json create mode 100644 samples/browser-webdriverio/pnpm-lock.yaml create mode 100644 samples/browser-webdriverio/readme.md create mode 100644 samples/browser-webdriverio/src/add.ts create mode 100644 samples/browser-webdriverio/src/should_included_test.ts create mode 100644 samples/browser-webdriverio/test/.gitignore create mode 100644 samples/browser-webdriverio/test/__screenshots__/each.test.ts/testing-all-fail--1----0-1.png create mode 100644 samples/browser-webdriverio/test/__screenshots__/each.test.ts/testing-all-fail--2----0-1.png create mode 100644 samples/browser-webdriverio/test/__screenshots__/each.test.ts/testing-all-fail--3----0-1.png create mode 100644 samples/browser-webdriverio/test/__screenshots__/each.test.ts/testing-first-fail--3----1-1.png create mode 100644 samples/browser-webdriverio/test/__screenshots__/each.test.ts/testing-first-pass--2----1-1.png create mode 100644 samples/browser-webdriverio/test/__screenshots__/each.test.ts/testing-first-pass--3----1-1.png create mode 100644 samples/browser-webdriverio/test/__screenshots__/each.test.ts/testing-last-fail--3----1-1.png create mode 100644 samples/browser-webdriverio/test/__screenshots__/each.test.ts/testing-last-pass--3----1-1.png create mode 100644 samples/browser-webdriverio/test/__screenshots__/env.test.ts/process-env-1.png create mode 100644 samples/browser-webdriverio/test/add.test.ts create mode 100644 samples/browser-webdriverio/test/console.test.ts create mode 100644 samples/browser-webdriverio/test/deep/deeper/deep.test.ts create mode 100644 samples/browser-webdriverio/test/duplicated.test.ts create mode 100644 samples/browser-webdriverio/test/each.test.ts create mode 100644 samples/browser-webdriverio/test/env.test.ts create mode 100644 samples/browser-webdriverio/test/fail_to_run.test.ts create mode 100644 samples/browser-webdriverio/test/ignored.test.ts create mode 100644 samples/browser-webdriverio/test/mul.test.ts create mode 100644 samples/browser-webdriverio/test/snapshot.test.ts create mode 100644 samples/browser-webdriverio/test/using.test.ts create mode 100644 samples/browser-webdriverio/vitest.config.ts delete mode 100644 samples/browser/.vscode/launch.json diff --git a/.vscode/launch.json b/.vscode/launch.json index dc423605..de76652a 100644 --- a/.vscode/launch.json +++ b/.vscode/launch.json @@ -25,6 +25,26 @@ ], "outFiles": ["${workspaceFolder}/dist/**/*.js"] }, + { + "name": "Run Extension Browser (multiple instances) Sample", + "type": "extensionHost", + "request": "launch", + "args": [ + "--extensionDevelopmentPath=${workspaceFolder}", + "${workspaceFolder}/samples/browser-multiple" + ], + "outFiles": ["${workspaceFolder}/dist/**/*.js"] + }, + { + "name": "Run Extension Browser (webdriverio) Sample", + "type": "extensionHost", + "request": "launch", + "args": [ + "--extensionDevelopmentPath=${workspaceFolder}", + "${workspaceFolder}/samples/browser-webdriverio" + ], + "outFiles": ["${workspaceFolder}/dist/**/*.js"] + }, { "name": "Run Extension Continuous Sample", "type": "extensionHost", diff --git a/README.md b/README.md index 1aadc7f0..4e4165a5 100644 --- a/README.md +++ b/README.md @@ -81,8 +81,6 @@ These options are resolved relative to the [workspace file](https://code.visuals - `vitest.debuggerPort`: Port that the debugger will be attached to. By default uses 9229 or tries to find a free port if it's not available. - `vitest.debuggerAddress`: TCP/IP address of process to be debugged. Default: localhost - `vitest.cliArguments`: Additional arguments to pass to the Vitest CLI. Note that some arguments will be ignored: `watch`, `reporter`, `api`, and `ui`. Example: `--mode=staging` -- `vitest.cliArgumentsDebug`: Additional arguments to pass to the Vitest CLI when debugging. Will fall back to `vitest.cliArguments` if not specified. Note that some arguments will be ignored: `watch`, `reporter`, `api`, and `ui`. Example: `--mode=staging` -- `vitest.debugSecondaryLaunchConfigName`: The name of the VS Code [launch configuration](https://code.visualstudio.com/docs/editor/debugging-configuration#_launch-versus-attach-configurations) to run after starting a test debug session but before running the tests. This is useful to support in-browser test scenarios, for example by specifying an 'attach' config. See [Browser mode debugging](https://vitest.dev/guide/debugging.html#browser-mode) in the Vitest docs for more information. > 💡 The `vitest.nodeExecutable` and `vitest.nodeExecArgs` settings are used as `execPath` and `execArgv` when spawning a new `child_process`, and as `runtimeExecutable` and `runtimeArgs` when [debugging a test](https://github.com/microsoft/vscode-js-debug/blob/main/OPTIONS.md). > The `vitest.terminalShellPath` and `vitest.terminalShellArgs` settings are used as `shellPath` and `shellArgs` when creating a new [terminal](https://code.visualstudio.com/api/references/vscode-api#Terminal) @@ -133,7 +131,3 @@ This is a vscode's built-in option and will control every plugin. ### I am using `vitest.shellType: terminal`, but I don't see the terminal The extension uses a modified Vitest script that removes the reporter output. For this reason, the terminal is hidden by default. However, it might be useful to debug issues with the extension or Vitest itself - to open the terminal in the "Terminals" view you can use the "Vitest: Show Shell Terminal" command. - -### How can I debug tests using the browser? - -You can configure a launch configuration to connect the VS Code debugger to the browser launched by Vitest using the `vitest.debugSecondaryLaunchConfigName` setting. See [the samples](./samples/browser-headed/) for an example. diff --git a/package.json b/package.json index ab7e9dcb..af0e6a1c 100644 --- a/package.json +++ b/package.json @@ -184,11 +184,6 @@ "type": "array", "scope": "resource" }, - "vitest.debugSecondaryLaunchConfigName": { - "markdownDescription": "The name of the VS Code [launch configuration](https://code.visualstudio.com/docs/editor/debugging-configuration#_launch-versus-attach-configurations) to run after starting a test debug session but before running the tests. This is useful to support in-browser test scenarios, for example by specifying an 'attach' config. See [Browser mode debugging](https://vitest.dev/guide/debugging.html#browser-mode) in the Vitest docs for more information.", - "type": "string", - "scope": "resource" - }, "vitest.nodeEnv": { "markdownDescription": "The env passed to runner process in addition to `process.env`", "type": [ @@ -239,11 +234,6 @@ "markdownDescription": "Additional arguments to pass to the Vitest CLI. Note that some arguments will be ignored: `watch`, `reporter`, `api`, and `ui`. Example: `--mode=staging`.", "type": "string", "scope": "resource" - }, - "vitest.cliArgumentsDebug": { - "markdownDescription": "Additional arguments to pass to the Vitest CLI when debugging. If not specified, falls back to `#vitest.cliArguments#`. Note that some arguments will be ignored: `watch`, `reporter`, `api`, and `ui`. Example: `--mode=staging`.", - "type": "string", - "scope": "resource" } } } diff --git a/samples/browser-multiple/.skip/vitest.config.ts b/samples/browser-multiple/.skip/vitest.config.ts new file mode 100644 index 00000000..91480683 --- /dev/null +++ b/samples/browser-multiple/.skip/vitest.config.ts @@ -0,0 +1 @@ +throw new Error('do not import') \ No newline at end of file diff --git a/samples/browser-multiple/.vscode/settings.json b/samples/browser-multiple/.vscode/settings.json new file mode 100644 index 00000000..b6a8a2a8 --- /dev/null +++ b/samples/browser-multiple/.vscode/settings.json @@ -0,0 +1,8 @@ +{ + "vitest.nodeEnv": { + "TEST_CUSTOM_ENV": "hello" + }, + "[typescript]": { + "editor.defaultFormatter": "dbaeumer.vscode-eslint" + }, +} diff --git a/samples/browser-multiple/package.json b/samples/browser-multiple/package.json new file mode 100644 index 00000000..4a7839b0 --- /dev/null +++ b/samples/browser-multiple/package.json @@ -0,0 +1,21 @@ +{ + "name": "basic", + "version": "1.0.0", + "description": "", + "author": "", + "license": "ISC", + "main": "index.js", + "scripts": { + "test": "vitest run" + }, + "dependencies": { + "birpc": "^0.2.2" + }, + "devDependencies": { + "@vitest/browser": "^3.0.9", + "@vitest/coverage-v8": "^3.0.9", + "playwright": "^1.51.1", + "vite": "^5.4.3", + "vitest": "^3.0.9" + } +} diff --git a/samples/browser-multiple/pnpm-lock.yaml b/samples/browser-multiple/pnpm-lock.yaml new file mode 100644 index 00000000..224c75a7 --- /dev/null +++ b/samples/browser-multiple/pnpm-lock.yaml @@ -0,0 +1,1869 @@ +lockfileVersion: '9.0' + +settings: + autoInstallPeers: true + excludeLinksFromLockfile: false + +importers: + + .: + dependencies: + birpc: + specifier: ^0.2.2 + version: 0.2.19 + devDependencies: + '@vitest/browser': + specifier: ^3.0.9 + version: 3.0.9(playwright@1.51.1)(vite@5.4.14)(vitest@3.0.9) + '@vitest/coverage-v8': + specifier: ^3.0.9 + version: 3.0.9(@vitest/browser@3.0.9)(vitest@3.0.9) + playwright: + specifier: ^1.51.1 + version: 1.51.1 + vite: + specifier: ^5.4.3 + version: 5.4.14 + vitest: + specifier: ^3.0.9 + version: 3.0.9(@vitest/browser@3.0.9)(msw@2.7.3) + +packages: + + '@ampproject/remapping@2.3.0': + resolution: {integrity: sha512-30iZtAPgz+LTIYoeivqYo853f02jBYSd5uGnGpkFV0M3xOt9aN73erkgYAmZU43x4VfqcnLxW9Kpg3R5LC4YYw==} + engines: {node: '>=6.0.0'} + + '@babel/code-frame@7.26.2': + resolution: {integrity: sha512-RJlIHRueQgwWitWgF8OdFYGZX328Ax5BCemNGlqHfplnRT9ESi8JkFlvaVYbS+UubVY6dpv87Fs2u5M29iNFVQ==} + engines: {node: '>=6.9.0'} + + '@babel/helper-string-parser@7.25.9': + resolution: {integrity: sha512-4A/SCr/2KLd5jrtOMFzaKjVtAei3+2r/NChoBNoZ3EyP/+GlhoaEGoWOZUmFmoITP7zOJyHIMm+DYRd8o3PvHA==} + engines: {node: '>=6.9.0'} + + '@babel/helper-validator-identifier@7.25.9': + resolution: {integrity: sha512-Ed61U6XJc3CVRfkERJWDz4dJwKe7iLmmJsbOGu9wSloNSFttHV0I8g6UAgb7qnK5ly5bGLPd4oXZlxCdANBOWQ==} + engines: {node: '>=6.9.0'} + + '@babel/parser@7.26.8': + resolution: {integrity: sha512-TZIQ25pkSoaKEYYaHbbxkfL36GNsQ6iFiBbeuzAkLnXayKR1yP1zFe+NxuZWWsUyvt8icPU9CCq0sgWGXR1GEw==} + engines: {node: '>=6.0.0'} + hasBin: true + + '@babel/runtime@7.26.7': + resolution: {integrity: sha512-AOPI3D+a8dXnja+iwsUqGRjr1BbZIe771sXdapOtYI531gSqpi92vXivKcq2asu/DFpdl1ceFAKZyRzK2PCVcQ==} + engines: {node: '>=6.9.0'} + + '@babel/types@7.26.8': + resolution: {integrity: sha512-eUuWapzEGWFEpHFxgEaBG8e3n6S8L3MSu0oda755rOfabWPnh0Our1AozNFVUxGFIhbKgd1ksprsoDGMinTOTA==} + engines: {node: '>=6.9.0'} + + '@bcoe/v8-coverage@1.0.2': + resolution: {integrity: sha512-6zABk/ECA/QYSCQ1NGiVwwbQerUCZ+TQbp64Q3AgmfNvurHH0j8TtXa1qbShXA6qqkpAj4V5W8pP6mLe1mcMqA==} + engines: {node: '>=18'} + + '@bundled-es-modules/cookie@2.0.1': + resolution: {integrity: sha512-8o+5fRPLNbjbdGRRmJj3h6Hh1AQJf2dk3qQ/5ZFb+PXkRNiSoMGGUKlsgLfrxneb72axVJyIYji64E2+nNfYyw==} + + '@bundled-es-modules/statuses@1.0.1': + resolution: {integrity: sha512-yn7BklA5acgcBr+7w064fGV+SGIFySjCKpqjcWgBAIfrAkY+4GQTJJHQMeT3V/sgz23VTEVV8TtOmkvJAhFVfg==} + + '@bundled-es-modules/tough-cookie@0.1.6': + resolution: {integrity: sha512-dvMHbL464C0zI+Yqxbz6kZ5TOEp7GLW+pry/RWndAR8MJQAXZ2rPmIs8tziTZjeIyhSNZgZbCePtfSbdWqStJw==} + + '@esbuild/aix-ppc64@0.21.5': + resolution: {integrity: sha512-1SDgH6ZSPTlggy1yI6+Dbkiz8xzpHJEVAlF/AM1tHPLsf5STom9rwtjE4hKAF20FfXXNTFqEYXyJNWh1GiZedQ==} + engines: {node: '>=12'} + cpu: [ppc64] + os: [aix] + + '@esbuild/android-arm64@0.21.5': + resolution: {integrity: sha512-c0uX9VAUBQ7dTDCjq+wdyGLowMdtR/GoC2U5IYk/7D1H1JYC0qseD7+11iMP2mRLN9RcCMRcjC4YMclCzGwS/A==} + engines: {node: '>=12'} + cpu: [arm64] + os: [android] + + '@esbuild/android-arm@0.21.5': + resolution: {integrity: sha512-vCPvzSjpPHEi1siZdlvAlsPxXl7WbOVUBBAowWug4rJHb68Ox8KualB+1ocNvT5fjv6wpkX6o/iEpbDrf68zcg==} + engines: {node: '>=12'} + cpu: [arm] + os: [android] + + '@esbuild/android-x64@0.21.5': + resolution: {integrity: sha512-D7aPRUUNHRBwHxzxRvp856rjUHRFW1SdQATKXH2hqA0kAZb1hKmi02OpYRacl0TxIGz/ZmXWlbZgjwWYaCakTA==} + engines: {node: '>=12'} + cpu: [x64] + os: [android] + + '@esbuild/darwin-arm64@0.21.5': + resolution: {integrity: sha512-DwqXqZyuk5AiWWf3UfLiRDJ5EDd49zg6O9wclZ7kUMv2WRFr4HKjXp/5t8JZ11QbQfUS6/cRCKGwYhtNAY88kQ==} + engines: {node: '>=12'} + cpu: [arm64] + os: [darwin] + + '@esbuild/darwin-x64@0.21.5': + resolution: {integrity: sha512-se/JjF8NlmKVG4kNIuyWMV/22ZaerB+qaSi5MdrXtd6R08kvs2qCN4C09miupktDitvh8jRFflwGFBQcxZRjbw==} + engines: {node: '>=12'} + cpu: [x64] + os: [darwin] + + '@esbuild/freebsd-arm64@0.21.5': + resolution: {integrity: sha512-5JcRxxRDUJLX8JXp/wcBCy3pENnCgBR9bN6JsY4OmhfUtIHe3ZW0mawA7+RDAcMLrMIZaf03NlQiX9DGyB8h4g==} + engines: {node: '>=12'} + cpu: [arm64] + os: [freebsd] + + '@esbuild/freebsd-x64@0.21.5': + resolution: {integrity: sha512-J95kNBj1zkbMXtHVH29bBriQygMXqoVQOQYA+ISs0/2l3T9/kj42ow2mpqerRBxDJnmkUDCaQT/dfNXWX/ZZCQ==} + engines: {node: '>=12'} + cpu: [x64] + os: [freebsd] + + '@esbuild/linux-arm64@0.21.5': + resolution: {integrity: sha512-ibKvmyYzKsBeX8d8I7MH/TMfWDXBF3db4qM6sy+7re0YXya+K1cem3on9XgdT2EQGMu4hQyZhan7TeQ8XkGp4Q==} + engines: {node: '>=12'} + cpu: [arm64] + os: [linux] + + '@esbuild/linux-arm@0.21.5': + resolution: {integrity: sha512-bPb5AHZtbeNGjCKVZ9UGqGwo8EUu4cLq68E95A53KlxAPRmUyYv2D6F0uUI65XisGOL1hBP5mTronbgo+0bFcA==} + engines: {node: '>=12'} + cpu: [arm] + os: [linux] + + '@esbuild/linux-ia32@0.21.5': + resolution: {integrity: sha512-YvjXDqLRqPDl2dvRODYmmhz4rPeVKYvppfGYKSNGdyZkA01046pLWyRKKI3ax8fbJoK5QbxblURkwK/MWY18Tg==} + engines: {node: '>=12'} + cpu: [ia32] + os: [linux] + + '@esbuild/linux-loong64@0.21.5': + resolution: {integrity: sha512-uHf1BmMG8qEvzdrzAqg2SIG/02+4/DHB6a9Kbya0XDvwDEKCoC8ZRWI5JJvNdUjtciBGFQ5PuBlpEOXQj+JQSg==} + engines: {node: '>=12'} + cpu: [loong64] + os: [linux] + + '@esbuild/linux-mips64el@0.21.5': + resolution: {integrity: sha512-IajOmO+KJK23bj52dFSNCMsz1QP1DqM6cwLUv3W1QwyxkyIWecfafnI555fvSGqEKwjMXVLokcV5ygHW5b3Jbg==} + engines: {node: '>=12'} + cpu: [mips64el] + os: [linux] + + '@esbuild/linux-ppc64@0.21.5': + resolution: {integrity: sha512-1hHV/Z4OEfMwpLO8rp7CvlhBDnjsC3CttJXIhBi+5Aj5r+MBvy4egg7wCbe//hSsT+RvDAG7s81tAvpL2XAE4w==} + engines: {node: '>=12'} + cpu: [ppc64] + os: [linux] + + '@esbuild/linux-riscv64@0.21.5': + resolution: {integrity: sha512-2HdXDMd9GMgTGrPWnJzP2ALSokE/0O5HhTUvWIbD3YdjME8JwvSCnNGBnTThKGEB91OZhzrJ4qIIxk/SBmyDDA==} + engines: {node: '>=12'} + cpu: [riscv64] + os: [linux] + + '@esbuild/linux-s390x@0.21.5': + resolution: {integrity: sha512-zus5sxzqBJD3eXxwvjN1yQkRepANgxE9lgOW2qLnmr8ikMTphkjgXu1HR01K4FJg8h1kEEDAqDcZQtbrRnB41A==} + engines: {node: '>=12'} + cpu: [s390x] + os: [linux] + + '@esbuild/linux-x64@0.21.5': + resolution: {integrity: sha512-1rYdTpyv03iycF1+BhzrzQJCdOuAOtaqHTWJZCWvijKD2N5Xu0TtVC8/+1faWqcP9iBCWOmjmhoH94dH82BxPQ==} + engines: {node: '>=12'} + cpu: [x64] + os: [linux] + + '@esbuild/netbsd-x64@0.21.5': + resolution: {integrity: sha512-Woi2MXzXjMULccIwMnLciyZH4nCIMpWQAs049KEeMvOcNADVxo0UBIQPfSmxB3CWKedngg7sWZdLvLczpe0tLg==} + engines: {node: '>=12'} + cpu: [x64] + os: [netbsd] + + '@esbuild/openbsd-x64@0.21.5': + resolution: {integrity: sha512-HLNNw99xsvx12lFBUwoT8EVCsSvRNDVxNpjZ7bPn947b8gJPzeHWyNVhFsaerc0n3TsbOINvRP2byTZ5LKezow==} + engines: {node: '>=12'} + cpu: [x64] + os: [openbsd] + + '@esbuild/sunos-x64@0.21.5': + resolution: {integrity: sha512-6+gjmFpfy0BHU5Tpptkuh8+uw3mnrvgs+dSPQXQOv3ekbordwnzTVEb4qnIvQcYXq6gzkyTnoZ9dZG+D4garKg==} + engines: {node: '>=12'} + cpu: [x64] + os: [sunos] + + '@esbuild/win32-arm64@0.21.5': + resolution: {integrity: sha512-Z0gOTd75VvXqyq7nsl93zwahcTROgqvuAcYDUr+vOv8uHhNSKROyU961kgtCD1e95IqPKSQKH7tBTslnS3tA8A==} + engines: {node: '>=12'} + cpu: [arm64] + os: [win32] + + '@esbuild/win32-ia32@0.21.5': + resolution: {integrity: sha512-SWXFF1CL2RVNMaVs+BBClwtfZSvDgtL//G/smwAc5oVK/UPu2Gu9tIaRgFmYFFKrmg3SyAjSrElf0TiJ1v8fYA==} + engines: {node: '>=12'} + cpu: [ia32] + os: [win32] + + '@esbuild/win32-x64@0.21.5': + resolution: {integrity: sha512-tQd/1efJuzPC6rCFwEvLtci/xNFcTZknmXs98FYDfGE4wP9ClFV98nyKrzJKVPMhdDnjzLhdUyMX4PsQAPjwIw==} + engines: {node: '>=12'} + cpu: [x64] + os: [win32] + + '@inquirer/confirm@5.1.5': + resolution: {integrity: sha512-ZB2Cz8KeMINUvoeDi7IrvghaVkYT2RB0Zb31EaLWOE87u276w4wnApv0SH2qWaJ3r0VSUa3BIuz7qAV2ZvsZlg==} + engines: {node: '>=18'} + peerDependencies: + '@types/node': '>=18' + peerDependenciesMeta: + '@types/node': + optional: true + + '@inquirer/core@10.1.6': + resolution: {integrity: sha512-Bwh/Zk6URrHwZnSSzAZAKH7YgGYi0xICIBDFOqBQoXNNAzBHw/bgXgLmChfp+GyR3PnChcTbiCTZGC6YJNJkMA==} + engines: {node: '>=18'} + peerDependencies: + '@types/node': '>=18' + peerDependenciesMeta: + '@types/node': + optional: true + + '@inquirer/figures@1.0.10': + resolution: {integrity: sha512-Ey6176gZmeqZuY/W/nZiUyvmb1/qInjcpiZjXWi6nON+nxJpD1bxtSoBxNliGISae32n6OwbY+TSXPZ1CfS4bw==} + engines: {node: '>=18'} + + '@inquirer/type@3.0.4': + resolution: {integrity: sha512-2MNFrDY8jkFYc9Il9DgLsHhMzuHnOYM1+CUYVWbzu9oT0hC7V7EcYvdCKeoll/Fcci04A+ERZ9wcc7cQ8lTkIA==} + engines: {node: '>=18'} + peerDependencies: + '@types/node': '>=18' + peerDependenciesMeta: + '@types/node': + optional: true + + '@isaacs/cliui@8.0.2': + resolution: {integrity: sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==} + engines: {node: '>=12'} + + '@istanbuljs/schema@0.1.3': + resolution: {integrity: sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA==} + engines: {node: '>=8'} + + '@jridgewell/gen-mapping@0.3.8': + resolution: {integrity: sha512-imAbBGkb+ebQyxKgzv5Hu2nmROxoDOXHh80evxdoXNOrvAnVx7zimzc1Oo5h9RlfV4vPXaE2iM5pOFbvOCClWA==} + engines: {node: '>=6.0.0'} + + '@jridgewell/resolve-uri@3.1.2': + resolution: {integrity: sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==} + engines: {node: '>=6.0.0'} + + '@jridgewell/set-array@1.2.1': + resolution: {integrity: sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A==} + engines: {node: '>=6.0.0'} + + '@jridgewell/sourcemap-codec@1.5.0': + resolution: {integrity: sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ==} + + '@jridgewell/trace-mapping@0.3.25': + resolution: {integrity: sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==} + + '@mswjs/interceptors@0.37.6': + resolution: {integrity: sha512-wK+5pLK5XFmgtH3aQ2YVvA3HohS3xqV/OxuVOdNx9Wpnz7VE/fnC+e1A7ln6LFYeck7gOJ/dsZV6OLplOtAJ2w==} + engines: {node: '>=18'} + + '@open-draft/deferred-promise@2.2.0': + resolution: {integrity: sha512-CecwLWx3rhxVQF6V4bAgPS5t+So2sTbPgAzafKkVizyi7tlwpcFpdFqq+wqF2OwNBmqFuu6tOyouTuxgpMfzmA==} + + '@open-draft/logger@0.3.0': + resolution: {integrity: sha512-X2g45fzhxH238HKO4xbSr7+wBS8Fvw6ixhTDuvLd5mqh6bJJCFAPwU9mPDxbcrRtfxv4u5IHCEH77BmxvXmmxQ==} + + '@open-draft/until@2.1.0': + resolution: {integrity: sha512-U69T3ItWHvLwGg5eJ0n3I62nWuE6ilHlmz7zM0npLBRvPRd7e6NYmg54vvRtP5mZG7kZqZCFVdsTWo7BPtBujg==} + + '@pkgjs/parseargs@0.11.0': + resolution: {integrity: sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==} + engines: {node: '>=14'} + + '@polka/url@1.0.0-next.28': + resolution: {integrity: sha512-8LduaNlMZGwdZ6qWrKlfa+2M4gahzFkprZiAt2TF8uS0qQgBizKXpXURqvTJ4WtmupWxaLqjRb2UCTe72mu+Aw==} + + '@rollup/rollup-android-arm-eabi@4.34.6': + resolution: {integrity: sha512-+GcCXtOQoWuC7hhX1P00LqjjIiS/iOouHXhMdiDSnq/1DGTox4SpUvO52Xm+div6+106r+TcvOeo/cxvyEyTgg==} + cpu: [arm] + os: [android] + + '@rollup/rollup-android-arm64@4.34.6': + resolution: {integrity: sha512-E8+2qCIjciYUnCa1AiVF1BkRgqIGW9KzJeesQqVfyRITGQN+dFuoivO0hnro1DjT74wXLRZ7QF8MIbz+luGaJA==} + cpu: [arm64] + os: [android] + + '@rollup/rollup-darwin-arm64@4.34.6': + resolution: {integrity: sha512-z9Ib+OzqN3DZEjX7PDQMHEhtF+t6Mi2z/ueChQPLS/qUMKY7Ybn5A2ggFoKRNRh1q1T03YTQfBTQCJZiepESAg==} + cpu: [arm64] + os: [darwin] + + '@rollup/rollup-darwin-x64@4.34.6': + resolution: {integrity: sha512-PShKVY4u0FDAR7jskyFIYVyHEPCPnIQY8s5OcXkdU8mz3Y7eXDJPdyM/ZWjkYdR2m0izD9HHWA8sGcXn+Qrsyg==} + cpu: [x64] + os: [darwin] + + '@rollup/rollup-freebsd-arm64@4.34.6': + resolution: {integrity: sha512-YSwyOqlDAdKqs0iKuqvRHLN4SrD2TiswfoLfvYXseKbL47ht1grQpq46MSiQAx6rQEN8o8URtpXARCpqabqxGQ==} + cpu: [arm64] + os: [freebsd] + + '@rollup/rollup-freebsd-x64@4.34.6': + resolution: {integrity: sha512-HEP4CgPAY1RxXwwL5sPFv6BBM3tVeLnshF03HMhJYCNc6kvSqBgTMmsEjb72RkZBAWIqiPUyF1JpEBv5XT9wKQ==} + cpu: [x64] + os: [freebsd] + + '@rollup/rollup-linux-arm-gnueabihf@4.34.6': + resolution: {integrity: sha512-88fSzjC5xeH9S2Vg3rPgXJULkHcLYMkh8faix8DX4h4TIAL65ekwuQMA/g2CXq8W+NJC43V6fUpYZNjaX3+IIg==} + cpu: [arm] + os: [linux] + + '@rollup/rollup-linux-arm-musleabihf@4.34.6': + resolution: {integrity: sha512-wM4ztnutBqYFyvNeR7Av+reWI/enK9tDOTKNF+6Kk2Q96k9bwhDDOlnCUNRPvromlVXo04riSliMBs/Z7RteEg==} + cpu: [arm] + os: [linux] + + '@rollup/rollup-linux-arm64-gnu@4.34.6': + resolution: {integrity: sha512-9RyprECbRa9zEjXLtvvshhw4CMrRa3K+0wcp3KME0zmBe1ILmvcVHnypZ/aIDXpRyfhSYSuN4EPdCCj5Du8FIA==} + cpu: [arm64] + os: [linux] + + '@rollup/rollup-linux-arm64-musl@4.34.6': + resolution: {integrity: sha512-qTmklhCTyaJSB05S+iSovfo++EwnIEZxHkzv5dep4qoszUMX5Ca4WM4zAVUMbfdviLgCSQOu5oU8YoGk1s6M9Q==} + cpu: [arm64] + os: [linux] + + '@rollup/rollup-linux-loongarch64-gnu@4.34.6': + resolution: {integrity: sha512-4Qmkaps9yqmpjY5pvpkfOerYgKNUGzQpFxV6rnS7c/JfYbDSU0y6WpbbredB5cCpLFGJEqYX40WUmxMkwhWCjw==} + cpu: [loong64] + os: [linux] + + '@rollup/rollup-linux-powerpc64le-gnu@4.34.6': + resolution: {integrity: sha512-Zsrtux3PuaxuBTX/zHdLaFmcofWGzaWW1scwLU3ZbW/X+hSsFbz9wDIp6XvnT7pzYRl9MezWqEqKy7ssmDEnuQ==} + cpu: [ppc64] + os: [linux] + + '@rollup/rollup-linux-riscv64-gnu@4.34.6': + resolution: {integrity: sha512-aK+Zp+CRM55iPrlyKiU3/zyhgzWBxLVrw2mwiQSYJRobCURb781+XstzvA8Gkjg/hbdQFuDw44aUOxVQFycrAg==} + cpu: [riscv64] + os: [linux] + + '@rollup/rollup-linux-s390x-gnu@4.34.6': + resolution: {integrity: sha512-WoKLVrY9ogmaYPXwTH326+ErlCIgMmsoRSx6bO+l68YgJnlOXhygDYSZe/qbUJCSiCiZAQ+tKm88NcWuUXqOzw==} + cpu: [s390x] + os: [linux] + + '@rollup/rollup-linux-x64-gnu@4.34.6': + resolution: {integrity: sha512-Sht4aFvmA4ToHd2vFzwMFaQCiYm2lDFho5rPcvPBT5pCdC+GwHG6CMch4GQfmWTQ1SwRKS0dhDYb54khSrjDWw==} + cpu: [x64] + os: [linux] + + '@rollup/rollup-linux-x64-musl@4.34.6': + resolution: {integrity: sha512-zmmpOQh8vXc2QITsnCiODCDGXFC8LMi64+/oPpPx5qz3pqv0s6x46ps4xoycfUiVZps5PFn1gksZzo4RGTKT+A==} + cpu: [x64] + os: [linux] + + '@rollup/rollup-win32-arm64-msvc@4.34.6': + resolution: {integrity: sha512-3/q1qUsO/tLqGBaD4uXsB6coVGB3usxw3qyeVb59aArCgedSF66MPdgRStUd7vbZOsko/CgVaY5fo2vkvPLWiA==} + cpu: [arm64] + os: [win32] + + '@rollup/rollup-win32-ia32-msvc@4.34.6': + resolution: {integrity: sha512-oLHxuyywc6efdKVTxvc0135zPrRdtYVjtVD5GUm55I3ODxhU/PwkQFD97z16Xzxa1Fz0AEe4W/2hzRtd+IfpOA==} + cpu: [ia32] + os: [win32] + + '@rollup/rollup-win32-x64-msvc@4.34.6': + resolution: {integrity: sha512-0PVwmgzZ8+TZ9oGBmdZoQVXflbvuwzN/HRclujpl4N/q3i+y0lqLw8n1bXA8ru3sApDjlmONaNAuYr38y1Kr9w==} + cpu: [x64] + os: [win32] + + '@testing-library/dom@10.4.0': + resolution: {integrity: sha512-pemlzrSESWbdAloYml3bAJMEfNh1Z7EduzqPKprCH5S341frlpYnUEW0H72dLxa6IsYr+mPno20GiSm+h9dEdQ==} + engines: {node: '>=18'} + + '@testing-library/user-event@14.6.1': + resolution: {integrity: sha512-vq7fv0rnt+QTXgPxr5Hjc210p6YKq2kmdziLgnsZGgLJ9e6VAShx1pACLuRjd/AS/sr7phAR58OIIpf0LlmQNw==} + engines: {node: '>=12', npm: '>=6'} + peerDependencies: + '@testing-library/dom': '>=7.21.4' + + '@types/aria-query@5.0.4': + resolution: {integrity: sha512-rfT93uj5s0PRL7EzccGMs3brplhcrghnDoV26NqKhCAS1hVo+WdNsPvE/yb6ilfr5hi2MEk6d5EWJTKdxg8jVw==} + + '@types/cookie@0.6.0': + resolution: {integrity: sha512-4Kh9a6B2bQciAhf7FSuMRRkUWecJgJu9nPnx3yzpsfXX/c50REIqpHY4C82bXP90qrLtXtkDxTZosYO3UpOwlA==} + + '@types/estree@1.0.6': + resolution: {integrity: sha512-AYnb1nQyY49te+VRAVgmzfcgjYS91mY5P0TKUDCLEM+gNnA+3T6rWITXRLYCpahpqSQbN5cE+gHpnPyXjHWxcw==} + + '@types/statuses@2.0.5': + resolution: {integrity: sha512-jmIUGWrAiwu3dZpxntxieC+1n/5c3mjrImkmOSQ2NC5uP6cYO4aAZDdSmRcI5C1oiTmqlZGHC+/NmJrKogbP5A==} + + '@types/tough-cookie@4.0.5': + resolution: {integrity: sha512-/Ad8+nIOV7Rl++6f1BdKxFSMgmoqEoYbHRpPcx3JEfv8VRsQe9Z4mCXeJBzxs7mbHY/XOZZuXlRNfhpVPbs6ZA==} + + '@vitest/browser@3.0.9': + resolution: {integrity: sha512-P9dcCeMkA3/oYGfUzRFZJLZxiOpApztxhPsQDUiZzAzLoZonWhse2+vPB0xEBP8Q0lX1WCEEmtY7HzBRi4oYBA==} + peerDependencies: + playwright: '*' + safaridriver: '*' + vitest: 3.0.9 + webdriverio: ^7.0.0 || ^8.0.0 || ^9.0.0 + peerDependenciesMeta: + playwright: + optional: true + safaridriver: + optional: true + webdriverio: + optional: true + + '@vitest/coverage-v8@3.0.9': + resolution: {integrity: sha512-15OACZcBtQ34keIEn19JYTVuMFTlFrClclwWjHo/IRPg/8ELpkgNTl0o7WLP9WO9XGH6+tip9CPYtEOrIDJvBA==} + peerDependencies: + '@vitest/browser': 3.0.9 + vitest: 3.0.9 + peerDependenciesMeta: + '@vitest/browser': + optional: true + + '@vitest/expect@3.0.9': + resolution: {integrity: sha512-5eCqRItYgIML7NNVgJj6TVCmdzE7ZVgJhruW0ziSQV4V7PvLkDL1bBkBdcTs/VuIz0IxPb5da1IDSqc1TR9eig==} + + '@vitest/mocker@3.0.9': + resolution: {integrity: sha512-ryERPIBOnvevAkTq+L1lD+DTFBRcjueL9lOUfXsLfwP92h4e+Heb+PjiqS3/OURWPtywfafK0kj++yDFjWUmrA==} + peerDependencies: + msw: ^2.4.9 + vite: ^5.0.0 || ^6.0.0 + peerDependenciesMeta: + msw: + optional: true + vite: + optional: true + + '@vitest/pretty-format@3.0.9': + resolution: {integrity: sha512-OW9F8t2J3AwFEwENg3yMyKWweF7oRJlMyHOMIhO5F3n0+cgQAJZBjNgrF8dLwFTEXl5jUqBLXd9QyyKv8zEcmA==} + + '@vitest/runner@3.0.9': + resolution: {integrity: sha512-NX9oUXgF9HPfJSwl8tUZCMP1oGx2+Sf+ru6d05QjzQz4OwWg0psEzwY6VexP2tTHWdOkhKHUIZH+fS6nA7jfOw==} + + '@vitest/snapshot@3.0.9': + resolution: {integrity: sha512-AiLUiuZ0FuA+/8i19mTYd+re5jqjEc2jZbgJ2up0VY0Ddyyxg/uUtBDpIFAy4uzKaQxOW8gMgBdAJJ2ydhu39A==} + + '@vitest/spy@3.0.9': + resolution: {integrity: sha512-/CcK2UDl0aQ2wtkp3YVWldrpLRNCfVcIOFGlVGKO4R5eajsH393Z1yiXLVQ7vWsj26JOEjeZI0x5sm5P4OGUNQ==} + + '@vitest/utils@3.0.9': + resolution: {integrity: sha512-ilHM5fHhZ89MCp5aAaM9uhfl1c2JdxVxl3McqsdVyVNN6JffnEen8UMCdRTzOhGXNQGo5GNL9QugHrz727Wnng==} + + ansi-escapes@4.3.2: + resolution: {integrity: sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==} + engines: {node: '>=8'} + + ansi-regex@5.0.1: + resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==} + engines: {node: '>=8'} + + ansi-regex@6.1.0: + resolution: {integrity: sha512-7HSX4QQb4CspciLpVFwyRe79O3xsIZDDLER21kERQ71oaPodF8jL725AgJMFAYbooIqolJoRLuM81SpeUkpkvA==} + engines: {node: '>=12'} + + ansi-styles@4.3.0: + resolution: {integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==} + engines: {node: '>=8'} + + ansi-styles@5.2.0: + resolution: {integrity: sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==} + engines: {node: '>=10'} + + ansi-styles@6.2.1: + resolution: {integrity: sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==} + engines: {node: '>=12'} + + aria-query@5.3.0: + resolution: {integrity: sha512-b0P0sZPKtyu8HkeRAfCq0IfURZK+SuwMjY1UXGBU27wpAiTwQAIlq56IbIO+ytk/JjS1fMR14ee5WBBfKi5J6A==} + + assertion-error@2.0.1: + resolution: {integrity: sha512-Izi8RQcffqCeNVgFigKli1ssklIbpHnCYc6AknXGYoB6grJqyeby7jv12JUQgmTAnIDnbck1uxksT4dzN3PWBA==} + engines: {node: '>=12'} + + balanced-match@1.0.2: + resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==} + + birpc@0.2.19: + resolution: {integrity: sha512-5WeXXAvTmitV1RqJFppT5QtUiz2p1mRSYU000Jkft5ZUCLJIk4uQriYNO50HknxKwM6jd8utNc66K1qGIwwWBQ==} + + brace-expansion@2.0.1: + resolution: {integrity: sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==} + + cac@6.7.14: + resolution: {integrity: sha512-b6Ilus+c3RrdDk+JhLKUAQfzzgLEPy6wcXqS7f/xe1EETvsDP6GORG7SFuOs6cID5YkqchW/LXZbX5bc8j7ZcQ==} + engines: {node: '>=8'} + + chai@5.2.0: + resolution: {integrity: sha512-mCuXncKXk5iCLhfhwTc0izo0gtEmpz5CtG2y8GiOINBlMVS6v8TMRc5TaLWKS6692m9+dVVfzgeVxR5UxWHTYw==} + engines: {node: '>=12'} + + chalk@4.1.2: + resolution: {integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==} + engines: {node: '>=10'} + + check-error@2.1.1: + resolution: {integrity: sha512-OAlb+T7V4Op9OwdkjmguYRqncdlx5JiofwOAUkmTF+jNdHwzTaTs4sRAGpzLF3oOz5xAyDGrPgeIDFQmDOTiJw==} + engines: {node: '>= 16'} + + cli-width@4.1.0: + resolution: {integrity: sha512-ouuZd4/dm2Sw5Gmqy6bGyNNNe1qt9RpmxveLSO7KcgsTnU7RXfsw+/bukWGo1abgBiMAic068rclZsO4IWmmxQ==} + engines: {node: '>= 12'} + + cliui@8.0.1: + resolution: {integrity: sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==} + engines: {node: '>=12'} + + color-convert@2.0.1: + resolution: {integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==} + engines: {node: '>=7.0.0'} + + color-name@1.1.4: + resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==} + + cookie@0.7.2: + resolution: {integrity: sha512-yki5XnKuf750l50uGTllt6kKILY4nQ1eNIQatoXEByZ5dWgnKqbnqmTrBE5B4N7lrMJKQ2ytWMiTO2o0v6Ew/w==} + engines: {node: '>= 0.6'} + + cross-spawn@7.0.6: + resolution: {integrity: sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==} + engines: {node: '>= 8'} + + debug@4.4.0: + resolution: {integrity: sha512-6WTZ/IxCY/T6BALoZHaE4ctp9xm+Z5kY/pzYaCHRFeyVhojxlrm+46y68HA6hr0TcwEssoxNiDEUJQjfPZ/RYA==} + engines: {node: '>=6.0'} + peerDependencies: + supports-color: '*' + peerDependenciesMeta: + supports-color: + optional: true + + deep-eql@5.0.2: + resolution: {integrity: sha512-h5k/5U50IJJFpzfL6nO9jaaumfjO/f2NjK/oYB2Djzm4p9L+3T9qWpZqZ2hAbLPuuYq9wrU08WQyBTL5GbPk5Q==} + engines: {node: '>=6'} + + dequal@2.0.3: + resolution: {integrity: sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA==} + engines: {node: '>=6'} + + dom-accessibility-api@0.5.16: + resolution: {integrity: sha512-X7BJ2yElsnOJ30pZF4uIIDfBEVgF4XEBxL9Bxhy6dnrm5hkzqmsWHGTiHqRiITNhMyFLyAiWndIJP7Z1NTteDg==} + + eastasianwidth@0.2.0: + resolution: {integrity: sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==} + + emoji-regex@8.0.0: + resolution: {integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==} + + emoji-regex@9.2.2: + resolution: {integrity: sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==} + + es-module-lexer@1.6.0: + resolution: {integrity: sha512-qqnD1yMU6tk/jnaMosogGySTZP8YtUgAffA9nMN+E/rjxcfRQ6IEk7IiozUjgxKoFHBGjTLnrHB/YC45r/59EQ==} + + esbuild@0.21.5: + resolution: {integrity: sha512-mg3OPMV4hXywwpoDxu3Qda5xCKQi+vCTZq8S9J/EpkhB2HzKXq4SNFZE3+NK93JYxc8VMSep+lOUSC/RVKaBqw==} + engines: {node: '>=12'} + hasBin: true + + escalade@3.2.0: + resolution: {integrity: sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==} + engines: {node: '>=6'} + + estree-walker@3.0.3: + resolution: {integrity: sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g==} + + expect-type@1.1.0: + resolution: {integrity: sha512-bFi65yM+xZgk+u/KRIpekdSYkTB5W1pEf0Lt8Q8Msh7b+eQ7LXVtIB1Bkm4fvclDEL1b2CZkMhv2mOeF8tMdkA==} + engines: {node: '>=12.0.0'} + + foreground-child@3.3.0: + resolution: {integrity: sha512-Ld2g8rrAyMYFXBhEqMz8ZAHBi4J4uS1i/CxGMDnjyFWddMXLVcDp051DZfu+t7+ab7Wv6SMqpWmyFIj5UbfFvg==} + engines: {node: '>=14'} + + fsevents@2.3.2: + resolution: {integrity: sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==} + engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0} + os: [darwin] + + fsevents@2.3.3: + resolution: {integrity: sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==} + engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0} + os: [darwin] + + get-caller-file@2.0.5: + resolution: {integrity: sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==} + engines: {node: 6.* || 8.* || >= 10.*} + + glob@10.4.5: + resolution: {integrity: sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg==} + hasBin: true + + graphql@16.10.0: + resolution: {integrity: sha512-AjqGKbDGUFRKIRCP9tCKiIGHyriz2oHEbPIbEtcSLSs4YjReZOIPQQWek4+6hjw62H9QShXHyaGivGiYVLeYFQ==} + engines: {node: ^12.22.0 || ^14.16.0 || ^16.0.0 || >=17.0.0} + + has-flag@4.0.0: + resolution: {integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==} + engines: {node: '>=8'} + + headers-polyfill@4.0.3: + resolution: {integrity: sha512-IScLbePpkvO846sIwOtOTDjutRMWdXdJmXdMvk6gCBHxFO8d+QKOQedyZSxFTTFYRSmlgSTDtXqqq4pcenBXLQ==} + + html-escaper@2.0.2: + resolution: {integrity: sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==} + + is-fullwidth-code-point@3.0.0: + resolution: {integrity: sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==} + engines: {node: '>=8'} + + is-node-process@1.2.0: + resolution: {integrity: sha512-Vg4o6/fqPxIjtxgUH5QLJhwZ7gW5diGCVlXpuUfELC62CuxM1iHcRe51f2W1FDy04Ai4KJkagKjx3XaqyfRKXw==} + + isexe@2.0.0: + resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==} + + istanbul-lib-coverage@3.2.2: + resolution: {integrity: sha512-O8dpsF+r0WV/8MNRKfnmrtCWhuKjxrq2w+jpzBL5UZKTi2LeVWnWOmWRxFlesJONmc+wLAGvKQZEOanko0LFTg==} + engines: {node: '>=8'} + + istanbul-lib-report@3.0.1: + resolution: {integrity: sha512-GCfE1mtsHGOELCU8e/Z7YWzpmybrx/+dSTfLrvY8qRmaY6zXTKWn6WQIjaAFw069icm6GVMNkgu0NzI4iPZUNw==} + engines: {node: '>=10'} + + istanbul-lib-source-maps@5.0.6: + resolution: {integrity: sha512-yg2d+Em4KizZC5niWhQaIomgf5WlL4vOOjZ5xGCmF8SnPE/mDWWXgvRExdcpCgh9lLRRa1/fSYp2ymmbJ1pI+A==} + engines: {node: '>=10'} + + istanbul-reports@3.1.7: + resolution: {integrity: sha512-BewmUXImeuRk2YY0PVbxgKAysvhRPUQE0h5QRM++nVWyubKGV0l8qQ5op8+B2DOmwSe63Jivj0BjkPQVf8fP5g==} + engines: {node: '>=8'} + + jackspeak@3.4.3: + resolution: {integrity: sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw==} + + js-tokens@4.0.0: + resolution: {integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==} + + loupe@3.1.3: + resolution: {integrity: sha512-kkIp7XSkP78ZxJEsSxW3712C6teJVoeHHwgo9zJ380de7IYyJ2ISlxojcH2pC5OFLewESmnRi/+XCDIEEVyoug==} + + lru-cache@10.4.3: + resolution: {integrity: sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==} + + lz-string@1.5.0: + resolution: {integrity: sha512-h5bgJWpxJNswbU7qCrV0tIKQCaS3blPDrqKWx+QxzuzL1zGUzij9XCWLrSLsJPu5t+eWA/ycetzYAO5IOMcWAQ==} + hasBin: true + + magic-string@0.30.17: + resolution: {integrity: sha512-sNPKHvyjVf7gyjwS4xGTaW/mCnF8wnjtifKBEhxfZ7E/S8tQ0rssrwGNn6q8JH/ohItJfSQp9mBtQYuTlH5QnA==} + + magicast@0.3.5: + resolution: {integrity: sha512-L0WhttDl+2BOsybvEOLK7fW3UA0OQ0IQ2d6Zl2x/a6vVRs3bAY0ECOSHHeL5jD+SbOpOCUEi0y1DgHEn9Qn1AQ==} + + make-dir@4.0.0: + resolution: {integrity: sha512-hXdUTZYIVOt1Ex//jAQi+wTZZpUpwBj/0QsOzqegb3rGMMeJiSEu5xLHnYfBrRV4RH2+OCSOO95Is/7x1WJ4bw==} + engines: {node: '>=10'} + + minimatch@9.0.5: + resolution: {integrity: sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==} + engines: {node: '>=16 || 14 >=14.17'} + + minipass@7.1.2: + resolution: {integrity: sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==} + engines: {node: '>=16 || 14 >=14.17'} + + mrmime@2.0.0: + resolution: {integrity: sha512-eu38+hdgojoyq63s+yTpN4XMBdt5l8HhMhc4VKLO9KM5caLIBvUm4thi7fFaxyTmCKeNnXZ5pAlBwCUnhA09uw==} + engines: {node: '>=10'} + + ms@2.1.3: + resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==} + + msw@2.7.3: + resolution: {integrity: sha512-+mycXv8l2fEAjFZ5sjrtjJDmm2ceKGjrNbBr1durRg6VkU9fNUE/gsmQ51hWbHqs+l35W1iM+ZsmOD9Fd6lspw==} + engines: {node: '>=18'} + hasBin: true + peerDependencies: + typescript: '>= 4.8.x' + peerDependenciesMeta: + typescript: + optional: true + + mute-stream@2.0.0: + resolution: {integrity: sha512-WWdIxpyjEn+FhQJQQv9aQAYlHoNVdzIzUySNV1gHUPDSdZJ3yZn7pAAbQcV7B56Mvu881q9FZV+0Vx2xC44VWA==} + engines: {node: ^18.17.0 || >=20.5.0} + + nanoid@3.3.8: + resolution: {integrity: sha512-WNLf5Sd8oZxOm+TzppcYk8gVOgP+l58xNy58D0nbUnOxOWRWvlcCV4kUF7ltmI6PsrLl/BgKEyS4mqsGChFN0w==} + engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} + hasBin: true + + outvariant@1.4.3: + resolution: {integrity: sha512-+Sl2UErvtsoajRDKCE5/dBz4DIvHXQQnAxtQTF04OJxY0+DyZXSo5P5Bb7XYWOh81syohlYL24hbDwxedPUJCA==} + + package-json-from-dist@1.0.1: + resolution: {integrity: sha512-UEZIS3/by4OC8vL3P2dTXRETpebLI2NiI5vIrjaD/5UtrkFX/tNbwjTSRAGC/+7CAo2pIcBaRgWmcBBHcsaCIw==} + + path-key@3.1.1: + resolution: {integrity: sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==} + engines: {node: '>=8'} + + path-scurry@1.11.1: + resolution: {integrity: sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA==} + engines: {node: '>=16 || 14 >=14.18'} + + path-to-regexp@6.3.0: + resolution: {integrity: sha512-Yhpw4T9C6hPpgPeA28us07OJeqZ5EzQTkbfwuhsUg0c237RomFoETJgmp2sa3F/41gfLE6G5cqcYwznmeEeOlQ==} + + pathe@2.0.3: + resolution: {integrity: sha512-WUjGcAqP1gQacoQe+OBJsFA7Ld4DyXuUIjZ5cc75cLHvJ7dtNsTugphxIADwspS+AraAUePCKrSVtPLFj/F88w==} + + pathval@2.0.0: + resolution: {integrity: sha512-vE7JKRyES09KiunauX7nd2Q9/L7lhok4smP9RZTDeD4MVs72Dp2qNFVz39Nz5a0FVEW0BJR6C0DYrq6unoziZA==} + engines: {node: '>= 14.16'} + + picocolors@1.1.1: + resolution: {integrity: sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==} + + playwright-core@1.51.1: + resolution: {integrity: sha512-/crRMj8+j/Nq5s8QcvegseuyeZPxpQCZb6HNk3Sos3BlZyAknRjoyJPFWkpNn8v0+P3WiwqFF8P+zQo4eqiNuw==} + engines: {node: '>=18'} + hasBin: true + + playwright@1.51.1: + resolution: {integrity: sha512-kkx+MB2KQRkyxjYPc3a0wLZZoDczmppyGJIvQ43l+aZihkaVvmu/21kiyaHeHjiFxjxNNFnUncKmcGIyOojsaw==} + engines: {node: '>=18'} + hasBin: true + + postcss@8.5.2: + resolution: {integrity: sha512-MjOadfU3Ys9KYoX0AdkBlFEF1Vx37uCCeN4ZHnmwm9FfpbsGWMZeBLMmmpY+6Ocqod7mkdZ0DT31OlbsFrLlkA==} + engines: {node: ^10 || ^12 || >=14} + + pretty-format@27.5.1: + resolution: {integrity: sha512-Qb1gy5OrP5+zDf2Bvnzdl3jsTf1qXVMazbvCoKhtKqVs4/YK4ozX4gKQJJVyNe+cajNPn0KoC0MC3FUmaHWEmQ==} + engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} + + psl@1.15.0: + resolution: {integrity: sha512-JZd3gMVBAVQkSs6HdNZo9Sdo0LNcQeMNP3CozBJb3JYC/QUYZTnKxP+f8oWRX4rHP5EurWxqAHTSwUCjlNKa1w==} + + punycode@2.3.1: + resolution: {integrity: sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==} + engines: {node: '>=6'} + + querystringify@2.2.0: + resolution: {integrity: sha512-FIqgj2EUvTa7R50u0rGsyTftzjYmv/a3hO345bZNrqabNqjtgiDMgmo4mkUjd+nzU5oF3dClKqFIPUKybUyqoQ==} + + react-is@17.0.2: + resolution: {integrity: sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w==} + + regenerator-runtime@0.14.1: + resolution: {integrity: sha512-dYnhHh0nJoMfnkZs6GmmhFknAGRrLznOu5nc9ML+EJxGvrx6H7teuevqVqCuPcPK//3eDrrjQhehXVx9cnkGdw==} + + require-directory@2.1.1: + resolution: {integrity: sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==} + engines: {node: '>=0.10.0'} + + requires-port@1.0.0: + resolution: {integrity: sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ==} + + rollup@4.34.6: + resolution: {integrity: sha512-wc2cBWqJgkU3Iz5oztRkQbfVkbxoz5EhnCGOrnJvnLnQ7O0WhQUYyv18qQI79O8L7DdHrrlJNeCHd4VGpnaXKQ==} + engines: {node: '>=18.0.0', npm: '>=8.0.0'} + hasBin: true + + semver@7.7.1: + resolution: {integrity: sha512-hlq8tAfn0m/61p4BVRcPzIGr6LKiMwo4VM6dGi6pt4qcRkmNzTcWq6eCEjEh+qXjkMDvPlOFFSGwQjoEa6gyMA==} + engines: {node: '>=10'} + hasBin: true + + shebang-command@2.0.0: + resolution: {integrity: sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==} + engines: {node: '>=8'} + + shebang-regex@3.0.0: + resolution: {integrity: sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==} + engines: {node: '>=8'} + + siginfo@2.0.0: + resolution: {integrity: sha512-ybx0WO1/8bSBLEWXZvEd7gMW3Sn3JFlW3TvX1nREbDLRNQNaeNN8WK0meBwPdAaOI7TtRRRJn/Es1zhrrCHu7g==} + + signal-exit@4.1.0: + resolution: {integrity: sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==} + engines: {node: '>=14'} + + sirv@3.0.1: + resolution: {integrity: sha512-FoqMu0NCGBLCcAkS1qA+XJIQTR6/JHfQXl+uGteNCQ76T91DMUjPa9xfmeqMY3z80nLSg9yQmNjK0Px6RWsH/A==} + engines: {node: '>=18'} + + source-map-js@1.2.1: + resolution: {integrity: sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==} + engines: {node: '>=0.10.0'} + + stackback@0.0.2: + resolution: {integrity: sha512-1XMJE5fQo1jGH6Y/7ebnwPOBEkIEnT4QF32d5R1+VXdXveM0IBMJt8zfaxX1P3QhVwrYe+576+jkANtSS2mBbw==} + + statuses@2.0.1: + resolution: {integrity: sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==} + engines: {node: '>= 0.8'} + + std-env@3.8.0: + resolution: {integrity: sha512-Bc3YwwCB+OzldMxOXJIIvC6cPRWr/LxOp48CdQTOkPyk/t4JWWJbrilwBd7RJzKV8QW7tJkcgAmeuLLJugl5/w==} + + strict-event-emitter@0.5.1: + resolution: {integrity: sha512-vMgjE/GGEPEFnhFub6pa4FmJBRBVOLpIII2hvCZ8Kzb7K0hlHo7mQv6xYrBvCL2LtAIBwFUK8wvuJgTVSQ5MFQ==} + + string-width@4.2.3: + resolution: {integrity: sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==} + engines: {node: '>=8'} + + string-width@5.1.2: + resolution: {integrity: sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==} + engines: {node: '>=12'} + + strip-ansi@6.0.1: + resolution: {integrity: sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==} + engines: {node: '>=8'} + + strip-ansi@7.1.0: + resolution: {integrity: sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==} + engines: {node: '>=12'} + + supports-color@7.2.0: + resolution: {integrity: sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==} + engines: {node: '>=8'} + + test-exclude@7.0.1: + resolution: {integrity: sha512-pFYqmTw68LXVjeWJMST4+borgQP2AyMNbg1BpZh9LbyhUeNkeaPF9gzfPGUAnSMV3qPYdWUwDIjjCLiSDOl7vg==} + engines: {node: '>=18'} + + tinybench@2.9.0: + resolution: {integrity: sha512-0+DUvqWMValLmha6lr4kD8iAMK1HzV0/aKnCtWb9v9641TnP/MFb7Pc2bxoxQjTXAErryXVgUOfv2YqNllqGeg==} + + tinyexec@0.3.2: + resolution: {integrity: sha512-KQQR9yN7R5+OSwaK0XQoj22pwHoTlgYqmUscPYoknOoWCWfj/5/ABTMRi69FrKU5ffPVh5QcFikpWJI/P1ocHA==} + + tinypool@1.0.2: + resolution: {integrity: sha512-al6n+QEANGFOMf/dmUMsuS5/r9B06uwlyNjZZql/zv8J7ybHCgoihBNORZCY2mzUuAnomQa2JdhyHKzZxPCrFA==} + engines: {node: ^18.0.0 || >=20.0.0} + + tinyrainbow@2.0.0: + resolution: {integrity: sha512-op4nsTR47R6p0vMUUoYl/a+ljLFVtlfaXkLQmqfLR1qHma1h/ysYk4hEXZ880bf2CYgTskvTa/e196Vd5dDQXw==} + engines: {node: '>=14.0.0'} + + tinyspy@3.0.2: + resolution: {integrity: sha512-n1cw8k1k0x4pgA2+9XrOkFydTerNcJ1zWCO5Nn9scWHTD+5tp8dghT2x1uduQePZTZgd3Tupf+x9BxJjeJi77Q==} + engines: {node: '>=14.0.0'} + + totalist@3.0.1: + resolution: {integrity: sha512-sf4i37nQ2LBx4m3wB74y+ubopq6W/dIzXg0FDGjsYnZHVa1Da8FH853wlL2gtUhg+xJXjfk3kUZS3BRoQeoQBQ==} + engines: {node: '>=6'} + + tough-cookie@4.1.4: + resolution: {integrity: sha512-Loo5UUvLD9ScZ6jh8beX1T6sO1w2/MpCRpEP7V280GKMVUQ0Jzar2U3UJPsrdbziLEMMhu3Ujnq//rhiFuIeag==} + engines: {node: '>=6'} + + type-fest@0.21.3: + resolution: {integrity: sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==} + engines: {node: '>=10'} + + type-fest@4.34.1: + resolution: {integrity: sha512-6kSc32kT0rbwxD6QL1CYe8IqdzN/J/ILMrNK+HMQCKH3insCDRY/3ITb0vcBss0a3t72fzh2YSzj8ko1HgwT3g==} + engines: {node: '>=16'} + + universalify@0.2.0: + resolution: {integrity: sha512-CJ1QgKmNg3CwvAv/kOFmtnEN05f0D/cn9QntgNOQlQF9dgvVTHj3t+8JPdjqawCHk7V/KA+fbUqzZ9XWhcqPUg==} + engines: {node: '>= 4.0.0'} + + url-parse@1.5.10: + resolution: {integrity: sha512-WypcfiRhfeUP9vvF0j6rw0J3hrWrw6iZv3+22h6iRMJ/8z1Tj6XfLP4DsUix5MhMPnXpiHDoKyoZ/bdCkwBCiQ==} + + vite-node@3.0.9: + resolution: {integrity: sha512-w3Gdx7jDcuT9cNn9jExXgOyKmf5UOTb6WMHz8LGAm54eS1Elf5OuBhCxl6zJxGhEeIkgsE1WbHuoL0mj/UXqXg==} + engines: {node: ^18.0.0 || ^20.0.0 || >=22.0.0} + hasBin: true + + vite@5.4.14: + resolution: {integrity: sha512-EK5cY7Q1D8JNhSaPKVK4pwBFvaTmZxEnoKXLG/U9gmdDcihQGNzFlgIvaxezFR4glP1LsuiedwMBqCXH3wZccA==} + engines: {node: ^18.0.0 || >=20.0.0} + hasBin: true + peerDependencies: + '@types/node': ^18.0.0 || >=20.0.0 + less: '*' + lightningcss: ^1.21.0 + sass: '*' + sass-embedded: '*' + stylus: '*' + sugarss: '*' + terser: ^5.4.0 + peerDependenciesMeta: + '@types/node': + optional: true + less: + optional: true + lightningcss: + optional: true + sass: + optional: true + sass-embedded: + optional: true + stylus: + optional: true + sugarss: + optional: true + terser: + optional: true + + vitest@3.0.9: + resolution: {integrity: sha512-BbcFDqNyBlfSpATmTtXOAOj71RNKDDvjBM/uPfnxxVGrG+FSH2RQIwgeEngTaTkuU/h0ScFvf+tRcKfYXzBybQ==} + engines: {node: ^18.0.0 || ^20.0.0 || >=22.0.0} + hasBin: true + peerDependencies: + '@edge-runtime/vm': '*' + '@types/debug': ^4.1.12 + '@types/node': ^18.0.0 || ^20.0.0 || >=22.0.0 + '@vitest/browser': 3.0.9 + '@vitest/ui': 3.0.9 + 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 + + which@2.0.2: + resolution: {integrity: sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==} + engines: {node: '>= 8'} + hasBin: true + + why-is-node-running@2.3.0: + resolution: {integrity: sha512-hUrmaWBdVDcxvYqnyh09zunKzROWjbZTiNy8dBEjkS7ehEDQibXJ7XvlmtbwuTclUiIyN+CyXQD4Vmko8fNm8w==} + engines: {node: '>=8'} + hasBin: true + + wrap-ansi@6.2.0: + resolution: {integrity: sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==} + engines: {node: '>=8'} + + wrap-ansi@7.0.0: + resolution: {integrity: sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==} + engines: {node: '>=10'} + + wrap-ansi@8.1.0: + resolution: {integrity: sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==} + engines: {node: '>=12'} + + ws@8.18.1: + resolution: {integrity: sha512-RKW2aJZMXeMxVpnZ6bck+RswznaxmzdULiBr6KY7XkTnW8uvt0iT9H5DkHUChXrc+uurzwa0rVI16n/Xzjdz1w==} + engines: {node: '>=10.0.0'} + peerDependencies: + bufferutil: ^4.0.1 + utf-8-validate: '>=5.0.2' + peerDependenciesMeta: + bufferutil: + optional: true + utf-8-validate: + optional: true + + y18n@5.0.8: + resolution: {integrity: sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==} + engines: {node: '>=10'} + + yargs-parser@21.1.1: + resolution: {integrity: sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==} + engines: {node: '>=12'} + + yargs@17.7.2: + resolution: {integrity: sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==} + engines: {node: '>=12'} + + yoctocolors-cjs@2.1.2: + resolution: {integrity: sha512-cYVsTjKl8b+FrnidjibDWskAv7UKOfcwaVZdp/it9n1s9fU3IkgDbhdIRKCW4JDsAlECJY0ytoVPT3sK6kideA==} + engines: {node: '>=18'} + +snapshots: + + '@ampproject/remapping@2.3.0': + dependencies: + '@jridgewell/gen-mapping': 0.3.8 + '@jridgewell/trace-mapping': 0.3.25 + + '@babel/code-frame@7.26.2': + dependencies: + '@babel/helper-validator-identifier': 7.25.9 + js-tokens: 4.0.0 + picocolors: 1.1.1 + + '@babel/helper-string-parser@7.25.9': {} + + '@babel/helper-validator-identifier@7.25.9': {} + + '@babel/parser@7.26.8': + dependencies: + '@babel/types': 7.26.8 + + '@babel/runtime@7.26.7': + dependencies: + regenerator-runtime: 0.14.1 + + '@babel/types@7.26.8': + dependencies: + '@babel/helper-string-parser': 7.25.9 + '@babel/helper-validator-identifier': 7.25.9 + + '@bcoe/v8-coverage@1.0.2': {} + + '@bundled-es-modules/cookie@2.0.1': + dependencies: + cookie: 0.7.2 + + '@bundled-es-modules/statuses@1.0.1': + dependencies: + statuses: 2.0.1 + + '@bundled-es-modules/tough-cookie@0.1.6': + dependencies: + '@types/tough-cookie': 4.0.5 + tough-cookie: 4.1.4 + + '@esbuild/aix-ppc64@0.21.5': + optional: true + + '@esbuild/android-arm64@0.21.5': + optional: true + + '@esbuild/android-arm@0.21.5': + optional: true + + '@esbuild/android-x64@0.21.5': + optional: true + + '@esbuild/darwin-arm64@0.21.5': + optional: true + + '@esbuild/darwin-x64@0.21.5': + optional: true + + '@esbuild/freebsd-arm64@0.21.5': + optional: true + + '@esbuild/freebsd-x64@0.21.5': + optional: true + + '@esbuild/linux-arm64@0.21.5': + optional: true + + '@esbuild/linux-arm@0.21.5': + optional: true + + '@esbuild/linux-ia32@0.21.5': + optional: true + + '@esbuild/linux-loong64@0.21.5': + optional: true + + '@esbuild/linux-mips64el@0.21.5': + optional: true + + '@esbuild/linux-ppc64@0.21.5': + optional: true + + '@esbuild/linux-riscv64@0.21.5': + optional: true + + '@esbuild/linux-s390x@0.21.5': + optional: true + + '@esbuild/linux-x64@0.21.5': + optional: true + + '@esbuild/netbsd-x64@0.21.5': + optional: true + + '@esbuild/openbsd-x64@0.21.5': + optional: true + + '@esbuild/sunos-x64@0.21.5': + optional: true + + '@esbuild/win32-arm64@0.21.5': + optional: true + + '@esbuild/win32-ia32@0.21.5': + optional: true + + '@esbuild/win32-x64@0.21.5': + optional: true + + '@inquirer/confirm@5.1.5': + dependencies: + '@inquirer/core': 10.1.6 + '@inquirer/type': 3.0.4 + + '@inquirer/core@10.1.6': + dependencies: + '@inquirer/figures': 1.0.10 + '@inquirer/type': 3.0.4 + ansi-escapes: 4.3.2 + cli-width: 4.1.0 + mute-stream: 2.0.0 + signal-exit: 4.1.0 + wrap-ansi: 6.2.0 + yoctocolors-cjs: 2.1.2 + + '@inquirer/figures@1.0.10': {} + + '@inquirer/type@3.0.4': {} + + '@isaacs/cliui@8.0.2': + dependencies: + string-width: 5.1.2 + string-width-cjs: string-width@4.2.3 + strip-ansi: 7.1.0 + strip-ansi-cjs: strip-ansi@6.0.1 + wrap-ansi: 8.1.0 + wrap-ansi-cjs: wrap-ansi@7.0.0 + + '@istanbuljs/schema@0.1.3': {} + + '@jridgewell/gen-mapping@0.3.8': + dependencies: + '@jridgewell/set-array': 1.2.1 + '@jridgewell/sourcemap-codec': 1.5.0 + '@jridgewell/trace-mapping': 0.3.25 + + '@jridgewell/resolve-uri@3.1.2': {} + + '@jridgewell/set-array@1.2.1': {} + + '@jridgewell/sourcemap-codec@1.5.0': {} + + '@jridgewell/trace-mapping@0.3.25': + dependencies: + '@jridgewell/resolve-uri': 3.1.2 + '@jridgewell/sourcemap-codec': 1.5.0 + + '@mswjs/interceptors@0.37.6': + dependencies: + '@open-draft/deferred-promise': 2.2.0 + '@open-draft/logger': 0.3.0 + '@open-draft/until': 2.1.0 + is-node-process: 1.2.0 + outvariant: 1.4.3 + strict-event-emitter: 0.5.1 + + '@open-draft/deferred-promise@2.2.0': {} + + '@open-draft/logger@0.3.0': + dependencies: + is-node-process: 1.2.0 + outvariant: 1.4.3 + + '@open-draft/until@2.1.0': {} + + '@pkgjs/parseargs@0.11.0': + optional: true + + '@polka/url@1.0.0-next.28': {} + + '@rollup/rollup-android-arm-eabi@4.34.6': + optional: true + + '@rollup/rollup-android-arm64@4.34.6': + optional: true + + '@rollup/rollup-darwin-arm64@4.34.6': + optional: true + + '@rollup/rollup-darwin-x64@4.34.6': + optional: true + + '@rollup/rollup-freebsd-arm64@4.34.6': + optional: true + + '@rollup/rollup-freebsd-x64@4.34.6': + optional: true + + '@rollup/rollup-linux-arm-gnueabihf@4.34.6': + optional: true + + '@rollup/rollup-linux-arm-musleabihf@4.34.6': + optional: true + + '@rollup/rollup-linux-arm64-gnu@4.34.6': + optional: true + + '@rollup/rollup-linux-arm64-musl@4.34.6': + optional: true + + '@rollup/rollup-linux-loongarch64-gnu@4.34.6': + optional: true + + '@rollup/rollup-linux-powerpc64le-gnu@4.34.6': + optional: true + + '@rollup/rollup-linux-riscv64-gnu@4.34.6': + optional: true + + '@rollup/rollup-linux-s390x-gnu@4.34.6': + optional: true + + '@rollup/rollup-linux-x64-gnu@4.34.6': + optional: true + + '@rollup/rollup-linux-x64-musl@4.34.6': + optional: true + + '@rollup/rollup-win32-arm64-msvc@4.34.6': + optional: true + + '@rollup/rollup-win32-ia32-msvc@4.34.6': + optional: true + + '@rollup/rollup-win32-x64-msvc@4.34.6': + optional: true + + '@testing-library/dom@10.4.0': + dependencies: + '@babel/code-frame': 7.26.2 + '@babel/runtime': 7.26.7 + '@types/aria-query': 5.0.4 + aria-query: 5.3.0 + chalk: 4.1.2 + dom-accessibility-api: 0.5.16 + lz-string: 1.5.0 + pretty-format: 27.5.1 + + '@testing-library/user-event@14.6.1(@testing-library/dom@10.4.0)': + dependencies: + '@testing-library/dom': 10.4.0 + + '@types/aria-query@5.0.4': {} + + '@types/cookie@0.6.0': {} + + '@types/estree@1.0.6': {} + + '@types/statuses@2.0.5': {} + + '@types/tough-cookie@4.0.5': {} + + '@vitest/browser@3.0.9(playwright@1.51.1)(vite@5.4.14)(vitest@3.0.9)': + dependencies: + '@testing-library/dom': 10.4.0 + '@testing-library/user-event': 14.6.1(@testing-library/dom@10.4.0) + '@vitest/mocker': 3.0.9(msw@2.7.3)(vite@5.4.14) + '@vitest/utils': 3.0.9 + magic-string: 0.30.17 + msw: 2.7.3 + sirv: 3.0.1 + tinyrainbow: 2.0.0 + vitest: 3.0.9(@vitest/browser@3.0.9)(msw@2.7.3) + ws: 8.18.1 + optionalDependencies: + playwright: 1.51.1 + transitivePeerDependencies: + - '@types/node' + - bufferutil + - typescript + - utf-8-validate + - vite + + '@vitest/coverage-v8@3.0.9(@vitest/browser@3.0.9)(vitest@3.0.9)': + dependencies: + '@ampproject/remapping': 2.3.0 + '@bcoe/v8-coverage': 1.0.2 + debug: 4.4.0 + istanbul-lib-coverage: 3.2.2 + istanbul-lib-report: 3.0.1 + istanbul-lib-source-maps: 5.0.6 + istanbul-reports: 3.1.7 + magic-string: 0.30.17 + magicast: 0.3.5 + std-env: 3.8.0 + test-exclude: 7.0.1 + tinyrainbow: 2.0.0 + vitest: 3.0.9(@vitest/browser@3.0.9)(msw@2.7.3) + optionalDependencies: + '@vitest/browser': 3.0.9(playwright@1.51.1)(vite@5.4.14)(vitest@3.0.9) + transitivePeerDependencies: + - supports-color + + '@vitest/expect@3.0.9': + dependencies: + '@vitest/spy': 3.0.9 + '@vitest/utils': 3.0.9 + chai: 5.2.0 + tinyrainbow: 2.0.0 + + '@vitest/mocker@3.0.9(msw@2.7.3)(vite@5.4.14)': + dependencies: + '@vitest/spy': 3.0.9 + estree-walker: 3.0.3 + magic-string: 0.30.17 + optionalDependencies: + msw: 2.7.3 + vite: 5.4.14 + + '@vitest/pretty-format@3.0.9': + dependencies: + tinyrainbow: 2.0.0 + + '@vitest/runner@3.0.9': + dependencies: + '@vitest/utils': 3.0.9 + pathe: 2.0.3 + + '@vitest/snapshot@3.0.9': + dependencies: + '@vitest/pretty-format': 3.0.9 + magic-string: 0.30.17 + pathe: 2.0.3 + + '@vitest/spy@3.0.9': + dependencies: + tinyspy: 3.0.2 + + '@vitest/utils@3.0.9': + dependencies: + '@vitest/pretty-format': 3.0.9 + loupe: 3.1.3 + tinyrainbow: 2.0.0 + + ansi-escapes@4.3.2: + dependencies: + type-fest: 0.21.3 + + ansi-regex@5.0.1: {} + + ansi-regex@6.1.0: {} + + ansi-styles@4.3.0: + dependencies: + color-convert: 2.0.1 + + ansi-styles@5.2.0: {} + + ansi-styles@6.2.1: {} + + aria-query@5.3.0: + dependencies: + dequal: 2.0.3 + + assertion-error@2.0.1: {} + + balanced-match@1.0.2: {} + + birpc@0.2.19: {} + + brace-expansion@2.0.1: + dependencies: + balanced-match: 1.0.2 + + cac@6.7.14: {} + + chai@5.2.0: + dependencies: + assertion-error: 2.0.1 + check-error: 2.1.1 + deep-eql: 5.0.2 + loupe: 3.1.3 + pathval: 2.0.0 + + chalk@4.1.2: + dependencies: + ansi-styles: 4.3.0 + supports-color: 7.2.0 + + check-error@2.1.1: {} + + cli-width@4.1.0: {} + + cliui@8.0.1: + dependencies: + string-width: 4.2.3 + strip-ansi: 6.0.1 + wrap-ansi: 7.0.0 + + color-convert@2.0.1: + dependencies: + color-name: 1.1.4 + + color-name@1.1.4: {} + + cookie@0.7.2: {} + + cross-spawn@7.0.6: + dependencies: + path-key: 3.1.1 + shebang-command: 2.0.0 + which: 2.0.2 + + debug@4.4.0: + dependencies: + ms: 2.1.3 + + deep-eql@5.0.2: {} + + dequal@2.0.3: {} + + dom-accessibility-api@0.5.16: {} + + eastasianwidth@0.2.0: {} + + emoji-regex@8.0.0: {} + + emoji-regex@9.2.2: {} + + es-module-lexer@1.6.0: {} + + esbuild@0.21.5: + optionalDependencies: + '@esbuild/aix-ppc64': 0.21.5 + '@esbuild/android-arm': 0.21.5 + '@esbuild/android-arm64': 0.21.5 + '@esbuild/android-x64': 0.21.5 + '@esbuild/darwin-arm64': 0.21.5 + '@esbuild/darwin-x64': 0.21.5 + '@esbuild/freebsd-arm64': 0.21.5 + '@esbuild/freebsd-x64': 0.21.5 + '@esbuild/linux-arm': 0.21.5 + '@esbuild/linux-arm64': 0.21.5 + '@esbuild/linux-ia32': 0.21.5 + '@esbuild/linux-loong64': 0.21.5 + '@esbuild/linux-mips64el': 0.21.5 + '@esbuild/linux-ppc64': 0.21.5 + '@esbuild/linux-riscv64': 0.21.5 + '@esbuild/linux-s390x': 0.21.5 + '@esbuild/linux-x64': 0.21.5 + '@esbuild/netbsd-x64': 0.21.5 + '@esbuild/openbsd-x64': 0.21.5 + '@esbuild/sunos-x64': 0.21.5 + '@esbuild/win32-arm64': 0.21.5 + '@esbuild/win32-ia32': 0.21.5 + '@esbuild/win32-x64': 0.21.5 + + escalade@3.2.0: {} + + estree-walker@3.0.3: + dependencies: + '@types/estree': 1.0.6 + + expect-type@1.1.0: {} + + foreground-child@3.3.0: + dependencies: + cross-spawn: 7.0.6 + signal-exit: 4.1.0 + + fsevents@2.3.2: + optional: true + + fsevents@2.3.3: + optional: true + + get-caller-file@2.0.5: {} + + glob@10.4.5: + dependencies: + foreground-child: 3.3.0 + jackspeak: 3.4.3 + minimatch: 9.0.5 + minipass: 7.1.2 + package-json-from-dist: 1.0.1 + path-scurry: 1.11.1 + + graphql@16.10.0: {} + + has-flag@4.0.0: {} + + headers-polyfill@4.0.3: {} + + html-escaper@2.0.2: {} + + is-fullwidth-code-point@3.0.0: {} + + is-node-process@1.2.0: {} + + isexe@2.0.0: {} + + istanbul-lib-coverage@3.2.2: {} + + istanbul-lib-report@3.0.1: + dependencies: + istanbul-lib-coverage: 3.2.2 + make-dir: 4.0.0 + supports-color: 7.2.0 + + istanbul-lib-source-maps@5.0.6: + dependencies: + '@jridgewell/trace-mapping': 0.3.25 + debug: 4.4.0 + istanbul-lib-coverage: 3.2.2 + transitivePeerDependencies: + - supports-color + + istanbul-reports@3.1.7: + dependencies: + html-escaper: 2.0.2 + istanbul-lib-report: 3.0.1 + + jackspeak@3.4.3: + dependencies: + '@isaacs/cliui': 8.0.2 + optionalDependencies: + '@pkgjs/parseargs': 0.11.0 + + js-tokens@4.0.0: {} + + loupe@3.1.3: {} + + lru-cache@10.4.3: {} + + lz-string@1.5.0: {} + + magic-string@0.30.17: + dependencies: + '@jridgewell/sourcemap-codec': 1.5.0 + + magicast@0.3.5: + dependencies: + '@babel/parser': 7.26.8 + '@babel/types': 7.26.8 + source-map-js: 1.2.1 + + make-dir@4.0.0: + dependencies: + semver: 7.7.1 + + minimatch@9.0.5: + dependencies: + brace-expansion: 2.0.1 + + minipass@7.1.2: {} + + mrmime@2.0.0: {} + + ms@2.1.3: {} + + msw@2.7.3: + dependencies: + '@bundled-es-modules/cookie': 2.0.1 + '@bundled-es-modules/statuses': 1.0.1 + '@bundled-es-modules/tough-cookie': 0.1.6 + '@inquirer/confirm': 5.1.5 + '@mswjs/interceptors': 0.37.6 + '@open-draft/deferred-promise': 2.2.0 + '@open-draft/until': 2.1.0 + '@types/cookie': 0.6.0 + '@types/statuses': 2.0.5 + graphql: 16.10.0 + headers-polyfill: 4.0.3 + is-node-process: 1.2.0 + outvariant: 1.4.3 + path-to-regexp: 6.3.0 + picocolors: 1.1.1 + strict-event-emitter: 0.5.1 + type-fest: 4.34.1 + yargs: 17.7.2 + transitivePeerDependencies: + - '@types/node' + + mute-stream@2.0.0: {} + + nanoid@3.3.8: {} + + outvariant@1.4.3: {} + + package-json-from-dist@1.0.1: {} + + path-key@3.1.1: {} + + path-scurry@1.11.1: + dependencies: + lru-cache: 10.4.3 + minipass: 7.1.2 + + path-to-regexp@6.3.0: {} + + pathe@2.0.3: {} + + pathval@2.0.0: {} + + picocolors@1.1.1: {} + + playwright-core@1.51.1: {} + + playwright@1.51.1: + dependencies: + playwright-core: 1.51.1 + optionalDependencies: + fsevents: 2.3.2 + + postcss@8.5.2: + dependencies: + nanoid: 3.3.8 + picocolors: 1.1.1 + source-map-js: 1.2.1 + + pretty-format@27.5.1: + dependencies: + ansi-regex: 5.0.1 + ansi-styles: 5.2.0 + react-is: 17.0.2 + + psl@1.15.0: + dependencies: + punycode: 2.3.1 + + punycode@2.3.1: {} + + querystringify@2.2.0: {} + + react-is@17.0.2: {} + + regenerator-runtime@0.14.1: {} + + require-directory@2.1.1: {} + + requires-port@1.0.0: {} + + rollup@4.34.6: + dependencies: + '@types/estree': 1.0.6 + optionalDependencies: + '@rollup/rollup-android-arm-eabi': 4.34.6 + '@rollup/rollup-android-arm64': 4.34.6 + '@rollup/rollup-darwin-arm64': 4.34.6 + '@rollup/rollup-darwin-x64': 4.34.6 + '@rollup/rollup-freebsd-arm64': 4.34.6 + '@rollup/rollup-freebsd-x64': 4.34.6 + '@rollup/rollup-linux-arm-gnueabihf': 4.34.6 + '@rollup/rollup-linux-arm-musleabihf': 4.34.6 + '@rollup/rollup-linux-arm64-gnu': 4.34.6 + '@rollup/rollup-linux-arm64-musl': 4.34.6 + '@rollup/rollup-linux-loongarch64-gnu': 4.34.6 + '@rollup/rollup-linux-powerpc64le-gnu': 4.34.6 + '@rollup/rollup-linux-riscv64-gnu': 4.34.6 + '@rollup/rollup-linux-s390x-gnu': 4.34.6 + '@rollup/rollup-linux-x64-gnu': 4.34.6 + '@rollup/rollup-linux-x64-musl': 4.34.6 + '@rollup/rollup-win32-arm64-msvc': 4.34.6 + '@rollup/rollup-win32-ia32-msvc': 4.34.6 + '@rollup/rollup-win32-x64-msvc': 4.34.6 + fsevents: 2.3.3 + + semver@7.7.1: {} + + shebang-command@2.0.0: + dependencies: + shebang-regex: 3.0.0 + + shebang-regex@3.0.0: {} + + siginfo@2.0.0: {} + + signal-exit@4.1.0: {} + + sirv@3.0.1: + dependencies: + '@polka/url': 1.0.0-next.28 + mrmime: 2.0.0 + totalist: 3.0.1 + + source-map-js@1.2.1: {} + + stackback@0.0.2: {} + + statuses@2.0.1: {} + + std-env@3.8.0: {} + + strict-event-emitter@0.5.1: {} + + string-width@4.2.3: + dependencies: + emoji-regex: 8.0.0 + is-fullwidth-code-point: 3.0.0 + strip-ansi: 6.0.1 + + string-width@5.1.2: + dependencies: + eastasianwidth: 0.2.0 + emoji-regex: 9.2.2 + strip-ansi: 7.1.0 + + strip-ansi@6.0.1: + dependencies: + ansi-regex: 5.0.1 + + strip-ansi@7.1.0: + dependencies: + ansi-regex: 6.1.0 + + supports-color@7.2.0: + dependencies: + has-flag: 4.0.0 + + test-exclude@7.0.1: + dependencies: + '@istanbuljs/schema': 0.1.3 + glob: 10.4.5 + minimatch: 9.0.5 + + tinybench@2.9.0: {} + + tinyexec@0.3.2: {} + + tinypool@1.0.2: {} + + tinyrainbow@2.0.0: {} + + tinyspy@3.0.2: {} + + totalist@3.0.1: {} + + tough-cookie@4.1.4: + dependencies: + psl: 1.15.0 + punycode: 2.3.1 + universalify: 0.2.0 + url-parse: 1.5.10 + + type-fest@0.21.3: {} + + type-fest@4.34.1: {} + + universalify@0.2.0: {} + + url-parse@1.5.10: + dependencies: + querystringify: 2.2.0 + requires-port: 1.0.0 + + vite-node@3.0.9: + dependencies: + cac: 6.7.14 + debug: 4.4.0 + es-module-lexer: 1.6.0 + pathe: 2.0.3 + vite: 5.4.14 + transitivePeerDependencies: + - '@types/node' + - less + - lightningcss + - sass + - sass-embedded + - stylus + - sugarss + - supports-color + - terser + + vite@5.4.14: + dependencies: + esbuild: 0.21.5 + postcss: 8.5.2 + rollup: 4.34.6 + optionalDependencies: + fsevents: 2.3.3 + + vitest@3.0.9(@vitest/browser@3.0.9)(msw@2.7.3): + dependencies: + '@vitest/expect': 3.0.9 + '@vitest/mocker': 3.0.9(msw@2.7.3)(vite@5.4.14) + '@vitest/pretty-format': 3.0.9 + '@vitest/runner': 3.0.9 + '@vitest/snapshot': 3.0.9 + '@vitest/spy': 3.0.9 + '@vitest/utils': 3.0.9 + chai: 5.2.0 + debug: 4.4.0 + expect-type: 1.1.0 + magic-string: 0.30.17 + pathe: 2.0.3 + std-env: 3.8.0 + tinybench: 2.9.0 + tinyexec: 0.3.2 + tinypool: 1.0.2 + tinyrainbow: 2.0.0 + vite: 5.4.14 + vite-node: 3.0.9 + why-is-node-running: 2.3.0 + optionalDependencies: + '@vitest/browser': 3.0.9(playwright@1.51.1)(vite@5.4.14)(vitest@3.0.9) + transitivePeerDependencies: + - less + - lightningcss + - msw + - sass + - sass-embedded + - stylus + - sugarss + - supports-color + - terser + + which@2.0.2: + dependencies: + isexe: 2.0.0 + + why-is-node-running@2.3.0: + dependencies: + siginfo: 2.0.0 + stackback: 0.0.2 + + wrap-ansi@6.2.0: + dependencies: + ansi-styles: 4.3.0 + string-width: 4.2.3 + strip-ansi: 6.0.1 + + wrap-ansi@7.0.0: + dependencies: + ansi-styles: 4.3.0 + string-width: 4.2.3 + strip-ansi: 6.0.1 + + wrap-ansi@8.1.0: + dependencies: + ansi-styles: 6.2.1 + string-width: 5.1.2 + strip-ansi: 7.1.0 + + ws@8.18.1: {} + + y18n@5.0.8: {} + + yargs-parser@21.1.1: {} + + yargs@17.7.2: + dependencies: + cliui: 8.0.1 + escalade: 3.2.0 + get-caller-file: 2.0.5 + require-directory: 2.1.1 + string-width: 4.2.3 + y18n: 5.0.8 + yargs-parser: 21.1.1 + + yoctocolors-cjs@2.1.2: {} diff --git a/samples/browser-multiple/src/add.ts b/samples/browser-multiple/src/add.ts new file mode 100644 index 00000000..b8848d78 --- /dev/null +++ b/samples/browser-multiple/src/add.ts @@ -0,0 +1,7 @@ +export function add(a: number, b: number) { + return a + b +} + +export function sum(from: number, to: number) { + return (from + to) * (to - from + 1) / 2 +} diff --git a/samples/browser-multiple/src/should_included_test.ts b/samples/browser-multiple/src/should_included_test.ts new file mode 100644 index 00000000..eb51c768 --- /dev/null +++ b/samples/browser-multiple/src/should_included_test.ts @@ -0,0 +1,5 @@ +import { describe, it } from 'vitest' + +describe('should included', () => { + it('is included because of workspace plugin setting', () => {}) +}) diff --git a/samples/browser-multiple/test/.gitignore b/samples/browser-multiple/test/.gitignore new file mode 100644 index 00000000..b05c2dfa --- /dev/null +++ b/samples/browser-multiple/test/.gitignore @@ -0,0 +1 @@ +__snapshots__ diff --git a/samples/browser-multiple/test/__screenshots__/each.test.ts/testing-all-fail--1----0-1.png b/samples/browser-multiple/test/__screenshots__/each.test.ts/testing-all-fail--1----0-1.png new file mode 100644 index 0000000000000000000000000000000000000000..f88c55c1cad7d3de8229e8a42a99ad5e0bc9e037 GIT binary patch literal 3012 zcmeAS@N?(olHy`uVBq!ia0y~yV4TOmz}&#W1QcnFZJGt77>k44ofy`glX=O&z+LC* z;uumf=k1k)oD2#A2MkL8&pofovQS0%%T-%r?gdZ(@G(@Jzty0S&D^wxmt&Ke!iiDN zXc&y9gVDS&S{{s+iKF$xXmvQ+Bp7WLjW!L*YaZ)u@!|YCPt|%AuvyOF>FVdQ&MBb@ E0IgVhRsaA1 literal 0 HcmV?d00001 diff --git a/samples/browser-multiple/test/__screenshots__/each.test.ts/testing-all-fail--2----0-1.png b/samples/browser-multiple/test/__screenshots__/each.test.ts/testing-all-fail--2----0-1.png new file mode 100644 index 0000000000000000000000000000000000000000..f88c55c1cad7d3de8229e8a42a99ad5e0bc9e037 GIT binary patch literal 3012 zcmeAS@N?(olHy`uVBq!ia0y~yV4TOmz}&#W1QcnFZJGt77>k44ofy`glX=O&z+LC* z;uumf=k1k)oD2#A2MkL8&pofovQS0%%T-%r?gdZ(@G(@Jzty0S&D^wxmt&Ke!iiDN zXc&y9gVDS&S{{s+iKF$xXmvQ+Bp7WLjW!L*YaZ)u@!|YCPt|%AuvyOF>FVdQ&MBb@ E0IgVhRsaA1 literal 0 HcmV?d00001 diff --git a/samples/browser-multiple/test/__screenshots__/each.test.ts/testing-all-fail--3----0-1.png b/samples/browser-multiple/test/__screenshots__/each.test.ts/testing-all-fail--3----0-1.png new file mode 100644 index 0000000000000000000000000000000000000000..f88c55c1cad7d3de8229e8a42a99ad5e0bc9e037 GIT binary patch literal 3012 zcmeAS@N?(olHy`uVBq!ia0y~yV4TOmz}&#W1QcnFZJGt77>k44ofy`glX=O&z+LC* z;uumf=k1k)oD2#A2MkL8&pofovQS0%%T-%r?gdZ(@G(@Jzty0S&D^wxmt&Ke!iiDN zXc&y9gVDS&S{{s+iKF$xXmvQ+Bp7WLjW!L*YaZ)u@!|YCPt|%AuvyOF>FVdQ&MBb@ E0IgVhRsaA1 literal 0 HcmV?d00001 diff --git a/samples/browser-multiple/test/__screenshots__/each.test.ts/testing-first-fail--3----1-1.png b/samples/browser-multiple/test/__screenshots__/each.test.ts/testing-first-fail--3----1-1.png new file mode 100644 index 0000000000000000000000000000000000000000..f88c55c1cad7d3de8229e8a42a99ad5e0bc9e037 GIT binary patch literal 3012 zcmeAS@N?(olHy`uVBq!ia0y~yV4TOmz}&#W1QcnFZJGt77>k44ofy`glX=O&z+LC* z;uumf=k1k)oD2#A2MkL8&pofovQS0%%T-%r?gdZ(@G(@Jzty0S&D^wxmt&Ke!iiDN zXc&y9gVDS&S{{s+iKF$xXmvQ+Bp7WLjW!L*YaZ)u@!|YCPt|%AuvyOF>FVdQ&MBb@ E0IgVhRsaA1 literal 0 HcmV?d00001 diff --git a/samples/browser-multiple/test/__screenshots__/each.test.ts/testing-first-pass--2----1-1.png b/samples/browser-multiple/test/__screenshots__/each.test.ts/testing-first-pass--2----1-1.png new file mode 100644 index 0000000000000000000000000000000000000000..f88c55c1cad7d3de8229e8a42a99ad5e0bc9e037 GIT binary patch literal 3012 zcmeAS@N?(olHy`uVBq!ia0y~yV4TOmz}&#W1QcnFZJGt77>k44ofy`glX=O&z+LC* z;uumf=k1k)oD2#A2MkL8&pofovQS0%%T-%r?gdZ(@G(@Jzty0S&D^wxmt&Ke!iiDN zXc&y9gVDS&S{{s+iKF$xXmvQ+Bp7WLjW!L*YaZ)u@!|YCPt|%AuvyOF>FVdQ&MBb@ E0IgVhRsaA1 literal 0 HcmV?d00001 diff --git a/samples/browser-multiple/test/__screenshots__/each.test.ts/testing-first-pass--3----1-1.png b/samples/browser-multiple/test/__screenshots__/each.test.ts/testing-first-pass--3----1-1.png new file mode 100644 index 0000000000000000000000000000000000000000..f88c55c1cad7d3de8229e8a42a99ad5e0bc9e037 GIT binary patch literal 3012 zcmeAS@N?(olHy`uVBq!ia0y~yV4TOmz}&#W1QcnFZJGt77>k44ofy`glX=O&z+LC* z;uumf=k1k)oD2#A2MkL8&pofovQS0%%T-%r?gdZ(@G(@Jzty0S&D^wxmt&Ke!iiDN zXc&y9gVDS&S{{s+iKF$xXmvQ+Bp7WLjW!L*YaZ)u@!|YCPt|%AuvyOF>FVdQ&MBb@ E0IgVhRsaA1 literal 0 HcmV?d00001 diff --git a/samples/browser-multiple/test/__screenshots__/each.test.ts/testing-last-fail--3----1-1.png b/samples/browser-multiple/test/__screenshots__/each.test.ts/testing-last-fail--3----1-1.png new file mode 100644 index 0000000000000000000000000000000000000000..f88c55c1cad7d3de8229e8a42a99ad5e0bc9e037 GIT binary patch literal 3012 zcmeAS@N?(olHy`uVBq!ia0y~yV4TOmz}&#W1QcnFZJGt77>k44ofy`glX=O&z+LC* z;uumf=k1k)oD2#A2MkL8&pofovQS0%%T-%r?gdZ(@G(@Jzty0S&D^wxmt&Ke!iiDN zXc&y9gVDS&S{{s+iKF$xXmvQ+Bp7WLjW!L*YaZ)u@!|YCPt|%AuvyOF>FVdQ&MBb@ E0IgVhRsaA1 literal 0 HcmV?d00001 diff --git a/samples/browser-multiple/test/__screenshots__/each.test.ts/testing-last-pass--3----1-1.png b/samples/browser-multiple/test/__screenshots__/each.test.ts/testing-last-pass--3----1-1.png new file mode 100644 index 0000000000000000000000000000000000000000..f88c55c1cad7d3de8229e8a42a99ad5e0bc9e037 GIT binary patch literal 3012 zcmeAS@N?(olHy`uVBq!ia0y~yV4TOmz}&#W1QcnFZJGt77>k44ofy`glX=O&z+LC* z;uumf=k1k)oD2#A2MkL8&pofovQS0%%T-%r?gdZ(@G(@Jzty0S&D^wxmt&Ke!iiDN zXc&y9gVDS&S{{s+iKF$xXmvQ+Bp7WLjW!L*YaZ)u@!|YCPt|%AuvyOF>FVdQ&MBb@ E0IgVhRsaA1 literal 0 HcmV?d00001 diff --git a/samples/browser-multiple/test/__screenshots__/env.test.ts/process-env-1.png b/samples/browser-multiple/test/__screenshots__/env.test.ts/process-env-1.png new file mode 100644 index 0000000000000000000000000000000000000000..f88c55c1cad7d3de8229e8a42a99ad5e0bc9e037 GIT binary patch literal 3012 zcmeAS@N?(olHy`uVBq!ia0y~yV4TOmz}&#W1QcnFZJGt77>k44ofy`glX=O&z+LC* z;uumf=k1k)oD2#A2MkL8&pofovQS0%%T-%r?gdZ(@G(@Jzty0S&D^wxmt&Ke!iiDN zXc&y9gVDS&S{{s+iKF$xXmvQ+Bp7WLjW!L*YaZ)u@!|YCPt|%AuvyOF>FVdQ&MBb@ E0IgVhRsaA1 literal 0 HcmV?d00001 diff --git a/samples/browser-multiple/test/add.test.ts b/samples/browser-multiple/test/add.test.ts new file mode 100644 index 00000000..2517c278 --- /dev/null +++ b/samples/browser-multiple/test/add.test.ts @@ -0,0 +1,52 @@ +import { describe, expect, it } from 'vitest' +import { add, sum } from '../src/add' + +describe('addition', () => { + it('add', () => { + expect(add(1, 1)).toBe(2) + }) + + it('sum', () => { + expect(sum(0, 10)).toBe(55) + }) + + it.skip('skipped', () => { + expect(1 + 2).toBe(3) + }) + + it.todo('todo') + it('async task', async () => { + await new Promise(resolve => setTimeout(resolve, 100)) + }) + + it('async task 0.5s', async () => { + await new Promise(resolve => setTimeout(resolve, 500)) + }) + + it('async task 1s', async () => { + await new Promise(resolve => setTimeout(resolve, 1000)) + }) + + it('long task', () => { + let sum = 0 + for (let i = 0; i < 2e8; i++) + sum += i + + expect(sum).toBeGreaterThan(1) + }) +}) + +describe('testing', () => { + it('run', () => { + const a = 10 + expect(a).toBe(10) + }) + + it('mul', () => { + expect(5 * 5).toBe(25) + }) + + it("mul fail", () => { + expect(5 * 5).toBe(25) + }) +}) diff --git a/samples/browser-multiple/test/console.test.ts b/samples/browser-multiple/test/console.test.ts new file mode 100644 index 00000000..4efe8f6a --- /dev/null +++ b/samples/browser-multiple/test/console.test.ts @@ -0,0 +1,25 @@ +import { describe, it } from 'vitest' + +const sleep = (ms: number) => new Promise(resolve => setTimeout(resolve, ms)) + +describe('console', () => { + it('basic', () => { + console.log([ + 'string', + { hello: 'world' }, + 1234, + /regex/g, + true, + false, + null, + ]) + }) + + it('async', async () => { + console.log('1st') + await sleep(200) + console.log('2nd') + await sleep(200) + console.log('3rd') + }) +}) diff --git a/samples/browser-multiple/test/deep/deeper/deep.test.ts b/samples/browser-multiple/test/deep/deeper/deep.test.ts new file mode 100644 index 00000000..64456cdf --- /dev/null +++ b/samples/browser-multiple/test/deep/deeper/deep.test.ts @@ -0,0 +1,5 @@ +import { expect, it } from 'vitest' + +it('test', () => { + expect(1).toBe(1) +}) \ No newline at end of file diff --git a/samples/browser-multiple/test/duplicated.test.ts b/samples/browser-multiple/test/duplicated.test.ts new file mode 100644 index 00000000..8f839ba0 --- /dev/null +++ b/samples/browser-multiple/test/duplicated.test.ts @@ -0,0 +1,8 @@ +import { describe, test } from "vitest"; + +describe("testing", () => { + test("number 1", () => { }) +}); +describe("testing", () => { + test("number 2", () => { }) +}); diff --git a/samples/browser-multiple/test/each.test.ts b/samples/browser-multiple/test/each.test.ts new file mode 100644 index 00000000..f7cff915 --- /dev/null +++ b/samples/browser-multiple/test/each.test.ts @@ -0,0 +1,84 @@ +import { describe, expect, it, test, } from 'vitest' + +describe('testing', (a) => { + it.each([ + [1, 1], [2, 2], [3, 3] + ])(`all pass: %i => %i`, (a, b) => { + expect(a).toBe(b) + }) + it.each([ + [1, 1], [2, 1], [3, 1] + ])(`first pass: %i => %i`, (a, b) => { + expect(a).toBe(b) + }) + it.each([ + [1, 1], [2, 2], [3, 1] + ])(`last pass: %i => %i`, (a, b) => { + expect(a).toBe(b) + }) + it.each([ + [1, 1], [2, 2], [3, 1] + ])(`first fail: %i => %i`, (a, b) => { + expect(a).toBe(b) + }) + it.each([ + [1, 1], [2, 2], [3, 1] + ])(`last fail: %i => %i`, (a, b) => { + expect(a).toBe(b) + }) + it.each([ + [1, 0], [2, 0], [3, 0] + ])(`all fail: %i => %i`, (a, b) => { + expect(a).toBe(b) + }) + it.each([ + 1, 2, 3 + ])('run %i', (a) => { + expect(a).toBe(a) + }) + it.each([ + [1, 1], [2, 4], [3, 9] + ])('run mul %i', (a,b) => { + expect(a * a).toBe(b) + }) + test.each([ + ["test1", 1], + ["test2", 2], + ["test3", 3], + ])(`%s => %i`, (a, b) => { + expect(a.at(-1)).toBe(`${b}`) + }) + test.each` + a | b | expected + ${1} | ${1} | ${2} + ${'a'} | ${'b'} | ${'ab'} + ${[]} | ${'b'} | ${'b'} + ${{}} | ${'b'} | ${'[object Object]b'} + ${{ asd: 1 }} | ${'b'} | ${'[object Object]b'} + `('table1: returns $expected when $a is added $b', ({ a, b, expected }) => { + expect(a + b).toBe(expected) + }) + test.each` + a | b | expected + ${{v: 1}} | ${{v: 1}} | ${2} + `('table2: returns $expected when $a.v is added $b.v', ({ a, b, expected }) => { + expect(a.v + b.v).toBe(expected) + }) + test.each([ + { input: 1, add: 1, sum: 2 }, + { input: 2, add: 2, sum: 4 }, + ])('$input + $add = $sum', ({ input, add, sum }) => { + expect(input + add).toBe(sum) + }) +}) + +// 'Test result not fourd' error occurs as both .each patterns are matched +// TODO: Fix this +describe("over matched test patterns", () => { + test.each(['1', '2'])('run %s', (a) => { + expect(a).toBe(String(a)) + }) + test.each(['1', '2'])('run for %s', (a) => { + expect(a).toBe(String(a)) + }) +}) diff --git a/samples/browser-multiple/test/env.test.ts b/samples/browser-multiple/test/env.test.ts new file mode 100644 index 00000000..07b88808 --- /dev/null +++ b/samples/browser-multiple/test/env.test.ts @@ -0,0 +1,9 @@ +import { test, expect } from "vitest"; + +test('process.env', () => { + expect(process.env.TEST).toBe('true'); + expect(process.env.VITEST).toBe('true'); + expect(process.env.NODE_ENV).toBe('test'); + expect(process.env.VITEST_VSCODE).toBe('true'); + expect(process.env.TEST_CUSTOM_ENV).toBe('hello'); +}); diff --git a/samples/browser-multiple/test/fail_to_run.test.ts b/samples/browser-multiple/test/fail_to_run.test.ts new file mode 100644 index 00000000..13900e21 --- /dev/null +++ b/samples/browser-multiple/test/fail_to_run.test.ts @@ -0,0 +1 @@ +test('aaaaaa', () => {}) diff --git a/samples/browser-multiple/test/ignored.test.ts b/samples/browser-multiple/test/ignored.test.ts new file mode 100644 index 00000000..ff1c9074 --- /dev/null +++ b/samples/browser-multiple/test/ignored.test.ts @@ -0,0 +1,5 @@ +import { describe, it } from 'vitest' + +describe('ignored test', () => { + it('is ignored because of vitest plugin setting', () => {}) +}) diff --git a/samples/browser-multiple/test/mul.test.ts b/samples/browser-multiple/test/mul.test.ts new file mode 100644 index 00000000..b1a6e21e --- /dev/null +++ b/samples/browser-multiple/test/mul.test.ts @@ -0,0 +1,6 @@ +import { describe, it } from 'vitest' + +describe('mul', () => { + it.skip('run 1', () => {}) + it('run', () => {}) +}) diff --git a/samples/browser-multiple/test/snapshot.test.ts b/samples/browser-multiple/test/snapshot.test.ts new file mode 100644 index 00000000..2944c559 --- /dev/null +++ b/samples/browser-multiple/test/snapshot.test.ts @@ -0,0 +1,11 @@ +import { describe, expect, it } from 'vitest' + +describe('snapshots', () => { + it('string', () => { + expect('bc').toMatchSnapshot() + }) + it('async', async () => { + await new Promise(resolve => setTimeout(resolve, 200)) + expect('bc').toMatchSnapshot() + }) +}) diff --git a/samples/browser-multiple/test/using.test.ts b/samples/browser-multiple/test/using.test.ts new file mode 100644 index 00000000..d7e13a31 --- /dev/null +++ b/samples/browser-multiple/test/using.test.ts @@ -0,0 +1,43 @@ +import { describe, expect, it } from 'vitest'; + +(Symbol as any).dispose ??= Symbol('Symbol.dispose'); +(Symbol as any).asyncDispose ??= Symbol('Symbol.asyncDispose') + +describe('using keyword', () => { + it('dispose', () => { + function getDisposableResource() { + using resource = new SomeDisposableResource() + return resource + } + + const resource = getDisposableResource() + expect(resource.isDisposed).toBe(true) + }) + + it('asyncDispose', async () => { + async function getAsyncDisposableResource() { + await using resource = new SomeAsyncDisposableResource() + return resource + } + + const resource = await getAsyncDisposableResource() + expect(resource.isDisposed).toBe(true) + }) +}) + +class SomeDisposableResource implements Disposable { + public isDisposed = false; + + [Symbol.dispose](): void { + this.isDisposed = true + } +} + +class SomeAsyncDisposableResource implements AsyncDisposable { + public isDisposed = false + + async [Symbol.asyncDispose](): Promise { + await new Promise(resolve => setTimeout(resolve, 0)) + this.isDisposed = true + } +} diff --git a/samples/browser-multiple/vitest.config.ts b/samples/browser-multiple/vitest.config.ts new file mode 100644 index 00000000..76121c99 --- /dev/null +++ b/samples/browser-multiple/vitest.config.ts @@ -0,0 +1,30 @@ +/// +/// + +// Configure Vitest (https://vitest.dev/config) + +import { defineConfig } from 'vitest/config' + +export default defineConfig({ + esbuild: { + target: 'es2020', + }, + test: { + include: ['test/**/*.test.ts'], + exclude: ['test/ignored.test.ts'], + browser: { + enabled: true, + headless: true, + provider: 'playwright', + instances: [ + { + browser: 'chromium', + }, + { + browser: 'firefox', + headless: false, + }, + ] + } + }, +}) diff --git a/samples/browser-webdriverio/.skip/vitest.config.ts b/samples/browser-webdriverio/.skip/vitest.config.ts new file mode 100644 index 00000000..91480683 --- /dev/null +++ b/samples/browser-webdriverio/.skip/vitest.config.ts @@ -0,0 +1 @@ +throw new Error('do not import') \ No newline at end of file diff --git a/samples/browser-webdriverio/.vscode/settings.json b/samples/browser-webdriverio/.vscode/settings.json new file mode 100644 index 00000000..3c9a0945 --- /dev/null +++ b/samples/browser-webdriverio/.vscode/settings.json @@ -0,0 +1,8 @@ +{ + "vitest.nodeEnv": { + "TEST_CUSTOM_ENV": "hello" + }, + "[typescript]": { + "editor.defaultFormatter": "esbenp.prettier-vscode" + }, +} diff --git a/samples/browser-webdriverio/package.json b/samples/browser-webdriverio/package.json new file mode 100644 index 00000000..fa2a04a4 --- /dev/null +++ b/samples/browser-webdriverio/package.json @@ -0,0 +1,22 @@ +{ + "name": "basic", + "version": "1.0.0", + "description": "", + "author": "", + "license": "ISC", + "main": "index.js", + "scripts": { + "test": "vitest run" + }, + "dependencies": { + "birpc": "^0.2.2" + }, + "devDependencies": { + "@vitest/browser": "^3.0.9", + "@vitest/coverage-v8": "^3.0.9", + "@wdio/cli": "^9.12.2", + "playwright": "^1.51.1", + "vite": "^5.4.3", + "vitest": "^3.0.9" + } +} diff --git a/samples/browser-webdriverio/pnpm-lock.yaml b/samples/browser-webdriverio/pnpm-lock.yaml new file mode 100644 index 00000000..e2a9574b --- /dev/null +++ b/samples/browser-webdriverio/pnpm-lock.yaml @@ -0,0 +1,4493 @@ +lockfileVersion: '9.0' + +settings: + autoInstallPeers: true + excludeLinksFromLockfile: false + +importers: + + .: + dependencies: + birpc: + specifier: ^0.2.2 + version: 0.2.19 + devDependencies: + '@vitest/browser': + specifier: ^3.0.9 + version: 3.0.9(@types/node@22.13.14)(playwright@1.51.1)(vite@5.4.14(@types/node@22.13.14))(vitest@3.0.9)(webdriverio@9.12.2) + '@vitest/coverage-v8': + specifier: ^3.0.9 + version: 3.0.9(@vitest/browser@3.0.9)(vitest@3.0.9) + '@wdio/cli': + specifier: ^9.12.2 + version: 9.12.2 + playwright: + specifier: ^1.51.1 + version: 1.51.1 + vite: + specifier: ^5.4.3 + version: 5.4.14(@types/node@22.13.14) + vitest: + specifier: ^3.0.9 + version: 3.0.9(@types/node@22.13.14)(@vitest/browser@3.0.9)(msw@2.7.3(@types/node@22.13.14)) + +packages: + + '@ampproject/remapping@2.3.0': + resolution: {integrity: sha512-30iZtAPgz+LTIYoeivqYo853f02jBYSd5uGnGpkFV0M3xOt9aN73erkgYAmZU43x4VfqcnLxW9Kpg3R5LC4YYw==} + engines: {node: '>=6.0.0'} + + '@babel/code-frame@7.26.2': + resolution: {integrity: sha512-RJlIHRueQgwWitWgF8OdFYGZX328Ax5BCemNGlqHfplnRT9ESi8JkFlvaVYbS+UubVY6dpv87Fs2u5M29iNFVQ==} + engines: {node: '>=6.9.0'} + + '@babel/helper-string-parser@7.25.9': + resolution: {integrity: sha512-4A/SCr/2KLd5jrtOMFzaKjVtAei3+2r/NChoBNoZ3EyP/+GlhoaEGoWOZUmFmoITP7zOJyHIMm+DYRd8o3PvHA==} + engines: {node: '>=6.9.0'} + + '@babel/helper-validator-identifier@7.25.9': + resolution: {integrity: sha512-Ed61U6XJc3CVRfkERJWDz4dJwKe7iLmmJsbOGu9wSloNSFttHV0I8g6UAgb7qnK5ly5bGLPd4oXZlxCdANBOWQ==} + engines: {node: '>=6.9.0'} + + '@babel/parser@7.26.8': + resolution: {integrity: sha512-TZIQ25pkSoaKEYYaHbbxkfL36GNsQ6iFiBbeuzAkLnXayKR1yP1zFe+NxuZWWsUyvt8icPU9CCq0sgWGXR1GEw==} + engines: {node: '>=6.0.0'} + hasBin: true + + '@babel/runtime@7.26.7': + resolution: {integrity: sha512-AOPI3D+a8dXnja+iwsUqGRjr1BbZIe771sXdapOtYI531gSqpi92vXivKcq2asu/DFpdl1ceFAKZyRzK2PCVcQ==} + engines: {node: '>=6.9.0'} + + '@babel/types@7.26.8': + resolution: {integrity: sha512-eUuWapzEGWFEpHFxgEaBG8e3n6S8L3MSu0oda755rOfabWPnh0Our1AozNFVUxGFIhbKgd1ksprsoDGMinTOTA==} + engines: {node: '>=6.9.0'} + + '@bcoe/v8-coverage@1.0.2': + resolution: {integrity: sha512-6zABk/ECA/QYSCQ1NGiVwwbQerUCZ+TQbp64Q3AgmfNvurHH0j8TtXa1qbShXA6qqkpAj4V5W8pP6mLe1mcMqA==} + engines: {node: '>=18'} + + '@bundled-es-modules/cookie@2.0.1': + resolution: {integrity: sha512-8o+5fRPLNbjbdGRRmJj3h6Hh1AQJf2dk3qQ/5ZFb+PXkRNiSoMGGUKlsgLfrxneb72axVJyIYji64E2+nNfYyw==} + + '@bundled-es-modules/statuses@1.0.1': + resolution: {integrity: sha512-yn7BklA5acgcBr+7w064fGV+SGIFySjCKpqjcWgBAIfrAkY+4GQTJJHQMeT3V/sgz23VTEVV8TtOmkvJAhFVfg==} + + '@bundled-es-modules/tough-cookie@0.1.6': + resolution: {integrity: sha512-dvMHbL464C0zI+Yqxbz6kZ5TOEp7GLW+pry/RWndAR8MJQAXZ2rPmIs8tziTZjeIyhSNZgZbCePtfSbdWqStJw==} + + '@esbuild/aix-ppc64@0.21.5': + resolution: {integrity: sha512-1SDgH6ZSPTlggy1yI6+Dbkiz8xzpHJEVAlF/AM1tHPLsf5STom9rwtjE4hKAF20FfXXNTFqEYXyJNWh1GiZedQ==} + engines: {node: '>=12'} + cpu: [ppc64] + os: [aix] + + '@esbuild/aix-ppc64@0.25.1': + resolution: {integrity: sha512-kfYGy8IdzTGy+z0vFGvExZtxkFlA4zAxgKEahG9KE1ScBjpQnFsNOX8KTU5ojNru5ed5CVoJYXFtoxaq5nFbjQ==} + engines: {node: '>=18'} + cpu: [ppc64] + os: [aix] + + '@esbuild/android-arm64@0.21.5': + resolution: {integrity: sha512-c0uX9VAUBQ7dTDCjq+wdyGLowMdtR/GoC2U5IYk/7D1H1JYC0qseD7+11iMP2mRLN9RcCMRcjC4YMclCzGwS/A==} + engines: {node: '>=12'} + cpu: [arm64] + os: [android] + + '@esbuild/android-arm64@0.25.1': + resolution: {integrity: sha512-50tM0zCJW5kGqgG7fQ7IHvQOcAn9TKiVRuQ/lN0xR+T2lzEFvAi1ZcS8DiksFcEpf1t/GYOeOfCAgDHFpkiSmA==} + engines: {node: '>=18'} + cpu: [arm64] + os: [android] + + '@esbuild/android-arm@0.21.5': + resolution: {integrity: sha512-vCPvzSjpPHEi1siZdlvAlsPxXl7WbOVUBBAowWug4rJHb68Ox8KualB+1ocNvT5fjv6wpkX6o/iEpbDrf68zcg==} + engines: {node: '>=12'} + cpu: [arm] + os: [android] + + '@esbuild/android-arm@0.25.1': + resolution: {integrity: sha512-dp+MshLYux6j/JjdqVLnMglQlFu+MuVeNrmT5nk6q07wNhCdSnB7QZj+7G8VMUGh1q+vj2Bq8kRsuyA00I/k+Q==} + engines: {node: '>=18'} + cpu: [arm] + os: [android] + + '@esbuild/android-x64@0.21.5': + resolution: {integrity: sha512-D7aPRUUNHRBwHxzxRvp856rjUHRFW1SdQATKXH2hqA0kAZb1hKmi02OpYRacl0TxIGz/ZmXWlbZgjwWYaCakTA==} + engines: {node: '>=12'} + cpu: [x64] + os: [android] + + '@esbuild/android-x64@0.25.1': + resolution: {integrity: sha512-GCj6WfUtNldqUzYkN/ITtlhwQqGWu9S45vUXs7EIYf+7rCiiqH9bCloatO9VhxsL0Pji+PF4Lz2XXCES+Q8hDw==} + engines: {node: '>=18'} + cpu: [x64] + os: [android] + + '@esbuild/darwin-arm64@0.21.5': + resolution: {integrity: sha512-DwqXqZyuk5AiWWf3UfLiRDJ5EDd49zg6O9wclZ7kUMv2WRFr4HKjXp/5t8JZ11QbQfUS6/cRCKGwYhtNAY88kQ==} + engines: {node: '>=12'} + cpu: [arm64] + os: [darwin] + + '@esbuild/darwin-arm64@0.25.1': + resolution: {integrity: sha512-5hEZKPf+nQjYoSr/elb62U19/l1mZDdqidGfmFutVUjjUZrOazAtwK+Kr+3y0C/oeJfLlxo9fXb1w7L+P7E4FQ==} + engines: {node: '>=18'} + cpu: [arm64] + os: [darwin] + + '@esbuild/darwin-x64@0.21.5': + resolution: {integrity: sha512-se/JjF8NlmKVG4kNIuyWMV/22ZaerB+qaSi5MdrXtd6R08kvs2qCN4C09miupktDitvh8jRFflwGFBQcxZRjbw==} + engines: {node: '>=12'} + cpu: [x64] + os: [darwin] + + '@esbuild/darwin-x64@0.25.1': + resolution: {integrity: sha512-hxVnwL2Dqs3fM1IWq8Iezh0cX7ZGdVhbTfnOy5uURtao5OIVCEyj9xIzemDi7sRvKsuSdtCAhMKarxqtlyVyfA==} + engines: {node: '>=18'} + cpu: [x64] + os: [darwin] + + '@esbuild/freebsd-arm64@0.21.5': + resolution: {integrity: sha512-5JcRxxRDUJLX8JXp/wcBCy3pENnCgBR9bN6JsY4OmhfUtIHe3ZW0mawA7+RDAcMLrMIZaf03NlQiX9DGyB8h4g==} + engines: {node: '>=12'} + cpu: [arm64] + os: [freebsd] + + '@esbuild/freebsd-arm64@0.25.1': + resolution: {integrity: sha512-1MrCZs0fZa2g8E+FUo2ipw6jw5qqQiH+tERoS5fAfKnRx6NXH31tXBKI3VpmLijLH6yriMZsxJtaXUyFt/8Y4A==} + engines: {node: '>=18'} + cpu: [arm64] + os: [freebsd] + + '@esbuild/freebsd-x64@0.21.5': + resolution: {integrity: sha512-J95kNBj1zkbMXtHVH29bBriQygMXqoVQOQYA+ISs0/2l3T9/kj42ow2mpqerRBxDJnmkUDCaQT/dfNXWX/ZZCQ==} + engines: {node: '>=12'} + cpu: [x64] + os: [freebsd] + + '@esbuild/freebsd-x64@0.25.1': + resolution: {integrity: sha512-0IZWLiTyz7nm0xuIs0q1Y3QWJC52R8aSXxe40VUxm6BB1RNmkODtW6LHvWRrGiICulcX7ZvyH6h5fqdLu4gkww==} + engines: {node: '>=18'} + cpu: [x64] + os: [freebsd] + + '@esbuild/linux-arm64@0.21.5': + resolution: {integrity: sha512-ibKvmyYzKsBeX8d8I7MH/TMfWDXBF3db4qM6sy+7re0YXya+K1cem3on9XgdT2EQGMu4hQyZhan7TeQ8XkGp4Q==} + engines: {node: '>=12'} + cpu: [arm64] + os: [linux] + + '@esbuild/linux-arm64@0.25.1': + resolution: {integrity: sha512-jaN3dHi0/DDPelk0nLcXRm1q7DNJpjXy7yWaWvbfkPvI+7XNSc/lDOnCLN7gzsyzgu6qSAmgSvP9oXAhP973uQ==} + engines: {node: '>=18'} + cpu: [arm64] + os: [linux] + + '@esbuild/linux-arm@0.21.5': + resolution: {integrity: sha512-bPb5AHZtbeNGjCKVZ9UGqGwo8EUu4cLq68E95A53KlxAPRmUyYv2D6F0uUI65XisGOL1hBP5mTronbgo+0bFcA==} + engines: {node: '>=12'} + cpu: [arm] + os: [linux] + + '@esbuild/linux-arm@0.25.1': + resolution: {integrity: sha512-NdKOhS4u7JhDKw9G3cY6sWqFcnLITn6SqivVArbzIaf3cemShqfLGHYMx8Xlm/lBit3/5d7kXvriTUGa5YViuQ==} + engines: {node: '>=18'} + cpu: [arm] + os: [linux] + + '@esbuild/linux-ia32@0.21.5': + resolution: {integrity: sha512-YvjXDqLRqPDl2dvRODYmmhz4rPeVKYvppfGYKSNGdyZkA01046pLWyRKKI3ax8fbJoK5QbxblURkwK/MWY18Tg==} + engines: {node: '>=12'} + cpu: [ia32] + os: [linux] + + '@esbuild/linux-ia32@0.25.1': + resolution: {integrity: sha512-OJykPaF4v8JidKNGz8c/q1lBO44sQNUQtq1KktJXdBLn1hPod5rE/Hko5ugKKZd+D2+o1a9MFGUEIUwO2YfgkQ==} + engines: {node: '>=18'} + cpu: [ia32] + os: [linux] + + '@esbuild/linux-loong64@0.21.5': + resolution: {integrity: sha512-uHf1BmMG8qEvzdrzAqg2SIG/02+4/DHB6a9Kbya0XDvwDEKCoC8ZRWI5JJvNdUjtciBGFQ5PuBlpEOXQj+JQSg==} + engines: {node: '>=12'} + cpu: [loong64] + os: [linux] + + '@esbuild/linux-loong64@0.25.1': + resolution: {integrity: sha512-nGfornQj4dzcq5Vp835oM/o21UMlXzn79KobKlcs3Wz9smwiifknLy4xDCLUU0BWp7b/houtdrgUz7nOGnfIYg==} + engines: {node: '>=18'} + cpu: [loong64] + os: [linux] + + '@esbuild/linux-mips64el@0.21.5': + resolution: {integrity: sha512-IajOmO+KJK23bj52dFSNCMsz1QP1DqM6cwLUv3W1QwyxkyIWecfafnI555fvSGqEKwjMXVLokcV5ygHW5b3Jbg==} + engines: {node: '>=12'} + cpu: [mips64el] + os: [linux] + + '@esbuild/linux-mips64el@0.25.1': + resolution: {integrity: sha512-1osBbPEFYwIE5IVB/0g2X6i1qInZa1aIoj1TdL4AaAb55xIIgbg8Doq6a5BzYWgr+tEcDzYH67XVnTmUzL+nXg==} + engines: {node: '>=18'} + cpu: [mips64el] + os: [linux] + + '@esbuild/linux-ppc64@0.21.5': + resolution: {integrity: sha512-1hHV/Z4OEfMwpLO8rp7CvlhBDnjsC3CttJXIhBi+5Aj5r+MBvy4egg7wCbe//hSsT+RvDAG7s81tAvpL2XAE4w==} + engines: {node: '>=12'} + cpu: [ppc64] + os: [linux] + + '@esbuild/linux-ppc64@0.25.1': + resolution: {integrity: sha512-/6VBJOwUf3TdTvJZ82qF3tbLuWsscd7/1w+D9LH0W/SqUgM5/JJD0lrJ1fVIfZsqB6RFmLCe0Xz3fmZc3WtyVg==} + engines: {node: '>=18'} + cpu: [ppc64] + os: [linux] + + '@esbuild/linux-riscv64@0.21.5': + resolution: {integrity: sha512-2HdXDMd9GMgTGrPWnJzP2ALSokE/0O5HhTUvWIbD3YdjME8JwvSCnNGBnTThKGEB91OZhzrJ4qIIxk/SBmyDDA==} + engines: {node: '>=12'} + cpu: [riscv64] + os: [linux] + + '@esbuild/linux-riscv64@0.25.1': + resolution: {integrity: sha512-nSut/Mx5gnilhcq2yIMLMe3Wl4FK5wx/o0QuuCLMtmJn+WeWYoEGDN1ipcN72g1WHsnIbxGXd4i/MF0gTcuAjQ==} + engines: {node: '>=18'} + cpu: [riscv64] + os: [linux] + + '@esbuild/linux-s390x@0.21.5': + resolution: {integrity: sha512-zus5sxzqBJD3eXxwvjN1yQkRepANgxE9lgOW2qLnmr8ikMTphkjgXu1HR01K4FJg8h1kEEDAqDcZQtbrRnB41A==} + engines: {node: '>=12'} + cpu: [s390x] + os: [linux] + + '@esbuild/linux-s390x@0.25.1': + resolution: {integrity: sha512-cEECeLlJNfT8kZHqLarDBQso9a27o2Zd2AQ8USAEoGtejOrCYHNtKP8XQhMDJMtthdF4GBmjR2au3x1udADQQQ==} + engines: {node: '>=18'} + cpu: [s390x] + os: [linux] + + '@esbuild/linux-x64@0.21.5': + resolution: {integrity: sha512-1rYdTpyv03iycF1+BhzrzQJCdOuAOtaqHTWJZCWvijKD2N5Xu0TtVC8/+1faWqcP9iBCWOmjmhoH94dH82BxPQ==} + engines: {node: '>=12'} + cpu: [x64] + os: [linux] + + '@esbuild/linux-x64@0.25.1': + resolution: {integrity: sha512-xbfUhu/gnvSEg+EGovRc+kjBAkrvtk38RlerAzQxvMzlB4fXpCFCeUAYzJvrnhFtdeyVCDANSjJvOvGYoeKzFA==} + engines: {node: '>=18'} + cpu: [x64] + os: [linux] + + '@esbuild/netbsd-arm64@0.25.1': + resolution: {integrity: sha512-O96poM2XGhLtpTh+s4+nP7YCCAfb4tJNRVZHfIE7dgmax+yMP2WgMd2OecBuaATHKTHsLWHQeuaxMRnCsH8+5g==} + engines: {node: '>=18'} + cpu: [arm64] + os: [netbsd] + + '@esbuild/netbsd-x64@0.21.5': + resolution: {integrity: sha512-Woi2MXzXjMULccIwMnLciyZH4nCIMpWQAs049KEeMvOcNADVxo0UBIQPfSmxB3CWKedngg7sWZdLvLczpe0tLg==} + engines: {node: '>=12'} + cpu: [x64] + os: [netbsd] + + '@esbuild/netbsd-x64@0.25.1': + resolution: {integrity: sha512-X53z6uXip6KFXBQ+Krbx25XHV/NCbzryM6ehOAeAil7X7oa4XIq+394PWGnwaSQ2WRA0KI6PUO6hTO5zeF5ijA==} + engines: {node: '>=18'} + cpu: [x64] + os: [netbsd] + + '@esbuild/openbsd-arm64@0.25.1': + resolution: {integrity: sha512-Na9T3szbXezdzM/Kfs3GcRQNjHzM6GzFBeU1/6IV/npKP5ORtp9zbQjvkDJ47s6BCgaAZnnnu/cY1x342+MvZg==} + engines: {node: '>=18'} + cpu: [arm64] + os: [openbsd] + + '@esbuild/openbsd-x64@0.21.5': + resolution: {integrity: sha512-HLNNw99xsvx12lFBUwoT8EVCsSvRNDVxNpjZ7bPn947b8gJPzeHWyNVhFsaerc0n3TsbOINvRP2byTZ5LKezow==} + engines: {node: '>=12'} + cpu: [x64] + os: [openbsd] + + '@esbuild/openbsd-x64@0.25.1': + resolution: {integrity: sha512-T3H78X2h1tszfRSf+txbt5aOp/e7TAz3ptVKu9Oyir3IAOFPGV6O9c2naym5TOriy1l0nNf6a4X5UXRZSGX/dw==} + engines: {node: '>=18'} + cpu: [x64] + os: [openbsd] + + '@esbuild/sunos-x64@0.21.5': + resolution: {integrity: sha512-6+gjmFpfy0BHU5Tpptkuh8+uw3mnrvgs+dSPQXQOv3ekbordwnzTVEb4qnIvQcYXq6gzkyTnoZ9dZG+D4garKg==} + engines: {node: '>=12'} + cpu: [x64] + os: [sunos] + + '@esbuild/sunos-x64@0.25.1': + resolution: {integrity: sha512-2H3RUvcmULO7dIE5EWJH8eubZAI4xw54H1ilJnRNZdeo8dTADEZ21w6J22XBkXqGJbe0+wnNJtw3UXRoLJnFEg==} + engines: {node: '>=18'} + cpu: [x64] + os: [sunos] + + '@esbuild/win32-arm64@0.21.5': + resolution: {integrity: sha512-Z0gOTd75VvXqyq7nsl93zwahcTROgqvuAcYDUr+vOv8uHhNSKROyU961kgtCD1e95IqPKSQKH7tBTslnS3tA8A==} + engines: {node: '>=12'} + cpu: [arm64] + os: [win32] + + '@esbuild/win32-arm64@0.25.1': + resolution: {integrity: sha512-GE7XvrdOzrb+yVKB9KsRMq+7a2U/K5Cf/8grVFRAGJmfADr/e/ODQ134RK2/eeHqYV5eQRFxb1hY7Nr15fv1NQ==} + engines: {node: '>=18'} + cpu: [arm64] + os: [win32] + + '@esbuild/win32-ia32@0.21.5': + resolution: {integrity: sha512-SWXFF1CL2RVNMaVs+BBClwtfZSvDgtL//G/smwAc5oVK/UPu2Gu9tIaRgFmYFFKrmg3SyAjSrElf0TiJ1v8fYA==} + engines: {node: '>=12'} + cpu: [ia32] + os: [win32] + + '@esbuild/win32-ia32@0.25.1': + resolution: {integrity: sha512-uOxSJCIcavSiT6UnBhBzE8wy3n0hOkJsBOzy7HDAuTDE++1DJMRRVCPGisULScHL+a/ZwdXPpXD3IyFKjA7K8A==} + engines: {node: '>=18'} + cpu: [ia32] + os: [win32] + + '@esbuild/win32-x64@0.21.5': + resolution: {integrity: sha512-tQd/1efJuzPC6rCFwEvLtci/xNFcTZknmXs98FYDfGE4wP9ClFV98nyKrzJKVPMhdDnjzLhdUyMX4PsQAPjwIw==} + engines: {node: '>=12'} + cpu: [x64] + os: [win32] + + '@esbuild/win32-x64@0.25.1': + resolution: {integrity: sha512-Y1EQdcfwMSeQN/ujR5VayLOJ1BHaK+ssyk0AEzPjC+t1lITgsnccPqFjb6V+LsTp/9Iov4ysfjxLaGJ9RPtkVg==} + engines: {node: '>=18'} + cpu: [x64] + os: [win32] + + '@inquirer/checkbox@3.0.1': + resolution: {integrity: sha512-0hm2nrToWUdD6/UHnel/UKGdk1//ke5zGUpHIvk5ZWmaKezlGxZkOJXNSWsdxO/rEqTkbB3lNC2J6nBElV2aAQ==} + engines: {node: '>=18'} + + '@inquirer/confirm@4.0.1': + resolution: {integrity: sha512-46yL28o2NJ9doViqOy0VDcoTzng7rAb6yPQKU7VDLqkmbCaH4JqK4yk4XqlzNWy9PVC5pG1ZUXPBQv+VqnYs2w==} + engines: {node: '>=18'} + + '@inquirer/confirm@5.1.5': + resolution: {integrity: sha512-ZB2Cz8KeMINUvoeDi7IrvghaVkYT2RB0Zb31EaLWOE87u276w4wnApv0SH2qWaJ3r0VSUa3BIuz7qAV2ZvsZlg==} + engines: {node: '>=18'} + peerDependencies: + '@types/node': '>=18' + peerDependenciesMeta: + '@types/node': + optional: true + + '@inquirer/core@10.1.6': + resolution: {integrity: sha512-Bwh/Zk6URrHwZnSSzAZAKH7YgGYi0xICIBDFOqBQoXNNAzBHw/bgXgLmChfp+GyR3PnChcTbiCTZGC6YJNJkMA==} + engines: {node: '>=18'} + peerDependencies: + '@types/node': '>=18' + peerDependenciesMeta: + '@types/node': + optional: true + + '@inquirer/core@9.2.1': + resolution: {integrity: sha512-F2VBt7W/mwqEU4bL0RnHNZmC/OxzNx9cOYxHqnXX3MP6ruYvZUZAW9imgN9+h/uBT/oP8Gh888J2OZSbjSeWcg==} + engines: {node: '>=18'} + + '@inquirer/editor@3.0.1': + resolution: {integrity: sha512-VA96GPFaSOVudjKFraokEEmUQg/Lub6OXvbIEZU1SDCmBzRkHGhxoFAVaF30nyiB4m5cEbDgiI2QRacXZ2hw9Q==} + engines: {node: '>=18'} + + '@inquirer/expand@3.0.1': + resolution: {integrity: sha512-ToG8d6RIbnVpbdPdiN7BCxZGiHOTomOX94C2FaT5KOHupV40tKEDozp12res6cMIfRKrXLJyexAZhWVHgbALSQ==} + engines: {node: '>=18'} + + '@inquirer/figures@1.0.10': + resolution: {integrity: sha512-Ey6176gZmeqZuY/W/nZiUyvmb1/qInjcpiZjXWi6nON+nxJpD1bxtSoBxNliGISae32n6OwbY+TSXPZ1CfS4bw==} + engines: {node: '>=18'} + + '@inquirer/input@3.0.1': + resolution: {integrity: sha512-BDuPBmpvi8eMCxqC5iacloWqv+5tQSJlUafYWUe31ow1BVXjW2a5qe3dh4X/Z25Wp22RwvcaLCc2siHobEOfzg==} + engines: {node: '>=18'} + + '@inquirer/number@2.0.1': + resolution: {integrity: sha512-QpR8jPhRjSmlr/mD2cw3IR8HRO7lSVOnqUvQa8scv1Lsr3xoAMMworcYW3J13z3ppjBFBD2ef1Ci6AE5Qn8goQ==} + engines: {node: '>=18'} + + '@inquirer/password@3.0.1': + resolution: {integrity: sha512-haoeEPUisD1NeE2IanLOiFr4wcTXGWrBOyAyPZi1FfLJuXOzNmxCJPgUrGYKVh+Y8hfGJenIfz5Wb/DkE9KkMQ==} + engines: {node: '>=18'} + + '@inquirer/prompts@6.0.1': + resolution: {integrity: sha512-yl43JD/86CIj3Mz5mvvLJqAOfIup7ncxfJ0Btnl0/v5TouVUyeEdcpknfgc+yMevS/48oH9WAkkw93m7otLb/A==} + engines: {node: '>=18'} + + '@inquirer/rawlist@3.0.1': + resolution: {integrity: sha512-VgRtFIwZInUzTiPLSfDXK5jLrnpkuSOh1ctfaoygKAdPqjcjKYmGh6sCY1pb0aGnCGsmhUxoqLDUAU0ud+lGXQ==} + engines: {node: '>=18'} + + '@inquirer/search@2.0.1': + resolution: {integrity: sha512-r5hBKZk3g5MkIzLVoSgE4evypGqtOannnB3PKTG9NRZxyFRKcfzrdxXXPcoJQsxJPzvdSU2Rn7pB7lw0GCmGAg==} + engines: {node: '>=18'} + + '@inquirer/select@3.0.1': + resolution: {integrity: sha512-lUDGUxPhdWMkN/fHy1Lk7pF3nK1fh/gqeyWXmctefhxLYxlDsc7vsPBEpxrfVGDsVdyYJsiJoD4bJ1b623cV1Q==} + engines: {node: '>=18'} + + '@inquirer/type@2.0.0': + resolution: {integrity: sha512-XvJRx+2KR3YXyYtPUUy+qd9i7p+GO9Ko6VIIpWlBrpWwXDv8WLFeHTxz35CfQFUiBMLXlGHhGzys7lqit9gWag==} + engines: {node: '>=18'} + + '@inquirer/type@3.0.4': + resolution: {integrity: sha512-2MNFrDY8jkFYc9Il9DgLsHhMzuHnOYM1+CUYVWbzu9oT0hC7V7EcYvdCKeoll/Fcci04A+ERZ9wcc7cQ8lTkIA==} + engines: {node: '>=18'} + peerDependencies: + '@types/node': '>=18' + peerDependenciesMeta: + '@types/node': + optional: true + + '@isaacs/cliui@8.0.2': + resolution: {integrity: sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==} + engines: {node: '>=12'} + + '@istanbuljs/schema@0.1.3': + resolution: {integrity: sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA==} + engines: {node: '>=8'} + + '@jest/expect-utils@29.7.0': + resolution: {integrity: sha512-GlsNBWiFQFCVi9QVSx7f5AgMeLxe9YCCs5PuP2O2LdjDAA8Jh9eX7lA1Jq/xdXw3Wb3hyvlFNfZIfcRetSzYcA==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + + '@jest/schemas@29.6.3': + resolution: {integrity: sha512-mo5j5X+jIZmJQveBKeS/clAueipV7KgiX1vMgCxam1RNYiqE1w62n0/tJJnHtjW8ZHcQco5gY85jA3mi0L+nSA==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + + '@jest/types@29.6.3': + resolution: {integrity: sha512-u3UPsIilWKOM3F9CXtrG8LEJmNxwoCQC/XVj4IKYXvvpx7QIi/Kg1LI5uDmDpKlac62NUtX7eLjRh+jVZcLOzw==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + + '@jridgewell/gen-mapping@0.3.8': + resolution: {integrity: sha512-imAbBGkb+ebQyxKgzv5Hu2nmROxoDOXHh80evxdoXNOrvAnVx7zimzc1Oo5h9RlfV4vPXaE2iM5pOFbvOCClWA==} + engines: {node: '>=6.0.0'} + + '@jridgewell/resolve-uri@3.1.2': + resolution: {integrity: sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==} + engines: {node: '>=6.0.0'} + + '@jridgewell/set-array@1.2.1': + resolution: {integrity: sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A==} + engines: {node: '>=6.0.0'} + + '@jridgewell/sourcemap-codec@1.5.0': + resolution: {integrity: sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ==} + + '@jridgewell/trace-mapping@0.3.25': + resolution: {integrity: sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==} + + '@mswjs/interceptors@0.37.6': + resolution: {integrity: sha512-wK+5pLK5XFmgtH3aQ2YVvA3HohS3xqV/OxuVOdNx9Wpnz7VE/fnC+e1A7ln6LFYeck7gOJ/dsZV6OLplOtAJ2w==} + engines: {node: '>=18'} + + '@open-draft/deferred-promise@2.2.0': + resolution: {integrity: sha512-CecwLWx3rhxVQF6V4bAgPS5t+So2sTbPgAzafKkVizyi7tlwpcFpdFqq+wqF2OwNBmqFuu6tOyouTuxgpMfzmA==} + + '@open-draft/logger@0.3.0': + resolution: {integrity: sha512-X2g45fzhxH238HKO4xbSr7+wBS8Fvw6ixhTDuvLd5mqh6bJJCFAPwU9mPDxbcrRtfxv4u5IHCEH77BmxvXmmxQ==} + + '@open-draft/until@2.1.0': + resolution: {integrity: sha512-U69T3ItWHvLwGg5eJ0n3I62nWuE6ilHlmz7zM0npLBRvPRd7e6NYmg54vvRtP5mZG7kZqZCFVdsTWo7BPtBujg==} + + '@pkgjs/parseargs@0.11.0': + resolution: {integrity: sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==} + engines: {node: '>=14'} + + '@polka/url@1.0.0-next.28': + resolution: {integrity: sha512-8LduaNlMZGwdZ6qWrKlfa+2M4gahzFkprZiAt2TF8uS0qQgBizKXpXURqvTJ4WtmupWxaLqjRb2UCTe72mu+Aw==} + + '@promptbook/utils@0.69.5': + resolution: {integrity: sha512-xm5Ti/Hp3o4xHrsK9Yy3MS6KbDxYbq485hDsFvxqaNA7equHLPdo8H8faTitTeb14QCDfLW4iwCxdVYu5sn6YQ==} + + '@puppeteer/browsers@2.8.0': + resolution: {integrity: sha512-yTwt2KWRmCQAfhvbCRjebaSX8pV1//I0Y3g+A7f/eS7gf0l4eRJoUCvcYdVtboeU4CTOZQuqYbZNS8aBYb8ROQ==} + engines: {node: '>=18'} + hasBin: true + + '@rollup/rollup-android-arm-eabi@4.34.6': + resolution: {integrity: sha512-+GcCXtOQoWuC7hhX1P00LqjjIiS/iOouHXhMdiDSnq/1DGTox4SpUvO52Xm+div6+106r+TcvOeo/cxvyEyTgg==} + cpu: [arm] + os: [android] + + '@rollup/rollup-android-arm64@4.34.6': + resolution: {integrity: sha512-E8+2qCIjciYUnCa1AiVF1BkRgqIGW9KzJeesQqVfyRITGQN+dFuoivO0hnro1DjT74wXLRZ7QF8MIbz+luGaJA==} + cpu: [arm64] + os: [android] + + '@rollup/rollup-darwin-arm64@4.34.6': + resolution: {integrity: sha512-z9Ib+OzqN3DZEjX7PDQMHEhtF+t6Mi2z/ueChQPLS/qUMKY7Ybn5A2ggFoKRNRh1q1T03YTQfBTQCJZiepESAg==} + cpu: [arm64] + os: [darwin] + + '@rollup/rollup-darwin-x64@4.34.6': + resolution: {integrity: sha512-PShKVY4u0FDAR7jskyFIYVyHEPCPnIQY8s5OcXkdU8mz3Y7eXDJPdyM/ZWjkYdR2m0izD9HHWA8sGcXn+Qrsyg==} + cpu: [x64] + os: [darwin] + + '@rollup/rollup-freebsd-arm64@4.34.6': + resolution: {integrity: sha512-YSwyOqlDAdKqs0iKuqvRHLN4SrD2TiswfoLfvYXseKbL47ht1grQpq46MSiQAx6rQEN8o8URtpXARCpqabqxGQ==} + cpu: [arm64] + os: [freebsd] + + '@rollup/rollup-freebsd-x64@4.34.6': + resolution: {integrity: sha512-HEP4CgPAY1RxXwwL5sPFv6BBM3tVeLnshF03HMhJYCNc6kvSqBgTMmsEjb72RkZBAWIqiPUyF1JpEBv5XT9wKQ==} + cpu: [x64] + os: [freebsd] + + '@rollup/rollup-linux-arm-gnueabihf@4.34.6': + resolution: {integrity: sha512-88fSzjC5xeH9S2Vg3rPgXJULkHcLYMkh8faix8DX4h4TIAL65ekwuQMA/g2CXq8W+NJC43V6fUpYZNjaX3+IIg==} + cpu: [arm] + os: [linux] + + '@rollup/rollup-linux-arm-musleabihf@4.34.6': + resolution: {integrity: sha512-wM4ztnutBqYFyvNeR7Av+reWI/enK9tDOTKNF+6Kk2Q96k9bwhDDOlnCUNRPvromlVXo04riSliMBs/Z7RteEg==} + cpu: [arm] + os: [linux] + + '@rollup/rollup-linux-arm64-gnu@4.34.6': + resolution: {integrity: sha512-9RyprECbRa9zEjXLtvvshhw4CMrRa3K+0wcp3KME0zmBe1ILmvcVHnypZ/aIDXpRyfhSYSuN4EPdCCj5Du8FIA==} + cpu: [arm64] + os: [linux] + + '@rollup/rollup-linux-arm64-musl@4.34.6': + resolution: {integrity: sha512-qTmklhCTyaJSB05S+iSovfo++EwnIEZxHkzv5dep4qoszUMX5Ca4WM4zAVUMbfdviLgCSQOu5oU8YoGk1s6M9Q==} + cpu: [arm64] + os: [linux] + + '@rollup/rollup-linux-loongarch64-gnu@4.34.6': + resolution: {integrity: sha512-4Qmkaps9yqmpjY5pvpkfOerYgKNUGzQpFxV6rnS7c/JfYbDSU0y6WpbbredB5cCpLFGJEqYX40WUmxMkwhWCjw==} + cpu: [loong64] + os: [linux] + + '@rollup/rollup-linux-powerpc64le-gnu@4.34.6': + resolution: {integrity: sha512-Zsrtux3PuaxuBTX/zHdLaFmcofWGzaWW1scwLU3ZbW/X+hSsFbz9wDIp6XvnT7pzYRl9MezWqEqKy7ssmDEnuQ==} + cpu: [ppc64] + os: [linux] + + '@rollup/rollup-linux-riscv64-gnu@4.34.6': + resolution: {integrity: sha512-aK+Zp+CRM55iPrlyKiU3/zyhgzWBxLVrw2mwiQSYJRobCURb781+XstzvA8Gkjg/hbdQFuDw44aUOxVQFycrAg==} + cpu: [riscv64] + os: [linux] + + '@rollup/rollup-linux-s390x-gnu@4.34.6': + resolution: {integrity: sha512-WoKLVrY9ogmaYPXwTH326+ErlCIgMmsoRSx6bO+l68YgJnlOXhygDYSZe/qbUJCSiCiZAQ+tKm88NcWuUXqOzw==} + cpu: [s390x] + os: [linux] + + '@rollup/rollup-linux-x64-gnu@4.34.6': + resolution: {integrity: sha512-Sht4aFvmA4ToHd2vFzwMFaQCiYm2lDFho5rPcvPBT5pCdC+GwHG6CMch4GQfmWTQ1SwRKS0dhDYb54khSrjDWw==} + cpu: [x64] + os: [linux] + + '@rollup/rollup-linux-x64-musl@4.34.6': + resolution: {integrity: sha512-zmmpOQh8vXc2QITsnCiODCDGXFC8LMi64+/oPpPx5qz3pqv0s6x46ps4xoycfUiVZps5PFn1gksZzo4RGTKT+A==} + cpu: [x64] + os: [linux] + + '@rollup/rollup-win32-arm64-msvc@4.34.6': + resolution: {integrity: sha512-3/q1qUsO/tLqGBaD4uXsB6coVGB3usxw3qyeVb59aArCgedSF66MPdgRStUd7vbZOsko/CgVaY5fo2vkvPLWiA==} + cpu: [arm64] + os: [win32] + + '@rollup/rollup-win32-ia32-msvc@4.34.6': + resolution: {integrity: sha512-oLHxuyywc6efdKVTxvc0135zPrRdtYVjtVD5GUm55I3ODxhU/PwkQFD97z16Xzxa1Fz0AEe4W/2hzRtd+IfpOA==} + cpu: [ia32] + os: [win32] + + '@rollup/rollup-win32-x64-msvc@4.34.6': + resolution: {integrity: sha512-0PVwmgzZ8+TZ9oGBmdZoQVXflbvuwzN/HRclujpl4N/q3i+y0lqLw8n1bXA8ru3sApDjlmONaNAuYr38y1Kr9w==} + cpu: [x64] + os: [win32] + + '@sec-ant/readable-stream@0.4.1': + resolution: {integrity: sha512-831qok9r2t8AlxLko40y2ebgSDhenenCatLVeW/uBtnHPyhHOvG0C7TvfgecV+wHzIm5KUICgzmVpWS+IMEAeg==} + + '@sinclair/typebox@0.27.8': + resolution: {integrity: sha512-+Fj43pSMwJs4KRrH/938Uf+uAELIgVBmQzg/q1YG10djyfA3TnrU8N8XzqCh/okZdszqBQTZf96idMfE5lnwTA==} + + '@sindresorhus/merge-streams@4.0.0': + resolution: {integrity: sha512-tlqY9xq5ukxTUZBmoOp+m61cqwQD5pHJtFY3Mn8CA8ps6yghLH/Hw8UPdqg4OLmFW3IFlcXnQNmo/dh8HzXYIQ==} + engines: {node: '>=18'} + + '@testing-library/dom@10.4.0': + resolution: {integrity: sha512-pemlzrSESWbdAloYml3bAJMEfNh1Z7EduzqPKprCH5S341frlpYnUEW0H72dLxa6IsYr+mPno20GiSm+h9dEdQ==} + engines: {node: '>=18'} + + '@testing-library/user-event@14.6.1': + resolution: {integrity: sha512-vq7fv0rnt+QTXgPxr5Hjc210p6YKq2kmdziLgnsZGgLJ9e6VAShx1pACLuRjd/AS/sr7phAR58OIIpf0LlmQNw==} + engines: {node: '>=12', npm: '>=6'} + peerDependencies: + '@testing-library/dom': '>=7.21.4' + + '@tootallnate/quickjs-emscripten@0.23.0': + resolution: {integrity: sha512-C5Mc6rdnsaJDjO3UpGW/CQTHtCKaYlScZTly4JIu97Jxo/odCiH0ITnDXSJPTOrEKk/ycSZ0AOgTmkDtkOsvIA==} + + '@types/aria-query@5.0.4': + resolution: {integrity: sha512-rfT93uj5s0PRL7EzccGMs3brplhcrghnDoV26NqKhCAS1hVo+WdNsPvE/yb6ilfr5hi2MEk6d5EWJTKdxg8jVw==} + + '@types/cookie@0.6.0': + resolution: {integrity: sha512-4Kh9a6B2bQciAhf7FSuMRRkUWecJgJu9nPnx3yzpsfXX/c50REIqpHY4C82bXP90qrLtXtkDxTZosYO3UpOwlA==} + + '@types/estree@1.0.6': + resolution: {integrity: sha512-AYnb1nQyY49te+VRAVgmzfcgjYS91mY5P0TKUDCLEM+gNnA+3T6rWITXRLYCpahpqSQbN5cE+gHpnPyXjHWxcw==} + + '@types/istanbul-lib-coverage@2.0.6': + resolution: {integrity: sha512-2QF/t/auWm0lsy8XtKVPG19v3sSOQlJe/YHZgfjb/KBBHOGSV+J2q/S671rcq9uTBrLAXmZpqJiaQbMT+zNU1w==} + + '@types/istanbul-lib-report@3.0.3': + resolution: {integrity: sha512-NQn7AHQnk/RSLOxrBbGyJM/aVQ+pjj5HCgasFxc0K/KhoATfQ/47AyUl15I2yBUpihjmas+a+VJBOqecrFH+uA==} + + '@types/istanbul-reports@3.0.4': + resolution: {integrity: sha512-pk2B1NWalF9toCRu6gjBzR69syFjP4Od8WRAX+0mmf9lAjCRicLOWc+ZrxZHx/0XRjotgkF9t6iaMJ+aXcOdZQ==} + + '@types/mute-stream@0.0.4': + resolution: {integrity: sha512-CPM9nzrCPPJHQNA9keH9CVkVI+WR5kMa+7XEs5jcGQ0VoAGnLv242w8lIVgwAEfmE4oufJRaTc9PNLQl0ioAow==} + + '@types/node@20.17.28': + resolution: {integrity: sha512-DHlH/fNL6Mho38jTy7/JT7sn2wnXI+wULR6PV4gy4VHLVvnrV/d3pHAMQHhc4gjdLmK2ZiPoMxzp6B3yRajLSQ==} + + '@types/node@22.13.14': + resolution: {integrity: sha512-Zs/Ollc1SJ8nKUAgc7ivOEdIBM8JAKgrqqUYi2J997JuKO7/tpQC+WCetQ1sypiKCQWHdvdg9wBNpUPEWZae7w==} + + '@types/normalize-package-data@2.4.4': + resolution: {integrity: sha512-37i+OaWTh9qeK4LSHPsyRC7NahnGotNuZvjLSgcPzblpHB3rrCJxAOgI5gCdKm7coonsaX1Of0ILiTcnZjbfxA==} + + '@types/sinonjs__fake-timers@8.1.5': + resolution: {integrity: sha512-mQkU2jY8jJEF7YHjHvsQO8+3ughTL1mcnn96igfhONmR+fUPSKIkefQYpSe8bsly2Ep7oQbn/6VG5/9/0qcArQ==} + + '@types/stack-utils@2.0.3': + resolution: {integrity: sha512-9aEbYZ3TbYMznPdcdr3SmIrLXwC/AKZXQeCf9Pgao5CKb8CyHuEX5jzWPTkvregvhRJHcpRO6BFoGW9ycaOkYw==} + + '@types/statuses@2.0.5': + resolution: {integrity: sha512-jmIUGWrAiwu3dZpxntxieC+1n/5c3mjrImkmOSQ2NC5uP6cYO4aAZDdSmRcI5C1oiTmqlZGHC+/NmJrKogbP5A==} + + '@types/tough-cookie@4.0.5': + resolution: {integrity: sha512-/Ad8+nIOV7Rl++6f1BdKxFSMgmoqEoYbHRpPcx3JEfv8VRsQe9Z4mCXeJBzxs7mbHY/XOZZuXlRNfhpVPbs6ZA==} + + '@types/which@2.0.2': + resolution: {integrity: sha512-113D3mDkZDjo+EeUEHCFy0qniNc1ZpecGiAU7WSo7YDoSzolZIQKpYFHrPpjkB2nuyahcKfrmLXeQlh7gqJYdw==} + + '@types/wrap-ansi@3.0.0': + resolution: {integrity: sha512-ltIpx+kM7g/MLRZfkbL7EsCEjfzCcScLpkg37eXEtx5kmrAKBkTJwd1GIAjDSL8wTpM6Hzn5YO4pSb91BEwu1g==} + + '@types/ws@8.18.0': + resolution: {integrity: sha512-8svvI3hMyvN0kKCJMvTJP/x6Y/EoQbepff882wL+Sn5QsXb3etnamgrJq4isrBxSJj5L2AuXcI0+bgkoAXGUJw==} + + '@types/yargs-parser@21.0.3': + resolution: {integrity: sha512-I4q9QU9MQv4oEOz4tAHJtNz1cwuLxn2F3xcc2iV5WdqLPpUnj30aUuxt1mAxYTG+oe8CZMV/+6rU4S4gRDzqtQ==} + + '@types/yargs@17.0.33': + resolution: {integrity: sha512-WpxBCKWPLr4xSsHgz511rFJAM+wS28w2zEO1QDNY5zM/S8ok70NNfztH0xwhqKyaK0OHCbN98LDAZuy1ctxDkA==} + + '@types/yauzl@2.10.3': + resolution: {integrity: sha512-oJoftv0LSuaDZE3Le4DbKX+KS9G36NzOeSap90UIK0yMA/NhKJhqlSGtNDORNRaIbQfzjXDrQa0ytJ6mNRGz/Q==} + + '@vitest/browser@3.0.9': + resolution: {integrity: sha512-P9dcCeMkA3/oYGfUzRFZJLZxiOpApztxhPsQDUiZzAzLoZonWhse2+vPB0xEBP8Q0lX1WCEEmtY7HzBRi4oYBA==} + peerDependencies: + playwright: '*' + safaridriver: '*' + vitest: 3.0.9 + webdriverio: ^7.0.0 || ^8.0.0 || ^9.0.0 + peerDependenciesMeta: + playwright: + optional: true + safaridriver: + optional: true + webdriverio: + optional: true + + '@vitest/coverage-v8@3.0.9': + resolution: {integrity: sha512-15OACZcBtQ34keIEn19JYTVuMFTlFrClclwWjHo/IRPg/8ELpkgNTl0o7WLP9WO9XGH6+tip9CPYtEOrIDJvBA==} + peerDependencies: + '@vitest/browser': 3.0.9 + vitest: 3.0.9 + peerDependenciesMeta: + '@vitest/browser': + optional: true + + '@vitest/expect@3.0.9': + resolution: {integrity: sha512-5eCqRItYgIML7NNVgJj6TVCmdzE7ZVgJhruW0ziSQV4V7PvLkDL1bBkBdcTs/VuIz0IxPb5da1IDSqc1TR9eig==} + + '@vitest/mocker@3.0.9': + resolution: {integrity: sha512-ryERPIBOnvevAkTq+L1lD+DTFBRcjueL9lOUfXsLfwP92h4e+Heb+PjiqS3/OURWPtywfafK0kj++yDFjWUmrA==} + peerDependencies: + msw: ^2.4.9 + vite: ^5.0.0 || ^6.0.0 + peerDependenciesMeta: + msw: + optional: true + vite: + optional: true + + '@vitest/pretty-format@2.1.9': + resolution: {integrity: sha512-KhRIdGV2U9HOUzxfiHmY8IFHTdqtOhIzCpd8WRdJiE7D/HUcZVD0EgQCVjm+Q9gkUXWgBvMmTtZgIG48wq7sOQ==} + + '@vitest/pretty-format@3.0.9': + resolution: {integrity: sha512-OW9F8t2J3AwFEwENg3yMyKWweF7oRJlMyHOMIhO5F3n0+cgQAJZBjNgrF8dLwFTEXl5jUqBLXd9QyyKv8zEcmA==} + + '@vitest/runner@3.0.9': + resolution: {integrity: sha512-NX9oUXgF9HPfJSwl8tUZCMP1oGx2+Sf+ru6d05QjzQz4OwWg0psEzwY6VexP2tTHWdOkhKHUIZH+fS6nA7jfOw==} + + '@vitest/snapshot@2.1.9': + resolution: {integrity: sha512-oBO82rEjsxLNJincVhLhaxxZdEtV0EFHMK5Kmx5sJ6H9L183dHECjiefOAdnqpIgT5eZwT04PoggUnW88vOBNQ==} + + '@vitest/snapshot@3.0.9': + resolution: {integrity: sha512-AiLUiuZ0FuA+/8i19mTYd+re5jqjEc2jZbgJ2up0VY0Ddyyxg/uUtBDpIFAy4uzKaQxOW8gMgBdAJJ2ydhu39A==} + + '@vitest/spy@3.0.9': + resolution: {integrity: sha512-/CcK2UDl0aQ2wtkp3YVWldrpLRNCfVcIOFGlVGKO4R5eajsH393Z1yiXLVQ7vWsj26JOEjeZI0x5sm5P4OGUNQ==} + + '@vitest/utils@3.0.9': + resolution: {integrity: sha512-ilHM5fHhZ89MCp5aAaM9uhfl1c2JdxVxl3McqsdVyVNN6JffnEen8UMCdRTzOhGXNQGo5GNL9QugHrz727Wnng==} + + '@wdio/cli@9.12.2': + resolution: {integrity: sha512-SLTTmArCbtGla/d0ZLMgKNH5amR8vwh5JLuZyU1UfEvD9IPaO2/jktgRyuAmH+XVIKha33OEBNMkTDqeBaVkyg==} + engines: {node: '>=18.20.0'} + hasBin: true + + '@wdio/config@9.12.2': + resolution: {integrity: sha512-xm9ggKfR6jQtnkk7YXfRyUUwJEIjRhy/EgP34zaU7Gy6tNq+bsp07HsQIlrz6PXzkQv+Z+VjlK+w9szudykJqQ==} + engines: {node: '>=18.20.0'} + + '@wdio/globals@9.12.2': + resolution: {integrity: sha512-zx/saq1qsThElECALs+lZNRzK6cF902HIK7gSkH3PZmAKNZWGEltwaLrxWemKQq6pms28kZ8BV0LoJhztizpOg==} + engines: {node: '>=18.20.0'} + + '@wdio/logger@9.4.4': + resolution: {integrity: sha512-BXx8RXFUW2M4dcO6t5Le95Hi2ZkTQBRsvBQqLekT2rZ6Xmw8ZKZBPf0FptnoftFGg6dYmwnDidYv/0+4PiHjpQ==} + engines: {node: '>=18.20.0'} + + '@wdio/protocols@9.12.2': + resolution: {integrity: sha512-XuHs4B81svXis8Bolyvvvf+HFsZthI9tp14CHZcnslYuafPG8kbAtUB/gFj+MIXGCML91Fbw+TNCs3eWtyY8vg==} + + '@wdio/repl@9.4.4': + resolution: {integrity: sha512-kchPRhoG/pCn4KhHGiL/ocNhdpR8OkD2e6sANlSUZ4TGBVi86YSIEjc2yXUwLacHknC/EnQk/SFnqd4MsNjGGg==} + engines: {node: '>=18.20.0'} + + '@wdio/types@9.12.2': + resolution: {integrity: sha512-nlsSLtE70y8Jx0GA91X+q6da5JfoH//VLLAqqQnMG1Mjq8Cz0lLNIF0MlwsNBumHJ3HCqWEAmZyYIB3QZ7O/iQ==} + engines: {node: '>=18.20.0'} + + '@wdio/utils@9.12.2': + resolution: {integrity: sha512-/41vXFQ60v9fQAfPq1x92ST/L0qeJ+mCk/csxbEkTcqr8vQXr6WB27ntMc3jPU5ePB5CKa3E6VbS+fffMQguAA==} + engines: {node: '>=18.20.0'} + + '@zip.js/zip.js@2.7.58': + resolution: {integrity: sha512-tU130QPuBtCPpJ/4a7YUfrOmZFnfxSsAH15gr+Kbl0ypwREu3YkGVswFNFHBHlP/FqFjvp9D27/fmd4LWYa1UQ==} + engines: {bun: '>=0.7.0', deno: '>=1.0.0', node: '>=16.5.0'} + + abort-controller@3.0.0: + resolution: {integrity: sha512-h8lQ8tacZYnR3vNQTgibj+tODHI5/+l06Au2Pcriv/Gmet0eaj4TwWH41sO9wnHDiQsEj19q0drzdWdeAHtweg==} + engines: {node: '>=6.5'} + + agent-base@7.1.3: + resolution: {integrity: sha512-jRR5wdylq8CkOe6hei19GGZnxM6rBGwFl3Bg0YItGDimvjGtAvdZk4Pu6Cl4u4Igsws4a1fd1Vq3ezrhn4KmFw==} + engines: {node: '>= 14'} + + ansi-escapes@4.3.2: + resolution: {integrity: sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==} + engines: {node: '>=8'} + + ansi-regex@5.0.1: + resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==} + engines: {node: '>=8'} + + ansi-regex@6.1.0: + resolution: {integrity: sha512-7HSX4QQb4CspciLpVFwyRe79O3xsIZDDLER21kERQ71oaPodF8jL725AgJMFAYbooIqolJoRLuM81SpeUkpkvA==} + engines: {node: '>=12'} + + ansi-styles@4.3.0: + resolution: {integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==} + engines: {node: '>=8'} + + ansi-styles@5.2.0: + resolution: {integrity: sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==} + engines: {node: '>=10'} + + ansi-styles@6.2.1: + resolution: {integrity: sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==} + engines: {node: '>=12'} + + archiver-utils@5.0.2: + resolution: {integrity: sha512-wuLJMmIBQYCsGZgYLTy5FIB2pF6Lfb6cXMSF8Qywwk3t20zWnAi7zLcQFdKQmIB8wyZpY5ER38x08GbwtR2cLA==} + engines: {node: '>= 14'} + + archiver@7.0.1: + resolution: {integrity: sha512-ZcbTaIqJOfCc03QwD468Unz/5Ir8ATtvAHsK+FdXbDIbGfihqh9mrvdcYunQzqn4HrvWWaFyaxJhGZagaJJpPQ==} + engines: {node: '>= 14'} + + aria-query@5.3.0: + resolution: {integrity: sha512-b0P0sZPKtyu8HkeRAfCq0IfURZK+SuwMjY1UXGBU27wpAiTwQAIlq56IbIO+ytk/JjS1fMR14ee5WBBfKi5J6A==} + + assertion-error@2.0.1: + resolution: {integrity: sha512-Izi8RQcffqCeNVgFigKli1ssklIbpHnCYc6AknXGYoB6grJqyeby7jv12JUQgmTAnIDnbck1uxksT4dzN3PWBA==} + engines: {node: '>=12'} + + ast-types@0.13.4: + resolution: {integrity: sha512-x1FCFnFifvYDDzTaLII71vG5uvDwgtmDTEVWAxrgeiR8VjMONcCXJx7E+USjDtHlwFmt9MysbqgF9b9Vjr6w+w==} + engines: {node: '>=4'} + + async-exit-hook@2.0.1: + resolution: {integrity: sha512-NW2cX8m1Q7KPA7a5M2ULQeZ2wR5qI5PAbw5L0UOMxdioVk9PMZ0h1TmyZEkPYrCvYjDlFICusOu1dlEKAAeXBw==} + engines: {node: '>=0.12.0'} + + async@3.2.6: + resolution: {integrity: sha512-htCUDlxyyCLMgaM3xXg0C0LW2xqfuQ6p05pCEIsXuyQ+a1koYKTuBMzRNwmybfLgvJDMd0r1LTn4+E0Ti6C2AA==} + + b4a@1.6.7: + resolution: {integrity: sha512-OnAYlL5b7LEkALw87fUVafQw5rVR9RjwGd4KUwNQ6DrrNmaVaUCgLipfVlzrPQ4tWOR9P0IXGNOx50jYCCdSJg==} + + balanced-match@1.0.2: + resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==} + + bare-events@2.5.4: + resolution: {integrity: sha512-+gFfDkR8pj4/TrWCGUGWmJIkBwuxPS5F+a5yWjOHQt2hHvNZd5YLzadjmDUtFmMM4y429bnKLa8bYBMHcYdnQA==} + + bare-fs@4.0.2: + resolution: {integrity: sha512-S5mmkMesiduMqnz51Bfh0Et9EX0aTCJxhsI4bvzFFLs8Z1AV8RDHadfY5CyLwdoLHgXbNBEN1gQcbEtGwuvixw==} + engines: {bare: '>=1.16.0'} + peerDependencies: + bare-buffer: '*' + peerDependenciesMeta: + bare-buffer: + optional: true + + bare-os@3.6.1: + resolution: {integrity: sha512-uaIjxokhFidJP+bmmvKSgiMzj2sV5GPHaZVAIktcxcpCyBFFWO+YlikVAdhmUo2vYFvFhOXIAlldqV29L8126g==} + engines: {bare: '>=1.14.0'} + + bare-path@3.0.0: + resolution: {integrity: sha512-tyfW2cQcB5NN8Saijrhqn0Zh7AnFNsnczRcuWODH0eYAXBsJ5gVxAUuNr7tsHSC6IZ77cA0SitzT+s47kot8Mw==} + + bare-stream@2.6.5: + resolution: {integrity: sha512-jSmxKJNJmHySi6hC42zlZnq00rga4jjxcgNZjY9N5WlOe/iOoGRtdwGsHzQv2RlH2KOYMwGUXhf2zXd32BA9RA==} + peerDependencies: + bare-buffer: '*' + bare-events: '*' + peerDependenciesMeta: + bare-buffer: + optional: true + bare-events: + optional: true + + base64-js@1.5.1: + resolution: {integrity: sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==} + + basic-ftp@5.0.5: + resolution: {integrity: sha512-4Bcg1P8xhUuqcii/S0Z9wiHIrQVPMermM1any+MX5GeGD7faD3/msQUDGLol9wOcz4/jbg/WJnGqoJF6LiBdtg==} + engines: {node: '>=10.0.0'} + + birpc@0.2.19: + resolution: {integrity: sha512-5WeXXAvTmitV1RqJFppT5QtUiz2p1mRSYU000Jkft5ZUCLJIk4uQriYNO50HknxKwM6jd8utNc66K1qGIwwWBQ==} + + boolbase@1.0.0: + resolution: {integrity: sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==} + + brace-expansion@1.1.11: + resolution: {integrity: sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==} + + brace-expansion@2.0.1: + resolution: {integrity: sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==} + + braces@3.0.3: + resolution: {integrity: sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==} + engines: {node: '>=8'} + + buffer-crc32@0.2.13: + resolution: {integrity: sha512-VO9Ht/+p3SN7SKWqcrgEzjGbRSJYTx+Q1pTQC0wrWqHx0vpJraQ6GtHx8tvcg1rlK1byhU5gccxgOgj7B0TDkQ==} + + buffer-crc32@1.0.0: + resolution: {integrity: sha512-Db1SbgBS/fg/392AblrMJk97KggmvYhr4pB5ZIMTWtaivCPMWLkmb7m21cJvpvgK+J3nsU2CmmixNBZx4vFj/w==} + engines: {node: '>=8.0.0'} + + buffer@6.0.3: + resolution: {integrity: sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==} + + cac@6.7.14: + resolution: {integrity: sha512-b6Ilus+c3RrdDk+JhLKUAQfzzgLEPy6wcXqS7f/xe1EETvsDP6GORG7SFuOs6cID5YkqchW/LXZbX5bc8j7ZcQ==} + engines: {node: '>=8'} + + chai@5.2.0: + resolution: {integrity: sha512-mCuXncKXk5iCLhfhwTc0izo0gtEmpz5CtG2y8GiOINBlMVS6v8TMRc5TaLWKS6692m9+dVVfzgeVxR5UxWHTYw==} + engines: {node: '>=12'} + + chalk@4.1.2: + resolution: {integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==} + engines: {node: '>=10'} + + chalk@5.4.1: + resolution: {integrity: sha512-zgVZuo2WcZgfUEmsn6eO3kINexW8RAE4maiQ8QNs8CtpPCSyMiYsULR3HQYkm3w8FIA3SberyMJMSldGsW+U3w==} + engines: {node: ^12.17.0 || ^14.13 || >=16.0.0} + + chardet@0.7.0: + resolution: {integrity: sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==} + + check-error@2.1.1: + resolution: {integrity: sha512-OAlb+T7V4Op9OwdkjmguYRqncdlx5JiofwOAUkmTF+jNdHwzTaTs4sRAGpzLF3oOz5xAyDGrPgeIDFQmDOTiJw==} + engines: {node: '>= 16'} + + cheerio-select@2.1.0: + resolution: {integrity: sha512-9v9kG0LvzrlcungtnJtpGNxY+fzECQKhK4EGJX2vByejiMX84MFNQw4UxPJl3bFbTMw+Dfs37XaIkCwTZfLh4g==} + + cheerio@1.0.0: + resolution: {integrity: sha512-quS9HgjQpdaXOvsZz82Oz7uxtXiy6UIsIQcpBj7HRw2M63Skasm9qlDocAM7jNuaxdhpPU7c4kJN+gA5MCu4ww==} + engines: {node: '>=18.17'} + + chokidar@4.0.3: + resolution: {integrity: sha512-Qgzu8kfBvo+cA4962jnP1KkS6Dop5NS6g7R5LFYJr4b8Ub94PPQXUksCw9PvXoeXPRRddRNC5C1JQUR2SMGtnA==} + engines: {node: '>= 14.16.0'} + + ci-info@3.9.0: + resolution: {integrity: sha512-NIxF55hv4nSqQswkAeiOi1r83xy8JldOFDTWiug55KBu9Jnblncd2U6ViHmYgHf01TPZS77NJBhBMKdWj9HQMQ==} + engines: {node: '>=8'} + + cli-width@4.1.0: + resolution: {integrity: sha512-ouuZd4/dm2Sw5Gmqy6bGyNNNe1qt9RpmxveLSO7KcgsTnU7RXfsw+/bukWGo1abgBiMAic068rclZsO4IWmmxQ==} + engines: {node: '>= 12'} + + cliui@8.0.1: + resolution: {integrity: sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==} + engines: {node: '>=12'} + + color-convert@2.0.1: + resolution: {integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==} + engines: {node: '>=7.0.0'} + + color-name@1.1.4: + resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==} + + commander@9.5.0: + resolution: {integrity: sha512-KRs7WVDKg86PWiuAqhDrAQnTXZKraVcCc6vFdL14qrZ/DcWwuRo7VoiYXalXO7S5GKpqYiVEwCbgFDfxNHKJBQ==} + engines: {node: ^12.20.0 || >=14} + + compress-commons@6.0.2: + resolution: {integrity: sha512-6FqVXeETqWPoGcfzrXb37E50NP0LXT8kAMu5ooZayhWWdgEY4lBEEcbQNXtkuKQsGduxiIcI4gOTsxTmuq/bSg==} + engines: {node: '>= 14'} + + concat-map@0.0.1: + resolution: {integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==} + + cookie@0.7.2: + resolution: {integrity: sha512-yki5XnKuf750l50uGTllt6kKILY4nQ1eNIQatoXEByZ5dWgnKqbnqmTrBE5B4N7lrMJKQ2ytWMiTO2o0v6Ew/w==} + engines: {node: '>= 0.6'} + + core-util-is@1.0.3: + resolution: {integrity: sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==} + + crc-32@1.2.2: + resolution: {integrity: sha512-ROmzCKrTnOwybPcJApAA6WBWij23HVfGVNKqqrZpuyZOHqK2CwHSvpGuyt/UNNvaIjEd8X5IFGp4Mh+Ie1IHJQ==} + engines: {node: '>=0.8'} + hasBin: true + + crc32-stream@6.0.0: + resolution: {integrity: sha512-piICUB6ei4IlTv1+653yq5+KoqfBYmj9bw6LqXoOneTMDXk5nM1qt12mFW1caG3LlJXEKW1Bp0WggEmIfQB34g==} + engines: {node: '>= 14'} + + cross-spawn@7.0.6: + resolution: {integrity: sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==} + engines: {node: '>= 8'} + + css-select@5.1.0: + resolution: {integrity: sha512-nwoRF1rvRRnnCqqY7updORDsuqKzqYJ28+oSMaJMMgOauh3fvwHqMS7EZpIPqK8GL+g9mKxF1vP/ZjSeNjEVHg==} + + css-shorthand-properties@1.1.2: + resolution: {integrity: sha512-C2AugXIpRGQTxaCW0N7n5jD/p5irUmCrwl03TrnMFBHDbdq44CFWR2zO7rK9xPN4Eo3pUxC4vQzQgbIpzrD1PQ==} + + css-value@0.0.1: + resolution: {integrity: sha512-FUV3xaJ63buRLgHrLQVlVgQnQdR4yqdLGaDu7g8CQcWjInDfM9plBTPI9FRfpahju1UBSaMckeb2/46ApS/V1Q==} + + css-what@6.1.0: + resolution: {integrity: sha512-HTUrgRJ7r4dsZKU6GjmpfRK1O76h97Z8MfS1G0FozR+oF2kG6Vfe8JE6zwrkbxigziPHinCJ+gCPjA9EaBDtRw==} + engines: {node: '>= 6'} + + data-uri-to-buffer@4.0.1: + resolution: {integrity: sha512-0R9ikRb668HB7QDxT1vkpuUBtqc53YyAwMwGeUFKRojY/NWKvdZ+9UYtRfGmhqNbRkTSVpMbmyhXipFFv2cb/A==} + engines: {node: '>= 12'} + + data-uri-to-buffer@6.0.2: + resolution: {integrity: sha512-7hvf7/GW8e86rW0ptuwS3OcBGDjIi6SZva7hCyWC0yYry2cOPmLIjXAUHI6DK2HsnwJd9ifmt57i8eV2n4YNpw==} + engines: {node: '>= 14'} + + debug@4.4.0: + resolution: {integrity: sha512-6WTZ/IxCY/T6BALoZHaE4ctp9xm+Z5kY/pzYaCHRFeyVhojxlrm+46y68HA6hr0TcwEssoxNiDEUJQjfPZ/RYA==} + engines: {node: '>=6.0'} + peerDependencies: + supports-color: '*' + peerDependenciesMeta: + supports-color: + optional: true + + decamelize@6.0.0: + resolution: {integrity: sha512-Fv96DCsdOgB6mdGl67MT5JaTNKRzrzill5OH5s8bjYJXVlcXyPYGyPsUkWyGV5p1TXI5esYIYMMeDJL0hEIwaA==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + + deep-eql@5.0.2: + resolution: {integrity: sha512-h5k/5U50IJJFpzfL6nO9jaaumfjO/f2NjK/oYB2Djzm4p9L+3T9qWpZqZ2hAbLPuuYq9wrU08WQyBTL5GbPk5Q==} + engines: {node: '>=6'} + + deepmerge-ts@7.1.5: + resolution: {integrity: sha512-HOJkrhaYsweh+W+e74Yn7YStZOilkoPb6fycpwNLKzSPtruFs48nYis0zy5yJz1+ktUhHxoRDJ27RQAWLIJVJw==} + engines: {node: '>=16.0.0'} + + degenerator@5.0.1: + resolution: {integrity: sha512-TllpMR/t0M5sqCXfj85i4XaAzxmS5tVA16dqvdkMwGmzI+dXLXnw3J+3Vdv7VKw+ThlTMboK6i9rnZ6Nntj5CQ==} + engines: {node: '>= 14'} + + dequal@2.0.3: + resolution: {integrity: sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA==} + engines: {node: '>=6'} + + diff-sequences@29.6.3: + resolution: {integrity: sha512-EjePK1srD3P08o2j4f0ExnylqRs5B9tJjcp9t1krH2qRi8CCdsYfwe9JgSLurFBWwq4uOlipzfk5fHNvwFKr8Q==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + + dom-accessibility-api@0.5.16: + resolution: {integrity: sha512-X7BJ2yElsnOJ30pZF4uIIDfBEVgF4XEBxL9Bxhy6dnrm5hkzqmsWHGTiHqRiITNhMyFLyAiWndIJP7Z1NTteDg==} + + dom-serializer@2.0.0: + resolution: {integrity: sha512-wIkAryiqt/nV5EQKqQpo3SToSOV9J0DnbJqwK7Wv/Trc92zIAYZ4FlMu+JPFW1DfGFt81ZTCGgDEabffXeLyJg==} + + domelementtype@2.3.0: + resolution: {integrity: sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw==} + + domhandler@5.0.3: + resolution: {integrity: sha512-cgwlv/1iFQiFnU96XXgROh8xTeetsnJiDsTc7TYCLFd9+/WNkIqPTxiM/8pSd8VIrhXGTf1Ny1q1hquVqDJB5w==} + engines: {node: '>= 4'} + + domutils@3.2.2: + resolution: {integrity: sha512-6kZKyUajlDuqlHKVX1w7gyslj9MPIXzIFiz/rGu35uC1wMi+kMhQwGhl4lt9unC9Vb9INnY9Z3/ZA3+FhASLaw==} + + dotenv@16.4.7: + resolution: {integrity: sha512-47qPchRCykZC03FhkYAhrvwU4xDBFIj1QPqaarj6mdM/hgUzfPHcpkHJOn3mJAufFeeAxAzeGsr5X0M4k6fLZQ==} + engines: {node: '>=12'} + + eastasianwidth@0.2.0: + resolution: {integrity: sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==} + + edge-paths@3.0.5: + resolution: {integrity: sha512-sB7vSrDnFa4ezWQk9nZ/n0FdpdUuC6R1EOrlU3DL+bovcNFK28rqu2emmAUjujYEJTWIgQGqgVVWUZXMnc8iWg==} + engines: {node: '>=14.0.0'} + + edgedriver@6.1.1: + resolution: {integrity: sha512-/dM/PoBf22Xg3yypMWkmRQrBKEnSyNaZ7wHGCT9+qqT14izwtFT+QvdR89rjNkMfXwW+bSFoqOfbcvM+2Cyc7w==} + engines: {node: '>=18.0.0'} + hasBin: true + + ejs@3.1.10: + resolution: {integrity: sha512-UeJmFfOrAQS8OJWPZ4qtgHyWExa088/MtK5UEyoJGFH67cDEXkZSviOiKRCZ4Xij0zxI3JECgYs3oKx+AizQBA==} + engines: {node: '>=0.10.0'} + hasBin: true + + emoji-regex@8.0.0: + resolution: {integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==} + + emoji-regex@9.2.2: + resolution: {integrity: sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==} + + encoding-sniffer@0.2.0: + resolution: {integrity: sha512-ju7Wq1kg04I3HtiYIOrUrdfdDvkyO9s5XM8QAj/bN61Yo/Vb4vgJxy5vi4Yxk01gWHbrofpPtpxM8bKger9jhg==} + + end-of-stream@1.4.4: + resolution: {integrity: sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==} + + entities@4.5.0: + resolution: {integrity: sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==} + engines: {node: '>=0.12'} + + error-ex@1.3.2: + resolution: {integrity: sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==} + + es-module-lexer@1.6.0: + resolution: {integrity: sha512-qqnD1yMU6tk/jnaMosogGySTZP8YtUgAffA9nMN+E/rjxcfRQ6IEk7IiozUjgxKoFHBGjTLnrHB/YC45r/59EQ==} + + esbuild@0.21.5: + resolution: {integrity: sha512-mg3OPMV4hXywwpoDxu3Qda5xCKQi+vCTZq8S9J/EpkhB2HzKXq4SNFZE3+NK93JYxc8VMSep+lOUSC/RVKaBqw==} + engines: {node: '>=12'} + hasBin: true + + esbuild@0.25.1: + resolution: {integrity: sha512-BGO5LtrGC7vxnqucAe/rmvKdJllfGaYWdyABvyMoXQlfYMb2bbRuReWR5tEGE//4LcNJj9XrkovTqNYRFZHAMQ==} + engines: {node: '>=18'} + hasBin: true + + escalade@3.2.0: + resolution: {integrity: sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==} + engines: {node: '>=6'} + + escape-string-regexp@2.0.0: + resolution: {integrity: sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==} + engines: {node: '>=8'} + + escodegen@2.1.0: + resolution: {integrity: sha512-2NlIDTwUWJN0mRPQOdtQBzbUHvdGY2P1VXSyU83Q3xKxM7WHX2Ql8dKq782Q9TgQUNOLEzEYu9bzLNj1q88I5w==} + engines: {node: '>=6.0'} + hasBin: true + + esprima@4.0.1: + resolution: {integrity: sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==} + engines: {node: '>=4'} + hasBin: true + + estraverse@5.3.0: + resolution: {integrity: sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==} + engines: {node: '>=4.0'} + + estree-walker@3.0.3: + resolution: {integrity: sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g==} + + esutils@2.0.3: + resolution: {integrity: sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==} + engines: {node: '>=0.10.0'} + + event-target-shim@5.0.1: + resolution: {integrity: sha512-i/2XbnSz/uxRCU6+NdVJgKWDTM427+MqYbkQzD321DuCQJUqOuJKIA0IM2+W2xtYHdKOmZ4dR6fExsd4SXL+WQ==} + engines: {node: '>=6'} + + events@3.3.0: + resolution: {integrity: sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==} + engines: {node: '>=0.8.x'} + + execa@9.5.2: + resolution: {integrity: sha512-EHlpxMCpHWSAh1dgS6bVeoLAXGnJNdR93aabr4QCGbzOM73o5XmRfM/e5FUqsw3aagP8S8XEWUWFAxnRBnAF0Q==} + engines: {node: ^18.19.0 || >=20.5.0} + + expect-type@1.1.0: + resolution: {integrity: sha512-bFi65yM+xZgk+u/KRIpekdSYkTB5W1pEf0Lt8Q8Msh7b+eQ7LXVtIB1Bkm4fvclDEL1b2CZkMhv2mOeF8tMdkA==} + engines: {node: '>=12.0.0'} + + expect-webdriverio@5.1.0: + resolution: {integrity: sha512-4u3q+Dqx/lXNgvCx1gKia4CfS28z1UxGGfVUkoMNbrsBlTBB2fYqXG+4+YtYoerxvp/XPwIb/+89IGEdyPbDXQ==} + engines: {node: '>=18 || >=20 || >=22'} + peerDependencies: + '@wdio/globals': ^9.0.0 + '@wdio/logger': ^9.0.0 + webdriverio: ^9.0.0 + + expect@29.7.0: + resolution: {integrity: sha512-2Zks0hf1VLFYI1kbh0I5jP3KHHyCHpkfyHBzsSXRFgl/Bg9mWYfMW8oD+PdMPlEwy5HNsR9JutYy6pMeOh61nw==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + + external-editor@3.1.0: + resolution: {integrity: sha512-hMQ4CX1p1izmuLYyZqLMO/qGNw10wSv9QDCPfzXfyFrOaCSSoRfqE1Kf1s5an66J5JZC62NewG+mK49jOCtQew==} + engines: {node: '>=4'} + + extract-zip@2.0.1: + resolution: {integrity: sha512-GDhU9ntwuKyGXdZBUgTIe+vXnWj0fppUEtMDL0+idd5Sta8TGpHssn/eusA9mrPr9qNDym6SxAYZjNvCn/9RBg==} + engines: {node: '>= 10.17.0'} + hasBin: true + + fast-deep-equal@2.0.1: + resolution: {integrity: sha512-bCK/2Z4zLidyB4ReuIsvALH6w31YfAQDmXMqMx6FyfHqvBxtjC0eRumeSu4Bs3XtXwpyIywtSTrVT99BxY1f9w==} + + fast-fifo@1.3.2: + resolution: {integrity: sha512-/d9sfos4yxzpwkDkuN7k2SqFKtYNmCTzgfEpz82x34IM9/zc8KGxQoXg1liNC/izpRM/MBdt44Nmx41ZWqk+FQ==} + + fast-xml-parser@4.5.3: + resolution: {integrity: sha512-RKihhV+SHsIUGXObeVy9AXiBbFwkVk7Syp8XgwN5U3JV416+Gwp/GO9i0JYKmikykgz/UHRrrV4ROuZEo/T0ig==} + hasBin: true + + fd-slicer@1.1.0: + resolution: {integrity: sha512-cE1qsB/VwyQozZ+q1dGxR8LBYNZeofhEdUNGSMbQD3Gw2lAzX9Zb3uIU6Ebc/Fmyjo9AWWfnn0AUCHqtevs/8g==} + + fetch-blob@3.2.0: + resolution: {integrity: sha512-7yAQpD2UMJzLi1Dqv7qFYnPbaPx7ZfFK6PiIxQ4PfkGPyNyl2Ugx+a/umUonmKqjhM4DnfbMvdX6otXq83soQQ==} + engines: {node: ^12.20 || >= 14.13} + + figures@6.1.0: + resolution: {integrity: sha512-d+l3qxjSesT4V7v2fh+QnmFnUWv9lSpjarhShNTgBOfA0ttejbQUAlHLitbjkoRiDulW0OPoQPYIGhIC8ohejg==} + engines: {node: '>=18'} + + filelist@1.0.4: + resolution: {integrity: sha512-w1cEuf3S+DrLCQL7ET6kz+gmlJdbq9J7yXCSjK/OZCPA+qEN1WyF4ZAf0YYJa4/shHJra2t/d/r8SV4Ji+x+8Q==} + + fill-range@7.1.1: + resolution: {integrity: sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==} + engines: {node: '>=8'} + + find-up@6.3.0: + resolution: {integrity: sha512-v2ZsoEuVHYy8ZIlYqwPe/39Cy+cFDzp4dXPaxNvkEuouymu+2Jbz0PxpKarJHYJTmv2HWT3O382qY8l4jMWthw==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + + foreground-child@3.3.0: + resolution: {integrity: sha512-Ld2g8rrAyMYFXBhEqMz8ZAHBi4J4uS1i/CxGMDnjyFWddMXLVcDp051DZfu+t7+ab7Wv6SMqpWmyFIj5UbfFvg==} + engines: {node: '>=14'} + + formdata-polyfill@4.0.10: + resolution: {integrity: sha512-buewHzMvYL29jdeQTVILecSaZKnt/RJWjoZCF5OW60Z67/GmSLBkOFM7qh1PI3zFNtJbaZL5eQu1vLfazOwj4g==} + engines: {node: '>=12.20.0'} + + fsevents@2.3.2: + resolution: {integrity: sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==} + engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0} + os: [darwin] + + fsevents@2.3.3: + resolution: {integrity: sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==} + engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0} + os: [darwin] + + geckodriver@5.0.0: + resolution: {integrity: sha512-vn7TtQ3b9VMJtVXsyWtQQl1fyBVFhQy7UvJF96kPuuJ0or5THH496AD3eUyaDD11+EqCxH9t6V+EP9soZQk4YQ==} + engines: {node: '>=18.0.0'} + hasBin: true + + get-caller-file@2.0.5: + resolution: {integrity: sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==} + engines: {node: 6.* || 8.* || >= 10.*} + + get-port@7.1.0: + resolution: {integrity: sha512-QB9NKEeDg3xxVwCCwJQ9+xycaz6pBB6iQ76wiWMl1927n0Kir6alPiP+yuiICLLU4jpMe08dXfpebuQppFA2zw==} + engines: {node: '>=16'} + + get-stream@5.2.0: + resolution: {integrity: sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==} + engines: {node: '>=8'} + + get-stream@9.0.1: + resolution: {integrity: sha512-kVCxPF3vQM/N0B1PmoqVUqgHP+EeVjmZSQn+1oCRPxd2P21P2F19lIgbR3HBosbB1PUhOAoctJnfEn2GbN2eZA==} + engines: {node: '>=18'} + + get-tsconfig@4.10.0: + resolution: {integrity: sha512-kGzZ3LWWQcGIAmg6iWvXn0ei6WDtV26wzHRMwDSzmAbcXrTEXxHy6IehI6/4eT6VRKyMP1eF1VqwrVUmE/LR7A==} + + get-uri@6.0.4: + resolution: {integrity: sha512-E1b1lFFLvLgak2whF2xDBcOy6NLVGZBqqjJjsIhvopKfWWEi64pLVTWWehV8KlLerZkfNTA95sTe2OdJKm1OzQ==} + engines: {node: '>= 14'} + + glob@10.4.5: + resolution: {integrity: sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg==} + hasBin: true + + graceful-fs@4.2.11: + resolution: {integrity: sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==} + + grapheme-splitter@1.0.4: + resolution: {integrity: sha512-bzh50DW9kTPM00T8y4o8vQg89Di9oLJVLW/KaOGIXJWP/iqCN6WKYkbNOF04vFLJhwcpYUh9ydh/+5vpOqV4YQ==} + + graphql@16.10.0: + resolution: {integrity: sha512-AjqGKbDGUFRKIRCP9tCKiIGHyriz2oHEbPIbEtcSLSs4YjReZOIPQQWek4+6hjw62H9QShXHyaGivGiYVLeYFQ==} + engines: {node: ^12.22.0 || ^14.16.0 || ^16.0.0 || >=17.0.0} + + has-flag@4.0.0: + resolution: {integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==} + engines: {node: '>=8'} + + headers-polyfill@4.0.3: + resolution: {integrity: sha512-IScLbePpkvO846sIwOtOTDjutRMWdXdJmXdMvk6gCBHxFO8d+QKOQedyZSxFTTFYRSmlgSTDtXqqq4pcenBXLQ==} + + hosted-git-info@7.0.2: + resolution: {integrity: sha512-puUZAUKT5m8Zzvs72XWy3HtvVbTWljRE66cP60bxJzAqf2DgICo7lYTY2IHUmLnNpjYvw5bvmoHvPc0QO2a62w==} + engines: {node: ^16.14.0 || >=18.0.0} + + html-escaper@2.0.2: + resolution: {integrity: sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==} + + htmlfy@0.6.5: + resolution: {integrity: sha512-2idle1yo+Ft3ttDc4cZkVPaWBS5F15Pyrq4XGecSxF2ksqZVUzuCTd0OXar1vxq9UDQX/lzfr/iDwYo3aRuOTA==} + + htmlparser2@9.1.0: + resolution: {integrity: sha512-5zfg6mHUoaer/97TxnGpxmbR7zJtPwIYFMZ/H5ucTlPZhKvtum05yiPK3Mgai3a0DyVxv7qYqoweaEd2nrYQzQ==} + + http-proxy-agent@7.0.2: + resolution: {integrity: sha512-T1gkAiYYDWYx3V5Bmyu7HcfcvL7mUrTWiM6yOfa3PIphViJ/gFPbvidQ+veqSOHci/PxBcDabeUNCzpOODJZig==} + engines: {node: '>= 14'} + + https-proxy-agent@7.0.6: + resolution: {integrity: sha512-vK9P5/iUfdl95AI+JVyUuIcVtd4ofvtrOr3HNtM2yxC9bnMbEdp3x01OhQNnjb8IJYi38VlTE3mBXwcfvywuSw==} + engines: {node: '>= 14'} + + human-signals@8.0.1: + resolution: {integrity: sha512-eKCa6bwnJhvxj14kZk5NCPc6Hb6BdsU9DZcOnmQKSnO1VKrfV0zCvtttPZUsBvjmNDn8rpcJfpwSYnHBjc95MQ==} + engines: {node: '>=18.18.0'} + + iconv-lite@0.4.24: + resolution: {integrity: sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==} + engines: {node: '>=0.10.0'} + + iconv-lite@0.6.3: + resolution: {integrity: sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==} + engines: {node: '>=0.10.0'} + + ieee754@1.2.1: + resolution: {integrity: sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==} + + immediate@3.0.6: + resolution: {integrity: sha512-XXOFtyqDjNDAQxVfYxuF7g9Il/IbWmmlQg2MYKOH8ExIT1qg6xc4zyS3HaEEATgs1btfzxq15ciUiY7gjSXRGQ==} + + import-meta-resolve@4.1.0: + resolution: {integrity: sha512-I6fiaX09Xivtk+THaMfAwnA3MVA5Big1WHF1Dfx9hFuvNIWpXnorlkzhcQf6ehrqQiiZECRt1poOAkPmer3ruw==} + + inherits@2.0.4: + resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==} + + inquirer@11.1.0: + resolution: {integrity: sha512-CmLAZT65GG/v30c+D2Fk8+ceP6pxD6RL+hIUOWAltCmeyEqWYwqu9v76q03OvjyZ3AB0C1Ala2stn1z/rMqGEw==} + engines: {node: '>=18'} + + ip-address@9.0.5: + resolution: {integrity: sha512-zHtQzGojZXTwZTHQqra+ETKd4Sn3vgi7uBmlPoXVWZqYvuKmtI0l/VZTjqGmJY9x88GGOaZ9+G9ES8hC4T4X8g==} + engines: {node: '>= 12'} + + is-arrayish@0.2.1: + resolution: {integrity: sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==} + + is-fullwidth-code-point@3.0.0: + resolution: {integrity: sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==} + engines: {node: '>=8'} + + is-node-process@1.2.0: + resolution: {integrity: sha512-Vg4o6/fqPxIjtxgUH5QLJhwZ7gW5diGCVlXpuUfELC62CuxM1iHcRe51f2W1FDy04Ai4KJkagKjx3XaqyfRKXw==} + + is-number@7.0.0: + resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==} + engines: {node: '>=0.12.0'} + + is-plain-obj@4.1.0: + resolution: {integrity: sha512-+Pgi+vMuUNkJyExiMBt5IlFoMyKnr5zhJ4Uspz58WOhBF5QoIZkFyNHIbBAtHwzVAgk5RtndVNsDRN61/mmDqg==} + engines: {node: '>=12'} + + is-stream@2.0.1: + resolution: {integrity: sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==} + engines: {node: '>=8'} + + is-stream@4.0.1: + resolution: {integrity: sha512-Dnz92NInDqYckGEUJv689RbRiTSEHCQ7wOVeALbkOz999YpqT46yMRIGtSNl2iCL1waAZSx40+h59NV/EwzV/A==} + engines: {node: '>=18'} + + is-unicode-supported@2.1.0: + resolution: {integrity: sha512-mE00Gnza5EEB3Ds0HfMyllZzbBrmLOX3vfWoj9A9PEnTfratQ/BcaJOuMhnkhjXvb2+FkY3VuHqtAGpTPmglFQ==} + engines: {node: '>=18'} + + isarray@1.0.0: + resolution: {integrity: sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==} + + isexe@2.0.0: + resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==} + + isexe@3.1.1: + resolution: {integrity: sha512-LpB/54B+/2J5hqQ7imZHfdU31OlgQqx7ZicVlkm9kzg9/w8GKLEcFfJl/t7DCEDueOyBAD6zCCwTO6Fzs0NoEQ==} + engines: {node: '>=16'} + + istanbul-lib-coverage@3.2.2: + resolution: {integrity: sha512-O8dpsF+r0WV/8MNRKfnmrtCWhuKjxrq2w+jpzBL5UZKTi2LeVWnWOmWRxFlesJONmc+wLAGvKQZEOanko0LFTg==} + engines: {node: '>=8'} + + istanbul-lib-report@3.0.1: + resolution: {integrity: sha512-GCfE1mtsHGOELCU8e/Z7YWzpmybrx/+dSTfLrvY8qRmaY6zXTKWn6WQIjaAFw069icm6GVMNkgu0NzI4iPZUNw==} + engines: {node: '>=10'} + + istanbul-lib-source-maps@5.0.6: + resolution: {integrity: sha512-yg2d+Em4KizZC5niWhQaIomgf5WlL4vOOjZ5xGCmF8SnPE/mDWWXgvRExdcpCgh9lLRRa1/fSYp2ymmbJ1pI+A==} + engines: {node: '>=10'} + + istanbul-reports@3.1.7: + resolution: {integrity: sha512-BewmUXImeuRk2YY0PVbxgKAysvhRPUQE0h5QRM++nVWyubKGV0l8qQ5op8+B2DOmwSe63Jivj0BjkPQVf8fP5g==} + engines: {node: '>=8'} + + jackspeak@3.4.3: + resolution: {integrity: sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw==} + + jake@10.9.2: + resolution: {integrity: sha512-2P4SQ0HrLQ+fw6llpLnOaGAvN2Zu6778SJMrCUwns4fOoG9ayrTiZk3VV8sCPkVZF8ab0zksVpS8FDY5pRCNBA==} + engines: {node: '>=10'} + hasBin: true + + jest-diff@29.7.0: + resolution: {integrity: sha512-LMIgiIrhigmPrs03JHpxUh2yISK3vLFPkAodPeo0+BuF7wA2FoQbkEg1u8gBYBThncu7e1oEDUfIXVuTqLRUjw==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + + jest-get-type@29.6.3: + resolution: {integrity: sha512-zrteXnqYxfQh7l5FHyL38jL39di8H8rHoecLH3JNxH3BwOrBsNeabdap5e0I23lD4HHI8W5VFBZqG4Eaq5LNcw==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + + jest-matcher-utils@29.7.0: + resolution: {integrity: sha512-sBkD+Xi9DtcChsI3L3u0+N0opgPYnCRPtGcQYrgXmR+hmt/fYfWAL0xRXYU8eWOdfuLgBe0YCW3AFtnRLagq/g==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + + jest-message-util@29.7.0: + resolution: {integrity: sha512-GBEV4GRADeP+qtB2+6u61stea8mGcOT4mCtrYISZwfu9/ISHFJ/5zOMXYbpBE9RsS5+Gb63DW4FgmnKJ79Kf6w==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + + jest-util@29.7.0: + resolution: {integrity: sha512-z6EbKajIpqGKU56y5KBUgy1dt1ihhQJgWzUlZHArA/+X2ad7Cb5iF+AK1EWVL/Bo7Rz9uurpqw6SiBCefUbCGA==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + + js-tokens@4.0.0: + resolution: {integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==} + + jsbn@1.1.0: + resolution: {integrity: sha512-4bYVV3aAMtDTTu4+xsDYa6sy9GyJ69/amsu9sYF2zqjiEoZA5xJi3BrfX3uY+/IekIu7MwdObdbDWpoZdBv3/A==} + + json-parse-even-better-errors@3.0.2: + resolution: {integrity: sha512-fi0NG4bPjCHunUJffmLd0gxssIgkNmArMvis4iNah6Owg1MCJjWhEcDLmsK6iGkJq3tHwbDkTlce70/tmXN4cQ==} + engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} + + jszip@3.10.1: + resolution: {integrity: sha512-xXDvecyTpGLrqFrvkrUSoxxfJI5AH7U8zxxtVclpsUtMCq4JQ290LY8AW5c7Ggnr/Y/oK+bQMbqK2qmtk3pN4g==} + + lazystream@1.0.1: + resolution: {integrity: sha512-b94GiNHQNy6JNTrt5w6zNyffMrNkXZb3KTkCZJb2V1xaEGCk093vkZ2jk3tpaeP33/OiXC+WvK9AxUebnf5nbw==} + engines: {node: '>= 0.6.3'} + + lie@3.3.0: + resolution: {integrity: sha512-UaiMJzeWRlEujzAuw5LokY1L5ecNQYZKfmyZ9L7wDHb/p5etKaxXhohBcrw0EYby+G/NA52vRSN4N39dxHAIwQ==} + + lines-and-columns@2.0.4: + resolution: {integrity: sha512-wM1+Z03eypVAVUCE7QdSqpVIvelbOakn1M0bPDoA4SGWPx3sNDVUiMo3L6To6WWGClB7VyXnhQ4Sn7gxiJbE6A==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + + locate-app@2.5.0: + resolution: {integrity: sha512-xIqbzPMBYArJRmPGUZD9CzV9wOqmVtQnaAn3wrj3s6WYW0bQvPI7x+sPYUGmDTYMHefVK//zc6HEYZ1qnxIK+Q==} + + locate-path@7.2.0: + resolution: {integrity: sha512-gvVijfZvn7R+2qyPX8mAuKcFGDf6Nc61GdvGafQsHL0sBIxfKzA+usWn4GFC/bk+QdwPUD4kWFJLhElipq+0VA==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + + lodash.clonedeep@4.5.0: + resolution: {integrity: sha512-H5ZhCF25riFd9uB5UCkVKo61m3S/xZk1x4wA6yp/L3RFP6Z/eHH1ymQcGLo7J3GMPfm0V/7m1tryHuGVxpqEBQ==} + + lodash.flattendeep@4.4.0: + resolution: {integrity: sha512-uHaJFihxmJcEX3kT4I23ABqKKalJ/zDrDg0lsFtc1h+3uw49SIJ5beyhx5ExVRti3AvKoOJngIj7xz3oylPdWQ==} + + lodash.isequal@4.5.0: + resolution: {integrity: sha512-pDo3lu8Jhfjqls6GkMgpahsF9kCyayhgykjyLMNFTKWrpVdAQtYyB4muAMWozBB4ig/dtWAmsMxLEI8wuz+DYQ==} + deprecated: This package is deprecated. Use require('node:util').isDeepStrictEqual instead. + + lodash.pickby@4.6.0: + resolution: {integrity: sha512-AZV+GsS/6ckvPOVQPXSiFFacKvKB4kOQu6ynt9wz0F3LO4R9Ij4K1ddYsIytDpSgLz88JHd9P+oaLeej5/Sl7Q==} + + lodash.union@4.6.0: + resolution: {integrity: sha512-c4pB2CdGrGdjMKYLA+XiRDO7Y0PRQbm/Gzg8qMj+QH+pFVAoTp5sBpO0odL3FjoPCGjK96p6qsP+yQoiLoOBcw==} + + lodash.zip@4.2.0: + resolution: {integrity: sha512-C7IOaBBK/0gMORRBd8OETNx3kmOkgIWIPvyDpZSCTwUrpYmgZwJkjZeOD8ww4xbOUOs4/attY+pciKvadNfFbg==} + + lodash@4.17.21: + resolution: {integrity: sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==} + + loglevel-plugin-prefix@0.8.4: + resolution: {integrity: sha512-WpG9CcFAOjz/FtNht+QJeGpvVl/cdR6P0z6OcXSkr8wFJOsV2GRj2j10JLfjuA4aYkcKCNIEqRGCyTife9R8/g==} + + loglevel@1.9.2: + resolution: {integrity: sha512-HgMmCqIJSAKqo68l0rS2AanEWfkxaZ5wNiEFb5ggm08lDs9Xl2KxBlX3PTcaD2chBM1gXAYf491/M2Rv8Jwayg==} + engines: {node: '>= 0.6.0'} + + loupe@3.1.3: + resolution: {integrity: sha512-kkIp7XSkP78ZxJEsSxW3712C6teJVoeHHwgo9zJ380de7IYyJ2ISlxojcH2pC5OFLewESmnRi/+XCDIEEVyoug==} + + lru-cache@10.4.3: + resolution: {integrity: sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==} + + lru-cache@7.18.3: + resolution: {integrity: sha512-jumlc0BIUrS3qJGgIkWZsyfAM7NCWiBcCDhnd+3NNM5KbBmLTgHVfWBcg6W+rLUsIpzpERPsvwUP7CckAQSOoA==} + engines: {node: '>=12'} + + lz-string@1.5.0: + resolution: {integrity: sha512-h5bgJWpxJNswbU7qCrV0tIKQCaS3blPDrqKWx+QxzuzL1zGUzij9XCWLrSLsJPu5t+eWA/ycetzYAO5IOMcWAQ==} + hasBin: true + + magic-string@0.30.17: + resolution: {integrity: sha512-sNPKHvyjVf7gyjwS4xGTaW/mCnF8wnjtifKBEhxfZ7E/S8tQ0rssrwGNn6q8JH/ohItJfSQp9mBtQYuTlH5QnA==} + + magicast@0.3.5: + resolution: {integrity: sha512-L0WhttDl+2BOsybvEOLK7fW3UA0OQ0IQ2d6Zl2x/a6vVRs3bAY0ECOSHHeL5jD+SbOpOCUEi0y1DgHEn9Qn1AQ==} + + make-dir@4.0.0: + resolution: {integrity: sha512-hXdUTZYIVOt1Ex//jAQi+wTZZpUpwBj/0QsOzqegb3rGMMeJiSEu5xLHnYfBrRV4RH2+OCSOO95Is/7x1WJ4bw==} + engines: {node: '>=10'} + + micromatch@4.0.8: + resolution: {integrity: sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==} + engines: {node: '>=8.6'} + + minimatch@3.1.2: + resolution: {integrity: sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==} + + minimatch@5.1.6: + resolution: {integrity: sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==} + engines: {node: '>=10'} + + minimatch@9.0.5: + resolution: {integrity: sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==} + engines: {node: '>=16 || 14 >=14.17'} + + minipass@7.1.2: + resolution: {integrity: sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==} + engines: {node: '>=16 || 14 >=14.17'} + + mrmime@2.0.0: + resolution: {integrity: sha512-eu38+hdgojoyq63s+yTpN4XMBdt5l8HhMhc4VKLO9KM5caLIBvUm4thi7fFaxyTmCKeNnXZ5pAlBwCUnhA09uw==} + engines: {node: '>=10'} + + ms@2.1.3: + resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==} + + msw@2.7.3: + resolution: {integrity: sha512-+mycXv8l2fEAjFZ5sjrtjJDmm2ceKGjrNbBr1durRg6VkU9fNUE/gsmQ51hWbHqs+l35W1iM+ZsmOD9Fd6lspw==} + engines: {node: '>=18'} + hasBin: true + peerDependencies: + typescript: '>= 4.8.x' + peerDependenciesMeta: + typescript: + optional: true + + mute-stream@1.0.0: + resolution: {integrity: sha512-avsJQhyd+680gKXyG/sQc0nXaC6rBkPOfyHYcFb9+hdkqQkR9bdnkJ0AMZhke0oesPqIO+mFFJ+IdBc7mst4IA==} + engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} + + mute-stream@2.0.0: + resolution: {integrity: sha512-WWdIxpyjEn+FhQJQQv9aQAYlHoNVdzIzUySNV1gHUPDSdZJ3yZn7pAAbQcV7B56Mvu881q9FZV+0Vx2xC44VWA==} + engines: {node: ^18.17.0 || >=20.5.0} + + nanoid@3.3.8: + resolution: {integrity: sha512-WNLf5Sd8oZxOm+TzppcYk8gVOgP+l58xNy58D0nbUnOxOWRWvlcCV4kUF7ltmI6PsrLl/BgKEyS4mqsGChFN0w==} + engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} + hasBin: true + + netmask@2.0.2: + resolution: {integrity: sha512-dBpDMdxv9Irdq66304OLfEmQ9tbNRFnFTuZiLo+bD+r332bBmMJ8GBLXklIXXgxd3+v9+KUnZaUR5PJMa75Gsg==} + engines: {node: '>= 0.4.0'} + + node-domexception@1.0.0: + resolution: {integrity: sha512-/jKZoMpw0F8GRwl4/eLROPA3cfcXtLApP0QzLmUT/HuPCZWyB7IY9ZrMeKw2O/nFIqPQB3PVM9aYm0F312AXDQ==} + engines: {node: '>=10.5.0'} + + node-fetch@3.3.2: + resolution: {integrity: sha512-dRB78srN/l6gqWulah9SrxeYnxeddIG30+GOqK/9OlLVyLg3HPnr6SqOWTWOXKRwC2eGYCkZ59NNuSgvSrpgOA==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + + normalize-package-data@6.0.2: + resolution: {integrity: sha512-V6gygoYb/5EmNI+MEGrWkC+e6+Rr7mTmfHrxDbLzxQogBkgzo76rkok0Am6thgSF7Mv2nLOajAJj5vDJZEFn7g==} + engines: {node: ^16.14.0 || >=18.0.0} + + normalize-path@3.0.0: + resolution: {integrity: sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==} + engines: {node: '>=0.10.0'} + + npm-run-path@6.0.0: + resolution: {integrity: sha512-9qny7Z9DsQU8Ou39ERsPU4OZQlSTP47ShQzuKZ6PRXpYLtIFgl/DEBYEXKlvcEa+9tHVcK8CF81Y2V72qaZhWA==} + engines: {node: '>=18'} + + nth-check@2.1.1: + resolution: {integrity: sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w==} + + once@1.4.0: + resolution: {integrity: sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==} + + os-tmpdir@1.0.2: + resolution: {integrity: sha512-D2FR03Vir7FIu45XBY20mTb+/ZSWB00sjU9jdQXt83gDrI4Ztz5Fs7/yy74g2N5SVQY4xY1qDr4rNddwYRVX0g==} + engines: {node: '>=0.10.0'} + + outvariant@1.4.3: + resolution: {integrity: sha512-+Sl2UErvtsoajRDKCE5/dBz4DIvHXQQnAxtQTF04OJxY0+DyZXSo5P5Bb7XYWOh81syohlYL24hbDwxedPUJCA==} + + p-limit@4.0.0: + resolution: {integrity: sha512-5b0R4txpzjPWVw/cXXUResoD4hb6U/x9BH08L7nw+GN1sezDzPdxeRvpc9c433fZhBan/wusjbCsqwqm4EIBIQ==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + + p-locate@6.0.0: + resolution: {integrity: sha512-wPrq66Llhl7/4AGC6I+cqxT07LhXvWL08LNXz1fENOw0Ap4sRZZ/gZpTTJ5jpurzzzfS2W/Ge9BY3LgLjCShcw==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + + pac-proxy-agent@7.2.0: + resolution: {integrity: sha512-TEB8ESquiLMc0lV8vcd5Ql/JAKAoyzHFXaStwjkzpOpC5Yv+pIzLfHvjTSdf3vpa2bMiUQrg9i6276yn8666aA==} + engines: {node: '>= 14'} + + pac-resolver@7.0.1: + resolution: {integrity: sha512-5NPgf87AT2STgwa2ntRMr45jTKrYBGkVU36yT0ig/n/GMAa3oPqhZfIQ2kMEimReg0+t9kZViDVZ83qfVUlckg==} + engines: {node: '>= 14'} + + package-json-from-dist@1.0.1: + resolution: {integrity: sha512-UEZIS3/by4OC8vL3P2dTXRETpebLI2NiI5vIrjaD/5UtrkFX/tNbwjTSRAGC/+7CAo2pIcBaRgWmcBBHcsaCIw==} + + pako@1.0.11: + resolution: {integrity: sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw==} + + parse-json@7.1.1: + resolution: {integrity: sha512-SgOTCX/EZXtZxBE5eJ97P4yGM5n37BwRU+YMsH4vNzFqJV/oWFXXCmwFlgWUM4PrakybVOueJJ6pwHqSVhTFDw==} + engines: {node: '>=16'} + + parse-ms@4.0.0: + resolution: {integrity: sha512-TXfryirbmq34y8QBwgqCVLi+8oA3oWx2eAnSn62ITyEhEYaWRlVZ2DvMM9eZbMs/RfxPu/PK/aBLyGj4IrqMHw==} + engines: {node: '>=18'} + + parse5-htmlparser2-tree-adapter@7.1.0: + resolution: {integrity: sha512-ruw5xyKs6lrpo9x9rCZqZZnIUntICjQAd0Wsmp396Ul9lN/h+ifgVV1x1gZHi8euej6wTfpqX8j+BFQxF0NS/g==} + + parse5-parser-stream@7.1.2: + resolution: {integrity: sha512-JyeQc9iwFLn5TbvvqACIF/VXG6abODeB3Fwmv/TGdLk2LfbWkaySGY72at4+Ty7EkPZj854u4CrICqNk2qIbow==} + + parse5@7.2.1: + resolution: {integrity: sha512-BuBYQYlv1ckiPdQi/ohiivi9Sagc9JG+Ozs0r7b/0iK3sKmrb0b9FdWdBbOdx6hBCM/F9Ir82ofnBhtZOjCRPQ==} + + path-exists@5.0.0: + resolution: {integrity: sha512-RjhtfwJOxzcFmNOi6ltcbcu4Iu+FL3zEj83dk4kAS+fVpTxXLO1b38RvJgT/0QwvV/L3aY9TAnyv0EOqW4GoMQ==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + + path-key@3.1.1: + resolution: {integrity: sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==} + engines: {node: '>=8'} + + path-key@4.0.0: + resolution: {integrity: sha512-haREypq7xkM7ErfgIyA0z+Bj4AGKlMSdlQE2jvJo6huWD1EdkKYV+G/T4nq0YEF2vgTT8kqMFKo1uHn950r4SQ==} + engines: {node: '>=12'} + + path-scurry@1.11.1: + resolution: {integrity: sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA==} + engines: {node: '>=16 || 14 >=14.18'} + + path-to-regexp@6.3.0: + resolution: {integrity: sha512-Yhpw4T9C6hPpgPeA28us07OJeqZ5EzQTkbfwuhsUg0c237RomFoETJgmp2sa3F/41gfLE6G5cqcYwznmeEeOlQ==} + + pathe@1.1.2: + resolution: {integrity: sha512-whLdWMYL2TwI08hn8/ZqAbrVemu0LNaNNJZX73O6qaIdCTfXutsLhMkjdENX0qhsQ9uIimo4/aQOmXkoon2nDQ==} + + pathe@2.0.3: + resolution: {integrity: sha512-WUjGcAqP1gQacoQe+OBJsFA7Ld4DyXuUIjZ5cc75cLHvJ7dtNsTugphxIADwspS+AraAUePCKrSVtPLFj/F88w==} + + pathval@2.0.0: + resolution: {integrity: sha512-vE7JKRyES09KiunauX7nd2Q9/L7lhok4smP9RZTDeD4MVs72Dp2qNFVz39Nz5a0FVEW0BJR6C0DYrq6unoziZA==} + engines: {node: '>= 14.16'} + + pend@1.2.0: + resolution: {integrity: sha512-F3asv42UuXchdzt+xXqfW1OGlVBe+mxa2mqI0pg5yAHZPvFmY3Y6drSf/GQ1A86WgWEN9Kzh/WrgKa6iGcHXLg==} + + picocolors@1.1.1: + resolution: {integrity: sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==} + + picomatch@2.3.1: + resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==} + engines: {node: '>=8.6'} + + playwright-core@1.51.1: + resolution: {integrity: sha512-/crRMj8+j/Nq5s8QcvegseuyeZPxpQCZb6HNk3Sos3BlZyAknRjoyJPFWkpNn8v0+P3WiwqFF8P+zQo4eqiNuw==} + engines: {node: '>=18'} + hasBin: true + + playwright@1.51.1: + resolution: {integrity: sha512-kkx+MB2KQRkyxjYPc3a0wLZZoDczmppyGJIvQ43l+aZihkaVvmu/21kiyaHeHjiFxjxNNFnUncKmcGIyOojsaw==} + engines: {node: '>=18'} + hasBin: true + + postcss@8.5.2: + resolution: {integrity: sha512-MjOadfU3Ys9KYoX0AdkBlFEF1Vx37uCCeN4ZHnmwm9FfpbsGWMZeBLMmmpY+6Ocqod7mkdZ0DT31OlbsFrLlkA==} + engines: {node: ^10 || ^12 || >=14} + + pretty-format@27.5.1: + resolution: {integrity: sha512-Qb1gy5OrP5+zDf2Bvnzdl3jsTf1qXVMazbvCoKhtKqVs4/YK4ozX4gKQJJVyNe+cajNPn0KoC0MC3FUmaHWEmQ==} + engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} + + pretty-format@29.7.0: + resolution: {integrity: sha512-Pdlw/oPxN+aXdmM9R00JVC9WVFoCLTKJvDVLgmJ+qAffBMxsV85l/Lu7sNx4zSzPyoL2euImuEwHhOXdEgNFZQ==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + + pretty-ms@9.2.0: + resolution: {integrity: sha512-4yf0QO/sllf/1zbZWYnvWw3NxCQwLXKzIj0G849LSufP15BXKM0rbD2Z3wVnkMfjdn/CB0Dpp444gYAACdsplg==} + engines: {node: '>=18'} + + process-nextick-args@2.0.1: + resolution: {integrity: sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==} + + process@0.11.10: + resolution: {integrity: sha512-cdGef/drWFoydD1JsMzuFf8100nZl+GT+yacc2bEced5f9Rjk4z+WtFUTBu9PhOi9j/jfmBPu0mMEY4wIdAF8A==} + engines: {node: '>= 0.6.0'} + + progress@2.0.3: + resolution: {integrity: sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==} + engines: {node: '>=0.4.0'} + + proxy-agent@6.5.0: + resolution: {integrity: sha512-TmatMXdr2KlRiA2CyDu8GqR8EjahTG3aY3nXjdzFyoZbmB8hrBsTyMezhULIXKnC0jpfjlmiZ3+EaCzoInSu/A==} + engines: {node: '>= 14'} + + proxy-from-env@1.1.0: + resolution: {integrity: sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==} + + psl@1.15.0: + resolution: {integrity: sha512-JZd3gMVBAVQkSs6HdNZo9Sdo0LNcQeMNP3CozBJb3JYC/QUYZTnKxP+f8oWRX4rHP5EurWxqAHTSwUCjlNKa1w==} + + pump@3.0.2: + resolution: {integrity: sha512-tUPXtzlGM8FE3P0ZL6DVs/3P58k9nk8/jZeQCurTJylQA8qFYzHFfhBJkuqyE0FifOsQ0uKWekiZ5g8wtr28cw==} + + punycode@2.3.1: + resolution: {integrity: sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==} + engines: {node: '>=6'} + + query-selector-shadow-dom@1.0.1: + resolution: {integrity: sha512-lT5yCqEBgfoMYpf3F2xQRK7zEr1rhIIZuceDK6+xRkJQ4NMbHTwXqk4NkwDwQMNqXgG9r9fyHnzwNVs6zV5KRw==} + + querystringify@2.2.0: + resolution: {integrity: sha512-FIqgj2EUvTa7R50u0rGsyTftzjYmv/a3hO345bZNrqabNqjtgiDMgmo4mkUjd+nzU5oF3dClKqFIPUKybUyqoQ==} + + react-is@17.0.2: + resolution: {integrity: sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w==} + + react-is@18.3.1: + resolution: {integrity: sha512-/LLMVyas0ljjAtoYiPqYiL8VWXzUUdThrmU5+n20DZv+a+ClRoevUzw5JxU+Ieh5/c87ytoTBV9G1FiKfNJdmg==} + + read-pkg-up@10.1.0: + resolution: {integrity: sha512-aNtBq4jR8NawpKJQldrQcSW9y/d+KWH4v24HWkHljOZ7H0av+YTGANBzRh9A5pw7v/bLVsLVPpOhJ7gHNVy8lA==} + engines: {node: '>=16'} + + read-pkg@8.1.0: + resolution: {integrity: sha512-PORM8AgzXeskHO/WEv312k9U03B8K9JSiWF/8N9sUuFjBa+9SF2u6K7VClzXwDXab51jCd8Nd36CNM+zR97ScQ==} + engines: {node: '>=16'} + + readable-stream@2.3.8: + resolution: {integrity: sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==} + + readable-stream@4.7.0: + resolution: {integrity: sha512-oIGGmcpTLwPga8Bn6/Z75SVaH1z5dUut2ibSyAMVhmUggWpmDn2dapB0n7f8nwaSiRtepAsfJyfXIO5DCVAODg==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + + readdir-glob@1.1.3: + resolution: {integrity: sha512-v05I2k7xN8zXvPD9N+z/uhXPaj0sUFCe2rcWZIpBsqxfP7xXFQ0tipAd/wjj1YxWyWtUS5IDJpOG82JKt2EAVA==} + + readdirp@4.1.2: + resolution: {integrity: sha512-GDhwkLfywWL2s6vEjyhri+eXmfH6j1L7JE27WhqLeYzoh/A3DBaYGEj2H/HFZCn/kMfim73FXxEJTw06WtxQwg==} + engines: {node: '>= 14.18.0'} + + recursive-readdir@2.2.3: + resolution: {integrity: sha512-8HrF5ZsXk5FAH9dgsx3BlUer73nIhuj+9OrQwEbLTPOBzGkL1lsFCR01am+v+0m2Cmbs1nP12hLDl5FA7EszKA==} + engines: {node: '>=6.0.0'} + + regenerator-runtime@0.14.1: + resolution: {integrity: sha512-dYnhHh0nJoMfnkZs6GmmhFknAGRrLznOu5nc9ML+EJxGvrx6H7teuevqVqCuPcPK//3eDrrjQhehXVx9cnkGdw==} + + require-directory@2.1.1: + resolution: {integrity: sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==} + engines: {node: '>=0.10.0'} + + requires-port@1.0.0: + resolution: {integrity: sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ==} + + resolve-pkg-maps@1.0.0: + resolution: {integrity: sha512-seS2Tj26TBVOC2NIc2rOe2y2ZO7efxITtLZcGSOnHHNOQ7CkiUBfw0Iw2ck6xkIhPwLhKNLS8BO+hEpngQlqzw==} + + resq@1.11.0: + resolution: {integrity: sha512-G10EBz+zAAy3zUd/CDoBbXRL6ia9kOo3xRHrMDsHljI0GDkhYlyjwoCx5+3eCC4swi1uCoZQhskuJkj7Gp57Bw==} + + rgb2hex@0.2.5: + resolution: {integrity: sha512-22MOP1Rh7sAo1BZpDG6R5RFYzR2lYEgwq7HEmyW2qcsOqR2lQKmn+O//xV3YG/0rrhMC6KVX2hU+ZXuaw9a5bw==} + + rollup@4.34.6: + resolution: {integrity: sha512-wc2cBWqJgkU3Iz5oztRkQbfVkbxoz5EhnCGOrnJvnLnQ7O0WhQUYyv18qQI79O8L7DdHrrlJNeCHd4VGpnaXKQ==} + engines: {node: '>=18.0.0', npm: '>=8.0.0'} + hasBin: true + + run-async@3.0.0: + resolution: {integrity: sha512-540WwVDOMxA6dN6We19EcT9sc3hkXPw5mzRNGM3FkdN/vtE9NFvj5lFAPNwUDmJjXidm3v7TC1cTE7t17Ulm1Q==} + engines: {node: '>=0.12.0'} + + rxjs@7.8.2: + resolution: {integrity: sha512-dhKf903U/PQZY6boNNtAGdWbG85WAbjT/1xYoZIC7FAY0yWapOBQVsVrDl58W86//e1VpMNBtRV4MaXfdMySFA==} + + safaridriver@1.0.0: + resolution: {integrity: sha512-J92IFbskyo7OYB3Dt4aTdyhag1GlInrfbPCmMteb7aBK7PwlnGz1HI0+oyNN97j7pV9DqUAVoVgkNRMrfY47mQ==} + engines: {node: '>=18.0.0'} + + safe-buffer@5.1.2: + resolution: {integrity: sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==} + + safe-buffer@5.2.1: + resolution: {integrity: sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==} + + safer-buffer@2.1.2: + resolution: {integrity: sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==} + + semver@7.7.1: + resolution: {integrity: sha512-hlq8tAfn0m/61p4BVRcPzIGr6LKiMwo4VM6dGi6pt4qcRkmNzTcWq6eCEjEh+qXjkMDvPlOFFSGwQjoEa6gyMA==} + engines: {node: '>=10'} + hasBin: true + + serialize-error@11.0.3: + resolution: {integrity: sha512-2G2y++21dhj2R7iHAdd0FIzjGwuKZld+7Pl/bTU6YIkrC2ZMbVUjm+luj6A6V34Rv9XfKJDKpTWu9W4Gse1D9g==} + engines: {node: '>=14.16'} + + setimmediate@1.0.5: + resolution: {integrity: sha512-MATJdZp8sLqDl/68LfQmbP8zKPLQNV6BIZoIgrscFDQ+RsvK/BxeDQOgyxKKoh0y/8h3BqVFnCqQ/gd+reiIXA==} + + shebang-command@2.0.0: + resolution: {integrity: sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==} + engines: {node: '>=8'} + + shebang-regex@3.0.0: + resolution: {integrity: sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==} + engines: {node: '>=8'} + + siginfo@2.0.0: + resolution: {integrity: sha512-ybx0WO1/8bSBLEWXZvEd7gMW3Sn3JFlW3TvX1nREbDLRNQNaeNN8WK0meBwPdAaOI7TtRRRJn/Es1zhrrCHu7g==} + + signal-exit@4.1.0: + resolution: {integrity: sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==} + engines: {node: '>=14'} + + sirv@3.0.1: + resolution: {integrity: sha512-FoqMu0NCGBLCcAkS1qA+XJIQTR6/JHfQXl+uGteNCQ76T91DMUjPa9xfmeqMY3z80nLSg9yQmNjK0Px6RWsH/A==} + engines: {node: '>=18'} + + slash@3.0.0: + resolution: {integrity: sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==} + engines: {node: '>=8'} + + smart-buffer@4.2.0: + resolution: {integrity: sha512-94hK0Hh8rPqQl2xXc3HsaBoOXKV20MToPkcXvwbISWLEs+64sBq5kFgn2kJDHb1Pry9yrP0dxrCI9RRci7RXKg==} + engines: {node: '>= 6.0.0', npm: '>= 3.0.0'} + + socks-proxy-agent@8.0.5: + resolution: {integrity: sha512-HehCEsotFqbPW9sJ8WVYB6UbmIMv7kUUORIF2Nncq4VQvBfNBLibW9YZR5dlYCSUhwcD628pRllm7n+E+YTzJw==} + engines: {node: '>= 14'} + + socks@2.8.4: + resolution: {integrity: sha512-D3YaD0aRxR3mEcqnidIs7ReYJFVzWdd6fXJYUM8ixcQcJRGTka/b3saV0KflYhyVJXKhb947GndU35SxYNResQ==} + engines: {node: '>= 10.0.0', npm: '>= 3.0.0'} + + source-map-js@1.2.1: + resolution: {integrity: sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==} + engines: {node: '>=0.10.0'} + + source-map@0.6.1: + resolution: {integrity: sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==} + engines: {node: '>=0.10.0'} + + spacetrim@0.11.59: + resolution: {integrity: sha512-lLYsktklSRKprreOm7NXReW8YiX2VBjbgmXYEziOoGf/qsJqAEACaDvoTtUOycwjpaSh+bT8eu0KrJn7UNxiCg==} + + spdx-correct@3.2.0: + resolution: {integrity: sha512-kN9dJbvnySHULIluDHy32WHRUu3Og7B9sbY7tsFLctQkIqnMh3hErYgdMjTYuqmcXX+lK5T1lnUt3G7zNswmZA==} + + spdx-exceptions@2.5.0: + resolution: {integrity: sha512-PiU42r+xO4UbUS1buo3LPJkjlO7430Xn5SVAhdpzzsPHsjbYVflnnFdATgabnLude+Cqu25p6N+g2lw/PFsa4w==} + + spdx-expression-parse@3.0.1: + resolution: {integrity: sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==} + + spdx-license-ids@3.0.21: + resolution: {integrity: sha512-Bvg/8F5XephndSK3JffaRqdT+gyhfqIPwDHpX80tJrF8QQRYMo8sNMeaZ2Dp5+jhwKnUmIOyFFQfHRkjJm5nXg==} + + split2@4.2.0: + resolution: {integrity: sha512-UcjcJOWknrNkF6PLX83qcHM6KHgVKNkV62Y8a5uYDVv9ydGQVwAHMKqHdJje1VTWpljG0WYpCDhrCdAOYH4TWg==} + engines: {node: '>= 10.x'} + + sprintf-js@1.1.3: + resolution: {integrity: sha512-Oo+0REFV59/rz3gfJNKQiBlwfHaSESl1pcGyABQsnnIfWOFt6JNj5gCog2U6MLZ//IGYD+nA8nI+mTShREReaA==} + + stack-utils@2.0.6: + resolution: {integrity: sha512-XlkWvfIm6RmsWtNJx+uqtKLS8eqFbxUg0ZzLXqY0caEy9l7hruX8IpiDnjsLavoBgqCCR71TqWO8MaXYheJ3RQ==} + engines: {node: '>=10'} + + stackback@0.0.2: + resolution: {integrity: sha512-1XMJE5fQo1jGH6Y/7ebnwPOBEkIEnT4QF32d5R1+VXdXveM0IBMJt8zfaxX1P3QhVwrYe+576+jkANtSS2mBbw==} + + statuses@2.0.1: + resolution: {integrity: sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==} + engines: {node: '>= 0.8'} + + std-env@3.8.0: + resolution: {integrity: sha512-Bc3YwwCB+OzldMxOXJIIvC6cPRWr/LxOp48CdQTOkPyk/t4JWWJbrilwBd7RJzKV8QW7tJkcgAmeuLLJugl5/w==} + + streamx@2.22.0: + resolution: {integrity: sha512-sLh1evHOzBy/iWRiR6d1zRcLao4gGZr3C1kzNz4fopCOKJb6xD9ub8Mpi9Mr1R6id5o43S+d93fI48UC5uM9aw==} + + strict-event-emitter@0.5.1: + resolution: {integrity: sha512-vMgjE/GGEPEFnhFub6pa4FmJBRBVOLpIII2hvCZ8Kzb7K0hlHo7mQv6xYrBvCL2LtAIBwFUK8wvuJgTVSQ5MFQ==} + + string-width@4.2.3: + resolution: {integrity: sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==} + engines: {node: '>=8'} + + string-width@5.1.2: + resolution: {integrity: sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==} + engines: {node: '>=12'} + + string_decoder@1.1.1: + resolution: {integrity: sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==} + + string_decoder@1.3.0: + resolution: {integrity: sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==} + + strip-ansi@6.0.1: + resolution: {integrity: sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==} + engines: {node: '>=8'} + + strip-ansi@7.1.0: + resolution: {integrity: sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==} + engines: {node: '>=12'} + + strip-final-newline@4.0.0: + resolution: {integrity: sha512-aulFJcD6YK8V1G7iRB5tigAP4TsHBZZrOV8pjV++zdUwmeV8uzbY7yn6h9MswN62adStNZFuCIx4haBnRuMDaw==} + engines: {node: '>=18'} + + strnum@1.1.2: + resolution: {integrity: sha512-vrN+B7DBIoTTZjnPNewwhx6cBA/H+IS7rfW68n7XxC1y7uoiGQBxaKzqucGUgavX15dJgiGztLJ8vxuEzwqBdA==} + + supports-color@7.2.0: + resolution: {integrity: sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==} + engines: {node: '>=8'} + + tar-fs@3.0.8: + resolution: {integrity: sha512-ZoROL70jptorGAlgAYiLoBLItEKw/fUxg9BSYK/dF/GAGYFJOJJJMvjPAKDJraCXFwadD456FCuvLWgfhMsPwg==} + + tar-stream@3.1.7: + resolution: {integrity: sha512-qJj60CXt7IU1Ffyc3NJMjh6EkuCFej46zUqJ4J7pqYlThyd9bO0XBTmcOIhSzZJVWfsLks0+nle/j538YAW9RQ==} + + test-exclude@7.0.1: + resolution: {integrity: sha512-pFYqmTw68LXVjeWJMST4+borgQP2AyMNbg1BpZh9LbyhUeNkeaPF9gzfPGUAnSMV3qPYdWUwDIjjCLiSDOl7vg==} + engines: {node: '>=18'} + + text-decoder@1.2.3: + resolution: {integrity: sha512-3/o9z3X0X0fTupwsYvR03pJ/DjWuqqrfwBgTQzdWDiQSm9KitAyz/9WqsT2JQW7KV2m+bC2ol/zqpW37NHxLaA==} + + tinybench@2.9.0: + resolution: {integrity: sha512-0+DUvqWMValLmha6lr4kD8iAMK1HzV0/aKnCtWb9v9641TnP/MFb7Pc2bxoxQjTXAErryXVgUOfv2YqNllqGeg==} + + tinyexec@0.3.2: + resolution: {integrity: sha512-KQQR9yN7R5+OSwaK0XQoj22pwHoTlgYqmUscPYoknOoWCWfj/5/ABTMRi69FrKU5ffPVh5QcFikpWJI/P1ocHA==} + + tinypool@1.0.2: + resolution: {integrity: sha512-al6n+QEANGFOMf/dmUMsuS5/r9B06uwlyNjZZql/zv8J7ybHCgoihBNORZCY2mzUuAnomQa2JdhyHKzZxPCrFA==} + engines: {node: ^18.0.0 || >=20.0.0} + + tinyrainbow@1.2.0: + resolution: {integrity: sha512-weEDEq7Z5eTHPDh4xjX789+fHfF+P8boiFB+0vbWzpbnbsEr/GRaohi/uMKxg8RZMXnl1ItAi/IUHWMsjDV7kQ==} + engines: {node: '>=14.0.0'} + + tinyrainbow@2.0.0: + resolution: {integrity: sha512-op4nsTR47R6p0vMUUoYl/a+ljLFVtlfaXkLQmqfLR1qHma1h/ysYk4hEXZ880bf2CYgTskvTa/e196Vd5dDQXw==} + engines: {node: '>=14.0.0'} + + tinyspy@3.0.2: + resolution: {integrity: sha512-n1cw8k1k0x4pgA2+9XrOkFydTerNcJ1zWCO5Nn9scWHTD+5tp8dghT2x1uduQePZTZgd3Tupf+x9BxJjeJi77Q==} + engines: {node: '>=14.0.0'} + + tmp@0.0.33: + resolution: {integrity: sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==} + engines: {node: '>=0.6.0'} + + to-regex-range@5.0.1: + resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==} + engines: {node: '>=8.0'} + + totalist@3.0.1: + resolution: {integrity: sha512-sf4i37nQ2LBx4m3wB74y+ubopq6W/dIzXg0FDGjsYnZHVa1Da8FH853wlL2gtUhg+xJXjfk3kUZS3BRoQeoQBQ==} + engines: {node: '>=6'} + + tough-cookie@4.1.4: + resolution: {integrity: sha512-Loo5UUvLD9ScZ6jh8beX1T6sO1w2/MpCRpEP7V280GKMVUQ0Jzar2U3UJPsrdbziLEMMhu3Ujnq//rhiFuIeag==} + engines: {node: '>=6'} + + tslib@2.8.1: + resolution: {integrity: sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==} + + tsx@4.19.3: + resolution: {integrity: sha512-4H8vUNGNjQ4V2EOoGw005+c+dGuPSnhpPBPHBtsZdGZBk/iJb4kguGlPWaZTZ3q5nMtFOEsY0nRDlh9PJyd6SQ==} + engines: {node: '>=18.0.0'} + hasBin: true + + type-fest@0.21.3: + resolution: {integrity: sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==} + engines: {node: '>=10'} + + type-fest@2.19.0: + resolution: {integrity: sha512-RAH822pAdBgcNMAfWnCBU3CFZcfZ/i1eZjwFU/dsLKumyuuP3niueg2UAukXYF0E2AAoc82ZSSf9J0WQBinzHA==} + engines: {node: '>=12.20'} + + type-fest@3.13.1: + resolution: {integrity: sha512-tLq3bSNx+xSpwvAJnzrK0Ep5CLNWjvFTOp71URMaAEWBfRb9nnJiBoUe0tF8bI4ZFO3omgBR6NvnbzVUT3Ly4g==} + engines: {node: '>=14.16'} + + type-fest@4.26.0: + resolution: {integrity: sha512-OduNjVJsFbifKb57UqZ2EMP1i4u64Xwow3NYXUtBbD4vIwJdQd4+xl8YDou1dlm4DVrtwT/7Ky8z8WyCULVfxw==} + engines: {node: '>=16'} + + type-fest@4.34.1: + resolution: {integrity: sha512-6kSc32kT0rbwxD6QL1CYe8IqdzN/J/ILMrNK+HMQCKH3insCDRY/3ITb0vcBss0a3t72fzh2YSzj8ko1HgwT3g==} + engines: {node: '>=16'} + + undici-types@6.19.8: + resolution: {integrity: sha512-ve2KP6f/JnbPBFyobGHuerC9g1FYGn/F8n1LWTwNxCEzd6IfqTwUQcNXgEtmmQ6DlRrC1hrSrBnCZPokRrDHjw==} + + undici-types@6.20.0: + resolution: {integrity: sha512-Ny6QZ2Nju20vw1SRHe3d9jVu6gJ+4e3+MMpqu7pqE5HT6WsTSlce++GQmK5UXS8mzV8DSYHrQH+Xrf2jVcuKNg==} + + undici@6.21.2: + resolution: {integrity: sha512-uROZWze0R0itiAKVPsYhFov9LxrPMHLMEQFszeI2gCN6bnIIZ8twzBCJcN2LJrBBLfrP0t1FW0g+JmKVl8Vk1g==} + engines: {node: '>=18.17'} + + unicorn-magic@0.3.0: + resolution: {integrity: sha512-+QBBXBCvifc56fsbuxZQ6Sic3wqqc3WWaqxs58gvJrcOuN83HGTCwz3oS5phzU9LthRNE9VrJCFCLUgHeeFnfA==} + engines: {node: '>=18'} + + universalify@0.2.0: + resolution: {integrity: sha512-CJ1QgKmNg3CwvAv/kOFmtnEN05f0D/cn9QntgNOQlQF9dgvVTHj3t+8JPdjqawCHk7V/KA+fbUqzZ9XWhcqPUg==} + engines: {node: '>= 4.0.0'} + + url-parse@1.5.10: + resolution: {integrity: sha512-WypcfiRhfeUP9vvF0j6rw0J3hrWrw6iZv3+22h6iRMJ/8z1Tj6XfLP4DsUix5MhMPnXpiHDoKyoZ/bdCkwBCiQ==} + + urlpattern-polyfill@10.0.0: + resolution: {integrity: sha512-H/A06tKD7sS1O1X2SshBVeA5FLycRpjqiBeqGKmBwBDBy28EnRjORxTNe269KSSr5un5qyWi1iL61wLxpd+ZOg==} + + userhome@1.0.1: + resolution: {integrity: sha512-5cnLm4gseXjAclKowC4IjByaGsjtAoV6PrOQOljplNB54ReUYJP8HdAFq2muHinSDAh09PPX/uXDPfdxRHvuSA==} + engines: {node: '>= 0.8.0'} + + util-deprecate@1.0.2: + resolution: {integrity: sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==} + + validate-npm-package-license@3.0.4: + resolution: {integrity: sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==} + + vite-node@3.0.9: + resolution: {integrity: sha512-w3Gdx7jDcuT9cNn9jExXgOyKmf5UOTb6WMHz8LGAm54eS1Elf5OuBhCxl6zJxGhEeIkgsE1WbHuoL0mj/UXqXg==} + engines: {node: ^18.0.0 || ^20.0.0 || >=22.0.0} + hasBin: true + + vite@5.4.14: + resolution: {integrity: sha512-EK5cY7Q1D8JNhSaPKVK4pwBFvaTmZxEnoKXLG/U9gmdDcihQGNzFlgIvaxezFR4glP1LsuiedwMBqCXH3wZccA==} + engines: {node: ^18.0.0 || >=20.0.0} + hasBin: true + peerDependencies: + '@types/node': ^18.0.0 || >=20.0.0 + less: '*' + lightningcss: ^1.21.0 + sass: '*' + sass-embedded: '*' + stylus: '*' + sugarss: '*' + terser: ^5.4.0 + peerDependenciesMeta: + '@types/node': + optional: true + less: + optional: true + lightningcss: + optional: true + sass: + optional: true + sass-embedded: + optional: true + stylus: + optional: true + sugarss: + optional: true + terser: + optional: true + + vitest@3.0.9: + resolution: {integrity: sha512-BbcFDqNyBlfSpATmTtXOAOj71RNKDDvjBM/uPfnxxVGrG+FSH2RQIwgeEngTaTkuU/h0ScFvf+tRcKfYXzBybQ==} + engines: {node: ^18.0.0 || ^20.0.0 || >=22.0.0} + hasBin: true + peerDependencies: + '@edge-runtime/vm': '*' + '@types/debug': ^4.1.12 + '@types/node': ^18.0.0 || ^20.0.0 || >=22.0.0 + '@vitest/browser': 3.0.9 + '@vitest/ui': 3.0.9 + 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 + + wait-port@1.1.0: + resolution: {integrity: sha512-3e04qkoN3LxTMLakdqeWth8nih8usyg+sf1Bgdf9wwUkp05iuK1eSY/QpLvscT/+F/gA89+LpUmmgBtesbqI2Q==} + engines: {node: '>=10'} + hasBin: true + + web-streams-polyfill@3.3.3: + resolution: {integrity: sha512-d2JWLCivmZYTSIoge9MsgFCZrt571BikcWGYkjC1khllbTeDlGqZ2D8vD8E/lJa8WGWbb7Plm8/XJYV7IJHZZw==} + engines: {node: '>= 8'} + + webdriver@9.12.2: + resolution: {integrity: sha512-lPvGBxMiJ5wy+pNEiYujEgLtULDcyT7dqgWax/DKuXdXECvnkjJqdrRkL18l5vn49DZhygzBM7gaEbIsUaKANA==} + engines: {node: '>=18.20.0'} + + webdriverio@9.12.2: + resolution: {integrity: sha512-yhbdKsTPxhFQ2Qsn+sbL3E6MNo4P+EuV+j75kJXz4SyrWIdEbnsDLvlYpF96x7bb21jwW0pCcdlUBA0DUxi1Cg==} + engines: {node: '>=18.20.0'} + peerDependencies: + puppeteer-core: ^22.3.0 + peerDependenciesMeta: + puppeteer-core: + optional: true + + whatwg-encoding@3.1.1: + resolution: {integrity: sha512-6qN4hJdMwfYBtE3YBTTHhoeuUrDBPZmbQaxWAqSALV/MeEnR5z1xd8UKud2RAkFoPkmB+hli1TZSnyi84xz1vQ==} + engines: {node: '>=18'} + + whatwg-mimetype@4.0.0: + resolution: {integrity: sha512-QaKxh0eNIi2mE9p2vEdzfagOKHCcj1pJ56EEHGQOVxp8r9/iszLUUV7v89x9O1p/T+NlTM5W7jW6+cz4Fq1YVg==} + engines: {node: '>=18'} + + which@2.0.2: + resolution: {integrity: sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==} + engines: {node: '>= 8'} + hasBin: true + + which@5.0.0: + resolution: {integrity: sha512-JEdGzHwwkrbWoGOlIHqQ5gtprKGOenpDHpxE9zVR1bWbOtYRyPPHMe9FaP6x61CmNaTThSkb0DAJte5jD+DmzQ==} + engines: {node: ^18.17.0 || >=20.5.0} + hasBin: true + + why-is-node-running@2.3.0: + resolution: {integrity: sha512-hUrmaWBdVDcxvYqnyh09zunKzROWjbZTiNy8dBEjkS7ehEDQibXJ7XvlmtbwuTclUiIyN+CyXQD4Vmko8fNm8w==} + engines: {node: '>=8'} + hasBin: true + + wrap-ansi@6.2.0: + resolution: {integrity: sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==} + engines: {node: '>=8'} + + wrap-ansi@7.0.0: + resolution: {integrity: sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==} + engines: {node: '>=10'} + + wrap-ansi@8.1.0: + resolution: {integrity: sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==} + engines: {node: '>=12'} + + wrappy@1.0.2: + resolution: {integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==} + + ws@8.18.1: + resolution: {integrity: sha512-RKW2aJZMXeMxVpnZ6bck+RswznaxmzdULiBr6KY7XkTnW8uvt0iT9H5DkHUChXrc+uurzwa0rVI16n/Xzjdz1w==} + engines: {node: '>=10.0.0'} + peerDependencies: + bufferutil: ^4.0.1 + utf-8-validate: '>=5.0.2' + peerDependenciesMeta: + bufferutil: + optional: true + utf-8-validate: + optional: true + + y18n@5.0.8: + resolution: {integrity: sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==} + engines: {node: '>=10'} + + yargs-parser@21.1.1: + resolution: {integrity: sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==} + engines: {node: '>=12'} + + yargs@17.7.2: + resolution: {integrity: sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==} + engines: {node: '>=12'} + + yauzl@2.10.0: + resolution: {integrity: sha512-p4a9I6X6nu6IhoGmBqAcbJy1mlC4j27vEPZX9F4L4/vZT3Lyq1VkFHw/V/PUcB9Buo+DG3iHkT0x3Qya58zc3g==} + + yocto-queue@1.2.1: + resolution: {integrity: sha512-AyeEbWOu/TAXdxlV9wmGcR0+yh2j3vYPGOECcIj2S7MkrLyC7ne+oye2BKTItt0ii2PHk4cDy+95+LshzbXnGg==} + engines: {node: '>=12.20'} + + yoctocolors-cjs@2.1.2: + resolution: {integrity: sha512-cYVsTjKl8b+FrnidjibDWskAv7UKOfcwaVZdp/it9n1s9fU3IkgDbhdIRKCW4JDsAlECJY0ytoVPT3sK6kideA==} + engines: {node: '>=18'} + + yoctocolors@2.1.1: + resolution: {integrity: sha512-GQHQqAopRhwU8Kt1DDM8NjibDXHC8eoh1erhGAJPEyveY9qqVeXvVikNKrDz69sHowPMorbPUrH/mx8c50eiBQ==} + engines: {node: '>=18'} + + zip-stream@6.0.1: + resolution: {integrity: sha512-zK7YHHz4ZXpW89AHXUPbQVGKI7uvkd3hzusTdotCg1UxyaVtg0zFJSTfW/Dq5f7OBBVnq6cZIaC8Ti4hb6dtCA==} + engines: {node: '>= 14'} + +snapshots: + + '@ampproject/remapping@2.3.0': + dependencies: + '@jridgewell/gen-mapping': 0.3.8 + '@jridgewell/trace-mapping': 0.3.25 + + '@babel/code-frame@7.26.2': + dependencies: + '@babel/helper-validator-identifier': 7.25.9 + js-tokens: 4.0.0 + picocolors: 1.1.1 + + '@babel/helper-string-parser@7.25.9': {} + + '@babel/helper-validator-identifier@7.25.9': {} + + '@babel/parser@7.26.8': + dependencies: + '@babel/types': 7.26.8 + + '@babel/runtime@7.26.7': + dependencies: + regenerator-runtime: 0.14.1 + + '@babel/types@7.26.8': + dependencies: + '@babel/helper-string-parser': 7.25.9 + '@babel/helper-validator-identifier': 7.25.9 + + '@bcoe/v8-coverage@1.0.2': {} + + '@bundled-es-modules/cookie@2.0.1': + dependencies: + cookie: 0.7.2 + + '@bundled-es-modules/statuses@1.0.1': + dependencies: + statuses: 2.0.1 + + '@bundled-es-modules/tough-cookie@0.1.6': + dependencies: + '@types/tough-cookie': 4.0.5 + tough-cookie: 4.1.4 + + '@esbuild/aix-ppc64@0.21.5': + optional: true + + '@esbuild/aix-ppc64@0.25.1': + optional: true + + '@esbuild/android-arm64@0.21.5': + optional: true + + '@esbuild/android-arm64@0.25.1': + optional: true + + '@esbuild/android-arm@0.21.5': + optional: true + + '@esbuild/android-arm@0.25.1': + optional: true + + '@esbuild/android-x64@0.21.5': + optional: true + + '@esbuild/android-x64@0.25.1': + optional: true + + '@esbuild/darwin-arm64@0.21.5': + optional: true + + '@esbuild/darwin-arm64@0.25.1': + optional: true + + '@esbuild/darwin-x64@0.21.5': + optional: true + + '@esbuild/darwin-x64@0.25.1': + optional: true + + '@esbuild/freebsd-arm64@0.21.5': + optional: true + + '@esbuild/freebsd-arm64@0.25.1': + optional: true + + '@esbuild/freebsd-x64@0.21.5': + optional: true + + '@esbuild/freebsd-x64@0.25.1': + optional: true + + '@esbuild/linux-arm64@0.21.5': + optional: true + + '@esbuild/linux-arm64@0.25.1': + optional: true + + '@esbuild/linux-arm@0.21.5': + optional: true + + '@esbuild/linux-arm@0.25.1': + optional: true + + '@esbuild/linux-ia32@0.21.5': + optional: true + + '@esbuild/linux-ia32@0.25.1': + optional: true + + '@esbuild/linux-loong64@0.21.5': + optional: true + + '@esbuild/linux-loong64@0.25.1': + optional: true + + '@esbuild/linux-mips64el@0.21.5': + optional: true + + '@esbuild/linux-mips64el@0.25.1': + optional: true + + '@esbuild/linux-ppc64@0.21.5': + optional: true + + '@esbuild/linux-ppc64@0.25.1': + optional: true + + '@esbuild/linux-riscv64@0.21.5': + optional: true + + '@esbuild/linux-riscv64@0.25.1': + optional: true + + '@esbuild/linux-s390x@0.21.5': + optional: true + + '@esbuild/linux-s390x@0.25.1': + optional: true + + '@esbuild/linux-x64@0.21.5': + optional: true + + '@esbuild/linux-x64@0.25.1': + optional: true + + '@esbuild/netbsd-arm64@0.25.1': + optional: true + + '@esbuild/netbsd-x64@0.21.5': + optional: true + + '@esbuild/netbsd-x64@0.25.1': + optional: true + + '@esbuild/openbsd-arm64@0.25.1': + optional: true + + '@esbuild/openbsd-x64@0.21.5': + optional: true + + '@esbuild/openbsd-x64@0.25.1': + optional: true + + '@esbuild/sunos-x64@0.21.5': + optional: true + + '@esbuild/sunos-x64@0.25.1': + optional: true + + '@esbuild/win32-arm64@0.21.5': + optional: true + + '@esbuild/win32-arm64@0.25.1': + optional: true + + '@esbuild/win32-ia32@0.21.5': + optional: true + + '@esbuild/win32-ia32@0.25.1': + optional: true + + '@esbuild/win32-x64@0.21.5': + optional: true + + '@esbuild/win32-x64@0.25.1': + optional: true + + '@inquirer/checkbox@3.0.1': + dependencies: + '@inquirer/core': 9.2.1 + '@inquirer/figures': 1.0.10 + '@inquirer/type': 2.0.0 + ansi-escapes: 4.3.2 + yoctocolors-cjs: 2.1.2 + + '@inquirer/confirm@4.0.1': + dependencies: + '@inquirer/core': 9.2.1 + '@inquirer/type': 2.0.0 + + '@inquirer/confirm@5.1.5(@types/node@22.13.14)': + dependencies: + '@inquirer/core': 10.1.6(@types/node@22.13.14) + '@inquirer/type': 3.0.4(@types/node@22.13.14) + optionalDependencies: + '@types/node': 22.13.14 + + '@inquirer/core@10.1.6(@types/node@22.13.14)': + dependencies: + '@inquirer/figures': 1.0.10 + '@inquirer/type': 3.0.4(@types/node@22.13.14) + ansi-escapes: 4.3.2 + cli-width: 4.1.0 + mute-stream: 2.0.0 + signal-exit: 4.1.0 + wrap-ansi: 6.2.0 + yoctocolors-cjs: 2.1.2 + optionalDependencies: + '@types/node': 22.13.14 + + '@inquirer/core@9.2.1': + dependencies: + '@inquirer/figures': 1.0.10 + '@inquirer/type': 2.0.0 + '@types/mute-stream': 0.0.4 + '@types/node': 22.13.14 + '@types/wrap-ansi': 3.0.0 + ansi-escapes: 4.3.2 + cli-width: 4.1.0 + mute-stream: 1.0.0 + signal-exit: 4.1.0 + strip-ansi: 6.0.1 + wrap-ansi: 6.2.0 + yoctocolors-cjs: 2.1.2 + + '@inquirer/editor@3.0.1': + dependencies: + '@inquirer/core': 9.2.1 + '@inquirer/type': 2.0.0 + external-editor: 3.1.0 + + '@inquirer/expand@3.0.1': + dependencies: + '@inquirer/core': 9.2.1 + '@inquirer/type': 2.0.0 + yoctocolors-cjs: 2.1.2 + + '@inquirer/figures@1.0.10': {} + + '@inquirer/input@3.0.1': + dependencies: + '@inquirer/core': 9.2.1 + '@inquirer/type': 2.0.0 + + '@inquirer/number@2.0.1': + dependencies: + '@inquirer/core': 9.2.1 + '@inquirer/type': 2.0.0 + + '@inquirer/password@3.0.1': + dependencies: + '@inquirer/core': 9.2.1 + '@inquirer/type': 2.0.0 + ansi-escapes: 4.3.2 + + '@inquirer/prompts@6.0.1': + dependencies: + '@inquirer/checkbox': 3.0.1 + '@inquirer/confirm': 4.0.1 + '@inquirer/editor': 3.0.1 + '@inquirer/expand': 3.0.1 + '@inquirer/input': 3.0.1 + '@inquirer/number': 2.0.1 + '@inquirer/password': 3.0.1 + '@inquirer/rawlist': 3.0.1 + '@inquirer/search': 2.0.1 + '@inquirer/select': 3.0.1 + + '@inquirer/rawlist@3.0.1': + dependencies: + '@inquirer/core': 9.2.1 + '@inquirer/type': 2.0.0 + yoctocolors-cjs: 2.1.2 + + '@inquirer/search@2.0.1': + dependencies: + '@inquirer/core': 9.2.1 + '@inquirer/figures': 1.0.10 + '@inquirer/type': 2.0.0 + yoctocolors-cjs: 2.1.2 + + '@inquirer/select@3.0.1': + dependencies: + '@inquirer/core': 9.2.1 + '@inquirer/figures': 1.0.10 + '@inquirer/type': 2.0.0 + ansi-escapes: 4.3.2 + yoctocolors-cjs: 2.1.2 + + '@inquirer/type@2.0.0': + dependencies: + mute-stream: 1.0.0 + + '@inquirer/type@3.0.4(@types/node@22.13.14)': + optionalDependencies: + '@types/node': 22.13.14 + + '@isaacs/cliui@8.0.2': + dependencies: + string-width: 5.1.2 + string-width-cjs: string-width@4.2.3 + strip-ansi: 7.1.0 + strip-ansi-cjs: strip-ansi@6.0.1 + wrap-ansi: 8.1.0 + wrap-ansi-cjs: wrap-ansi@7.0.0 + + '@istanbuljs/schema@0.1.3': {} + + '@jest/expect-utils@29.7.0': + dependencies: + jest-get-type: 29.6.3 + optional: true + + '@jest/schemas@29.6.3': + dependencies: + '@sinclair/typebox': 0.27.8 + optional: true + + '@jest/types@29.6.3': + dependencies: + '@jest/schemas': 29.6.3 + '@types/istanbul-lib-coverage': 2.0.6 + '@types/istanbul-reports': 3.0.4 + '@types/node': 20.17.28 + '@types/yargs': 17.0.33 + chalk: 4.1.2 + optional: true + + '@jridgewell/gen-mapping@0.3.8': + dependencies: + '@jridgewell/set-array': 1.2.1 + '@jridgewell/sourcemap-codec': 1.5.0 + '@jridgewell/trace-mapping': 0.3.25 + + '@jridgewell/resolve-uri@3.1.2': {} + + '@jridgewell/set-array@1.2.1': {} + + '@jridgewell/sourcemap-codec@1.5.0': {} + + '@jridgewell/trace-mapping@0.3.25': + dependencies: + '@jridgewell/resolve-uri': 3.1.2 + '@jridgewell/sourcemap-codec': 1.5.0 + + '@mswjs/interceptors@0.37.6': + dependencies: + '@open-draft/deferred-promise': 2.2.0 + '@open-draft/logger': 0.3.0 + '@open-draft/until': 2.1.0 + is-node-process: 1.2.0 + outvariant: 1.4.3 + strict-event-emitter: 0.5.1 + + '@open-draft/deferred-promise@2.2.0': {} + + '@open-draft/logger@0.3.0': + dependencies: + is-node-process: 1.2.0 + outvariant: 1.4.3 + + '@open-draft/until@2.1.0': {} + + '@pkgjs/parseargs@0.11.0': + optional: true + + '@polka/url@1.0.0-next.28': {} + + '@promptbook/utils@0.69.5': + dependencies: + spacetrim: 0.11.59 + + '@puppeteer/browsers@2.8.0': + dependencies: + debug: 4.4.0 + extract-zip: 2.0.1 + progress: 2.0.3 + proxy-agent: 6.5.0 + semver: 7.7.1 + tar-fs: 3.0.8 + yargs: 17.7.2 + transitivePeerDependencies: + - bare-buffer + - supports-color + + '@rollup/rollup-android-arm-eabi@4.34.6': + optional: true + + '@rollup/rollup-android-arm64@4.34.6': + optional: true + + '@rollup/rollup-darwin-arm64@4.34.6': + optional: true + + '@rollup/rollup-darwin-x64@4.34.6': + optional: true + + '@rollup/rollup-freebsd-arm64@4.34.6': + optional: true + + '@rollup/rollup-freebsd-x64@4.34.6': + optional: true + + '@rollup/rollup-linux-arm-gnueabihf@4.34.6': + optional: true + + '@rollup/rollup-linux-arm-musleabihf@4.34.6': + optional: true + + '@rollup/rollup-linux-arm64-gnu@4.34.6': + optional: true + + '@rollup/rollup-linux-arm64-musl@4.34.6': + optional: true + + '@rollup/rollup-linux-loongarch64-gnu@4.34.6': + optional: true + + '@rollup/rollup-linux-powerpc64le-gnu@4.34.6': + optional: true + + '@rollup/rollup-linux-riscv64-gnu@4.34.6': + optional: true + + '@rollup/rollup-linux-s390x-gnu@4.34.6': + optional: true + + '@rollup/rollup-linux-x64-gnu@4.34.6': + optional: true + + '@rollup/rollup-linux-x64-musl@4.34.6': + optional: true + + '@rollup/rollup-win32-arm64-msvc@4.34.6': + optional: true + + '@rollup/rollup-win32-ia32-msvc@4.34.6': + optional: true + + '@rollup/rollup-win32-x64-msvc@4.34.6': + optional: true + + '@sec-ant/readable-stream@0.4.1': {} + + '@sinclair/typebox@0.27.8': + optional: true + + '@sindresorhus/merge-streams@4.0.0': {} + + '@testing-library/dom@10.4.0': + dependencies: + '@babel/code-frame': 7.26.2 + '@babel/runtime': 7.26.7 + '@types/aria-query': 5.0.4 + aria-query: 5.3.0 + chalk: 4.1.2 + dom-accessibility-api: 0.5.16 + lz-string: 1.5.0 + pretty-format: 27.5.1 + + '@testing-library/user-event@14.6.1(@testing-library/dom@10.4.0)': + dependencies: + '@testing-library/dom': 10.4.0 + + '@tootallnate/quickjs-emscripten@0.23.0': {} + + '@types/aria-query@5.0.4': {} + + '@types/cookie@0.6.0': {} + + '@types/estree@1.0.6': {} + + '@types/istanbul-lib-coverage@2.0.6': + optional: true + + '@types/istanbul-lib-report@3.0.3': + dependencies: + '@types/istanbul-lib-coverage': 2.0.6 + optional: true + + '@types/istanbul-reports@3.0.4': + dependencies: + '@types/istanbul-lib-report': 3.0.3 + optional: true + + '@types/mute-stream@0.0.4': + dependencies: + '@types/node': 20.17.28 + + '@types/node@20.17.28': + dependencies: + undici-types: 6.19.8 + + '@types/node@22.13.14': + dependencies: + undici-types: 6.20.0 + + '@types/normalize-package-data@2.4.4': {} + + '@types/sinonjs__fake-timers@8.1.5': {} + + '@types/stack-utils@2.0.3': + optional: true + + '@types/statuses@2.0.5': {} + + '@types/tough-cookie@4.0.5': {} + + '@types/which@2.0.2': {} + + '@types/wrap-ansi@3.0.0': {} + + '@types/ws@8.18.0': + dependencies: + '@types/node': 20.17.28 + + '@types/yargs-parser@21.0.3': + optional: true + + '@types/yargs@17.0.33': + dependencies: + '@types/yargs-parser': 21.0.3 + optional: true + + '@types/yauzl@2.10.3': + dependencies: + '@types/node': 20.17.28 + optional: true + + '@vitest/browser@3.0.9(@types/node@22.13.14)(playwright@1.51.1)(vite@5.4.14(@types/node@22.13.14))(vitest@3.0.9)(webdriverio@9.12.2)': + dependencies: + '@testing-library/dom': 10.4.0 + '@testing-library/user-event': 14.6.1(@testing-library/dom@10.4.0) + '@vitest/mocker': 3.0.9(msw@2.7.3(@types/node@22.13.14))(vite@5.4.14(@types/node@22.13.14)) + '@vitest/utils': 3.0.9 + magic-string: 0.30.17 + msw: 2.7.3(@types/node@22.13.14) + sirv: 3.0.1 + tinyrainbow: 2.0.0 + vitest: 3.0.9(@types/node@22.13.14)(@vitest/browser@3.0.9)(msw@2.7.3(@types/node@22.13.14)) + ws: 8.18.1 + optionalDependencies: + playwright: 1.51.1 + webdriverio: 9.12.2 + transitivePeerDependencies: + - '@types/node' + - bufferutil + - typescript + - utf-8-validate + - vite + + '@vitest/coverage-v8@3.0.9(@vitest/browser@3.0.9)(vitest@3.0.9)': + dependencies: + '@ampproject/remapping': 2.3.0 + '@bcoe/v8-coverage': 1.0.2 + debug: 4.4.0 + istanbul-lib-coverage: 3.2.2 + istanbul-lib-report: 3.0.1 + istanbul-lib-source-maps: 5.0.6 + istanbul-reports: 3.1.7 + magic-string: 0.30.17 + magicast: 0.3.5 + std-env: 3.8.0 + test-exclude: 7.0.1 + tinyrainbow: 2.0.0 + vitest: 3.0.9(@types/node@22.13.14)(@vitest/browser@3.0.9)(msw@2.7.3(@types/node@22.13.14)) + optionalDependencies: + '@vitest/browser': 3.0.9(@types/node@22.13.14)(playwright@1.51.1)(vite@5.4.14(@types/node@22.13.14))(vitest@3.0.9)(webdriverio@9.12.2) + transitivePeerDependencies: + - supports-color + + '@vitest/expect@3.0.9': + dependencies: + '@vitest/spy': 3.0.9 + '@vitest/utils': 3.0.9 + chai: 5.2.0 + tinyrainbow: 2.0.0 + + '@vitest/mocker@3.0.9(msw@2.7.3(@types/node@22.13.14))(vite@5.4.14(@types/node@22.13.14))': + dependencies: + '@vitest/spy': 3.0.9 + estree-walker: 3.0.3 + magic-string: 0.30.17 + optionalDependencies: + msw: 2.7.3(@types/node@22.13.14) + vite: 5.4.14(@types/node@22.13.14) + + '@vitest/pretty-format@2.1.9': + dependencies: + tinyrainbow: 1.2.0 + + '@vitest/pretty-format@3.0.9': + dependencies: + tinyrainbow: 2.0.0 + + '@vitest/runner@3.0.9': + dependencies: + '@vitest/utils': 3.0.9 + pathe: 2.0.3 + + '@vitest/snapshot@2.1.9': + dependencies: + '@vitest/pretty-format': 2.1.9 + magic-string: 0.30.17 + pathe: 1.1.2 + + '@vitest/snapshot@3.0.9': + dependencies: + '@vitest/pretty-format': 3.0.9 + magic-string: 0.30.17 + pathe: 2.0.3 + + '@vitest/spy@3.0.9': + dependencies: + tinyspy: 3.0.2 + + '@vitest/utils@3.0.9': + dependencies: + '@vitest/pretty-format': 3.0.9 + loupe: 3.1.3 + tinyrainbow: 2.0.0 + + '@wdio/cli@9.12.2': + dependencies: + '@types/node': 20.17.28 + '@vitest/snapshot': 2.1.9 + '@wdio/config': 9.12.2 + '@wdio/globals': 9.12.2(@wdio/logger@9.4.4) + '@wdio/logger': 9.4.4 + '@wdio/protocols': 9.12.2 + '@wdio/types': 9.12.2 + '@wdio/utils': 9.12.2 + async-exit-hook: 2.0.1 + chalk: 5.4.1 + chokidar: 4.0.3 + dotenv: 16.4.7 + ejs: 3.1.10 + execa: 9.5.2 + import-meta-resolve: 4.1.0 + inquirer: 11.1.0 + lodash.flattendeep: 4.4.0 + lodash.pickby: 4.6.0 + lodash.union: 4.6.0 + read-pkg-up: 10.1.0 + recursive-readdir: 2.2.3 + tsx: 4.19.3 + webdriverio: 9.12.2 + yargs: 17.7.2 + transitivePeerDependencies: + - bare-buffer + - bufferutil + - puppeteer-core + - supports-color + - utf-8-validate + + '@wdio/config@9.12.2': + dependencies: + '@wdio/logger': 9.4.4 + '@wdio/types': 9.12.2 + '@wdio/utils': 9.12.2 + deepmerge-ts: 7.1.5 + glob: 10.4.5 + import-meta-resolve: 4.1.0 + transitivePeerDependencies: + - bare-buffer + - supports-color + + '@wdio/globals@9.12.2(@wdio/logger@9.4.4)': + optionalDependencies: + expect-webdriverio: 5.1.0(@wdio/globals@9.12.2(@wdio/logger@9.4.4))(@wdio/logger@9.4.4)(webdriverio@9.12.2) + webdriverio: 9.12.2 + transitivePeerDependencies: + - '@wdio/logger' + - bare-buffer + - bufferutil + - puppeteer-core + - supports-color + - utf-8-validate + + '@wdio/logger@9.4.4': + dependencies: + chalk: 5.4.1 + loglevel: 1.9.2 + loglevel-plugin-prefix: 0.8.4 + strip-ansi: 7.1.0 + + '@wdio/protocols@9.12.2': {} + + '@wdio/repl@9.4.4': + dependencies: + '@types/node': 20.17.28 + + '@wdio/types@9.12.2': + dependencies: + '@types/node': 20.17.28 + + '@wdio/utils@9.12.2': + dependencies: + '@puppeteer/browsers': 2.8.0 + '@wdio/logger': 9.4.4 + '@wdio/types': 9.12.2 + decamelize: 6.0.0 + deepmerge-ts: 7.1.5 + edgedriver: 6.1.1 + geckodriver: 5.0.0 + get-port: 7.1.0 + import-meta-resolve: 4.1.0 + locate-app: 2.5.0 + safaridriver: 1.0.0 + split2: 4.2.0 + wait-port: 1.1.0 + transitivePeerDependencies: + - bare-buffer + - supports-color + + '@zip.js/zip.js@2.7.58': {} + + abort-controller@3.0.0: + dependencies: + event-target-shim: 5.0.1 + + agent-base@7.1.3: {} + + ansi-escapes@4.3.2: + dependencies: + type-fest: 0.21.3 + + ansi-regex@5.0.1: {} + + ansi-regex@6.1.0: {} + + ansi-styles@4.3.0: + dependencies: + color-convert: 2.0.1 + + ansi-styles@5.2.0: {} + + ansi-styles@6.2.1: {} + + archiver-utils@5.0.2: + dependencies: + glob: 10.4.5 + graceful-fs: 4.2.11 + is-stream: 2.0.1 + lazystream: 1.0.1 + lodash: 4.17.21 + normalize-path: 3.0.0 + readable-stream: 4.7.0 + + archiver@7.0.1: + dependencies: + archiver-utils: 5.0.2 + async: 3.2.6 + buffer-crc32: 1.0.0 + readable-stream: 4.7.0 + readdir-glob: 1.1.3 + tar-stream: 3.1.7 + zip-stream: 6.0.1 + + aria-query@5.3.0: + dependencies: + dequal: 2.0.3 + + assertion-error@2.0.1: {} + + ast-types@0.13.4: + dependencies: + tslib: 2.8.1 + + async-exit-hook@2.0.1: {} + + async@3.2.6: {} + + b4a@1.6.7: {} + + balanced-match@1.0.2: {} + + bare-events@2.5.4: + optional: true + + bare-fs@4.0.2: + dependencies: + bare-events: 2.5.4 + bare-path: 3.0.0 + bare-stream: 2.6.5(bare-events@2.5.4) + optional: true + + bare-os@3.6.1: + optional: true + + bare-path@3.0.0: + dependencies: + bare-os: 3.6.1 + optional: true + + bare-stream@2.6.5(bare-events@2.5.4): + dependencies: + streamx: 2.22.0 + optionalDependencies: + bare-events: 2.5.4 + optional: true + + base64-js@1.5.1: {} + + basic-ftp@5.0.5: {} + + birpc@0.2.19: {} + + boolbase@1.0.0: {} + + brace-expansion@1.1.11: + dependencies: + balanced-match: 1.0.2 + concat-map: 0.0.1 + + brace-expansion@2.0.1: + dependencies: + balanced-match: 1.0.2 + + braces@3.0.3: + dependencies: + fill-range: 7.1.1 + optional: true + + buffer-crc32@0.2.13: {} + + buffer-crc32@1.0.0: {} + + buffer@6.0.3: + dependencies: + base64-js: 1.5.1 + ieee754: 1.2.1 + + cac@6.7.14: {} + + chai@5.2.0: + dependencies: + assertion-error: 2.0.1 + check-error: 2.1.1 + deep-eql: 5.0.2 + loupe: 3.1.3 + pathval: 2.0.0 + + chalk@4.1.2: + dependencies: + ansi-styles: 4.3.0 + supports-color: 7.2.0 + + chalk@5.4.1: {} + + chardet@0.7.0: {} + + check-error@2.1.1: {} + + cheerio-select@2.1.0: + dependencies: + boolbase: 1.0.0 + css-select: 5.1.0 + css-what: 6.1.0 + domelementtype: 2.3.0 + domhandler: 5.0.3 + domutils: 3.2.2 + + cheerio@1.0.0: + dependencies: + cheerio-select: 2.1.0 + dom-serializer: 2.0.0 + domhandler: 5.0.3 + domutils: 3.2.2 + encoding-sniffer: 0.2.0 + htmlparser2: 9.1.0 + parse5: 7.2.1 + parse5-htmlparser2-tree-adapter: 7.1.0 + parse5-parser-stream: 7.1.2 + undici: 6.21.2 + whatwg-mimetype: 4.0.0 + + chokidar@4.0.3: + dependencies: + readdirp: 4.1.2 + + ci-info@3.9.0: + optional: true + + cli-width@4.1.0: {} + + cliui@8.0.1: + dependencies: + string-width: 4.2.3 + strip-ansi: 6.0.1 + wrap-ansi: 7.0.0 + + color-convert@2.0.1: + dependencies: + color-name: 1.1.4 + + color-name@1.1.4: {} + + commander@9.5.0: {} + + compress-commons@6.0.2: + dependencies: + crc-32: 1.2.2 + crc32-stream: 6.0.0 + is-stream: 2.0.1 + normalize-path: 3.0.0 + readable-stream: 4.7.0 + + concat-map@0.0.1: {} + + cookie@0.7.2: {} + + core-util-is@1.0.3: {} + + crc-32@1.2.2: {} + + crc32-stream@6.0.0: + dependencies: + crc-32: 1.2.2 + readable-stream: 4.7.0 + + cross-spawn@7.0.6: + dependencies: + path-key: 3.1.1 + shebang-command: 2.0.0 + which: 2.0.2 + + css-select@5.1.0: + dependencies: + boolbase: 1.0.0 + css-what: 6.1.0 + domhandler: 5.0.3 + domutils: 3.2.2 + nth-check: 2.1.1 + + css-shorthand-properties@1.1.2: {} + + css-value@0.0.1: {} + + css-what@6.1.0: {} + + data-uri-to-buffer@4.0.1: {} + + data-uri-to-buffer@6.0.2: {} + + debug@4.4.0: + dependencies: + ms: 2.1.3 + + decamelize@6.0.0: {} + + deep-eql@5.0.2: {} + + deepmerge-ts@7.1.5: {} + + degenerator@5.0.1: + dependencies: + ast-types: 0.13.4 + escodegen: 2.1.0 + esprima: 4.0.1 + + dequal@2.0.3: {} + + diff-sequences@29.6.3: + optional: true + + dom-accessibility-api@0.5.16: {} + + dom-serializer@2.0.0: + dependencies: + domelementtype: 2.3.0 + domhandler: 5.0.3 + entities: 4.5.0 + + domelementtype@2.3.0: {} + + domhandler@5.0.3: + dependencies: + domelementtype: 2.3.0 + + domutils@3.2.2: + dependencies: + dom-serializer: 2.0.0 + domelementtype: 2.3.0 + domhandler: 5.0.3 + + dotenv@16.4.7: {} + + eastasianwidth@0.2.0: {} + + edge-paths@3.0.5: + dependencies: + '@types/which': 2.0.2 + which: 2.0.2 + + edgedriver@6.1.1: + dependencies: + '@wdio/logger': 9.4.4 + '@zip.js/zip.js': 2.7.58 + decamelize: 6.0.0 + edge-paths: 3.0.5 + fast-xml-parser: 4.5.3 + http-proxy-agent: 7.0.2 + https-proxy-agent: 7.0.6 + node-fetch: 3.3.2 + which: 5.0.0 + transitivePeerDependencies: + - supports-color + + ejs@3.1.10: + dependencies: + jake: 10.9.2 + + emoji-regex@8.0.0: {} + + emoji-regex@9.2.2: {} + + encoding-sniffer@0.2.0: + dependencies: + iconv-lite: 0.6.3 + whatwg-encoding: 3.1.1 + + end-of-stream@1.4.4: + dependencies: + once: 1.4.0 + + entities@4.5.0: {} + + error-ex@1.3.2: + dependencies: + is-arrayish: 0.2.1 + + es-module-lexer@1.6.0: {} + + esbuild@0.21.5: + optionalDependencies: + '@esbuild/aix-ppc64': 0.21.5 + '@esbuild/android-arm': 0.21.5 + '@esbuild/android-arm64': 0.21.5 + '@esbuild/android-x64': 0.21.5 + '@esbuild/darwin-arm64': 0.21.5 + '@esbuild/darwin-x64': 0.21.5 + '@esbuild/freebsd-arm64': 0.21.5 + '@esbuild/freebsd-x64': 0.21.5 + '@esbuild/linux-arm': 0.21.5 + '@esbuild/linux-arm64': 0.21.5 + '@esbuild/linux-ia32': 0.21.5 + '@esbuild/linux-loong64': 0.21.5 + '@esbuild/linux-mips64el': 0.21.5 + '@esbuild/linux-ppc64': 0.21.5 + '@esbuild/linux-riscv64': 0.21.5 + '@esbuild/linux-s390x': 0.21.5 + '@esbuild/linux-x64': 0.21.5 + '@esbuild/netbsd-x64': 0.21.5 + '@esbuild/openbsd-x64': 0.21.5 + '@esbuild/sunos-x64': 0.21.5 + '@esbuild/win32-arm64': 0.21.5 + '@esbuild/win32-ia32': 0.21.5 + '@esbuild/win32-x64': 0.21.5 + + esbuild@0.25.1: + optionalDependencies: + '@esbuild/aix-ppc64': 0.25.1 + '@esbuild/android-arm': 0.25.1 + '@esbuild/android-arm64': 0.25.1 + '@esbuild/android-x64': 0.25.1 + '@esbuild/darwin-arm64': 0.25.1 + '@esbuild/darwin-x64': 0.25.1 + '@esbuild/freebsd-arm64': 0.25.1 + '@esbuild/freebsd-x64': 0.25.1 + '@esbuild/linux-arm': 0.25.1 + '@esbuild/linux-arm64': 0.25.1 + '@esbuild/linux-ia32': 0.25.1 + '@esbuild/linux-loong64': 0.25.1 + '@esbuild/linux-mips64el': 0.25.1 + '@esbuild/linux-ppc64': 0.25.1 + '@esbuild/linux-riscv64': 0.25.1 + '@esbuild/linux-s390x': 0.25.1 + '@esbuild/linux-x64': 0.25.1 + '@esbuild/netbsd-arm64': 0.25.1 + '@esbuild/netbsd-x64': 0.25.1 + '@esbuild/openbsd-arm64': 0.25.1 + '@esbuild/openbsd-x64': 0.25.1 + '@esbuild/sunos-x64': 0.25.1 + '@esbuild/win32-arm64': 0.25.1 + '@esbuild/win32-ia32': 0.25.1 + '@esbuild/win32-x64': 0.25.1 + + escalade@3.2.0: {} + + escape-string-regexp@2.0.0: + optional: true + + escodegen@2.1.0: + dependencies: + esprima: 4.0.1 + estraverse: 5.3.0 + esutils: 2.0.3 + optionalDependencies: + source-map: 0.6.1 + + esprima@4.0.1: {} + + estraverse@5.3.0: {} + + estree-walker@3.0.3: + dependencies: + '@types/estree': 1.0.6 + + esutils@2.0.3: {} + + event-target-shim@5.0.1: {} + + events@3.3.0: {} + + execa@9.5.2: + dependencies: + '@sindresorhus/merge-streams': 4.0.0 + cross-spawn: 7.0.6 + figures: 6.1.0 + get-stream: 9.0.1 + human-signals: 8.0.1 + is-plain-obj: 4.1.0 + is-stream: 4.0.1 + npm-run-path: 6.0.0 + pretty-ms: 9.2.0 + signal-exit: 4.1.0 + strip-final-newline: 4.0.0 + yoctocolors: 2.1.1 + + expect-type@1.1.0: {} + + expect-webdriverio@5.1.0(@wdio/globals@9.12.2(@wdio/logger@9.4.4))(@wdio/logger@9.4.4)(webdriverio@9.12.2): + dependencies: + '@vitest/snapshot': 2.1.9 + '@wdio/globals': 9.12.2(@wdio/logger@9.4.4) + '@wdio/logger': 9.4.4 + expect: 29.7.0 + jest-matcher-utils: 29.7.0 + lodash.isequal: 4.5.0 + webdriverio: 9.12.2 + optional: true + + expect@29.7.0: + dependencies: + '@jest/expect-utils': 29.7.0 + jest-get-type: 29.6.3 + jest-matcher-utils: 29.7.0 + jest-message-util: 29.7.0 + jest-util: 29.7.0 + optional: true + + external-editor@3.1.0: + dependencies: + chardet: 0.7.0 + iconv-lite: 0.4.24 + tmp: 0.0.33 + + extract-zip@2.0.1: + dependencies: + debug: 4.4.0 + get-stream: 5.2.0 + yauzl: 2.10.0 + optionalDependencies: + '@types/yauzl': 2.10.3 + transitivePeerDependencies: + - supports-color + + fast-deep-equal@2.0.1: {} + + fast-fifo@1.3.2: {} + + fast-xml-parser@4.5.3: + dependencies: + strnum: 1.1.2 + + fd-slicer@1.1.0: + dependencies: + pend: 1.2.0 + + fetch-blob@3.2.0: + dependencies: + node-domexception: 1.0.0 + web-streams-polyfill: 3.3.3 + + figures@6.1.0: + dependencies: + is-unicode-supported: 2.1.0 + + filelist@1.0.4: + dependencies: + minimatch: 5.1.6 + + fill-range@7.1.1: + dependencies: + to-regex-range: 5.0.1 + optional: true + + find-up@6.3.0: + dependencies: + locate-path: 7.2.0 + path-exists: 5.0.0 + + foreground-child@3.3.0: + dependencies: + cross-spawn: 7.0.6 + signal-exit: 4.1.0 + + formdata-polyfill@4.0.10: + dependencies: + fetch-blob: 3.2.0 + + fsevents@2.3.2: + optional: true + + fsevents@2.3.3: + optional: true + + geckodriver@5.0.0: + dependencies: + '@wdio/logger': 9.4.4 + '@zip.js/zip.js': 2.7.58 + decamelize: 6.0.0 + http-proxy-agent: 7.0.2 + https-proxy-agent: 7.0.6 + node-fetch: 3.3.2 + tar-fs: 3.0.8 + which: 5.0.0 + transitivePeerDependencies: + - bare-buffer + - supports-color + + get-caller-file@2.0.5: {} + + get-port@7.1.0: {} + + get-stream@5.2.0: + dependencies: + pump: 3.0.2 + + get-stream@9.0.1: + dependencies: + '@sec-ant/readable-stream': 0.4.1 + is-stream: 4.0.1 + + get-tsconfig@4.10.0: + dependencies: + resolve-pkg-maps: 1.0.0 + + get-uri@6.0.4: + dependencies: + basic-ftp: 5.0.5 + data-uri-to-buffer: 6.0.2 + debug: 4.4.0 + transitivePeerDependencies: + - supports-color + + glob@10.4.5: + dependencies: + foreground-child: 3.3.0 + jackspeak: 3.4.3 + minimatch: 9.0.5 + minipass: 7.1.2 + package-json-from-dist: 1.0.1 + path-scurry: 1.11.1 + + graceful-fs@4.2.11: {} + + grapheme-splitter@1.0.4: {} + + graphql@16.10.0: {} + + has-flag@4.0.0: {} + + headers-polyfill@4.0.3: {} + + hosted-git-info@7.0.2: + dependencies: + lru-cache: 10.4.3 + + html-escaper@2.0.2: {} + + htmlfy@0.6.5: {} + + htmlparser2@9.1.0: + dependencies: + domelementtype: 2.3.0 + domhandler: 5.0.3 + domutils: 3.2.2 + entities: 4.5.0 + + http-proxy-agent@7.0.2: + dependencies: + agent-base: 7.1.3 + debug: 4.4.0 + transitivePeerDependencies: + - supports-color + + https-proxy-agent@7.0.6: + dependencies: + agent-base: 7.1.3 + debug: 4.4.0 + transitivePeerDependencies: + - supports-color + + human-signals@8.0.1: {} + + iconv-lite@0.4.24: + dependencies: + safer-buffer: 2.1.2 + + iconv-lite@0.6.3: + dependencies: + safer-buffer: 2.1.2 + + ieee754@1.2.1: {} + + immediate@3.0.6: {} + + import-meta-resolve@4.1.0: {} + + inherits@2.0.4: {} + + inquirer@11.1.0: + dependencies: + '@inquirer/core': 9.2.1 + '@inquirer/prompts': 6.0.1 + '@inquirer/type': 2.0.0 + '@types/mute-stream': 0.0.4 + ansi-escapes: 4.3.2 + mute-stream: 1.0.0 + run-async: 3.0.0 + rxjs: 7.8.2 + + ip-address@9.0.5: + dependencies: + jsbn: 1.1.0 + sprintf-js: 1.1.3 + + is-arrayish@0.2.1: {} + + is-fullwidth-code-point@3.0.0: {} + + is-node-process@1.2.0: {} + + is-number@7.0.0: + optional: true + + is-plain-obj@4.1.0: {} + + is-stream@2.0.1: {} + + is-stream@4.0.1: {} + + is-unicode-supported@2.1.0: {} + + isarray@1.0.0: {} + + isexe@2.0.0: {} + + isexe@3.1.1: {} + + istanbul-lib-coverage@3.2.2: {} + + istanbul-lib-report@3.0.1: + dependencies: + istanbul-lib-coverage: 3.2.2 + make-dir: 4.0.0 + supports-color: 7.2.0 + + istanbul-lib-source-maps@5.0.6: + dependencies: + '@jridgewell/trace-mapping': 0.3.25 + debug: 4.4.0 + istanbul-lib-coverage: 3.2.2 + transitivePeerDependencies: + - supports-color + + istanbul-reports@3.1.7: + dependencies: + html-escaper: 2.0.2 + istanbul-lib-report: 3.0.1 + + jackspeak@3.4.3: + dependencies: + '@isaacs/cliui': 8.0.2 + optionalDependencies: + '@pkgjs/parseargs': 0.11.0 + + jake@10.9.2: + dependencies: + async: 3.2.6 + chalk: 4.1.2 + filelist: 1.0.4 + minimatch: 3.1.2 + + jest-diff@29.7.0: + dependencies: + chalk: 4.1.2 + diff-sequences: 29.6.3 + jest-get-type: 29.6.3 + pretty-format: 29.7.0 + optional: true + + jest-get-type@29.6.3: + optional: true + + jest-matcher-utils@29.7.0: + dependencies: + chalk: 4.1.2 + jest-diff: 29.7.0 + jest-get-type: 29.6.3 + pretty-format: 29.7.0 + optional: true + + jest-message-util@29.7.0: + dependencies: + '@babel/code-frame': 7.26.2 + '@jest/types': 29.6.3 + '@types/stack-utils': 2.0.3 + chalk: 4.1.2 + graceful-fs: 4.2.11 + micromatch: 4.0.8 + pretty-format: 29.7.0 + slash: 3.0.0 + stack-utils: 2.0.6 + optional: true + + jest-util@29.7.0: + dependencies: + '@jest/types': 29.6.3 + '@types/node': 20.17.28 + chalk: 4.1.2 + ci-info: 3.9.0 + graceful-fs: 4.2.11 + picomatch: 2.3.1 + optional: true + + js-tokens@4.0.0: {} + + jsbn@1.1.0: {} + + json-parse-even-better-errors@3.0.2: {} + + jszip@3.10.1: + dependencies: + lie: 3.3.0 + pako: 1.0.11 + readable-stream: 2.3.8 + setimmediate: 1.0.5 + + lazystream@1.0.1: + dependencies: + readable-stream: 2.3.8 + + lie@3.3.0: + dependencies: + immediate: 3.0.6 + + lines-and-columns@2.0.4: {} + + locate-app@2.5.0: + dependencies: + '@promptbook/utils': 0.69.5 + type-fest: 4.26.0 + userhome: 1.0.1 + + locate-path@7.2.0: + dependencies: + p-locate: 6.0.0 + + lodash.clonedeep@4.5.0: {} + + lodash.flattendeep@4.4.0: {} + + lodash.isequal@4.5.0: + optional: true + + lodash.pickby@4.6.0: {} + + lodash.union@4.6.0: {} + + lodash.zip@4.2.0: {} + + lodash@4.17.21: {} + + loglevel-plugin-prefix@0.8.4: {} + + loglevel@1.9.2: {} + + loupe@3.1.3: {} + + lru-cache@10.4.3: {} + + lru-cache@7.18.3: {} + + lz-string@1.5.0: {} + + magic-string@0.30.17: + dependencies: + '@jridgewell/sourcemap-codec': 1.5.0 + + magicast@0.3.5: + dependencies: + '@babel/parser': 7.26.8 + '@babel/types': 7.26.8 + source-map-js: 1.2.1 + + make-dir@4.0.0: + dependencies: + semver: 7.7.1 + + micromatch@4.0.8: + dependencies: + braces: 3.0.3 + picomatch: 2.3.1 + optional: true + + minimatch@3.1.2: + dependencies: + brace-expansion: 1.1.11 + + minimatch@5.1.6: + dependencies: + brace-expansion: 2.0.1 + + minimatch@9.0.5: + dependencies: + brace-expansion: 2.0.1 + + minipass@7.1.2: {} + + mrmime@2.0.0: {} + + ms@2.1.3: {} + + msw@2.7.3(@types/node@22.13.14): + dependencies: + '@bundled-es-modules/cookie': 2.0.1 + '@bundled-es-modules/statuses': 1.0.1 + '@bundled-es-modules/tough-cookie': 0.1.6 + '@inquirer/confirm': 5.1.5(@types/node@22.13.14) + '@mswjs/interceptors': 0.37.6 + '@open-draft/deferred-promise': 2.2.0 + '@open-draft/until': 2.1.0 + '@types/cookie': 0.6.0 + '@types/statuses': 2.0.5 + graphql: 16.10.0 + headers-polyfill: 4.0.3 + is-node-process: 1.2.0 + outvariant: 1.4.3 + path-to-regexp: 6.3.0 + picocolors: 1.1.1 + strict-event-emitter: 0.5.1 + type-fest: 4.34.1 + yargs: 17.7.2 + transitivePeerDependencies: + - '@types/node' + + mute-stream@1.0.0: {} + + mute-stream@2.0.0: {} + + nanoid@3.3.8: {} + + netmask@2.0.2: {} + + node-domexception@1.0.0: {} + + node-fetch@3.3.2: + dependencies: + data-uri-to-buffer: 4.0.1 + fetch-blob: 3.2.0 + formdata-polyfill: 4.0.10 + + normalize-package-data@6.0.2: + dependencies: + hosted-git-info: 7.0.2 + semver: 7.7.1 + validate-npm-package-license: 3.0.4 + + normalize-path@3.0.0: {} + + npm-run-path@6.0.0: + dependencies: + path-key: 4.0.0 + unicorn-magic: 0.3.0 + + nth-check@2.1.1: + dependencies: + boolbase: 1.0.0 + + once@1.4.0: + dependencies: + wrappy: 1.0.2 + + os-tmpdir@1.0.2: {} + + outvariant@1.4.3: {} + + p-limit@4.0.0: + dependencies: + yocto-queue: 1.2.1 + + p-locate@6.0.0: + dependencies: + p-limit: 4.0.0 + + pac-proxy-agent@7.2.0: + dependencies: + '@tootallnate/quickjs-emscripten': 0.23.0 + agent-base: 7.1.3 + debug: 4.4.0 + get-uri: 6.0.4 + http-proxy-agent: 7.0.2 + https-proxy-agent: 7.0.6 + pac-resolver: 7.0.1 + socks-proxy-agent: 8.0.5 + transitivePeerDependencies: + - supports-color + + pac-resolver@7.0.1: + dependencies: + degenerator: 5.0.1 + netmask: 2.0.2 + + package-json-from-dist@1.0.1: {} + + pako@1.0.11: {} + + parse-json@7.1.1: + dependencies: + '@babel/code-frame': 7.26.2 + error-ex: 1.3.2 + json-parse-even-better-errors: 3.0.2 + lines-and-columns: 2.0.4 + type-fest: 3.13.1 + + parse-ms@4.0.0: {} + + parse5-htmlparser2-tree-adapter@7.1.0: + dependencies: + domhandler: 5.0.3 + parse5: 7.2.1 + + parse5-parser-stream@7.1.2: + dependencies: + parse5: 7.2.1 + + parse5@7.2.1: + dependencies: + entities: 4.5.0 + + path-exists@5.0.0: {} + + path-key@3.1.1: {} + + path-key@4.0.0: {} + + path-scurry@1.11.1: + dependencies: + lru-cache: 10.4.3 + minipass: 7.1.2 + + path-to-regexp@6.3.0: {} + + pathe@1.1.2: {} + + pathe@2.0.3: {} + + pathval@2.0.0: {} + + pend@1.2.0: {} + + picocolors@1.1.1: {} + + picomatch@2.3.1: + optional: true + + playwright-core@1.51.1: {} + + playwright@1.51.1: + dependencies: + playwright-core: 1.51.1 + optionalDependencies: + fsevents: 2.3.2 + + postcss@8.5.2: + dependencies: + nanoid: 3.3.8 + picocolors: 1.1.1 + source-map-js: 1.2.1 + + pretty-format@27.5.1: + dependencies: + ansi-regex: 5.0.1 + ansi-styles: 5.2.0 + react-is: 17.0.2 + + pretty-format@29.7.0: + dependencies: + '@jest/schemas': 29.6.3 + ansi-styles: 5.2.0 + react-is: 18.3.1 + optional: true + + pretty-ms@9.2.0: + dependencies: + parse-ms: 4.0.0 + + process-nextick-args@2.0.1: {} + + process@0.11.10: {} + + progress@2.0.3: {} + + proxy-agent@6.5.0: + dependencies: + agent-base: 7.1.3 + debug: 4.4.0 + http-proxy-agent: 7.0.2 + https-proxy-agent: 7.0.6 + lru-cache: 7.18.3 + pac-proxy-agent: 7.2.0 + proxy-from-env: 1.1.0 + socks-proxy-agent: 8.0.5 + transitivePeerDependencies: + - supports-color + + proxy-from-env@1.1.0: {} + + psl@1.15.0: + dependencies: + punycode: 2.3.1 + + pump@3.0.2: + dependencies: + end-of-stream: 1.4.4 + once: 1.4.0 + + punycode@2.3.1: {} + + query-selector-shadow-dom@1.0.1: {} + + querystringify@2.2.0: {} + + react-is@17.0.2: {} + + react-is@18.3.1: + optional: true + + read-pkg-up@10.1.0: + dependencies: + find-up: 6.3.0 + read-pkg: 8.1.0 + type-fest: 4.34.1 + + read-pkg@8.1.0: + dependencies: + '@types/normalize-package-data': 2.4.4 + normalize-package-data: 6.0.2 + parse-json: 7.1.1 + type-fest: 4.34.1 + + readable-stream@2.3.8: + dependencies: + core-util-is: 1.0.3 + inherits: 2.0.4 + isarray: 1.0.0 + process-nextick-args: 2.0.1 + safe-buffer: 5.1.2 + string_decoder: 1.1.1 + util-deprecate: 1.0.2 + + readable-stream@4.7.0: + dependencies: + abort-controller: 3.0.0 + buffer: 6.0.3 + events: 3.3.0 + process: 0.11.10 + string_decoder: 1.3.0 + + readdir-glob@1.1.3: + dependencies: + minimatch: 5.1.6 + + readdirp@4.1.2: {} + + recursive-readdir@2.2.3: + dependencies: + minimatch: 3.1.2 + + regenerator-runtime@0.14.1: {} + + require-directory@2.1.1: {} + + requires-port@1.0.0: {} + + resolve-pkg-maps@1.0.0: {} + + resq@1.11.0: + dependencies: + fast-deep-equal: 2.0.1 + + rgb2hex@0.2.5: {} + + rollup@4.34.6: + dependencies: + '@types/estree': 1.0.6 + optionalDependencies: + '@rollup/rollup-android-arm-eabi': 4.34.6 + '@rollup/rollup-android-arm64': 4.34.6 + '@rollup/rollup-darwin-arm64': 4.34.6 + '@rollup/rollup-darwin-x64': 4.34.6 + '@rollup/rollup-freebsd-arm64': 4.34.6 + '@rollup/rollup-freebsd-x64': 4.34.6 + '@rollup/rollup-linux-arm-gnueabihf': 4.34.6 + '@rollup/rollup-linux-arm-musleabihf': 4.34.6 + '@rollup/rollup-linux-arm64-gnu': 4.34.6 + '@rollup/rollup-linux-arm64-musl': 4.34.6 + '@rollup/rollup-linux-loongarch64-gnu': 4.34.6 + '@rollup/rollup-linux-powerpc64le-gnu': 4.34.6 + '@rollup/rollup-linux-riscv64-gnu': 4.34.6 + '@rollup/rollup-linux-s390x-gnu': 4.34.6 + '@rollup/rollup-linux-x64-gnu': 4.34.6 + '@rollup/rollup-linux-x64-musl': 4.34.6 + '@rollup/rollup-win32-arm64-msvc': 4.34.6 + '@rollup/rollup-win32-ia32-msvc': 4.34.6 + '@rollup/rollup-win32-x64-msvc': 4.34.6 + fsevents: 2.3.3 + + run-async@3.0.0: {} + + rxjs@7.8.2: + dependencies: + tslib: 2.8.1 + + safaridriver@1.0.0: {} + + safe-buffer@5.1.2: {} + + safe-buffer@5.2.1: {} + + safer-buffer@2.1.2: {} + + semver@7.7.1: {} + + serialize-error@11.0.3: + dependencies: + type-fest: 2.19.0 + + setimmediate@1.0.5: {} + + shebang-command@2.0.0: + dependencies: + shebang-regex: 3.0.0 + + shebang-regex@3.0.0: {} + + siginfo@2.0.0: {} + + signal-exit@4.1.0: {} + + sirv@3.0.1: + dependencies: + '@polka/url': 1.0.0-next.28 + mrmime: 2.0.0 + totalist: 3.0.1 + + slash@3.0.0: + optional: true + + smart-buffer@4.2.0: {} + + socks-proxy-agent@8.0.5: + dependencies: + agent-base: 7.1.3 + debug: 4.4.0 + socks: 2.8.4 + transitivePeerDependencies: + - supports-color + + socks@2.8.4: + dependencies: + ip-address: 9.0.5 + smart-buffer: 4.2.0 + + source-map-js@1.2.1: {} + + source-map@0.6.1: + optional: true + + spacetrim@0.11.59: {} + + spdx-correct@3.2.0: + dependencies: + spdx-expression-parse: 3.0.1 + spdx-license-ids: 3.0.21 + + spdx-exceptions@2.5.0: {} + + spdx-expression-parse@3.0.1: + dependencies: + spdx-exceptions: 2.5.0 + spdx-license-ids: 3.0.21 + + spdx-license-ids@3.0.21: {} + + split2@4.2.0: {} + + sprintf-js@1.1.3: {} + + stack-utils@2.0.6: + dependencies: + escape-string-regexp: 2.0.0 + optional: true + + stackback@0.0.2: {} + + statuses@2.0.1: {} + + std-env@3.8.0: {} + + streamx@2.22.0: + dependencies: + fast-fifo: 1.3.2 + text-decoder: 1.2.3 + optionalDependencies: + bare-events: 2.5.4 + + strict-event-emitter@0.5.1: {} + + string-width@4.2.3: + dependencies: + emoji-regex: 8.0.0 + is-fullwidth-code-point: 3.0.0 + strip-ansi: 6.0.1 + + string-width@5.1.2: + dependencies: + eastasianwidth: 0.2.0 + emoji-regex: 9.2.2 + strip-ansi: 7.1.0 + + string_decoder@1.1.1: + dependencies: + safe-buffer: 5.1.2 + + string_decoder@1.3.0: + dependencies: + safe-buffer: 5.2.1 + + strip-ansi@6.0.1: + dependencies: + ansi-regex: 5.0.1 + + strip-ansi@7.1.0: + dependencies: + ansi-regex: 6.1.0 + + strip-final-newline@4.0.0: {} + + strnum@1.1.2: {} + + supports-color@7.2.0: + dependencies: + has-flag: 4.0.0 + + tar-fs@3.0.8: + dependencies: + pump: 3.0.2 + tar-stream: 3.1.7 + optionalDependencies: + bare-fs: 4.0.2 + bare-path: 3.0.0 + transitivePeerDependencies: + - bare-buffer + + tar-stream@3.1.7: + dependencies: + b4a: 1.6.7 + fast-fifo: 1.3.2 + streamx: 2.22.0 + + test-exclude@7.0.1: + dependencies: + '@istanbuljs/schema': 0.1.3 + glob: 10.4.5 + minimatch: 9.0.5 + + text-decoder@1.2.3: + dependencies: + b4a: 1.6.7 + + tinybench@2.9.0: {} + + tinyexec@0.3.2: {} + + tinypool@1.0.2: {} + + tinyrainbow@1.2.0: {} + + tinyrainbow@2.0.0: {} + + tinyspy@3.0.2: {} + + tmp@0.0.33: + dependencies: + os-tmpdir: 1.0.2 + + to-regex-range@5.0.1: + dependencies: + is-number: 7.0.0 + optional: true + + totalist@3.0.1: {} + + tough-cookie@4.1.4: + dependencies: + psl: 1.15.0 + punycode: 2.3.1 + universalify: 0.2.0 + url-parse: 1.5.10 + + tslib@2.8.1: {} + + tsx@4.19.3: + dependencies: + esbuild: 0.25.1 + get-tsconfig: 4.10.0 + optionalDependencies: + fsevents: 2.3.3 + + type-fest@0.21.3: {} + + type-fest@2.19.0: {} + + type-fest@3.13.1: {} + + type-fest@4.26.0: {} + + type-fest@4.34.1: {} + + undici-types@6.19.8: {} + + undici-types@6.20.0: {} + + undici@6.21.2: {} + + unicorn-magic@0.3.0: {} + + universalify@0.2.0: {} + + url-parse@1.5.10: + dependencies: + querystringify: 2.2.0 + requires-port: 1.0.0 + + urlpattern-polyfill@10.0.0: {} + + userhome@1.0.1: {} + + util-deprecate@1.0.2: {} + + validate-npm-package-license@3.0.4: + dependencies: + spdx-correct: 3.2.0 + spdx-expression-parse: 3.0.1 + + vite-node@3.0.9(@types/node@22.13.14): + dependencies: + cac: 6.7.14 + debug: 4.4.0 + es-module-lexer: 1.6.0 + pathe: 2.0.3 + vite: 5.4.14(@types/node@22.13.14) + transitivePeerDependencies: + - '@types/node' + - less + - lightningcss + - sass + - sass-embedded + - stylus + - sugarss + - supports-color + - terser + + vite@5.4.14(@types/node@22.13.14): + dependencies: + esbuild: 0.21.5 + postcss: 8.5.2 + rollup: 4.34.6 + optionalDependencies: + '@types/node': 22.13.14 + fsevents: 2.3.3 + + vitest@3.0.9(@types/node@22.13.14)(@vitest/browser@3.0.9)(msw@2.7.3(@types/node@22.13.14)): + dependencies: + '@vitest/expect': 3.0.9 + '@vitest/mocker': 3.0.9(msw@2.7.3(@types/node@22.13.14))(vite@5.4.14(@types/node@22.13.14)) + '@vitest/pretty-format': 3.0.9 + '@vitest/runner': 3.0.9 + '@vitest/snapshot': 3.0.9 + '@vitest/spy': 3.0.9 + '@vitest/utils': 3.0.9 + chai: 5.2.0 + debug: 4.4.0 + expect-type: 1.1.0 + magic-string: 0.30.17 + pathe: 2.0.3 + std-env: 3.8.0 + tinybench: 2.9.0 + tinyexec: 0.3.2 + tinypool: 1.0.2 + tinyrainbow: 2.0.0 + vite: 5.4.14(@types/node@22.13.14) + vite-node: 3.0.9(@types/node@22.13.14) + why-is-node-running: 2.3.0 + optionalDependencies: + '@types/node': 22.13.14 + '@vitest/browser': 3.0.9(@types/node@22.13.14)(playwright@1.51.1)(vite@5.4.14(@types/node@22.13.14))(vitest@3.0.9)(webdriverio@9.12.2) + transitivePeerDependencies: + - less + - lightningcss + - msw + - sass + - sass-embedded + - stylus + - sugarss + - supports-color + - terser + + wait-port@1.1.0: + dependencies: + chalk: 4.1.2 + commander: 9.5.0 + debug: 4.4.0 + transitivePeerDependencies: + - supports-color + + web-streams-polyfill@3.3.3: {} + + webdriver@9.12.2: + dependencies: + '@types/node': 20.17.28 + '@types/ws': 8.18.0 + '@wdio/config': 9.12.2 + '@wdio/logger': 9.4.4 + '@wdio/protocols': 9.12.2 + '@wdio/types': 9.12.2 + '@wdio/utils': 9.12.2 + deepmerge-ts: 7.1.5 + undici: 6.21.2 + ws: 8.18.1 + transitivePeerDependencies: + - bare-buffer + - bufferutil + - supports-color + - utf-8-validate + + webdriverio@9.12.2: + dependencies: + '@types/node': 20.17.28 + '@types/sinonjs__fake-timers': 8.1.5 + '@wdio/config': 9.12.2 + '@wdio/logger': 9.4.4 + '@wdio/protocols': 9.12.2 + '@wdio/repl': 9.4.4 + '@wdio/types': 9.12.2 + '@wdio/utils': 9.12.2 + archiver: 7.0.1 + aria-query: 5.3.0 + cheerio: 1.0.0 + css-shorthand-properties: 1.1.2 + css-value: 0.0.1 + grapheme-splitter: 1.0.4 + htmlfy: 0.6.5 + is-plain-obj: 4.1.0 + jszip: 3.10.1 + lodash.clonedeep: 4.5.0 + lodash.zip: 4.2.0 + query-selector-shadow-dom: 1.0.1 + resq: 1.11.0 + rgb2hex: 0.2.5 + serialize-error: 11.0.3 + urlpattern-polyfill: 10.0.0 + webdriver: 9.12.2 + transitivePeerDependencies: + - bare-buffer + - bufferutil + - supports-color + - utf-8-validate + + whatwg-encoding@3.1.1: + dependencies: + iconv-lite: 0.6.3 + + whatwg-mimetype@4.0.0: {} + + which@2.0.2: + dependencies: + isexe: 2.0.0 + + which@5.0.0: + dependencies: + isexe: 3.1.1 + + why-is-node-running@2.3.0: + dependencies: + siginfo: 2.0.0 + stackback: 0.0.2 + + wrap-ansi@6.2.0: + dependencies: + ansi-styles: 4.3.0 + string-width: 4.2.3 + strip-ansi: 6.0.1 + + wrap-ansi@7.0.0: + dependencies: + ansi-styles: 4.3.0 + string-width: 4.2.3 + strip-ansi: 6.0.1 + + wrap-ansi@8.1.0: + dependencies: + ansi-styles: 6.2.1 + string-width: 5.1.2 + strip-ansi: 7.1.0 + + wrappy@1.0.2: {} + + ws@8.18.1: {} + + y18n@5.0.8: {} + + yargs-parser@21.1.1: {} + + yargs@17.7.2: + dependencies: + cliui: 8.0.1 + escalade: 3.2.0 + get-caller-file: 2.0.5 + require-directory: 2.1.1 + string-width: 4.2.3 + y18n: 5.0.8 + yargs-parser: 21.1.1 + + yauzl@2.10.0: + dependencies: + buffer-crc32: 0.2.13 + fd-slicer: 1.1.0 + + yocto-queue@1.2.1: {} + + yoctocolors-cjs@2.1.2: {} + + yoctocolors@2.1.1: {} + + zip-stream@6.0.1: + dependencies: + archiver-utils: 5.0.2 + compress-commons: 6.0.2 + readable-stream: 4.7.0 diff --git a/samples/browser-webdriverio/readme.md b/samples/browser-webdriverio/readme.md new file mode 100644 index 00000000..7fc9090b --- /dev/null +++ b/samples/browser-webdriverio/readme.md @@ -0,0 +1 @@ +Debugging with the VS Code test explorer is currently only supported when using Playwright with Chromium. \ No newline at end of file diff --git a/samples/browser-webdriverio/src/add.ts b/samples/browser-webdriverio/src/add.ts new file mode 100644 index 00000000..b8848d78 --- /dev/null +++ b/samples/browser-webdriverio/src/add.ts @@ -0,0 +1,7 @@ +export function add(a: number, b: number) { + return a + b +} + +export function sum(from: number, to: number) { + return (from + to) * (to - from + 1) / 2 +} diff --git a/samples/browser-webdriverio/src/should_included_test.ts b/samples/browser-webdriverio/src/should_included_test.ts new file mode 100644 index 00000000..eb51c768 --- /dev/null +++ b/samples/browser-webdriverio/src/should_included_test.ts @@ -0,0 +1,5 @@ +import { describe, it } from 'vitest' + +describe('should included', () => { + it('is included because of workspace plugin setting', () => {}) +}) diff --git a/samples/browser-webdriverio/test/.gitignore b/samples/browser-webdriverio/test/.gitignore new file mode 100644 index 00000000..b05c2dfa --- /dev/null +++ b/samples/browser-webdriverio/test/.gitignore @@ -0,0 +1 @@ +__snapshots__ diff --git a/samples/browser-webdriverio/test/__screenshots__/each.test.ts/testing-all-fail--1----0-1.png b/samples/browser-webdriverio/test/__screenshots__/each.test.ts/testing-all-fail--1----0-1.png new file mode 100644 index 0000000000000000000000000000000000000000..a5b4b97aa6b9675d8ac330222f32f94ab5d6b794 GIT binary patch literal 3306 zcmeAS@N?(olHy`uVBq!ia0y~yV4TOmz}&#W1QcnFZJGrXP|tLB4hYW9Ok`ltm{>c( z+WRnrNbCNVrVd$_cv+c8OS-pt&hk2-Y8Vw0-MS@uQk%xMOb_MK@~`F{lbdHhxUyf- z!g9wB?j{SbNs6qU&-LV=%kAJ7$Yz+z)^kYZ-4@@I@4hZ=EoWgdvb?9VD2AzK|FfIZ z@75QkM#=mT=KsMm>BhUSjuH&39nW3Y+--S(nT_uvmX_aB9$!AE$Z`IFpTY5WGSz`| zp51R~zWCvk_P1rP+S6kXu$g5Vr}-QZm~R!UxAVZlzGHT3VPVHjCT=tc*bs0b@M31- zf~17PmY%N8o}Q+*wt4@IYKG1 zUd;ZmmF=o~#LtGM(h17B)9+~g-5L6*MWEkSMMUbvmO94n4A1j3AGBsNFmTs-x;TbZ z%z1m|ASZ)@zyX8O|8vi)vMf{){&LmUn0vv~KYR=o=WjJAWHUFd;pNz5rf_1EGa3e? z>0mT3jFtzZW#VYPFj^gsHVHc( z+WRnrNbCNVrVd$_cv+c8OS-pt&hk2-Y8Vw0-MS@uQk%xMOb_MK@~`F{lbdHhxUyf- z!g9wB?j{SbNs6qU&-LV=%kAJ7$Yz+z)^kYZ-4@@I@4hZ=EoWgdvb?9VD2AzK|FfIZ z@75QkM#=mT=KsMm>BhUSjuH&39nW3Y+--S(nT_uvmX_aB9$!AE$Z`IFpTY5WGSz`| zp51R~zWCvk_P1rP+S6kXu$g5Vr}-QZm~R!UxAVZlzGHT3VPVHjCT=tc*bs0b@M31- zf~17PmY%N8o}Q+*wt4@IYKG1 zUd;ZmmF=o~#LtGM(h17B)9+~g-5L6*MWEkSMMUbvmO94n4A1j3AGBsNFmTs-x;TbZ z%z1m|ASZ)@zyX8O|8vi)vMf{){&LmUn0vv~KYR=o=WjJAWHUFd;pNz5rf_1EGa3e? z>0mT3jFtzZW#VYPFj^gsHVHc( z+WRnrNbCNVrVd$_cv+c8OS-pt&hk2-Y8Vw0-MS@uQk%xMOb_MK@~`F{lbdHhxUyf- z!g9wB?j{SbNs6qU&-LV=%kAJ7$Yz+z)^kYZ-4@@I@4hZ=EoWgdvb?9VD2AzK|FfIZ z@75QkM#=mT=KsMm>BhUSjuH&39nW3Y+--S(nT_uvmX_aB9$!AE$Z`IFpTY5WGSz`| zp51R~zWCvk_P1rP+S6kXu$g5Vr}-QZm~R!UxAVZlzGHT3VPVHjCT=tc*bs0b@M31- zf~17PmY%N8o}Q+*wt4@IYKG1 zUd;ZmmF=o~#LtGM(h17B)9+~g-5L6*MWEkSMMUbvmO94n4A1j3AGBsNFmTs-x;TbZ z%z1m|ASZ)@zyX8O|8vi)vMf{){&LmUn0vv~KYR=o=WjJAWHUFd;pNz5rf_1EGa3e? z>0mT3jFtzZW#VYPFj^gsHVHc( z+WRnrNbCNVrVd$_cv+c8OS-pt&hk2-Y8Vw0-MS@uQk%xMOb_MK@~`F{lbdHhxUyf- z!g9wB?j{SbNs6qU&-LV=%kAJ7$Yz+z)^kYZ-4@@I@4hZ=EoWgdvb?9VD2AzK|FfIZ z@75QkM#=mT=KsMm>BhUSjuH&39nW3Y+--S(nT_uvmX_aB9$!AE$Z`IFpTY5WGSz`| zp51R~zWCvk_P1rP+S6kXu$g5Vr}-QZm~R!UxAVZlzGHT3VPVHjCT=tc*bs0b@M31- zf~17PmY%N8o}Q+*wt4@IYKG1 zUd;ZmmF=o~#LtGM(h17B)9+~g-5L6*MWEkSMMUbvmO94n4A1j3AGBsNFmTs-x;TbZ z%z1m|ASZ)@zyX8O|8vi)vMf{){&LmUn0vv~KYR=o=WjJAWHUFd;pNz5rf_1EGa3e? z>0mT3jFtzZW#VYPFj^gsHVHc( z+WRnrNbCNVrVd$_cv+c8OS-pt&hk2-Y8Vw0-MS@uQk%xMOb_MK@~`F{lbdHhxUyf- z!g9wB?j{SbNs6qU&-LV=%kAJ7$Yz+z)^kYZ-4@@I@4hZ=EoWgdvb?9VD2AzK|FfIZ z@75QkM#=mT=KsMm>BhUSjuH&39nW3Y+--S(nT_uvmX_aB9$!AE$Z`IFpTY5WGSz`| zp51R~zWCvk_P1rP+S6kXu$g5Vr}-QZm~R!UxAVZlzGHT3VPVHjCT=tc*bs0b@M31- zf~17PmY%N8o}Q+*wt4@IYKG1 zUd;ZmmF=o~#LtGM(h17B)9+~g-5L6*MWEkSMMUbvmO94n4A1j3AGBsNFmTs-x;TbZ z%z1m|ASZ)@zyX8O|8vi)vMf{){&LmUn0vv~KYR=o=WjJAWHUFd;pNz5rf_1EGa3e? z>0mT3jFtzZW#VYPFj^gsHVHc( z+WRnrNbCNVrVd$_cv+c8OS-pt&hk2-Y8Vw0-MS@uQk%xMOb_MK@~`F{lbdHhxUyf- z!g9wB?j{SbNs6qU&-LV=%kAJ7$Yz+z)^kYZ-4@@I@4hZ=EoWgdvb?9VD2AzK|FfIZ z@75QkM#=mT=KsMm>BhUSjuH&39nW3Y+--S(nT_uvmX_aB9$!AE$Z`IFpTY5WGSz`| zp51R~zWCvk_P1rP+S6kXu$g5Vr}-QZm~R!UxAVZlzGHT3VPVHjCT=tc*bs0b@M31- zf~17PmY%N8o}Q+*wt4@IYKG1 zUd;ZmmF=o~#LtGM(h17B)9+~g-5L6*MWEkSMMUbvmO94n4A1j3AGBsNFmTs-x;TbZ z%z1m|ASZ)@zyX8O|8vi)vMf{){&LmUn0vv~KYR=o=WjJAWHUFd;pNz5rf_1EGa3e? z>0mT3jFtzZW#VYPFj^gsHVHc( z+WRnrNbCNVrVd$_cv+c8OS-pt&hk2-Y8Vw0-MS@uQk%xMOb_MK@~`F{lbdHhxUyf- z!g9wB?j{SbNs6qU&-LV=%kAJ7$Yz+z)^kYZ-4@@I@4hZ=EoWgdvb?9VD2AzK|FfIZ z@75QkM#=mT=KsMm>BhUSjuH&39nW3Y+--S(nT_uvmX_aB9$!AE$Z`IFpTY5WGSz`| zp51R~zWCvk_P1rP+S6kXu$g5Vr}-QZm~R!UxAVZlzGHT3VPVHjCT=tc*bs0b@M31- zf~17PmY%N8o}Q+*wt4@IYKG1 zUd;ZmmF=o~#LtGM(h17B)9+~g-5L6*MWEkSMMUbvmO94n4A1j3AGBsNFmTs-x;TbZ z%z1m|ASZ)@zyX8O|8vi)vMf{){&LmUn0vv~KYR=o=WjJAWHUFd;pNz5rf_1EGa3e? z>0mT3jFtzZW#VYPFj^gsHVHc( z+WRnrNbCNVrVd$_cv+c8OS-pt&hk2-Y8Vw0-MS@uQk%xMOb_MK@~`F{lbdHhxUyf- z!g9wB?j{SbNs6qU&-LV=%kAJ7$Yz+z)^kYZ-4@@I@4hZ=EoWgdvb?9VD2AzK|FfIZ z@75QkM#=mT=KsMm>BhUSjuH&39nW3Y+--S(nT_uvmX_aB9$!AE$Z`IFpTY5WGSz`| zp51R~zWCvk_P1rP+S6kXu$g5Vr}-QZm~R!UxAVZlzGHT3VPVHjCT=tc*bs0b@M31- zf~17PmY%N8o}Q+*wt4@IYKG1 zUd;ZmmF=o~#LtGM(h17B)9+~g-5L6*MWEkSMMUbvmO94n4A1j3AGBsNFmTs-x;TbZ z%z1m|ASZ)@zyX8O|8vi)vMf{){&LmUn0vv~KYR=o=WjJAWHUFd;pNz5rf_1EGa3e? z>0mT3jFtzZW#VYPFj^gsHVHc( z+WRnrNbCNVrVd$_cv+c8OS-pt&hk2-Y8Vw0-MS@uQk%xMOb_MK@~`F{lbdHhxUyf- z!g9wB?j{SbNs6qU&-LV=%kAJ7$Yz+z)^kYZ-4@@I@4hZ=EoWgdvb?9VD2AzK|FfIZ z@75QkM#=mT=KsMm>BhUSjuH&39nW3Y+--S(nT_uvmX_aB9$!AE$Z`IFpTY5WGSz`| zp51R~zWCvk_P1rP+S6kXu$g5Vr}-QZm~R!UxAVZlzGHT3VPVHjCT=tc*bs0b@M31- zf~17PmY%N8o}Q+*wt4@IYKG1 zUd;ZmmF=o~#LtGM(h17B)9+~g-5L6*MWEkSMMUbvmO94n4A1j3AGBsNFmTs-x;TbZ z%z1m|ASZ)@zyX8O|8vi)vMf{){&LmUn0vv~KYR=o=WjJAWHUFd;pNz5rf_1EGa3e? z>0mT3jFtzZW#VYPFj^gsHVH { + it('add', () => { + expect(add(1, 1)).toBe(2) + }) + + it('sum', () => { + expect(sum(0, 10)).toBe(55) + }) + + it.skip('skipped', () => { + expect(1 + 2).toBe(3) + }) + + it.todo('todo') + it('async task', async () => { + await new Promise(resolve => setTimeout(resolve, 100)) + }) + + it('async task 0.5s', async () => { + await new Promise(resolve => setTimeout(resolve, 500)) + }) + + it('async task 1s', async () => { + await new Promise(resolve => setTimeout(resolve, 1000)) + }) + + it('long task', () => { + let sum = 0 + for (let i = 0; i < 2e8; i++) + sum += i + + expect(sum).toBeGreaterThan(1) + }) +}) + +describe('testing', () => { + it('run', () => { + const a = 10 + expect(a).toBe(10) + }) + + it('mul', () => { + expect(5 * 5).toBe(25) + }) + + it("mul fail", () => { + expect(5 * 5).toBe(25) + }) +}) diff --git a/samples/browser-webdriverio/test/console.test.ts b/samples/browser-webdriverio/test/console.test.ts new file mode 100644 index 00000000..4efe8f6a --- /dev/null +++ b/samples/browser-webdriverio/test/console.test.ts @@ -0,0 +1,25 @@ +import { describe, it } from 'vitest' + +const sleep = (ms: number) => new Promise(resolve => setTimeout(resolve, ms)) + +describe('console', () => { + it('basic', () => { + console.log([ + 'string', + { hello: 'world' }, + 1234, + /regex/g, + true, + false, + null, + ]) + }) + + it('async', async () => { + console.log('1st') + await sleep(200) + console.log('2nd') + await sleep(200) + console.log('3rd') + }) +}) diff --git a/samples/browser-webdriverio/test/deep/deeper/deep.test.ts b/samples/browser-webdriverio/test/deep/deeper/deep.test.ts new file mode 100644 index 00000000..64456cdf --- /dev/null +++ b/samples/browser-webdriverio/test/deep/deeper/deep.test.ts @@ -0,0 +1,5 @@ +import { expect, it } from 'vitest' + +it('test', () => { + expect(1).toBe(1) +}) \ No newline at end of file diff --git a/samples/browser-webdriverio/test/duplicated.test.ts b/samples/browser-webdriverio/test/duplicated.test.ts new file mode 100644 index 00000000..8f839ba0 --- /dev/null +++ b/samples/browser-webdriverio/test/duplicated.test.ts @@ -0,0 +1,8 @@ +import { describe, test } from "vitest"; + +describe("testing", () => { + test("number 1", () => { }) +}); +describe("testing", () => { + test("number 2", () => { }) +}); diff --git a/samples/browser-webdriverio/test/each.test.ts b/samples/browser-webdriverio/test/each.test.ts new file mode 100644 index 00000000..f7cff915 --- /dev/null +++ b/samples/browser-webdriverio/test/each.test.ts @@ -0,0 +1,84 @@ +import { describe, expect, it, test, } from 'vitest' + +describe('testing', (a) => { + it.each([ + [1, 1], [2, 2], [3, 3] + ])(`all pass: %i => %i`, (a, b) => { + expect(a).toBe(b) + }) + it.each([ + [1, 1], [2, 1], [3, 1] + ])(`first pass: %i => %i`, (a, b) => { + expect(a).toBe(b) + }) + it.each([ + [1, 1], [2, 2], [3, 1] + ])(`last pass: %i => %i`, (a, b) => { + expect(a).toBe(b) + }) + it.each([ + [1, 1], [2, 2], [3, 1] + ])(`first fail: %i => %i`, (a, b) => { + expect(a).toBe(b) + }) + it.each([ + [1, 1], [2, 2], [3, 1] + ])(`last fail: %i => %i`, (a, b) => { + expect(a).toBe(b) + }) + it.each([ + [1, 0], [2, 0], [3, 0] + ])(`all fail: %i => %i`, (a, b) => { + expect(a).toBe(b) + }) + it.each([ + 1, 2, 3 + ])('run %i', (a) => { + expect(a).toBe(a) + }) + it.each([ + [1, 1], [2, 4], [3, 9] + ])('run mul %i', (a,b) => { + expect(a * a).toBe(b) + }) + test.each([ + ["test1", 1], + ["test2", 2], + ["test3", 3], + ])(`%s => %i`, (a, b) => { + expect(a.at(-1)).toBe(`${b}`) + }) + test.each` + a | b | expected + ${1} | ${1} | ${2} + ${'a'} | ${'b'} | ${'ab'} + ${[]} | ${'b'} | ${'b'} + ${{}} | ${'b'} | ${'[object Object]b'} + ${{ asd: 1 }} | ${'b'} | ${'[object Object]b'} + `('table1: returns $expected when $a is added $b', ({ a, b, expected }) => { + expect(a + b).toBe(expected) + }) + test.each` + a | b | expected + ${{v: 1}} | ${{v: 1}} | ${2} + `('table2: returns $expected when $a.v is added $b.v', ({ a, b, expected }) => { + expect(a.v + b.v).toBe(expected) + }) + test.each([ + { input: 1, add: 1, sum: 2 }, + { input: 2, add: 2, sum: 4 }, + ])('$input + $add = $sum', ({ input, add, sum }) => { + expect(input + add).toBe(sum) + }) +}) + +// 'Test result not fourd' error occurs as both .each patterns are matched +// TODO: Fix this +describe("over matched test patterns", () => { + test.each(['1', '2'])('run %s', (a) => { + expect(a).toBe(String(a)) + }) + test.each(['1', '2'])('run for %s', (a) => { + expect(a).toBe(String(a)) + }) +}) diff --git a/samples/browser-webdriverio/test/env.test.ts b/samples/browser-webdriverio/test/env.test.ts new file mode 100644 index 00000000..07b88808 --- /dev/null +++ b/samples/browser-webdriverio/test/env.test.ts @@ -0,0 +1,9 @@ +import { test, expect } from "vitest"; + +test('process.env', () => { + expect(process.env.TEST).toBe('true'); + expect(process.env.VITEST).toBe('true'); + expect(process.env.NODE_ENV).toBe('test'); + expect(process.env.VITEST_VSCODE).toBe('true'); + expect(process.env.TEST_CUSTOM_ENV).toBe('hello'); +}); diff --git a/samples/browser-webdriverio/test/fail_to_run.test.ts b/samples/browser-webdriverio/test/fail_to_run.test.ts new file mode 100644 index 00000000..13900e21 --- /dev/null +++ b/samples/browser-webdriverio/test/fail_to_run.test.ts @@ -0,0 +1 @@ +test('aaaaaa', () => {}) diff --git a/samples/browser-webdriverio/test/ignored.test.ts b/samples/browser-webdriverio/test/ignored.test.ts new file mode 100644 index 00000000..ff1c9074 --- /dev/null +++ b/samples/browser-webdriverio/test/ignored.test.ts @@ -0,0 +1,5 @@ +import { describe, it } from 'vitest' + +describe('ignored test', () => { + it('is ignored because of vitest plugin setting', () => {}) +}) diff --git a/samples/browser-webdriverio/test/mul.test.ts b/samples/browser-webdriverio/test/mul.test.ts new file mode 100644 index 00000000..b1a6e21e --- /dev/null +++ b/samples/browser-webdriverio/test/mul.test.ts @@ -0,0 +1,6 @@ +import { describe, it } from 'vitest' + +describe('mul', () => { + it.skip('run 1', () => {}) + it('run', () => {}) +}) diff --git a/samples/browser-webdriverio/test/snapshot.test.ts b/samples/browser-webdriverio/test/snapshot.test.ts new file mode 100644 index 00000000..2944c559 --- /dev/null +++ b/samples/browser-webdriverio/test/snapshot.test.ts @@ -0,0 +1,11 @@ +import { describe, expect, it } from 'vitest' + +describe('snapshots', () => { + it('string', () => { + expect('bc').toMatchSnapshot() + }) + it('async', async () => { + await new Promise(resolve => setTimeout(resolve, 200)) + expect('bc').toMatchSnapshot() + }) +}) diff --git a/samples/browser-webdriverio/test/using.test.ts b/samples/browser-webdriverio/test/using.test.ts new file mode 100644 index 00000000..d7e13a31 --- /dev/null +++ b/samples/browser-webdriverio/test/using.test.ts @@ -0,0 +1,43 @@ +import { describe, expect, it } from 'vitest'; + +(Symbol as any).dispose ??= Symbol('Symbol.dispose'); +(Symbol as any).asyncDispose ??= Symbol('Symbol.asyncDispose') + +describe('using keyword', () => { + it('dispose', () => { + function getDisposableResource() { + using resource = new SomeDisposableResource() + return resource + } + + const resource = getDisposableResource() + expect(resource.isDisposed).toBe(true) + }) + + it('asyncDispose', async () => { + async function getAsyncDisposableResource() { + await using resource = new SomeAsyncDisposableResource() + return resource + } + + const resource = await getAsyncDisposableResource() + expect(resource.isDisposed).toBe(true) + }) +}) + +class SomeDisposableResource implements Disposable { + public isDisposed = false; + + [Symbol.dispose](): void { + this.isDisposed = true + } +} + +class SomeAsyncDisposableResource implements AsyncDisposable { + public isDisposed = false + + async [Symbol.asyncDispose](): Promise { + await new Promise(resolve => setTimeout(resolve, 0)) + this.isDisposed = true + } +} diff --git a/samples/browser-webdriverio/vitest.config.ts b/samples/browser-webdriverio/vitest.config.ts new file mode 100644 index 00000000..8b0ab4cf --- /dev/null +++ b/samples/browser-webdriverio/vitest.config.ts @@ -0,0 +1,33 @@ +/// +/// + +// Configure Vitest (https://vitest.dev/config) + +import { defineConfig } from "vitest/config"; + +export default defineConfig({ + esbuild: { + target: "es2020", + }, + test: { + include: ["test/**/*.test.ts"], + exclude: ["test/ignored.test.ts"], + browser: { + enabled: true, + headless: true, + provider: "webdriverio", + instances: [ + { + browser: "chrome", + providerOptions: { + capabilities: { + browserName: "chrome", + browserVersion: "latest", + platformName: "macOS 11.00", + }, + }, + }, + ], + }, + }, +}); diff --git a/samples/browser/.vscode/launch.json b/samples/browser/.vscode/launch.json deleted file mode 100644 index 8c1c7910..00000000 --- a/samples/browser/.vscode/launch.json +++ /dev/null @@ -1,16 +0,0 @@ -{ - "version": "0.2.0", - "configurations": [ - { - "type": "chrome", - "request": "attach", - "name": "vitest:test-explorer:attach", - "presentation": { - "hidden": true, - "group": "test", - "order": 1 - }, - "port": 30001, - }, - ], - } \ No newline at end of file diff --git a/samples/browser/.vscode/settings.json b/samples/browser/.vscode/settings.json index 83b9c56c..b6a8a2a8 100644 --- a/samples/browser/.vscode/settings.json +++ b/samples/browser/.vscode/settings.json @@ -5,7 +5,4 @@ "[typescript]": { "editor.defaultFormatter": "dbaeumer.vscode-eslint" }, - // See launch.json - "vitest.debugSecondaryLaunchConfigName": "vitest:test-explorer:attach", - "vitest.cliArgumentsDebug": "--inspect-brk=localhost:30001 --browser --no-file-parallelism" } diff --git a/src/api.ts b/src/api.ts index 3784efa5..a8d0cc8d 100644 --- a/src/api.ts +++ b/src/api.ts @@ -361,12 +361,17 @@ async function createVitestFolderAPI(usedConfigs: Set, pkg: VitestPackag if (config.cliArguments && !pkg.arguments) { pkg.arguments = `vitest ${config.cliArguments}` } - if (!pkg.debugArguments) { - pkg.debugArguments = `vitest ${config.cliArgumentsDebug ?? config.cliArguments}` - } const vitest = config.shellType === 'terminal' ? await createVitestTerminalProcess(pkg) : await createVitestProcess(pkg) + + pkg.resolvedBrowserOptions = await vitest.rpc.getResolvedBrowserOptions() + if (!pkg.argumentsForBrowserAttach) { + const inspectBrk = `--inspect-brk localhost:${config.debuggerPort ?? '9229'}` + // regardless of user config, some properties need to be set when debugging with browser mode enabled + pkg.argumentsForBrowserAttach = `${pkg.arguments ?? 'vitest'} ${inspectBrk} --browser=chromium ${pkg.arguments ? '' : (config.cliArguments ?? '')}` + } + vitest.configs.forEach((config) => { usedConfigs.add(config) }) @@ -377,7 +382,6 @@ export interface ResolvedMeta { rpc: VitestRPC process: ExtensionWorkerProcess workspaceSource: string | false - debug: boolean pkg: VitestPackage configs: string[] handlers: { diff --git a/src/api/child_process.ts b/src/api/child_process.ts index aeeb33bc..b938dee7 100644 --- a/src/api/child_process.ts +++ b/src/api/child_process.ts @@ -89,7 +89,7 @@ export async function createVitestProcess(pkg: VitestPackage) { vitest.on('exit', onExit) vitest.on('error', onError) - waitForWsConnection(wss, pkg, false, 'child_process') + waitForWsConnection(wss, pkg, false, false, 'child_process') .then((resolved) => { resolved.handlers.onStdout = (callback: (data: string) => void) => { stdoutCallbacks.add(callback) diff --git a/src/api/pkg.ts b/src/api/pkg.ts index 86959b39..fe66d262 100644 --- a/src/api/pkg.ts +++ b/src/api/pkg.ts @@ -2,6 +2,7 @@ import { existsSync, readFileSync } from 'node:fs' import * as vscode from 'vscode' import { basename, dirname, normalize, resolve } from 'pathe' import { gte } from 'semver' +import type { ResolvedBrowserOptions } from 'vitest/dist/node.js' import { log } from '../log' import { configGlob, minimumVersion, workspaceGlob } from '../constants' import { getConfig } from '../config' @@ -23,7 +24,8 @@ export interface VitestPackage { cwd: string version: string arguments?: string - debugArguments?: string + argumentsForBrowserAttach?: string + resolvedBrowserOptions?: ResolvedBrowserOptions configFile?: string workspaceFile?: string loader?: string diff --git a/src/api/rpc.ts b/src/api/rpc.ts index 91b8fbfa..b3cad590 100644 --- a/src/api/rpc.ts +++ b/src/api/rpc.ts @@ -1,6 +1,7 @@ import v8 from 'node:v8' import { type BirpcReturn, createBirpc } from 'birpc' import type { RunnerTestFile, TaskResultPack, UserConsoleLog } from 'vitest' +import type { ResolvedBrowserOptions } from 'vitest/dist/node.js' export type SerializedTestSpecification = [ project: { name: string | undefined }, @@ -24,6 +25,8 @@ export interface ExtensionWorkerTransport { waitForCoverageReport: () => Promise close: () => void + getResolvedBrowserOptions: () => ResolvedBrowserOptions | undefined + onFilesCreated: (files: string[]) => void onFilesChanged: (files: string[]) => void } diff --git a/src/api/terminal.ts b/src/api/terminal.ts index 6793637e..1d65d302 100644 --- a/src/api/terminal.ts +++ b/src/api/terminal.ts @@ -39,7 +39,7 @@ export async function createVitestTerminalProcess(pkg: VitestPackage): Promise((resolve, reject) => { @@ -37,7 +38,6 @@ export function waitForWsConnection( }) resolve({ rpc: api, - debug, workspaceSource: message.workspaceSource, handlers: { ...handlers, @@ -90,7 +90,7 @@ export function waitForWsConnection( env: getConfig(pkg.folder).env || undefined, configFile: pkg.configFile, cwd: pkg.cwd, - arguments: debug ? pkg.debugArguments : pkg.arguments, + arguments: browserAttach ? pkg.argumentsForBrowserAttach : pkg.arguments, workspaceFile: pkg.workspaceFile, id: pkg.id, pnpApi: pnp, diff --git a/src/config.ts b/src/config.ts index 7f4d8c69..8fe86606 100644 --- a/src/config.ts +++ b/src/config.ts @@ -62,23 +62,18 @@ export function getConfig(workspaceFolder?: WorkspaceFolder) { const experimentalStaticAstCollect = get('experimentalStaticAstCollect', false)! const cliArguments = get('cliArguments') - const cliArgumentsDebug = get('cliArgumentsDebug') const debugOutFiles = get('debugOutFiles', []) - const debugSecondaryLaunchConfigName = get('debugSecondaryLaunchConfigName') - return { env: get>('nodeEnv', null), debugExclude: get('debugExclude'), debugOutFiles, - debugSecondaryLaunchConfigName, filesWatcherInclude, terminalShellArgs, terminalShellPath, shellType, cliArguments, - cliArgumentsDebug, nodeExecArgs, experimentalStaticAstCollect, vitestPackagePath: resolvedVitestPackagePath, diff --git a/src/debug.ts b/src/debug.ts index 2fc3a0bb..17e08e97 100644 --- a/src/debug.ts +++ b/src/debug.ts @@ -107,8 +107,10 @@ export async function debugTests( } let metadata!: WsConnectionMetadata + const needsAttach = !!pkg.resolvedBrowserOptions?.enabled && pkg.resolvedBrowserOptions.provider === 'playwright' + try { - metadata = await waitForWsConnection(wss, pkg, true, config.shellType) + metadata = await waitForWsConnection(wss, pkg, true, needsAttach, config.shellType) const api = new VitestFolderAPI(pkg, { ...metadata, process: new ExtensionDebugProcess(session, metadata.ws), @@ -125,12 +127,13 @@ export async function debugTests( await vscode.debug.stopDebugging(session) }) - // Start secondary debug config before running test - // Deliberately not awaiting, because attach config may depend on the test run to start (e.g. to attach) - if (config.debugSecondaryLaunchConfigName) { + if (needsAttach) { + const attachConfig = getAttachConfigForBrowser(config, pkg) + // Start secondary debug config before running test + // Deliberately not awaiting, because attach config may depend on the test run to start (e.g. to attach) vscode.debug.startDebugging( pkg.folder, - config.debugSecondaryLaunchConfigName, + attachConfig, session, ).then( (fulfilled) => { @@ -214,6 +217,24 @@ async function getRuntimeOptions(pkg: VitestPackage) { } } +function getAttachConfigForBrowser(config: ReturnType, pkg: VitestPackage): vscode.DebugConfiguration { + return { + __name: 'Vitest_Attach', + request: 'attach', + name: 'Debug Tests (Browser)', + port: config.debuggerPort ?? '9229', + skipFiles: config.debugExclude, + ...( + config.debugOutFiles?.length + ? { outFiles: config.debugOutFiles } + : {} + ), + smartStep: true, + cwd: pkg.cwd, + type: 'chrome', + } +} + class ExtensionDebugProcess implements ExtensionWorkerProcess { public id: number = Math.random() public closed = false diff --git a/src/worker/worker.ts b/src/worker/worker.ts index cb0e90f0..8f566c52 100644 --- a/src/worker/worker.ts +++ b/src/worker/worker.ts @@ -1,5 +1,5 @@ import { readFileSync } from 'node:fs' -import type { Vitest as VitestCore, WorkspaceProject } from 'vitest/node' +import type { ResolvedBrowserOptions, Vitest as VitestCore, WorkspaceProject } from 'vitest/node' import { relative } from 'pathe' import mm from 'micromatch' import type { ExtensionWorkerTransport, SerializedTestSpecification } from '../api/rpc' @@ -146,6 +146,10 @@ export class ExtensionWorker implements ExtensionWorkerTransport { return files.map(([project, spec]) => [project.config.name || '', spec]) } + public getResolvedBrowserOptions(): ResolvedBrowserOptions | undefined { + return this.ctx.config?.browser + } + private async globTestFiles(filters?: string[]) { return await this.ctx.globTestFiles(filters) } From 2fc7d89974022d7252d78720ec5d508892f0ae64 Mon Sep 17 00:00:00 2001 From: Nathan Castle Date: Fri, 28 Mar 2025 22:28:42 -0700 Subject: [PATCH 06/24] fix: get webdriverio working Not a great solution because it relies on additional configuration being done at the project level, including setting up custom command to communicate with webdriverio (this is that project's promoted pattern). --- .../browser-webdriverio/.vscode/settings.json | 1 + samples/browser-webdriverio/readme.md | 1 - .../add.test.ts/addition-add-1.png | Bin 0 -> 3307 bytes .../testing-all-fail--1----0-1.png | Bin 3306 -> 3307 bytes .../testing-all-fail--2----0-1.png | Bin 3306 -> 3307 bytes .../testing-all-fail--3----0-1.png | Bin 3306 -> 3307 bytes .../testing-first-fail--3----1-1.png | Bin 3306 -> 3307 bytes .../testing-first-pass--2----1-1.png | Bin 3306 -> 3307 bytes .../testing-first-pass--3----1-1.png | Bin 3306 -> 3307 bytes .../testing-last-fail--3----1-1.png | Bin 3306 -> 3307 bytes .../testing-last-pass--3----1-1.png | Bin 3306 -> 3307 bytes .../env.test.ts/process-env-1.png | Bin 3306 -> 3307 bytes samples/browser-webdriverio/test/add.test.ts | 7 +++++-- samples/browser-webdriverio/vitest.config.ts | 19 ++++++++++++------ src/api.ts | 5 +++-- src/debug.ts | 2 +- src/worker/worker.ts | 2 +- 17 files changed, 24 insertions(+), 13 deletions(-) delete mode 100644 samples/browser-webdriverio/readme.md create mode 100644 samples/browser-webdriverio/test/__screenshots__/add.test.ts/addition-add-1.png diff --git a/samples/browser-webdriverio/.vscode/settings.json b/samples/browser-webdriverio/.vscode/settings.json index 3c9a0945..19966426 100644 --- a/samples/browser-webdriverio/.vscode/settings.json +++ b/samples/browser-webdriverio/.vscode/settings.json @@ -2,6 +2,7 @@ "vitest.nodeEnv": { "TEST_CUSTOM_ENV": "hello" }, + "vitest.debuggerPort": "9224", "[typescript]": { "editor.defaultFormatter": "esbenp.prettier-vscode" }, diff --git a/samples/browser-webdriverio/readme.md b/samples/browser-webdriverio/readme.md deleted file mode 100644 index 7fc9090b..00000000 --- a/samples/browser-webdriverio/readme.md +++ /dev/null @@ -1 +0,0 @@ -Debugging with the VS Code test explorer is currently only supported when using Playwright with Chromium. \ No newline at end of file diff --git a/samples/browser-webdriverio/test/__screenshots__/add.test.ts/addition-add-1.png b/samples/browser-webdriverio/test/__screenshots__/add.test.ts/addition-add-1.png new file mode 100644 index 0000000000000000000000000000000000000000..34cd3439c378cc1809ac75ca362f54b03c3fb321 GIT binary patch literal 3307 zcmeAS@N?(olHy`uVBq!ia0y~yV4TOmz}&#W1QcnFZJGrX(8zRl4hYW9Ok`ltm{>c( z*86aRNbCHTrVdvY?b3o1Dtfn6%+|K*`6jQ*UOl1A`*OsUx)u{xbN2B6joq6!d)K!= zc%slz?N~5vyQI*Bs%7oP{CBGLPTXdY6m46qkz?j_G_!olRDKl|v7)`62Z}sDd=^WO z|Nj4^?&YlW^D7R>bT}=)%ea#L$uGnETWqrPq zlW!#@B_|ZMw0gA~NtyC|JYVtjs+C0X1bgB4kNDF1C-^@t^G`_T+8pyp)t>Lph1dv5 zhi|?=?lrwJ&Z#?i%XWhJW7XKH_OYUVk`D_Tn)BsQ&u zE=^;qYpalUOVe1?euOkdHwRb$fs3=VOMi#pu@5nCZ{j*d7mJ2W^lr#VU delta 318 zcmV-E0m1(38R{93B!4GqLqkwgYiVHs04R}tkULAm02GD4go2121YaE-;-rhVNt#N) zB{5oDTZOb+l7=X@X-Fe=cl9@jlY^V!)W0D(Ik>nBf;dW&Aq9!&E+6L}xDOC(0F?%e z!X)mrP08-{rG<9{1Ts0^B%)jbe81+|m)(DIWm+8g6A$7JtPzw$h3X| Qi)cyDnc#(KvsD3>3rb;@jQ{`u diff --git a/samples/browser-webdriverio/test/__screenshots__/each.test.ts/testing-all-fail--2----0-1.png b/samples/browser-webdriverio/test/__screenshots__/each.test.ts/testing-all-fail--2----0-1.png index a5b4b97aa6b9675d8ac330222f32f94ab5d6b794..34cd3439c378cc1809ac75ca362f54b03c3fb321 100644 GIT binary patch delta 319 zcmV-F0l@z18S5F4B!4JrLqkwgYiVHs04R}tkUdMoU=)R)go21g1S@rL$RsY>BsQ&u zE=^;qYpalUOVe1?euOkdHwRb$fs3=VOMi#pu@5nCZ{j*d7mJ2W^lr#VU delta 318 zcmV-E0m1(38R{93B!4GqLqkwgYiVHs04R}tkULAm02GD4go2121YaE-;-rhVNt#N) zB{5oDTZOb+l7=X@X-Fe=cl9@jlY^V!)W0D(Ik>nBf;dW&Aq9!&E+6L}xDOC(0F?%e z!X)mrP08-{rG<9{1Ts0^B%)jbe81+|m)(DIWm+8g6A$7JtPzw$h3X| Qi)cyDnc#(KvsD3>3rb;@jQ{`u diff --git a/samples/browser-webdriverio/test/__screenshots__/each.test.ts/testing-all-fail--3----0-1.png b/samples/browser-webdriverio/test/__screenshots__/each.test.ts/testing-all-fail--3----0-1.png index a5b4b97aa6b9675d8ac330222f32f94ab5d6b794..34cd3439c378cc1809ac75ca362f54b03c3fb321 100644 GIT binary patch delta 319 zcmV-F0l@z18S5F4B!4JrLqkwgYiVHs04R}tkUdMoU=)R)go21g1S@rL$RsY>BsQ&u zE=^;qYpalUOVe1?euOkdHwRb$fs3=VOMi#pu@5nCZ{j*d7mJ2W^lr#VU delta 318 zcmV-E0m1(38R{93B!4GqLqkwgYiVHs04R}tkULAm02GD4go2121YaE-;-rhVNt#N) zB{5oDTZOb+l7=X@X-Fe=cl9@jlY^V!)W0D(Ik>nBf;dW&Aq9!&E+6L}xDOC(0F?%e z!X)mrP08-{rG<9{1Ts0^B%)jbe81+|m)(DIWm+8g6A$7JtPzw$h3X| Qi)cyDnc#(KvsD3>3rb;@jQ{`u diff --git a/samples/browser-webdriverio/test/__screenshots__/each.test.ts/testing-first-fail--3----1-1.png b/samples/browser-webdriverio/test/__screenshots__/each.test.ts/testing-first-fail--3----1-1.png index a5b4b97aa6b9675d8ac330222f32f94ab5d6b794..34cd3439c378cc1809ac75ca362f54b03c3fb321 100644 GIT binary patch delta 319 zcmV-F0l@z18S5F4B!4JrLqkwgYiVHs04R}tkUdMoU=)R)go21g1S@rL$RsY>BsQ&u zE=^;qYpalUOVe1?euOkdHwRb$fs3=VOMi#pu@5nCZ{j*d7mJ2W^lr#VU delta 318 zcmV-E0m1(38R{93B!4GqLqkwgYiVHs04R}tkULAm02GD4go2121YaE-;-rhVNt#N) zB{5oDTZOb+l7=X@X-Fe=cl9@jlY^V!)W0D(Ik>nBf;dW&Aq9!&E+6L}xDOC(0F?%e z!X)mrP08-{rG<9{1Ts0^B%)jbe81+|m)(DIWm+8g6A$7JtPzw$h3X| Qi)cyDnc#(KvsD3>3rb;@jQ{`u diff --git a/samples/browser-webdriverio/test/__screenshots__/each.test.ts/testing-first-pass--2----1-1.png b/samples/browser-webdriverio/test/__screenshots__/each.test.ts/testing-first-pass--2----1-1.png index a5b4b97aa6b9675d8ac330222f32f94ab5d6b794..34cd3439c378cc1809ac75ca362f54b03c3fb321 100644 GIT binary patch delta 319 zcmV-F0l@z18S5F4B!4JrLqkwgYiVHs04R}tkUdMoU=)R)go21g1S@rL$RsY>BsQ&u zE=^;qYpalUOVe1?euOkdHwRb$fs3=VOMi#pu@5nCZ{j*d7mJ2W^lr#VU delta 318 zcmV-E0m1(38R{93B!4GqLqkwgYiVHs04R}tkULAm02GD4go2121YaE-;-rhVNt#N) zB{5oDTZOb+l7=X@X-Fe=cl9@jlY^V!)W0D(Ik>nBf;dW&Aq9!&E+6L}xDOC(0F?%e z!X)mrP08-{rG<9{1Ts0^B%)jbe81+|m)(DIWm+8g6A$7JtPzw$h3X| Qi)cyDnc#(KvsD3>3rb;@jQ{`u diff --git a/samples/browser-webdriverio/test/__screenshots__/each.test.ts/testing-first-pass--3----1-1.png b/samples/browser-webdriverio/test/__screenshots__/each.test.ts/testing-first-pass--3----1-1.png index a5b4b97aa6b9675d8ac330222f32f94ab5d6b794..34cd3439c378cc1809ac75ca362f54b03c3fb321 100644 GIT binary patch delta 319 zcmV-F0l@z18S5F4B!4JrLqkwgYiVHs04R}tkUdMoU=)R)go21g1S@rL$RsY>BsQ&u zE=^;qYpalUOVe1?euOkdHwRb$fs3=VOMi#pu@5nCZ{j*d7mJ2W^lr#VU delta 318 zcmV-E0m1(38R{93B!4GqLqkwgYiVHs04R}tkULAm02GD4go2121YaE-;-rhVNt#N) zB{5oDTZOb+l7=X@X-Fe=cl9@jlY^V!)W0D(Ik>nBf;dW&Aq9!&E+6L}xDOC(0F?%e z!X)mrP08-{rG<9{1Ts0^B%)jbe81+|m)(DIWm+8g6A$7JtPzw$h3X| Qi)cyDnc#(KvsD3>3rb;@jQ{`u diff --git a/samples/browser-webdriverio/test/__screenshots__/each.test.ts/testing-last-fail--3----1-1.png b/samples/browser-webdriverio/test/__screenshots__/each.test.ts/testing-last-fail--3----1-1.png index a5b4b97aa6b9675d8ac330222f32f94ab5d6b794..34cd3439c378cc1809ac75ca362f54b03c3fb321 100644 GIT binary patch delta 319 zcmV-F0l@z18S5F4B!4JrLqkwgYiVHs04R}tkUdMoU=)R)go21g1S@rL$RsY>BsQ&u zE=^;qYpalUOVe1?euOkdHwRb$fs3=VOMi#pu@5nCZ{j*d7mJ2W^lr#VU delta 318 zcmV-E0m1(38R{93B!4GqLqkwgYiVHs04R}tkULAm02GD4go2121YaE-;-rhVNt#N) zB{5oDTZOb+l7=X@X-Fe=cl9@jlY^V!)W0D(Ik>nBf;dW&Aq9!&E+6L}xDOC(0F?%e z!X)mrP08-{rG<9{1Ts0^B%)jbe81+|m)(DIWm+8g6A$7JtPzw$h3X| Qi)cyDnc#(KvsD3>3rb;@jQ{`u diff --git a/samples/browser-webdriverio/test/__screenshots__/each.test.ts/testing-last-pass--3----1-1.png b/samples/browser-webdriverio/test/__screenshots__/each.test.ts/testing-last-pass--3----1-1.png index a5b4b97aa6b9675d8ac330222f32f94ab5d6b794..34cd3439c378cc1809ac75ca362f54b03c3fb321 100644 GIT binary patch delta 319 zcmV-F0l@z18S5F4B!4JrLqkwgYiVHs04R}tkUdMoU=)R)go21g1S@rL$RsY>BsQ&u zE=^;qYpalUOVe1?euOkdHwRb$fs3=VOMi#pu@5nCZ{j*d7mJ2W^lr#VU delta 318 zcmV-E0m1(38R{93B!4GqLqkwgYiVHs04R}tkULAm02GD4go2121YaE-;-rhVNt#N) zB{5oDTZOb+l7=X@X-Fe=cl9@jlY^V!)W0D(Ik>nBf;dW&Aq9!&E+6L}xDOC(0F?%e z!X)mrP08-{rG<9{1Ts0^B%)jbe81+|m)(DIWm+8g6A$7JtPzw$h3X| Qi)cyDnc#(KvsD3>3rb;@jQ{`u diff --git a/samples/browser-webdriverio/test/__screenshots__/env.test.ts/process-env-1.png b/samples/browser-webdriverio/test/__screenshots__/env.test.ts/process-env-1.png index a5b4b97aa6b9675d8ac330222f32f94ab5d6b794..34cd3439c378cc1809ac75ca362f54b03c3fb321 100644 GIT binary patch delta 319 zcmV-F0l@z18S5F4B!4JrLqkwgYiVHs04R}tkUdMoU=)R)go21g1S@rL$RsY>BsQ&u zE=^;qYpalUOVe1?euOkdHwRb$fs3=VOMi#pu@5nCZ{j*d7mJ2W^lr#VU delta 318 zcmV-E0m1(38R{93B!4GqLqkwgYiVHs04R}tkULAm02GD4go2121YaE-;-rhVNt#N) zB{5oDTZOb+l7=X@X-Fe=cl9@jlY^V!)W0D(Ik>nBf;dW&Aq9!&E+6L}xDOC(0F?%e z!X)mrP08-{rG<9{1Ts0^B%)jbe81+|m)(DIWm+8g6A$7JtPzw$h3X| Qi)cyDnc#(KvsD3>3rb;@jQ{`u diff --git a/samples/browser-webdriverio/test/add.test.ts b/samples/browser-webdriverio/test/add.test.ts index 2517c278..a3464433 100644 --- a/samples/browser-webdriverio/test/add.test.ts +++ b/samples/browser-webdriverio/test/add.test.ts @@ -1,8 +1,11 @@ import { describe, expect, it } from 'vitest' import { add, sum } from '../src/add' +import { debugCommand } from '../vitest.config' +import { commands } from '@vitest/browser/context' describe('addition', () => { - it('add', () => { + it('add', async () => { + commands.debugCommand(); expect(add(1, 1)).toBe(2) }) @@ -49,4 +52,4 @@ describe('testing', () => { it("mul fail", () => { expect(5 * 5).toBe(25) }) -}) +}) \ No newline at end of file diff --git a/samples/browser-webdriverio/vitest.config.ts b/samples/browser-webdriverio/vitest.config.ts index 8b0ab4cf..6207ea56 100644 --- a/samples/browser-webdriverio/vitest.config.ts +++ b/samples/browser-webdriverio/vitest.config.ts @@ -4,6 +4,13 @@ // Configure Vitest (https://vitest.dev/config) import { defineConfig } from "vitest/config"; +import { BrowserCommand } from "vitest/node"; + +export const debugCommand: BrowserCommand<[]> = async (context) => { + if (context.provider.name === "webdriverio") { + await context.browser.debug(); + } +}; export default defineConfig({ esbuild: { @@ -14,16 +21,16 @@ export default defineConfig({ exclude: ["test/ignored.test.ts"], browser: { enabled: true, - headless: true, provider: "webdriverio", + commands: { debugCommand }, instances: [ { browser: "chrome", - providerOptions: { - capabilities: { - browserName: "chrome", - browserVersion: "latest", - platformName: "macOS 11.00", + capabilities: { + "goog:chromeOptions": { + args: [ + "--remote-debugging-port=9224" + ], }, }, }, diff --git a/src/api.ts b/src/api.ts index a8d0cc8d..d438a629 100644 --- a/src/api.ts +++ b/src/api.ts @@ -367,9 +367,10 @@ async function createVitestFolderAPI(usedConfigs: Set, pkg: VitestPackag pkg.resolvedBrowserOptions = await vitest.rpc.getResolvedBrowserOptions() if (!pkg.argumentsForBrowserAttach) { - const inspectBrk = `--inspect-brk localhost:${config.debuggerPort ?? '9229'}` + const inspectBrk = pkg.resolvedBrowserOptions?.provider === 'playwright' ? `--inspect-brk=localhost:${config.debuggerPort ?? '9229'}` : '' + const browser = pkg.resolvedBrowserOptions?.provider === 'playwright' ? 'chromium' : 'chrome' // regardless of user config, some properties need to be set when debugging with browser mode enabled - pkg.argumentsForBrowserAttach = `${pkg.arguments ?? 'vitest'} ${inspectBrk} --browser=chromium ${pkg.arguments ? '' : (config.cliArguments ?? '')}` + pkg.argumentsForBrowserAttach = `${pkg.arguments ?? 'vitest'} ${inspectBrk} --browser=${browser} ${pkg.arguments ? '' : (config.cliArguments ?? '')}` } vitest.configs.forEach((config) => { diff --git a/src/debug.ts b/src/debug.ts index 17e08e97..e0540bea 100644 --- a/src/debug.ts +++ b/src/debug.ts @@ -107,7 +107,7 @@ export async function debugTests( } let metadata!: WsConnectionMetadata - const needsAttach = !!pkg.resolvedBrowserOptions?.enabled && pkg.resolvedBrowserOptions.provider === 'playwright' + const needsAttach = !!pkg.resolvedBrowserOptions?.enabled try { metadata = await waitForWsConnection(wss, pkg, true, needsAttach, config.shellType) diff --git a/src/worker/worker.ts b/src/worker/worker.ts index 8f566c52..d249fc3b 100644 --- a/src/worker/worker.ts +++ b/src/worker/worker.ts @@ -147,7 +147,7 @@ export class ExtensionWorker implements ExtensionWorkerTransport { } public getResolvedBrowserOptions(): ResolvedBrowserOptions | undefined { - return this.ctx.config?.browser + return { ...this.ctx.config?.browser, commands: undefined } } private async globTestFiles(filters?: string[]) { From 26d5895a9524e5538c3511f2a9e49f2fc7e9dbf9 Mon Sep 17 00:00:00 2001 From: Nathan Castle Date: Fri, 4 Apr 2025 13:46:17 -0700 Subject: [PATCH 07/24] fix: simplify config handling --- src/api.ts | 2 +- src/api/pkg.ts | 2 +- src/api/rpc.ts | 2 +- src/debug.ts | 37 +++++++++++++++++-------------------- src/worker/worker.ts | 4 ++-- 5 files changed, 22 insertions(+), 25 deletions(-) diff --git a/src/api.ts b/src/api.ts index d438a629..fa179493 100644 --- a/src/api.ts +++ b/src/api.ts @@ -365,7 +365,7 @@ async function createVitestFolderAPI(usedConfigs: Set, pkg: VitestPackag ? await createVitestTerminalProcess(pkg) : await createVitestProcess(pkg) - pkg.resolvedBrowserOptions = await vitest.rpc.getResolvedBrowserOptions() + pkg.resolvedBrowserOptions = await vitest.rpc.getBrowserDebugOptions() if (!pkg.argumentsForBrowserAttach) { const inspectBrk = pkg.resolvedBrowserOptions?.provider === 'playwright' ? `--inspect-brk=localhost:${config.debuggerPort ?? '9229'}` : '' const browser = pkg.resolvedBrowserOptions?.provider === 'playwright' ? 'chromium' : 'chrome' diff --git a/src/api/pkg.ts b/src/api/pkg.ts index fe66d262..f3d325e4 100644 --- a/src/api/pkg.ts +++ b/src/api/pkg.ts @@ -25,7 +25,7 @@ export interface VitestPackage { version: string arguments?: string argumentsForBrowserAttach?: string - resolvedBrowserOptions?: ResolvedBrowserOptions + resolvedBrowserOptions?: Pick configFile?: string workspaceFile?: string loader?: string diff --git a/src/api/rpc.ts b/src/api/rpc.ts index b3cad590..2ff30b1a 100644 --- a/src/api/rpc.ts +++ b/src/api/rpc.ts @@ -25,7 +25,7 @@ export interface ExtensionWorkerTransport { waitForCoverageReport: () => Promise close: () => void - getResolvedBrowserOptions: () => ResolvedBrowserOptions | undefined + getBrowserDebugOptions: () => Pick | undefined onFilesCreated: (files: string[]) => void onFilesChanged: (files: string[]) => void diff --git a/src/debug.ts b/src/debug.ts index e0540bea..6cabbdf6 100644 --- a/src/debug.ts +++ b/src/debug.ts @@ -75,6 +75,22 @@ export async function debugTests( }, } + const browserModeAttachConfig = { + __name: 'Vitest_Attach', + request: 'attach', + name: 'Debug Tests (Browser)', + port: config.debuggerPort ?? '9229', + skipFiles: config.debugExclude, + ...( + config.debugOutFiles?.length + ? { outFiles: config.debugOutFiles } + : {} + ), + smartStep: true, + cwd: pkg.cwd, + type: 'chrome', + } + vscode.debug.startDebugging( pkg.folder, debugConfig, @@ -128,12 +144,11 @@ export async function debugTests( }) if (needsAttach) { - const attachConfig = getAttachConfigForBrowser(config, pkg) // Start secondary debug config before running test // Deliberately not awaiting, because attach config may depend on the test run to start (e.g. to attach) vscode.debug.startDebugging( pkg.folder, - attachConfig, + browserModeAttachConfig, session, ).then( (fulfilled) => { @@ -217,24 +232,6 @@ async function getRuntimeOptions(pkg: VitestPackage) { } } -function getAttachConfigForBrowser(config: ReturnType, pkg: VitestPackage): vscode.DebugConfiguration { - return { - __name: 'Vitest_Attach', - request: 'attach', - name: 'Debug Tests (Browser)', - port: config.debuggerPort ?? '9229', - skipFiles: config.debugExclude, - ...( - config.debugOutFiles?.length - ? { outFiles: config.debugOutFiles } - : {} - ), - smartStep: true, - cwd: pkg.cwd, - type: 'chrome', - } -} - class ExtensionDebugProcess implements ExtensionWorkerProcess { public id: number = Math.random() public closed = false diff --git a/src/worker/worker.ts b/src/worker/worker.ts index d249fc3b..dc787530 100644 --- a/src/worker/worker.ts +++ b/src/worker/worker.ts @@ -146,8 +146,8 @@ export class ExtensionWorker implements ExtensionWorkerTransport { return files.map(([project, spec]) => [project.config.name || '', spec]) } - public getResolvedBrowserOptions(): ResolvedBrowserOptions | undefined { - return { ...this.ctx.config?.browser, commands: undefined } + public getBrowserDebugOptions(): Pick | undefined { + return { enabled: this.ctx.config?.browser.enabled, provider: this.ctx.config?.browser.provider } } private async globTestFiles(filters?: string[]) { From ca72517830636695ee88a8017fe6dda7700e7559 Mon Sep 17 00:00:00 2001 From: Nathan Castle Date: Fri, 4 Apr 2025 13:47:39 -0700 Subject: [PATCH 08/24] fix: improve webdriverio sample Still not quite ideal, because the test has to be specially configured to enable debugging, but it does at least show it working. --- samples/browser-webdriverio/test/add.test.ts | 6 ++++-- samples/browser-webdriverio/vitest.config.ts | 12 ++++++++++-- 2 files changed, 14 insertions(+), 4 deletions(-) diff --git a/samples/browser-webdriverio/test/add.test.ts b/samples/browser-webdriverio/test/add.test.ts index a3464433..b649a234 100644 --- a/samples/browser-webdriverio/test/add.test.ts +++ b/samples/browser-webdriverio/test/add.test.ts @@ -1,11 +1,13 @@ import { describe, expect, it } from 'vitest' import { add, sum } from '../src/add' -import { debugCommand } from '../vitest.config' import { commands } from '@vitest/browser/context' +// Needed to enable and connect to debugger +// See vitest.config.ts +await commands.debugCommand(); + describe('addition', () => { it('add', async () => { - commands.debugCommand(); expect(add(1, 1)).toBe(2) }) diff --git a/samples/browser-webdriverio/vitest.config.ts b/samples/browser-webdriverio/vitest.config.ts index 6207ea56..65234e7e 100644 --- a/samples/browser-webdriverio/vitest.config.ts +++ b/samples/browser-webdriverio/vitest.config.ts @@ -8,13 +8,21 @@ import { BrowserCommand } from "vitest/node"; export const debugCommand: BrowserCommand<[]> = async (context) => { if (context.provider.name === "webdriverio") { - await context.browser.debug(); + //await context.browser.debug(); - this command was inconsistent + await context.browser.sendCommand("Debugger.enable", {}); + await context.browser.sendCommand("Debugger.pause", {}); } }; +declare module '@vitest/browser/context' { + interface BrowserCommands { + debugCommand: () => Promise + } +} + export default defineConfig({ esbuild: { - target: "es2020", + target: "esnext", }, test: { include: ["test/**/*.test.ts"], From 36074be2f436e544edd43e4a799f447856bfa4fb Mon Sep 17 00:00:00 2001 From: Nathan Castle Date: Fri, 4 Apr 2025 14:20:12 -0700 Subject: [PATCH 09/24] improve config handling --- src/api.ts | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/src/api.ts b/src/api.ts index fa179493..c19bb8c5 100644 --- a/src/api.ts +++ b/src/api.ts @@ -367,8 +367,11 @@ async function createVitestFolderAPI(usedConfigs: Set, pkg: VitestPackag pkg.resolvedBrowserOptions = await vitest.rpc.getBrowserDebugOptions() if (!pkg.argumentsForBrowserAttach) { - const inspectBrk = pkg.resolvedBrowserOptions?.provider === 'playwright' ? `--inspect-brk=localhost:${config.debuggerPort ?? '9229'}` : '' - const browser = pkg.resolvedBrowserOptions?.provider === 'playwright' ? 'chromium' : 'chrome' + const provider = pkg.resolvedBrowserOptions?.provider + // Only playwright provider supports --inspect-brk currently + const isPlaywright = provider === 'playwright' + const inspectBrk = isPlaywright ? `--inspect-brk=localhost:${config.debuggerPort ?? '9229'}` : '' + const browser = isPlaywright ? 'chromium' : 'chrome' // regardless of user config, some properties need to be set when debugging with browser mode enabled pkg.argumentsForBrowserAttach = `${pkg.arguments ?? 'vitest'} ${inspectBrk} --browser=${browser} ${pkg.arguments ? '' : (config.cliArguments ?? '')}` } From 7ae1bc7d976571009228f641b4f173f6a77d53b1 Mon Sep 17 00:00:00 2001 From: Nathan Castle Date: Thu, 17 Apr 2025 15:50:39 -0700 Subject: [PATCH 10/24] feat(debug): support multiple projects Updates seamlessly support debugging in scenarios with multiple projects, mixing browser and non-browser tests. When any of the included tests are in a browser project, the attach configuration is run. The test request is inspected before debugging to check which projects are included. Existing tests verify that browser mode debugging still works in single-project scenarios. --- src/api.ts | 25 ++++++++++++---------- src/api/child_process.ts | 2 +- src/api/pkg.ts | 3 --- src/api/rpc.ts | 2 +- src/api/terminal.ts | 2 +- src/api/ws.ts | 4 ++-- src/debug.ts | 45 ++++++++++++++++++++++++++++++++++------ src/extension.ts | 2 +- src/worker/worker.ts | 6 ++++-- 9 files changed, 63 insertions(+), 28 deletions(-) diff --git a/src/api.ts b/src/api.ts index c19bb8c5..0358d3a6 100644 --- a/src/api.ts +++ b/src/api.ts @@ -205,6 +205,20 @@ export class VitestFolderAPI { await this.meta.rpc.unwatchTests() } + async getBrowserModeInfo() { + const resolvedBrowserOptions = await this.meta.rpc.getBrowserDebugOptions() + // Only playwright provider supports --inspect-brk currently + const isPlaywright = resolvedBrowserOptions?.some(browserConfig => browserConfig.enabled && browserConfig.provider === 'playwright') ?? false + const browserModeProjects = resolvedBrowserOptions?.filter(browserConfig => browserConfig.enabled).map(browserConfig => browserConfig.project) + const browser = isPlaywright ? 'chromium' : 'chrome' + + return { + browserModeProjects, + isPlaywright, + browser, + } + } + onConsoleLog = this.createHandler('onConsoleLog') onTaskUpdate = this.createHandler('onTaskUpdate') onFinished = this.createHandler('onFinished') @@ -365,17 +379,6 @@ async function createVitestFolderAPI(usedConfigs: Set, pkg: VitestPackag ? await createVitestTerminalProcess(pkg) : await createVitestProcess(pkg) - pkg.resolvedBrowserOptions = await vitest.rpc.getBrowserDebugOptions() - if (!pkg.argumentsForBrowserAttach) { - const provider = pkg.resolvedBrowserOptions?.provider - // Only playwright provider supports --inspect-brk currently - const isPlaywright = provider === 'playwright' - const inspectBrk = isPlaywright ? `--inspect-brk=localhost:${config.debuggerPort ?? '9229'}` : '' - const browser = isPlaywright ? 'chromium' : 'chrome' - // regardless of user config, some properties need to be set when debugging with browser mode enabled - pkg.argumentsForBrowserAttach = `${pkg.arguments ?? 'vitest'} ${inspectBrk} --browser=${browser} ${pkg.arguments ? '' : (config.cliArguments ?? '')}` - } - vitest.configs.forEach((config) => { usedConfigs.add(config) }) diff --git a/src/api/child_process.ts b/src/api/child_process.ts index b938dee7..aeeb33bc 100644 --- a/src/api/child_process.ts +++ b/src/api/child_process.ts @@ -89,7 +89,7 @@ export async function createVitestProcess(pkg: VitestPackage) { vitest.on('exit', onExit) vitest.on('error', onError) - waitForWsConnection(wss, pkg, false, false, 'child_process') + waitForWsConnection(wss, pkg, false, 'child_process') .then((resolved) => { resolved.handlers.onStdout = (callback: (data: string) => void) => { stdoutCallbacks.add(callback) diff --git a/src/api/pkg.ts b/src/api/pkg.ts index f3d325e4..53c706df 100644 --- a/src/api/pkg.ts +++ b/src/api/pkg.ts @@ -2,7 +2,6 @@ import { existsSync, readFileSync } from 'node:fs' import * as vscode from 'vscode' import { basename, dirname, normalize, resolve } from 'pathe' import { gte } from 'semver' -import type { ResolvedBrowserOptions } from 'vitest/dist/node.js' import { log } from '../log' import { configGlob, minimumVersion, workspaceGlob } from '../constants' import { getConfig } from '../config' @@ -24,8 +23,6 @@ export interface VitestPackage { cwd: string version: string arguments?: string - argumentsForBrowserAttach?: string - resolvedBrowserOptions?: Pick configFile?: string workspaceFile?: string loader?: string diff --git a/src/api/rpc.ts b/src/api/rpc.ts index 2ff30b1a..36069eb5 100644 --- a/src/api/rpc.ts +++ b/src/api/rpc.ts @@ -25,7 +25,7 @@ export interface ExtensionWorkerTransport { waitForCoverageReport: () => Promise close: () => void - getBrowserDebugOptions: () => Pick | undefined + getBrowserDebugOptions: () => (Pick & { project: string })[] | undefined onFilesCreated: (files: string[]) => void onFilesChanged: (files: string[]) => void diff --git a/src/api/terminal.ts b/src/api/terminal.ts index 1d65d302..6793637e 100644 --- a/src/api/terminal.ts +++ b/src/api/terminal.ts @@ -39,7 +39,7 @@ export async function createVitestTerminalProcess(pkg: VitestPackage): Promise((resolve, reject) => { wss.once('connection', (ws) => { @@ -90,7 +90,7 @@ export function waitForWsConnection( env: getConfig(pkg.folder).env || undefined, configFile: pkg.configFile, cwd: pkg.cwd, - arguments: browserAttach ? pkg.argumentsForBrowserAttach : pkg.arguments, + arguments: argumentOverrides ?? pkg.arguments, workspaceFile: pkg.workspaceFile, id: pkg.id, pnpApi: pnp, diff --git a/src/debug.ts b/src/debug.ts index 6cabbdf6..28de5539 100644 --- a/src/debug.ts +++ b/src/debug.ts @@ -14,15 +14,18 @@ import { workerPath } from './constants' import type { WsConnectionMetadata } from './api/ws' import { waitForWsConnection } from './api/ws' import type { ExtensionWorkerProcess } from './api/types' +import type { TestFile } from './testTreeData' +import { getTestData } from './testTreeData' export async function debugTests( controller: vscode.TestController, tree: TestTree, - pkg: VitestPackage, + api: VitestFolderAPI, request: vscode.TestRunRequest, token: vscode.CancellationToken, ) { + const pkg = api.package const port = await getPort() const server = createServer().listen(port) const wss = new WebSocketServer({ server }) @@ -90,6 +93,12 @@ export async function debugTests( cwd: pkg.cwd, type: 'chrome', } + const { browser, browserModeProjects, isPlaywright } = await api.getBrowserModeInfo() + const directlyIncluded = request.include?.filter(inc => inc.uri?.fsPath != null).flatMap(inc => getTestProjectsInFolder(inc.uri!.fsPath, api, tree)) + const testProjects = (directlyIncluded?.length ? directlyIncluded : request.include?.flatMap(inc => getProjectFromParent(inc, api, tree))) ?? [] + // Get project metadata, determine if browser mode is needed + const selectedProjects = Array.from(new Set(testProjects.filter(item => item != null))) + const needsBrowserMode = !!browserModeProjects?.length && selectedProjects.some(project => browserModeProjects?.includes(project)) vscode.debug.startDebugging( pkg.folder, @@ -123,10 +132,9 @@ export async function debugTests( } let metadata!: WsConnectionMetadata - const needsAttach = !!pkg.resolvedBrowserOptions?.enabled - try { - metadata = await waitForWsConnection(wss, pkg, true, needsAttach, config.shellType) + const browserModeLaunchArgs = needsBrowserMode ? getBrowserModeLaunchArgs(browser, isPlaywright, config) : undefined + metadata = await waitForWsConnection(wss, pkg, true, config.shellType, browserModeLaunchArgs) const api = new VitestFolderAPI(pkg, { ...metadata, process: new ExtensionDebugProcess(session, metadata.ws), @@ -143,13 +151,13 @@ export async function debugTests( await vscode.debug.stopDebugging(session) }) - if (needsAttach) { + if (needsBrowserMode) { // Start secondary debug config before running test // Deliberately not awaiting, because attach config may depend on the test run to start (e.g. to attach) vscode.debug.startDebugging( pkg.folder, browserModeAttachConfig, - session, + { parentSession: session, suppressDebugView: true }, ).then( (fulfilled) => { if (fulfilled) { @@ -205,6 +213,31 @@ export async function debugTests( await deferredPromise.promise } +function getTestProjectsInFolder(path: string, api: VitestFolderAPI, tree: TestTree) { + const folder = tree.getOrCreateFolderTestItem(api, path) + const items = tree.getFolderFiles(folder) + return items.map(item => (getTestData(item) as TestFile).project) +} + +function getProjectFromParent(item: vscode.TestItem | undefined, api: VitestFolderAPI, tree: TestTree): string[] { + // Climb up tree until entry with project is found + if (item?.parent) { + const projects = getTestProjectsInFolder(item.parent.uri?.fsPath ?? '', api, tree) + if (projects.length) { + return projects + } + return getProjectFromParent(item.parent, api, tree) + } + return [] +} + +function getBrowserModeLaunchArgs(browser: string, isPlaywright: boolean, config: any): string { + // Only playwright provider supports --inspect-brk currently + const inspectBrk = isPlaywright ? `--inspect-brk=localhost:${config.debuggerPort ?? '9229'}` : '' + // regardless of user config, some properties need to be set when debugging with browser mode enabled + return `vitest ${config.cliArguments ?? ''} ${inspectBrk} --browser=${browser}` +} + async function getRuntimeOptions(pkg: VitestPackage) { const config = getConfig(pkg.folder) diff --git a/src/extension.ts b/src/extension.ts index 9ca9ed87..3221a925 100644 --- a/src/extension.ts +++ b/src/extension.ts @@ -181,7 +181,7 @@ class VitestExtension { await debugTests( this.testController, this.testTree, - api.package, + api, request, token, diff --git a/src/worker/worker.ts b/src/worker/worker.ts index dc787530..866f58ca 100644 --- a/src/worker/worker.ts +++ b/src/worker/worker.ts @@ -146,8 +146,10 @@ export class ExtensionWorker implements ExtensionWorkerTransport { return files.map(([project, spec]) => [project.config.name || '', spec]) } - public getBrowserDebugOptions(): Pick | undefined { - return { enabled: this.ctx.config?.browser.enabled, provider: this.ctx.config?.browser.provider } + public getBrowserDebugOptions(): (Pick & { project: string })[] | undefined { + return this.ctx.projects.map((project) => { + return { enabled: project.config?.browser.enabled, provider: project.config?.browser.provider, project: project.getName() } + }) } private async globTestFiles(filters?: string[]) { From bf555a7dea759f36f6039afe2bc96b1c8a14df6b Mon Sep 17 00:00:00 2001 From: Nathan Castle Date: Thu, 17 Apr 2025 15:52:20 -0700 Subject: [PATCH 11/24] fix(sample): clarify webdriverio limitation --- samples/browser-webdriverio/.vscode/settings.json | 2 +- samples/browser-webdriverio/vitest.config.ts | 5 ++++- 2 files changed, 5 insertions(+), 2 deletions(-) diff --git a/samples/browser-webdriverio/.vscode/settings.json b/samples/browser-webdriverio/.vscode/settings.json index 19966426..a7574a0b 100644 --- a/samples/browser-webdriverio/.vscode/settings.json +++ b/samples/browser-webdriverio/.vscode/settings.json @@ -2,7 +2,7 @@ "vitest.nodeEnv": { "TEST_CUSTOM_ENV": "hello" }, - "vitest.debuggerPort": "9224", + "vitest.debuggerPort": "9227", "[typescript]": { "editor.defaultFormatter": "esbenp.prettier-vscode" }, diff --git a/samples/browser-webdriverio/vitest.config.ts b/samples/browser-webdriverio/vitest.config.ts index 65234e7e..7bdadc8e 100644 --- a/samples/browser-webdriverio/vitest.config.ts +++ b/samples/browser-webdriverio/vitest.config.ts @@ -35,9 +35,12 @@ export default defineConfig({ { browser: "chrome", capabilities: { + browserName: 'chrome', + browserVersion: 'stable', "goog:chromeOptions": { args: [ - "--remote-debugging-port=9224" + // Note: needs to be commented out to enable running without debug + "--remote-debugging-port=9227" ], }, }, From a8a427fdc015020c5db9099c068c287c69ee9462 Mon Sep 17 00:00:00 2001 From: Nathan Castle Date: Thu, 17 Apr 2025 15:55:55 -0700 Subject: [PATCH 12/24] fix: remove outdated changes --- samples/browser/.vscode/settings.json | 2 +- src/extension.ts | 1 - 2 files changed, 1 insertion(+), 2 deletions(-) diff --git a/samples/browser/.vscode/settings.json b/samples/browser/.vscode/settings.json index b6a8a2a8..53d6bf68 100644 --- a/samples/browser/.vscode/settings.json +++ b/samples/browser/.vscode/settings.json @@ -4,5 +4,5 @@ }, "[typescript]": { "editor.defaultFormatter": "dbaeumer.vscode-eslint" - }, + } } diff --git a/src/extension.ts b/src/extension.ts index 3221a925..1d99d759 100644 --- a/src/extension.ts +++ b/src/extension.ts @@ -260,7 +260,6 @@ class VitestExtension { 'vitest.filesWatcherInclude', 'vitest.experimentalStaticAstCollect', 'vitest.cliArguments', - 'vitest.cliArgumentsDebug', ] this.disposables = [ From 70687000918dc94296ff9c9f97d0e6da429b39b6 Mon Sep 17 00:00:00 2001 From: Nathan Castle Date: Thu, 17 Apr 2025 16:13:15 -0700 Subject: [PATCH 13/24] fix: readability enhancement --- src/api.ts | 3 --- src/debug.ts | 59 ++++++++++++++++++++++++++-------------------------- 2 files changed, 30 insertions(+), 32 deletions(-) diff --git a/src/api.ts b/src/api.ts index 0358d3a6..3cb94a73 100644 --- a/src/api.ts +++ b/src/api.ts @@ -210,12 +210,10 @@ export class VitestFolderAPI { // Only playwright provider supports --inspect-brk currently const isPlaywright = resolvedBrowserOptions?.some(browserConfig => browserConfig.enabled && browserConfig.provider === 'playwright') ?? false const browserModeProjects = resolvedBrowserOptions?.filter(browserConfig => browserConfig.enabled).map(browserConfig => browserConfig.project) - const browser = isPlaywright ? 'chromium' : 'chrome' return { browserModeProjects, isPlaywright, - browser, } } @@ -378,7 +376,6 @@ async function createVitestFolderAPI(usedConfigs: Set, pkg: VitestPackag const vitest = config.shellType === 'terminal' ? await createVitestTerminalProcess(pkg) : await createVitestProcess(pkg) - vitest.configs.forEach((config) => { usedConfigs.add(config) }) diff --git a/src/debug.ts b/src/debug.ts index 28de5539..3808ff37 100644 --- a/src/debug.ts +++ b/src/debug.ts @@ -78,27 +78,12 @@ export async function debugTests( }, } - const browserModeAttachConfig = { - __name: 'Vitest_Attach', - request: 'attach', - name: 'Debug Tests (Browser)', - port: config.debuggerPort ?? '9229', - skipFiles: config.debugExclude, - ...( - config.debugOutFiles?.length - ? { outFiles: config.debugOutFiles } - : {} - ), - smartStep: true, - cwd: pkg.cwd, - type: 'chrome', - } - const { browser, browserModeProjects, isPlaywright } = await api.getBrowserModeInfo() - const directlyIncluded = request.include?.filter(inc => inc.uri?.fsPath != null).flatMap(inc => getTestProjectsInFolder(inc.uri!.fsPath, api, tree)) - const testProjects = (directlyIncluded?.length ? directlyIncluded : request.include?.flatMap(inc => getProjectFromParent(inc, api, tree))) ?? [] - // Get project metadata, determine if browser mode is needed - const selectedProjects = Array.from(new Set(testProjects.filter(item => item != null))) - const needsBrowserMode = !!browserModeProjects?.length && selectedProjects.some(project => browserModeProjects?.includes(project)) + // If the debug request includes any test files belonging the browser-mode projects, + // vitest needs to be started with the correct --inspect-brk and --browser arguments. + // Later, after debugging session starts, a secondary debug session is started; that session attaches to the launched browser instance. + const { browserModeProjects, isPlaywright } = await api.getBrowserModeInfo() + const testProjects = request.include?.filter(inc => inc.uri?.fsPath != null).flatMap(inc => getProjectsFromTests(inc, api, tree)) ?? [] + const needsBrowserMode = !!browserModeProjects?.length && testProjects.some(project => browserModeProjects?.includes(project)) vscode.debug.startDebugging( pkg.folder, @@ -133,7 +118,7 @@ export async function debugTests( let metadata!: WsConnectionMetadata try { - const browserModeLaunchArgs = needsBrowserMode ? getBrowserModeLaunchArgs(browser, isPlaywright, config) : undefined + const browserModeLaunchArgs = needsBrowserMode ? getBrowserModeLaunchArgs(isPlaywright, config) : undefined metadata = await waitForWsConnection(wss, pkg, true, config.shellType, browserModeLaunchArgs) const api = new VitestFolderAPI(pkg, { ...metadata, @@ -152,6 +137,21 @@ export async function debugTests( }) if (needsBrowserMode) { + const browserModeAttachConfig = { + __name: 'Vitest_Attach', + request: 'attach', + name: 'Debug Tests (Browser)', + port: config.debuggerPort ?? '9229', + skipFiles: config.debugExclude, + ...( + config.debugOutFiles?.length + ? { outFiles: config.debugOutFiles } + : {} + ), + smartStep: true, + cwd: pkg.cwd, + type: 'chrome', + } // Start secondary debug config before running test // Deliberately not awaiting, because attach config may depend on the test run to start (e.g. to attach) vscode.debug.startDebugging( @@ -219,19 +219,20 @@ function getTestProjectsInFolder(path: string, api: VitestFolderAPI, tree: TestT return items.map(item => (getTestData(item) as TestFile).project) } -function getProjectFromParent(item: vscode.TestItem | undefined, api: VitestFolderAPI, tree: TestTree): string[] { +function getProjectsFromTests(item: vscode.TestItem | undefined, api: VitestFolderAPI, tree: TestTree): string[] { + const items = getTestProjectsInFolder(item?.uri?.fsPath ?? '', api, tree) + if (items.length > 0) { + return items + } // Climb up tree until entry with project is found if (item?.parent) { - const projects = getTestProjectsInFolder(item.parent.uri?.fsPath ?? '', api, tree) - if (projects.length) { - return projects - } - return getProjectFromParent(item.parent, api, tree) + return getProjectsFromTests(item.parent, api, tree) } return [] } -function getBrowserModeLaunchArgs(browser: string, isPlaywright: boolean, config: any): string { +function getBrowserModeLaunchArgs(isPlaywright: boolean, config: any): string { + const browser = isPlaywright ? 'chromium' : 'chrome' // Only playwright provider supports --inspect-brk currently const inspectBrk = isPlaywright ? `--inspect-brk=localhost:${config.debuggerPort ?? '9229'}` : '' // regardless of user config, some properties need to be set when debugging with browser mode enabled From f73759d26b0e6abcbc0576c1cad9d9897a41b789 Mon Sep 17 00:00:00 2001 From: Nathan Castle Date: Tue, 3 Jun 2025 18:53:28 -0700 Subject: [PATCH 14/24] fix: ignore screenshots --- samples/browser-multiple/test/.gitignore | 1 + .../each.test.ts/testing-all-fail--1----0-1.png | Bin 3012 -> 0 bytes .../each.test.ts/testing-all-fail--2----0-1.png | Bin 3012 -> 0 bytes .../each.test.ts/testing-all-fail--3----0-1.png | Bin 3012 -> 0 bytes .../testing-first-fail--3----1-1.png | Bin 3012 -> 0 bytes .../testing-first-pass--2----1-1.png | Bin 3012 -> 0 bytes .../testing-first-pass--3----1-1.png | Bin 3012 -> 0 bytes .../each.test.ts/testing-last-fail--3----1-1.png | Bin 3012 -> 0 bytes .../each.test.ts/testing-last-pass--3----1-1.png | Bin 3012 -> 0 bytes .../env.test.ts/process-env-1.png | Bin 3012 -> 0 bytes samples/browser-webdriverio/test/.gitignore | 1 + .../add.test.ts/addition-add-1.png | Bin 3307 -> 0 bytes .../each.test.ts/testing-all-fail--1----0-1.png | Bin 3307 -> 0 bytes .../each.test.ts/testing-all-fail--2----0-1.png | Bin 3307 -> 0 bytes .../each.test.ts/testing-all-fail--3----0-1.png | Bin 3307 -> 0 bytes .../testing-first-fail--3----1-1.png | Bin 3307 -> 0 bytes .../testing-first-pass--2----1-1.png | Bin 3307 -> 0 bytes .../testing-first-pass--3----1-1.png | Bin 3307 -> 0 bytes .../each.test.ts/testing-last-fail--3----1-1.png | Bin 3307 -> 0 bytes .../each.test.ts/testing-last-pass--3----1-1.png | Bin 3307 -> 0 bytes .../env.test.ts/process-env-1.png | Bin 3307 -> 0 bytes 21 files changed, 2 insertions(+) delete mode 100644 samples/browser-multiple/test/__screenshots__/each.test.ts/testing-all-fail--1----0-1.png delete mode 100644 samples/browser-multiple/test/__screenshots__/each.test.ts/testing-all-fail--2----0-1.png delete mode 100644 samples/browser-multiple/test/__screenshots__/each.test.ts/testing-all-fail--3----0-1.png delete mode 100644 samples/browser-multiple/test/__screenshots__/each.test.ts/testing-first-fail--3----1-1.png delete mode 100644 samples/browser-multiple/test/__screenshots__/each.test.ts/testing-first-pass--2----1-1.png delete mode 100644 samples/browser-multiple/test/__screenshots__/each.test.ts/testing-first-pass--3----1-1.png delete mode 100644 samples/browser-multiple/test/__screenshots__/each.test.ts/testing-last-fail--3----1-1.png delete mode 100644 samples/browser-multiple/test/__screenshots__/each.test.ts/testing-last-pass--3----1-1.png delete mode 100644 samples/browser-multiple/test/__screenshots__/env.test.ts/process-env-1.png delete mode 100644 samples/browser-webdriverio/test/__screenshots__/add.test.ts/addition-add-1.png delete mode 100644 samples/browser-webdriverio/test/__screenshots__/each.test.ts/testing-all-fail--1----0-1.png delete mode 100644 samples/browser-webdriverio/test/__screenshots__/each.test.ts/testing-all-fail--2----0-1.png delete mode 100644 samples/browser-webdriverio/test/__screenshots__/each.test.ts/testing-all-fail--3----0-1.png delete mode 100644 samples/browser-webdriverio/test/__screenshots__/each.test.ts/testing-first-fail--3----1-1.png delete mode 100644 samples/browser-webdriverio/test/__screenshots__/each.test.ts/testing-first-pass--2----1-1.png delete mode 100644 samples/browser-webdriverio/test/__screenshots__/each.test.ts/testing-first-pass--3----1-1.png delete mode 100644 samples/browser-webdriverio/test/__screenshots__/each.test.ts/testing-last-fail--3----1-1.png delete mode 100644 samples/browser-webdriverio/test/__screenshots__/each.test.ts/testing-last-pass--3----1-1.png delete mode 100644 samples/browser-webdriverio/test/__screenshots__/env.test.ts/process-env-1.png diff --git a/samples/browser-multiple/test/.gitignore b/samples/browser-multiple/test/.gitignore index b05c2dfa..ba6026ef 100644 --- a/samples/browser-multiple/test/.gitignore +++ b/samples/browser-multiple/test/.gitignore @@ -1 +1,2 @@ __snapshots__ +__screenshots__ \ No newline at end of file diff --git a/samples/browser-multiple/test/__screenshots__/each.test.ts/testing-all-fail--1----0-1.png b/samples/browser-multiple/test/__screenshots__/each.test.ts/testing-all-fail--1----0-1.png deleted file mode 100644 index f88c55c1cad7d3de8229e8a42a99ad5e0bc9e037..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3012 zcmeAS@N?(olHy`uVBq!ia0y~yV4TOmz}&#W1QcnFZJGt77>k44ofy`glX=O&z+LC* z;uumf=k1k)oD2#A2MkL8&pofovQS0%%T-%r?gdZ(@G(@Jzty0S&D^wxmt&Ke!iiDN zXc&y9gVDS&S{{s+iKF$xXmvQ+Bp7WLjW!L*YaZ)u@!|YCPt|%AuvyOF>FVdQ&MBb@ E0IgVhRsaA1 diff --git a/samples/browser-multiple/test/__screenshots__/each.test.ts/testing-all-fail--2----0-1.png b/samples/browser-multiple/test/__screenshots__/each.test.ts/testing-all-fail--2----0-1.png deleted file mode 100644 index f88c55c1cad7d3de8229e8a42a99ad5e0bc9e037..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3012 zcmeAS@N?(olHy`uVBq!ia0y~yV4TOmz}&#W1QcnFZJGt77>k44ofy`glX=O&z+LC* z;uumf=k1k)oD2#A2MkL8&pofovQS0%%T-%r?gdZ(@G(@Jzty0S&D^wxmt&Ke!iiDN zXc&y9gVDS&S{{s+iKF$xXmvQ+Bp7WLjW!L*YaZ)u@!|YCPt|%AuvyOF>FVdQ&MBb@ E0IgVhRsaA1 diff --git a/samples/browser-multiple/test/__screenshots__/each.test.ts/testing-all-fail--3----0-1.png b/samples/browser-multiple/test/__screenshots__/each.test.ts/testing-all-fail--3----0-1.png deleted file mode 100644 index f88c55c1cad7d3de8229e8a42a99ad5e0bc9e037..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3012 zcmeAS@N?(olHy`uVBq!ia0y~yV4TOmz}&#W1QcnFZJGt77>k44ofy`glX=O&z+LC* z;uumf=k1k)oD2#A2MkL8&pofovQS0%%T-%r?gdZ(@G(@Jzty0S&D^wxmt&Ke!iiDN zXc&y9gVDS&S{{s+iKF$xXmvQ+Bp7WLjW!L*YaZ)u@!|YCPt|%AuvyOF>FVdQ&MBb@ E0IgVhRsaA1 diff --git a/samples/browser-multiple/test/__screenshots__/each.test.ts/testing-first-fail--3----1-1.png b/samples/browser-multiple/test/__screenshots__/each.test.ts/testing-first-fail--3----1-1.png deleted file mode 100644 index f88c55c1cad7d3de8229e8a42a99ad5e0bc9e037..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3012 zcmeAS@N?(olHy`uVBq!ia0y~yV4TOmz}&#W1QcnFZJGt77>k44ofy`glX=O&z+LC* z;uumf=k1k)oD2#A2MkL8&pofovQS0%%T-%r?gdZ(@G(@Jzty0S&D^wxmt&Ke!iiDN zXc&y9gVDS&S{{s+iKF$xXmvQ+Bp7WLjW!L*YaZ)u@!|YCPt|%AuvyOF>FVdQ&MBb@ E0IgVhRsaA1 diff --git a/samples/browser-multiple/test/__screenshots__/each.test.ts/testing-first-pass--2----1-1.png b/samples/browser-multiple/test/__screenshots__/each.test.ts/testing-first-pass--2----1-1.png deleted file mode 100644 index f88c55c1cad7d3de8229e8a42a99ad5e0bc9e037..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3012 zcmeAS@N?(olHy`uVBq!ia0y~yV4TOmz}&#W1QcnFZJGt77>k44ofy`glX=O&z+LC* z;uumf=k1k)oD2#A2MkL8&pofovQS0%%T-%r?gdZ(@G(@Jzty0S&D^wxmt&Ke!iiDN zXc&y9gVDS&S{{s+iKF$xXmvQ+Bp7WLjW!L*YaZ)u@!|YCPt|%AuvyOF>FVdQ&MBb@ E0IgVhRsaA1 diff --git a/samples/browser-multiple/test/__screenshots__/each.test.ts/testing-first-pass--3----1-1.png b/samples/browser-multiple/test/__screenshots__/each.test.ts/testing-first-pass--3----1-1.png deleted file mode 100644 index f88c55c1cad7d3de8229e8a42a99ad5e0bc9e037..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3012 zcmeAS@N?(olHy`uVBq!ia0y~yV4TOmz}&#W1QcnFZJGt77>k44ofy`glX=O&z+LC* z;uumf=k1k)oD2#A2MkL8&pofovQS0%%T-%r?gdZ(@G(@Jzty0S&D^wxmt&Ke!iiDN zXc&y9gVDS&S{{s+iKF$xXmvQ+Bp7WLjW!L*YaZ)u@!|YCPt|%AuvyOF>FVdQ&MBb@ E0IgVhRsaA1 diff --git a/samples/browser-multiple/test/__screenshots__/each.test.ts/testing-last-fail--3----1-1.png b/samples/browser-multiple/test/__screenshots__/each.test.ts/testing-last-fail--3----1-1.png deleted file mode 100644 index f88c55c1cad7d3de8229e8a42a99ad5e0bc9e037..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3012 zcmeAS@N?(olHy`uVBq!ia0y~yV4TOmz}&#W1QcnFZJGt77>k44ofy`glX=O&z+LC* z;uumf=k1k)oD2#A2MkL8&pofovQS0%%T-%r?gdZ(@G(@Jzty0S&D^wxmt&Ke!iiDN zXc&y9gVDS&S{{s+iKF$xXmvQ+Bp7WLjW!L*YaZ)u@!|YCPt|%AuvyOF>FVdQ&MBb@ E0IgVhRsaA1 diff --git a/samples/browser-multiple/test/__screenshots__/each.test.ts/testing-last-pass--3----1-1.png b/samples/browser-multiple/test/__screenshots__/each.test.ts/testing-last-pass--3----1-1.png deleted file mode 100644 index f88c55c1cad7d3de8229e8a42a99ad5e0bc9e037..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3012 zcmeAS@N?(olHy`uVBq!ia0y~yV4TOmz}&#W1QcnFZJGt77>k44ofy`glX=O&z+LC* z;uumf=k1k)oD2#A2MkL8&pofovQS0%%T-%r?gdZ(@G(@Jzty0S&D^wxmt&Ke!iiDN zXc&y9gVDS&S{{s+iKF$xXmvQ+Bp7WLjW!L*YaZ)u@!|YCPt|%AuvyOF>FVdQ&MBb@ E0IgVhRsaA1 diff --git a/samples/browser-multiple/test/__screenshots__/env.test.ts/process-env-1.png b/samples/browser-multiple/test/__screenshots__/env.test.ts/process-env-1.png deleted file mode 100644 index f88c55c1cad7d3de8229e8a42a99ad5e0bc9e037..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3012 zcmeAS@N?(olHy`uVBq!ia0y~yV4TOmz}&#W1QcnFZJGt77>k44ofy`glX=O&z+LC* z;uumf=k1k)oD2#A2MkL8&pofovQS0%%T-%r?gdZ(@G(@Jzty0S&D^wxmt&Ke!iiDN zXc&y9gVDS&S{{s+iKF$xXmvQ+Bp7WLjW!L*YaZ)u@!|YCPt|%AuvyOF>FVdQ&MBb@ E0IgVhRsaA1 diff --git a/samples/browser-webdriverio/test/.gitignore b/samples/browser-webdriverio/test/.gitignore index b05c2dfa..acb8112a 100644 --- a/samples/browser-webdriverio/test/.gitignore +++ b/samples/browser-webdriverio/test/.gitignore @@ -1 +1,2 @@ __snapshots__ +__screenshots__ diff --git a/samples/browser-webdriverio/test/__screenshots__/add.test.ts/addition-add-1.png b/samples/browser-webdriverio/test/__screenshots__/add.test.ts/addition-add-1.png deleted file mode 100644 index 34cd3439c378cc1809ac75ca362f54b03c3fb321..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3307 zcmeAS@N?(olHy`uVBq!ia0y~yV4TOmz}&#W1QcnFZJGrX(8zRl4hYW9Ok`ltm{>c( z*86aRNbCHTrVdvY?b3o1Dtfn6%+|K*`6jQ*UOl1A`*OsUx)u{xbN2B6joq6!d)K!= zc%slz?N~5vyQI*Bs%7oP{CBGLPTXdY6m46qkz?j_G_!olRDKl|v7)`62Z}sDd=^WO z|Nj4^?&YlW^D7R>bT}=)%ea#L$uGnETWqrPq zlW!#@B_|ZMw0gA~NtyC|JYVtjs+C0X1bgB4kNDF1C-^@t^G`_T+8pyp)t>Lph1dv5 zhi|?=?lrwJ&Z#?i%XWhJW7XKH_OYUVk`D_Tn)c( z*86aRNbCHTrVdvY?b3o1Dtfn6%+|K*`6jQ*UOl1A`*OsUx)u{xbN2B6joq6!d)K!= zc%slz?N~5vyQI*Bs%7oP{CBGLPTXdY6m46qkz?j_G_!olRDKl|v7)`62Z}sDd=^WO z|Nj4^?&YlW^D7R>bT}=)%ea#L$uGnETWqrPq zlW!#@B_|ZMw0gA~NtyC|JYVtjs+C0X1bgB4kNDF1C-^@t^G`_T+8pyp)t>Lph1dv5 zhi|?=?lrwJ&Z#?i%XWhJW7XKH_OYUVk`D_Tn)c( z*86aRNbCHTrVdvY?b3o1Dtfn6%+|K*`6jQ*UOl1A`*OsUx)u{xbN2B6joq6!d)K!= zc%slz?N~5vyQI*Bs%7oP{CBGLPTXdY6m46qkz?j_G_!olRDKl|v7)`62Z}sDd=^WO z|Nj4^?&YlW^D7R>bT}=)%ea#L$uGnETWqrPq zlW!#@B_|ZMw0gA~NtyC|JYVtjs+C0X1bgB4kNDF1C-^@t^G`_T+8pyp)t>Lph1dv5 zhi|?=?lrwJ&Z#?i%XWhJW7XKH_OYUVk`D_Tn)c( z*86aRNbCHTrVdvY?b3o1Dtfn6%+|K*`6jQ*UOl1A`*OsUx)u{xbN2B6joq6!d)K!= zc%slz?N~5vyQI*Bs%7oP{CBGLPTXdY6m46qkz?j_G_!olRDKl|v7)`62Z}sDd=^WO z|Nj4^?&YlW^D7R>bT}=)%ea#L$uGnETWqrPq zlW!#@B_|ZMw0gA~NtyC|JYVtjs+C0X1bgB4kNDF1C-^@t^G`_T+8pyp)t>Lph1dv5 zhi|?=?lrwJ&Z#?i%XWhJW7XKH_OYUVk`D_Tn)c( z*86aRNbCHTrVdvY?b3o1Dtfn6%+|K*`6jQ*UOl1A`*OsUx)u{xbN2B6joq6!d)K!= zc%slz?N~5vyQI*Bs%7oP{CBGLPTXdY6m46qkz?j_G_!olRDKl|v7)`62Z}sDd=^WO z|Nj4^?&YlW^D7R>bT}=)%ea#L$uGnETWqrPq zlW!#@B_|ZMw0gA~NtyC|JYVtjs+C0X1bgB4kNDF1C-^@t^G`_T+8pyp)t>Lph1dv5 zhi|?=?lrwJ&Z#?i%XWhJW7XKH_OYUVk`D_Tn)c( z*86aRNbCHTrVdvY?b3o1Dtfn6%+|K*`6jQ*UOl1A`*OsUx)u{xbN2B6joq6!d)K!= zc%slz?N~5vyQI*Bs%7oP{CBGLPTXdY6m46qkz?j_G_!olRDKl|v7)`62Z}sDd=^WO z|Nj4^?&YlW^D7R>bT}=)%ea#L$uGnETWqrPq zlW!#@B_|ZMw0gA~NtyC|JYVtjs+C0X1bgB4kNDF1C-^@t^G`_T+8pyp)t>Lph1dv5 zhi|?=?lrwJ&Z#?i%XWhJW7XKH_OYUVk`D_Tn)c( z*86aRNbCHTrVdvY?b3o1Dtfn6%+|K*`6jQ*UOl1A`*OsUx)u{xbN2B6joq6!d)K!= zc%slz?N~5vyQI*Bs%7oP{CBGLPTXdY6m46qkz?j_G_!olRDKl|v7)`62Z}sDd=^WO z|Nj4^?&YlW^D7R>bT}=)%ea#L$uGnETWqrPq zlW!#@B_|ZMw0gA~NtyC|JYVtjs+C0X1bgB4kNDF1C-^@t^G`_T+8pyp)t>Lph1dv5 zhi|?=?lrwJ&Z#?i%XWhJW7XKH_OYUVk`D_Tn)c( z*86aRNbCHTrVdvY?b3o1Dtfn6%+|K*`6jQ*UOl1A`*OsUx)u{xbN2B6joq6!d)K!= zc%slz?N~5vyQI*Bs%7oP{CBGLPTXdY6m46qkz?j_G_!olRDKl|v7)`62Z}sDd=^WO z|Nj4^?&YlW^D7R>bT}=)%ea#L$uGnETWqrPq zlW!#@B_|ZMw0gA~NtyC|JYVtjs+C0X1bgB4kNDF1C-^@t^G`_T+8pyp)t>Lph1dv5 zhi|?=?lrwJ&Z#?i%XWhJW7XKH_OYUVk`D_Tn)c( z*86aRNbCHTrVdvY?b3o1Dtfn6%+|K*`6jQ*UOl1A`*OsUx)u{xbN2B6joq6!d)K!= zc%slz?N~5vyQI*Bs%7oP{CBGLPTXdY6m46qkz?j_G_!olRDKl|v7)`62Z}sDd=^WO z|Nj4^?&YlW^D7R>bT}=)%ea#L$uGnETWqrPq zlW!#@B_|ZMw0gA~NtyC|JYVtjs+C0X1bgB4kNDF1C-^@t^G`_T+8pyp)t>Lph1dv5 zhi|?=?lrwJ&Z#?i%XWhJW7XKH_OYUVk`D_Tn)c( z*86aRNbCHTrVdvY?b3o1Dtfn6%+|K*`6jQ*UOl1A`*OsUx)u{xbN2B6joq6!d)K!= zc%slz?N~5vyQI*Bs%7oP{CBGLPTXdY6m46qkz?j_G_!olRDKl|v7)`62Z}sDd=^WO z|Nj4^?&YlW^D7R>bT}=)%ea#L$uGnETWqrPq zlW!#@B_|ZMw0gA~NtyC|JYVtjs+C0X1bgB4kNDF1C-^@t^G`_T+8pyp)t>Lph1dv5 zhi|?=?lrwJ&Z#?i%XWhJW7XKH_OYUVk`D_Tn) Date: Thu, 3 Jul 2025 13:27:53 -0700 Subject: [PATCH 15/24] fix: move debug info to meta, fix exclude behavior --- src/api.ts | 10 ++++++---- src/api/rpc.ts | 3 --- src/api/terminal.ts | 1 + src/api/ws.ts | 1 + src/debug.ts | 31 ++++++++++++++++++++----------- src/worker/emitter.ts | 6 +++--- src/worker/index.ts | 4 +++- src/worker/types.ts | 5 +++++ src/worker/worker.ts | 8 +------- 9 files changed, 40 insertions(+), 29 deletions(-) diff --git a/src/api.ts b/src/api.ts index 699a6aab..64e09927 100644 --- a/src/api.ts +++ b/src/api.ts @@ -9,6 +9,7 @@ import { createVitestTerminalProcess } from './api/terminal' import { getConfig } from './config' import { createVitestProcess } from './api/child_process' import type { ExtensionWorkerProcess } from './api/types' +import type { BrowserDebugOptions } from './worker/types' export class VitestAPI { private disposing = false @@ -205,11 +206,11 @@ export class VitestFolderAPI { await this.meta.rpc.unwatchTests() } - async getBrowserModeInfo() { - const resolvedBrowserOptions = await this.meta.rpc.getBrowserDebugOptions() + getBrowserModeInfo() { + const browserDebugOptions = this.meta.browserDebugOptions // Only playwright provider supports --inspect-brk currently - const isPlaywright = resolvedBrowserOptions?.some(browserConfig => browserConfig.enabled && browserConfig.provider === 'playwright') ?? false - const browserModeProjects = resolvedBrowserOptions?.filter(browserConfig => browserConfig.enabled).map(browserConfig => browserConfig.project) + const isPlaywright = browserDebugOptions?.some(browserConfig => browserConfig.enabled && browserConfig.provider === 'playwright') ?? false + const browserModeProjects = browserDebugOptions?.filter(browserConfig => browserConfig.enabled).map(browserConfig => browserConfig.project) return { browserModeProjects, @@ -417,6 +418,7 @@ export interface ResolvedMeta { workspaceSource: string | false pkg: VitestPackage configs: string[] + browserDebugOptions: BrowserDebugOptions[] | undefined handlers: { onStdout: (listener: (log: string) => void) => void onConsoleLog: (listener: ExtensionWorkerEvents['onConsoleLog']) => void diff --git a/src/api/rpc.ts b/src/api/rpc.ts index 36069eb5..91b8fbfa 100644 --- a/src/api/rpc.ts +++ b/src/api/rpc.ts @@ -1,7 +1,6 @@ import v8 from 'node:v8' import { type BirpcReturn, createBirpc } from 'birpc' import type { RunnerTestFile, TaskResultPack, UserConsoleLog } from 'vitest' -import type { ResolvedBrowserOptions } from 'vitest/dist/node.js' export type SerializedTestSpecification = [ project: { name: string | undefined }, @@ -25,8 +24,6 @@ export interface ExtensionWorkerTransport { waitForCoverageReport: () => Promise close: () => void - getBrowserDebugOptions: () => (Pick & { project: string })[] | undefined - onFilesCreated: (files: string[]) => void onFilesChanged: (files: string[]) => void } diff --git a/src/api/terminal.ts b/src/api/terminal.ts index 6793637e..e6286c0c 100644 --- a/src/api/terminal.ts +++ b/src/api/terminal.ts @@ -55,6 +55,7 @@ export async function createVitestTerminalProcess(pkg: VitestPackage): Promise inc.uri?.fsPath != null).flatMap(inc => getProjectsFromTests(inc, api, tree)) ?? [] + // When filters are applied through the test explorer, the result is represented as exclusion rather than inclusion. + // When exclusions apply, root path is used and all but the excluded tests should be considered + const includedTests = request.include?.length ? request.include : [{ uri: api.workspaceFolder.uri, parent: undefined }] + const excludedTestIds = new Set(request?.exclude?.map(ex => ex.id) ?? []) + const testProjects = includedTests?.filter(inc => inc.uri?.fsPath != null).flatMap(({ uri, parent }) => getProjectsFromTests(uri!.fsPath, parent, api, tree, excludedTestIds)) ?? [] + const needsBrowserMode = !!browserModeProjects?.length && testProjects.some(project => browserModeProjects?.includes(project)) + if (needsBrowserMode && !isPlaywright) { + log.info('Browser mode debugging support is limited to Chrome with Playwright and Chromium with webdriverio. Additional project configuration is required for webdriverio debugger integration.') + } vscode.debug.startDebugging( pkg.folder, @@ -217,30 +225,31 @@ export async function debugTests( await deferredPromise.promise } -function getTestProjectsInFolder(path: string, api: VitestFolderAPI, tree: TestTree) { +function getTestProjectsInFolder(path: string, api: VitestFolderAPI, tree: TestTree, exclude: Set) { const folder = tree.getOrCreateFolderTestItem(api, path) const items = tree.getFolderFiles(folder) - return items.map(item => (getTestData(item) as TestFile).project) + return items.map(item => (getTestData(item) as TestFile)).filter(testfile => !exclude.has(testfile.id)).map(tf => tf.project) } -function getProjectsFromTests(item: vscode.TestItem | undefined, api: VitestFolderAPI, tree: TestTree): string[] { - const items = getTestProjectsInFolder(item?.uri?.fsPath ?? '', api, tree) +function getProjectsFromTests(fsPath: string, parentItem: vscode.TestItem | undefined, api: VitestFolderAPI, tree: TestTree, excluded: Set): string[] { + const items = getTestProjectsInFolder(fsPath, api, tree, excluded) if (items.length > 0) { return items } // Climb up tree until entry with project is found - if (item?.parent) { - return getProjectsFromTests(item.parent, api, tree) + const parentPath = parentItem?.uri?.fsPath + if (parentPath) { + return getProjectsFromTests(parentPath, parentItem?.parent, api, tree, excluded) } return [] } -function getBrowserModeLaunchArgs(isPlaywright: boolean, config: any): string { - const browser = isPlaywright ? 'chromium' : 'chrome' +function getBrowserModeLaunchArgs(isPlaywright: boolean, config: { debuggerPort?: number; cliArguments?: string }): string { + const browser = !config.cliArguments?.includes('--browser') ? `--browser=${isPlaywright ? 'chromium' : 'chrome'}` : '' // Only playwright provider supports --inspect-brk currently - const inspectBrk = isPlaywright ? `--inspect-brk=localhost:${config.debuggerPort ?? '9229'}` : '' + const inspectBrk = isPlaywright && !config.cliArguments?.includes('--inspect-brk') ? `--inspect-brk=localhost:${config.debuggerPort ?? '9229'}` : '' // regardless of user config, some properties need to be set when debugging with browser mode enabled - return `vitest ${config.cliArguments ?? ''} ${inspectBrk} --browser=${browser}` + return `vitest ${config.cliArguments ?? ''} ${inspectBrk} ${browser}` } async function getRuntimeOptions(pkg: VitestPackage) { diff --git a/src/worker/emitter.ts b/src/worker/emitter.ts index 7e768e95..7868e5b2 100644 --- a/src/worker/emitter.ts +++ b/src/worker/emitter.ts @@ -1,5 +1,5 @@ import type WebSocket from 'ws' -import type { WorkerEvent } from './types' +import type { BrowserDebugOptions, WorkerEvent } from './types' abstract class WorkerEventEmitter { abstract name: string @@ -8,8 +8,8 @@ abstract class WorkerEventEmitter { abstract on(event: string, listener: (...args: any[]) => void): void abstract off(event: string, listener: (...args: any[]) => void): void - ready(configs: string[], workspaceSource: string | false) { - this.sendWorkerEvent({ type: 'ready', configs, workspaceSource }) + ready(configs: string[], workspaceSource: string | false, browserDebugOptions: BrowserDebugOptions[] | undefined) { + this.sendWorkerEvent({ type: 'ready', configs, workspaceSource, browserDebugOptions }) } error(err: any) { diff --git a/src/worker/index.ts b/src/worker/index.ts index e1e76541..a798862b 100644 --- a/src/worker/index.ts +++ b/src/worker/index.ts @@ -47,8 +47,10 @@ emitter.on('message', async function onMessage(message: any) { deserialize: v => v8.deserialize(Buffer.from(v) as any), }, ) + const browserDebugOptions = vitest.projects.map(proj => ({ enabled: proj.config?.browser.enabled, provider: proj.config?.browser.provider, project: proj.getName() })) + reporter.initRpc(rpc) - emitter.ready(configs, workspaceSource) + emitter.ready(configs, workspaceSource, browserDebugOptions) } catch (err: any) { emitter.error(err) diff --git a/src/worker/types.ts b/src/worker/types.ts index a28d4bad..8eda8f48 100644 --- a/src/worker/types.ts +++ b/src/worker/types.ts @@ -1,3 +1,5 @@ +import type { ResolvedBrowserOptions } from 'vitest/dist/node.js' + export interface WorkerInitMetadata { vitestNodePath: string id: string @@ -22,8 +24,11 @@ export interface EventReady { type: 'ready' configs: string[] workspaceSource: string | false + browserDebugOptions: BrowserDebugOptions[] | undefined } +export type BrowserDebugOptions = Pick & { project: string } + export interface EventDebug { type: 'debug' args: string[] diff --git a/src/worker/worker.ts b/src/worker/worker.ts index 866f58ca..cb0e90f0 100644 --- a/src/worker/worker.ts +++ b/src/worker/worker.ts @@ -1,5 +1,5 @@ import { readFileSync } from 'node:fs' -import type { ResolvedBrowserOptions, Vitest as VitestCore, WorkspaceProject } from 'vitest/node' +import type { Vitest as VitestCore, WorkspaceProject } from 'vitest/node' import { relative } from 'pathe' import mm from 'micromatch' import type { ExtensionWorkerTransport, SerializedTestSpecification } from '../api/rpc' @@ -146,12 +146,6 @@ export class ExtensionWorker implements ExtensionWorkerTransport { return files.map(([project, spec]) => [project.config.name || '', spec]) } - public getBrowserDebugOptions(): (Pick & { project: string })[] | undefined { - return this.ctx.projects.map((project) => { - return { enabled: project.config?.browser.enabled, provider: project.config?.browser.provider, project: project.getName() } - }) - } - private async globTestFiles(filters?: string[]) { return await this.ctx.globTestFiles(filters) } From 1d73ef57951b0fae447cb54d96b94f3b2ca8a85c Mon Sep 17 00:00:00 2001 From: Nathan Castle Date: Thu, 3 Jul 2025 15:17:25 -0700 Subject: [PATCH 16/24] fix: apply correct formatting --- samples/browser-multiple/test/.gitignore | 2 +- samples/browser/test/.gitignore | 2 +- src/api.ts | 9 +++++---- src/api/child_process.ts | 8 ++++---- src/api/pkg.ts | 6 +++--- src/api/terminal.ts | 10 +++++----- src/api/ws.ts | 6 +++--- src/debug.ts | 17 ++++++++--------- src/extension.ts | 5 +++-- 9 files changed, 33 insertions(+), 32 deletions(-) diff --git a/samples/browser-multiple/test/.gitignore b/samples/browser-multiple/test/.gitignore index ba6026ef..acb8112a 100644 --- a/samples/browser-multiple/test/.gitignore +++ b/samples/browser-multiple/test/.gitignore @@ -1,2 +1,2 @@ __snapshots__ -__screenshots__ \ No newline at end of file +__screenshots__ diff --git a/samples/browser/test/.gitignore b/samples/browser/test/.gitignore index ba6026ef..acb8112a 100644 --- a/samples/browser/test/.gitignore +++ b/samples/browser/test/.gitignore @@ -1,2 +1,2 @@ __snapshots__ -__screenshots__ \ No newline at end of file +__screenshots__ diff --git a/src/api.ts b/src/api.ts index 0dc9711c..5c17bc20 100644 --- a/src/api.ts +++ b/src/api.ts @@ -1,15 +1,15 @@ -import { dirname, isAbsolute } from 'node:path' -import { normalize, relative } from 'pathe' -import * as vscode from 'vscode' import type { VitestPackage } from './api/pkg' import type { ExtensionWorkerEvents, SerializedTestSpecification, VitestRPC } from './api/rpc' import type { ExtensionWorkerProcess } from './api/types' +import type { BrowserDebugOptions } from './worker/types' +import { dirname, isAbsolute } from 'node:path' +import { normalize, relative } from 'pathe' +import * as vscode from 'vscode' import { createVitestProcess } from './api/child_process' import { createVitestTerminalProcess } from './api/terminal' import { getConfig } from './config' import { log } from './log' import { showVitestError } from './utils' -import type { BrowserDebugOptions } from './worker/types' export class VitestAPI { private disposing = false @@ -209,6 +209,7 @@ export class VitestFolderAPI { getBrowserModeInfo() { const browserDebugOptions = this.meta.browserDebugOptions // Only playwright provider supports --inspect-brk currently + const isPlaywright = browserDebugOptions?.some(browserConfig => browserConfig.enabled && browserConfig.provider === 'playwright') ?? false const browserModeProjects = browserDebugOptions?.filter(browserConfig => browserConfig.enabled).map(browserConfig => browserConfig.project) diff --git a/src/api/child_process.ts b/src/api/child_process.ts index 35f234ea..e3da7d08 100644 --- a/src/api/child_process.ts +++ b/src/api/child_process.ts @@ -1,18 +1,18 @@ import type { ChildProcessWithoutNullStreams } from 'node:child_process' import type { Server } from 'node:http' +import type WebSocket from 'ws' +import type { ResolvedMeta } from '../api' +import type { VitestPackage } from './pkg' +import type { ExtensionWorkerProcess } from './types' import { spawn } from 'node:child_process' import { createServer } from 'node:http' import { pathToFileURL } from 'node:url' -import type WebSocket from 'ws' import getPort from 'get-port' import { WebSocketServer } from 'ws' -import type { ResolvedMeta } from '../api' import { getConfig } from '../config' import { workerPath } from '../constants' import { createErrorLogger, log } from '../log' import { findNode, formatPkg, showVitestError } from '../utils' -import type { ExtensionWorkerProcess } from './types' -import type { VitestPackage } from './pkg' import { waitForWsConnection } from './ws' export async function createVitestProcess(pkg: VitestPackage) { diff --git a/src/api/pkg.ts b/src/api/pkg.ts index fa45e8c2..bd2712d8 100644 --- a/src/api/pkg.ts +++ b/src/api/pkg.ts @@ -285,9 +285,9 @@ async function resolveVitestConfigs(showWarning: boolean) { const configs = rootConfig ? [vscode.Uri.file(rootConfig)] : await vscode.workspace.findFiles( - config.configSearchPatternInclude || configGlob, - config.configSearchPatternExclude, - ) + config.configSearchPatternInclude || configGlob, + config.configSearchPatternExclude, + ) const configsByFolder = configs.reduce>((acc, config) => { const dir = dirname(config.fsPath) diff --git a/src/api/terminal.ts b/src/api/terminal.ts index 4e10e507..d79d07eb 100644 --- a/src/api/terminal.ts +++ b/src/api/terminal.ts @@ -1,19 +1,19 @@ import type { Server } from 'node:http' +import type { WebSocket } from 'ws' +import type { ResolvedMeta } from '../api' +import type { VitestPackage } from './pkg' +import type { ExtensionWorkerProcess } from './types' +import type { WsConnectionMetadata } from './ws' import { createServer } from 'node:http' import { pathToFileURL } from 'node:url' import { stripVTControlCharacters } from 'node:util' -import type { WebSocket } from 'ws' import getPort from 'get-port' import * as vscode from 'vscode' import { WebSocketServer } from 'ws' -import type { ResolvedMeta } from '../api' import { getConfig } from '../config' import { workerPath } from '../constants' import { createErrorLogger, log } from '../log' import { formatPkg } from '../utils' -import type { WsConnectionMetadata } from './ws' -import type { ExtensionWorkerProcess } from './types' -import type { VitestPackage } from './pkg' import { waitForWsConnection } from './ws' export async function createVitestTerminalProcess(pkg: VitestPackage): Promise { diff --git a/src/api/ws.ts b/src/api/ws.ts index 632dac41..58a225af 100644 --- a/src/api/ws.ts +++ b/src/api/ws.ts @@ -1,11 +1,11 @@ -import { pathToFileURL } from 'node:url' import type { WebSocket, WebSocketServer } from 'ws' -import { gte } from 'semver' import type { ResolvedMeta } from '../api' import type { WorkerEvent, WorkerRunnerOptions } from '../worker/types' +import type { VitestPackage } from './pkg' +import { pathToFileURL } from 'node:url' +import { gte } from 'semver' import { getConfig } from '../config' import { log } from '../log' -import type { VitestPackage } from './pkg' import { createVitestRpc } from './rpc' export type WsConnectionMetadata = Omit & { diff --git a/src/debug.ts b/src/debug.ts index 1a3f8e7c..7e4452e4 100644 --- a/src/debug.ts +++ b/src/debug.ts @@ -1,22 +1,22 @@ -import { createServer } from 'node:http' -import { pathToFileURL } from 'node:url' -import getPort from 'get-port' -import * as vscode from 'vscode' -import { WebSocketServer } from 'ws' import type { VitestPackage } from './api/pkg' import type { ExtensionWorkerProcess } from './api/types' import type { WsConnectionMetadata } from './api/ws' import type { ExtensionDiagnostic } from './diagnostic' import type { TestTree } from './testTree' +import type { TestFile } from './testTreeData' +import { createServer } from 'node:http' +import { pathToFileURL } from 'node:url' +import getPort from 'get-port' +import * as vscode from 'vscode' +import { WebSocketServer } from 'ws' import { VitestFolderAPI } from './api' import { onWsConnection } from './api/ws' import { getConfig } from './config' import { workerPath } from './constants' import { log } from './log' import { TestRunner } from './runner' -import { findNode } from './utils' -import type { TestFile } from './testTreeData' import { getTestData } from './testTreeData' +import { findNode } from './utils' const DebugSessionName = 'Vitest' const BrowserDebugSessionName = 'Vitest_Attach' @@ -192,8 +192,7 @@ export async function debugTests( else { log.error('[DEBUG] Secondary debug launch config failed') } - } - , + }, (err) => { log.error('[DEBUG] Secondary debug launch config failed') log.error(err.toString()) diff --git a/src/extension.ts b/src/extension.ts index d552171a..a4eaae6e 100644 --- a/src/extension.ts +++ b/src/extension.ts @@ -1,7 +1,7 @@ +import type { VitestAPI } from './api' import { normalize } from 'pathe' import * as vscode from 'vscode' import { version } from '../package.json' -import type { VitestAPI } from './api' import { resolveVitestAPI } from './api' import { resolveVitestPackages } from './api/pkg' import { ExtensionTerminalProcess } from './api/terminal' @@ -14,8 +14,9 @@ import { log } from './log' import { TestRunner } from './runner' import { TagsManager } from './tagsManager' import { TestTree } from './testTree' -import { TestFile, getTestData } from './testTreeData' +import { getTestData, TestFile } from './testTreeData' import { debounce, showVitestError } from './utils' + import './polyfills' export async function activate(context: vscode.ExtensionContext) { From b3a4d2e32f505a4b207d1cd341b0c83486092164 Mon Sep 17 00:00:00 2001 From: Nathan Castle Date: Thu, 3 Jul 2025 15:25:52 -0700 Subject: [PATCH 17/24] fix: revert use of deprecated method --- src/worker/index.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/worker/index.ts b/src/worker/index.ts index f32377de..1b03e873 100644 --- a/src/worker/index.ts +++ b/src/worker/index.ts @@ -47,7 +47,7 @@ emitter.on('message', async function onMessage(message: any) { deserialize: v => v8.deserialize(Buffer.from(v) as any), }, ) - const browserDebugOptions = vitest.projects.map(proj => ({ enabled: proj.config?.browser.enabled, provider: proj.config?.browser.provider, project: proj.getName() })) + const browserDebugOptions = vitest.projects.map(proj => ({ enabled: proj.config?.browser.enabled, provider: proj.config?.browser.provider, project: proj.name })) reporter.initRpc(rpc) emitter.ready(configs, workspaceSource, browserDebugOptions) From 4aa747216f79f42a60450e702898ccfb505acb48 Mon Sep 17 00:00:00 2001 From: Nathan Castle Date: Thu, 3 Jul 2025 15:33:18 -0700 Subject: [PATCH 18/24] fix: update new samples to use pnpm workspace --- samples/browser-multiple/package.json | 8 ++++---- samples/browser-webdriverio/package.json | 8 ++++---- 2 files changed, 8 insertions(+), 8 deletions(-) diff --git a/samples/browser-multiple/package.json b/samples/browser-multiple/package.json index 4a7839b0..47c3abf0 100644 --- a/samples/browser-multiple/package.json +++ b/samples/browser-multiple/package.json @@ -12,10 +12,10 @@ "birpc": "^0.2.2" }, "devDependencies": { - "@vitest/browser": "^3.0.9", - "@vitest/coverage-v8": "^3.0.9", + "@vitest/browser": "catalog:", + "@vitest/coverage-v8": "catalog:", "playwright": "^1.51.1", - "vite": "^5.4.3", - "vitest": "^3.0.9" + "vite": "catalog:", + "vitest": "catalog:" } } diff --git a/samples/browser-webdriverio/package.json b/samples/browser-webdriverio/package.json index fa2a04a4..68a5b383 100644 --- a/samples/browser-webdriverio/package.json +++ b/samples/browser-webdriverio/package.json @@ -12,11 +12,11 @@ "birpc": "^0.2.2" }, "devDependencies": { - "@vitest/browser": "^3.0.9", - "@vitest/coverage-v8": "^3.0.9", + "@vitest/browser": "catalog:", + "@vitest/coverage-v8": "catalog:", "@wdio/cli": "^9.12.2", "playwright": "^1.51.1", - "vite": "^5.4.3", - "vitest": "^3.0.9" + "vite": "catalog:", + "vitest": "catalog:" } } From 4618931ad32c81e314e66508074c9eecfa1987fc Mon Sep 17 00:00:00 2001 From: Nathan Castle Date: Thu, 3 Jul 2025 15:34:24 -0700 Subject: [PATCH 19/24] fix: update to use --inspect, not --inspect-brk I'm not sure why the behavior changed, but now inspect-brk stops on every file, not just the first file. --inspect seems to work consistently now, though, so using that instead. --- src/debug.ts | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/debug.ts b/src/debug.ts index 7e4452e4..7834c3fb 100644 --- a/src/debug.ts +++ b/src/debug.ts @@ -274,10 +274,10 @@ function getProjectsFromTests(fsPath: string, parentItem: vscode.TestItem | unde function getBrowserModeLaunchArgs(isPlaywright: boolean, config: { debuggerPort?: number; cliArguments?: string }): string { const browser = !config.cliArguments?.includes('--browser') ? `--browser=${isPlaywright ? 'chromium' : 'chrome'}` : '' - // Only playwright provider supports --inspect-brk currently - const inspectBrk = isPlaywright && !config.cliArguments?.includes('--inspect-brk') ? `--inspect-brk=localhost:${config.debuggerPort ?? '9229'}` : '' + // Only playwright provider supports --inspect currently + const inspect = isPlaywright && !config.cliArguments?.includes('--inspect') ? `--inspect=localhost:${config.debuggerPort ?? '9229'}` : '' // regardless of user config, some properties need to be set when debugging with browser mode enabled - return `vitest ${config.cliArguments ?? ''} ${inspectBrk} ${browser}` + return `vitest ${config.cliArguments ?? ''} ${inspect} ${browser}` } async function getRuntimeOptions(pkg: VitestPackage) { From e9d270c1a6e1c7cd7a99a3f468bbfd85747eff3a Mon Sep 17 00:00:00 2001 From: Nathan Castle Date: Thu, 3 Jul 2025 16:23:41 -0700 Subject: [PATCH 20/24] fix: clean up merge --- src/api.ts | 2 +- src/debug.ts | 1 - 2 files changed, 1 insertion(+), 2 deletions(-) diff --git a/src/api.ts b/src/api.ts index 5c17bc20..04583ac0 100644 --- a/src/api.ts +++ b/src/api.ts @@ -208,8 +208,8 @@ export class VitestFolderAPI { getBrowserModeInfo() { const browserDebugOptions = this.meta.browserDebugOptions - // Only playwright provider supports --inspect-brk currently + // Only playwright is supported for debugging integration with the --inspect options const isPlaywright = browserDebugOptions?.some(browserConfig => browserConfig.enabled && browserConfig.provider === 'playwright') ?? false const browserModeProjects = browserDebugOptions?.filter(browserConfig => browserConfig.enabled).map(browserConfig => browserConfig.project) diff --git a/src/debug.ts b/src/debug.ts index 7834c3fb..1f06b677 100644 --- a/src/debug.ts +++ b/src/debug.ts @@ -244,7 +244,6 @@ export async function debugTests( else if (session.configuration.__name !== DebugSessionName) { return } - disposables.reverse().forEach(d => d.dispose()) server.close() onDidTerminate.dispose() onDidWorkerTerminate.dispose() From 0b9496713a0a292ca015f50e7f7d5bd68f0ccc35 Mon Sep 17 00:00:00 2001 From: Nathan Castle Date: Thu, 3 Jul 2025 16:23:41 -0700 Subject: [PATCH 21/24] fix: clean up merge and comments --- src/api.ts | 2 +- src/debug.ts | 3 +-- 2 files changed, 2 insertions(+), 3 deletions(-) diff --git a/src/api.ts b/src/api.ts index 5c17bc20..04583ac0 100644 --- a/src/api.ts +++ b/src/api.ts @@ -208,8 +208,8 @@ export class VitestFolderAPI { getBrowserModeInfo() { const browserDebugOptions = this.meta.browserDebugOptions - // Only playwright provider supports --inspect-brk currently + // Only playwright is supported for debugging integration with the --inspect options const isPlaywright = browserDebugOptions?.some(browserConfig => browserConfig.enabled && browserConfig.provider === 'playwright') ?? false const browserModeProjects = browserDebugOptions?.filter(browserConfig => browserConfig.enabled).map(browserConfig => browserConfig.project) diff --git a/src/debug.ts b/src/debug.ts index 7834c3fb..82695856 100644 --- a/src/debug.ts +++ b/src/debug.ts @@ -93,7 +93,7 @@ export async function debugTests( } // If the debug request includes any test files belonging the browser-mode projects, - // vitest needs to be started with the correct --inspect-brk and --browser arguments. + // vitest needs to be started with the correct --inspect and --browser arguments. // Later, after debugging session starts, a secondary debug session is started; that session attaches to the launched browser instance. const { browserModeProjects, isPlaywright } = await api.getBrowserModeInfo() // When filters are applied through the test explorer, the result is represented as exclusion rather than inclusion. @@ -244,7 +244,6 @@ export async function debugTests( else if (session.configuration.__name !== DebugSessionName) { return } - disposables.reverse().forEach(d => d.dispose()) server.close() onDidTerminate.dispose() onDidWorkerTerminate.dispose() From 1b9e39a1d87dcb3d11c1b2001331f3e1a0ec4f9a Mon Sep 17 00:00:00 2001 From: Nathan Castle Date: Mon, 7 Jul 2025 16:10:37 -0700 Subject: [PATCH 22/24] fix: import --- src/worker/types.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/worker/types.ts b/src/worker/types.ts index 99afb246..7da312cf 100644 --- a/src/worker/types.ts +++ b/src/worker/types.ts @@ -1,4 +1,4 @@ -import type { ResolvedBrowserOptions } from 'vitest/dist/node.js' +import type { ResolvedBrowserOptions } from 'vitest/node' export interface WorkerInitMetadata { vitestNodePath: string From 3b24afeaf026718399857930a51e31437e0fbf83 Mon Sep 17 00:00:00 2001 From: Nathan Castle Date: Mon, 7 Jul 2025 16:11:16 -0700 Subject: [PATCH 23/24] fix: nest session cancellation Fixes issue that broke debugging for node --- src/debug.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/debug.ts b/src/debug.ts index 82695856..6b1e3cc3 100644 --- a/src/debug.ts +++ b/src/debug.ts @@ -236,8 +236,8 @@ export async function debugTests( }) const onDidTerminate = vscode.debug.onDidTerminateDebugSession((session) => { - // Child/secondary debug session should stop the main debugging session - if (session.parentSession?.configuration.__name === DebugSessionName) { + // Child/secondary debug session should stop the main debugging session when in browser mode + if (session?.configuration.__name === BrowserDebugSessionName) { vscode.debug.stopDebugging(session.parentSession) return } From 8ca571336143ee8ccf75e33b255caa5035bc579f Mon Sep 17 00:00:00 2001 From: Nathan Castle Date: Mon, 7 Jul 2025 16:11:32 -0700 Subject: [PATCH 24/24] feat: improve warnings for browser mode debugging --- src/api.ts | 12 ++++-------- src/debug.ts | 22 +++++++++++++++++----- 2 files changed, 21 insertions(+), 13 deletions(-) diff --git a/src/api.ts b/src/api.ts index 04583ac0..34502771 100644 --- a/src/api.ts +++ b/src/api.ts @@ -206,17 +206,13 @@ export class VitestFolderAPI { await this.meta.rpc.unwatchTests() } - getBrowserModeInfo() { + getEnabledBrowserModeProjects() { const browserDebugOptions = this.meta.browserDebugOptions - // Only playwright is supported for debugging integration with the --inspect options - const isPlaywright = browserDebugOptions?.some(browserConfig => browserConfig.enabled && browserConfig.provider === 'playwright') ?? false - const browserModeProjects = browserDebugOptions?.filter(browserConfig => browserConfig.enabled).map(browserConfig => browserConfig.project) + const browserModeProjects = browserDebugOptions?.filter(browserConfig => browserConfig.enabled) + .map(browserConfig => ({ project: browserConfig.project, provider: browserConfig.provider })) - return { - browserModeProjects, - isPlaywright, - } + return browserModeProjects } onConsoleLog = this.createHandler('onConsoleLog') diff --git a/src/debug.ts b/src/debug.ts index 6b1e3cc3..eba899d7 100644 --- a/src/debug.ts +++ b/src/debug.ts @@ -95,16 +95,28 @@ export async function debugTests( // If the debug request includes any test files belonging the browser-mode projects, // vitest needs to be started with the correct --inspect and --browser arguments. // Later, after debugging session starts, a secondary debug session is started; that session attaches to the launched browser instance. - const { browserModeProjects, isPlaywright } = await api.getBrowserModeInfo() + const browserModeProjects = api.getEnabledBrowserModeProjects() // When filters are applied through the test explorer, the result is represented as exclusion rather than inclusion. // When exclusions apply, root path is used and all but the excluded tests should be considered const includedTests = request.include?.length ? request.include : [{ uri: api.workspaceFolder.uri, parent: undefined }] const excludedTestIds = new Set(request?.exclude?.map(ex => ex.id) ?? []) const testProjects = includedTests?.filter(inc => inc.uri?.fsPath != null).flatMap(({ uri, parent }) => getProjectsFromTests(uri!.fsPath, parent, api, tree, excludedTestIds)) ?? [] - const needsBrowserMode = !!browserModeProjects?.length && testProjects.some(project => browserModeProjects?.includes(project)) - if (needsBrowserMode && !isPlaywright) { - log.info('Browser mode debugging support is limited to Chrome with Playwright and Chromium with webdriverio. Additional project configuration is required for webdriverio debugger integration.') + const includedBrowserModeProjects = browserModeProjects?.filter(p => testProjects.includes(p.project)) + const isPlaywright = !!includedBrowserModeProjects?.some(p => p.provider === 'playwright') + const isWebdriverio = !!includedBrowserModeProjects?.some(p => p.provider === 'webdriverio') + + const needsBrowserMode = !!includedBrowserModeProjects?.length + if (needsBrowserMode) { + if (isWebdriverio && isPlaywright) { + vscode.window.showWarningMessage('Projects configured for both webdriverio and Playwright providers are included for debugging, but only one provider may be in use at a time. Choosing Playwright.') + } + else if (!isWebdriverio && !isPlaywright) { + vscode.window.showWarningMessage('Browser mode debugger integration is only supported for Playwright with Chrome and webdriverio with Chromium. No matching projects found, so browser debugging session was not started.') + } + else if (isWebdriverio) { + vscode.window.showInformationMessage('Browser mode debugger integration is limited to Chromium when using the webdriverio provider, and additional project configuration may be required.') + } } vscode.debug.startDebugging( @@ -161,7 +173,7 @@ export async function debugTests( await metadata.rpc.close() }) - if (needsBrowserMode) { + if (needsBrowserMode && (isWebdriverio || isPlaywright)) { const browserModeAttachConfig = { __name: BrowserDebugSessionName, request: 'attach',