diff --git a/.gitattributes b/.gitattributes deleted file mode 100644 index 097cb99cf7e..00000000000 --- a/.gitattributes +++ /dev/null @@ -1,5 +0,0 @@ -* text=auto eol=lf -/.yarn/** linguist-vendored -/.yarn/releases/* binary -/.yarn/plugins/**/* binary -/.pnp.* binary linguist-generated diff --git a/.github/workflows/browser-tests.yml b/.github/workflows/browser-tests.yml new file mode 100644 index 00000000000..1a588d1b237 --- /dev/null +++ b/.github/workflows/browser-tests.yml @@ -0,0 +1,43 @@ +name: Browser Tests + +defaults: + run: + shell: bash + +on: + push: + paths-ignore: + - 'src/*/doc/**' + - 'src/**/*.md' + - 'ux.symfony.com/**' + - '.github/workflows/app-tests.yaml' + - '.github/workflows/unit-tests.yaml' + pull_request: + paths-ignore: + - 'src/*/doc/**' + - 'src/**/*.md' + - 'ux.symfony.com/**' + - '.github/workflows/app-tests.yaml' + - '.github/workflows/unit-tests.yaml' + +jobs: + js: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v4 + - run: npm i -g corepack && corepack enable + - uses: actions/setup-node@v4 + with: + node-version-file: '.nvmrc' + cache: 'pnpm' + cache-dependency-path: | + pnpm-lock.yaml + package.json + src/**/package.json + - run: pnpm install --frozen-lockfile + + - name: Install browsers + run: node ./bin/get_browsers.mjs + + # TODO: Install the E2E app + run webserver + - run: pnpm run test:browser diff --git a/.github/workflows/functional-tests.yml b/.github/workflows/functional-tests.yml index 08e3a72daf2..b8bcce9f257 100644 --- a/.github/workflows/functional-tests.yml +++ b/.github/workflows/functional-tests.yml @@ -1,3 +1,4 @@ +# Deprecated, will be removed in favor of browser-tests.yml name: Functional Tests defaults: diff --git a/.github/workflows/unit-tests.yaml b/.github/workflows/unit-tests.yaml index 621a8219bcb..60d0126181e 100644 --- a/.github/workflows/unit-tests.yaml +++ b/.github/workflows/unit-tests.yaml @@ -143,21 +143,16 @@ jobs: fi js: runs-on: ubuntu-latest - strategy: - fail-fast: false - matrix: - node-version: [ '18.x', '20.x', '22.x', '24.x' ] steps: - uses: actions/checkout@v4 - run: npm i -g corepack && corepack enable - uses: actions/setup-node@v4 with: - node-version: ${{ matrix.node-version }} + node-version-file: '.nvmrc' cache: 'pnpm' cache-dependency-path: | pnpm-lock.yaml package.json src/**/package.json - run: pnpm install --frozen-lockfile - - run: pnpm exec playwright install chromium - - run: pnpm run test + - run: pnpm run test:unit diff --git a/.gitignore b/.gitignore index 9ff44d96fd3..6f3a6e61fd3 100644 --- a/.gitignore +++ b/.gitignore @@ -1,4 +1,3 @@ -vendor/ node_modules .doctor-rst.cache @@ -7,3 +6,5 @@ node_modules /composer.lock /vendor + +/browsers diff --git a/.nvmrc b/.nvmrc index 8b84b727be4..f1c8f6b0d0f 100644 --- a/.nvmrc +++ b/.nvmrc @@ -1 +1 @@ -22.11 +22.18 diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index a4127cda4c2..db85e4a8c4e 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -39,7 +39,7 @@ To set up the development environment, you need the following tools: - [PHP](https://www.php.net/downloads.php) 8.1 or higher - [Composer](https://getcomposer.org/download/) -- [Node.js](https://nodejs.org/en/download/package-manager) 22.11 or higher +- [Node.js](https://nodejs.org/en/download/package-manager) 22.18 or higher - [Corepack](https://github.com/nodejs/corepack) - [PNPM](https://pnpm.io/) 10.13 or higher @@ -82,12 +82,16 @@ To help you with assets, you can run the following commands in a specific packag - `pnpm run build`: build (compile) assets from the package, - `pnpm run watch`: watch for modifications and rebuild assets from the package, - `pnpm run test`: run the tests from the package, + - `pnpm run test:unit`: run the Unit tests from the package, + - `pnpm run test:browser`: run the Browser tests from the package, - `pnpm run check`: run the formatter, linter, and sort imports, and fails if any modifications - `pnpm run check --write`: run the formatter, linter, imports sorting, and write modifications Thanks to [PNPM Workspaces](https://pnpm.io/workspaces), you can also run these commands from the root directory of the project: - `pnpm run build`: build (compile) assets from **all** packages, - `pnpm run test`: run the tests from **all** packages, + - `pnpm run test:unit`: run the Unit tests from **all** packages, + - `pnpm run test:browser`: run the Browser tests from **all** packages, - `pnpm run check`: run the formatter, linter, and sort imports for **all** packages, and fails if any modifications - `pnpm run check --write`: run the formatter, linter, imports sorting for **all** packages, and write modifications @@ -112,7 +116,7 @@ docker run --rm -it -e DOCS_DIR='/docs' -v ${PWD}:/docs oskarstark/doctor-rst - ```shell $ git checkout 2.x && \ git fetch upstream && \ - git rebase upstream/2.x && \ + git reset --hard upstream/2.x && \ git push origin 2.x ``` diff --git a/bin/get_browsers.mjs b/bin/get_browsers.mjs new file mode 100644 index 00000000000..3a47779388d --- /dev/null +++ b/bin/get_browsers.mjs @@ -0,0 +1,50 @@ +import * as path from 'node:path'; +import { + Browser, + BrowserTag, + detectBrowserPlatform, + install as installBrowser, + resolveBuildId, +} from '@puppeteer/browsers'; + +const platform = detectBrowserPlatform(); +const installBrowserCommonOpts = { + platform, + cacheDir: path.join(import.meta.dirname, '../browsers'), + downloadProgressCallback: 'default', +}; + +// Lowest versions are computed from "defaults and fully supports es6-module" query, +// see https://browsersl.ist/#q=defaults+and+fully+supports+es6-module + +export const browsers = { + 'chrome@lowest': await installBrowser({ + ...installBrowserCommonOpts, + browser: Browser.CHROME, + // The lowest version where: + // - Chrome and associated Chromedriver could easily be downloaded + // - there is no compatibility issues like "WebDriver Bidi command \"session.subscribe\" failed with error" + // - there is no timeout issues when requesting Vitest webserver + // @see https://raw.githubusercontent.com/GoogleChromeLabs/chrome-for-testing/refs/heads/main/data/known-good-versions-with-downloads.json + buildId: '130.0.6669.0', + }), + 'chrome@latest': await installBrowser({ + ...installBrowserCommonOpts, + browser: Browser.CHROME, + buildId: await resolveBuildId(Browser.CHROME, platform, BrowserTag.STABLE), + }), + 'firefox@lowest': await installBrowser({ + ...installBrowserCommonOpts, + browser: Browser.FIREFOX, + buildId: 'stable_128.0', + }), + 'firefox@latest': await installBrowser({ + ...installBrowserCommonOpts, + browser: Browser.FIREFOX, + buildId: await resolveBuildId(Browser.FIREFOX, platform, BrowserTag.STABLE), + }), +}; + +if (import.meta.main) { + console.log('Browsers installed:', browsers); +} diff --git a/bin/test_package.sh b/bin/test_package.sh index ccdfe94ce06..a1c4a176830 100755 --- a/bin/test_package.sh +++ b/bin/test_package.sh @@ -9,10 +9,9 @@ PROJECT_DIR=$(dirname "$SCRIPT_DIR") # Flag to track if any test fails all_tests_passed=true -# Check if we have at least one argument -if [ $# -eq 0 ] - then - echo "No arguments supplied, please provide the package's path." +# Check if we have enough arguments +if [ $# -ne 2 ]; then + echo "No arguments supplied, please provide the package's path and the test type (e.g. --unit or --browser)" fi # Check if jq is installed @@ -22,46 +21,58 @@ if ! command -v jq &> /dev/null; then fi runTestSuite() { - echo -e "Running tests for $workspace...\n" - pnpm exec vitest --run || { all_tests_passed=false; } + local testProject="$1" + if [ "$testProject" != "unit" ] && [ "$testProject" != "browser" ]; then + echo "Unknown test project: $testProject. Please use 'unit' or 'browser'." + exit 1 + fi + + echo -e "🧪 Running $testProject tests for $workspace...\n" + pnpm exec vitest --run --config "vitest.config.$testProject.mjs" || { all_tests_passed=false; } } processWorkspace() { local location="$1" + local testProject="$2" if [ ! -d "$location" ]; then - echo "No directory found at $location" + echo "⚠ No directory found at $location" return fi package_json_path="$location/package.json" if [ ! -f "$package_json_path" ]; then - echo "No package.json found at $package_json_path" + echo "⚠ No package.json found at $package_json_path" return fi workspace=$(jq -r '.name' "$package_json_path") if [ -z "$workspace" ]; then - echo "No name found in package.json at $package_json_path" + echo "⚠ No name found in package.json at $package_json_path" return fi - echo -e "Processing workspace $workspace at location $location...\n" + echo -e "⏳ Processing workspace $workspace at location $location...\n" - echo "Checking '$package_json_path' for peerDependencies and importmap dependencies to have the same version" + echo "⚙️ Checking '$package_json_path' for peerDependencies and importmap dependencies to have the same version" deps=$(jq -r '.peerDependencies | keys[]' "$package_json_path") for library in $deps; do version=$(jq -r ".peerDependencies.\"$library\"" "$package_json_path") - importmap_version=$(jq -r ".symfony.importmap.\"$library\"" "$package_json_path") + importmap_version=$(jq -r ".symfony.importmap.\"$library\" | if type == \"string\" then . else .version end" "$package_json_path") + + if [ "$importmap_version" == null ]; then + echo " ⚠ No importmap version found for $library in $package_json_path, skipping..." + continue + fi if [ "$version" != "$importmap_version" ]; then - echo " -> Version mismatch for $library: $version (peerDependencies) vs $importmap_version (importmap)" - echo " -> You need to match the version of the \"peerDependency\" with the version in the \"importmap\"" - exit + echo " ⚠ Version mismatch for $library: $version (peerDependencies) vs $importmap_version (importmap)" + echo " ⚠ You need to match the version of the \"peerDependency\" with the version in the \"importmap\"" + exit 1 fi done - echo "Checking '$package_json_path' for peerDependencies with multiple versions defined" + echo "⚙️ Checking '$package_json_path' for peerDependencies with multiple versions defined" deps_with_multiple_versions=$(jq -r '.peerDependencies | to_entries[] | select(.value | contains("||")) | .key' "$package_json_path") if [ -n "$deps_with_multiple_versions" ]; then @@ -78,20 +89,26 @@ processWorkspace() { echo -e " - Install $library@$trimmed_version for $workspace\n" pnpm add "$library@$trimmed_version" --save-peer --filter "$workspace" - runTestSuite + runTestSuite "$testProject" fi done done echo " -> Reverting version changes from $package_json_path" - git checkout -- "$package_json_path" + git checkout -- "$package_json_path" "$PROJECT_DIR/pnpm-lock.yaml" else echo -e " -> No peerDependencies found with multiple versions defined\n" - runTestSuite + runTestSuite "$testProject" fi } -processWorkspace "$(realpath "$PWD/$1")" +case "$2" in + --unit) testProject="unit" ;; + --browser) testProject="browser" ;; + *) echo "Unknown test type: $2. Please use --unit or --browser."; exit 1 ;; +esac + +processWorkspace "$(realpath "$PWD/$1")" "$testProject" # Check the flag at the end and exit with code 1 if any test failed if [ "$all_tests_passed" = false ]; then diff --git a/biome.json b/biome.json index a174663a75f..fa28e19135e 100644 --- a/biome.json +++ b/biome.json @@ -5,6 +5,7 @@ "**/*.json", "**/*.md", "**/bin/**/*.js", + "**/src/**/assets/*.mjs", "**/src/**/assets/src/**", "**/src/**/assets/test/**", "!**/composer.json", @@ -12,7 +13,8 @@ "!**/package.json", "!**/node_modules", "!**/var", - "!**/dist" + "!**/dist", + "!**/browsers" ] }, "linter": { diff --git a/package.json b/package.json index f5adc14317f..5cf8eb763e3 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "private": true, - "packageManager": "pnpm@10.13.1+sha512.37ebf1a5c7a30d5fabe0c5df44ee8da4c965ca0c5af3dbab28c3a1681b70a256218d05c81c9c0dcf767ef6b8551eb5b960042b9ed4300c59242336377e01cfad", + "packageManager": "pnpm@10.14.0+sha512.ad27a79641b49c3e481a16a805baa71817a04bbe06a38d17e60e2eaee83f6a146c6a688125f5792e48dd5ba30e7da52a5cda4c3992b9ccf333f9ce223af84748", "type": "module", "workspaces": [ "src/*/assets", @@ -8,21 +8,24 @@ ], "scripts": { "build": "pnpm run --filter @symfony/ux-map build && pnpm run -r --aggregate-output build", - "test": "pnpm run -r --aggregate-output test", + "test": "pnpm run -r --workspace-concurrency=1 test", + "test:unit": "pnpm run -r --aggregate-output test:unit", + "test:browser": "pnpm run -r --workspace-concurrency=1 test:browser", "check": "biome check", "ci": "biome ci" }, "devDependencies": { "@biomejs/biome": "^2.0.4", + "@puppeteer/browsers": "^2.10.6", "@testing-library/dom": "^10.4.0", "@testing-library/jest-dom": "^6.6.3", "@types/node": "^22.6.0", "lightningcss": "^1.28.2", "pkg-types": "^2.2.0", - "playwright": "^1.47.0", "tinyglobby": "^0.2.14", "tsup": "^8.5.0", - "vitest": "^3.2.4" + "vitest": "^3.2.4", + "webdriverio": "^9.19.1" }, "version": "2.27.0" } diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 12a333d71d9..5c154a62042 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -21,6 +21,9 @@ importers: '@biomejs/biome': specifier: ^2.0.4 version: 2.1.2 + '@puppeteer/browsers': + specifier: ^2.10.6 + version: 2.10.6 '@testing-library/dom': specifier: ^10.4.0 version: 10.4.0 @@ -36,9 +39,6 @@ importers: pkg-types: specifier: ^2.2.0 version: 2.2.0 - playwright: - specifier: ^1.47.0 - version: 1.54.1 tinyglobby: specifier: ^0.2.14 version: 0.2.14 @@ -48,6 +48,9 @@ importers: vitest: specifier: ^3.2.4 version: 3.2.4(@types/node@22.16.5)(@vitest/browser@3.2.4)(jsdom@26.1.0)(lightningcss@1.30.1)(msw@2.10.4(@types/node@22.16.5)(typescript@5.8.3))(terser@5.43.1) + webdriverio: + specifier: ^9.19.1 + version: 9.19.1 src/Autocomplete/assets: devDependencies: @@ -59,7 +62,7 @@ importers: version: 10.4.0 '@testing-library/jest-dom': specifier: ^6.6.3 - version: 6.6.3 + version: 6.7.0 '@testing-library/user-event': specifier: ^14.6.1 version: 14.6.1(@testing-library/dom@10.4.0) @@ -95,13 +98,13 @@ importers: version: 10.4.0 '@testing-library/jest-dom': specifier: ^6.6.3 - version: 6.6.3 + version: 6.7.0 '@testing-library/user-event': specifier: ^14.6.1 version: 14.6.1(@testing-library/dom@10.4.0) chart.js: specifier: ^3.4.1 || ^4.0 - version: 4.5.0 + version: 3.9.1 jsdom: specifier: ^26.1.0 version: 26.1.0 @@ -134,7 +137,7 @@ importers: version: 10.4.0 '@testing-library/jest-dom': specifier: ^6.6.3 - version: 6.6.3 + version: 6.7.0 '@testing-library/user-event': specifier: ^14.6.1 version: 14.6.1(@testing-library/dom@10.4.0) @@ -167,7 +170,7 @@ importers: version: 10.4.0 '@testing-library/jest-dom': specifier: ^6.6.3 - version: 6.6.3 + version: 6.7.0 '@testing-library/user-event': specifier: ^14.6.1 version: 14.6.1(@testing-library/dom@10.4.0) @@ -197,7 +200,7 @@ importers: version: 10.4.0 '@testing-library/jest-dom': specifier: ^6.6.3 - version: 6.6.3 + version: 6.7.0 '@testing-library/user-event': specifier: ^14.6.1 version: 14.6.1(@testing-library/dom@10.4.0) @@ -223,17 +226,17 @@ importers: specifier: ^3.0.0 version: 3.2.2 '@testing-library/dom': - specifier: ^7.31.0 - version: 7.31.2 + specifier: ^10.4.1 + version: 10.4.1 '@testing-library/jest-dom': specifier: ^6.6.3 - version: 6.6.3 + version: 6.7.0 '@testing-library/user-event': specifier: ^13.1.9 - version: 13.5.0(@testing-library/dom@7.31.2) + version: 13.5.0(@testing-library/dom@10.4.1) '@types/node-fetch': - specifier: ^2.6.2 - version: 2.6.12 + specifier: ^2.6.13 + version: 2.6.13 idiomorph: specifier: ^0.3.0 version: 0.3.0 @@ -266,7 +269,7 @@ importers: version: 10.4.0 '@testing-library/jest-dom': specifier: ^6.6.3 - version: 6.6.3 + version: 6.7.0 '@testing-library/user-event': specifier: ^14.6.1 version: 14.6.1(@testing-library/dom@10.4.0) @@ -303,7 +306,7 @@ importers: version: 10.4.0 '@testing-library/jest-dom': specifier: ^6.6.3 - version: 6.6.3 + version: 6.7.0 '@testing-library/user-event': specifier: ^14.6.1 version: 14.6.1(@testing-library/dom@10.4.0) @@ -312,7 +315,7 @@ importers: version: 3.58.1 '@vitest/browser': specifier: ^3.2.4 - version: 3.2.4(msw@2.10.4(@types/node@22.16.5)(typescript@5.8.3))(playwright@1.54.1)(vite@5.4.19(@types/node@22.16.5)(lightningcss@1.30.1)(terser@5.43.1))(vitest@3.2.4) + version: 3.2.4(msw@2.10.4(@types/node@22.16.5)(typescript@5.8.3))(playwright@1.54.2)(vite@5.4.19(@types/node@22.16.5)(lightningcss@1.30.1)(terser@5.43.1))(vitest@3.2.4)(webdriverio@9.19.1) jsdom: specifier: ^26.1.0 version: 26.1.0 @@ -343,7 +346,7 @@ importers: version: 10.4.0 '@testing-library/jest-dom': specifier: ^6.6.3 - version: 6.6.3 + version: 6.7.0 '@testing-library/user-event': specifier: ^14.6.1 version: 14.6.1(@testing-library/dom@10.4.0) @@ -352,7 +355,7 @@ importers: version: 1.9.20 '@vitest/browser': specifier: ^3.2.4 - version: 3.2.4(msw@2.10.4(@types/node@22.16.5)(typescript@5.8.3))(playwright@1.54.1)(vite@5.4.19(@types/node@22.16.5)(lightningcss@1.30.1)(terser@5.43.1))(vitest@3.2.4) + version: 3.2.4(msw@2.10.4(@types/node@22.16.5)(typescript@5.8.3))(playwright@1.54.2)(vite@5.4.19(@types/node@22.16.5)(lightningcss@1.30.1)(terser@5.43.1))(vitest@3.2.4)(webdriverio@9.19.1) jsdom: specifier: ^26.1.0 version: 26.1.0 @@ -382,7 +385,7 @@ importers: version: 10.4.0 '@testing-library/jest-dom': specifier: ^6.6.3 - version: 6.6.3 + version: 6.7.0 '@testing-library/user-event': specifier: ^14.6.1 version: 14.6.1(@testing-library/dom@10.4.0) @@ -412,7 +415,7 @@ importers: version: 10.4.0 '@testing-library/jest-dom': specifier: ^6.6.3 - version: 6.6.3 + version: 6.7.0 '@testing-library/user-event': specifier: ^14.6.1 version: 14.6.1(@testing-library/dom@10.4.0) @@ -464,7 +467,7 @@ importers: version: 10.4.0 '@testing-library/jest-dom': specifier: ^6.6.3 - version: 6.6.3 + version: 6.7.0 '@testing-library/user-event': specifier: ^14.6.1 version: 14.6.1(@testing-library/dom@10.4.0) @@ -497,7 +500,7 @@ importers: version: 10.4.0 '@testing-library/jest-dom': specifier: ^6.6.3 - version: 6.6.3 + version: 6.7.0 '@testing-library/user-event': specifier: ^14.6.1 version: 14.6.1(@testing-library/dom@10.4.0) @@ -545,7 +548,7 @@ importers: version: 10.4.0 '@testing-library/jest-dom': specifier: ^6.6.3 - version: 6.6.3 + version: 6.7.0 '@testing-library/user-event': specifier: ^14.6.1 version: 14.6.1(@testing-library/dom@10.4.0) @@ -578,7 +581,7 @@ importers: version: 10.4.0 '@testing-library/jest-dom': specifier: ^6.6.3 - version: 6.6.3 + version: 6.7.0 '@testing-library/user-event': specifier: ^14.6.1 version: 14.6.1(@testing-library/dom@10.4.0) @@ -605,7 +608,7 @@ importers: version: 10.4.0 '@testing-library/jest-dom': specifier: ^6.6.3 - version: 6.6.3 + version: 6.7.0 '@testing-library/user-event': specifier: ^14.6.1 version: 14.6.1(@testing-library/dom@10.4.0) @@ -641,7 +644,7 @@ importers: version: 10.4.0 '@testing-library/jest-dom': specifier: ^6.6.3 - version: 6.6.3 + version: 6.7.0 '@testing-library/user-event': specifier: ^14.6.1 version: 14.6.1(@testing-library/dom@10.4.0) @@ -674,7 +677,7 @@ importers: version: 10.4.0 '@testing-library/jest-dom': specifier: ^6.6.3 - version: 6.6.3 + version: 6.7.0 '@testing-library/user-event': specifier: ^14.6.1 version: 14.6.1(@testing-library/dom@10.4.0) @@ -707,7 +710,7 @@ importers: version: 10.4.0 '@testing-library/jest-dom': specifier: ^6.6.3 - version: 6.6.3 + version: 6.7.0 '@testing-library/user-event': specifier: ^14.6.1 version: 14.6.1(@testing-library/dom@10.4.0) @@ -819,10 +822,6 @@ packages: peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/runtime-corejs3@7.28.0': - resolution: {integrity: sha512-nlIXnSqLcBij8K8TtkxbBJgfzfvi75V1pAKSM7dUXejGw12vJAqez74jZrHTsJ3Z+Aczc5Q/6JgNjKRMsVU44g==} - engines: {node: '>=6.9.0'} - '@babel/runtime@7.27.6': resolution: {integrity: sha512-vbavdySgbTTrmFE+EsiqUTzlOr5bzlnJtUv9PynGCAKvfQqjIXbvFdumPM/GxMDfyuGMJaJAU6TO4zc1Jf1i8Q==} engines: {node: '>=6.9.0'} @@ -1288,10 +1287,6 @@ packages: resolution: {integrity: sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==} engines: {node: '>=12'} - '@jest/types@26.6.2': - resolution: {integrity: sha512-fC6QCp7Sc5sX6g8Tvbmj4XUTbyrik0akgRy03yjXbQaBWWNWGE7SGtJk98m0N8nzegD/7SggrUlivxo5ax4KWQ==} - engines: {node: '>= 10.14.2'} - '@jridgewell/gen-mapping@0.3.12': resolution: {integrity: sha512-OuLGC46TjB5BbN1dH8JULVVZY4WTdkF7tV9Ys6wLL1rubZnCMstOhNHueU5bLCrnRuDhKPDM4g6sw4Bel5Gzqg==} @@ -1308,9 +1303,6 @@ packages: '@jridgewell/trace-mapping@0.3.29': resolution: {integrity: sha512-uw6guiW/gcAGPDhLmd77/6lW8QLeiV5RUTsAX46Db6oLhGaVj4lhnPwb184s1bkc8kdVg/+h988dro8GRDpmYQ==} - '@kurkle/color@0.3.4': - resolution: {integrity: sha512-M5UknZPHRu3DEDWoipU6sE8PdkZ6Z/S+v4dD+Ke8IaNlpdSQah50lz1KtcFBa2vsdOnwbbnxJwVM4wty6udA5w==} - '@mswjs/interceptors@0.39.3': resolution: {integrity: sha512-9bw/wBL7pblsnOCIqvn1788S9o4h+cC5HWXg0Xhh0dOzsZ53IyfmBM+FYqpDDPbm0xjCqEqvCITloF3Dm4TXRQ==} engines: {node: '>=18'} @@ -1337,6 +1329,14 @@ packages: '@polka/url@1.0.0-next.29': resolution: {integrity: sha512-wwQAWhWSuHaag8c4q/KN/vCoeOJYshAIvMQwD4GpSb3OiZklFfvAgmj0VCBBImRpuF/aFgIRzllXlVX93Jevww==} + '@promptbook/utils@0.69.5': + resolution: {integrity: sha512-xm5Ti/Hp3o4xHrsK9Yy3MS6KbDxYbq485hDsFvxqaNA7equHLPdo8H8faTitTeb14QCDfLW4iwCxdVYu5sn6YQ==} + + '@puppeteer/browsers@2.10.6': + resolution: {integrity: sha512-pHUn6ZRt39bP3698HFQlu2ZHCkS/lPcpv7fVQcGBSzNNygw171UXAKrCUhy+TEMw4lEttOKDgNpb04hwUAJeiQ==} + engines: {node: '>=18'} + hasBin: true + '@rolldown/pluginutils@1.0.0-beta.27': resolution: {integrity: sha512-+d0F4MKMCbeVUJwG96uQ4SgAznZNSq93I3V+9NHA4OpvqG8mRCpGdKmK8l/dl02h2CCDHwW2FqilnTyDcAnqjA==} @@ -1491,14 +1491,18 @@ packages: resolution: {integrity: sha512-pemlzrSESWbdAloYml3bAJMEfNh1Z7EduzqPKprCH5S341frlpYnUEW0H72dLxa6IsYr+mPno20GiSm+h9dEdQ==} engines: {node: '>=18'} - '@testing-library/dom@7.31.2': - resolution: {integrity: sha512-3UqjCpey6HiTZT92vODYLPxTBWlM8ZOOjr3LX5F37/VRipW2M1kX6I/Cm4VXzteZqfGfagg8yXywpcOgQBlNsQ==} - engines: {node: '>=10'} + '@testing-library/dom@10.4.1': + resolution: {integrity: sha512-o4PXJQidqJl82ckFaXUeoAW+XysPLauYI43Abki5hABd853iMhitooc6znOnczgbTYmEP6U6/y1ZyKAIsvMKGg==} + engines: {node: '>=18'} '@testing-library/jest-dom@6.6.3': resolution: {integrity: sha512-IteBhl4XqYNkM54f4ejhLRJiZNqcSCoXUOG2CPK7qbD322KjQozM4kHQOfkG2oln9b9HTYqs+Sae8vBATubxxA==} engines: {node: '>=14', npm: '>=6', yarn: '>=1'} + '@testing-library/jest-dom@6.7.0': + resolution: {integrity: sha512-RI2e97YZ7MRa+vxP4UUnMuMFL2buSsf0ollxUbTgrbPLKhMn8KVTx7raS6DYjC7v1NDVrioOvaShxsguLNISCA==} + engines: {node: '>=14', npm: '>=6', yarn: '>=1'} + '@testing-library/user-event@13.5.0': resolution: {integrity: sha512-5Kwtbo3Y/NowpkbRuSepbyMFkZmHgD+vPzYB/RJ4oxt5Gj/avFFBYjhw27cqSVPVw/3a67NK1PbiIr9k4Gwmdg==} engines: {node: '>=10', npm: '>=6'} @@ -1511,8 +1515,8 @@ packages: peerDependencies: '@testing-library/dom': '>=7.21.4' - '@types/aria-query@4.2.2': - resolution: {integrity: sha512-HnYpAE1Y6kRyKM/XkEuiRQhTHvkzMBurTHnpFLYLBGPIylZNPs9jJcuOOYWxPLJCSEtmZT0Y8rHDokKN7rRTig==} + '@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==} @@ -1550,23 +1554,17 @@ packages: '@types/hotwired__turbo@8.0.4': resolution: {integrity: sha512-kgEKOms0taywPxPQvXUh90+G7M+phBHTiUw95Dosw0FU/we86iFerMfgBGcf3eQcAGs5pTNYnLMhiIlfRw/AfA==} - '@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/json-schema@7.0.15': resolution: {integrity: sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==} '@types/leaflet@1.9.20': resolution: {integrity: sha512-rooalPMlk61LCaLOvBF2VIf9M47HgMQqi5xQ9QRi7c8PkdIe0WrIi5IxXUXQjAdL0c+vcQ01mYWbthzmp9GHWw==} - '@types/node-fetch@2.6.12': - resolution: {integrity: sha512-8nneRWKCg3rMtF69nLQJnOYUcbafYeFSjqkw3jCRLsqkWFlHaoQrr5mXmofFGOx3DKn7UfmBMyov8ySvLRVldA==} + '@types/node-fetch@2.6.13': + resolution: {integrity: sha512-QGpRVpzSaUs30JBSGPjOg4Uveu384erbHBoT1zeONvyCfwQxIkUshLAOqN/k9EjGviPRmWTTe6aH2qySWKTVSw==} + + '@types/node@20.19.11': + resolution: {integrity: sha512-uug3FEEGv0r+jrecvUUpbY8lLisvIjg6AAic6a2bSP5OEOLeJsDSnvhCDov7ipFFMXS3orMpzlmi0ZcuGkBbow==} '@types/node@22.16.5': resolution: {integrity: sha512-bJFoMATwIGaxxx8VJPeM8TonI8t579oRvgAuT8zFugJsJZgzqv0Fu8Mhp68iecjzG7cnN3mO2dJQ5uUM2EFrgQ==} @@ -1582,6 +1580,9 @@ packages: '@types/react@18.3.23': resolution: {integrity: sha512-/LDXMQh55EzZQ0uVAZmKKhfENivEvWz6E+EYzh+/MCjMhNsotd+ZHhBGIjFDTi6+fz0OhQQQLbTgdQIxxCsC0w==} + '@types/sinonjs__fake-timers@8.1.5': + resolution: {integrity: sha512-mQkU2jY8jJEF7YHjHvsQO8+3ughTL1mcnn96igfhONmR+fUPSKIkefQYpSe8bsly2Ep7oQbn/6VG5/9/0qcArQ==} + '@types/statuses@2.0.6': resolution: {integrity: sha512-xMAgYwceFhRA2zY+XbEA7mxYbA093wdiW8Vu6gZPGWy9cmOyU9XesH1tNcEWsKFd5Vzrqx5T3D38PWx1FIIXkA==} @@ -1591,11 +1592,14 @@ packages: '@types/webpack-env@1.18.8': resolution: {integrity: sha512-G9eAoJRMLjcvN4I08wB5I7YofOb/kaJNd5uoCMX+LbKXTPCF+ZIHuqTnFaK9Jz1rgs035f9JUPUhNFtqgucy/A==} - '@types/yargs-parser@21.0.3': - resolution: {integrity: sha512-I4q9QU9MQv4oEOz4tAHJtNz1cwuLxn2F3xcc2iV5WdqLPpUnj30aUuxt1mAxYTG+oe8CZMV/+6rU4S4gRDzqtQ==} + '@types/which@2.0.2': + resolution: {integrity: sha512-113D3mDkZDjo+EeUEHCFy0qniNc1ZpecGiAU7WSo7YDoSzolZIQKpYFHrPpjkB2nuyahcKfrmLXeQlh7gqJYdw==} - '@types/yargs@15.0.19': - resolution: {integrity: sha512-2XUaGVmyQjgyAZldf0D0c14vvo/yv0MhQBSTJcejMMaitsn3nxCB6TmH4G0ZQf+uxROOa9mpanoSm8h6SG/1ZA==} + '@types/ws@8.18.1': + resolution: {integrity: sha512-ThVF6DCVhA8kUGy+aazFQ4kXQ7E1Ty7A3ypFOe0IcJV8O/M511G99AW24irKrW56Wt44yG9+ij8FaqoBGkuBXg==} + + '@types/yauzl@2.10.3': + resolution: {integrity: sha512-oJoftv0LSuaDZE3Le4DbKX+KS9G36NzOeSap90UIK0yMA/NhKJhqlSGtNDORNRaIbQfzjXDrQa0ytJ6mNRGz/Q==} '@vitejs/plugin-react@4.7.0': resolution: {integrity: sha512-gUu9hwfWvvEDBBmgtAowQCojwZmJ5mcLn3aufeCsitijs3+f2NsrPtlAWIR6OPiqljl96GVCUbLe0HyqIpVaoA==} @@ -1683,6 +1687,37 @@ packages: '@vue/shared@3.5.17': resolution: {integrity: sha512-CabR+UN630VnsJO/jHWYBC1YVXyMq94KKp6iF5MQgZJs5I8cmjw6oVMO1oDbtBkENSHSSn/UadWlW/OAgdmKrg==} + '@wdio/config@9.19.1': + resolution: {integrity: sha512-BeTB2paSjaij3cf1NXQzX9CZmdj5jz2/xdUhkJlCeGmGn1KjWu5BjMO+exuiy+zln7dOJjev8f0jlg8e8f1EbQ==} + engines: {node: '>=18.20.0'} + + '@wdio/logger@9.18.0': + resolution: {integrity: sha512-HdzDrRs+ywAqbXGKqe1i/bLtCv47plz4TvsHFH3j729OooT5VH38ctFn5aLXgECmiAKDkmH/A6kOq2Zh5DIxww==} + engines: {node: '>=18.20.0'} + + '@wdio/protocols@9.16.2': + resolution: {integrity: sha512-h3k97/lzmyw5MowqceAuY3HX/wGJojXHkiPXA3WlhGPCaa2h4+GovV2nJtRvknCKsE7UHA1xB5SWeI8MzloBew==} + + '@wdio/repl@9.16.2': + resolution: {integrity: sha512-FLTF0VL6+o5BSTCO7yLSXocm3kUnu31zYwzdsz4n9s5YWt83sCtzGZlZpt7TaTzb3jVUfxuHNQDTb8UMkCu0lQ==} + engines: {node: '>=18.20.0'} + + '@wdio/types@9.19.1': + resolution: {integrity: sha512-Q1HVcXiWMHp3ze2NN1BvpsfEh/j6GtAeMHhHW4p2IWUfRZlZqTfiJ+95LmkwXOG2gw9yndT8NkJigAz8v7WVYQ==} + engines: {node: '>=18.20.0'} + + '@wdio/utils@9.19.1': + resolution: {integrity: sha512-wWx5uPCgdZQxFIemAFVk/aa3JLwqrTsvEJsPlV3lCRpLeQ67V8aUPvvNAzE+RhX67qvelwwsvX8RrPdLDfnnYw==} + engines: {node: '>=18.20.0'} + + '@zip.js/zip.js@2.7.72': + resolution: {integrity: sha512-3/A4JwrgkvGBlCxtItjxs8HrNbuTAAl/zlGkV6tC5Fb5k5nk4x2Dqxwl/YnUys5Ch+QB01eJ8Q5K/J2uXfy9Vw==} + 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'} + acorn@8.15.0: resolution: {integrity: sha512-NZyJarBfL7nWwIq+FDL6Zp/yHEhePMNnnJ0y3qfieCrmNvYct8uvtiV41UvlSe6apAfk0fY1FbWx+NwfmpvtTg==} engines: {node: '>=0.4.0'} @@ -1735,9 +1770,13 @@ packages: any-promise@1.3.0: resolution: {integrity: sha512-7UvmKalWRt1wgjL1RrGxoSJW/0QZFIegpeGvZG9kjp8vrRu55XTHbwnqq2GpXm9uLbcuhxm3IqX9OB4MZR1b2A==} - aria-query@4.2.2: - resolution: {integrity: sha512-o/HelwhuKpTj/frsOsbNLNgnNGVIFsVP/SW2BSF14gVl7kAfMOJ6/8wUAUvG1R1NHKrfG+2sHZTu0yauT1qBrA==} - engines: {node: '>=6.0'} + 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==} @@ -1750,6 +1789,13 @@ packages: resolution: {integrity: sha512-Izi8RQcffqCeNVgFigKli1ssklIbpHnCYc6AknXGYoB6grJqyeby7jv12JUQgmTAnIDnbck1uxksT4dzN3PWBA==} engines: {node: '>=12'} + ast-types@0.13.4: + resolution: {integrity: sha512-x1FCFnFifvYDDzTaLII71vG5uvDwgtmDTEVWAxrgeiR8VjMONcCXJx7E+USjDtHlwFmt9MysbqgF9b9Vjr6w+w==} + engines: {node: '>=4'} + + async@3.2.6: + resolution: {integrity: sha512-htCUDlxyyCLMgaM3xXg0C0LW2xqfuQ6p05pCEIsXuyQ+a1koYKTuBMzRNwmybfLgvJDMd0r1LTn4+E0Ti6C2AA==} + asynckit@0.4.0: resolution: {integrity: sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==} @@ -1757,9 +1803,52 @@ packages: resolution: {integrity: sha512-qIj0G9wZbMGNLjLmg1PT6v2mE9AH2zlnADJD/2tC6E00hgmhUOfEB6greHPAfLRSufHqROIUTkw6E+M3lH0PTQ==} engines: {node: '>= 0.4'} + b4a@1.6.7: + resolution: {integrity: sha512-OnAYlL5b7LEkALw87fUVafQw5rVR9RjwGd4KUwNQ6DrrNmaVaUCgLipfVlzrPQ4tWOR9P0IXGNOx50jYCCdSJg==} + balanced-match@1.0.2: resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==} + bare-events@2.6.1: + resolution: {integrity: sha512-AuTJkq9XmE6Vk0FJVNq5QxETrSA/vKHarWVBG5l/JbdCL1prJemiyJqUS0jrlXO0MftuPq4m3YVYhoNc5+aE/g==} + + bare-fs@4.2.0: + resolution: {integrity: sha512-oRfrw7gwwBVAWx9S5zPMo2iiOjxyiZE12DmblmMQREgcogbNO0AFaZ+QBxxkEXiPspcpvO/Qtqn8LabUx4uYXg==} + 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.7.0: + resolution: {integrity: sha512-oyXQNicV1y8nc2aKffH+BUHFRXmx6VrPzlnaEvMhram0nPBrKcEdcyBg5r08D0i8VxngHFAiVyn1QKXpSG0B8A==} + 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'} + + boolbase@1.0.0: + resolution: {integrity: sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==} + brace-expansion@2.0.2: resolution: {integrity: sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==} @@ -1768,9 +1857,19 @@ packages: engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7} hasBin: true + 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-from@1.1.2: resolution: {integrity: sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==} + buffer@6.0.3: + resolution: {integrity: sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==} + bundle-require@5.1.0: resolution: {integrity: sha512-3WrrOuZiyaaZPWiEt4G3+IffISVC9HYlWueJEBWED4ZH4aIAC2PnkdnuRrR94M+w6yGWn4AglWtJtBI8YqvgoA==} engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} @@ -1804,14 +1903,20 @@ packages: resolution: {integrity: sha512-zgVZuo2WcZgfUEmsn6eO3kINexW8RAE4maiQ8QNs8CtpPCSyMiYsULR3HQYkm3w8FIA3SberyMJMSldGsW+U3w==} engines: {node: ^12.17.0 || ^14.13 || >=16.0.0} - chart.js@4.5.0: - resolution: {integrity: sha512-aYeC/jDgSEx8SHWZvANYMioYMZ2KX02W6f6uVfyteuCGcadDLcYVHdfdygsTQkQ4TKn5lghoojAsPj5pu0SnvQ==} - engines: {pnpm: '>=8'} + chart.js@3.9.1: + resolution: {integrity: sha512-Ro2JbLmvg83gXF5F4sniaQ+lTbSv18E+TIf2cOeiH1Iqd2PGFOtem+DUufMZsCJwFE7ywPOpfXFBwRTGq7dh6w==} 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.1.2: + resolution: {integrity: sha512-IkxPpb5rS/d1IiLbHMgfPuS0FgiWTtFIm/Nj+2woXDLTZ7fOT2eqzgYbdMlLweqlHbsZjxEChoVK+7iph7jyQg==} + engines: {node: '>=20.18.1'} + chokidar@4.0.3: resolution: {integrity: sha512-Qgzu8kfBvo+cA4962jnP1KkS6Dop5NS6g7R5LFYJr4b8Ub94PPQXUksCw9PvXoeXPRRddRNC5C1JQUR2SMGtnA==} engines: {node: '>= 14.16.0'} @@ -1845,6 +1950,14 @@ packages: resolution: {integrity: sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==} engines: {node: '>= 6'} + 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'} + confbox@0.1.8: resolution: {integrity: sha512-RMtmw0iFkeR4YV+fUOSucriAQNb9g8zFR52MWCtl+cCZOFRNL6zeB395vPzFhEjjn4fMxXudmELnl/KF/WrK6w==} @@ -1862,8 +1975,17 @@ packages: resolution: {integrity: sha512-yki5XnKuf750l50uGTllt6kKILY4nQ1eNIQatoXEByZ5dWgnKqbnqmTrBE5B4N7lrMJKQ2ytWMiTO2o0v6Ew/w==} engines: {node: '>= 0.6'} - core-js-pure@3.44.0: - resolution: {integrity: sha512-gvMQAGB4dfVUxpYD0k3Fq8J+n5bB6Ytl15lqlZrOIXFzxOhtPaObfkQGHtMRdyjIf7z2IeNULwi1jEwyS+ltKQ==} + 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'} cropperjs@1.6.2: resolution: {integrity: sha512-nhymn9GdnV3CqiEHJVai54TULFAE3VshJTXSqSJKa8yXAKyBKDWdhHarnlIPrshJ0WMFTGuFvG02YjLXfPiuOA==} @@ -1875,10 +1997,23 @@ packages: resolution: {integrity: sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==} engines: {node: '>= 8'} + css-select@5.2.2: + resolution: {integrity: sha512-TizTzUddG/xYLA3NXodFM0fSbNizXjOKhqiQQwvhlspadZokn1KDy0NZFS0wuEubIYAV5/c1/lAr0TaaFXEXzw==} + + css-shorthand-properties@1.1.2: + resolution: {integrity: sha512-C2AugXIpRGQTxaCW0N7n5jD/p5irUmCrwl03TrnMFBHDbdq44CFWR2zO7rK9xPN4Eo3pUxC4vQzQgbIpzrD1PQ==} + css-tree@2.3.1: resolution: {integrity: sha512-6Fv1DV/TYw//QF5IzQdqsNDjx/wc8TrMBZsqjL9eW01tWb7R7k/mq+/VXfJCl7SoD5emsJop9cOByJZfs8hYIw==} engines: {node: ^10 || ^12.20.0 || ^14.13.0 || >=15.0.0} + css-value@0.0.1: + resolution: {integrity: sha512-FUV3xaJ63buRLgHrLQVlVgQnQdR4yqdLGaDu7g8CQcWjInDfM9plBTPI9FRfpahju1UBSaMckeb2/46ApS/V1Q==} + + css-what@6.2.2: + resolution: {integrity: sha512-u/O3vwbptzhMs3L1fQE82ZSLHQQfto5gyZzwteVIEyeaY5Fc7R4dapF/BvRoSYFeqfBk4m0V1Vafq5Pjv25wvA==} + engines: {node: '>= 6'} + css.escape@1.5.1: resolution: {integrity: sha512-YUifsXXuknHlUsmlgyY0PKzgPOr7/FjCePfHNt0jxm83wHZi44VDMQ7/fGNkjY3/jV1MC+1CmZbaHzugyeRtpg==} @@ -1892,6 +2027,14 @@ packages: csstype@3.1.3: resolution: {integrity: sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==} + 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'} + data-urls@5.0.0: resolution: {integrity: sha512-ZYP5VBHshaDAiVZxjbRVcFJpc+4xGgT0bK3vzy1HLN8jTO975HEbuYzZJcHoQEY5K1a0z8YayJkyVETa08eNTg==} engines: {node: '>=18'} @@ -1905,6 +2048,10 @@ packages: supports-color: optional: true + decamelize@6.0.0: + resolution: {integrity: sha512-Fv96DCsdOgB6mdGl67MT5JaTNKRzrzill5OH5s8bjYJXVlcXyPYGyPsUkWyGV5p1TXI5esYIYMMeDJL0hEIwaA==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + decimal.js@10.6.0: resolution: {integrity: sha512-YpgQiITW3JXGntzdUmyUR1V812Hn8T1YVXhCu+wO3OpS4eU9l4YdD3qjyiKdV6mvV29zapkMeD390UVEf2lkUg==} @@ -1912,10 +2059,18 @@ packages: 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'} + deepmerge@4.3.1: resolution: {integrity: sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==} engines: {node: '>=0.10.0'} + degenerator@5.0.1: + resolution: {integrity: sha512-TllpMR/t0M5sqCXfj85i4XaAzxmS5tVA16dqvdkMwGmzI+dXLXnw3J+3Vdv7VKw+ThlTMboK6i9rnZ6Nntj5CQ==} + engines: {node: '>= 14'} + delayed-stream@1.0.0: resolution: {integrity: sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==} engines: {node: '>=0.4.0'} @@ -1937,6 +2092,19 @@ packages: dom-accessibility-api@0.6.3: resolution: {integrity: sha512-7ZgogeTnjuHbo+ct10G9Ffp0mif17idi0IyWNVA/wcwcm7NPOD/WEHVP3n7n3MhXqxoIYm8d6MuZohYWIZ4T3w==} + 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==} + dunder-proto@1.0.1: resolution: {integrity: sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==} engines: {node: '>= 0.4'} @@ -1944,6 +2112,15 @@ packages: 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.2: + resolution: {integrity: sha512-UvFqd/IR81iPyWMcxXbUNi+xKWR7JjfoHjfuwjqsj9UHQKn80RpQmS0jf+U25IPi+gKVPcpOSKm0XkqgGMq4zQ==} + engines: {node: '>=18.0.0'} + hasBin: true + electron-to-chromium@1.5.187: resolution: {integrity: sha512-cl5Jc9I0KGUoOoSbxvTywTa40uspGJt/BDBoDLoxJRSBpWh4FFXBsjNRHfQrONsV/OoEjDfHUmZQa2d6Ze4YgA==} @@ -1953,6 +2130,12 @@ packages: emoji-regex@9.2.2: resolution: {integrity: sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==} + encoding-sniffer@0.2.1: + resolution: {integrity: sha512-5gvq20T6vfpekVtqrYQsSCFZ1wEg5+wW0/QaZMWkFr6BqD3NfKs0rLCx4rrVlSWJeZb5NBJgVLswK/w2MWU+Gw==} + + end-of-stream@1.4.5: + resolution: {integrity: sha512-ooEGc6HP26xXq/N+GCGOT0JKCLDGrq2bQUZrQ7gyrJiZANJ/8YDTxTpQBXGMn+WbIQXNVpyWymm7KYVICQnyOg==} + entities@4.5.0: resolution: {integrity: sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==} engines: {node: '>=0.12'} @@ -1994,12 +2177,38 @@ packages: resolution: {integrity: sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==} engines: {node: '>=6'} + 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@2.0.2: resolution: {integrity: sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==} 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'} + expect-type@1.2.2: resolution: {integrity: sha512-JhFGDVJ7tmDJItKhYgJCGLOWjuK9vPxiXoUFLwLDc99NlmklilbiQJwoctZtt13+xMw91MCk/REan6MWHqDjyA==} engines: {node: '>=12.0.0'} @@ -2007,12 +2216,30 @@ packages: exsolve@1.0.7: resolution: {integrity: sha512-VO5fQUzZtI6C+vx4w/4BWJpg3s/5l+6pRQEHzFRM8WFi4XffSP1Z+4qi7GbjWbvRQEbdIco5mIMq+zX4rPuLrw==} + 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-deep-equal@3.1.3: resolution: {integrity: sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==} + fast-fifo@1.3.2: + resolution: {integrity: sha512-/d9sfos4yxzpwkDkuN7k2SqFKtYNmCTzgfEpz82x34IM9/zc8KGxQoXg1liNC/izpRM/MBdt44Nmx41ZWqk+FQ==} + fast-uri@3.0.6: resolution: {integrity: sha512-Atfo14OibSv5wAp4VWNsFYE1AchQRTv9cBGWET4pZWHzYshFSS9NQI6I57rdKn9croWVMbYFbLhJ+yJvmZIIHw==} + fast-xml-parser@5.2.5: + resolution: {integrity: sha512-pfX9uG9Ki0yekDHx2SiuRIyFdyAr1kMIMitPvb0YBo8SUfKvia7w7FIyd/l6av85pFYRhZscS75MwMnbvY+hcQ==} + hasBin: true + + fd-slicer@1.1.0: + resolution: {integrity: sha512-cE1qsB/VwyQozZ+q1dGxR8LBYNZeofhEdUNGSMbQD3Gw2lAzX9Zb3uIU6Ebc/Fmyjo9AWWfnn0AUCHqtevs/8g==} + fdir@6.4.6: resolution: {integrity: sha512-hiFoqpyZcfNm1yc4u8oWCf9A2c4D3QjCrks3zmoVKVxpQRzmPNar1hUJcBG2RQHvEVGDN+Jm81ZheVLAQMK6+w==} peerDependencies: @@ -2021,6 +2248,10 @@ packages: picomatch: optional: true + fetch-blob@3.2.0: + resolution: {integrity: sha512-7yAQpD2UMJzLi1Dqv7qFYnPbaPx7ZfFK6PiIxQ4PfkGPyNyl2Ugx+a/umUonmKqjhM4DnfbMvdX6otXq83soQQ==} + engines: {node: ^12.20 || >= 14.13} + fix-dts-default-cjs-exports@1.0.1: resolution: {integrity: sha512-pVIECanWFC61Hzl2+oOCtoJ3F17kglZC/6N94eRWycFgBH35hHx0Li604ZIzhseh97mf2p0cv7vVrOZGoqhlEg==} @@ -2032,6 +2263,10 @@ packages: resolution: {integrity: sha512-KrGhL9Q4zjj0kiUt5OO4Mr/A/jlI2jDYs5eHBpYHPcBEVSiipAvn2Ko2HnPe20rmcuuvMHNdZFp+4IlGTMF0Ow==} engines: {node: '>= 6'} + 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} @@ -2045,6 +2280,11 @@ packages: function-bind@1.1.2: resolution: {integrity: sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==} + geckodriver@5.0.0: + resolution: {integrity: sha512-vn7TtQ3b9VMJtVXsyWtQQl1fyBVFhQy7UvJF96kPuuJ0or5THH496AD3eUyaDD11+EqCxH9t6V+EP9soZQk4YQ==} + engines: {node: '>=18.0.0'} + hasBin: true + gensync@1.0.0-beta.2: resolution: {integrity: sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==} engines: {node: '>=6.9.0'} @@ -2057,13 +2297,25 @@ packages: resolution: {integrity: sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ==} engines: {node: '>= 0.4'} + get-port@7.1.0: + resolution: {integrity: sha512-QB9NKEeDg3xxVwCCwJQ9+xycaz6pBB6iQ76wiWMl1927n0Kir6alPiP+yuiICLLU4jpMe08dXfpebuQppFA2zw==} + engines: {node: '>=16'} + get-proto@1.0.1: resolution: {integrity: sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g==} engines: {node: '>= 0.4'} + get-stream@5.2.0: + resolution: {integrity: sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==} + engines: {node: '>=8'} + get-tsconfig@4.10.1: resolution: {integrity: sha512-auHyJ4AgMz7vgS8Hp3N6HXSmlMdUyhSUrfBF16w153rxtLIEOE+HGqaBppczZvnHLqQJfiHotCYpNhl0lUROFQ==} + get-uri@6.0.5: + resolution: {integrity: sha512-b1O07XYq8eRuVzBNgJLstU6FYc1tS6wnMtF1I1D9lE8LxZSOGZ7LhxN54yPP6mGw5f2CkXY2BQUL9Fx41qvcIg==} + engines: {node: '>= 14'} + glob@10.4.5: resolution: {integrity: sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg==} hasBin: true @@ -2072,6 +2324,12 @@ packages: resolution: {integrity: sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==} engines: {node: '>= 0.4'} + 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.11.0: resolution: {integrity: sha512-mS1lbMsxgQj6hge1XZ6p7GPhbrtFwUFYi3wRzXAC/FmYnyXMTvvI3td3rjmQ2u8ewXueaSvRPWaEcgVVOT9Jnw==} engines: {node: ^12.22.0 || ^14.16.0 || ^16.0.0 || >=17.0.0} @@ -2099,6 +2357,12 @@ packages: resolution: {integrity: sha512-Y22oTqIU4uuPgEemfz7NDJz6OeKf12Lsu+QC+s3BVpda64lTiMYCyGwg5ki4vFxkMwQdeZDl2adZoqUgdFuTgQ==} engines: {node: '>=18'} + htmlfy@0.8.1: + resolution: {integrity: sha512-xWROBw9+MEGwxpotll0h672KCaLrKKiCYzsyN8ZgL9cQbVumFnyvsk2JqiB9ELAV1GLj1GG/jxZUjV9OZZi/yQ==} + + htmlparser2@10.0.0: + resolution: {integrity: sha512-TwAZM+zE5Tq3lrEHvOlvwgj1XLWQCtaaibSN11Q+gGBAS7Y1uZSWwXXRe4iF6OXnaq1riyQAPFOBtYc77Mxq0g==} + http-proxy-agent@7.0.2: resolution: {integrity: sha512-T1gkAiYYDWYx3V5Bmyu7HcfcvL7mUrTWiM6yOfa3PIphViJ/gFPbvidQ+veqSOHci/PxBcDabeUNCzpOODJZig==} engines: {node: '>= 14'} @@ -2114,13 +2378,29 @@ packages: idiomorph@0.3.0: resolution: {integrity: sha512-UhV1Ey5xCxIwR9B+OgIjQa+1Jx99XQ1vQHUsKBU1RpQzCx1u+b+N6SOXgf5mEJDqemUI/ffccu6+71l2mJUsRA==} + 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==} + indent-string@4.0.0: resolution: {integrity: sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==} engines: {node: '>=8'} + inherits@2.0.4: + resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==} + intl-messageformat@10.7.16: resolution: {integrity: sha512-UmdmHUmp5CIKKjSoE10la5yfU+AYJAaiYLsodbjL4lji83JNvgOQUjGaGhGrpFCb0Uh7sl7qfP1IyILa8Z40ug==} + ip-address@10.0.1: + resolution: {integrity: sha512-NWv9YLW4PoW2B7xtzaS3NCot75m6nK7Icdv0o3lfMceJVRfSoQwqD4wEH5rLwoKJwUiZ/rfpiVBhnaF0FK4HoA==} + engines: {node: '>= 12'} + is-fullwidth-code-point@3.0.0: resolution: {integrity: sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==} engines: {node: '>=8'} @@ -2128,15 +2408,30 @@ packages: is-node-process@1.2.0: resolution: {integrity: sha512-Vg4o6/fqPxIjtxgUH5QLJhwZ7gW5diGCVlXpuUfELC62CuxM1iHcRe51f2W1FDy04Ai4KJkagKjx3XaqyfRKXw==} + is-plain-obj@4.1.0: + resolution: {integrity: sha512-+Pgi+vMuUNkJyExiMBt5IlFoMyKnr5zhJ4Uspz58WOhBF5QoIZkFyNHIbBAtHwzVAgk5RtndVNsDRN61/mmDqg==} + engines: {node: '>=12'} + is-potential-custom-element-name@1.0.1: resolution: {integrity: sha512-bCYeRA2rVibKZd+s2625gGnGF/t7DSqDs4dP7CrLA1m7jKWz6pps0LpYLJN8Q64HtmPKJ1hrN3nzPNKFEKOUiQ==} is-reference@3.0.3: resolution: {integrity: sha512-ixkJoqQvAP88E6wLydLGGqCJsrFUnqoH6HnaczB8XmDH1oaWU+xxdptvikTgaEhtZ53Ky6YXiBuUI2WXLMCwjw==} + is-stream@2.0.1: + resolution: {integrity: sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==} + engines: {node: '>=8'} + + 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'} + jackspeak@3.4.3: resolution: {integrity: sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw==} @@ -2175,13 +2470,23 @@ packages: engines: {node: '>=6'} hasBin: true + jszip@3.10.1: + resolution: {integrity: sha512-xXDvecyTpGLrqFrvkrUSoxxfJI5AH7U8zxxtVclpsUtMCq4JQ290LY8AW5c7Ggnr/Y/oK+bQMbqK2qmtk3pN4g==} + kleur@4.1.5: resolution: {integrity: sha512-o+NO+8WrRiQEE4/7nwRJhN1HWpVmJm511pBHUxPLtp0BUISzlBplORYSmTclCnJvQq2tKu/sgl3xVpkc7ZWuQQ==} engines: {node: '>=6'} + lazystream@1.0.1: + resolution: {integrity: sha512-b94GiNHQNy6JNTrt5w6zNyffMrNkXZb3KTkCZJb2V1xaEGCk093vkZ2jk3tpaeP33/OiXC+WvK9AxUebnf5nbw==} + engines: {node: '>= 0.6.3'} + leaflet@1.9.4: resolution: {integrity: sha512-nxS1ynzJOmOlHp+iL3FyWqK89GtNL8U8rvlMOsQdTTssxZwCXh8N2NB3GDQOL+YR3XnWyZAxwQixURb+FA74PA==} + lie@3.3.0: + resolution: {integrity: sha512-UaiMJzeWRlEujzAuw5LokY1L5ecNQYZKfmyZ9L7wDHb/p5etKaxXhohBcrw0EYby+G/NA52vRSN4N39dxHAIwQ==} + lightningcss-darwin-arm64@1.30.1: resolution: {integrity: sha512-c8JK7hyE65X1MHMN+Viq9n11RRC7hgin3HhYKhrMyaXflk5GVplZ60IxyoVtzILeKr+xAJwg6zK6sjTBJ0FKYQ==} engines: {node: '>= 12.0.0'} @@ -2261,15 +2566,31 @@ packages: resolution: {integrity: sha512-FMJTLMXfCLMLfJxcX9PFqX5qD88Z5MRGaZCVzfuqeZSPsyiBzs+pahDQjbIWz2QIzPZz0NX9Zy4FX3lmK6YHIg==} engines: {node: '>= 12.13.0'} + locate-app@2.5.0: + resolution: {integrity: sha512-xIqbzPMBYArJRmPGUZD9CzV9wOqmVtQnaAn3wrj3s6WYW0bQvPI7x+sPYUGmDTYMHefVK//zc6HEYZ1qnxIK+Q==} + locate-character@3.0.0: resolution: {integrity: sha512-SW13ws7BjaeJ6p7Q6CO2nchbYEc3X3J6WrmTTDto7yMPqVSZTUyY5Tjbid+Ab8gLnATtygYtiDIJGQRRn2ZOiA==} + lodash.clonedeep@4.5.0: + resolution: {integrity: sha512-H5ZhCF25riFd9uB5UCkVKo61m3S/xZk1x4wA6yp/L3RFP6Z/eHH1ymQcGLo7J3GMPfm0V/7m1tryHuGVxpqEBQ==} + lodash.sortby@4.7.0: resolution: {integrity: sha512-HDWXG8isMntAyRF5vZ7xKuEvOhT4AhlRt/3czTSjvGUxjYCBVRQY48ViDHyfYz9VIoBkW4TMGQNapx+l3RUwdA==} + 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'} + loose-envify@1.4.0: resolution: {integrity: sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==} hasBin: true @@ -2283,6 +2604,10 @@ packages: lru-cache@5.1.1: resolution: {integrity: sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==} + 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 @@ -2309,6 +2634,10 @@ packages: resolution: {integrity: sha512-I9jwMn07Sy/IwOj3zVkVik2JTvgpaykDZEigL6Rx6N9LbMywwUSMtxET+7lVoDLLd3O3IXwJwvuuns8UB/HeAg==} engines: {node: '>=4'} + 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'} @@ -2317,6 +2646,9 @@ packages: resolution: {integrity: sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==} engines: {node: '>=16 || 14 >=14.17'} + mitt@3.0.1: + resolution: {integrity: sha512-vKivATfr97l2/QBCYAkXYDbrIWPM2IIKEl7YPhjCvKlG3kE2gm+uBo6nEXK3M5/Ffh/FLpKExzOQ3JJoJGFKBw==} + mlly@1.7.4: resolution: {integrity: sha512-qmdSIPC4bDJXgZTCR7XosJiNKySV7O215tsPtDN9iEO/7q/76b/ijtgRu/+epFXSJhijtTCCGp3DWS549P3xKw==} @@ -2352,6 +2684,15 @@ packages: 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'} + deprecated: Use your platform's native DOMException instead + node-fetch@2.7.0: resolution: {integrity: sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A==} engines: {node: 4.x || >=6.0.0} @@ -2361,9 +2702,20 @@ packages: encoding: optional: true + node-fetch@3.3.2: + resolution: {integrity: sha512-dRB78srN/l6gqWulah9SrxeYnxeddIG30+GOqK/9OlLVyLg3HPnr6SqOWTWOXKRwC2eGYCkZ59NNuSgvSrpgOA==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + node-releases@2.0.19: resolution: {integrity: sha512-xxOWJsBKtzAq7DY0J+DTzuz58K8e7sJbdgwkbMWQe8UYB6ekmsQ45q0M/tJDsGaZmbC+l7n57UV8Hl5tHxO9uw==} + normalize-path@3.0.0: + resolution: {integrity: sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==} + engines: {node: '>=0.10.0'} + + nth-check@2.1.1: + resolution: {integrity: sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w==} + nwsapi@2.2.20: resolution: {integrity: sha512-/ieB+mDe4MrrKMT8z+mQL8klXydZWGR5Dowt4RAGKbJ3kIGEx3X4ljUo+6V73IXtUPWgfOlU5B9MlGxFO5T+cA==} @@ -2371,6 +2723,9 @@ packages: resolution: {integrity: sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==} engines: {node: '>=0.10.0'} + once@1.4.0: + resolution: {integrity: sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==} + opencollective-postinstall@2.0.3: resolution: {integrity: sha512-8AV/sCtuzUeTo8gQK5qDZzARrulB3egtLzFgteqB2tcT4Mw7B8Kt7JcDHmltjz6FOAHsvTevk70gZEbhM4ZS9Q==} hasBin: true @@ -2378,9 +2733,26 @@ packages: outvariant@1.4.3: resolution: {integrity: sha512-+Sl2UErvtsoajRDKCE5/dBz4DIvHXQQnAxtQTF04OJxY0+DyZXSo5P5Bb7XYWOh81syohlYL24hbDwxedPUJCA==} + 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==} + + 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.3.0: resolution: {integrity: sha512-IInvU7fabl34qmi9gY8XOVxhYyMyuH2xUNpb2q8/Y+7552KlejkRvqvD19nMoUW/uQGGbqNpA6Tufu5FL5BZgw==} @@ -2402,6 +2774,9 @@ packages: resolution: {integrity: sha512-//nshmD55c46FuFw26xV/xFAaB5HF9Xdap7HJBBnrKdAd6/GxDBaNA1870O79+9ueg61cZLSVc+OaFlfmObYVQ==} engines: {node: '>= 14.16'} + pend@1.2.0: + resolution: {integrity: sha512-F3asv42UuXchdzt+xXqfW1OGlVBe+mxa2mqI0pg5yAHZPvFmY3Y6drSf/GQ1A86WgWEN9Kzh/WrgKa6iGcHXLg==} + periscopic@3.1.0: resolution: {integrity: sha512-vKiQ8RRtkl9P+r/+oefh25C3fhybptkHKCZSPlcXiJux2tJF55GnEj3BVn4A5gKfq9NWWXXrxkHBwVPUfH0opw==} @@ -2422,13 +2797,13 @@ packages: pkg-types@2.2.0: resolution: {integrity: sha512-2SM/GZGAEkPp3KWORxQZns4M+WSeXbC2HEvmOIJe3Cmiv6ieAJvdVhDldtHqM5J1Y7MrR1XhkBT/rMlhh9FdqQ==} - playwright-core@1.54.1: - resolution: {integrity: sha512-Nbjs2zjj0htNhzgiy5wu+3w09YetDx5pkrpI/kZotDlDUaYk0HVA5xrBVPdow4SAUIlhgKcJeJg4GRKW6xHusA==} + playwright-core@1.54.2: + resolution: {integrity: sha512-n5r4HFbMmWsB4twG7tJLDN9gmBUeSPcsBZiWSE4DnYz9mJMAFqr2ID7+eGC9kpEnxExJ1epttwR59LEWCk8mtA==} engines: {node: '>=18'} hasBin: true - playwright@1.54.1: - resolution: {integrity: sha512-peWpSwIBmSLi6aW2auvrUtf2DqY16YYcCMO8rTVx486jKmDTJg7UAhyrraP98GB8BoPURZP8+nxO7TSd4cPr5g==} + playwright@1.54.2: + resolution: {integrity: sha512-Hu/BMoA1NAdRUuulyvQC0pEqZ4vQbGfn8f7wPXcnqQmM+zct9UliKxsIkLNmz/ku7LElUNqmaiv1TG/aL5ACsw==} engines: {node: '>=18'} hasBin: true @@ -2454,21 +2829,41 @@ packages: resolution: {integrity: sha512-3Ybi1tAuwAP9s0r1UQ2J4n5Y0G05bJkpUIO0/bI9MhwmD70S5aTWbXGBwxHrelT+XM1k6dM0pk+SwNkpTRN7Pg==} engines: {node: ^10 || ^12 || >=14} - pretty-format@26.6.2: - resolution: {integrity: sha512-7AeGuCYNGmycyQbCqd/3PWH4eOoX/OiCa0uphp57NVTeAGdJGaAliecxwBDHYQCIvrW7aDBZCYeNTP/WX69mkg==} - engines: {node: '>= 10'} - 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} + 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.3: + resolution: {integrity: sha512-todwxLMY7/heScKmntwQG8CXVkWUOdYxIvY2s0VWAAMh/nd8SoYiRaKjlr7+iCs984f2P8zvrfWcDDYVb73NfA==} + 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==} @@ -2488,6 +2883,16 @@ packages: resolution: {integrity: sha512-wS+hAgJShR0KhEvPJArfuPVN1+Hz1t0Y6n5jLrGQbkb4urgPE/0Rve+1kMB1v/oWgHgm4WIcV+i7F2pTVj+2iQ==} engines: {node: '>=0.10.0'} + 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'} @@ -2517,6 +2922,16 @@ packages: resolve-pkg-maps@1.0.0: resolution: {integrity: sha512-seS2Tj26TBVOC2NIc2rOe2y2ZO7efxITtLZcGSOnHHNOQ7CkiUBfw0Iw2ck6xkIhPwLhKNLS8BO+hEpngQlqzw==} + resq@1.11.0: + resolution: {integrity: sha512-G10EBz+zAAy3zUd/CDoBbXRL6ia9kOo3xRHrMDsHljI0GDkhYlyjwoCx5+3eCC4swi1uCoZQhskuJkj7Gp57Bw==} + + ret@0.5.0: + resolution: {integrity: sha512-I1XxrZSQ+oErkRR4jYbAyEEu2I0avBvvMM5JN+6EBprOGRCs63ENqZ3vjavq8fBw2+62G5LF5XelKwuJpcvcxw==} + engines: {node: '>=10'} + + rgb2hex@0.2.5: + resolution: {integrity: sha512-22MOP1Rh7sAo1BZpDG6R5RFYzR2lYEgwq7HEmyW2qcsOqR2lQKmn+O//xV3YG/0rrhMC6KVX2hU+ZXuaw9a5bw==} + rollup@4.45.1: resolution: {integrity: sha512-4iya7Jb76fVpQyLoiVpzUrsjQ12r3dM7fIVz+4NwoYvZOShknRmiv+iu9CClZml5ZLGb0XMcYLutK6w9tgxHDw==} engines: {node: '>=18.0.0', npm: '>=8.0.0'} @@ -2525,6 +2940,19 @@ packages: rrweb-cssom@0.8.0: resolution: {integrity: sha512-guoltQEx+9aMf2gDZ0s62EcV8lsXR+0w8915TC3ITdn2YueuNjdAYh/levpU9nFaoChh9RUS5ZdQMrKfVEN9tw==} + 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==} + + safe-regex2@5.0.0: + resolution: {integrity: sha512-YwJwe5a51WlK7KbOJREPdjNrpViQBI3p4T50lfwPuDhZnE3XGVTlGvi+aolc5+RvxDD6bnUmjVsU9n1eboLUYw==} + safer-buffer@2.1.2: resolution: {integrity: sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==} @@ -2543,6 +2971,18 @@ packages: resolution: {integrity: sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==} hasBin: true + semver@7.7.2: + resolution: {integrity: sha512-RF0Fw+rO5AMf9MAyaRXI4AV0Ulj5lMHqVxxdSgiVbixSCXoEmmX/jk0CuJw4+3SqroYO9VoUh+HcuJivvtJemA==} + engines: {node: '>=10'} + hasBin: true + + serialize-error@12.0.0: + resolution: {integrity: sha512-ZYkZLAvKTKQXWuh5XpBw7CdbSzagarX39WyZ2H07CDLC5/KfsRGlIXV8d4+tfqX1M7916mRqR1QfNHSij+c9Pw==} + engines: {node: '>=18'} + + 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'} @@ -2562,6 +3002,18 @@ packages: resolution: {integrity: sha512-FoqMu0NCGBLCcAkS1qA+XJIQTR6/JHfQXl+uGteNCQ76T91DMUjPa9xfmeqMY3z80nLSg9yQmNjK0Px6RWsH/A==} engines: {node: '>=18'} + 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.7: + resolution: {integrity: sha512-HLpt+uLy/pxB+bum/9DzAgiKS8CX1EvbWxI4zlmgGCExImLdiad2iCwXT5Z4c9c3Eq8rP2318mPW2c+QbtjK8A==} + 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'} @@ -2576,6 +3028,14 @@ packages: source-map@0.8.0-beta.0: resolution: {integrity: sha512-2ymg6oRBpebeZi9UUNsgQ89bhx01TcTkmNTGnNO88imTmbSgy4nfujrgVEFKWpMTEGA11EDkTt7mqObTPdigIA==} engines: {node: '>= 8'} + deprecated: The work that was done in this beta branch won't be included in future versions + + spacetrim@0.11.59: + resolution: {integrity: sha512-lLYsktklSRKprreOm7NXReW8YiX2VBjbgmXYEziOoGf/qsJqAEACaDvoTtUOycwjpaSh+bT8eu0KrJn7UNxiCg==} + + split2@4.2.0: + resolution: {integrity: sha512-UcjcJOWknrNkF6PLX83qcHM6KHgVKNkV62Y8a5uYDVv9ydGQVwAHMKqHdJje1VTWpljG0WYpCDhrCdAOYH4TWg==} + engines: {node: '>= 10.x'} stackback@0.0.2: resolution: {integrity: sha512-1XMJE5fQo1jGH6Y/7ebnwPOBEkIEnT4QF32d5R1+VXdXveM0IBMJt8zfaxX1P3QhVwrYe+576+jkANtSS2mBbw==} @@ -2587,6 +3047,9 @@ packages: std-env@3.9.0: resolution: {integrity: sha512-UGvjygr6F6tpH7o2qyqR6QYpwraIjKSdtzyBdyytFOHmPZY917kwdwLG0RbOjWOnKmnm3PeHjaoLLMie7kPLQw==} + streamx@2.22.1: + resolution: {integrity: sha512-znKXEBxfatz2GBNK02kRnCXjV+AA4kjZIUxeWSr3UGirZMJfTE9uiwKHobnbgxWyL/JWro8tTq+vOqAK1/qbSA==} + strict-event-emitter@0.5.1: resolution: {integrity: sha512-vMgjE/GGEPEFnhFub6pa4FmJBRBVOLpIII2hvCZ8Kzb7K0hlHo7mQv6xYrBvCL2LtAIBwFUK8wvuJgTVSQ5MFQ==} @@ -2598,6 +3061,12 @@ packages: 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'} @@ -2613,6 +3082,9 @@ packages: strip-literal@3.0.0: resolution: {integrity: sha512-TcccoMhJOM3OebGhSBEmp3UZ2SfDMZUEBdRA/9ynfLi8yYajyWX3JiXArcJt4Umh4vISpspkQIY8ZZoCqjbviA==} + strnum@2.1.1: + resolution: {integrity: sha512-7ZvoFTiCnGxBtDqJ//Cu6fWtZtc7Y3x+QOirG15wztbdngGSkht27o2pyGWrVy0b4WAy3jbKmnoK6g5VlVNUUw==} + sucrase@3.35.0: resolution: {integrity: sha512-8EbVDiu9iN/nESwxeSxDKe0dunta1GOlHufmSSXxMD2z2/tMZpDMpvXQGsc+ajGo8y2uYUmixaSRUc/QPoQ0GA==} engines: {node: '>=16 || 14 >=14.17'} @@ -2638,11 +3110,20 @@ packages: symbol-tree@3.2.4: resolution: {integrity: sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw==} + tar-fs@3.1.0: + resolution: {integrity: sha512-5Mty5y/sOF1YWj1J6GiBodjlDc05CUR8PKXrsnFAiSG0xA+GHeWLovaZPYUDXkH/1iKRf2+M5+OrRgzC7O9b7w==} + + tar-stream@3.1.7: + resolution: {integrity: sha512-qJj60CXt7IU1Ffyc3NJMjh6EkuCFej46zUqJ4J7pqYlThyd9bO0XBTmcOIhSzZJVWfsLks0+nle/j538YAW9RQ==} + terser@5.43.1: resolution: {integrity: sha512-+6erLbBm0+LROX2sPXlUYx/ux5PyE9K/a92Wrt6oA+WDAoFTdpHE5tCYCI5PNzq2y8df4rA+QgHLJuR4jNymsg==} engines: {node: '>=10'} hasBin: true + text-decoder@1.2.3: + resolution: {integrity: sha512-3/o9z3X0X0fTupwsYvR03pJ/DjWuqqrfwBgTQzdWDiQSm9KitAyz/9WqsT2JQW7KV2m+bC2ol/zqpW37NHxLaA==} + thenify-all@1.6.0: resolution: {integrity: sha512-RNxQH/qI8/t3thXJDwcstUO4zeqo64+Uy/+sNVRBx4Xn2OX+OZ9oP+iJnNFqplFra2ZUVeKCSa2oVWi3T4uVmA==} engines: {node: '>=0.8'} @@ -2742,6 +3223,10 @@ packages: resolution: {integrity: sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==} engines: {node: '>=10'} + type-fest@4.26.0: + resolution: {integrity: sha512-OduNjVJsFbifKb57UqZ2EMP1i4u64Xwow3NYXUtBbD4vIwJdQd4+xl8YDou1dlm4DVrtwT/7Ky8z8WyCULVfxw==} + engines: {node: '>=16'} + type-fest@4.41.0: resolution: {integrity: sha512-TeTSQ6H5YHvpqVwBRcnLDCBnDOHWYu7IvGbHT6N8AOymcr9PJGjc1GTtiWZTYg0NCgYwvnYWEkVChQAr9bjfwA==} engines: {node: '>=16'} @@ -2763,6 +3248,14 @@ packages: undici-types@6.21.0: resolution: {integrity: sha512-iwDZqg0QAGrg9Rav5H4n0M64c3mkR59cJ6wQp+7C4nI0gsmExaedaYLNO44eT4AtBBwjbTiGPMlt2Md0T9H9JQ==} + undici@6.21.3: + resolution: {integrity: sha512-gBLkYIlEnSp8pFbT64yFgGE6UIB9tAkhukC23PmMDCe5Nd+cRqKxSjw5y54MK2AZMgZfJWMaNE4nYUHgi1XEOw==} + engines: {node: '>=18.17'} + + undici@7.13.0: + resolution: {integrity: sha512-l+zSMssRqrzDcb3fjMkjjLGmuiiK2pMIcV++mJaAc9vhjSGpvM7h43QgP+OAMb1GImHmbPyG2tBXeuyG5iY4gA==} + engines: {node: '>=20.18.1'} + universalify@0.2.0: resolution: {integrity: sha512-CJ1QgKmNg3CwvAv/kOFmtnEN05f0D/cn9QntgNOQlQF9dgvVTHj3t+8JPdjqawCHk7V/KA+fbUqzZ9XWhcqPUg==} engines: {node: '>= 4.0.0'} @@ -2776,6 +3269,16 @@ packages: url-parse@1.5.10: resolution: {integrity: sha512-WypcfiRhfeUP9vvF0j6rw0J3hrWrw6iZv3+22h6iRMJ/8z1Tj6XfLP4DsUix5MhMPnXpiHDoKyoZ/bdCkwBCiQ==} + urlpattern-polyfill@10.1.0: + resolution: {integrity: sha512-IGjKp/o0NL3Bso1PymYURCJxMPNAf/ILOpendP9f5B6e1rTJgdgiOvgfoT8VxCAdY+Wisb9uhGaJJf3yZ2V9nw==} + + userhome@1.0.1: + resolution: {integrity: sha512-5cnLm4gseXjAclKowC4IjByaGsjtAoV6PrOQOljplNB54ReUYJP8HdAFq2muHinSDAh09PPX/uXDPfdxRHvuSA==} + engines: {node: '>= 0.8.0'} + + util-deprecate@1.0.2: + resolution: {integrity: sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==} + vite-node@3.2.4: resolution: {integrity: sha512-EbKSKh+bh1E1IFxeO0pg1n4dvoOTt0UDiXMd/qn++r98+jPO1xtJilvXldeuQ8giIB5IkpjCgMleHMNEsGH6pg==} engines: {node: ^18.0.0 || ^20.0.0 || >=22.0.0} @@ -2871,6 +3374,28 @@ packages: resolution: {integrity: sha512-o8qghlI8NZHU1lLPrpi2+Uq7abh4GGPpYANlalzWxyWteJOCsr/P+oPBA49TOLu5FTZO4d3F9MnWJfiMo4BkmA==} engines: {node: '>=18'} + 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.19.1: + resolution: {integrity: sha512-cvccIZ3QaUZxxrA81a3rqqgxKt6VzVrZupMc+eX9J40qfGrV3NtdLb/m4AA1PmeTPGN5O3/4KrzDpnVZM4WUnA==} + engines: {node: '>=18.20.0'} + + webdriverio@9.19.1: + resolution: {integrity: sha512-hpGgK6d9QNi3AaLFWIPQaEMqJhXF048XAIsV5i5mkL0kjghV1opcuhKgbbG+7pcn8JSpiq6mh7o3MDYtapw90w==} + engines: {node: '>=18.20.0'} + peerDependencies: + puppeteer-core: '>=22.x || <=24.x' + peerDependenciesMeta: + puppeteer-core: + optional: true + webidl-conversions@3.0.1: resolution: {integrity: sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==} @@ -2904,6 +3429,11 @@ packages: 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'} @@ -2921,6 +3451,9 @@ packages: resolution: {integrity: sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==} engines: {node: '>=12'} + wrappy@1.0.2: + resolution: {integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==} + ws@8.18.3: resolution: {integrity: sha512-PEIGCY5tSlUt50cqyMXfCzX+oOPqN0vuGqWzbcJ2xvnkzkq46oOpz7dQaTDBdfICb4N14+GARUDw2XV2N4tvzg==} engines: {node: '>=10.0.0'} @@ -2955,10 +3488,17 @@ packages: resolution: {integrity: sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==} engines: {node: '>=12'} + yauzl@2.10.0: + resolution: {integrity: sha512-p4a9I6X6nu6IhoGmBqAcbJy1mlC4j27vEPZX9F4L4/vZT3Lyq1VkFHw/V/PUcB9Buo+DG3iHkT0x3Qya58zc3g==} + yoctocolors-cjs@2.1.2: resolution: {integrity: sha512-cYVsTjKl8b+FrnidjibDWskAv7UKOfcwaVZdp/it9n1s9fU3IkgDbhdIRKCW4JDsAlECJY0ytoVPT3sK6kideA==} engines: {node: '>=18'} + zip-stream@6.0.1: + resolution: {integrity: sha512-zK7YHHz4ZXpW89AHXUPbQVGKI7uvkd3hzusTdotCg1UxyaVtg0zFJSTfW/Dq5f7OBBVnq6cZIaC8Ti4hb6dtCA==} + engines: {node: '>= 14'} + snapshots: '@adobe/css-tools@4.4.3': {} @@ -3065,10 +3605,6 @@ snapshots: '@babel/core': 7.28.0 '@babel/helper-plugin-utils': 7.27.1 - '@babel/runtime-corejs3@7.28.0': - dependencies: - core-js-pure: 3.44.0 - '@babel/runtime@7.27.6': {} '@babel/template@7.27.2': @@ -3387,14 +3923,6 @@ snapshots: wrap-ansi: 8.1.0 wrap-ansi-cjs: wrap-ansi@7.0.0 - '@jest/types@26.6.2': - dependencies: - '@types/istanbul-lib-coverage': 2.0.6 - '@types/istanbul-reports': 3.0.4 - '@types/node': 22.16.5 - '@types/yargs': 15.0.19 - chalk: 4.1.2 - '@jridgewell/gen-mapping@0.3.12': dependencies: '@jridgewell/sourcemap-codec': 1.5.4 @@ -3415,8 +3943,6 @@ snapshots: '@jridgewell/resolve-uri': 3.1.2 '@jridgewell/sourcemap-codec': 1.5.4 - '@kurkle/color@0.3.4': {} - '@mswjs/interceptors@0.39.3': dependencies: '@open-draft/deferred-promise': 2.2.0 @@ -3450,6 +3976,23 @@ snapshots: '@polka/url@1.0.0-next.29': {} + '@promptbook/utils@0.69.5': + dependencies: + spacetrim: 0.11.59 + + '@puppeteer/browsers@2.10.6': + dependencies: + debug: 4.4.1 + extract-zip: 2.0.1 + progress: 2.0.3 + proxy-agent: 6.5.0 + semver: 7.7.2 + tar-fs: 3.1.0 + yargs: 17.7.2 + transitivePeerDependencies: + - bare-buffer + - supports-color + '@rolldown/pluginutils@1.0.0-beta.27': {} '@rolldown/pluginutils@1.0.0-beta.29': {} @@ -3587,16 +4130,16 @@ snapshots: lz-string: 1.5.0 pretty-format: 27.5.1 - '@testing-library/dom@7.31.2': + '@testing-library/dom@10.4.1': dependencies: '@babel/code-frame': 7.27.1 '@babel/runtime': 7.27.6 - '@types/aria-query': 4.2.2 - aria-query: 4.2.2 - chalk: 4.1.2 + '@types/aria-query': 5.0.4 + aria-query: 5.3.0 dom-accessibility-api: 0.5.16 lz-string: 1.5.0 - pretty-format: 26.6.2 + picocolors: 1.1.1 + pretty-format: 27.5.1 '@testing-library/jest-dom@6.6.3': dependencies: @@ -3608,16 +4151,29 @@ snapshots: lodash: 4.17.21 redent: 3.0.0 - '@testing-library/user-event@13.5.0(@testing-library/dom@7.31.2)': + '@testing-library/jest-dom@6.7.0': + dependencies: + '@adobe/css-tools': 4.4.3 + aria-query: 5.3.2 + css.escape: 1.5.1 + dom-accessibility-api: 0.6.3 + picocolors: 1.1.1 + redent: 3.0.0 + + '@testing-library/user-event@13.5.0(@testing-library/dom@10.4.1)': dependencies: '@babel/runtime': 7.27.6 - '@testing-library/dom': 7.31.2 + '@testing-library/dom': 10.4.1 '@testing-library/user-event@14.6.1(@testing-library/dom@10.4.0)': dependencies: '@testing-library/dom': 10.4.0 - '@types/aria-query@4.2.2': {} + '@testing-library/user-event@14.6.1(@testing-library/dom@10.4.1)': + dependencies: + '@testing-library/dom': 10.4.1 + + '@tootallnate/quickjs-emscripten@0.23.0': {} '@types/aria-query@5.0.4': {} @@ -3659,27 +4215,21 @@ snapshots: '@types/hotwired__turbo@8.0.4': {} - '@types/istanbul-lib-coverage@2.0.6': {} - - '@types/istanbul-lib-report@3.0.3': - dependencies: - '@types/istanbul-lib-coverage': 2.0.6 - - '@types/istanbul-reports@3.0.4': - dependencies: - '@types/istanbul-lib-report': 3.0.3 - '@types/json-schema@7.0.15': {} '@types/leaflet@1.9.20': dependencies: '@types/geojson': 7946.0.16 - '@types/node-fetch@2.6.12': + '@types/node-fetch@2.6.13': dependencies: '@types/node': 22.16.5 form-data: 4.0.4 + '@types/node@20.19.11': + dependencies: + undici-types: 6.21.0 + '@types/node@22.16.5': dependencies: undici-types: 6.21.0 @@ -3695,6 +4245,8 @@ snapshots: '@types/prop-types': 15.7.15 csstype: 3.1.3 + '@types/sinonjs__fake-timers@8.1.5': {} + '@types/statuses@2.0.6': optional: true @@ -3703,11 +4255,16 @@ snapshots: '@types/webpack-env@1.18.8': {} - '@types/yargs-parser@21.0.3': {} + '@types/which@2.0.2': {} - '@types/yargs@15.0.19': + '@types/ws@8.18.1': dependencies: - '@types/yargs-parser': 21.0.3 + '@types/node': 22.16.5 + + '@types/yauzl@2.10.3': + dependencies: + '@types/node': 22.16.5 + optional: true '@vitejs/plugin-react@4.7.0(vite@5.4.19(@types/node@22.16.5)(lightningcss@1.30.1)(terser@5.43.1))': dependencies: @@ -3727,10 +4284,10 @@ snapshots: vite: 5.4.19(@types/node@22.16.5)(lightningcss@1.30.1)(terser@5.43.1) vue: 3.5.17(typescript@5.8.3) - '@vitest/browser@3.2.4(msw@2.10.4(@types/node@22.16.5)(typescript@5.8.3))(playwright@1.54.1)(vite@5.4.19(@types/node@22.16.5)(lightningcss@1.30.1)(terser@5.43.1))(vitest@3.2.4)': + '@vitest/browser@3.2.4(msw@2.10.4(@types/node@22.16.5)(typescript@5.8.3))(playwright@1.54.2)(vite@5.4.19(@types/node@22.16.5)(lightningcss@1.30.1)(terser@5.43.1))(vitest@3.2.4)(webdriverio@9.19.1)': dependencies: - '@testing-library/dom': 10.4.0 - '@testing-library/user-event': 14.6.1(@testing-library/dom@10.4.0) + '@testing-library/dom': 10.4.1 + '@testing-library/user-event': 14.6.1(@testing-library/dom@10.4.1) '@vitest/mocker': 3.2.4(msw@2.10.4(@types/node@22.16.5)(typescript@5.8.3))(vite@5.4.19(@types/node@22.16.5)(lightningcss@1.30.1)(terser@5.43.1)) '@vitest/utils': 3.2.4 magic-string: 0.30.17 @@ -3739,7 +4296,8 @@ snapshots: vitest: 3.2.4(@types/node@22.16.5)(@vitest/browser@3.2.4)(jsdom@26.1.0)(lightningcss@1.30.1)(msw@2.10.4(@types/node@22.16.5)(typescript@5.8.3))(terser@5.43.1) ws: 8.18.3 optionalDependencies: - playwright: 1.54.1 + playwright: 1.54.2 + webdriverio: 9.19.1 transitivePeerDependencies: - bufferutil - msw @@ -3843,6 +4401,62 @@ snapshots: '@vue/shared@3.5.17': {} + '@wdio/config@9.19.1': + dependencies: + '@wdio/logger': 9.18.0 + '@wdio/types': 9.19.1 + '@wdio/utils': 9.19.1 + deepmerge-ts: 7.1.5 + glob: 10.4.5 + import-meta-resolve: 4.1.0 + transitivePeerDependencies: + - bare-buffer + - supports-color + + '@wdio/logger@9.18.0': + dependencies: + chalk: 5.4.1 + loglevel: 1.9.2 + loglevel-plugin-prefix: 0.8.4 + safe-regex2: 5.0.0 + strip-ansi: 7.1.0 + + '@wdio/protocols@9.16.2': {} + + '@wdio/repl@9.16.2': + dependencies: + '@types/node': 20.19.11 + + '@wdio/types@9.19.1': + dependencies: + '@types/node': 20.19.11 + + '@wdio/utils@9.19.1': + dependencies: + '@puppeteer/browsers': 2.10.6 + '@wdio/logger': 9.18.0 + '@wdio/types': 9.19.1 + decamelize: 6.0.0 + deepmerge-ts: 7.1.5 + edgedriver: 6.1.2 + geckodriver: 5.0.0 + get-port: 7.1.0 + import-meta-resolve: 4.1.0 + locate-app: 2.5.0 + mitt: 3.0.1 + safaridriver: 1.0.0 + split2: 4.2.0 + wait-port: 1.1.0 + transitivePeerDependencies: + - bare-buffer + - supports-color + + '@zip.js/zip.js@2.7.72': {} + + abort-controller@3.0.0: + dependencies: + event-target-shim: 5.0.1 + acorn@8.15.0: {} agent-base@7.1.4: {} @@ -3882,10 +4496,25 @@ snapshots: any-promise@1.3.0: {} - aria-query@4.2.2: + archiver-utils@5.0.2: dependencies: - '@babel/runtime': 7.27.6 - '@babel/runtime-corejs3': 7.28.0 + 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: @@ -3895,12 +4524,51 @@ snapshots: assertion-error@2.0.1: {} + ast-types@0.13.4: + dependencies: + tslib: 2.8.1 + + async@3.2.6: {} + asynckit@0.4.0: {} axobject-query@4.1.0: {} + b4a@1.6.7: {} + balanced-match@1.0.2: {} + bare-events@2.6.1: + optional: true + + bare-fs@4.2.0: + dependencies: + bare-events: 2.6.1 + bare-path: 3.0.0 + bare-stream: 2.7.0(bare-events@2.6.1) + 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.7.0(bare-events@2.6.1): + dependencies: + streamx: 2.22.1 + optionalDependencies: + bare-events: 2.6.1 + optional: true + + base64-js@1.5.1: {} + + basic-ftp@5.0.5: {} + + boolbase@1.0.0: {} + brace-expansion@2.0.2: dependencies: balanced-match: 1.0.2 @@ -3912,9 +4580,18 @@ snapshots: node-releases: 2.0.19 update-browserslist-db: 1.1.3(browserslist@4.25.1) + buffer-crc32@0.2.13: {} + + buffer-crc32@1.0.0: {} + buffer-from@1.1.2: optional: true + buffer@6.0.3: + dependencies: + base64-js: 1.5.1 + ieee754: 1.2.1 + bundle-require@5.1.0(esbuild@0.25.8): dependencies: esbuild: 0.25.8 @@ -3949,12 +4626,33 @@ snapshots: chalk@5.4.1: {} - chart.js@4.5.0: - dependencies: - '@kurkle/color': 0.3.4 + chart.js@3.9.1: {} check-error@2.1.1: {} + cheerio-select@2.1.0: + dependencies: + boolbase: 1.0.0 + css-select: 5.2.2 + css-what: 6.2.2 + domelementtype: 2.3.0 + domhandler: 5.0.3 + domutils: 3.2.2 + + cheerio@1.1.2: + dependencies: + cheerio-select: 2.1.0 + dom-serializer: 2.0.0 + domhandler: 5.0.3 + domutils: 3.2.2 + encoding-sniffer: 0.2.1 + htmlparser2: 10.0.0 + parse5: 7.3.0 + parse5-htmlparser2-tree-adapter: 7.1.0 + parse5-parser-stream: 7.1.2 + undici: 7.13.0 + whatwg-mimetype: 4.0.0 + chokidar@4.0.3: dependencies: readdirp: 4.1.2 @@ -3967,7 +4665,6 @@ snapshots: string-width: 4.2.3 strip-ansi: 6.0.1 wrap-ansi: 7.0.0 - optional: true code-red@1.0.4: dependencies: @@ -3992,6 +4689,16 @@ snapshots: commander@4.1.1: {} + 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 + confbox@0.1.8: {} confbox@0.2.2: {} @@ -4003,7 +4710,14 @@ snapshots: cookie@0.7.2: optional: true - core-js-pure@3.44.0: {} + 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 cropperjs@1.6.2: {} @@ -4019,11 +4733,25 @@ snapshots: shebang-command: 2.0.0 which: 2.0.2 + css-select@5.2.2: + dependencies: + boolbase: 1.0.0 + css-what: 6.2.2 + domhandler: 5.0.3 + domutils: 3.2.2 + nth-check: 2.1.1 + + css-shorthand-properties@1.1.2: {} + css-tree@2.3.1: dependencies: mdn-data: 2.0.30 source-map-js: 1.2.1 + css-value@0.0.1: {} + + css-what@6.2.2: {} + css.escape@1.5.1: {} cssfontparser@1.2.1: {} @@ -4035,6 +4763,10 @@ snapshots: csstype@3.1.3: {} + data-uri-to-buffer@4.0.1: {} + + data-uri-to-buffer@6.0.2: {} + data-urls@5.0.0: dependencies: whatwg-mimetype: 4.0.0 @@ -4044,12 +4776,22 @@ snapshots: dependencies: ms: 2.1.3 + decamelize@6.0.0: {} + decimal.js@10.6.0: {} deep-eql@5.0.2: {} + deepmerge-ts@7.1.5: {} + deepmerge@4.3.1: {} + degenerator@5.0.1: + dependencies: + ast-types: 0.13.4 + escodegen: 2.1.0 + esprima: 4.0.1 + delayed-stream@1.0.0: {} delegate-it@6.2.1: @@ -4064,6 +4806,24 @@ snapshots: dom-accessibility-api@0.6.3: {} + 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 + dunder-proto@1.0.1: dependencies: call-bind-apply-helpers: 1.0.2 @@ -4072,12 +4832,40 @@ snapshots: eastasianwidth@0.2.0: {} + edge-paths@3.0.5: + dependencies: + '@types/which': 2.0.2 + which: 2.0.2 + + edgedriver@6.1.2: + dependencies: + '@wdio/logger': 9.18.0 + '@zip.js/zip.js': 2.7.72 + decamelize: 6.0.0 + edge-paths: 3.0.5 + fast-xml-parser: 5.2.5 + http-proxy-agent: 7.0.2 + https-proxy-agent: 7.0.6 + node-fetch: 3.3.2 + which: 5.0.0 + transitivePeerDependencies: + - supports-color + electron-to-chromium@1.5.187: {} emoji-regex@8.0.0: {} emoji-regex@9.2.2: {} + encoding-sniffer@0.2.1: + dependencies: + iconv-lite: 0.6.3 + whatwg-encoding: 3.1.1 + + end-of-stream@1.4.5: + dependencies: + once: 1.4.0 + entities@4.5.0: {} entities@6.0.1: {} @@ -4156,24 +4944,69 @@ snapshots: escalade@3.2.0: {} + 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@2.0.2: {} estree-walker@3.0.3: dependencies: '@types/estree': 1.0.8 + esutils@2.0.3: {} + + event-target-shim@5.0.1: {} + + events@3.3.0: {} + expect-type@1.2.2: {} exsolve@1.0.7: {} + extract-zip@2.0.1: + dependencies: + debug: 4.4.1 + 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-deep-equal@3.1.3: {} + fast-fifo@1.3.2: {} + fast-uri@3.0.6: {} + fast-xml-parser@5.2.5: + dependencies: + strnum: 2.1.1 + + fd-slicer@1.1.0: + dependencies: + pend: 1.2.0 + fdir@6.4.6(picomatch@4.0.3): optionalDependencies: picomatch: 4.0.3 + fetch-blob@3.2.0: + dependencies: + node-domexception: 1.0.0 + web-streams-polyfill: 3.3.3 + fix-dts-default-cjs-exports@1.0.1: dependencies: magic-string: 0.30.17 @@ -4193,6 +5026,10 @@ snapshots: hasown: 2.0.2 mime-types: 2.1.35 + formdata-polyfill@4.0.10: + dependencies: + fetch-blob: 3.2.0 + fsevents@2.3.2: optional: true @@ -4201,10 +5038,23 @@ snapshots: function-bind@1.1.2: {} + geckodriver@5.0.0: + dependencies: + '@wdio/logger': 9.18.0 + '@zip.js/zip.js': 2.7.72 + decamelize: 6.0.0 + http-proxy-agent: 7.0.2 + https-proxy-agent: 7.0.6 + node-fetch: 3.3.2 + tar-fs: 3.1.0 + which: 5.0.0 + transitivePeerDependencies: + - bare-buffer + - supports-color + gensync@1.0.0-beta.2: {} - get-caller-file@2.0.5: - optional: true + get-caller-file@2.0.5: {} get-intrinsic@1.3.0: dependencies: @@ -4219,15 +5069,29 @@ snapshots: hasown: 2.0.2 math-intrinsics: 1.1.0 + get-port@7.1.0: {} + get-proto@1.0.1: dependencies: dunder-proto: 1.0.1 es-object-atoms: 1.1.1 + get-stream@5.2.0: + dependencies: + pump: 3.0.3 + get-tsconfig@4.10.1: dependencies: resolve-pkg-maps: 1.0.0 + get-uri@6.0.5: + dependencies: + basic-ftp: 5.0.5 + data-uri-to-buffer: 6.0.2 + debug: 4.4.1 + transitivePeerDependencies: + - supports-color + glob@10.4.5: dependencies: foreground-child: 3.3.1 @@ -4239,6 +5103,10 @@ snapshots: gopd@1.2.0: {} + graceful-fs@4.2.11: {} + + grapheme-splitter@1.0.4: {} + graphql@16.11.0: optional: true @@ -4261,6 +5129,15 @@ snapshots: dependencies: whatwg-encoding: 3.1.1 + htmlfy@0.8.1: {} + + htmlparser2@10.0.0: + dependencies: + domelementtype: 2.3.0 + domhandler: 5.0.3 + domutils: 3.2.2 + entities: 6.0.1 + http-proxy-agent@7.0.2: dependencies: agent-base: 7.1.4 @@ -4281,8 +5158,16 @@ snapshots: idiomorph@0.3.0: {} + ieee754@1.2.1: {} + + immediate@3.0.6: {} + + import-meta-resolve@4.1.0: {} + indent-string@4.0.0: {} + inherits@2.0.4: {} + intl-messageformat@10.7.16: dependencies: '@formatjs/ecma402-abstract': 2.3.4 @@ -4290,19 +5175,29 @@ snapshots: '@formatjs/icu-messageformat-parser': 2.11.2 tslib: 2.8.1 + ip-address@10.0.1: {} + is-fullwidth-code-point@3.0.0: {} is-node-process@1.2.0: optional: true + is-plain-obj@4.1.0: {} + is-potential-custom-element-name@1.0.1: {} is-reference@3.0.3: dependencies: '@types/estree': 1.0.8 + is-stream@2.0.1: {} + + isarray@1.0.0: {} + isexe@2.0.0: {} + isexe@3.1.1: {} + jackspeak@3.4.3: dependencies: '@isaacs/cliui': 8.0.2 @@ -4353,10 +5248,25 @@ snapshots: json5@2.2.3: {} + jszip@3.10.1: + dependencies: + lie: 3.3.0 + pako: 1.0.11 + readable-stream: 2.3.8 + setimmediate: 1.0.5 + kleur@4.1.5: {} + lazystream@1.0.1: + dependencies: + readable-stream: 2.3.8 + leaflet@1.9.4: {} + lie@3.3.0: + dependencies: + immediate: 3.0.6 + lightningcss-darwin-arm64@1.30.1: optional: true @@ -4410,12 +5320,26 @@ snapshots: loader-utils@3.3.1: {} + locate-app@2.5.0: + dependencies: + '@promptbook/utils': 0.69.5 + type-fest: 4.26.0 + userhome: 1.0.1 + locate-character@3.0.0: {} + lodash.clonedeep@4.5.0: {} + lodash.sortby@4.7.0: {} + lodash.zip@4.2.0: {} + lodash@4.17.21: {} + loglevel-plugin-prefix@0.8.4: {} + + loglevel@1.9.2: {} + loose-envify@1.4.0: dependencies: js-tokens: 4.0.0 @@ -4428,6 +5352,8 @@ snapshots: dependencies: yallist: 3.1.1 + lru-cache@7.18.3: {} + lz-string@1.5.0: {} magic-string@0.30.17: @@ -4446,12 +5372,18 @@ snapshots: min-indent@1.0.1: {} + minimatch@5.1.6: + dependencies: + brace-expansion: 2.0.2 + minimatch@9.0.5: dependencies: brace-expansion: 2.0.2 minipass@7.1.2: {} + mitt@3.0.1: {} + mlly@1.7.4: dependencies: acorn: 8.15.0 @@ -4504,23 +5436,72 @@ snapshots: nanoid@3.3.11: {} + netmask@2.0.2: {} + + node-domexception@1.0.0: {} + node-fetch@2.7.0: dependencies: whatwg-url: 5.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 + node-releases@2.0.19: {} + normalize-path@3.0.0: {} + + nth-check@2.1.1: + dependencies: + boolbase: 1.0.0 + nwsapi@2.2.20: {} object-assign@4.1.1: {} + once@1.4.0: + dependencies: + wrappy: 1.0.2 + opencollective-postinstall@2.0.3: {} outvariant@1.4.3: optional: true + pac-proxy-agent@7.2.0: + dependencies: + '@tootallnate/quickjs-emscripten': 0.23.0 + agent-base: 7.1.4 + debug: 4.4.1 + get-uri: 6.0.5 + 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: {} + + parse5-htmlparser2-tree-adapter@7.1.0: + dependencies: + domhandler: 5.0.3 + parse5: 7.3.0 + + parse5-parser-stream@7.1.2: + dependencies: + parse5: 7.3.0 + parse5@7.3.0: dependencies: entities: 6.0.1 @@ -4539,6 +5520,8 @@ snapshots: pathval@2.0.1: {} + pend@1.2.0: {} + periscopic@3.1.0: dependencies: '@types/estree': 1.0.8 @@ -4563,13 +5546,15 @@ snapshots: exsolve: 1.0.7 pathe: 2.0.3 - playwright-core@1.54.1: {} + playwright-core@1.54.2: + optional: true - playwright@1.54.1: + playwright@1.54.2: dependencies: - playwright-core: 1.54.1 + playwright-core: 1.54.2 optionalDependencies: fsevents: 2.3.2 + optional: true postcss-load-config@6.0.1(postcss@8.5.6)(tsx@4.20.3): dependencies: @@ -4584,26 +5569,47 @@ snapshots: picocolors: 1.1.1 source-map-js: 1.2.1 - pretty-format@26.6.2: - dependencies: - '@jest/types': 26.6.2 - ansi-regex: 5.0.1 - ansi-styles: 4.3.0 - react-is: 17.0.2 - pretty-format@27.5.1: dependencies: ansi-regex: 5.0.1 ansi-styles: 5.2.0 react-is: 17.0.2 + process-nextick-args@2.0.1: {} + + process@0.11.10: {} + + progress@2.0.3: {} + + proxy-agent@6.5.0: + dependencies: + agent-base: 7.1.4 + debug: 4.4.1 + 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 optional: true + pump@3.0.3: + dependencies: + end-of-stream: 1.4.5 + once: 1.4.0 + punycode@2.3.1: {} + query-selector-shadow-dom@1.0.1: {} + querystringify@2.2.0: optional: true @@ -4621,6 +5627,28 @@ snapshots: dependencies: loose-envify: 1.4.0 + 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: {} redent@3.0.0: @@ -4628,8 +5656,7 @@ snapshots: indent-string: 4.0.0 strip-indent: 3.0.0 - require-directory@2.1.1: - optional: true + require-directory@2.1.1: {} require-from-string@2.0.2: {} @@ -4642,6 +5669,14 @@ snapshots: resolve-pkg-maps@1.0.0: {} + resq@1.11.0: + dependencies: + fast-deep-equal: 2.0.1 + + ret@0.5.0: {} + + rgb2hex@0.2.5: {} + rollup@4.45.1: dependencies: '@types/estree': 1.0.8 @@ -4670,6 +5705,16 @@ snapshots: rrweb-cssom@0.8.0: {} + safaridriver@1.0.0: {} + + safe-buffer@5.1.2: {} + + safe-buffer@5.2.1: {} + + safe-regex2@5.0.0: + dependencies: + ret: 0.5.0 + safer-buffer@2.1.2: {} saxes@6.0.0: @@ -4689,6 +5734,14 @@ snapshots: semver@6.3.1: {} + semver@7.7.2: {} + + serialize-error@12.0.0: + dependencies: + type-fest: 4.41.0 + + setimmediate@1.0.5: {} + shebang-command@2.0.0: dependencies: shebang-regex: 3.0.0 @@ -4705,6 +5758,21 @@ snapshots: mrmime: 2.0.1 totalist: 3.0.1 + smart-buffer@4.2.0: {} + + socks-proxy-agent@8.0.5: + dependencies: + agent-base: 7.1.4 + debug: 4.4.1 + socks: 2.8.7 + transitivePeerDependencies: + - supports-color + + socks@2.8.7: + dependencies: + ip-address: 10.0.1 + smart-buffer: 4.2.0 + source-map-js@1.2.1: {} source-map-support@0.5.21: @@ -4720,6 +5788,10 @@ snapshots: dependencies: whatwg-url: 7.1.0 + spacetrim@0.11.59: {} + + split2@4.2.0: {} + stackback@0.0.2: {} statuses@2.0.2: @@ -4727,6 +5799,13 @@ snapshots: std-env@3.9.0: {} + streamx@2.22.1: + dependencies: + fast-fifo: 1.3.2 + text-decoder: 1.2.3 + optionalDependencies: + bare-events: 2.6.1 + strict-event-emitter@0.5.1: optional: true @@ -4742,6 +5821,14 @@ snapshots: 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 @@ -4758,6 +5845,8 @@ snapshots: dependencies: js-tokens: 9.0.1 + strnum@2.1.1: {} + sucrase@3.35.0: dependencies: '@jridgewell/gen-mapping': 0.3.12 @@ -4800,6 +5889,22 @@ snapshots: symbol-tree@3.2.4: {} + tar-fs@3.1.0: + dependencies: + pump: 3.0.3 + tar-stream: 3.1.7 + optionalDependencies: + bare-fs: 4.2.0 + 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.1 + terser@5.43.1: dependencies: '@jridgewell/source-map': 0.3.10 @@ -4808,6 +5913,10 @@ snapshots: source-map-support: 0.5.21 optional: true + text-decoder@1.2.3: + dependencies: + b4a: 1.6.7 + thenify-all@1.6.0: dependencies: thenify: 3.3.1 @@ -4910,8 +6019,9 @@ snapshots: type-fest@0.21.3: optional: true - type-fest@4.41.0: - optional: true + type-fest@4.26.0: {} + + type-fest@4.41.0: {} typed-query-selector@2.12.0: {} @@ -4923,6 +6033,10 @@ snapshots: undici-types@6.21.0: {} + undici@6.21.3: {} + + undici@7.13.0: {} + universalify@0.2.0: optional: true @@ -4938,6 +6052,12 @@ snapshots: requires-port: 1.0.0 optional: true + urlpattern-polyfill@10.1.0: {} + + userhome@1.0.1: {} + + util-deprecate@1.0.2: {} + vite-node@3.2.4(@types/node@22.16.5)(lightningcss@1.30.1)(terser@5.43.1): dependencies: cac: 6.7.14 @@ -5010,7 +6130,7 @@ snapshots: why-is-node-running: 2.3.0 optionalDependencies: '@types/node': 22.16.5 - '@vitest/browser': 3.2.4(msw@2.10.4(@types/node@22.16.5)(typescript@5.8.3))(playwright@1.54.1)(vite@5.4.19(@types/node@22.16.5)(lightningcss@1.30.1)(terser@5.43.1))(vitest@3.2.4) + '@vitest/browser': 3.2.4(msw@2.10.4(@types/node@22.16.5)(typescript@5.8.3))(playwright@1.54.2)(vite@5.4.19(@types/node@22.16.5)(lightningcss@1.30.1)(terser@5.43.1))(vitest@3.2.4)(webdriverio@9.19.1) jsdom: 26.1.0 transitivePeerDependencies: - less @@ -5037,6 +6157,68 @@ snapshots: dependencies: xml-name-validator: 5.0.0 + wait-port@1.1.0: + dependencies: + chalk: 4.1.2 + commander: 9.5.0 + debug: 4.4.1 + transitivePeerDependencies: + - supports-color + + web-streams-polyfill@3.3.3: {} + + webdriver@9.19.1: + dependencies: + '@types/node': 20.19.11 + '@types/ws': 8.18.1 + '@wdio/config': 9.19.1 + '@wdio/logger': 9.18.0 + '@wdio/protocols': 9.16.2 + '@wdio/types': 9.19.1 + '@wdio/utils': 9.19.1 + deepmerge-ts: 7.1.5 + https-proxy-agent: 7.0.6 + undici: 6.21.3 + ws: 8.18.3 + transitivePeerDependencies: + - bare-buffer + - bufferutil + - supports-color + - utf-8-validate + + webdriverio@9.19.1: + dependencies: + '@types/node': 20.19.11 + '@types/sinonjs__fake-timers': 8.1.5 + '@wdio/config': 9.19.1 + '@wdio/logger': 9.18.0 + '@wdio/protocols': 9.16.2 + '@wdio/repl': 9.16.2 + '@wdio/types': 9.19.1 + '@wdio/utils': 9.19.1 + archiver: 7.0.1 + aria-query: 5.3.2 + cheerio: 1.1.2 + css-shorthand-properties: 1.1.2 + css-value: 0.0.1 + grapheme-splitter: 1.0.4 + htmlfy: 0.8.1 + 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: 12.0.0 + urlpattern-polyfill: 10.1.0 + webdriver: 9.19.1 + transitivePeerDependencies: + - bare-buffer + - bufferutil + - supports-color + - utf-8-validate + webidl-conversions@3.0.1: {} webidl-conversions@4.0.2: {} @@ -5069,6 +6251,10 @@ snapshots: 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 @@ -5093,19 +6279,19 @@ snapshots: string-width: 5.1.2 strip-ansi: 7.1.0 + wrappy@1.0.2: {} + ws@8.18.3: {} xml-name-validator@5.0.0: {} xmlchars@2.2.0: {} - y18n@5.0.8: - optional: true + y18n@5.0.8: {} yallist@3.1.1: {} - yargs-parser@21.1.1: - optional: true + yargs-parser@21.1.1: {} yargs@17.7.2: dependencies: @@ -5116,7 +6302,17 @@ snapshots: string-width: 4.2.3 y18n: 5.0.8 yargs-parser: 21.1.1 - optional: true + + yauzl@2.10.0: + dependencies: + buffer-crc32: 0.2.13 + fd-slicer: 1.1.0 yoctocolors-cjs@2.1.2: optional: true + + zip-stream@6.0.1: + dependencies: + archiver-utils: 5.0.2 + compress-commons: 6.0.2 + readable-stream: 4.7.0 diff --git a/src/Autocomplete/assets/package.json b/src/Autocomplete/assets/package.json index fdc18140f5b..95bb661e520 100644 --- a/src/Autocomplete/assets/package.json +++ b/src/Autocomplete/assets/package.json @@ -17,7 +17,9 @@ "scripts": { "build": "tsx ../../../bin/build_package.ts .", "watch": "tsx ../../../bin/build_package.ts . --watch", - "test": "../../../bin/test_package.sh .", + "test": "pnpm run test:unit && pnpm run test:browser", + "test:unit": "../../../bin/test_package.sh . --unit", + "test:browser": "../../../bin/test_package.sh . --browser", "check": "biome check", "ci": "biome ci" }, diff --git a/src/Autocomplete/assets/test/browser/placeholder.test.ts b/src/Autocomplete/assets/test/browser/placeholder.test.ts new file mode 100644 index 00000000000..034d90eb9e8 --- /dev/null +++ b/src/Autocomplete/assets/test/browser/placeholder.test.ts @@ -0,0 +1,7 @@ +import { describe, expect, it } from 'vitest'; + +describe('Placeholder', () => { + it('pass', () => { + expect(true).toBe(true); + }); +}); diff --git a/src/Autocomplete/assets/test/controller.test.ts b/src/Autocomplete/assets/test/unit/controller.test.ts similarity index 99% rename from src/Autocomplete/assets/test/controller.test.ts rename to src/Autocomplete/assets/test/unit/controller.test.ts index ae6bf5eea76..4d91b94b61a 100644 --- a/src/Autocomplete/assets/test/controller.test.ts +++ b/src/Autocomplete/assets/test/unit/controller.test.ts @@ -16,7 +16,7 @@ import createFetchMock from 'vitest-fetch-mock'; import AutocompleteController, { type AutocompleteConnectOptions, type AutocompletePreConnectOptions, -} from '../src/controller'; +} from '../../src/controller'; const shortDelay = (ms: number): Promise => new Promise((resolve) => setTimeout(resolve, ms)); diff --git a/src/Autocomplete/assets/vitest.config.browser.mjs b/src/Autocomplete/assets/vitest.config.browser.mjs new file mode 100644 index 00000000000..cedcfabb90e --- /dev/null +++ b/src/Autocomplete/assets/vitest.config.browser.mjs @@ -0,0 +1,4 @@ +import { mergeConfig } from 'vitest/config'; +import configShared from '../../../vitest.config.browser.mjs'; + +export default mergeConfig(configShared, {}); diff --git a/src/Autocomplete/assets/vitest.config.unit.mjs b/src/Autocomplete/assets/vitest.config.unit.mjs new file mode 100644 index 00000000000..3a6751f8a05 --- /dev/null +++ b/src/Autocomplete/assets/vitest.config.unit.mjs @@ -0,0 +1,4 @@ +import { mergeConfig } from 'vitest/config'; +import configShared from '../../../vitest.config.unit.mjs'; + +export default mergeConfig(configShared, {}); diff --git a/src/Chartjs/assets/package.json b/src/Chartjs/assets/package.json index 709d55ca772..11cf4f562ed 100644 --- a/src/Chartjs/assets/package.json +++ b/src/Chartjs/assets/package.json @@ -17,7 +17,9 @@ "scripts": { "build": "tsx ../../../bin/build_package.ts .", "watch": "tsx ../../../bin/build_package.ts . --watch", - "test": "../../../bin/test_package.sh .", + "test": "pnpm run test:unit && pnpm run test:browser", + "test:unit": "../../../bin/test_package.sh . --unit", + "test:browser": "../../../bin/test_package.sh . --browser", "check": "biome check", "ci": "biome ci" }, diff --git a/src/Chartjs/assets/test/browser/placeholder.test.ts b/src/Chartjs/assets/test/browser/placeholder.test.ts new file mode 100644 index 00000000000..034d90eb9e8 --- /dev/null +++ b/src/Chartjs/assets/test/browser/placeholder.test.ts @@ -0,0 +1,7 @@ +import { describe, expect, it } from 'vitest'; + +describe('Placeholder', () => { + it('pass', () => { + expect(true).toBe(true); + }); +}); diff --git a/src/Chartjs/assets/test/controller.test.ts b/src/Chartjs/assets/test/unit/controller.test.ts similarity index 99% rename from src/Chartjs/assets/test/controller.test.ts rename to src/Chartjs/assets/test/unit/controller.test.ts index b31821b5eb9..624a35c7edf 100644 --- a/src/Chartjs/assets/test/controller.test.ts +++ b/src/Chartjs/assets/test/unit/controller.test.ts @@ -10,7 +10,7 @@ import { Application } from '@hotwired/stimulus'; import { waitFor } from '@testing-library/dom'; import { afterEach, beforeAll, describe, expect, it } from 'vitest'; -import ChartjsController from '../src/controller'; +import ChartjsController from '../../src/controller'; // Kept track of globally, but just used in one test. // This is because, by the time that test has run, it is likely that the diff --git a/src/Chartjs/assets/vitest.config.browser.mjs b/src/Chartjs/assets/vitest.config.browser.mjs new file mode 100644 index 00000000000..cedcfabb90e --- /dev/null +++ b/src/Chartjs/assets/vitest.config.browser.mjs @@ -0,0 +1,4 @@ +import { mergeConfig } from 'vitest/config'; +import configShared from '../../../vitest.config.browser.mjs'; + +export default mergeConfig(configShared, {}); diff --git a/src/Chartjs/assets/vitest.config.mjs b/src/Chartjs/assets/vitest.config.mjs deleted file mode 100644 index ad1c9eb8b55..00000000000 --- a/src/Chartjs/assets/vitest.config.mjs +++ /dev/null @@ -1,19 +0,0 @@ -import { defineConfig, mergeConfig } from 'vitest/config'; -import configShared from '../../../vitest.config.mjs' -import path from 'path'; - -export default mergeConfig( - configShared, - defineConfig({ - test: { - setupFiles: [path.join(__dirname, 'test', 'setup.js')], - deps: { - optimizer: { - web: { - include: ['vitest-canvas-mock'], - }, - }, - }, - } - }) -); diff --git a/src/Chartjs/assets/vitest.config.unit.mjs b/src/Chartjs/assets/vitest.config.unit.mjs new file mode 100644 index 00000000000..25d5f0b55c0 --- /dev/null +++ b/src/Chartjs/assets/vitest.config.unit.mjs @@ -0,0 +1,16 @@ +import path from 'node:path'; +import { mergeConfig } from 'vitest/config'; +import configShared from '../../../vitest.config.unit.mjs'; + +export default mergeConfig(configShared, { + test: { + setupFiles: [path.join(__dirname, 'test', 'setup.js')], + deps: { + optimizer: { + web: { + include: ['vitest-canvas-mock'], + }, + }, + }, + }, +}); diff --git a/src/Cropperjs/assets/package.json b/src/Cropperjs/assets/package.json index d5e25e85c13..d41f3f3e080 100644 --- a/src/Cropperjs/assets/package.json +++ b/src/Cropperjs/assets/package.json @@ -20,7 +20,9 @@ "scripts": { "build": "tsx ../../../bin/build_package.ts .", "watch": "tsx ../../../bin/build_package.ts . --watch", - "test": "../../../bin/test_package.sh .", + "test": "pnpm run test:unit && pnpm run test:browser", + "test:unit": "../../../bin/test_package.sh . --unit", + "test:browser": "../../../bin/test_package.sh . --browser", "check": "biome check", "ci": "biome ci" }, diff --git a/src/Cropperjs/assets/test/browser/placeholder.test.ts b/src/Cropperjs/assets/test/browser/placeholder.test.ts new file mode 100644 index 00000000000..034d90eb9e8 --- /dev/null +++ b/src/Cropperjs/assets/test/browser/placeholder.test.ts @@ -0,0 +1,7 @@ +import { describe, expect, it } from 'vitest'; + +describe('Placeholder', () => { + it('pass', () => { + expect(true).toBe(true); + }); +}); diff --git a/src/Cropperjs/assets/test/controller.test.ts b/src/Cropperjs/assets/test/unit/controller.test.ts similarity index 94% rename from src/Cropperjs/assets/test/controller.test.ts rename to src/Cropperjs/assets/test/unit/controller.test.ts index 42f20bd9015..2c6915341c5 100644 --- a/src/Cropperjs/assets/test/controller.test.ts +++ b/src/Cropperjs/assets/test/unit/controller.test.ts @@ -10,8 +10,8 @@ import { Application, Controller } from '@hotwired/stimulus'; import { getByTestId, waitFor } from '@testing-library/dom'; import { afterEach, beforeEach, describe, expect, it } from 'vitest'; -import { clearDOM, mountDOM } from '../../../../test/stimulus-helpers'; -import CropperjsController from '../src/controller'; +import { clearDOM, mountDOM } from '../../../../../test/stimulus-helpers'; +import CropperjsController from '../../src/controller'; let cropper: Cropper | null = null; diff --git a/src/Cropperjs/assets/vitest.config.browser.mjs b/src/Cropperjs/assets/vitest.config.browser.mjs new file mode 100644 index 00000000000..cedcfabb90e --- /dev/null +++ b/src/Cropperjs/assets/vitest.config.browser.mjs @@ -0,0 +1,4 @@ +import { mergeConfig } from 'vitest/config'; +import configShared from '../../../vitest.config.browser.mjs'; + +export default mergeConfig(configShared, {}); diff --git a/src/Cropperjs/assets/vitest.config.unit.mjs b/src/Cropperjs/assets/vitest.config.unit.mjs new file mode 100644 index 00000000000..3a6751f8a05 --- /dev/null +++ b/src/Cropperjs/assets/vitest.config.unit.mjs @@ -0,0 +1,4 @@ +import { mergeConfig } from 'vitest/config'; +import configShared from '../../../vitest.config.unit.mjs'; + +export default mergeConfig(configShared, {}); diff --git a/src/Dropzone/assets/package.json b/src/Dropzone/assets/package.json index 2567ee97311..6b6c8f45cd0 100644 --- a/src/Dropzone/assets/package.json +++ b/src/Dropzone/assets/package.json @@ -20,7 +20,9 @@ "scripts": { "build": "tsx ../../../bin/build_package.ts .", "watch": "tsx ../../../bin/build_package.ts . --watch", - "test": "../../../bin/test_package.sh .", + "test": "pnpm run test:unit && pnpm run test:browser", + "test:unit": "../../../bin/test_package.sh . --unit", + "test:browser": "../../../bin/test_package.sh . --browser", "check": "biome check", "ci": "biome ci" }, diff --git a/src/Dropzone/assets/test/browser/placeholder.test.ts b/src/Dropzone/assets/test/browser/placeholder.test.ts new file mode 100644 index 00000000000..034d90eb9e8 --- /dev/null +++ b/src/Dropzone/assets/test/browser/placeholder.test.ts @@ -0,0 +1,7 @@ +import { describe, expect, it } from 'vitest'; + +describe('Placeholder', () => { + it('pass', () => { + expect(true).toBe(true); + }); +}); diff --git a/src/Dropzone/assets/test/controller.test.ts b/src/Dropzone/assets/test/unit/controller.test.ts similarity index 97% rename from src/Dropzone/assets/test/controller.test.ts rename to src/Dropzone/assets/test/unit/controller.test.ts index b13f33840d5..522a22414cc 100644 --- a/src/Dropzone/assets/test/controller.test.ts +++ b/src/Dropzone/assets/test/unit/controller.test.ts @@ -11,8 +11,8 @@ import { Application, Controller } from '@hotwired/stimulus'; import { getByTestId, waitFor } from '@testing-library/dom'; import user from '@testing-library/user-event'; import { afterEach, beforeEach, describe, expect, it } from 'vitest'; -import { clearDOM, mountDOM } from '../../../../test/stimulus-helpers'; -import DropzoneController from '../src/controller'; +import { clearDOM, mountDOM } from '../../../../../test/stimulus-helpers'; +import DropzoneController from '../../src/controller'; // Controller used to check the actual controller was properly booted class CheckController extends Controller { diff --git a/src/Dropzone/assets/vitest.config.browser.mjs b/src/Dropzone/assets/vitest.config.browser.mjs new file mode 100644 index 00000000000..cedcfabb90e --- /dev/null +++ b/src/Dropzone/assets/vitest.config.browser.mjs @@ -0,0 +1,4 @@ +import { mergeConfig } from 'vitest/config'; +import configShared from '../../../vitest.config.browser.mjs'; + +export default mergeConfig(configShared, {}); diff --git a/src/Dropzone/assets/vitest.config.unit.mjs b/src/Dropzone/assets/vitest.config.unit.mjs new file mode 100644 index 00000000000..3a6751f8a05 --- /dev/null +++ b/src/Dropzone/assets/vitest.config.unit.mjs @@ -0,0 +1,4 @@ +import { mergeConfig } from 'vitest/config'; +import configShared from '../../../vitest.config.unit.mjs'; + +export default mergeConfig(configShared, {}); diff --git a/src/LazyImage/assets/package.json b/src/LazyImage/assets/package.json index 10cf4347e88..e32d647ec0c 100644 --- a/src/LazyImage/assets/package.json +++ b/src/LazyImage/assets/package.json @@ -17,7 +17,8 @@ "scripts": { "build": "tsx ../../../bin/build_package.ts .", "watch": "tsx ../../../bin/build_package.ts . --watch", - "test": "../../../bin/test_package.sh .", + "test": "pnpm run test:unit", + "test:unit": "../../../bin/test_package.sh . --unit", "check": "biome check", "ci": "biome ci" }, diff --git a/src/LazyImage/assets/test/controller.test.ts b/src/LazyImage/assets/test/unit/controller.test.ts similarity index 95% rename from src/LazyImage/assets/test/controller.test.ts rename to src/LazyImage/assets/test/unit/controller.test.ts index fa6737e756e..274b0af6697 100644 --- a/src/LazyImage/assets/test/controller.test.ts +++ b/src/LazyImage/assets/test/unit/controller.test.ts @@ -10,8 +10,8 @@ import { Application, Controller } from '@hotwired/stimulus'; import { getByTestId, waitFor } from '@testing-library/dom'; import { afterEach, beforeEach, describe, expect, it } from 'vitest'; -import { clearDOM, mountDOM } from '../../../../test/stimulus-helpers'; -import LazyImageController from '../src/controller'; +import { clearDOM, mountDOM } from '../../../../../test/stimulus-helpers'; +import LazyImageController from '../../src/controller'; // Controller used to check the actual controller was properly booted class CheckController extends Controller { diff --git a/src/LazyImage/assets/vitest.config.unit.mjs b/src/LazyImage/assets/vitest.config.unit.mjs new file mode 100644 index 00000000000..3a6751f8a05 --- /dev/null +++ b/src/LazyImage/assets/vitest.config.unit.mjs @@ -0,0 +1,4 @@ +import { mergeConfig } from 'vitest/config'; +import configShared from '../../../vitest.config.unit.mjs'; + +export default mergeConfig(configShared, {}); diff --git a/src/LiveComponent/assets/package.json b/src/LiveComponent/assets/package.json index a8b54bb7ccf..63ddad89230 100644 --- a/src/LiveComponent/assets/package.json +++ b/src/LiveComponent/assets/package.json @@ -22,7 +22,9 @@ "scripts": { "build": "tsx ../../../bin/build_package.ts .", "watch": "tsx ../../../bin/build_package.ts . --watch", - "test": "../../../bin/test_package.sh .", + "test": "pnpm run test:unit && pnpm run test:browser", + "test:unit": "../../../bin/test_package.sh . --unit", + "test:browser": "../../../bin/test_package.sh . --browser", "check": "biome check", "ci": "biome ci" }, @@ -49,10 +51,10 @@ }, "devDependencies": { "@hotwired/stimulus": "^3.0.0", - "@testing-library/dom": "^7.31.0", + "@testing-library/dom": "^10.4.1", "@testing-library/jest-dom": "^6.6.3", "@testing-library/user-event": "^13.1.9", - "@types/node-fetch": "^2.6.2", + "@types/node-fetch": "^2.6.13", "idiomorph": "^0.3.0", "jsdom": "^26.1.0", "node-fetch": "^2.6.1", diff --git a/src/LiveComponent/assets/test/browser/placeholder.test.ts b/src/LiveComponent/assets/test/browser/placeholder.test.ts new file mode 100644 index 00000000000..034d90eb9e8 --- /dev/null +++ b/src/LiveComponent/assets/test/browser/placeholder.test.ts @@ -0,0 +1,7 @@ +import { describe, expect, it } from 'vitest'; + +describe('Placeholder', () => { + it('pass', () => { + expect(true).toBe(true); + }); +}); diff --git a/src/LiveComponent/assets/test/Backend/RequestBuilder.test.ts b/src/LiveComponent/assets/test/unit/Backend/RequestBuilder.test.ts similarity index 99% rename from src/LiveComponent/assets/test/Backend/RequestBuilder.test.ts rename to src/LiveComponent/assets/test/unit/Backend/RequestBuilder.test.ts index 3aa503a104f..5a2a2d421c4 100644 --- a/src/LiveComponent/assets/test/Backend/RequestBuilder.test.ts +++ b/src/LiveComponent/assets/test/unit/Backend/RequestBuilder.test.ts @@ -1,5 +1,5 @@ import { describe, expect, it } from 'vitest'; -import RequestBuilder from '../../src/Backend/RequestBuilder'; +import RequestBuilder from '../../../src/Backend/RequestBuilder'; describe('buildRequest', () => { it('sets basic data on GET request', () => { diff --git a/src/LiveComponent/assets/test/Component/index.test.ts b/src/LiveComponent/assets/test/unit/Component/index.test.ts similarity index 93% rename from src/LiveComponent/assets/test/Component/index.test.ts rename to src/LiveComponent/assets/test/unit/Component/index.test.ts index 865723b3faa..39a1feeb666 100644 --- a/src/LiveComponent/assets/test/Component/index.test.ts +++ b/src/LiveComponent/assets/test/unit/Component/index.test.ts @@ -1,11 +1,11 @@ import { waitFor } from '@testing-library/dom'; import { Response } from 'node-fetch'; import { describe, expect, it } from 'vitest'; -import type { BackendAction, BackendInterface } from '../../src/Backend/Backend'; -import BackendRequest from '../../src/Backend/BackendRequest'; -import type BackendResponse from '../../src/Backend/BackendResponse'; -import Component, { proxifyComponent } from '../../src/Component'; -import { noopElementDriver } from '../tools'; +import type { BackendAction, BackendInterface } from '../../../src/Backend/Backend'; +import BackendRequest from '../../../src/Backend/BackendRequest'; +import type BackendResponse from '../../../src/Backend/BackendResponse'; +import Component, { proxifyComponent } from '../../../src/Component'; +import { noopElementDriver } from '../../tools'; interface MockBackend extends BackendInterface { actions: BackendAction[]; diff --git a/src/LiveComponent/assets/test/ComponentRegistry.test.ts b/src/LiveComponent/assets/test/unit/ComponentRegistry.test.ts similarity index 94% rename from src/LiveComponent/assets/test/ComponentRegistry.test.ts rename to src/LiveComponent/assets/test/unit/ComponentRegistry.test.ts index 4156e3cbcc7..d114908d63c 100644 --- a/src/LiveComponent/assets/test/ComponentRegistry.test.ts +++ b/src/LiveComponent/assets/test/unit/ComponentRegistry.test.ts @@ -1,10 +1,10 @@ import { Response } from 'node-fetch'; import { beforeEach, describe, expect, it } from 'vitest'; -import type { BackendInterface } from '../src/Backend/Backend'; -import BackendRequest from '../src/Backend/BackendRequest'; -import Component from '../src/Component'; -import { findComponents, getComponent, registerComponent, resetRegistry } from '../src/ComponentRegistry'; -import { noopElementDriver } from './tools'; +import type { BackendInterface } from '../../src/Backend/Backend'; +import BackendRequest from '../../src/Backend/BackendRequest'; +import Component from '../../src/Component'; +import { findComponents, getComponent, registerComponent, resetRegistry } from '../../src/ComponentRegistry'; +import { noopElementDriver } from '../tools'; const createComponent = (element: HTMLElement, name = 'foo-component'): Component => { const backend: BackendInterface = { diff --git a/src/LiveComponent/assets/test/Directive/directives_parser.test.ts b/src/LiveComponent/assets/test/unit/Directive/directives_parser.test.ts similarity index 98% rename from src/LiveComponent/assets/test/Directive/directives_parser.test.ts rename to src/LiveComponent/assets/test/unit/Directive/directives_parser.test.ts index 474a01e5a00..8960871cd0e 100644 --- a/src/LiveComponent/assets/test/Directive/directives_parser.test.ts +++ b/src/LiveComponent/assets/test/unit/Directive/directives_parser.test.ts @@ -1,5 +1,5 @@ import { describe, expect, it } from 'vitest'; -import { type Directive, parseDirectives } from '../../src/Directive/directives_parser'; +import { type Directive, parseDirectives } from '../../../src/Directive/directives_parser'; const assertDirectiveEquals = (actual: Directive, expected: any) => { // normalize this so that it doesn't trip up the comparison diff --git a/src/LiveComponent/assets/test/Directive/get_model_binding.test.ts b/src/LiveComponent/assets/test/unit/Directive/get_model_binding.test.ts similarity index 95% rename from src/LiveComponent/assets/test/Directive/get_model_binding.test.ts rename to src/LiveComponent/assets/test/unit/Directive/get_model_binding.test.ts index a78555afa4b..77da179f75f 100644 --- a/src/LiveComponent/assets/test/Directive/get_model_binding.test.ts +++ b/src/LiveComponent/assets/test/unit/Directive/get_model_binding.test.ts @@ -1,6 +1,6 @@ import { describe, expect, it } from 'vitest'; -import { parseDirectives } from '../../src/Directive/directives_parser'; -import getModelBinding from '../../src/Directive/get_model_binding'; +import { parseDirectives } from '../../../src/Directive/directives_parser'; +import getModelBinding from '../../../src/Directive/get_model_binding'; describe('get_model_binding', () => { it('returns correctly with simple directive', () => { diff --git a/src/LiveComponent/assets/test/Rendering/ChangingItemsTracker.test.ts b/src/LiveComponent/assets/test/unit/Rendering/ChangingItemsTracker.test.ts similarity index 98% rename from src/LiveComponent/assets/test/Rendering/ChangingItemsTracker.test.ts rename to src/LiveComponent/assets/test/unit/Rendering/ChangingItemsTracker.test.ts index 5318ca79b72..700809a7de8 100644 --- a/src/LiveComponent/assets/test/Rendering/ChangingItemsTracker.test.ts +++ b/src/LiveComponent/assets/test/unit/Rendering/ChangingItemsTracker.test.ts @@ -1,5 +1,5 @@ import { describe, expect, it } from 'vitest'; -import ChangingItemsTracker from '../../src/Rendering/ChangingItemsTracker'; +import ChangingItemsTracker from '../../../src/Rendering/ChangingItemsTracker'; describe('ChangingItemsTracker', () => { it('tracks style change red -> blue -> green', async () => { diff --git a/src/LiveComponent/assets/test/Rendering/ElementChanges.test.ts b/src/LiveComponent/assets/test/unit/Rendering/ElementChanges.test.ts similarity index 97% rename from src/LiveComponent/assets/test/Rendering/ElementChanges.test.ts rename to src/LiveComponent/assets/test/unit/Rendering/ElementChanges.test.ts index 7be098039df..54c1ce22e48 100644 --- a/src/LiveComponent/assets/test/Rendering/ElementChanges.test.ts +++ b/src/LiveComponent/assets/test/unit/Rendering/ElementChanges.test.ts @@ -1,5 +1,5 @@ import { describe, expect, it } from 'vitest'; -import ElementChanges from '../../src/Rendering/ElementChanges'; +import ElementChanges from '../../../src/Rendering/ElementChanges'; describe('ElementChanges', () => { it('tracks class additions and removals', async () => { diff --git a/src/LiveComponent/assets/test/Rendering/ExternalMutationTracker.test.ts b/src/LiveComponent/assets/test/unit/Rendering/ExternalMutationTracker.test.ts similarity index 98% rename from src/LiveComponent/assets/test/Rendering/ExternalMutationTracker.test.ts rename to src/LiveComponent/assets/test/unit/Rendering/ExternalMutationTracker.test.ts index 98b882e8af6..5a8084486c3 100644 --- a/src/LiveComponent/assets/test/Rendering/ExternalMutationTracker.test.ts +++ b/src/LiveComponent/assets/test/unit/Rendering/ExternalMutationTracker.test.ts @@ -1,6 +1,6 @@ import { describe, expect, it } from 'vitest'; -import { htmlToElement } from '../../src/dom_utils'; -import ExternalMutationTracker from '../../src/Rendering/ExternalMutationTracker'; +import { htmlToElement } from '../../../src/dom_utils'; +import ExternalMutationTracker from '../../../src/Rendering/ExternalMutationTracker'; const mountElement = (html: string): HTMLElement => { const element = htmlToElement(html); diff --git a/src/LiveComponent/assets/test/UnsyncedInputContainer.test.ts b/src/LiveComponent/assets/test/unit/UnsyncedInputContainer.test.ts similarity index 94% rename from src/LiveComponent/assets/test/UnsyncedInputContainer.test.ts rename to src/LiveComponent/assets/test/unit/UnsyncedInputContainer.test.ts index 245a2eb3e19..33a73354abb 100644 --- a/src/LiveComponent/assets/test/UnsyncedInputContainer.test.ts +++ b/src/LiveComponent/assets/test/unit/UnsyncedInputContainer.test.ts @@ -1,6 +1,6 @@ import { describe, expect, it } from 'vitest'; -import { UnsyncedInputContainer } from '../src/Component/UnsyncedInputsTracker'; -import { htmlToElement } from '../src/dom_utils'; +import { UnsyncedInputContainer } from '../../src/Component/UnsyncedInputsTracker'; +import { htmlToElement } from '../../src/dom_utils'; describe('UnsyncedInputContainer', () => { it('returns items added to it', () => { diff --git a/src/LiveComponent/assets/test/Util/getElementAsTagText.test.ts b/src/LiveComponent/assets/test/unit/Util/getElementAsTagText.test.ts similarity index 81% rename from src/LiveComponent/assets/test/Util/getElementAsTagText.test.ts rename to src/LiveComponent/assets/test/unit/Util/getElementAsTagText.test.ts index da7ba3cf205..2869b00d894 100644 --- a/src/LiveComponent/assets/test/Util/getElementAsTagText.test.ts +++ b/src/LiveComponent/assets/test/unit/Util/getElementAsTagText.test.ts @@ -1,6 +1,6 @@ import { describe, expect, it } from 'vitest'; -import { htmlToElement } from '../../src/dom_utils'; -import getElementAsTagText from '../../src/Util/getElementAsTagText'; +import { htmlToElement } from '../../../src/dom_utils'; +import getElementAsTagText from '../../../src/Util/getElementAsTagText'; describe('getElementAsTagText', () => { it('returns self-closing tag correctly', () => { diff --git a/src/LiveComponent/assets/test/ValueStore.test.ts b/src/LiveComponent/assets/test/unit/ValueStore.test.ts similarity index 99% rename from src/LiveComponent/assets/test/ValueStore.test.ts rename to src/LiveComponent/assets/test/unit/ValueStore.test.ts index bc79641c2f3..975385b8f5b 100644 --- a/src/LiveComponent/assets/test/ValueStore.test.ts +++ b/src/LiveComponent/assets/test/unit/ValueStore.test.ts @@ -1,5 +1,5 @@ import { describe, expect, it } from 'vitest'; -import ValueStore from '../src/Component/ValueStore'; +import ValueStore from '../../src/Component/ValueStore'; describe('ValueStore', () => { const getDataset = [ diff --git a/src/LiveComponent/assets/test/controller/action.test.ts b/src/LiveComponent/assets/test/unit/controller/action.test.ts similarity index 99% rename from src/LiveComponent/assets/test/controller/action.test.ts rename to src/LiveComponent/assets/test/unit/controller/action.test.ts index bbd848980df..56df343eaf4 100644 --- a/src/LiveComponent/assets/test/controller/action.test.ts +++ b/src/LiveComponent/assets/test/unit/controller/action.test.ts @@ -10,7 +10,7 @@ import { getByText, waitFor } from '@testing-library/dom'; import userEvent from '@testing-library/user-event'; import { afterEach, describe, expect, it } from 'vitest'; -import { createTest, initComponent, shutdownTests } from '../tools'; +import { createTest, initComponent, shutdownTests } from '../../tools'; describe('LiveController Action Tests', () => { afterEach(() => { diff --git a/src/LiveComponent/assets/test/controller/basic.test.ts b/src/LiveComponent/assets/test/unit/controller/basic.test.ts similarity index 87% rename from src/LiveComponent/assets/test/controller/basic.test.ts rename to src/LiveComponent/assets/test/unit/controller/basic.test.ts index 2cf516cfd00..5da134cae31 100644 --- a/src/LiveComponent/assets/test/controller/basic.test.ts +++ b/src/LiveComponent/assets/test/unit/controller/basic.test.ts @@ -8,11 +8,11 @@ */ import { afterEach, describe, expect, it } from 'vitest'; -import Component from '../../src/Component'; -import { findComponents } from '../../src/ComponentRegistry'; -import { htmlToElement } from '../../src/dom_utils'; -import { getComponent } from '../../src/live_controller'; -import { createTest, initComponent, shutdownTests, startStimulus } from '../tools'; +import Component from '../../../src/Component'; +import { findComponents } from '../../../src/ComponentRegistry'; +import { htmlToElement } from '../../../src/dom_utils'; +import { getComponent } from '../../../src/live_controller'; +import { createTest, initComponent, shutdownTests, startStimulus } from '../../tools'; describe('LiveController Basic Tests', () => { afterEach(() => { diff --git a/src/LiveComponent/assets/test/controller/child-model.test.ts b/src/LiveComponent/assets/test/unit/controller/child-model.test.ts similarity index 98% rename from src/LiveComponent/assets/test/controller/child-model.test.ts rename to src/LiveComponent/assets/test/unit/controller/child-model.test.ts index 4372fdc91ad..1bf05bcc0eb 100644 --- a/src/LiveComponent/assets/test/controller/child-model.test.ts +++ b/src/LiveComponent/assets/test/unit/controller/child-model.test.ts @@ -10,7 +10,7 @@ import { getByTestId, waitFor } from '@testing-library/dom'; import userEvent from '@testing-library/user-event'; import { afterEach, describe, expect, it } from 'vitest'; -import { createTest, initComponent, shutdownTests } from '../tools'; +import { createTest, initComponent, shutdownTests } from '../../tools'; describe('Component parent -> child data-model binding tests', () => { afterEach(() => { diff --git a/src/LiveComponent/assets/test/controller/child.test.ts b/src/LiveComponent/assets/test/unit/controller/child.test.ts similarity index 99% rename from src/LiveComponent/assets/test/controller/child.test.ts rename to src/LiveComponent/assets/test/unit/controller/child.test.ts index bd767b67713..7dc483ad2fe 100644 --- a/src/LiveComponent/assets/test/controller/child.test.ts +++ b/src/LiveComponent/assets/test/unit/controller/child.test.ts @@ -11,7 +11,7 @@ import { Controller } from '@hotwired/stimulus'; import { getByTestId, waitFor } from '@testing-library/dom'; import userEvent from '@testing-library/user-event'; import { afterEach, describe, expect, it } from 'vitest'; -import { findChildren } from '../../src/ComponentRegistry'; +import { findChildren } from '../../../src/ComponentRegistry'; import { createTest, createTestForExistingComponent, @@ -20,7 +20,7 @@ import { getStimulusApplication, initComponent, shutdownTests, -} from '../tools'; +} from '../../tools'; describe('Component parent -> child initialization and rendering tests', () => { afterEach(() => { diff --git a/src/LiveComponent/assets/test/controller/dispatch-event.test.ts b/src/LiveComponent/assets/test/unit/controller/dispatch-event.test.ts similarity index 94% rename from src/LiveComponent/assets/test/controller/dispatch-event.test.ts rename to src/LiveComponent/assets/test/unit/controller/dispatch-event.test.ts index f56cf2fc47d..4f416748105 100644 --- a/src/LiveComponent/assets/test/controller/dispatch-event.test.ts +++ b/src/LiveComponent/assets/test/unit/controller/dispatch-event.test.ts @@ -8,7 +8,7 @@ */ import { afterEach, describe, expect, it } from 'vitest'; -import { createTest, initComponent, shutdownTests } from '../tools'; +import { createTest, initComponent, shutdownTests } from '../../tools'; describe('LiveController Event Dispatching Tests', () => { afterEach(() => { diff --git a/src/LiveComponent/assets/test/controller/emit.test.ts b/src/LiveComponent/assets/test/unit/controller/emit.test.ts similarity index 98% rename from src/LiveComponent/assets/test/controller/emit.test.ts rename to src/LiveComponent/assets/test/unit/controller/emit.test.ts index 2794c880496..c6a5c648f78 100644 --- a/src/LiveComponent/assets/test/controller/emit.test.ts +++ b/src/LiveComponent/assets/test/unit/controller/emit.test.ts @@ -9,7 +9,7 @@ import { getByText, waitFor } from '@testing-library/dom'; import { afterEach, describe, expect, it } from 'vitest'; -import { createTest, initComponent, shutdownTests } from '../tools'; +import { createTest, initComponent, shutdownTests } from '../../tools'; describe('LiveController Emit Tests', () => { afterEach(() => { diff --git a/src/LiveComponent/assets/test/controller/error.test.ts b/src/LiveComponent/assets/test/unit/controller/error.test.ts similarity index 96% rename from src/LiveComponent/assets/test/controller/error.test.ts rename to src/LiveComponent/assets/test/unit/controller/error.test.ts index d8447e7b218..875a4d29abc 100644 --- a/src/LiveComponent/assets/test/controller/error.test.ts +++ b/src/LiveComponent/assets/test/unit/controller/error.test.ts @@ -9,8 +9,8 @@ import { getByText, waitFor } from '@testing-library/dom'; import { afterEach, describe, expect, it } from 'vitest'; -import type BackendResponse from '../../src/Backend/BackendResponse'; -import { createTest, initComponent, shutdownTests } from '../tools'; +import type BackendResponse from '../../../src/Backend/BackendResponse'; +import { createTest, initComponent, shutdownTests } from '../../tools'; const getErrorElement = (): Element | null => { return document.getElementById('live-component-error'); diff --git a/src/LiveComponent/assets/test/controller/loading.test.ts b/src/LiveComponent/assets/test/unit/controller/loading.test.ts similarity index 98% rename from src/LiveComponent/assets/test/controller/loading.test.ts rename to src/LiveComponent/assets/test/unit/controller/loading.test.ts index 47d8907792c..e97eaa8d05f 100644 --- a/src/LiveComponent/assets/test/controller/loading.test.ts +++ b/src/LiveComponent/assets/test/unit/controller/loading.test.ts @@ -10,7 +10,7 @@ import { getByTestId, getByText, waitFor } from '@testing-library/dom'; import userEvent from '@testing-library/user-event'; import { afterEach, describe, expect, it } from 'vitest'; -import { createTest, initComponent, shutdownTests } from '../tools'; +import { createTest, initComponent, shutdownTests } from '../../tools'; describe('LiveController data-loading Tests', () => { afterEach(() => { @@ -167,7 +167,7 @@ describe('LiveController data-loading Tests', () => { // delay so we can check loading .delayResponse(50); - userEvent.type(test.queryByDataModel('user.email'), 'ryan@symfonycasts.com'); + await userEvent.type(test.queryByDataModel('user.email'), 'ryan@symfonycasts.com'); // it should not be loading yet due to debouncing expect(getByTestId(test.element, 'email-loading')).not.toBeVisible(); // wait for ajax call to start diff --git a/src/LiveComponent/assets/test/controller/model.test.ts b/src/LiveComponent/assets/test/unit/controller/model.test.ts similarity index 99% rename from src/LiveComponent/assets/test/controller/model.test.ts rename to src/LiveComponent/assets/test/unit/controller/model.test.ts index 085f2761341..d71938581b5 100644 --- a/src/LiveComponent/assets/test/controller/model.test.ts +++ b/src/LiveComponent/assets/test/unit/controller/model.test.ts @@ -10,7 +10,7 @@ import { getByLabelText, getByTestId, getByText, waitFor } from '@testing-library/dom'; import userEvent from '@testing-library/user-event'; import { afterEach, describe, expect, it } from 'vitest'; -import { createTest, initComponent, shutdownTests } from '../tools'; +import { createTest, initComponent, shutdownTests } from '../../tools'; describe('LiveController data-model Tests', () => { afterEach(() => { @@ -835,7 +835,7 @@ describe('LiveController data-model Tests', () => { commentField.dispatchEvent(new Event('input', { bubbles: true })); // also type into the unmapped field - but no worry about the model sync'ing this time - userEvent.type(getByTestId(test.element, 'unmappedTextarea'), ' here!'); + await userEvent.type(getByTestId(test.element, 'unmappedTextarea'), ' here!'); await waitFor(() => expect(test.element).toHaveTextContent('FieldClass: changed-class')); // re-find in case the element itself has changed by morphdom diff --git a/src/LiveComponent/assets/test/controller/poll.test.ts b/src/LiveComponent/assets/test/unit/controller/poll.test.ts similarity index 98% rename from src/LiveComponent/assets/test/controller/poll.test.ts rename to src/LiveComponent/assets/test/unit/controller/poll.test.ts index d45a5b4ca19..7ecadc5d37a 100644 --- a/src/LiveComponent/assets/test/controller/poll.test.ts +++ b/src/LiveComponent/assets/test/unit/controller/poll.test.ts @@ -10,7 +10,7 @@ import { waitFor } from '@testing-library/dom'; import userEvent from '@testing-library/user-event'; import { afterEach, describe, expect, it } from 'vitest'; -import { createTest, initComponent, shutdownTests } from '../tools'; +import { createTest, initComponent, shutdownTests } from '../../tools'; describe('LiveController polling Tests', () => { afterEach(() => { diff --git a/src/LiveComponent/assets/test/controller/query-binding.test.ts b/src/LiveComponent/assets/test/unit/controller/query-binding.test.ts similarity index 99% rename from src/LiveComponent/assets/test/controller/query-binding.test.ts rename to src/LiveComponent/assets/test/unit/controller/query-binding.test.ts index b20c5846c2e..792c086ed7f 100644 --- a/src/LiveComponent/assets/test/controller/query-binding.test.ts +++ b/src/LiveComponent/assets/test/unit/controller/query-binding.test.ts @@ -9,7 +9,7 @@ import { getByText, waitFor } from '@testing-library/dom'; import { afterEach, describe, expect, it } from 'vitest'; -import { createTest, expectCurrentSearch, initComponent, setCurrentSearch, shutdownTests } from '../tools'; +import { createTest, expectCurrentSearch, initComponent, setCurrentSearch, shutdownTests } from '../../tools'; describe('LiveController query string binding', () => { afterEach(() => { diff --git a/src/LiveComponent/assets/test/controller/render-with-external-changes.test.ts b/src/LiveComponent/assets/test/unit/controller/render-with-external-changes.test.ts similarity index 98% rename from src/LiveComponent/assets/test/controller/render-with-external-changes.test.ts rename to src/LiveComponent/assets/test/unit/controller/render-with-external-changes.test.ts index b5046e0ee6c..73ea0d4fa37 100644 --- a/src/LiveComponent/assets/test/controller/render-with-external-changes.test.ts +++ b/src/LiveComponent/assets/test/unit/controller/render-with-external-changes.test.ts @@ -9,8 +9,8 @@ import { getByTestId } from '@testing-library/dom'; import { afterEach, describe, expect, it } from 'vitest'; -import { htmlToElement } from '../../src/dom_utils'; -import { createTest, initComponent, shutdownTests } from '../tools'; +import { htmlToElement } from '../../../src/dom_utils'; +import { createTest, initComponent, shutdownTests } from '../../tools'; describe('LiveController rendering with external changes tests', () => { afterEach(() => { diff --git a/src/LiveComponent/assets/test/controller/render.test.ts b/src/LiveComponent/assets/test/unit/controller/render.test.ts similarity index 99% rename from src/LiveComponent/assets/test/controller/render.test.ts rename to src/LiveComponent/assets/test/unit/controller/render.test.ts index 1f69026f45e..b05d3d2f3ba 100644 --- a/src/LiveComponent/assets/test/controller/render.test.ts +++ b/src/LiveComponent/assets/test/unit/controller/render.test.ts @@ -10,8 +10,8 @@ import { getByTestId, getByText, waitFor } from '@testing-library/dom'; import userEvent from '@testing-library/user-event'; import { afterEach, describe, expect, it } from 'vitest'; -import { htmlToElement } from '../../src/dom_utils'; -import { createTest, initComponent, shutdownTests } from '../tools'; +import { htmlToElement } from '../../../src/dom_utils'; +import { createTest, initComponent, shutdownTests } from '../../tools'; describe('LiveController rendering Tests', () => { afterEach(() => { diff --git a/src/LiveComponent/assets/test/dom_utils.test.ts b/src/LiveComponent/assets/test/unit/dom_utils.test.ts similarity index 98% rename from src/LiveComponent/assets/test/dom_utils.test.ts rename to src/LiveComponent/assets/test/unit/dom_utils.test.ts index 8eb62921c73..e5c9613555e 100644 --- a/src/LiveComponent/assets/test/dom_utils.test.ts +++ b/src/LiveComponent/assets/test/unit/dom_utils.test.ts @@ -1,7 +1,7 @@ import { describe, expect, it } from 'vitest'; -import Backend from '../src/Backend/Backend'; -import Component from '../src/Component'; -import ValueStore from '../src/Component/ValueStore'; +import Backend from '../../src/Backend/Backend'; +import Component from '../../src/Component'; +import ValueStore from '../../src/Component/ValueStore'; import { cloneHTMLElement, elementBelongsToThisComponent, @@ -12,8 +12,8 @@ import { isTextareaElement, isTextualInputElement, setValueOnElement, -} from '../src/dom_utils'; -import { noopElementDriver } from './tools'; +} from '../../src/dom_utils'; +import { noopElementDriver } from '../tools'; const createStore = (props: any = {}): ValueStore => new ValueStore(props); diff --git a/src/LiveComponent/assets/test/normalize_attributes_for_comparison.test.ts b/src/LiveComponent/assets/test/unit/normalize_attributes_for_comparison.test.ts similarity index 93% rename from src/LiveComponent/assets/test/normalize_attributes_for_comparison.test.ts rename to src/LiveComponent/assets/test/unit/normalize_attributes_for_comparison.test.ts index 0b2e8022c06..28d3281c00c 100644 --- a/src/LiveComponent/assets/test/normalize_attributes_for_comparison.test.ts +++ b/src/LiveComponent/assets/test/unit/normalize_attributes_for_comparison.test.ts @@ -1,6 +1,6 @@ import { describe, expect, it } from 'vitest'; -import { htmlToElement } from '../src/dom_utils'; -import { normalizeAttributesForComparison } from '../src/normalize_attributes_for_comparison'; +import { htmlToElement } from '../../src/dom_utils'; +import { normalizeAttributesForComparison } from '../../src/normalize_attributes_for_comparison'; describe('normalizeAttributesForComparison', () => { it('makes no changes if value and attribute not set', () => { diff --git a/src/LiveComponent/assets/test/string_utils.test.ts b/src/LiveComponent/assets/test/unit/string_utils.test.ts similarity index 92% rename from src/LiveComponent/assets/test/string_utils.test.ts rename to src/LiveComponent/assets/test/unit/string_utils.test.ts index 25d44e9a187..d2ce885faa7 100644 --- a/src/LiveComponent/assets/test/string_utils.test.ts +++ b/src/LiveComponent/assets/test/unit/string_utils.test.ts @@ -1,5 +1,5 @@ import { describe, expect, it } from 'vitest'; -import { combineSpacedArray, normalizeModelName } from '../src/string_utils'; +import { combineSpacedArray, normalizeModelName } from '../../src/string_utils'; describe('combinedSpacedArray', () => { it('parse normal array', () => { diff --git a/src/LiveComponent/assets/vitest.config.browser.mjs b/src/LiveComponent/assets/vitest.config.browser.mjs new file mode 100644 index 00000000000..cedcfabb90e --- /dev/null +++ b/src/LiveComponent/assets/vitest.config.browser.mjs @@ -0,0 +1,4 @@ +import { mergeConfig } from 'vitest/config'; +import configShared from '../../../vitest.config.browser.mjs'; + +export default mergeConfig(configShared, {}); diff --git a/src/LiveComponent/assets/vitest.config.unit.mjs b/src/LiveComponent/assets/vitest.config.unit.mjs new file mode 100644 index 00000000000..3a6751f8a05 --- /dev/null +++ b/src/LiveComponent/assets/vitest.config.unit.mjs @@ -0,0 +1,4 @@ +import { mergeConfig } from 'vitest/config'; +import configShared from '../../../vitest.config.unit.mjs'; + +export default mergeConfig(configShared, {}); diff --git a/src/Map/assets/package.json b/src/Map/assets/package.json index f26539550b2..f7b874fe02d 100644 --- a/src/Map/assets/package.json +++ b/src/Map/assets/package.json @@ -21,7 +21,8 @@ "scripts": { "build": "tsx ../../../bin/build_package.ts .", "watch": "tsx ../../../bin/build_package.ts . --watch", - "test": "../../../bin/test_package.sh .", + "test": "pnpm run test:unit", + "test:unit": "../../../bin/test_package.sh . --unit", "check": "biome check", "ci": "biome ci" }, diff --git a/src/Map/assets/test/abstract_map_controller.test.ts b/src/Map/assets/test/unit/abstract_map_controller.test.ts similarity index 98% rename from src/Map/assets/test/abstract_map_controller.test.ts rename to src/Map/assets/test/unit/abstract_map_controller.test.ts index df69ec57a0b..3efcdcc79d8 100644 --- a/src/Map/assets/test/abstract_map_controller.test.ts +++ b/src/Map/assets/test/unit/abstract_map_controller.test.ts @@ -1,8 +1,8 @@ import { Application } from '@hotwired/stimulus'; import { getByTestId, waitFor } from '@testing-library/dom'; import { afterEach, beforeEach, describe, expect, it } from 'vitest'; -import { clearDOM, mountDOM } from '../../../../test/stimulus-helpers'; -import AbstractMapController from '../src/abstract_map_controller.ts'; +import { clearDOM, mountDOM } from '../../../../../test/stimulus-helpers'; +import AbstractMapController from '../../src/abstract_map_controller.ts'; class MyMapController extends AbstractMapController { protected dispatchEvent(name: string, payload: Record = {}): void { diff --git a/src/Map/assets/vitest.config.unit.mjs b/src/Map/assets/vitest.config.unit.mjs new file mode 100644 index 00000000000..3a6751f8a05 --- /dev/null +++ b/src/Map/assets/vitest.config.unit.mjs @@ -0,0 +1,4 @@ +import { mergeConfig } from 'vitest/config'; +import configShared from '../../../vitest.config.unit.mjs'; + +export default mergeConfig(configShared, {}); diff --git a/src/Map/src/Bridge/Google/assets/package.json b/src/Map/src/Bridge/Google/assets/package.json index d653613806e..285093d8d05 100644 --- a/src/Map/src/Bridge/Google/assets/package.json +++ b/src/Map/src/Bridge/Google/assets/package.json @@ -19,7 +19,8 @@ "scripts": { "build": "tsx ../../../../../../bin/build_package.ts .", "watch": "tsx ../../../../../../bin/build_package.ts . --watch", - "test": "../../../../../../bin/test_package.sh .", + "test": "pnpm run test:browser", + "test:browser": "../../../../../../bin/test_package.sh . --browser", "check": "biome check", "ci": "biome ci" }, diff --git a/src/Map/src/Bridge/Google/assets/test/map_controller.test.ts b/src/Map/src/Bridge/Google/assets/test/browser/map_controller.test.ts similarity index 95% rename from src/Map/src/Bridge/Google/assets/test/map_controller.test.ts rename to src/Map/src/Bridge/Google/assets/test/browser/map_controller.test.ts index 3bd69aaa106..8e0f3392c62 100644 --- a/src/Map/src/Bridge/Google/assets/test/map_controller.test.ts +++ b/src/Map/src/Bridge/Google/assets/test/browser/map_controller.test.ts @@ -10,8 +10,8 @@ import { Application, Controller } from '@hotwired/stimulus'; import { getByTestId, waitFor } from '@testing-library/dom'; import { afterEach, beforeEach, describe, expect, it } from 'vitest'; -import { clearDOM, mountDOM } from '../../../../../../../test/stimulus-helpers'; -import GoogleController from '../src/map_controller'; +import { clearDOM, mountDOM } from '../../../../../../../../test/stimulus-helpers'; +import GoogleController from '../../src/map_controller'; // Controller used to check the actual controller was properly booted class CheckController extends Controller { diff --git a/src/Map/src/Bridge/Google/assets/vitest.config.browser.mjs b/src/Map/src/Bridge/Google/assets/vitest.config.browser.mjs new file mode 100644 index 00000000000..50065a16217 --- /dev/null +++ b/src/Map/src/Bridge/Google/assets/vitest.config.browser.mjs @@ -0,0 +1,10 @@ +import { mergeConfig } from 'vitest/config'; +import configShared from '../../../../../../vitest.config.browser.mjs'; + +export default mergeConfig(configShared, { + resolve: { + alias: { + '@symfony/ux-map': __dirname + '/../../../../assets/src/abstract_map_controller.ts', + }, + }, +}); diff --git a/src/Map/src/Bridge/Google/assets/vitest.config.mjs b/src/Map/src/Bridge/Google/assets/vitest.config.mjs deleted file mode 100644 index 322fec67d65..00000000000 --- a/src/Map/src/Bridge/Google/assets/vitest.config.mjs +++ /dev/null @@ -1,29 +0,0 @@ -import { defineConfig, mergeConfig } from 'vitest/config'; -import configShared from '../../../../../../vitest.config.mjs' - -export default mergeConfig( - configShared, - defineConfig({ - resolve: { - alias: { - '@symfony/ux-map': __dirname + '/../../../../assets/src/abstract_map_controller.ts', - }, - }, - define: { - // Prevent the following error: - // ReferenceError: global is not defined - // ❯ ../../../../../../node_modules/pretty-format/build/plugins/AsymmetricMatcher.js ../../../../../../../../../../node_modules/.vite/deps/@testing-library_dom.js:139:19 - // ❯ ../../../../../../node_modules/pretty-format/build/index.js ../../../../../../../../../../node_modules/.vite/deps/@testing-library_dom.js:805:7 - // ❯ ../../../../../../../../../../node_modules/.vite/deps/@testing-library_dom.js:13445:36 - global: {} - }, - test: { - browser: { - enabled: true, - provider: 'playwright', // or 'webdriverio' - instances: [{ browser: 'chromium' }], - headless: true, - }, - }, - }) -); diff --git a/src/Map/src/Bridge/Leaflet/assets/package.json b/src/Map/src/Bridge/Leaflet/assets/package.json index 45687c287b3..9f2f0bff9ac 100644 --- a/src/Map/src/Bridge/Leaflet/assets/package.json +++ b/src/Map/src/Bridge/Leaflet/assets/package.json @@ -19,7 +19,8 @@ "scripts": { "build": "tsx ../../../../../../bin/build_package.ts .", "watch": "tsx ../../../../../../bin/build_package.ts . --watch", - "test": "../../../../../../bin/test_package.sh .", + "test": "pnpm run test:browser", + "test:browser": "../../../../../../bin/test_package.sh . --browser", "check": "biome check", "ci": "biome ci" }, diff --git a/src/Map/src/Bridge/Leaflet/assets/test/map_controller.test.ts b/src/Map/src/Bridge/Leaflet/assets/test/browser/map_controller.test.ts similarity index 95% rename from src/Map/src/Bridge/Leaflet/assets/test/map_controller.test.ts rename to src/Map/src/Bridge/Leaflet/assets/test/browser/map_controller.test.ts index bec0b43c7c2..ec0fddc911f 100644 --- a/src/Map/src/Bridge/Leaflet/assets/test/map_controller.test.ts +++ b/src/Map/src/Bridge/Leaflet/assets/test/browser/map_controller.test.ts @@ -10,8 +10,8 @@ import { Application, Controller } from '@hotwired/stimulus'; import { getByTestId, waitFor } from '@testing-library/dom'; import { afterEach, beforeEach, describe, expect, it } from 'vitest'; -import { clearDOM, mountDOM } from '../../../../../../../test/stimulus-helpers'; -import LeafletController from '../src/map_controller'; +import { clearDOM, mountDOM } from '../../../../../../../../test/stimulus-helpers'; +import LeafletController from '../../src/map_controller'; // Controller used to check the actual controller was properly booted class CheckController extends Controller { diff --git a/src/Map/src/Bridge/Leaflet/assets/vitest.config.browser.mjs b/src/Map/src/Bridge/Leaflet/assets/vitest.config.browser.mjs new file mode 100644 index 00000000000..70b5eee1665 --- /dev/null +++ b/src/Map/src/Bridge/Leaflet/assets/vitest.config.browser.mjs @@ -0,0 +1,11 @@ +import { mergeConfig } from 'vitest/config'; +import configShared from '../../../../../../vitest.config.browser.mjs'; + +export default mergeConfig(configShared, { + resolve: { + alias: { + '@symfony/ux-map': __dirname + '/../../../../assets/src/abstract_map_controller.ts', + 'leaflet/dist/leaflet.min.css': 'leaflet/dist/leaflet.css', + }, + }, +}); diff --git a/src/Map/src/Bridge/Leaflet/assets/vitest.config.mjs b/src/Map/src/Bridge/Leaflet/assets/vitest.config.mjs deleted file mode 100644 index 6608ca5f733..00000000000 --- a/src/Map/src/Bridge/Leaflet/assets/vitest.config.mjs +++ /dev/null @@ -1,30 +0,0 @@ -import { defineConfig, mergeConfig } from 'vitest/config'; -import configShared from '../../../../../../vitest.config.mjs' - -export default mergeConfig( - configShared, - defineConfig({ - resolve: { - alias: { - '@symfony/ux-map': __dirname + '/../../../../assets/src/abstract_map_controller.ts', - 'leaflet/dist/leaflet.min.css': 'leaflet/dist/leaflet.css', - }, - }, - define: { - // Prevent the following error: - // ReferenceError: global is not defined - // ❯ ../../../../../../node_modules/pretty-format/build/plugins/AsymmetricMatcher.js ../../../../../../../../../../node_modules/.vite/deps/@testing-library_dom.js:139:19 - // ❯ ../../../../../../node_modules/pretty-format/build/index.js ../../../../../../../../../../node_modules/.vite/deps/@testing-library_dom.js:805:7 - // ❯ ../../../../../../../../../../node_modules/.vite/deps/@testing-library_dom.js:13445:36 - global: {} - }, - test: { - browser: { - enabled: true, - provider: 'playwright', // or 'webdriverio' - instances: [{ browser: 'chromium' }], - headless: true, - }, - }, - }) -); diff --git a/src/Notify/assets/package.json b/src/Notify/assets/package.json index e78a4d84462..41d5d0335c5 100644 --- a/src/Notify/assets/package.json +++ b/src/Notify/assets/package.json @@ -17,7 +17,9 @@ "scripts": { "build": "tsx ../../../bin/build_package.ts .", "watch": "tsx ../../../bin/build_package.ts . --watch", - "test": "../../../bin/test_package.sh .", + "test": "pnpm run test:unit && pnpm run test:browser", + "test:unit": "../../../bin/test_package.sh . --unit", + "test:browser": "../../../bin/test_package.sh . --browser", "check": "biome check", "ci": "biome ci" }, diff --git a/src/Notify/assets/test/browser/placeholder.test.ts b/src/Notify/assets/test/browser/placeholder.test.ts new file mode 100644 index 00000000000..034d90eb9e8 --- /dev/null +++ b/src/Notify/assets/test/browser/placeholder.test.ts @@ -0,0 +1,7 @@ +import { describe, expect, it } from 'vitest'; + +describe('Placeholder', () => { + it('pass', () => { + expect(true).toBe(true); + }); +}); diff --git a/src/Notify/assets/test/controller.test.ts b/src/Notify/assets/test/unit/controller.test.ts similarity index 95% rename from src/Notify/assets/test/controller.test.ts rename to src/Notify/assets/test/unit/controller.test.ts index 52e613bcd7f..7bde5c77c2b 100644 --- a/src/Notify/assets/test/controller.test.ts +++ b/src/Notify/assets/test/unit/controller.test.ts @@ -10,8 +10,8 @@ import { Application, Controller } from '@hotwired/stimulus'; import { getByTestId, waitFor } from '@testing-library/dom'; import { afterEach, describe, expect, it, vi } from 'vitest'; -import { clearDOM, mountDOM } from '../../../../test/stimulus-helpers'; -import NotifyController from '../src/controller'; +import { clearDOM, mountDOM } from '../../../../../test/stimulus-helpers'; +import NotifyController from '../../src/controller'; // Controller used to check the actual controller was properly booted class CheckController extends Controller { diff --git a/src/Notify/assets/vitest.config.browser.mjs b/src/Notify/assets/vitest.config.browser.mjs new file mode 100644 index 00000000000..cedcfabb90e --- /dev/null +++ b/src/Notify/assets/vitest.config.browser.mjs @@ -0,0 +1,4 @@ +import { mergeConfig } from 'vitest/config'; +import configShared from '../../../vitest.config.browser.mjs'; + +export default mergeConfig(configShared, {}); diff --git a/src/Notify/assets/vitest.config.unit.mjs b/src/Notify/assets/vitest.config.unit.mjs new file mode 100644 index 00000000000..3a6751f8a05 --- /dev/null +++ b/src/Notify/assets/vitest.config.unit.mjs @@ -0,0 +1,4 @@ +import { mergeConfig } from 'vitest/config'; +import configShared from '../../../vitest.config.unit.mjs'; + +export default mergeConfig(configShared, {}); diff --git a/src/React/assets/package.json b/src/React/assets/package.json index 07df1dcd609..23724a5229b 100644 --- a/src/React/assets/package.json +++ b/src/React/assets/package.json @@ -17,7 +17,9 @@ "scripts": { "build": "tsx ../../../bin/build_package.ts .", "watch": "tsx ../../../bin/build_package.ts . --watch", - "test": "../../../bin/test_package.sh .", + "test": "pnpm run test:unit && pnpm run test:browser", + "test:unit": "../../../bin/test_package.sh . --unit", + "test:browser": "../../../bin/test_package.sh . --browser", "check": "biome check", "ci": "biome ci" }, diff --git a/src/React/assets/test/browser/placeholder.test.ts b/src/React/assets/test/browser/placeholder.test.ts new file mode 100644 index 00000000000..034d90eb9e8 --- /dev/null +++ b/src/React/assets/test/browser/placeholder.test.ts @@ -0,0 +1,7 @@ +import { describe, expect, it } from 'vitest'; + +describe('Placeholder', () => { + it('pass', () => { + expect(true).toBe(true); + }); +}); diff --git a/src/React/assets/test/register_controller.test.tsx b/src/React/assets/test/unit/register_controller.test.tsx similarity index 91% rename from src/React/assets/test/register_controller.test.tsx rename to src/React/assets/test/unit/register_controller.test.tsx index 75e90e6efac..7b6dccccbd4 100644 --- a/src/React/assets/test/register_controller.test.tsx +++ b/src/React/assets/test/unit/register_controller.test.tsx @@ -8,10 +8,10 @@ */ import { describe, expect, it } from 'vitest'; -import { registerReactControllerComponents } from '../src/register_controller'; +import { registerReactControllerComponents } from '../../src/register_controller'; // @ts-ignore -import MyJsxComponent from './fixtures/MyJsxComponent'; -import MyTsxComponent from './fixtures/MyTsxComponent'; +import MyJsxComponent from '../fixtures/MyJsxComponent'; +import MyTsxComponent from '../fixtures/MyTsxComponent'; import RequireContext = __WebpackModuleApi.RequireContext; diff --git a/src/React/assets/test/render_controller.test.tsx b/src/React/assets/test/unit/render_controller.test.tsx similarity index 95% rename from src/React/assets/test/render_controller.test.tsx rename to src/React/assets/test/unit/render_controller.test.tsx index cb9aaa5be53..feafe10de8b 100644 --- a/src/React/assets/test/render_controller.test.tsx +++ b/src/React/assets/test/unit/render_controller.test.tsx @@ -10,8 +10,8 @@ import { Application, Controller } from '@hotwired/stimulus'; import { getByTestId, waitFor } from '@testing-library/dom'; import { describe, expect, it } from 'vitest'; -import { clearDOM, mountDOM } from '../../../../test/stimulus-helpers'; -import ReactController from '../src/render_controller'; +import { clearDOM, mountDOM } from '../../../../../test/stimulus-helpers'; +import ReactController from '../../src/render_controller'; // Controller used to check the actual controller was properly booted class CheckController extends Controller { diff --git a/src/React/assets/vitest.config.browser.mjs b/src/React/assets/vitest.config.browser.mjs new file mode 100644 index 00000000000..cedcfabb90e --- /dev/null +++ b/src/React/assets/vitest.config.browser.mjs @@ -0,0 +1,4 @@ +import { mergeConfig } from 'vitest/config'; +import configShared from '../../../vitest.config.browser.mjs'; + +export default mergeConfig(configShared, {}); diff --git a/src/React/assets/vitest.config.mjs b/src/React/assets/vitest.config.mjs deleted file mode 100644 index a344f1fefcd..00000000000 --- a/src/React/assets/vitest.config.mjs +++ /dev/null @@ -1,11 +0,0 @@ -// vitest.config.ts -import { defineConfig, mergeConfig } from 'vitest/config'; -import react from '@vitejs/plugin-react'; -import configShared from '../../../vitest.config.mjs' - -export default mergeConfig( - configShared, - defineConfig({ - plugins: [react()], - }) -); diff --git a/src/React/assets/vitest.config.unit.mjs b/src/React/assets/vitest.config.unit.mjs new file mode 100644 index 00000000000..eef0b5cf068 --- /dev/null +++ b/src/React/assets/vitest.config.unit.mjs @@ -0,0 +1,7 @@ +import react from '@vitejs/plugin-react'; +import { mergeConfig } from 'vitest/config'; +import configShared from '../../../vitest.config.unit.mjs'; + +export default mergeConfig(configShared, { + plugins: [react()], +}); diff --git a/src/StimulusBundle/assets/package.json b/src/StimulusBundle/assets/package.json index d59918b7ba0..327d046bce3 100644 --- a/src/StimulusBundle/assets/package.json +++ b/src/StimulusBundle/assets/package.json @@ -17,7 +17,8 @@ "scripts": { "build": "tsx ../../../bin/build_package.ts .", "watch": "tsx ../../../bin/build_package.ts . --watch", - "test": "../../../bin/test_package.sh .", + "test": "pnpm run test:unit && pnpm run test:browser", + "test:unit": "../../../bin/test_package.sh . --unit", "check": "biome check", "ci": "biome ci" }, diff --git a/src/StimulusBundle/assets/test/loader.test.ts b/src/StimulusBundle/assets/test/unit/loader.test.ts similarity index 95% rename from src/StimulusBundle/assets/test/loader.test.ts rename to src/StimulusBundle/assets/test/unit/loader.test.ts index 528758cd4d3..f99910ca5e3 100644 --- a/src/StimulusBundle/assets/test/loader.test.ts +++ b/src/StimulusBundle/assets/test/unit/loader.test.ts @@ -3,8 +3,8 @@ import { waitFor } from '@testing-library/dom'; import { describe, expect, it } from 'vitest'; // load from dist because the source TypeScript file points directly to controllers.js, // which does not actually exist in the source code -import { loadControllers } from '../dist/loader'; -import type { EagerControllersCollection, LazyControllersCollection } from '../src/controllers'; +import { loadControllers } from '../../dist/loader'; +import type { EagerControllersCollection, LazyControllersCollection } from '../../src/controllers'; let isController1Initialized = false; let isController2Initialized = false; diff --git a/src/StimulusBundle/assets/vitest.config.unit.mjs b/src/StimulusBundle/assets/vitest.config.unit.mjs new file mode 100644 index 00000000000..3a6751f8a05 --- /dev/null +++ b/src/StimulusBundle/assets/vitest.config.unit.mjs @@ -0,0 +1,4 @@ +import { mergeConfig } from 'vitest/config'; +import configShared from '../../../vitest.config.unit.mjs'; + +export default mergeConfig(configShared, {}); diff --git a/src/Svelte/assets/package.json b/src/Svelte/assets/package.json index daae47c705e..b0d9f6ca53f 100644 --- a/src/Svelte/assets/package.json +++ b/src/Svelte/assets/package.json @@ -16,7 +16,9 @@ "scripts": { "build": "tsx ../../../bin/build_package.ts .", "watch": "tsx ../../../bin/build_package.ts . --watch", - "test": "../../../bin/test_package.sh .", + "test": "pnpm run test:unit && pnpm run test:browser", + "test:unit": "../../../bin/test_package.sh . --unit", + "test:browser": "../../../bin/test_package.sh . --browser", "check": "biome check", "ci": "biome ci" }, diff --git a/src/Svelte/assets/test/browser/placeholder.test.ts b/src/Svelte/assets/test/browser/placeholder.test.ts new file mode 100644 index 00000000000..034d90eb9e8 --- /dev/null +++ b/src/Svelte/assets/test/browser/placeholder.test.ts @@ -0,0 +1,7 @@ +import { describe, expect, it } from 'vitest'; + +describe('Placeholder', () => { + it('pass', () => { + expect(true).toBe(true); + }); +}); diff --git a/src/Svelte/assets/test/register_controller.test.ts b/src/Svelte/assets/test/unit/register_controller.test.ts similarity index 88% rename from src/Svelte/assets/test/register_controller.test.ts rename to src/Svelte/assets/test/unit/register_controller.test.ts index 8f5ca388bfa..048d5ff2f31 100644 --- a/src/Svelte/assets/test/register_controller.test.ts +++ b/src/Svelte/assets/test/unit/register_controller.test.ts @@ -8,8 +8,8 @@ */ import { describe, expect, it } from 'vitest'; -import { registerSvelteControllerComponents } from '../src/register_controller'; -import MyComponent from './fixtures/MyComponent.svelte'; +import { registerSvelteControllerComponents } from '../../src/register_controller'; +import MyComponent from '../fixtures/MyComponent.svelte'; import RequireContext = __WebpackModuleApi.RequireContext; diff --git a/src/Svelte/assets/test/render_controller.test.ts b/src/Svelte/assets/test/unit/render_controller.test.ts similarity index 95% rename from src/Svelte/assets/test/render_controller.test.ts rename to src/Svelte/assets/test/unit/render_controller.test.ts index bede47dd9c7..1d6d78fb17e 100644 --- a/src/Svelte/assets/test/render_controller.test.ts +++ b/src/Svelte/assets/test/unit/render_controller.test.ts @@ -10,9 +10,9 @@ import { Application, Controller } from '@hotwired/stimulus'; import { getByTestId, waitFor } from '@testing-library/dom'; import { afterEach, describe, expect, it } from 'vitest'; -import { clearDOM, mountDOM } from '../../../../test/stimulus-helpers'; -import SvelteController from '../src/render_controller'; -import MyComponent from './fixtures/MyComponent.svelte'; +import { clearDOM, mountDOM } from '../../../../../test/stimulus-helpers'; +import SvelteController from '../../src/render_controller'; +import MyComponent from '../fixtures/MyComponent.svelte'; // Controller used to check the actual controller was properly booted class CheckController extends Controller { diff --git a/src/Svelte/assets/vitest.config.browser.mjs b/src/Svelte/assets/vitest.config.browser.mjs new file mode 100644 index 00000000000..cedcfabb90e --- /dev/null +++ b/src/Svelte/assets/vitest.config.browser.mjs @@ -0,0 +1,4 @@ +import { mergeConfig } from 'vitest/config'; +import configShared from '../../../vitest.config.browser.mjs'; + +export default mergeConfig(configShared, {}); diff --git a/src/Svelte/assets/vitest.config.mjs b/src/Svelte/assets/vitest.config.mjs deleted file mode 100644 index 2400e2a19a9..00000000000 --- a/src/Svelte/assets/vitest.config.mjs +++ /dev/null @@ -1,11 +0,0 @@ -// vitest.config.ts -import { defineConfig, mergeConfig } from 'vitest/config'; -import { svelte } from '@sveltejs/vite-plugin-svelte'; -import configShared from '../../../vitest.config.mjs' - -export default mergeConfig( - configShared, - defineConfig({ - plugins: [svelte()], - }) -); diff --git a/src/Svelte/assets/vitest.config.unit.mjs b/src/Svelte/assets/vitest.config.unit.mjs new file mode 100644 index 00000000000..ddf0afec276 --- /dev/null +++ b/src/Svelte/assets/vitest.config.unit.mjs @@ -0,0 +1,7 @@ +import { svelte } from '@sveltejs/vite-plugin-svelte'; +import { mergeConfig } from 'vitest/config'; +import configShared from '../../../vitest.config.unit.mjs'; + +export default mergeConfig(configShared, { + plugins: [svelte()], +}); diff --git a/src/Swup/assets/package.json b/src/Swup/assets/package.json index c6e81cd8e2f..36250eea397 100644 --- a/src/Swup/assets/package.json +++ b/src/Swup/assets/package.json @@ -17,7 +17,8 @@ "scripts": { "build": "tsx ../../../bin/build_package.ts .", "watch": "tsx ../../../bin/build_package.ts . --watch", - "test": "../../../bin/test_package.sh .", + "test": "pnpm run test:unit", + "test:unit": "../../../bin/test_package.sh . --unit", "check": "biome check", "ci": "biome ci" }, diff --git a/src/Swup/assets/test/controller.test.ts b/src/Swup/assets/test/unit/controller.test.ts similarity index 98% rename from src/Swup/assets/test/controller.test.ts rename to src/Swup/assets/test/unit/controller.test.ts index 8805a0a6234..027b54dd3d2 100644 --- a/src/Swup/assets/test/controller.test.ts +++ b/src/Swup/assets/test/unit/controller.test.ts @@ -10,8 +10,8 @@ import { Application, Controller } from '@hotwired/stimulus'; import { getByTestId, waitFor } from '@testing-library/dom'; import { afterEach, describe, expect, it } from 'vitest'; -import { clearDOM, mountDOM } from '../../../../test/stimulus-helpers'; -import SwupController from '../src/controller'; +import { clearDOM, mountDOM } from '../../../../../test/stimulus-helpers'; +import SwupController from '../../src/controller'; let actualSwupOptions: any = null; diff --git a/src/Swup/assets/vitest.config.unit.mjs b/src/Swup/assets/vitest.config.unit.mjs new file mode 100644 index 00000000000..3a6751f8a05 --- /dev/null +++ b/src/Swup/assets/vitest.config.unit.mjs @@ -0,0 +1,4 @@ +import { mergeConfig } from 'vitest/config'; +import configShared from '../../../vitest.config.unit.mjs'; + +export default mergeConfig(configShared, {}); diff --git a/src/TogglePassword/assets/package.json b/src/TogglePassword/assets/package.json index 8c7c392155a..bec6944dc94 100644 --- a/src/TogglePassword/assets/package.json +++ b/src/TogglePassword/assets/package.json @@ -20,7 +20,8 @@ "scripts": { "build": "tsx ../../../bin/build_package.ts .", "watch": "tsx ../../../bin/build_package.ts . --watch", - "test": "../../../bin/test_package.sh .", + "test": "pnpm run test:unit", + "test:unit": "../../../bin/test_package.sh . --unit", "check": "biome check", "ci": "biome ci" }, diff --git a/src/TogglePassword/assets/test/controller.test.ts b/src/TogglePassword/assets/test/unit/controller.test.ts similarity index 93% rename from src/TogglePassword/assets/test/controller.test.ts rename to src/TogglePassword/assets/test/unit/controller.test.ts index 8d1e0304f26..fef4556bc8b 100644 --- a/src/TogglePassword/assets/test/controller.test.ts +++ b/src/TogglePassword/assets/test/unit/controller.test.ts @@ -11,8 +11,8 @@ import { Application, Controller } from '@hotwired/stimulus'; import { getByTestId, getByText, waitFor } from '@testing-library/dom'; import user from '@testing-library/user-event'; import { afterEach, beforeEach, describe, expect, it } from 'vitest'; -import { clearDOM, mountDOM } from '../../../../test/stimulus-helpers'; -import TogglePasswordController from '../src/controller'; +import { clearDOM, mountDOM } from '../../../../../test/stimulus-helpers'; +import TogglePasswordController from '../../src/controller'; // Controller used to check the actual controller was properly booted class CheckController extends Controller { diff --git a/src/TogglePassword/assets/vitest.config.unit.mjs b/src/TogglePassword/assets/vitest.config.unit.mjs new file mode 100644 index 00000000000..3a6751f8a05 --- /dev/null +++ b/src/TogglePassword/assets/vitest.config.unit.mjs @@ -0,0 +1,4 @@ +import { mergeConfig } from 'vitest/config'; +import configShared from '../../../vitest.config.unit.mjs'; + +export default mergeConfig(configShared, {}); diff --git a/src/Translator/assets/package.json b/src/Translator/assets/package.json index a420e6cc949..4fc0c88f8f9 100644 --- a/src/Translator/assets/package.json +++ b/src/Translator/assets/package.json @@ -17,7 +17,9 @@ "scripts": { "build": "tsx ../../../bin/build_package.ts .", "watch": "tsx ../../../bin/build_package.ts . --watch", - "test": "../../../bin/test_package.sh .", + "test": "pnpm run test:unit && pnpm run test:browser", + "test:unit": "../../../bin/test_package.sh . --unit", + "test:browser": "../../../bin/test_package.sh . --browser", "check": "biome check", "ci": "biome ci" }, diff --git a/src/Translator/assets/test/browser/placeholder.test.ts b/src/Translator/assets/test/browser/placeholder.test.ts new file mode 100644 index 00000000000..034d90eb9e8 --- /dev/null +++ b/src/Translator/assets/test/browser/placeholder.test.ts @@ -0,0 +1,7 @@ +import { describe, expect, it } from 'vitest'; + +describe('Placeholder', () => { + it('pass', () => { + expect(true).toBe(true); + }); +}); diff --git a/src/Translator/assets/test/formatters/formatter.test.ts b/src/Translator/assets/test/unit/formatters/formatter.test.ts similarity index 99% rename from src/Translator/assets/test/formatters/formatter.test.ts rename to src/Translator/assets/test/unit/formatters/formatter.test.ts index b6949dfd451..c5f14e53244 100644 --- a/src/Translator/assets/test/formatters/formatter.test.ts +++ b/src/Translator/assets/test/unit/formatters/formatter.test.ts @@ -8,7 +8,7 @@ */ import { describe, expect, test } from 'vitest'; -import { format } from '../../src/formatters/formatter'; +import { format } from '../../../src/formatters/formatter'; describe('Formatter', () => { test.concurrent.each<[string, string, Record]>([ diff --git a/src/Translator/assets/test/formatters/intl-formatter.test.ts b/src/Translator/assets/test/unit/formatters/intl-formatter.test.ts similarity index 97% rename from src/Translator/assets/test/formatters/intl-formatter.test.ts rename to src/Translator/assets/test/unit/formatters/intl-formatter.test.ts index 918124e519c..e62a59198b0 100644 --- a/src/Translator/assets/test/formatters/intl-formatter.test.ts +++ b/src/Translator/assets/test/unit/formatters/intl-formatter.test.ts @@ -8,7 +8,7 @@ */ import { describe, expect, test } from 'vitest'; -import { formatIntl } from '../../src/formatters/intl-formatter'; +import { formatIntl } from '../../../src/formatters/intl-formatter'; describe('Intl Formatter', () => { test('format with named arguments', () => { diff --git a/src/Translator/assets/test/translator_controller.test.ts b/src/Translator/assets/test/unit/translator_controller.test.ts similarity index 99% rename from src/Translator/assets/test/translator_controller.test.ts rename to src/Translator/assets/test/unit/translator_controller.test.ts index 38c6943fe02..44d92046ed3 100644 --- a/src/Translator/assets/test/translator_controller.test.ts +++ b/src/Translator/assets/test/unit/translator_controller.test.ts @@ -7,7 +7,7 @@ import { setLocaleFallbacks, throwWhenNotFound, trans, -} from '../src/translator_controller'; +} from '../../src/translator_controller'; describe('Translator', () => { beforeEach(() => { diff --git a/src/Translator/assets/test/utils.test.ts b/src/Translator/assets/test/unit/utils.test.ts similarity index 97% rename from src/Translator/assets/test/utils.test.ts rename to src/Translator/assets/test/unit/utils.test.ts index 2fb2ffed0e1..46026e0c50d 100644 --- a/src/Translator/assets/test/utils.test.ts +++ b/src/Translator/assets/test/unit/utils.test.ts @@ -1,5 +1,5 @@ import { describe, expect, test } from 'vitest'; -import { strtr } from '../src/utils'; +import { strtr } from '../../src/utils'; describe('Utils', () => { test.concurrent.each<[string, string, Record]>([ diff --git a/src/Translator/assets/vitest.config.browser.mjs b/src/Translator/assets/vitest.config.browser.mjs new file mode 100644 index 00000000000..cedcfabb90e --- /dev/null +++ b/src/Translator/assets/vitest.config.browser.mjs @@ -0,0 +1,4 @@ +import { mergeConfig } from 'vitest/config'; +import configShared from '../../../vitest.config.browser.mjs'; + +export default mergeConfig(configShared, {}); diff --git a/src/Translator/assets/vitest.config.unit.mjs b/src/Translator/assets/vitest.config.unit.mjs new file mode 100644 index 00000000000..3a6751f8a05 --- /dev/null +++ b/src/Translator/assets/vitest.config.unit.mjs @@ -0,0 +1,4 @@ +import { mergeConfig } from 'vitest/config'; +import configShared from '../../../vitest.config.unit.mjs'; + +export default mergeConfig(configShared, {}); diff --git a/src/Turbo/assets/package.json b/src/Turbo/assets/package.json index a83f51be4ed..dc2e6b302fa 100644 --- a/src/Turbo/assets/package.json +++ b/src/Turbo/assets/package.json @@ -22,7 +22,9 @@ "scripts": { "build": "tsx ../../../bin/build_package.ts .", "watch": "tsx ../../../bin/build_package.ts . --watch", - "test": "../../../bin/test_package.sh .", + "test": "pnpm run test:unit && pnpm run test:browser", + "test:unit": "../../../bin/test_package.sh . --unit", + "test:browser": "../../../bin/test_package.sh . --browser", "check": "biome check", "ci": "biome ci" }, @@ -47,7 +49,7 @@ }, "peerDependencies": { "@hotwired/stimulus": "^3.0.0", - "@hotwired/turbo": "^7.1.1 || ^8.0" + "@hotwired/turbo": "^7.1.0 || ^8.0" }, "devDependencies": { "@hotwired/stimulus": "^3.0.0", diff --git a/src/Turbo/assets/test/browser/placeholder.test.ts b/src/Turbo/assets/test/browser/placeholder.test.ts new file mode 100644 index 00000000000..034d90eb9e8 --- /dev/null +++ b/src/Turbo/assets/test/browser/placeholder.test.ts @@ -0,0 +1,7 @@ +import { describe, expect, it } from 'vitest'; + +describe('Placeholder', () => { + it('pass', () => { + expect(true).toBe(true); + }); +}); diff --git a/src/Turbo/assets/test/setup.js b/src/Turbo/assets/test/setup.js deleted file mode 100644 index 12139aebcf2..00000000000 --- a/src/Turbo/assets/test/setup.js +++ /dev/null @@ -1,11 +0,0 @@ -/* - * This file is part of the Symfony package. - * - * (c) Fabien Potencier - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -// polyfill for some odd error inside of Turbo in the test environment -window.SubmitEvent = class {}; diff --git a/src/Turbo/assets/test/turbo_controller.test.ts b/src/Turbo/assets/test/unit/turbo_controller.test.ts similarity index 88% rename from src/Turbo/assets/test/turbo_controller.test.ts rename to src/Turbo/assets/test/unit/turbo_controller.test.ts index d04429608e4..e4104969844 100644 --- a/src/Turbo/assets/test/turbo_controller.test.ts +++ b/src/Turbo/assets/test/unit/turbo_controller.test.ts @@ -10,8 +10,8 @@ import { Application } from '@hotwired/stimulus'; import { getByTestId } from '@testing-library/dom'; import { afterEach, beforeEach, describe, expect, it } from 'vitest'; -import { clearDOM, mountDOM } from '../../../../test/stimulus-helpers'; -import TurboController from '../src/turbo_controller'; +import { clearDOM, mountDOM } from '../../../../../test/stimulus-helpers'; +import TurboController from '../../src/turbo_controller'; const startStimulus = () => { const application = Application.start(); diff --git a/src/Turbo/assets/test/turbo_stream_controller.test.ts b/src/Turbo/assets/test/unit/turbo_stream_controller.test.ts similarity index 91% rename from src/Turbo/assets/test/turbo_stream_controller.test.ts rename to src/Turbo/assets/test/unit/turbo_stream_controller.test.ts index 06a58586143..334ec50847d 100644 --- a/src/Turbo/assets/test/turbo_stream_controller.test.ts +++ b/src/Turbo/assets/test/unit/turbo_stream_controller.test.ts @@ -10,8 +10,8 @@ import { Application } from '@hotwired/stimulus'; import { getByTestId } from '@testing-library/dom'; import { afterEach, beforeEach, describe, expect, it, vi } from 'vitest'; -import { clearDOM, mountDOM } from '../../../../test/stimulus-helpers'; -import TurboStreamController from '../src/turbo_stream_controller'; +import { clearDOM, mountDOM } from '../../../../../test/stimulus-helpers'; +import TurboStreamController from '../../src/turbo_stream_controller'; const startStimulus = () => { const application = Application.start(); diff --git a/src/Turbo/assets/vitest.config.browser.mjs b/src/Turbo/assets/vitest.config.browser.mjs new file mode 100644 index 00000000000..cedcfabb90e --- /dev/null +++ b/src/Turbo/assets/vitest.config.browser.mjs @@ -0,0 +1,4 @@ +import { mergeConfig } from 'vitest/config'; +import configShared from '../../../vitest.config.browser.mjs'; + +export default mergeConfig(configShared, {}); diff --git a/src/Turbo/assets/vitest.config.mjs b/src/Turbo/assets/vitest.config.mjs deleted file mode 100644 index 83341591ae8..00000000000 --- a/src/Turbo/assets/vitest.config.mjs +++ /dev/null @@ -1,12 +0,0 @@ -import { defineConfig, mergeConfig } from 'vitest/config'; -import configShared from '../../../vitest.config.mjs' -import path from 'path'; - -export default mergeConfig( - configShared, - defineConfig({ - test: { - setupFiles: [path.join(__dirname, 'test', 'setup.js')], - } - }) -); diff --git a/src/Turbo/assets/vitest.config.unit.mjs b/src/Turbo/assets/vitest.config.unit.mjs new file mode 100644 index 00000000000..3a6751f8a05 --- /dev/null +++ b/src/Turbo/assets/vitest.config.unit.mjs @@ -0,0 +1,4 @@ +import { mergeConfig } from 'vitest/config'; +import configShared from '../../../vitest.config.unit.mjs'; + +export default mergeConfig(configShared, {}); diff --git a/src/Typed/assets/package.json b/src/Typed/assets/package.json index 88f5c4adcbb..bbc77130380 100644 --- a/src/Typed/assets/package.json +++ b/src/Typed/assets/package.json @@ -17,7 +17,8 @@ "scripts": { "build": "tsx ../../../bin/build_package.ts .", "watch": "tsx ../../../bin/build_package.ts . --watch", - "test": "../../../bin/test_package.sh .", + "test": "pnpm run test:unit", + "test:unit": "../../../bin/test_package.sh . --unit", "check": "biome check", "ci": "biome ci" }, diff --git a/src/Typed/assets/test/controller.test.ts b/src/Typed/assets/test/unit/controller.test.ts similarity index 95% rename from src/Typed/assets/test/controller.test.ts rename to src/Typed/assets/test/unit/controller.test.ts index 453a35ecfa0..0964922395c 100644 --- a/src/Typed/assets/test/controller.test.ts +++ b/src/Typed/assets/test/unit/controller.test.ts @@ -10,8 +10,8 @@ import { Application, Controller } from '@hotwired/stimulus'; import { getByTestId, waitFor } from '@testing-library/dom'; import { afterEach, beforeEach, describe, expect, it } from 'vitest'; -import { clearDOM, mountDOM } from '../../../../test/stimulus-helpers'; -import TypedController from '../src/controller'; +import { clearDOM, mountDOM } from '../../../../../test/stimulus-helpers'; +import TypedController from '../../src/controller'; // Controller used to check the actual controller was properly booted class CheckController extends Controller { diff --git a/src/Typed/assets/vitest.config.unit.mjs b/src/Typed/assets/vitest.config.unit.mjs new file mode 100644 index 00000000000..3a6751f8a05 --- /dev/null +++ b/src/Typed/assets/vitest.config.unit.mjs @@ -0,0 +1,4 @@ +import { mergeConfig } from 'vitest/config'; +import configShared from '../../../vitest.config.unit.mjs'; + +export default mergeConfig(configShared, {}); diff --git a/src/Vue/assets/package.json b/src/Vue/assets/package.json index 1e7cff217a9..27e03f68c4d 100644 --- a/src/Vue/assets/package.json +++ b/src/Vue/assets/package.json @@ -17,7 +17,9 @@ "scripts": { "build": "tsx ../../../bin/build_package.ts .", "watch": "tsx ../../../bin/build_package.ts . --watch", - "test": "../../../bin/test_package.sh .", + "test": "pnpm run test:unit && pnpm run test:browser", + "test:unit": "../../../bin/test_package.sh . --unit", + "test:browser": "../../../bin/test_package.sh . --browser", "check": "biome check", "ci": "biome ci" }, diff --git a/src/Vue/assets/test/browser/placeholder.test.ts b/src/Vue/assets/test/browser/placeholder.test.ts new file mode 100644 index 00000000000..034d90eb9e8 --- /dev/null +++ b/src/Vue/assets/test/browser/placeholder.test.ts @@ -0,0 +1,7 @@ +import { describe, expect, it } from 'vitest'; + +describe('Placeholder', () => { + it('pass', () => { + expect(true).toBe(true); + }); +}); diff --git a/src/Vue/assets/test/register_controller.test.ts b/src/Vue/assets/test/unit/register_controller.test.ts similarity index 91% rename from src/Vue/assets/test/register_controller.test.ts rename to src/Vue/assets/test/unit/register_controller.test.ts index 9fa216760ee..2965d572f87 100644 --- a/src/Vue/assets/test/register_controller.test.ts +++ b/src/Vue/assets/test/unit/register_controller.test.ts @@ -8,9 +8,9 @@ */ import { describe, expect, it } from 'vitest'; -import { registerVueControllerComponents } from '../src/register_controller'; -import Hello from './fixtures/Hello.vue'; -import Goodbye from './fixtures-lazy/Goodbye.vue'; +import { registerVueControllerComponents } from '../../src/register_controller'; +import Hello from '../fixtures/Hello.vue'; +import Goodbye from '../fixtures-lazy/Goodbye.vue'; import RequireContext = __WebpackModuleApi.RequireContext; diff --git a/src/Vue/assets/test/render_controller.test.ts b/src/Vue/assets/test/unit/render_controller.test.ts similarity index 95% rename from src/Vue/assets/test/render_controller.test.ts rename to src/Vue/assets/test/unit/render_controller.test.ts index b3f7eadc59e..9d5bf2dc304 100644 --- a/src/Vue/assets/test/render_controller.test.ts +++ b/src/Vue/assets/test/unit/render_controller.test.ts @@ -10,8 +10,8 @@ import { Application, Controller } from '@hotwired/stimulus'; import { getByTestId, waitFor } from '@testing-library/dom'; import { describe, expect, it } from 'vitest'; -import { clearDOM, mountDOM } from '../../../../test/stimulus-helpers'; -import VueController from '../src/render_controller'; +import { clearDOM, mountDOM } from '../../../../../test/stimulus-helpers'; +import VueController from '../../src/render_controller'; // Controller used to check the actual controller was properly booted class CheckController extends Controller { diff --git a/src/Vue/assets/vitest.config.browser.mjs b/src/Vue/assets/vitest.config.browser.mjs new file mode 100644 index 00000000000..cedcfabb90e --- /dev/null +++ b/src/Vue/assets/vitest.config.browser.mjs @@ -0,0 +1,4 @@ +import { mergeConfig } from 'vitest/config'; +import configShared from '../../../vitest.config.browser.mjs'; + +export default mergeConfig(configShared, {}); diff --git a/src/Vue/assets/vitest.config.mjs b/src/Vue/assets/vitest.config.mjs deleted file mode 100644 index 7001a15e17b..00000000000 --- a/src/Vue/assets/vitest.config.mjs +++ /dev/null @@ -1,11 +0,0 @@ -// vitest.config.ts -import { defineConfig, mergeConfig } from 'vitest/config'; -import vue from '@vitejs/plugin-vue'; -import configShared from '../../../vitest.config.mjs' - -export default mergeConfig( - configShared, - defineConfig({ - plugins: [vue()], - }) -); diff --git a/src/Vue/assets/vitest.config.unit.mjs b/src/Vue/assets/vitest.config.unit.mjs new file mode 100644 index 00000000000..10d4ac08519 --- /dev/null +++ b/src/Vue/assets/vitest.config.unit.mjs @@ -0,0 +1,7 @@ +import vue from '@vitejs/plugin-vue'; +import { mergeConfig } from 'vitest/config'; +import configShared from '../../../vitest.config.unit.mjs'; + +export default mergeConfig(configShared, { + plugins: [vue()], +}); diff --git a/vitest.config.browser.mjs b/vitest.config.browser.mjs new file mode 100644 index 00000000000..7d6cda0f8aa --- /dev/null +++ b/vitest.config.browser.mjs @@ -0,0 +1,62 @@ +/// +import { defineConfig } from 'vitest/config'; +import path from 'node:path'; +import { browsers } from './bin/get_browsers.mjs'; + +export default defineConfig({ + test: { + include: [ + './test/browser/**/*.{test,spec}.ts', + './test/**/*.browser.{test,spec}.ts', + ], + setupFiles: [path.join(__dirname, 'test', 'setup.js')], + browser: { + enabled: true, + provider: 'webdriverio', + headless: true, + instances: [ + { + name: 'Chrome (lowest)', + browser: 'chrome', + capabilities: { + 'goog:chromeOptions': { + binary: browsers['chrome@lowest'].executablePath, + args: ['--no-sandbox', '--disable-dev-shm-usage'] + }, + }, + }, + + { + name: 'Chrome (latest)', + browser: 'chrome', + capabilities: { + 'goog:chromeOptions': { + binary: browsers['chrome@latest'].executablePath, + args: ['--no-sandbox', '--disable-dev-shm-usage'] + }, + }, + }, + + { + name: 'Firefox (lowest)', + browser: 'firefox', + capabilities: { + 'moz:firefoxOptions': { + binary: browsers['firefox@lowest'].executablePath, + } + }, + }, + + { + name: 'Firefox (latest)', + browser: 'firefox', + capabilities: { + 'moz:firefoxOptions': { + binary: browsers['firefox@latest'].executablePath, + } + }, + }, + ], + }, + }, +}); diff --git a/vitest.config.mjs b/vitest.config.mjs deleted file mode 100644 index 2543fa3ed88..00000000000 --- a/vitest.config.mjs +++ /dev/null @@ -1,12 +0,0 @@ -import { defineConfig } from 'vitest/config'; -import path from 'path'; - -export default defineConfig({ - test: { - environment: 'jsdom', - setupFiles: [path.join(__dirname, 'test', 'setup.js')], - coverage: { - reporter: ['text', 'html'], - }, - } -}); diff --git a/vitest.config.unit.mjs b/vitest.config.unit.mjs new file mode 100644 index 00000000000..e5087cbe097 --- /dev/null +++ b/vitest.config.unit.mjs @@ -0,0 +1,13 @@ +import { defineConfig } from 'vitest/config'; +import path from 'node:path'; + +export default defineConfig({ + test: { + include: [ + './test/unit/**/*.{test,spec}.(ts|tsx)', + './test/**/*.unit.{test,spec}.(ts|tsx)', + ], + environment: 'jsdom', + setupFiles: [path.join(import.meta.dirname, 'test', 'setup.js')], + }, +});