From 4080f3cd0e78990a36b8da1392879885c5ca3393 Mon Sep 17 00:00:00 2001 From: Dennis Ploetner Date: Fri, 21 Aug 2026 10:25:51 +0200 Subject: [PATCH 1/8] Playwright setup --- .github/dependabot.yml | 5 + .github/workflows/e2e.yml | 51 + .gitignore | 6 + .wp-env.json | 5 +- CLAUDE.md | 27 +- package-lock.json | 4762 +++++++++++++---- package.json | 14 +- playwright.config.ts | 46 +- .../artifacts/html-report/index.html | 90 - tests/playwright/artifacts/seed.json | 20 - .../artifacts/storage-states/admin-de.json | 1 - .../artifacts/storage-states/admin-it.json | 1 - .../artifacts/storage-states/admin.json | 1 - tests/playwright/artifacts/test-results.json | 100 - .../artifacts/test-results/.last-run.json | 4 - tests/playwright/fixtures/msls-fixtures.ts | 30 +- tests/playwright/scripts/run-in-docker.sh | 36 + tests/playwright/setup/global-setup.ts | 201 +- .../admin.visual.spec.ts/post-list-root.png | Bin 0 -> 13938 bytes .../admin.visual.spec.ts/settings-root.png | Bin 0 -> 119328 bytes .../frontend.visual.spec.ts/hreflang-de.txt | 3 + .../frontend.visual.spec.ts/hreflang-it.txt | 3 + .../frontend.visual.spec.ts/hreflang-root.txt | 3 + .../frontend.visual.spec.ts/shortcode-de.png | Bin 0 -> 15407 bytes .../frontend.visual.spec.ts/shortcode-it.png | Bin 0 -> 16007 bytes .../shortcode-root.png | Bin 0 -> 14299 bytes .../specs/admin/block-editor.spec.ts | 43 + .../specs/admin/post-translation.spec.ts | 48 + tests/playwright/specs/admin/settings.spec.ts | 64 + .../specs/frontend/hreflang.spec.ts | 43 + .../specs/frontend/shortcode.spec.ts | 41 + .../playwright/specs/frontend/widget.spec.ts | 83 +- .../{ => specs/live}/testpage.spec.ts | 0 .../specs/visual/admin.visual.spec.ts | 50 + .../specs/visual/frontend.visual.spec.ts | 37 + 35 files changed, 4583 insertions(+), 1235 deletions(-) create mode 100644 .github/workflows/e2e.yml delete mode 100644 tests/playwright/artifacts/html-report/index.html delete mode 100644 tests/playwright/artifacts/seed.json delete mode 100644 tests/playwright/artifacts/storage-states/admin-de.json delete mode 100644 tests/playwright/artifacts/storage-states/admin-it.json delete mode 100644 tests/playwright/artifacts/storage-states/admin.json delete mode 100644 tests/playwright/artifacts/test-results.json delete mode 100644 tests/playwright/artifacts/test-results/.last-run.json create mode 100755 tests/playwright/scripts/run-in-docker.sh create mode 100644 tests/playwright/specs/__snapshots__/visual/admin.visual.spec.ts/post-list-root.png create mode 100644 tests/playwright/specs/__snapshots__/visual/admin.visual.spec.ts/settings-root.png create mode 100644 tests/playwright/specs/__snapshots__/visual/frontend.visual.spec.ts/hreflang-de.txt create mode 100644 tests/playwright/specs/__snapshots__/visual/frontend.visual.spec.ts/hreflang-it.txt create mode 100644 tests/playwright/specs/__snapshots__/visual/frontend.visual.spec.ts/hreflang-root.txt create mode 100644 tests/playwright/specs/__snapshots__/visual/frontend.visual.spec.ts/shortcode-de.png create mode 100644 tests/playwright/specs/__snapshots__/visual/frontend.visual.spec.ts/shortcode-it.png create mode 100644 tests/playwright/specs/__snapshots__/visual/frontend.visual.spec.ts/shortcode-root.png create mode 100644 tests/playwright/specs/admin/block-editor.spec.ts create mode 100644 tests/playwright/specs/admin/post-translation.spec.ts create mode 100644 tests/playwright/specs/admin/settings.spec.ts create mode 100644 tests/playwright/specs/frontend/hreflang.spec.ts create mode 100644 tests/playwright/specs/frontend/shortcode.spec.ts rename tests/playwright/{ => specs/live}/testpage.spec.ts (100%) create mode 100644 tests/playwright/specs/visual/admin.visual.spec.ts create mode 100644 tests/playwright/specs/visual/frontend.visual.spec.ts diff --git a/.github/dependabot.yml b/.github/dependabot.yml index 60af8659d..6e55be070 100644 --- a/.github/dependabot.yml +++ b/.github/dependabot.yml @@ -13,6 +13,11 @@ updates: interval: weekly open-pull-requests-limit: 10 target-branch: 'master' + ignore: + # @wordpress/e2e-test-utils-playwright peer-requires @types/node ^20.x; + # block major bumps that would re-create the ERESOLVE conflict. + - dependency-name: "@types/node" + update-types: ["version-update:semver-major"] - package-ecosystem: composer directory: '/' diff --git a/.github/workflows/e2e.yml b/.github/workflows/e2e.yml new file mode 100644 index 000000000..e6ff788c1 --- /dev/null +++ b/.github/workflows/e2e.yml @@ -0,0 +1,51 @@ +name: E2E Tests +permissions: + contents: read +on: + pull_request: + push: + branches: + - master +concurrency: + group: e2e-${{ github.ref }} + cancel-in-progress: true +jobs: + playwright: + name: Playwright (local project) + runs-on: ubuntu-latest + timeout-minutes: 25 + steps: + - name: Checkout project + uses: actions/checkout@v7 + - name: Setup Node + uses: actions/setup-node@v7 + with: + node-version: '24' + cache: 'npm' + - name: Node dependencies + run: npm ci + # The plugin requires vendor/autoload.php for PHP-DI, and the Gutenberg + # block is not committed — both have to exist before wp-env loads the + # plugin from the mapped checkout. + - name: Composer dependencies + run: composer install --no-dev --no-interaction --optimize-autoloader + - name: Build assets + run: npm run build + - name: Install Chromium + run: npx playwright install --with-deps chromium + - name: Start WordPress multisite + run: npx wp-env start + # Seeds the de/it subsites and the linked demo posts via global-setup, + # then runs the admin and frontend specs. Visual specs are excluded — + # their baselines are only stable inside the Playwright Linux image. + - name: Run Playwright + run: npm run playwright:local + - name: Upload report + if: failure() + uses: actions/upload-artifact@v7 + with: + name: playwright-report + path: | + tests/playwright/artifacts/html-report + tests/playwright/artifacts/test-results + retention-days: 7 diff --git a/.gitignore b/.gitignore index dfd75ea48..3cc25ea76 100644 --- a/.gitignore +++ b/.gitignore @@ -5,6 +5,7 @@ .phpunit.cache .phpunit.result.cache .vscode/ +CLAUDE.md assets/js/msls-widget-block/ assets/js/msls.js composer.lock @@ -19,4 +20,9 @@ tests/coverage/ tests/playwright-report/ tests/playwright-results/ tests/playwright/.env.local +tests/playwright/artifacts/html-report/ +tests/playwright/artifacts/test-results/ +tests/playwright/artifacts/test-results.json +tests/playwright/artifacts/seed.json +tests/playwright/artifacts/storage-states/ vendor/ diff --git a/.wp-env.json b/.wp-env.json index 3a407b1fa..83d7bc66a 100644 --- a/.wp-env.json +++ b/.wp-env.json @@ -1,9 +1,7 @@ { "phpVersion": "8.3", "multisite": true, - "plugins": [ - "." - ], + "plugins": [], "env": { "tests": { "config": { @@ -12,7 +10,6 @@ }, "development": { "plugins": [ - ".", "https://downloads.wordpress.org/plugin/query-monitor.zip" ] } diff --git a/CLAUDE.md b/CLAUDE.md index 921b43e56..a60f33263 100644 --- a/CLAUDE.md +++ b/CLAUDE.md @@ -32,15 +32,30 @@ npm run build-msls-block # Build only the Gutenberg block ### E2E Tests ```bash -npx playwright test # Run Playwright tests (against msls.co) +npx wp-env start # Required first: the local suite runs against wp-env +npm run playwright:local # Admin + frontend specs (skips visual) +npm run playwright:visual # Visual specs inside the Playwright Linux image +npm run playwright:docker # Whole local suite inside that image +npm run playwright:update-snapshots # Regenerate visual baselines +npm run playwright:live # Only specs/live, against msls.co npx playwright test --ui # Run with UI ``` +Visual baselines are committed and only pixel-stable when generated inside the container — +always use the `:visual` / `:update-snapshots` scripts, never a bare `npx playwright test` +for them. ### Local Development Environment ```bash npx wp-env start # Start WordPress multisite via wp-env (PHP 8.3) npx wp-env stop +npx wp-env reset tests # Wipe the tests database (fresh-install check) +npx wp-env run cli wp plugin activate multisite-language-switcher --network ``` +The plugin reaches the container through `mappings` in `.wp-env.json`, not through +`plugins` — mounting it both ways created a duplicate `Multisite-Language-Switcher` +plugin directory and made `wp-env start` fail. Consequence: wp-env does not auto-activate +it, so activate it once per fresh **development** environment with the command above. The +**tests** environment is network-activated by the Playwright global setup. ## Architecture @@ -80,7 +95,15 @@ npx wp-env stop ## CI -GitHub Actions runs PHPStan, PHPCS, PHPUnit, and Playwright on every pull request. +GitHub Actions workflows: + +- `test.yml` — PHPUnit on every push (plus Codecov upload on `master`) +- `e2e.yml` — the Playwright `local` project (admin + frontend specs) on pull requests and + pushes to `master`; visual specs and the `live` project are not run in CI +- `plugin-check.yml` — WordPress.org Plugin Check on pull requests and `master` +- `deploy.yml` — WordPress.org deploy on tags + +PHPStan and PHPCS are not wired into CI yet — run them locally via `composer qa`. ## Conventions diff --git a/package-lock.json b/package-lock.json index 8cf2236a9..1ff6f9af0 100644 --- a/package-lock.json +++ b/package-lock.json @@ -10,9 +10,13 @@ "uglify-js": "^3.19.3" }, "devDependencies": { + "@emnapi/core": "^1.11.3", + "@emnapi/runtime": "^1.11.3", "@playwright/test": "^1.62.1", - "@types/node": "^26.1.2", + "@types/node": "^20.17.10", "@wordpress/e2e-test-utils": "^11.34.0", + "@wordpress/e2e-test-utils-playwright": "^1.52.0", + "@wordpress/env": "^11.13.0", "@wordpress/scripts": "^34.0.0", "dotenv": "^17.4.2" } @@ -69,6 +73,7 @@ "integrity": "sha512-RgHBCvtjbOK2gXSNBNIkNoEc9qoVEtau3hj8gEqKQuL3HZAibKarWFEI3Lfm6EYKkLalOh8eSrj9b+ch9H/VBA==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "@babel/code-frame": "^7.29.7", "@babel/generator": "^7.29.7", @@ -2004,6 +2009,7 @@ "integrity": "sha512-CYDD3SOtsHtyXeEORYRx2qBtpDJFjRTGXUtmNEMGyzYOKj1TE3tycdlho7kA1Ufx9OYWZzg52QFBGALTirzDSw==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "@keyv/serialize": "^1.1.1" } @@ -2117,6 +2123,7 @@ } ], "license": "MIT", + "peer": true, "engines": { "node": ">=18" }, @@ -2165,6 +2172,7 @@ } ], "license": "MIT", + "peer": true, "engines": { "node": ">=18" } @@ -2215,35 +2223,34 @@ } }, "node_modules/@emnapi/core": { - "version": "1.10.0", - "resolved": "https://registry.npmjs.org/@emnapi/core/-/core-1.10.0.tgz", - "integrity": "sha512-yq6OkJ4p82CAfPl0u9mQebQHKPJkY7WrIuk205cTYnYe+k2Z8YBh11FrbRG/H6ihirqcacOgl2BIO8oyMQLeXw==", + "version": "1.11.3", + "resolved": "https://registry.npmjs.org/@emnapi/core/-/core-1.11.3.tgz", + "integrity": "sha512-zLpS5asjEb7lq8jYLq37N6XKaE41DIexlY1rF/z4/tIl3wo13Sqm28fRyfIsKZD+NZ8mM5RoKkpW/rBcuoSZSg==", "dev": true, "license": "MIT", - "optional": true, + "peer": true, "dependencies": { - "@emnapi/wasi-threads": "1.2.1", + "@emnapi/wasi-threads": "1.2.3", "tslib": "^2.4.0" } }, "node_modules/@emnapi/runtime": { - "version": "1.10.0", - "resolved": "https://registry.npmjs.org/@emnapi/runtime/-/runtime-1.10.0.tgz", - "integrity": "sha512-ewvYlk86xUoGI0zQRNq/mC+16R1QeDlKQy21Ki3oSYXNgLb45GV1P6A0M+/s6nyCuNDqe5VpaY84BzXGwVbwFA==", + "version": "1.11.3", + "resolved": "https://registry.npmjs.org/@emnapi/runtime/-/runtime-1.11.3.tgz", + "integrity": "sha512-Xz4Tpyki7XyrpbUK1jR1AhdAdaXyhhY4lZ3neLodmhpuWfy2PAQN5B46sAiU4liOXGLkHypn/qU+jvfWSCYYLA==", "dev": true, "license": "MIT", - "optional": true, + "peer": true, "dependencies": { "tslib": "^2.4.0" } }, "node_modules/@emnapi/wasi-threads": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/@emnapi/wasi-threads/-/wasi-threads-1.2.1.tgz", - "integrity": "sha512-uTII7OYF+/Mes/MrcIOYp5yOtSMLBWSIoLPpcgwipoiKbli6k322tcoFsxoIIxPDqW01SQGAgko4EzZi2BNv2w==", + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/@emnapi/wasi-threads/-/wasi-threads-1.2.3.tgz", + "integrity": "sha512-ELEBe8PsLvvJ6QMr0zLt8ffvOHW/dc1m3CEzNMg7aJUv3bMaoDtw2TXyDAwkYBuroxxuHEwhRTLJSe5sya547g==", "dev": true, "license": "MIT", - "optional": true, "dependencies": { "tslib": "^2.4.0" } @@ -2364,7 +2371,6 @@ "integrity": "sha512-nJl2KGTlrf9GjLimgIru+V/mzgSK0ABCDQRvxw5BjURL7WfH5uoWmizbH7QB6MmnMBd8cIC9uceWnezL1VZWWw==", "dev": true, "license": "Apache-2.0", - "peer": true, "dependencies": { "@eslint/object-schema": "^2.1.7", "debug": "^4.3.1", @@ -2380,7 +2386,6 @@ "integrity": "sha512-gBrxN88gOIf3R7ja5K9slwNayVcZgK6SOUORm2uBzTeIEfeVaIhOpCtTox3P6R7o2jLFwLFTLnC7kU/RGcYEgw==", "dev": true, "license": "Apache-2.0", - "peer": true, "dependencies": { "@eslint/core": "^0.17.0" }, @@ -2394,7 +2399,6 @@ "integrity": "sha512-yL/sLrpmtDaFEiUj1osRP4TI2MDz1AddJL+jZ7KSqvBuliN4xqYY54IfdN8qD8Toa6g1iloph1fxQNkjOxrrpQ==", "dev": true, "license": "Apache-2.0", - "peer": true, "dependencies": { "@types/json-schema": "^7.0.15" }, @@ -2421,7 +2425,6 @@ "integrity": "sha512-4IlJx0X0qftVsN5E+/vGujTRIFtwuLbNsVUe7TO6zYPDR1O6nFwvwhIKEKSrl6dZchmYBITazxKoUYOjdtjlRg==", "dev": true, "license": "MIT", - "peer": true, "dependencies": { "ajv": "^6.14.0", "debug": "^4.3.2", @@ -2445,8 +2448,7 @@ "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", "dev": true, - "license": "Python-2.0", - "peer": true + "license": "Python-2.0" }, "node_modules/@eslint/eslintrc/node_modules/globals": { "version": "14.0.0", @@ -2454,7 +2456,6 @@ "integrity": "sha512-oahGvuMGQlPw/ivIYBjVSrWAfWLBeku5tpPE2fOPLi+WHffIWbuh2tCjhyQhTBPMf5E9jDEH4FOmTYgYwbKwtQ==", "dev": true, "license": "MIT", - "peer": true, "engines": { "node": ">=18" }, @@ -2468,7 +2469,6 @@ "integrity": "sha512-qQKT4zQxXl8lLwBtHMWwaTcGfFOZviOJet3Oy/xmGk2gZH677CJM9EvtfdSkgWcATZhj/55JZ0rmy3myCT5lsA==", "dev": true, "license": "MIT", - "peer": true, "dependencies": { "argparse": "^2.0.1" }, @@ -2482,7 +2482,6 @@ "integrity": "sha512-nE7DEIchvtiFTwBw4Lfbu59PG+kCofhjsKaCWzxTpt4lfRjRMqG6uMBzKXuEcyXhOHoUp9riAm7/aWYGhXZ9cw==", "dev": true, "license": "MIT", - "peer": true, "engines": { "node": "^18.18.0 || ^20.9.0 || >=21.1.0" }, @@ -2496,7 +2495,6 @@ "integrity": "sha512-VtAOaymWVfZcmZbp6E2mympDIHvyjXs/12LqWYjVw6qjrfF+VK+fyG33kChz3nnK+SU5/NeHOqrTEHS8sXO3OA==", "dev": true, "license": "Apache-2.0", - "peer": true, "engines": { "node": "^18.18.0 || ^20.9.0 || >=21.1.0" } @@ -2507,7 +2505,6 @@ "integrity": "sha512-43/qtrDUokr7LJqoF2c3+RInu/t4zfrpYdoSDfYyhg52rwLV6TnOvdG4fXm7IkSB3wErkcmJS9iEhjVtOSEjjA==", "dev": true, "license": "Apache-2.0", - "peer": true, "dependencies": { "@eslint/core": "^0.17.0", "levn": "^0.4.1" @@ -2522,7 +2519,6 @@ "integrity": "sha512-yL/sLrpmtDaFEiUj1osRP4TI2MDz1AddJL+jZ7KSqvBuliN4xqYY54IfdN8qD8Toa6g1iloph1fxQNkjOxrrpQ==", "dev": true, "license": "Apache-2.0", - "peer": true, "dependencies": { "@types/json-schema": "^7.0.15" }, @@ -2652,638 +2648,1430 @@ "url": "https://github.com/sponsors/nzakas" } }, - "node_modules/@isaacs/cliui": { - "version": "8.0.2", - "resolved": "https://registry.npmjs.org/@isaacs/cliui/-/cliui-8.0.2.tgz", - "integrity": "sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==", + "node_modules/@inquirer/ansi": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@inquirer/ansi/-/ansi-1.0.2.tgz", + "integrity": "sha512-S8qNSZiYzFd0wAcyG5AXCvUHC5Sr7xpZ9wZ2py9XR88jUz8wooStVx5M6dRzczbBWjic9NP7+rY0Xi7qqK/aMQ==", "dev": true, - "license": "ISC", + "license": "MIT", + "engines": { + "node": ">=18" + } + }, + "node_modules/@inquirer/checkbox": { + "version": "4.3.2", + "resolved": "https://registry.npmjs.org/@inquirer/checkbox/-/checkbox-4.3.2.tgz", + "integrity": "sha512-VXukHf0RR1doGe6Sm4F0Em7SWYLTHSsbGfJdS9Ja2bX5/D5uwVOEjr07cncLROdBvmnvCATYEWlHqYmXv2IlQA==", + "dev": true, + "license": "MIT", "dependencies": { - "string-width": "^5.1.2", - "string-width-cjs": "npm:string-width@^4.2.0", - "strip-ansi": "^7.0.1", - "strip-ansi-cjs": "npm:strip-ansi@^6.0.1", - "wrap-ansi": "^8.1.0", - "wrap-ansi-cjs": "npm:wrap-ansi@^7.0.0" + "@inquirer/ansi": "^1.0.2", + "@inquirer/core": "^10.3.2", + "@inquirer/figures": "^1.0.15", + "@inquirer/type": "^3.0.10", + "yoctocolors-cjs": "^2.1.3" }, "engines": { - "node": ">=12" + "node": ">=18" + }, + "peerDependencies": { + "@types/node": ">=18" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + } } }, - "node_modules/@isaacs/cliui/node_modules/ansi-regex": { - "version": "6.2.2", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.2.2.tgz", - "integrity": "sha512-Bq3SmSpyFHaWjPk8If9yc6svM8c56dB5BAtW4Qbw5jHTwwXXcTLoRMkpDJp6VL0XzlWaCHTXrkFURMYmD0sLqg==", + "node_modules/@inquirer/confirm": { + "version": "5.1.21", + "resolved": "https://registry.npmjs.org/@inquirer/confirm/-/confirm-5.1.21.tgz", + "integrity": "sha512-KR8edRkIsUayMXV+o3Gv+q4jlhENF9nMYUZs9PA2HzrXeHI8M5uDag70U7RJn9yyiMZSbtF5/UexBtAVtZGSbQ==", "dev": true, "license": "MIT", + "dependencies": { + "@inquirer/core": "^10.3.2", + "@inquirer/type": "^3.0.10" + }, "engines": { - "node": ">=12" + "node": ">=18" }, - "funding": { - "url": "https://github.com/chalk/ansi-regex?sponsor=1" + "peerDependencies": { + "@types/node": ">=18" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + } } }, - "node_modules/@isaacs/cliui/node_modules/ansi-styles": { - "version": "6.2.3", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.3.tgz", - "integrity": "sha512-4Dj6M28JB+oAH8kFkTLUo+a2jwOFkuqb3yucU0CANcRRUbxS0cP0nZYCGjcc3BNXwRIsUVmDGgzawme7zvJHvg==", + "node_modules/@inquirer/core": { + "version": "10.3.2", + "resolved": "https://registry.npmjs.org/@inquirer/core/-/core-10.3.2.tgz", + "integrity": "sha512-43RTuEbfP8MbKzedNqBrlhhNKVwoK//vUFNW3Q3vZ88BLcrs4kYpGg+B2mm5p2K/HfygoCxuKwJJiv8PbGmE0A==", "dev": true, "license": "MIT", + "dependencies": { + "@inquirer/ansi": "^1.0.2", + "@inquirer/figures": "^1.0.15", + "@inquirer/type": "^3.0.10", + "cli-width": "^4.1.0", + "mute-stream": "^2.0.0", + "signal-exit": "^4.1.0", + "wrap-ansi": "^6.2.0", + "yoctocolors-cjs": "^2.1.3" + }, "engines": { - "node": ">=12" + "node": ">=18" + }, + "peerDependencies": { + "@types/node": ">=18" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + } + } + }, + "node_modules/@inquirer/core/node_modules/signal-exit": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz", + "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==", + "dev": true, + "license": "ISC", + "engines": { + "node": ">=14" }, "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" + "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/@isaacs/cliui/node_modules/string-width": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz", - "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==", + "node_modules/@inquirer/core/node_modules/wrap-ansi": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz", + "integrity": "sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==", "dev": true, "license": "MIT", "dependencies": { - "eastasianwidth": "^0.2.0", - "emoji-regex": "^9.2.2", - "strip-ansi": "^7.0.1" + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" }, "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">=8" } }, - "node_modules/@isaacs/cliui/node_modules/strip-ansi": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.2.0.tgz", - "integrity": "sha512-yDPMNjp4WyfYBkHnjIRLfca1i6KMyGCtsVgoKe/z1+6vukgaENdgGBZt+ZmKPc4gavvEZ5OgHfHdrazhgNyG7w==", + "node_modules/@inquirer/editor": { + "version": "4.2.23", + "resolved": "https://registry.npmjs.org/@inquirer/editor/-/editor-4.2.23.tgz", + "integrity": "sha512-aLSROkEwirotxZ1pBaP8tugXRFCxW94gwrQLxXfrZsKkfjOYC1aRvAZuhpJOb5cu4IBTJdsCigUlf2iCOu4ZDQ==", "dev": true, "license": "MIT", "dependencies": { - "ansi-regex": "^6.2.2" + "@inquirer/core": "^10.3.2", + "@inquirer/external-editor": "^1.0.3", + "@inquirer/type": "^3.0.10" }, "engines": { - "node": ">=12" + "node": ">=18" }, - "funding": { - "url": "https://github.com/chalk/strip-ansi?sponsor=1" + "peerDependencies": { + "@types/node": ">=18" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + } } }, - "node_modules/@isaacs/cliui/node_modules/wrap-ansi": { - "version": "8.1.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-8.1.0.tgz", - "integrity": "sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==", + "node_modules/@inquirer/expand": { + "version": "4.0.23", + "resolved": "https://registry.npmjs.org/@inquirer/expand/-/expand-4.0.23.tgz", + "integrity": "sha512-nRzdOyFYnpeYTTR2qFwEVmIWypzdAx/sIkCMeTNTcflFOovfqUk+HcFhQQVBftAh9gmGrpFj6QcGEqrDMDOiew==", "dev": true, "license": "MIT", "dependencies": { - "ansi-styles": "^6.1.0", - "string-width": "^5.0.1", - "strip-ansi": "^7.0.1" + "@inquirer/core": "^10.3.2", + "@inquirer/type": "^3.0.10", + "yoctocolors-cjs": "^2.1.3" }, "engines": { - "node": ">=12" + "node": ">=18" }, - "funding": { - "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + "peerDependencies": { + "@types/node": ">=18" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + } } }, - "node_modules/@istanbuljs/load-nyc-config": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@istanbuljs/load-nyc-config/-/load-nyc-config-1.1.0.tgz", - "integrity": "sha512-VjeHSlIzpv/NyD3N0YuHfXOPDIixcA1q2ZV98wsMqcYlPmv2n3Yb2lYP9XMElnaFVXg5A7YLTeLu6V84uQDjmQ==", + "node_modules/@inquirer/external-editor": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/@inquirer/external-editor/-/external-editor-1.0.3.tgz", + "integrity": "sha512-RWbSrDiYmO4LbejWY7ttpxczuwQyZLBUyygsA9Nsv95hpzUWwnNTVQmAq3xuh7vNwCp07UTmE5i11XAEExx4RA==", "dev": true, - "license": "ISC", + "license": "MIT", "dependencies": { - "camelcase": "^5.3.1", - "find-up": "^4.1.0", - "get-package-type": "^0.1.0", - "js-yaml": "^3.13.1", - "resolve-from": "^5.0.0" + "chardet": "^2.1.1", + "iconv-lite": "^0.7.0" }, "engines": { - "node": ">=8" + "node": ">=18" + }, + "peerDependencies": { + "@types/node": ">=18" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + } } }, - "node_modules/@istanbuljs/load-nyc-config/node_modules/camelcase": { - "version": "5.3.1", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", - "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", + "node_modules/@inquirer/external-editor/node_modules/iconv-lite": { + "version": "0.7.3", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.7.3.tgz", + "integrity": "sha512-IKXpvIzjnC9XTAUbVBcMfGS0EPaIXtW6v+zr+RRp+hqULEpo0owZax6wyRwPOJbWbzjYspQwusTsfVr0ifh4uQ==", "dev": true, "license": "MIT", + "dependencies": { + "safer-buffer": ">= 2.1.2 < 3.0.0" + }, "engines": { - "node": ">=6" + "node": ">=0.10.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" } }, - "node_modules/@istanbuljs/schema": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/@istanbuljs/schema/-/schema-0.1.6.tgz", - "integrity": "sha512-+Sg6GCR/wy1oSmQDFq4LQDAhm3ETKnorxN+y5nbLULOR3P0c14f2Wurzj3/xqPXtasLFfHd5iRFQ7AJt4KH2cw==", + "node_modules/@inquirer/figures": { + "version": "1.0.15", + "resolved": "https://registry.npmjs.org/@inquirer/figures/-/figures-1.0.15.tgz", + "integrity": "sha512-t2IEY+unGHOzAaVM5Xx6DEWKeXlDDcNPeDyUpsRc6CUhBfU3VQOEl+Vssh7VNp1dR8MdUJBWhuObjXCsVpjN5g==", "dev": true, "license": "MIT", "engines": { - "node": ">=8" + "node": ">=18" } }, - "node_modules/@jest/console": { - "version": "30.4.1", - "resolved": "https://registry.npmjs.org/@jest/console/-/console-30.4.1.tgz", - "integrity": "sha512-v3bhyxUh9Hgmo5p6hAOXe14/R3ZxZDOsvHleh4B07z3m/x4/ngPUXEm9XwK4sF4u+f+P2ORb0Ge+MgpaqRMVDA==", + "node_modules/@inquirer/input": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/@inquirer/input/-/input-4.3.1.tgz", + "integrity": "sha512-kN0pAM4yPrLjJ1XJBjDxyfDduXOuQHrBB8aLDMueuwUGn+vNpF7Gq7TvyVxx8u4SHlFFj4trmj+a2cbpG4Jn1g==", "dev": true, "license": "MIT", "dependencies": { - "@jest/types": "30.4.1", - "@types/node": "*", - "chalk": "^4.1.2", - "jest-message-util": "30.4.1", - "jest-util": "30.4.1", - "slash": "^3.0.0" + "@inquirer/core": "^10.3.2", + "@inquirer/type": "^3.0.10" }, "engines": { - "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" + "node": ">=18" + }, + "peerDependencies": { + "@types/node": ">=18" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + } } }, - "node_modules/@jest/core": { - "version": "30.4.2", - "resolved": "https://registry.npmjs.org/@jest/core/-/core-30.4.2.tgz", - "integrity": "sha512-TZJA6cPJUFxoWhxaLo8t0VX/MZX2wPWr0uIDvLSHIvN4gu9h02vSzqI2kBADG1ExqQlC+cY09xKMSreivvrChQ==", + "node_modules/@inquirer/number": { + "version": "3.0.23", + "resolved": "https://registry.npmjs.org/@inquirer/number/-/number-3.0.23.tgz", + "integrity": "sha512-5Smv0OK7K0KUzUfYUXDXQc9jrf8OHo4ktlEayFlelCjwMXz0299Y8OrI+lj7i4gCBY15UObk76q0QtxjzFcFcg==", "dev": true, "license": "MIT", "dependencies": { - "@jest/console": "30.4.1", - "@jest/pattern": "30.4.0", - "@jest/reporters": "30.4.1", - "@jest/test-result": "30.4.1", - "@jest/transform": "30.4.1", - "@jest/types": "30.4.1", - "@types/node": "*", - "ansi-escapes": "^4.3.2", - "chalk": "^4.1.2", - "ci-info": "^4.2.0", - "exit-x": "^0.2.2", - "fast-json-stable-stringify": "^2.1.0", - "graceful-fs": "^4.2.11", - "jest-changed-files": "30.4.1", - "jest-config": "30.4.2", - "jest-haste-map": "30.4.1", - "jest-message-util": "30.4.1", - "jest-regex-util": "30.4.0", - "jest-resolve": "30.4.1", - "jest-resolve-dependencies": "30.4.2", - "jest-runner": "30.4.2", - "jest-runtime": "30.4.2", - "jest-snapshot": "30.4.1", - "jest-util": "30.4.1", - "jest-validate": "30.4.1", - "jest-watcher": "30.4.1", - "pretty-format": "30.4.1", - "slash": "^3.0.0" + "@inquirer/core": "^10.3.2", + "@inquirer/type": "^3.0.10" }, "engines": { - "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" + "node": ">=18" }, "peerDependencies": { - "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0" + "@types/node": ">=18" }, "peerDependenciesMeta": { - "node-notifier": { + "@types/node": { "optional": true } } }, - "node_modules/@jest/diff-sequences": { - "version": "30.4.0", - "resolved": "https://registry.npmjs.org/@jest/diff-sequences/-/diff-sequences-30.4.0.tgz", - "integrity": "sha512-zOpzlfUs45l6u7jm39qr87JCHUDsaeCtvL+kQe/Vn9jSnRB4/5IPXISm0h9I1vZW/o00Kn4UTJ2MOlhnUGwv3g==", + "node_modules/@inquirer/password": { + "version": "4.0.23", + "resolved": "https://registry.npmjs.org/@inquirer/password/-/password-4.0.23.tgz", + "integrity": "sha512-zREJHjhT5vJBMZX/IUbyI9zVtVfOLiTO66MrF/3GFZYZ7T4YILW5MSkEYHceSii/KtRk+4i3RE7E1CUXA2jHcA==", "dev": true, "license": "MIT", + "dependencies": { + "@inquirer/ansi": "^1.0.2", + "@inquirer/core": "^10.3.2", + "@inquirer/type": "^3.0.10" + }, "engines": { - "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" + "node": ">=18" + }, + "peerDependencies": { + "@types/node": ">=18" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + } } }, - "node_modules/@jest/environment": { - "version": "30.4.1", - "resolved": "https://registry.npmjs.org/@jest/environment/-/environment-30.4.1.tgz", - "integrity": "sha512-AK9yNRqgKxiabqMoe4oW+3/TSSeV8vkdC7BGaxZdU0AFXfOpofTLqdru2GXKZghP3sdgwE9XXpnVwfZ8JnFV4w==", + "node_modules/@inquirer/prompts": { + "version": "7.10.1", + "resolved": "https://registry.npmjs.org/@inquirer/prompts/-/prompts-7.10.1.tgz", + "integrity": "sha512-Dx/y9bCQcXLI5ooQ5KyvA4FTgeo2jYj/7plWfV5Ak5wDPKQZgudKez2ixyfz7tKXzcJciTxqLeK7R9HItwiByg==", "dev": true, "license": "MIT", "dependencies": { - "@jest/fake-timers": "30.4.1", - "@jest/types": "30.4.1", - "@types/node": "*", - "jest-mock": "30.4.1" + "@inquirer/checkbox": "^4.3.2", + "@inquirer/confirm": "^5.1.21", + "@inquirer/editor": "^4.2.23", + "@inquirer/expand": "^4.0.23", + "@inquirer/input": "^4.3.1", + "@inquirer/number": "^3.0.23", + "@inquirer/password": "^4.0.23", + "@inquirer/rawlist": "^4.1.11", + "@inquirer/search": "^3.2.2", + "@inquirer/select": "^4.4.2" }, "engines": { - "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" + "node": ">=18" + }, + "peerDependencies": { + "@types/node": ">=18" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + } } }, - "node_modules/@jest/environment-jsdom-abstract": { - "version": "30.4.1", - "resolved": "https://registry.npmjs.org/@jest/environment-jsdom-abstract/-/environment-jsdom-abstract-30.4.1.tgz", - "integrity": "sha512-dSlKrqug3siYNHVnjwIldShY12wAH3spwRltO/+8VOjg0X+xEq7vOs3DbBs4LRKsu7OH+NUb9kuZUNBF9Ho3TA==", + "node_modules/@inquirer/rawlist": { + "version": "4.1.11", + "resolved": "https://registry.npmjs.org/@inquirer/rawlist/-/rawlist-4.1.11.tgz", + "integrity": "sha512-+LLQB8XGr3I5LZN/GuAHo+GpDJegQwuPARLChlMICNdwW7OwV2izlCSCxN6cqpL0sMXmbKbFcItJgdQq5EBXTw==", "dev": true, "license": "MIT", "dependencies": { - "@jest/environment": "30.4.1", - "@jest/fake-timers": "30.4.1", - "@jest/types": "30.4.1", - "@types/jsdom": "^21.1.7", - "@types/node": "*", - "jest-mock": "30.4.1", - "jest-util": "30.4.1" + "@inquirer/core": "^10.3.2", + "@inquirer/type": "^3.0.10", + "yoctocolors-cjs": "^2.1.3" }, "engines": { - "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" + "node": ">=18" }, "peerDependencies": { - "canvas": "^3.0.0", - "jsdom": "*" + "@types/node": ">=18" }, "peerDependenciesMeta": { - "canvas": { + "@types/node": { "optional": true } } }, - "node_modules/@jest/expect": { - "version": "30.4.1", - "resolved": "https://registry.npmjs.org/@jest/expect/-/expect-30.4.1.tgz", - "integrity": "sha512-ginrj6TMgh2GshLUGCjO94Ptx9HhdZA/I6A9iUfyeLKFtdAjnKzHDgzgP9HYQgbxM1lbXScQ2eUBz2lGeVDPWA==", + "node_modules/@inquirer/search": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/@inquirer/search/-/search-3.2.2.tgz", + "integrity": "sha512-p2bvRfENXCZdWF/U2BXvnSI9h+tuA8iNqtUKb9UWbmLYCRQxd8WkvwWvYn+3NgYaNwdUkHytJMGG4MMLucI1kA==", "dev": true, "license": "MIT", "dependencies": { - "expect": "30.4.1", - "jest-snapshot": "30.4.1" + "@inquirer/core": "^10.3.2", + "@inquirer/figures": "^1.0.15", + "@inquirer/type": "^3.0.10", + "yoctocolors-cjs": "^2.1.3" }, "engines": { - "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" + "node": ">=18" + }, + "peerDependencies": { + "@types/node": ">=18" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + } } }, - "node_modules/@jest/expect-utils": { - "version": "30.4.1", - "resolved": "https://registry.npmjs.org/@jest/expect-utils/-/expect-utils-30.4.1.tgz", - "integrity": "sha512-ZBn5CglH8fBsQsvs4VWNzD4aWfUYks+IdOOQU3MEK71ol/BcVm+P+rtb1KpiFBpSWSCE27uOahyyf1vfqOVbcQ==", + "node_modules/@inquirer/select": { + "version": "4.4.2", + "resolved": "https://registry.npmjs.org/@inquirer/select/-/select-4.4.2.tgz", + "integrity": "sha512-l4xMuJo55MAe+N7Qr4rX90vypFwCajSakx59qe/tMaC1aEHWLyw68wF4o0A4SLAY4E0nd+Vt+EyskeDIqu1M6w==", "dev": true, "license": "MIT", "dependencies": { - "@jest/get-type": "30.1.0" + "@inquirer/ansi": "^1.0.2", + "@inquirer/core": "^10.3.2", + "@inquirer/figures": "^1.0.15", + "@inquirer/type": "^3.0.10", + "yoctocolors-cjs": "^2.1.3" }, "engines": { - "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" + "node": ">=18" + }, + "peerDependencies": { + "@types/node": ">=18" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + } } }, - "node_modules/@jest/fake-timers": { - "version": "30.4.1", - "resolved": "https://registry.npmjs.org/@jest/fake-timers/-/fake-timers-30.4.1.tgz", - "integrity": "sha512-iW5umdmfPeWzehrVhugFQZqCchSCud5S1l2YT0O9ZhjRR0ExclANDZkiSBwzqtnlOn0J1JXvO+HZ6rkuyOVOgQ==", + "node_modules/@inquirer/type": { + "version": "3.0.10", + "resolved": "https://registry.npmjs.org/@inquirer/type/-/type-3.0.10.tgz", + "integrity": "sha512-BvziSRxfz5Ov8ch0z/n3oijRSEcEsHnhggm4xFZe93DHcUCTlutlq9Ox4SVENAfcRD22UQq7T/atg9Wr3k09eA==", "dev": true, "license": "MIT", + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "@types/node": ">=18" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + } + } + }, + "node_modules/@isaacs/cliui": { + "version": "8.0.2", + "resolved": "https://registry.npmjs.org/@isaacs/cliui/-/cliui-8.0.2.tgz", + "integrity": "sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==", + "dev": true, + "license": "ISC", "dependencies": { - "@jest/types": "30.4.1", - "@sinonjs/fake-timers": "^15.4.0", - "@types/node": "*", - "jest-message-util": "30.4.1", - "jest-mock": "30.4.1", - "jest-util": "30.4.1" + "string-width": "^5.1.2", + "string-width-cjs": "npm:string-width@^4.2.0", + "strip-ansi": "^7.0.1", + "strip-ansi-cjs": "npm:strip-ansi@^6.0.1", + "wrap-ansi": "^8.1.0", + "wrap-ansi-cjs": "npm:wrap-ansi@^7.0.0" }, "engines": { - "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" + "node": ">=12" } }, - "node_modules/@jest/get-type": { - "version": "30.1.0", - "resolved": "https://registry.npmjs.org/@jest/get-type/-/get-type-30.1.0.tgz", - "integrity": "sha512-eMbZE2hUnx1WV0pmURZY9XoXPkUYjpc55mb0CrhtdWLtzMQPFvu/rZkTLZFTsdaVQa+Tr4eWAteqcUzoawq/uA==", + "node_modules/@isaacs/cliui/node_modules/ansi-regex": { + "version": "6.2.2", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.2.2.tgz", + "integrity": "sha512-Bq3SmSpyFHaWjPk8If9yc6svM8c56dB5BAtW4Qbw5jHTwwXXcTLoRMkpDJp6VL0XzlWaCHTXrkFURMYmD0sLqg==", "dev": true, "license": "MIT", "engines": { - "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-regex?sponsor=1" } }, - "node_modules/@jest/globals": { - "version": "30.4.1", - "resolved": "https://registry.npmjs.org/@jest/globals/-/globals-30.4.1.tgz", - "integrity": "sha512-ZbuY4cmXC8DkxYjfvT2DbcHWL2T6vmsMhXCDcmTB2T0y0gaezBI77ufq5ZAIdcRkYZ7NEQEDg1xFeKbxUJ5v5Q==", + "node_modules/@isaacs/cliui/node_modules/ansi-styles": { + "version": "6.2.3", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.3.tgz", + "integrity": "sha512-4Dj6M28JB+oAH8kFkTLUo+a2jwOFkuqb3yucU0CANcRRUbxS0cP0nZYCGjcc3BNXwRIsUVmDGgzawme7zvJHvg==", "dev": true, "license": "MIT", - "dependencies": { - "@jest/environment": "30.4.1", - "@jest/expect": "30.4.1", - "@jest/types": "30.4.1", - "jest-mock": "30.4.1" - }, "engines": { - "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "node_modules/@jest/pattern": { - "version": "30.4.0", - "resolved": "https://registry.npmjs.org/@jest/pattern/-/pattern-30.4.0.tgz", - "integrity": "sha512-RAWn3+f9u8BsHijKJ71uHcFp6vmyEt6VvoWXkl6hKF3qVIuWNmudVjg12DlBPGup/frIl5UcUlH5HfEuvHpEXg==", + "node_modules/@isaacs/cliui/node_modules/string-width": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz", + "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==", "dev": true, "license": "MIT", "dependencies": { - "@types/node": "*", - "jest-regex-util": "30.4.0" + "eastasianwidth": "^0.2.0", + "emoji-regex": "^9.2.2", + "strip-ansi": "^7.0.1" }, "engines": { - "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/@jest/reporters": { - "version": "30.4.1", - "resolved": "https://registry.npmjs.org/@jest/reporters/-/reporters-30.4.1.tgz", - "integrity": "sha512-/SnkPCzEQpUaBH81kjdEdDdo2WZl5hxw+BmLDGWjRkm8o7XlhjwsU36cqwe5PGBE5WYpBvDzRSdXx9rbGuJtNA==", + "node_modules/@isaacs/cliui/node_modules/strip-ansi": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.2.0.tgz", + "integrity": "sha512-yDPMNjp4WyfYBkHnjIRLfca1i6KMyGCtsVgoKe/z1+6vukgaENdgGBZt+ZmKPc4gavvEZ5OgHfHdrazhgNyG7w==", "dev": true, "license": "MIT", "dependencies": { - "@bcoe/v8-coverage": "^0.2.3", - "@jest/console": "30.4.1", - "@jest/test-result": "30.4.1", - "@jest/transform": "30.4.1", - "@jest/types": "30.4.1", - "@jridgewell/trace-mapping": "^0.3.25", - "@types/node": "*", - "chalk": "^4.1.2", - "collect-v8-coverage": "^1.0.2", - "exit-x": "^0.2.2", - "glob": "^10.5.0", - "graceful-fs": "^4.2.11", - "istanbul-lib-coverage": "^3.0.0", - "istanbul-lib-instrument": "^6.0.0", - "istanbul-lib-report": "^3.0.0", - "istanbul-lib-source-maps": "^5.0.0", - "istanbul-reports": "^3.1.3", - "jest-message-util": "30.4.1", - "jest-util": "30.4.1", - "jest-worker": "30.4.1", - "slash": "^3.0.0", - "string-length": "^4.0.2", - "v8-to-istanbul": "^9.0.1" + "ansi-regex": "^6.2.2" }, "engines": { - "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" - }, - "peerDependencies": { - "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0" + "node": ">=12" }, - "peerDependenciesMeta": { - "node-notifier": { - "optional": true - } + "funding": { + "url": "https://github.com/chalk/strip-ansi?sponsor=1" } }, - "node_modules/@jest/reporters/node_modules/brace-expansion": { - "version": "2.1.4", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.1.4.tgz", - "integrity": "sha512-hGfVzPxthbf3+2yjg/RBs60cB0FhqBS/zvdV/4wn4/BmN0bNMMHPc4V/BbFieqf1TKAGGAHnY4eSjajCl0f2Xg==", + "node_modules/@isaacs/cliui/node_modules/wrap-ansi": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-8.1.0.tgz", + "integrity": "sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==", "dev": true, "license": "MIT", "dependencies": { - "balanced-match": "^1.0.0" - } - }, - "node_modules/@jest/reporters/node_modules/glob": { - "version": "10.5.0", - "resolved": "https://registry.npmjs.org/glob/-/glob-10.5.0.tgz", - "integrity": "sha512-DfXN8DfhJ7NH3Oe7cFmu3NCu1wKbkReJ8TorzSAFbSKrlNaQSKfIzqYqVY8zlbs2NLBbWpRiU52GX2PbaBVNkg==", - "deprecated": "Old versions of glob are not supported, and contain widely publicized security vulnerabilities, which have been fixed in the current version. Please update. Support for old versions may be purchased (at exorbitant rates) by contacting i@izs.me", - "dev": true, - "license": "ISC", - "dependencies": { - "foreground-child": "^3.1.0", - "jackspeak": "^3.1.2", - "minimatch": "^9.0.4", - "minipass": "^7.1.2", - "package-json-from-dist": "^1.0.0", - "path-scurry": "^1.11.1" + "ansi-styles": "^6.1.0", + "string-width": "^5.0.1", + "strip-ansi": "^7.0.1" }, - "bin": { - "glob": "dist/esm/bin.mjs" + "engines": { + "node": ">=12" }, "funding": { - "url": "https://github.com/sponsors/isaacs" + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" } }, - "node_modules/@jest/reporters/node_modules/minimatch": { - "version": "9.0.9", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.9.tgz", - "integrity": "sha512-OBwBN9AL4dqmETlpS2zasx+vTeWclWzkblfZk7KTA5j3jeOONz/tRCnZomUyvNg83wL5Zv9Ss6HMJXAgL8R2Yg==", + "node_modules/@istanbuljs/load-nyc-config": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@istanbuljs/load-nyc-config/-/load-nyc-config-1.1.0.tgz", + "integrity": "sha512-VjeHSlIzpv/NyD3N0YuHfXOPDIixcA1q2ZV98wsMqcYlPmv2n3Yb2lYP9XMElnaFVXg5A7YLTeLu6V84uQDjmQ==", "dev": true, "license": "ISC", "dependencies": { - "brace-expansion": "^2.0.2" + "camelcase": "^5.3.1", + "find-up": "^4.1.0", + "get-package-type": "^0.1.0", + "js-yaml": "^3.13.1", + "resolve-from": "^5.0.0" }, "engines": { - "node": ">=16 || 14 >=14.17" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" + "node": ">=8" } }, - "node_modules/@jest/schemas": { + "node_modules/@istanbuljs/load-nyc-config/node_modules/camelcase": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", + "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/@istanbuljs/schema": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/@istanbuljs/schema/-/schema-0.1.6.tgz", + "integrity": "sha512-+Sg6GCR/wy1oSmQDFq4LQDAhm3ETKnorxN+y5nbLULOR3P0c14f2Wurzj3/xqPXtasLFfHd5iRFQ7AJt4KH2cw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/@jest/console": { "version": "30.4.1", - "resolved": "https://registry.npmjs.org/@jest/schemas/-/schemas-30.4.1.tgz", - "integrity": "sha512-i6b4qw5qnP8c5FEeBJg/uZQ4ddrkN6Ca8qISJh0pr7a5hfn3h3v5x60BEbOC7OYAGZNMs1LfFLwnW2CuK8F57Q==", + "resolved": "https://registry.npmjs.org/@jest/console/-/console-30.4.1.tgz", + "integrity": "sha512-v3bhyxUh9Hgmo5p6hAOXe14/R3ZxZDOsvHleh4B07z3m/x4/ngPUXEm9XwK4sF4u+f+P2ORb0Ge+MgpaqRMVDA==", "dev": true, "license": "MIT", "dependencies": { - "@sinclair/typebox": "^0.34.0" + "@jest/types": "30.4.1", + "@types/node": "*", + "chalk": "^4.1.2", + "jest-message-util": "30.4.1", + "jest-util": "30.4.1", + "slash": "^3.0.0" }, "engines": { "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" } }, - "node_modules/@jest/snapshot-utils": { - "version": "30.4.1", - "resolved": "https://registry.npmjs.org/@jest/snapshot-utils/-/snapshot-utils-30.4.1.tgz", - "integrity": "sha512-ObY4ljvQ95mt6iwKtVLetR/4yXiAgl3H4nJxhztr0MTjrN97TwDYrnCp/kF60Ec9HdhkWTHSu+Hg05aXfngpOA==", + "node_modules/@jest/core": { + "version": "30.4.2", + "resolved": "https://registry.npmjs.org/@jest/core/-/core-30.4.2.tgz", + "integrity": "sha512-TZJA6cPJUFxoWhxaLo8t0VX/MZX2wPWr0uIDvLSHIvN4gu9h02vSzqI2kBADG1ExqQlC+cY09xKMSreivvrChQ==", "dev": true, "license": "MIT", "dependencies": { + "@jest/console": "30.4.1", + "@jest/pattern": "30.4.0", + "@jest/reporters": "30.4.1", + "@jest/test-result": "30.4.1", + "@jest/transform": "30.4.1", "@jest/types": "30.4.1", + "@types/node": "*", + "ansi-escapes": "^4.3.2", "chalk": "^4.1.2", + "ci-info": "^4.2.0", + "exit-x": "^0.2.2", + "fast-json-stable-stringify": "^2.1.0", "graceful-fs": "^4.2.11", - "natural-compare": "^1.4.0" + "jest-changed-files": "30.4.1", + "jest-config": "30.4.2", + "jest-haste-map": "30.4.1", + "jest-message-util": "30.4.1", + "jest-regex-util": "30.4.0", + "jest-resolve": "30.4.1", + "jest-resolve-dependencies": "30.4.2", + "jest-runner": "30.4.2", + "jest-runtime": "30.4.2", + "jest-snapshot": "30.4.1", + "jest-util": "30.4.1", + "jest-validate": "30.4.1", + "jest-watcher": "30.4.1", + "pretty-format": "30.4.1", + "slash": "^3.0.0" }, "engines": { "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" + }, + "peerDependencies": { + "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0" + }, + "peerDependenciesMeta": { + "node-notifier": { + "optional": true + } } }, - "node_modules/@jest/source-map": { - "version": "30.0.1", - "resolved": "https://registry.npmjs.org/@jest/source-map/-/source-map-30.0.1.tgz", - "integrity": "sha512-MIRWMUUR3sdbP36oyNyhbThLHyJ2eEDClPCiHVbrYAe5g3CHRArIVpBw7cdSB5fr+ofSfIb2Tnsw8iEHL0PYQg==", + "node_modules/@jest/diff-sequences": { + "version": "30.4.0", + "resolved": "https://registry.npmjs.org/@jest/diff-sequences/-/diff-sequences-30.4.0.tgz", + "integrity": "sha512-zOpzlfUs45l6u7jm39qr87JCHUDsaeCtvL+kQe/Vn9jSnRB4/5IPXISm0h9I1vZW/o00Kn4UTJ2MOlhnUGwv3g==", "dev": true, "license": "MIT", - "dependencies": { - "@jridgewell/trace-mapping": "^0.3.25", - "callsites": "^3.1.0", - "graceful-fs": "^4.2.11" - }, "engines": { "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" } }, - "node_modules/@jest/test-result": { + "node_modules/@jest/environment": { "version": "30.4.1", - "resolved": "https://registry.npmjs.org/@jest/test-result/-/test-result-30.4.1.tgz", - "integrity": "sha512-/ZG7pgEiOmmWkN9TplKbOu4id2N5lh7FHwRwlkgBVAzGdRH+OkkQ8wX/kIxg4zmd3ZQvAL1RwL2yWsvNYYECTw==", + "resolved": "https://registry.npmjs.org/@jest/environment/-/environment-30.4.1.tgz", + "integrity": "sha512-AK9yNRqgKxiabqMoe4oW+3/TSSeV8vkdC7BGaxZdU0AFXfOpofTLqdru2GXKZghP3sdgwE9XXpnVwfZ8JnFV4w==", "dev": true, "license": "MIT", "dependencies": { - "@jest/console": "30.4.1", + "@jest/fake-timers": "30.4.1", "@jest/types": "30.4.1", - "@types/istanbul-lib-coverage": "^2.0.6", - "collect-v8-coverage": "^1.0.2" + "@types/node": "*", + "jest-mock": "30.4.1" }, "engines": { "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" } }, - "node_modules/@jest/test-sequencer": { + "node_modules/@jest/environment-jsdom-abstract": { "version": "30.4.1", - "resolved": "https://registry.npmjs.org/@jest/test-sequencer/-/test-sequencer-30.4.1.tgz", - "integrity": "sha512-PeYE+4td5rKjoRPxztObrXU+H8hsjZfxKMXOcmrr34JerSyB/ROOxbbicz8B7A5j9R9VayDnVPvBmedqCsFCdw==", + "resolved": "https://registry.npmjs.org/@jest/environment-jsdom-abstract/-/environment-jsdom-abstract-30.4.1.tgz", + "integrity": "sha512-dSlKrqug3siYNHVnjwIldShY12wAH3spwRltO/+8VOjg0X+xEq7vOs3DbBs4LRKsu7OH+NUb9kuZUNBF9Ho3TA==", "dev": true, "license": "MIT", "dependencies": { - "@jest/test-result": "30.4.1", - "graceful-fs": "^4.2.11", - "jest-haste-map": "30.4.1", - "slash": "^3.0.0" + "@jest/environment": "30.4.1", + "@jest/fake-timers": "30.4.1", + "@jest/types": "30.4.1", + "@types/jsdom": "^21.1.7", + "@types/node": "*", + "jest-mock": "30.4.1", + "jest-util": "30.4.1" }, "engines": { "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" + }, + "peerDependencies": { + "canvas": "^3.0.0", + "jsdom": "*" + }, + "peerDependenciesMeta": { + "canvas": { + "optional": true + } } }, - "node_modules/@jest/transform": { + "node_modules/@jest/expect": { "version": "30.4.1", - "resolved": "https://registry.npmjs.org/@jest/transform/-/transform-30.4.1.tgz", - "integrity": "sha512-Wz0LyktlTvRefoymh+n64hQ84KNXsRGcwdoZ8CSa0Ea+fgYcHZlnk+hDP7v2MS7il2bQ5uTEIxf4/NNfhMN4KQ==", + "resolved": "https://registry.npmjs.org/@jest/expect/-/expect-30.4.1.tgz", + "integrity": "sha512-ginrj6TMgh2GshLUGCjO94Ptx9HhdZA/I6A9iUfyeLKFtdAjnKzHDgzgP9HYQgbxM1lbXScQ2eUBz2lGeVDPWA==", "dev": true, "license": "MIT", "dependencies": { - "@babel/core": "^7.27.4", - "@jest/types": "30.4.1", - "@jridgewell/trace-mapping": "^0.3.25", - "babel-plugin-istanbul": "^7.0.1", - "chalk": "^4.1.2", - "convert-source-map": "^2.0.0", - "fast-json-stable-stringify": "^2.1.0", - "graceful-fs": "^4.2.11", - "jest-haste-map": "30.4.1", - "jest-regex-util": "30.4.0", - "jest-util": "30.4.1", - "pirates": "^4.0.7", - "slash": "^3.0.0", - "write-file-atomic": "^5.0.1" + "expect": "30.4.1", + "jest-snapshot": "30.4.1" }, "engines": { "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" } }, - "node_modules/@jest/types": { + "node_modules/@jest/expect-utils": { "version": "30.4.1", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-30.4.1.tgz", - "integrity": "sha512-f1x/vJXIfjOlEmejYpbkbgw1gOqpPECwMvMEtBqe47j7H2Hg8h8w3o3ikhSXq3MI15kg+oQ0exWO0uCtTNJLoQ==", + "resolved": "https://registry.npmjs.org/@jest/expect-utils/-/expect-utils-30.4.1.tgz", + "integrity": "sha512-ZBn5CglH8fBsQsvs4VWNzD4aWfUYks+IdOOQU3MEK71ol/BcVm+P+rtb1KpiFBpSWSCE27uOahyyf1vfqOVbcQ==", "dev": true, "license": "MIT", "dependencies": { - "@jest/pattern": "30.4.0", - "@jest/schemas": "30.4.1", - "@types/istanbul-lib-coverage": "^2.0.6", - "@types/istanbul-reports": "^3.0.4", - "@types/node": "*", - "@types/yargs": "^17.0.33", - "chalk": "^4.1.2" + "@jest/get-type": "30.1.0" }, "engines": { "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" } }, - "node_modules/@jridgewell/gen-mapping": { - "version": "0.3.13", - "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.13.tgz", - "integrity": "sha512-2kkt/7niJ6MgEPxF0bYdQ6etZaA+fQvDcLKckhy1yIQOzaoKjBBjSj63/aLVjYE3qhRt5dvM+uUyfCg6UKCBbA==", + "node_modules/@jest/fake-timers": { + "version": "30.4.1", + "resolved": "https://registry.npmjs.org/@jest/fake-timers/-/fake-timers-30.4.1.tgz", + "integrity": "sha512-iW5umdmfPeWzehrVhugFQZqCchSCud5S1l2YT0O9ZhjRR0ExclANDZkiSBwzqtnlOn0J1JXvO+HZ6rkuyOVOgQ==", "dev": true, "license": "MIT", "dependencies": { - "@jridgewell/sourcemap-codec": "^1.5.0", - "@jridgewell/trace-mapping": "^0.3.24" + "@jest/types": "30.4.1", + "@sinonjs/fake-timers": "^15.4.0", + "@types/node": "*", + "jest-message-util": "30.4.1", + "jest-mock": "30.4.1", + "jest-util": "30.4.1" + }, + "engines": { + "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" } }, - "node_modules/@jridgewell/remapping": { - "version": "2.3.5", - "resolved": "https://registry.npmjs.org/@jridgewell/remapping/-/remapping-2.3.5.tgz", - "integrity": "sha512-LI9u/+laYG4Ds1TDKSJW2YPrIlcVYOwi2fUC6xB43lueCjgxV4lffOCZCtYFiH6TNOX+tQKXx97T4IKHbhyHEQ==", + "node_modules/@jest/get-type": { + "version": "30.1.0", + "resolved": "https://registry.npmjs.org/@jest/get-type/-/get-type-30.1.0.tgz", + "integrity": "sha512-eMbZE2hUnx1WV0pmURZY9XoXPkUYjpc55mb0CrhtdWLtzMQPFvu/rZkTLZFTsdaVQa+Tr4eWAteqcUzoawq/uA==", "dev": true, "license": "MIT", - "dependencies": { - "@jridgewell/gen-mapping": "^0.3.5", - "@jridgewell/trace-mapping": "^0.3.24" + "engines": { + "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" } }, - "node_modules/@jridgewell/resolve-uri": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz", - "integrity": "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==", + "node_modules/@jest/globals": { + "version": "30.4.1", + "resolved": "https://registry.npmjs.org/@jest/globals/-/globals-30.4.1.tgz", + "integrity": "sha512-ZbuY4cmXC8DkxYjfvT2DbcHWL2T6vmsMhXCDcmTB2T0y0gaezBI77ufq5ZAIdcRkYZ7NEQEDg1xFeKbxUJ5v5Q==", "dev": true, "license": "MIT", + "dependencies": { + "@jest/environment": "30.4.1", + "@jest/expect": "30.4.1", + "@jest/types": "30.4.1", + "jest-mock": "30.4.1" + }, "engines": { - "node": ">=6.0.0" + "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" } }, - "node_modules/@jridgewell/source-map": { - "version": "0.3.11", - "resolved": "https://registry.npmjs.org/@jridgewell/source-map/-/source-map-0.3.11.tgz", - "integrity": "sha512-ZMp1V8ZFcPG5dIWnQLr3NSI1MiCU7UETdS/A0G8V/XWHvJv3ZsFqutJn1Y5RPmAPX6F3BiE397OqveU/9NCuIA==", + "node_modules/@jest/pattern": { + "version": "30.4.0", + "resolved": "https://registry.npmjs.org/@jest/pattern/-/pattern-30.4.0.tgz", + "integrity": "sha512-RAWn3+f9u8BsHijKJ71uHcFp6vmyEt6VvoWXkl6hKF3qVIuWNmudVjg12DlBPGup/frIl5UcUlH5HfEuvHpEXg==", "dev": true, "license": "MIT", "dependencies": { - "@jridgewell/gen-mapping": "^0.3.5", - "@jridgewell/trace-mapping": "^0.3.25" + "@types/node": "*", + "jest-regex-util": "30.4.0" + }, + "engines": { + "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" } }, - "node_modules/@jridgewell/sourcemap-codec": { - "version": "1.5.5", - "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.5.tgz", - "integrity": "sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og==", - "dev": true, - "license": "MIT" - }, - "node_modules/@jridgewell/trace-mapping": { - "version": "0.3.31", - "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.31.tgz", - "integrity": "sha512-zzNR+SdQSDJzc8joaeP8QQoCQr8NuYx2dIIytl1QeBEZHJ9uW6hebsrYgbz8hJwUQao3TWCMtmfV8Nu1twOLAw==", + "node_modules/@jest/reporters": { + "version": "30.4.1", + "resolved": "https://registry.npmjs.org/@jest/reporters/-/reporters-30.4.1.tgz", + "integrity": "sha512-/SnkPCzEQpUaBH81kjdEdDdo2WZl5hxw+BmLDGWjRkm8o7XlhjwsU36cqwe5PGBE5WYpBvDzRSdXx9rbGuJtNA==", "dev": true, "license": "MIT", "dependencies": { - "@jridgewell/resolve-uri": "^3.1.0", - "@jridgewell/sourcemap-codec": "^1.4.14" - } - }, - "node_modules/@jsonjoy.com/base64": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@jsonjoy.com/base64/-/base64-1.1.2.tgz", - "integrity": "sha512-q6XAnWQDIMA3+FTiOYajoYqySkO+JSat0ytXGSuRdq9uXE7o92gzuQwQM14xaCRlBLGq3v5miDGC4vkVTn54xA==", - "dev": true, - "license": "Apache-2.0", - "engines": { - "node": ">=10.0" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/streamich" + "@bcoe/v8-coverage": "^0.2.3", + "@jest/console": "30.4.1", + "@jest/test-result": "30.4.1", + "@jest/transform": "30.4.1", + "@jest/types": "30.4.1", + "@jridgewell/trace-mapping": "^0.3.25", + "@types/node": "*", + "chalk": "^4.1.2", + "collect-v8-coverage": "^1.0.2", + "exit-x": "^0.2.2", + "glob": "^10.5.0", + "graceful-fs": "^4.2.11", + "istanbul-lib-coverage": "^3.0.0", + "istanbul-lib-instrument": "^6.0.0", + "istanbul-lib-report": "^3.0.0", + "istanbul-lib-source-maps": "^5.0.0", + "istanbul-reports": "^3.1.3", + "jest-message-util": "30.4.1", + "jest-util": "30.4.1", + "jest-worker": "30.4.1", + "slash": "^3.0.0", + "string-length": "^4.0.2", + "v8-to-istanbul": "^9.0.1" + }, + "engines": { + "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" + }, + "peerDependencies": { + "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0" + }, + "peerDependenciesMeta": { + "node-notifier": { + "optional": true + } + } + }, + "node_modules/@jest/reporters/node_modules/brace-expansion": { + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.1.4.tgz", + "integrity": "sha512-hGfVzPxthbf3+2yjg/RBs60cB0FhqBS/zvdV/4wn4/BmN0bNMMHPc4V/BbFieqf1TKAGGAHnY4eSjajCl0f2Xg==", + "dev": true, + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0" + } + }, + "node_modules/@jest/reporters/node_modules/glob": { + "version": "10.5.0", + "resolved": "https://registry.npmjs.org/glob/-/glob-10.5.0.tgz", + "integrity": "sha512-DfXN8DfhJ7NH3Oe7cFmu3NCu1wKbkReJ8TorzSAFbSKrlNaQSKfIzqYqVY8zlbs2NLBbWpRiU52GX2PbaBVNkg==", + "deprecated": "Old versions of glob are not supported, and contain widely publicized security vulnerabilities, which have been fixed in the current version. Please update. Support for old versions may be purchased (at exorbitant rates) by contacting i@izs.me", + "dev": true, + "license": "ISC", + "dependencies": { + "foreground-child": "^3.1.0", + "jackspeak": "^3.1.2", + "minimatch": "^9.0.4", + "minipass": "^7.1.2", + "package-json-from-dist": "^1.0.0", + "path-scurry": "^1.11.1" + }, + "bin": { + "glob": "dist/esm/bin.mjs" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/@jest/reporters/node_modules/minimatch": { + "version": "9.0.9", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.9.tgz", + "integrity": "sha512-OBwBN9AL4dqmETlpS2zasx+vTeWclWzkblfZk7KTA5j3jeOONz/tRCnZomUyvNg83wL5Zv9Ss6HMJXAgL8R2Yg==", + "dev": true, + "license": "ISC", + "dependencies": { + "brace-expansion": "^2.0.2" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/@jest/schemas": { + "version": "30.4.1", + "resolved": "https://registry.npmjs.org/@jest/schemas/-/schemas-30.4.1.tgz", + "integrity": "sha512-i6b4qw5qnP8c5FEeBJg/uZQ4ddrkN6Ca8qISJh0pr7a5hfn3h3v5x60BEbOC7OYAGZNMs1LfFLwnW2CuK8F57Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "@sinclair/typebox": "^0.34.0" + }, + "engines": { + "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" + } + }, + "node_modules/@jest/snapshot-utils": { + "version": "30.4.1", + "resolved": "https://registry.npmjs.org/@jest/snapshot-utils/-/snapshot-utils-30.4.1.tgz", + "integrity": "sha512-ObY4ljvQ95mt6iwKtVLetR/4yXiAgl3H4nJxhztr0MTjrN97TwDYrnCp/kF60Ec9HdhkWTHSu+Hg05aXfngpOA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jest/types": "30.4.1", + "chalk": "^4.1.2", + "graceful-fs": "^4.2.11", + "natural-compare": "^1.4.0" + }, + "engines": { + "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" + } + }, + "node_modules/@jest/source-map": { + "version": "30.0.1", + "resolved": "https://registry.npmjs.org/@jest/source-map/-/source-map-30.0.1.tgz", + "integrity": "sha512-MIRWMUUR3sdbP36oyNyhbThLHyJ2eEDClPCiHVbrYAe5g3CHRArIVpBw7cdSB5fr+ofSfIb2Tnsw8iEHL0PYQg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jridgewell/trace-mapping": "^0.3.25", + "callsites": "^3.1.0", + "graceful-fs": "^4.2.11" + }, + "engines": { + "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" + } + }, + "node_modules/@jest/test-result": { + "version": "30.4.1", + "resolved": "https://registry.npmjs.org/@jest/test-result/-/test-result-30.4.1.tgz", + "integrity": "sha512-/ZG7pgEiOmmWkN9TplKbOu4id2N5lh7FHwRwlkgBVAzGdRH+OkkQ8wX/kIxg4zmd3ZQvAL1RwL2yWsvNYYECTw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jest/console": "30.4.1", + "@jest/types": "30.4.1", + "@types/istanbul-lib-coverage": "^2.0.6", + "collect-v8-coverage": "^1.0.2" + }, + "engines": { + "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" + } + }, + "node_modules/@jest/test-sequencer": { + "version": "30.4.1", + "resolved": "https://registry.npmjs.org/@jest/test-sequencer/-/test-sequencer-30.4.1.tgz", + "integrity": "sha512-PeYE+4td5rKjoRPxztObrXU+H8hsjZfxKMXOcmrr34JerSyB/ROOxbbicz8B7A5j9R9VayDnVPvBmedqCsFCdw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jest/test-result": "30.4.1", + "graceful-fs": "^4.2.11", + "jest-haste-map": "30.4.1", + "slash": "^3.0.0" + }, + "engines": { + "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" + } + }, + "node_modules/@jest/transform": { + "version": "30.4.1", + "resolved": "https://registry.npmjs.org/@jest/transform/-/transform-30.4.1.tgz", + "integrity": "sha512-Wz0LyktlTvRefoymh+n64hQ84KNXsRGcwdoZ8CSa0Ea+fgYcHZlnk+hDP7v2MS7il2bQ5uTEIxf4/NNfhMN4KQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/core": "^7.27.4", + "@jest/types": "30.4.1", + "@jridgewell/trace-mapping": "^0.3.25", + "babel-plugin-istanbul": "^7.0.1", + "chalk": "^4.1.2", + "convert-source-map": "^2.0.0", + "fast-json-stable-stringify": "^2.1.0", + "graceful-fs": "^4.2.11", + "jest-haste-map": "30.4.1", + "jest-regex-util": "30.4.0", + "jest-util": "30.4.1", + "pirates": "^4.0.7", + "slash": "^3.0.0", + "write-file-atomic": "^5.0.1" + }, + "engines": { + "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" + } + }, + "node_modules/@jest/types": { + "version": "30.4.1", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-30.4.1.tgz", + "integrity": "sha512-f1x/vJXIfjOlEmejYpbkbgw1gOqpPECwMvMEtBqe47j7H2Hg8h8w3o3ikhSXq3MI15kg+oQ0exWO0uCtTNJLoQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jest/pattern": "30.4.0", + "@jest/schemas": "30.4.1", + "@types/istanbul-lib-coverage": "^2.0.6", + "@types/istanbul-reports": "^3.0.4", + "@types/node": "*", + "@types/yargs": "^17.0.33", + "chalk": "^4.1.2" + }, + "engines": { + "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" + } + }, + "node_modules/@jridgewell/gen-mapping": { + "version": "0.3.13", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.13.tgz", + "integrity": "sha512-2kkt/7niJ6MgEPxF0bYdQ6etZaA+fQvDcLKckhy1yIQOzaoKjBBjSj63/aLVjYE3qhRt5dvM+uUyfCg6UKCBbA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jridgewell/sourcemap-codec": "^1.5.0", + "@jridgewell/trace-mapping": "^0.3.24" + } + }, + "node_modules/@jridgewell/remapping": { + "version": "2.3.5", + "resolved": "https://registry.npmjs.org/@jridgewell/remapping/-/remapping-2.3.5.tgz", + "integrity": "sha512-LI9u/+laYG4Ds1TDKSJW2YPrIlcVYOwi2fUC6xB43lueCjgxV4lffOCZCtYFiH6TNOX+tQKXx97T4IKHbhyHEQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jridgewell/gen-mapping": "^0.3.5", + "@jridgewell/trace-mapping": "^0.3.24" + } + }, + "node_modules/@jridgewell/resolve-uri": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz", + "integrity": "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/source-map": { + "version": "0.3.11", + "resolved": "https://registry.npmjs.org/@jridgewell/source-map/-/source-map-0.3.11.tgz", + "integrity": "sha512-ZMp1V8ZFcPG5dIWnQLr3NSI1MiCU7UETdS/A0G8V/XWHvJv3ZsFqutJn1Y5RPmAPX6F3BiE397OqveU/9NCuIA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jridgewell/gen-mapping": "^0.3.5", + "@jridgewell/trace-mapping": "^0.3.25" + } + }, + "node_modules/@jridgewell/sourcemap-codec": { + "version": "1.5.5", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.5.tgz", + "integrity": "sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og==", + "dev": true, + "license": "MIT" + }, + "node_modules/@jridgewell/trace-mapping": { + "version": "0.3.31", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.31.tgz", + "integrity": "sha512-zzNR+SdQSDJzc8joaeP8QQoCQr8NuYx2dIIytl1QeBEZHJ9uW6hebsrYgbz8hJwUQao3TWCMtmfV8Nu1twOLAw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jridgewell/resolve-uri": "^3.1.0", + "@jridgewell/sourcemap-codec": "^1.4.14" + } + }, + "node_modules/@jsonjoy.com/base64": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@jsonjoy.com/base64/-/base64-1.1.2.tgz", + "integrity": "sha512-q6XAnWQDIMA3+FTiOYajoYqySkO+JSat0ytXGSuRdq9uXE7o92gzuQwQM14xaCRlBLGq3v5miDGC4vkVTn54xA==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=10.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/streamich" + }, + "peerDependencies": { + "tslib": "2" + } + }, + "node_modules/@jsonjoy.com/buffers": { + "version": "17.67.0", + "resolved": "https://registry.npmjs.org/@jsonjoy.com/buffers/-/buffers-17.67.0.tgz", + "integrity": "sha512-tfExRpYxBvi32vPs9ZHaTjSP4fHAfzSmcahOfNxtvGHcyJel+aibkPlGeBB+7AoC6hL7lXIE++8okecBxx7lcw==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=10.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/streamich" + }, + "peerDependencies": { + "tslib": "2" + } + }, + "node_modules/@jsonjoy.com/codegen": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@jsonjoy.com/codegen/-/codegen-1.0.0.tgz", + "integrity": "sha512-E8Oy+08cmCf0EK/NMxpaJZmOxPqM+6iSe2S4nlSBrPZOORoDJILxtbSUEDKQyTamm/BVAhIGllOBNU79/dwf0g==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=10.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/streamich" + }, + "peerDependencies": { + "tslib": "2" + } + }, + "node_modules/@jsonjoy.com/fs-core": { + "version": "4.64.0", + "resolved": "https://registry.npmjs.org/@jsonjoy.com/fs-core/-/fs-core-4.64.0.tgz", + "integrity": "sha512-zs2TAq7Six5jgMuoMNjpspAvOP3mhtgq/k1UyQodEzCtQi/N83y2/y+zcvnZSGp/Rxq96DBN+bValOBQAyn/ew==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@jsonjoy.com/fs-node-builtins": "4.64.0", + "@jsonjoy.com/fs-node-utils": "4.64.0", + "thingies": "^2.5.0" + }, + "engines": { + "node": ">=10.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/streamich" + }, + "peerDependencies": { + "tslib": "2" + } + }, + "node_modules/@jsonjoy.com/fs-fsa": { + "version": "4.64.0", + "resolved": "https://registry.npmjs.org/@jsonjoy.com/fs-fsa/-/fs-fsa-4.64.0.tgz", + "integrity": "sha512-nMWOVbkLFyEgmXZih3wyvxA9XpgyyqyfrINMHvEFqhi7uqfRl7c9ERJt6yX7vgMPrB9Uo+OJO+Spa0cFzPD01w==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@jsonjoy.com/fs-core": "4.64.0", + "@jsonjoy.com/fs-node-builtins": "4.64.0", + "@jsonjoy.com/fs-node-utils": "4.64.0", + "thingies": "^2.5.0" + }, + "engines": { + "node": ">=10.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/streamich" + }, + "peerDependencies": { + "tslib": "2" + } + }, + "node_modules/@jsonjoy.com/fs-node": { + "version": "4.64.0", + "resolved": "https://registry.npmjs.org/@jsonjoy.com/fs-node/-/fs-node-4.64.0.tgz", + "integrity": "sha512-dO+NNkODbUli4uV42bcNrrLvq5rE7SNpdZ5TNd0dtbLsAaNK3MDiIC9lUi+brboGoIjW6vd2fB1qao60nrk5xA==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@jsonjoy.com/fs-core": "4.64.0", + "@jsonjoy.com/fs-node-builtins": "4.64.0", + "@jsonjoy.com/fs-node-utils": "4.64.0", + "@jsonjoy.com/fs-print": "4.64.0", + "@jsonjoy.com/fs-snapshot": "4.64.0", + "glob-to-regex.js": "^1.0.0", + "thingies": "^2.5.0" + }, + "engines": { + "node": ">=10.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/streamich" + }, + "peerDependencies": { + "tslib": "2" + } + }, + "node_modules/@jsonjoy.com/fs-node-builtins": { + "version": "4.64.0", + "resolved": "https://registry.npmjs.org/@jsonjoy.com/fs-node-builtins/-/fs-node-builtins-4.64.0.tgz", + "integrity": "sha512-/o7WRFhUWaM/fOrslwLZGnzn4RmRILykn+lAL+mNObqqRNw+CQSiij6hpCeZ+C7buhdoVo7go/OYqzaSUfDYmA==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=10.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/streamich" + }, + "peerDependencies": { + "tslib": "2" + } + }, + "node_modules/@jsonjoy.com/fs-node-to-fsa": { + "version": "4.64.0", + "resolved": "https://registry.npmjs.org/@jsonjoy.com/fs-node-to-fsa/-/fs-node-to-fsa-4.64.0.tgz", + "integrity": "sha512-WDD9WVs0hb7UAEKTgZW2f66WDrbj7gIIWwpP3spbLyXa0rghtUaFTB8L4gdR3ZCWwiKIsj38/CNijpVmpnuPUw==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@jsonjoy.com/fs-fsa": "4.64.0", + "@jsonjoy.com/fs-node-builtins": "4.64.0", + "@jsonjoy.com/fs-node-utils": "4.64.0" + }, + "engines": { + "node": ">=10.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/streamich" + }, + "peerDependencies": { + "tslib": "2" + } + }, + "node_modules/@jsonjoy.com/fs-node-utils": { + "version": "4.64.0", + "resolved": "https://registry.npmjs.org/@jsonjoy.com/fs-node-utils/-/fs-node-utils-4.64.0.tgz", + "integrity": "sha512-k5Indsx9hWW9xSF7Y6oSKKwtCUNhzZxadub3owhIlitc+iMRVlPPdX2duTKQWBL3qNWpXya8jykgaaWpheeS4w==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@jsonjoy.com/fs-node-builtins": "4.64.0", + "glob-to-regex.js": "^1.0.1" + }, + "engines": { + "node": ">=10.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/streamich" + }, + "peerDependencies": { + "tslib": "2" + } + }, + "node_modules/@jsonjoy.com/fs-print": { + "version": "4.64.0", + "resolved": "https://registry.npmjs.org/@jsonjoy.com/fs-print/-/fs-print-4.64.0.tgz", + "integrity": "sha512-PHZFccchvkhWrwPWHjmVAhbC3vSHCtyZvlZfJJ3ho2bnzl450hXri6/8e6pbkWdH+SkmLXNml0sV8e5HDAfxKw==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@jsonjoy.com/fs-node-utils": "4.64.0", + "tree-dump": "^1.1.0" + }, + "engines": { + "node": ">=10.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/streamich" + }, + "peerDependencies": { + "tslib": "2" + } + }, + "node_modules/@jsonjoy.com/fs-snapshot": { + "version": "4.64.0", + "resolved": "https://registry.npmjs.org/@jsonjoy.com/fs-snapshot/-/fs-snapshot-4.64.0.tgz", + "integrity": "sha512-oM7UDeL83q6NBzzsfKAsYKXKVXlykKFqqOLh4xZZKAzzROTlInkPbc6LTDGThEOnPiFiUzA7tYziHG9xavd76Q==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@jsonjoy.com/buffers": "^17.65.0", + "@jsonjoy.com/fs-node-utils": "4.64.0", + "@jsonjoy.com/json-pack": "^17.65.0", + "@jsonjoy.com/util": "^17.65.0" + }, + "engines": { + "node": ">=10.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/streamich" }, "peerDependencies": { "tslib": "2" } }, - "node_modules/@jsonjoy.com/buffers": { + "node_modules/@jsonjoy.com/fs-snapshot/node_modules/@jsonjoy.com/base64": { "version": "17.67.0", - "resolved": "https://registry.npmjs.org/@jsonjoy.com/buffers/-/buffers-17.67.0.tgz", - "integrity": "sha512-tfExRpYxBvi32vPs9ZHaTjSP4fHAfzSmcahOfNxtvGHcyJel+aibkPlGeBB+7AoC6hL7lXIE++8okecBxx7lcw==", + "resolved": "https://registry.npmjs.org/@jsonjoy.com/base64/-/base64-17.67.0.tgz", + "integrity": "sha512-5SEsJGsm15aP8TQGkDfJvz9axgPwAEm98S5DxOuYe8e1EbfajcDmgeXXzccEjh+mLnjqEKrkBdjHWS5vFNwDdw==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=10.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/streamich" + }, + "peerDependencies": { + "tslib": "2" + } + }, + "node_modules/@jsonjoy.com/fs-snapshot/node_modules/@jsonjoy.com/codegen": { + "version": "17.67.0", + "resolved": "https://registry.npmjs.org/@jsonjoy.com/codegen/-/codegen-17.67.0.tgz", + "integrity": "sha512-idnkUplROpdBOV0HMcwhsCUS5TRUi9poagdGs70A6S4ux9+/aPuKbh8+UYRTLYQHtXvAdNfQWXDqZEx5k4Dj2Q==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=10.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/streamich" + }, + "peerDependencies": { + "tslib": "2" + } + }, + "node_modules/@jsonjoy.com/fs-snapshot/node_modules/@jsonjoy.com/json-pack": { + "version": "17.67.0", + "resolved": "https://registry.npmjs.org/@jsonjoy.com/json-pack/-/json-pack-17.67.0.tgz", + "integrity": "sha512-t0ejURcGaZsn1ClbJ/3kFqSOjlryd92eQY465IYrezsXmPcfHPE/av4twRSxf6WE+TkZgLY+71vCZbiIiFKA/w==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@jsonjoy.com/base64": "17.67.0", + "@jsonjoy.com/buffers": "17.67.0", + "@jsonjoy.com/codegen": "17.67.0", + "@jsonjoy.com/json-pointer": "17.67.0", + "@jsonjoy.com/util": "17.67.0", + "hyperdyperid": "^1.2.0", + "thingies": "^2.5.0", + "tree-dump": "^1.1.0" + }, + "engines": { + "node": ">=10.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/streamich" + }, + "peerDependencies": { + "tslib": "2" + } + }, + "node_modules/@jsonjoy.com/fs-snapshot/node_modules/@jsonjoy.com/json-pointer": { + "version": "17.67.0", + "resolved": "https://registry.npmjs.org/@jsonjoy.com/json-pointer/-/json-pointer-17.67.0.tgz", + "integrity": "sha512-+iqOFInH+QZGmSuaybBUNdh7yvNrXvqR+h3wjXm0N/3JK1EyyFAeGJvqnmQL61d1ARLlk/wJdFKSL+LHJ1eaUA==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@jsonjoy.com/util": "17.67.0" + }, + "engines": { + "node": ">=10.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/streamich" + }, + "peerDependencies": { + "tslib": "2" + } + }, + "node_modules/@jsonjoy.com/fs-snapshot/node_modules/@jsonjoy.com/util": { + "version": "17.67.0", + "resolved": "https://registry.npmjs.org/@jsonjoy.com/util/-/util-17.67.0.tgz", + "integrity": "sha512-6+8xBaz1rLSohlGh68D1pdw3AwDi9xydm8QNlAFkvnavCJYSze+pxoW2VKP8p308jtlMRLs5NTHfPlZLd4w7ew==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@jsonjoy.com/buffers": "17.67.0", + "@jsonjoy.com/codegen": "17.67.0" + }, + "engines": { + "node": ">=10.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/streamich" + }, + "peerDependencies": { + "tslib": "2" + } + }, + "node_modules/@jsonjoy.com/json-pack": { + "version": "1.21.0", + "resolved": "https://registry.npmjs.org/@jsonjoy.com/json-pack/-/json-pack-1.21.0.tgz", + "integrity": "sha512-+AKG+R2cfZMShzrF2uQw34v3zbeDYUqnQ+jg7ORic3BGtfw9p/+N6RJbq/kkV8JmYZaINknaEQ2m0/f693ZPpg==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@jsonjoy.com/base64": "^1.1.2", + "@jsonjoy.com/buffers": "^1.2.0", + "@jsonjoy.com/codegen": "^1.0.0", + "@jsonjoy.com/json-pointer": "^1.0.2", + "@jsonjoy.com/util": "^1.9.0", + "hyperdyperid": "^1.2.0", + "thingies": "^2.5.0", + "tree-dump": "^1.1.0" + }, + "engines": { + "node": ">=10.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/streamich" + }, + "peerDependencies": { + "tslib": "2" + } + }, + "node_modules/@jsonjoy.com/json-pack/node_modules/@jsonjoy.com/buffers": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@jsonjoy.com/buffers/-/buffers-1.2.1.tgz", + "integrity": "sha512-12cdlDwX4RUM3QxmUbVJWqZ/mrK6dFQH4Zxq6+r1YXKXYBNgZXndx2qbCJwh3+WWkCSn67IjnlG3XYTvmvYtgA==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=10.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/streamich" + }, + "peerDependencies": { + "tslib": "2" + } + }, + "node_modules/@jsonjoy.com/json-pointer": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@jsonjoy.com/json-pointer/-/json-pointer-1.0.2.tgz", + "integrity": "sha512-Fsn6wM2zlDzY1U+v4Nc8bo3bVqgfNTGcn6dMgs6FjrEnt4ZCe60o6ByKRjOGlI2gow0aE/Q41QOigdTqkyK5fg==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@jsonjoy.com/codegen": "^1.0.0", + "@jsonjoy.com/util": "^1.9.0" + }, + "engines": { + "node": ">=10.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/streamich" + }, + "peerDependencies": { + "tslib": "2" + } + }, + "node_modules/@jsonjoy.com/util": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@jsonjoy.com/util/-/util-1.9.0.tgz", + "integrity": "sha512-pLuQo+VPRnN8hfPqUTLTHk126wuYdXVxE6aDmjSeV4NCAgyxWbiOIeNJVtID3h1Vzpoi9m4jXezf73I6LgabgQ==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@jsonjoy.com/buffers": "^1.0.0", + "@jsonjoy.com/codegen": "^1.0.0" + }, + "engines": { + "node": ">=10.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/streamich" + }, + "peerDependencies": { + "tslib": "2" + } + }, + "node_modules/@jsonjoy.com/util/node_modules/@jsonjoy.com/buffers": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@jsonjoy.com/buffers/-/buffers-1.2.1.tgz", + "integrity": "sha512-12cdlDwX4RUM3QxmUbVJWqZ/mrK6dFQH4Zxq6+r1YXKXYBNgZXndx2qbCJwh3+WWkCSn67IjnlG3XYTvmvYtgA==", "dev": true, "license": "Apache-2.0", "engines": { @@ -3291,505 +4079,710 @@ }, "funding": { "type": "github", - "url": "https://github.com/sponsors/streamich" + "url": "https://github.com/sponsors/streamich" + }, + "peerDependencies": { + "tslib": "2" + } + }, + "node_modules/@keyv/serialize": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@keyv/serialize/-/serialize-1.1.1.tgz", + "integrity": "sha512-dXn3FZhPv0US+7dtJsIi2R+c7qWYiReoEh5zUntWCf4oSpMNib8FDhSoed6m3QyZdx5hK7iLFkYk3rNxwt8vTA==", + "dev": true, + "license": "MIT" + }, + "node_modules/@kwsites/file-exists": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@kwsites/file-exists/-/file-exists-1.1.1.tgz", + "integrity": "sha512-m9/5YGR18lIwxSFDwfE3oA7bWuq9kdau6ugN4H2rJeyhFQZcG9AgSHkQtSD15a8WvTgfz9aikZMrKPHvbpqFiw==", + "dev": true, + "license": "MIT", + "dependencies": { + "debug": "^4.1.1" + } + }, + "node_modules/@kwsites/promise-deferred": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@kwsites/promise-deferred/-/promise-deferred-1.1.1.tgz", + "integrity": "sha512-GaHYm+c0O9MjZRu0ongGBRbinu8gVAMd2UZjji6jVmqKtZluZnptXGWhz1E8j8D2HJ3f/yMxKAUC0b+57wncIw==", + "dev": true, + "license": "MIT" + }, + "node_modules/@leichtgewicht/ip-codec": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@leichtgewicht/ip-codec/-/ip-codec-2.0.5.tgz", + "integrity": "sha512-Vo+PSpZG2/fmgmiNzYK9qWRh8h/CHrwD0mo1h1DzL4yzHNSfWYujGTYsWGreD000gcgmZ7K4Ys6Tx9TxtsKdDw==", + "dev": true, + "license": "MIT" + }, + "node_modules/@napi-rs/wasm-runtime": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/@napi-rs/wasm-runtime/-/wasm-runtime-1.2.2.tgz", + "integrity": "sha512-JfB4kuJQjaoHuCTseIINHtHWeJnvgEcxjwA5t/Y00ZgaOO1Crz3fjT/p8kT28zA/Caz7oiUMn3d6H2yOVCVwuw==", + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "@tybys/wasm-util": "^0.10.3" + }, + "engines": { + "node": "^20.19.0 || ^22.13.0 || >=23.5.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/Brooooooklyn" }, "peerDependencies": { - "tslib": "2" + "@emnapi/core": "^1.7.1 || ^2.0.0-alpha.3", + "@emnapi/runtime": "^1.7.1 || ^2.0.0-alpha.3" } }, - "node_modules/@jsonjoy.com/codegen": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/@jsonjoy.com/codegen/-/codegen-1.0.0.tgz", - "integrity": "sha512-E8Oy+08cmCf0EK/NMxpaJZmOxPqM+6iSe2S4nlSBrPZOORoDJILxtbSUEDKQyTamm/BVAhIGllOBNU79/dwf0g==", + "node_modules/@nicolo-ribaudo/eslint-scope-5-internals": { + "version": "5.1.1-v1", + "resolved": "https://registry.npmjs.org/@nicolo-ribaudo/eslint-scope-5-internals/-/eslint-scope-5-internals-5.1.1-v1.tgz", + "integrity": "sha512-54/JRvkLIzzDWshCWfuhadfrfZVPiElY8Fcgmg1HroEly/EDSszzhBAsarCux+D/kOslTRquNzuyGSmUSTTHGg==", "dev": true, - "license": "Apache-2.0", + "license": "MIT", + "dependencies": { + "eslint-scope": "5.1.1" + } + }, + "node_modules/@noble/hashes": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-1.4.0.tgz", + "integrity": "sha512-V1JJ1WTRUqHHrOSh597hURcMqVKVGL/ea3kv0gSnEdsEZ0/+VyPghM1lMNGc00z7CIQorSvbKpuJkxvuHbvdbg==", + "dev": true, + "license": "MIT", "engines": { - "node": ">=10.0" + "node": ">= 16" }, "funding": { - "type": "github", - "url": "https://github.com/sponsors/streamich" - }, - "peerDependencies": { - "tslib": "2" + "url": "https://paulmillr.com/funding/" } }, - "node_modules/@jsonjoy.com/fs-core": { - "version": "4.64.0", - "resolved": "https://registry.npmjs.org/@jsonjoy.com/fs-core/-/fs-core-4.64.0.tgz", - "integrity": "sha512-zs2TAq7Six5jgMuoMNjpspAvOP3mhtgq/k1UyQodEzCtQi/N83y2/y+zcvnZSGp/Rxq96DBN+bValOBQAyn/ew==", + "node_modules/@nodable/entities": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@nodable/entities/-/entities-3.0.0.tgz", + "integrity": "sha512-8L9xFeTYKhm49xfIypoe2W5wV1m/3Z58kT+7kR9A8OyFxcPduI4VmxaUMQyKYrRjUoLLSXv6EKKID5Tvj9cUVw==", "dev": true, - "license": "Apache-2.0", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/nodable" + } + ], + "license": "MIT" + }, + "node_modules/@nodelib/fs.scandir": { + "version": "2.1.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", + "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", + "dev": true, + "license": "MIT", "dependencies": { - "@jsonjoy.com/fs-node-builtins": "4.64.0", - "@jsonjoy.com/fs-node-utils": "4.64.0", - "thingies": "^2.5.0" + "@nodelib/fs.stat": "2.0.5", + "run-parallel": "^1.1.9" }, "engines": { - "node": ">=10.0" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/streamich" - }, - "peerDependencies": { - "tslib": "2" + "node": ">= 8" } }, - "node_modules/@jsonjoy.com/fs-fsa": { - "version": "4.64.0", - "resolved": "https://registry.npmjs.org/@jsonjoy.com/fs-fsa/-/fs-fsa-4.64.0.tgz", - "integrity": "sha512-nMWOVbkLFyEgmXZih3wyvxA9XpgyyqyfrINMHvEFqhi7uqfRl7c9ERJt6yX7vgMPrB9Uo+OJO+Spa0cFzPD01w==", + "node_modules/@nodelib/fs.stat": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", + "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", "dev": true, - "license": "Apache-2.0", + "license": "MIT", + "engines": { + "node": ">= 8" + } + }, + "node_modules/@nodelib/fs.walk": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", + "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", + "dev": true, + "license": "MIT", "dependencies": { - "@jsonjoy.com/fs-core": "4.64.0", - "@jsonjoy.com/fs-node-builtins": "4.64.0", - "@jsonjoy.com/fs-node-utils": "4.64.0", - "thingies": "^2.5.0" + "@nodelib/fs.scandir": "2.1.5", + "fastq": "^1.6.0" }, "engines": { - "node": ">=10.0" + "node": ">= 8" + } + }, + "node_modules/@octokit/app": { + "version": "14.1.0", + "resolved": "https://registry.npmjs.org/@octokit/app/-/app-14.1.0.tgz", + "integrity": "sha512-g3uEsGOQCBl1+W1rgfwoRFUIR6PtvB2T1E4RpygeUU5LrLvlOqcxrt5lfykIeRpUPpupreGJUYl70fqMDXdTpw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@octokit/auth-app": "^6.0.0", + "@octokit/auth-unauthenticated": "^5.0.0", + "@octokit/core": "^5.0.0", + "@octokit/oauth-app": "^6.0.0", + "@octokit/plugin-paginate-rest": "^9.0.0", + "@octokit/types": "^12.0.0", + "@octokit/webhooks": "^12.0.4" }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/streamich" + "engines": { + "node": ">= 18" + } + }, + "node_modules/@octokit/auth-app": { + "version": "6.1.4", + "resolved": "https://registry.npmjs.org/@octokit/auth-app/-/auth-app-6.1.4.tgz", + "integrity": "sha512-QkXkSOHZK4dA5oUqY5Dk3S+5pN2s1igPjEASNQV8/vgJgW034fQWR16u7VsNOK/EljA00eyjYF5mWNxWKWhHRQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@octokit/auth-oauth-app": "^7.1.0", + "@octokit/auth-oauth-user": "^4.1.0", + "@octokit/request": "^8.3.1", + "@octokit/request-error": "^5.1.0", + "@octokit/types": "^13.1.0", + "deprecation": "^2.3.1", + "lru-cache": "npm:@wolfy1339/lru-cache@^11.0.2-patch.1", + "universal-github-app-jwt": "^1.1.2", + "universal-user-agent": "^6.0.0" }, - "peerDependencies": { - "tslib": "2" + "engines": { + "node": ">= 18" } }, - "node_modules/@jsonjoy.com/fs-node": { - "version": "4.64.0", - "resolved": "https://registry.npmjs.org/@jsonjoy.com/fs-node/-/fs-node-4.64.0.tgz", - "integrity": "sha512-dO+NNkODbUli4uV42bcNrrLvq5rE7SNpdZ5TNd0dtbLsAaNK3MDiIC9lUi+brboGoIjW6vd2fB1qao60nrk5xA==", + "node_modules/@octokit/auth-app/node_modules/@octokit/openapi-types": { + "version": "24.2.0", + "resolved": "https://registry.npmjs.org/@octokit/openapi-types/-/openapi-types-24.2.0.tgz", + "integrity": "sha512-9sIH3nSUttelJSXUrmGzl7QUBFul0/mB8HRYl3fOlgHbIWG+WnYDXU3v/2zMtAvuzZ/ed00Ei6on975FhBfzrg==", "dev": true, - "license": "Apache-2.0", + "license": "MIT" + }, + "node_modules/@octokit/auth-app/node_modules/@octokit/types": { + "version": "13.10.0", + "resolved": "https://registry.npmjs.org/@octokit/types/-/types-13.10.0.tgz", + "integrity": "sha512-ifLaO34EbbPj0Xgro4G5lP5asESjwHracYJvVaPIyXMuiuXLlhic3S47cBdTb+jfODkTE5YtGCLt3Ay3+J97sA==", + "dev": true, + "license": "MIT", "dependencies": { - "@jsonjoy.com/fs-core": "4.64.0", - "@jsonjoy.com/fs-node-builtins": "4.64.0", - "@jsonjoy.com/fs-node-utils": "4.64.0", - "@jsonjoy.com/fs-print": "4.64.0", - "@jsonjoy.com/fs-snapshot": "4.64.0", - "glob-to-regex.js": "^1.0.0", - "thingies": "^2.5.0" + "@octokit/openapi-types": "^24.2.0" + } + }, + "node_modules/@octokit/auth-app/node_modules/lru-cache": { + "name": "@wolfy1339/lru-cache", + "version": "11.0.2-patch.1", + "resolved": "https://registry.npmjs.org/@wolfy1339/lru-cache/-/lru-cache-11.0.2-patch.1.tgz", + "integrity": "sha512-BgYZfL2ADCXKOw2wJtkM3slhHotawWkgIRRxq4wEybnZQPjvAp71SPX35xepMykTw8gXlzWcWPTY31hlbnRsDA==", + "dev": true, + "license": "ISC", + "engines": { + "node": "18 >=18.20 || 20 || >=22" + } + }, + "node_modules/@octokit/auth-oauth-app": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/@octokit/auth-oauth-app/-/auth-oauth-app-7.1.0.tgz", + "integrity": "sha512-w+SyJN/b0l/HEb4EOPRudo7uUOSW51jcK1jwLa+4r7PA8FPFpoxEnHBHMITqCsc/3Vo2qqFjgQfz/xUUvsSQnA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@octokit/auth-oauth-device": "^6.1.0", + "@octokit/auth-oauth-user": "^4.1.0", + "@octokit/request": "^8.3.1", + "@octokit/types": "^13.0.0", + "@types/btoa-lite": "^1.0.0", + "btoa-lite": "^1.0.0", + "universal-user-agent": "^6.0.0" }, "engines": { - "node": ">=10.0" + "node": ">= 18" + } + }, + "node_modules/@octokit/auth-oauth-app/node_modules/@octokit/openapi-types": { + "version": "24.2.0", + "resolved": "https://registry.npmjs.org/@octokit/openapi-types/-/openapi-types-24.2.0.tgz", + "integrity": "sha512-9sIH3nSUttelJSXUrmGzl7QUBFul0/mB8HRYl3fOlgHbIWG+WnYDXU3v/2zMtAvuzZ/ed00Ei6on975FhBfzrg==", + "dev": true, + "license": "MIT" + }, + "node_modules/@octokit/auth-oauth-app/node_modules/@octokit/types": { + "version": "13.10.0", + "resolved": "https://registry.npmjs.org/@octokit/types/-/types-13.10.0.tgz", + "integrity": "sha512-ifLaO34EbbPj0Xgro4G5lP5asESjwHracYJvVaPIyXMuiuXLlhic3S47cBdTb+jfODkTE5YtGCLt3Ay3+J97sA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@octokit/openapi-types": "^24.2.0" + } + }, + "node_modules/@octokit/auth-oauth-device": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/@octokit/auth-oauth-device/-/auth-oauth-device-6.1.0.tgz", + "integrity": "sha512-FNQ7cb8kASufd6Ej4gnJ3f1QB5vJitkoV1O0/g6e6lUsQ7+VsSNRHRmFScN2tV4IgKA12frrr/cegUs0t+0/Lw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@octokit/oauth-methods": "^4.1.0", + "@octokit/request": "^8.3.1", + "@octokit/types": "^13.0.0", + "universal-user-agent": "^6.0.0" }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/streamich" + "engines": { + "node": ">= 18" + } + }, + "node_modules/@octokit/auth-oauth-device/node_modules/@octokit/openapi-types": { + "version": "24.2.0", + "resolved": "https://registry.npmjs.org/@octokit/openapi-types/-/openapi-types-24.2.0.tgz", + "integrity": "sha512-9sIH3nSUttelJSXUrmGzl7QUBFul0/mB8HRYl3fOlgHbIWG+WnYDXU3v/2zMtAvuzZ/ed00Ei6on975FhBfzrg==", + "dev": true, + "license": "MIT" + }, + "node_modules/@octokit/auth-oauth-device/node_modules/@octokit/types": { + "version": "13.10.0", + "resolved": "https://registry.npmjs.org/@octokit/types/-/types-13.10.0.tgz", + "integrity": "sha512-ifLaO34EbbPj0Xgro4G5lP5asESjwHracYJvVaPIyXMuiuXLlhic3S47cBdTb+jfODkTE5YtGCLt3Ay3+J97sA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@octokit/openapi-types": "^24.2.0" + } + }, + "node_modules/@octokit/auth-oauth-user": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/@octokit/auth-oauth-user/-/auth-oauth-user-4.1.0.tgz", + "integrity": "sha512-FrEp8mtFuS/BrJyjpur+4GARteUCrPeR/tZJzD8YourzoVhRics7u7we/aDcKv+yywRNwNi/P4fRi631rG/OyQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@octokit/auth-oauth-device": "^6.1.0", + "@octokit/oauth-methods": "^4.1.0", + "@octokit/request": "^8.3.1", + "@octokit/types": "^13.0.0", + "btoa-lite": "^1.0.0", + "universal-user-agent": "^6.0.0" }, - "peerDependencies": { - "tslib": "2" + "engines": { + "node": ">= 18" } }, - "node_modules/@jsonjoy.com/fs-node-builtins": { - "version": "4.64.0", - "resolved": "https://registry.npmjs.org/@jsonjoy.com/fs-node-builtins/-/fs-node-builtins-4.64.0.tgz", - "integrity": "sha512-/o7WRFhUWaM/fOrslwLZGnzn4RmRILykn+lAL+mNObqqRNw+CQSiij6hpCeZ+C7buhdoVo7go/OYqzaSUfDYmA==", + "node_modules/@octokit/auth-oauth-user/node_modules/@octokit/openapi-types": { + "version": "24.2.0", + "resolved": "https://registry.npmjs.org/@octokit/openapi-types/-/openapi-types-24.2.0.tgz", + "integrity": "sha512-9sIH3nSUttelJSXUrmGzl7QUBFul0/mB8HRYl3fOlgHbIWG+WnYDXU3v/2zMtAvuzZ/ed00Ei6on975FhBfzrg==", "dev": true, - "license": "Apache-2.0", + "license": "MIT" + }, + "node_modules/@octokit/auth-oauth-user/node_modules/@octokit/types": { + "version": "13.10.0", + "resolved": "https://registry.npmjs.org/@octokit/types/-/types-13.10.0.tgz", + "integrity": "sha512-ifLaO34EbbPj0Xgro4G5lP5asESjwHracYJvVaPIyXMuiuXLlhic3S47cBdTb+jfODkTE5YtGCLt3Ay3+J97sA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@octokit/openapi-types": "^24.2.0" + } + }, + "node_modules/@octokit/auth-token": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@octokit/auth-token/-/auth-token-4.0.0.tgz", + "integrity": "sha512-tY/msAuJo6ARbK6SPIxZrPBms3xPbfwBrulZe0Wtr/DIY9lje2HeV1uoebShn6mx7SjCHif6EjMvoREj+gZ+SA==", + "dev": true, + "license": "MIT", "engines": { - "node": ">=10.0" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/streamich" - }, - "peerDependencies": { - "tslib": "2" + "node": ">= 18" } }, - "node_modules/@jsonjoy.com/fs-node-to-fsa": { - "version": "4.64.0", - "resolved": "https://registry.npmjs.org/@jsonjoy.com/fs-node-to-fsa/-/fs-node-to-fsa-4.64.0.tgz", - "integrity": "sha512-WDD9WVs0hb7UAEKTgZW2f66WDrbj7gIIWwpP3spbLyXa0rghtUaFTB8L4gdR3ZCWwiKIsj38/CNijpVmpnuPUw==", + "node_modules/@octokit/auth-unauthenticated": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/@octokit/auth-unauthenticated/-/auth-unauthenticated-5.0.1.tgz", + "integrity": "sha512-oxeWzmBFxWd+XolxKTc4zr+h3mt+yofn4r7OfoIkR/Cj/o70eEGmPsFbueyJE2iBAGpjgTnEOKM3pnuEGVmiqg==", "dev": true, - "license": "Apache-2.0", + "license": "MIT", "dependencies": { - "@jsonjoy.com/fs-fsa": "4.64.0", - "@jsonjoy.com/fs-node-builtins": "4.64.0", - "@jsonjoy.com/fs-node-utils": "4.64.0" + "@octokit/request-error": "^5.0.0", + "@octokit/types": "^12.0.0" }, "engines": { - "node": ">=10.0" + "node": ">= 18" + } + }, + "node_modules/@octokit/core": { + "version": "5.2.2", + "resolved": "https://registry.npmjs.org/@octokit/core/-/core-5.2.2.tgz", + "integrity": "sha512-/g2d4sW9nUDJOMz3mabVQvOGhVa4e/BN/Um7yca9Bb2XTzPPnfTWHWQg+IsEYO7M3Vx+EXvaM/I2pJWIMun1bg==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "@octokit/auth-token": "^4.0.0", + "@octokit/graphql": "^7.1.0", + "@octokit/request": "^8.4.1", + "@octokit/request-error": "^5.1.1", + "@octokit/types": "^13.0.0", + "before-after-hook": "^2.2.0", + "universal-user-agent": "^6.0.0" }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/streamich" + "engines": { + "node": ">= 18" + } + }, + "node_modules/@octokit/core/node_modules/@octokit/openapi-types": { + "version": "24.2.0", + "resolved": "https://registry.npmjs.org/@octokit/openapi-types/-/openapi-types-24.2.0.tgz", + "integrity": "sha512-9sIH3nSUttelJSXUrmGzl7QUBFul0/mB8HRYl3fOlgHbIWG+WnYDXU3v/2zMtAvuzZ/ed00Ei6on975FhBfzrg==", + "dev": true, + "license": "MIT" + }, + "node_modules/@octokit/core/node_modules/@octokit/types": { + "version": "13.10.0", + "resolved": "https://registry.npmjs.org/@octokit/types/-/types-13.10.0.tgz", + "integrity": "sha512-ifLaO34EbbPj0Xgro4G5lP5asESjwHracYJvVaPIyXMuiuXLlhic3S47cBdTb+jfODkTE5YtGCLt3Ay3+J97sA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@octokit/openapi-types": "^24.2.0" + } + }, + "node_modules/@octokit/endpoint": { + "version": "9.0.6", + "resolved": "https://registry.npmjs.org/@octokit/endpoint/-/endpoint-9.0.6.tgz", + "integrity": "sha512-H1fNTMA57HbkFESSt3Y9+FBICv+0jFceJFPWDePYlR/iMGrwM5ph+Dd4XRQs+8X+PUFURLQgX9ChPfhJ/1uNQw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@octokit/types": "^13.1.0", + "universal-user-agent": "^6.0.0" }, - "peerDependencies": { - "tslib": "2" + "engines": { + "node": ">= 18" } }, - "node_modules/@jsonjoy.com/fs-node-utils": { - "version": "4.64.0", - "resolved": "https://registry.npmjs.org/@jsonjoy.com/fs-node-utils/-/fs-node-utils-4.64.0.tgz", - "integrity": "sha512-k5Indsx9hWW9xSF7Y6oSKKwtCUNhzZxadub3owhIlitc+iMRVlPPdX2duTKQWBL3qNWpXya8jykgaaWpheeS4w==", + "node_modules/@octokit/endpoint/node_modules/@octokit/openapi-types": { + "version": "24.2.0", + "resolved": "https://registry.npmjs.org/@octokit/openapi-types/-/openapi-types-24.2.0.tgz", + "integrity": "sha512-9sIH3nSUttelJSXUrmGzl7QUBFul0/mB8HRYl3fOlgHbIWG+WnYDXU3v/2zMtAvuzZ/ed00Ei6on975FhBfzrg==", + "dev": true, + "license": "MIT" + }, + "node_modules/@octokit/endpoint/node_modules/@octokit/types": { + "version": "13.10.0", + "resolved": "https://registry.npmjs.org/@octokit/types/-/types-13.10.0.tgz", + "integrity": "sha512-ifLaO34EbbPj0Xgro4G5lP5asESjwHracYJvVaPIyXMuiuXLlhic3S47cBdTb+jfODkTE5YtGCLt3Ay3+J97sA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@octokit/openapi-types": "^24.2.0" + } + }, + "node_modules/@octokit/graphql": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/@octokit/graphql/-/graphql-7.1.1.tgz", + "integrity": "sha512-3mkDltSfcDUoa176nlGoA32RGjeWjl3K7F/BwHwRMJUW/IteSa4bnSV8p2ThNkcIcZU2umkZWxwETSSCJf2Q7g==", "dev": true, - "license": "Apache-2.0", + "license": "MIT", "dependencies": { - "@jsonjoy.com/fs-node-builtins": "4.64.0", - "glob-to-regex.js": "^1.0.1" + "@octokit/request": "^8.4.1", + "@octokit/types": "^13.0.0", + "universal-user-agent": "^6.0.0" }, "engines": { - "node": ">=10.0" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/streamich" - }, - "peerDependencies": { - "tslib": "2" + "node": ">= 18" } }, - "node_modules/@jsonjoy.com/fs-print": { - "version": "4.64.0", - "resolved": "https://registry.npmjs.org/@jsonjoy.com/fs-print/-/fs-print-4.64.0.tgz", - "integrity": "sha512-PHZFccchvkhWrwPWHjmVAhbC3vSHCtyZvlZfJJ3ho2bnzl450hXri6/8e6pbkWdH+SkmLXNml0sV8e5HDAfxKw==", + "node_modules/@octokit/graphql/node_modules/@octokit/openapi-types": { + "version": "24.2.0", + "resolved": "https://registry.npmjs.org/@octokit/openapi-types/-/openapi-types-24.2.0.tgz", + "integrity": "sha512-9sIH3nSUttelJSXUrmGzl7QUBFul0/mB8HRYl3fOlgHbIWG+WnYDXU3v/2zMtAvuzZ/ed00Ei6on975FhBfzrg==", "dev": true, - "license": "Apache-2.0", + "license": "MIT" + }, + "node_modules/@octokit/graphql/node_modules/@octokit/types": { + "version": "13.10.0", + "resolved": "https://registry.npmjs.org/@octokit/types/-/types-13.10.0.tgz", + "integrity": "sha512-ifLaO34EbbPj0Xgro4G5lP5asESjwHracYJvVaPIyXMuiuXLlhic3S47cBdTb+jfODkTE5YtGCLt3Ay3+J97sA==", + "dev": true, + "license": "MIT", "dependencies": { - "@jsonjoy.com/fs-node-utils": "4.64.0", - "tree-dump": "^1.1.0" - }, - "engines": { - "node": ">=10.0" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/streamich" - }, - "peerDependencies": { - "tslib": "2" + "@octokit/openapi-types": "^24.2.0" } }, - "node_modules/@jsonjoy.com/fs-snapshot": { - "version": "4.64.0", - "resolved": "https://registry.npmjs.org/@jsonjoy.com/fs-snapshot/-/fs-snapshot-4.64.0.tgz", - "integrity": "sha512-oM7UDeL83q6NBzzsfKAsYKXKVXlykKFqqOLh4xZZKAzzROTlInkPbc6LTDGThEOnPiFiUzA7tYziHG9xavd76Q==", + "node_modules/@octokit/oauth-app": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/@octokit/oauth-app/-/oauth-app-6.1.0.tgz", + "integrity": "sha512-nIn/8eUJ/BKUVzxUXd5vpzl1rwaVxMyYbQkNZjHrF7Vk/yu98/YDF/N2KeWO7uZ0g3b5EyiFXFkZI8rJ+DH1/g==", "dev": true, - "license": "Apache-2.0", + "license": "MIT", "dependencies": { - "@jsonjoy.com/buffers": "^17.65.0", - "@jsonjoy.com/fs-node-utils": "4.64.0", - "@jsonjoy.com/json-pack": "^17.65.0", - "@jsonjoy.com/util": "^17.65.0" + "@octokit/auth-oauth-app": "^7.0.0", + "@octokit/auth-oauth-user": "^4.0.0", + "@octokit/auth-unauthenticated": "^5.0.0", + "@octokit/core": "^5.0.0", + "@octokit/oauth-authorization-url": "^6.0.2", + "@octokit/oauth-methods": "^4.0.0", + "@types/aws-lambda": "^8.10.83", + "universal-user-agent": "^6.0.0" }, "engines": { - "node": ">=10.0" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/streamich" - }, - "peerDependencies": { - "tslib": "2" + "node": ">= 18" } }, - "node_modules/@jsonjoy.com/fs-snapshot/node_modules/@jsonjoy.com/base64": { - "version": "17.67.0", - "resolved": "https://registry.npmjs.org/@jsonjoy.com/base64/-/base64-17.67.0.tgz", - "integrity": "sha512-5SEsJGsm15aP8TQGkDfJvz9axgPwAEm98S5DxOuYe8e1EbfajcDmgeXXzccEjh+mLnjqEKrkBdjHWS5vFNwDdw==", + "node_modules/@octokit/oauth-authorization-url": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/@octokit/oauth-authorization-url/-/oauth-authorization-url-6.0.2.tgz", + "integrity": "sha512-CdoJukjXXxqLNK4y/VOiVzQVjibqoj/xHgInekviUJV73y/BSIcwvJ/4aNHPBPKcPWFnd4/lO9uqRV65jXhcLA==", "dev": true, - "license": "Apache-2.0", + "license": "MIT", "engines": { - "node": ">=10.0" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/streamich" - }, - "peerDependencies": { - "tslib": "2" + "node": ">= 18" } }, - "node_modules/@jsonjoy.com/fs-snapshot/node_modules/@jsonjoy.com/codegen": { - "version": "17.67.0", - "resolved": "https://registry.npmjs.org/@jsonjoy.com/codegen/-/codegen-17.67.0.tgz", - "integrity": "sha512-idnkUplROpdBOV0HMcwhsCUS5TRUi9poagdGs70A6S4ux9+/aPuKbh8+UYRTLYQHtXvAdNfQWXDqZEx5k4Dj2Q==", + "node_modules/@octokit/oauth-methods": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/@octokit/oauth-methods/-/oauth-methods-4.1.0.tgz", + "integrity": "sha512-4tuKnCRecJ6CG6gr0XcEXdZtkTDbfbnD5oaHBmLERTjTMZNi2CbfEHZxPU41xXLDG4DfKf+sonu00zvKI9NSbw==", "dev": true, - "license": "Apache-2.0", - "engines": { - "node": ">=10.0" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/streamich" + "license": "MIT", + "dependencies": { + "@octokit/oauth-authorization-url": "^6.0.2", + "@octokit/request": "^8.3.1", + "@octokit/request-error": "^5.1.0", + "@octokit/types": "^13.0.0", + "btoa-lite": "^1.0.0" }, - "peerDependencies": { - "tslib": "2" + "engines": { + "node": ">= 18" } }, - "node_modules/@jsonjoy.com/fs-snapshot/node_modules/@jsonjoy.com/json-pack": { - "version": "17.67.0", - "resolved": "https://registry.npmjs.org/@jsonjoy.com/json-pack/-/json-pack-17.67.0.tgz", - "integrity": "sha512-t0ejURcGaZsn1ClbJ/3kFqSOjlryd92eQY465IYrezsXmPcfHPE/av4twRSxf6WE+TkZgLY+71vCZbiIiFKA/w==", + "node_modules/@octokit/oauth-methods/node_modules/@octokit/openapi-types": { + "version": "24.2.0", + "resolved": "https://registry.npmjs.org/@octokit/openapi-types/-/openapi-types-24.2.0.tgz", + "integrity": "sha512-9sIH3nSUttelJSXUrmGzl7QUBFul0/mB8HRYl3fOlgHbIWG+WnYDXU3v/2zMtAvuzZ/ed00Ei6on975FhBfzrg==", "dev": true, - "license": "Apache-2.0", + "license": "MIT" + }, + "node_modules/@octokit/oauth-methods/node_modules/@octokit/types": { + "version": "13.10.0", + "resolved": "https://registry.npmjs.org/@octokit/types/-/types-13.10.0.tgz", + "integrity": "sha512-ifLaO34EbbPj0Xgro4G5lP5asESjwHracYJvVaPIyXMuiuXLlhic3S47cBdTb+jfODkTE5YtGCLt3Ay3+J97sA==", + "dev": true, + "license": "MIT", "dependencies": { - "@jsonjoy.com/base64": "17.67.0", - "@jsonjoy.com/buffers": "17.67.0", - "@jsonjoy.com/codegen": "17.67.0", - "@jsonjoy.com/json-pointer": "17.67.0", - "@jsonjoy.com/util": "17.67.0", - "hyperdyperid": "^1.2.0", - "thingies": "^2.5.0", - "tree-dump": "^1.1.0" - }, + "@octokit/openapi-types": "^24.2.0" + } + }, + "node_modules/@octokit/openapi-types": { + "version": "20.0.0", + "resolved": "https://registry.npmjs.org/@octokit/openapi-types/-/openapi-types-20.0.0.tgz", + "integrity": "sha512-EtqRBEjp1dL/15V7WiX5LJMIxxkdiGJnabzYx5Apx4FkQIFgAfKumXeYAqqJCj1s+BMX4cPFIFC4OLCR6stlnA==", + "dev": true, + "license": "MIT" + }, + "node_modules/@octokit/plugin-paginate-graphql": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/@octokit/plugin-paginate-graphql/-/plugin-paginate-graphql-4.0.1.tgz", + "integrity": "sha512-R8ZQNmrIKKpHWC6V2gum4x9LG2qF1RxRjo27gjQcG3j+vf2tLsEfE7I/wRWEPzYMaenr1M+qDAtNcwZve1ce1A==", + "dev": true, + "license": "MIT", "engines": { - "node": ">=10.0" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/streamich" + "node": ">= 18" }, "peerDependencies": { - "tslib": "2" + "@octokit/core": ">=5" } }, - "node_modules/@jsonjoy.com/fs-snapshot/node_modules/@jsonjoy.com/json-pointer": { - "version": "17.67.0", - "resolved": "https://registry.npmjs.org/@jsonjoy.com/json-pointer/-/json-pointer-17.67.0.tgz", - "integrity": "sha512-+iqOFInH+QZGmSuaybBUNdh7yvNrXvqR+h3wjXm0N/3JK1EyyFAeGJvqnmQL61d1ARLlk/wJdFKSL+LHJ1eaUA==", + "node_modules/@octokit/plugin-paginate-rest": { + "version": "9.2.2", + "resolved": "https://registry.npmjs.org/@octokit/plugin-paginate-rest/-/plugin-paginate-rest-9.2.2.tgz", + "integrity": "sha512-u3KYkGF7GcZnSD/3UP0S7K5XUFT2FkOQdcfXZGZQPGv3lm4F2Xbf71lvjldr8c1H3nNbF+33cLEkWYbokGWqiQ==", "dev": true, - "license": "Apache-2.0", + "license": "MIT", "dependencies": { - "@jsonjoy.com/util": "17.67.0" + "@octokit/types": "^12.6.0" }, "engines": { - "node": ">=10.0" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/streamich" + "node": ">= 18" }, "peerDependencies": { - "tslib": "2" + "@octokit/core": "5" } }, - "node_modules/@jsonjoy.com/fs-snapshot/node_modules/@jsonjoy.com/util": { - "version": "17.67.0", - "resolved": "https://registry.npmjs.org/@jsonjoy.com/util/-/util-17.67.0.tgz", - "integrity": "sha512-6+8xBaz1rLSohlGh68D1pdw3AwDi9xydm8QNlAFkvnavCJYSze+pxoW2VKP8p308jtlMRLs5NTHfPlZLd4w7ew==", + "node_modules/@octokit/plugin-rest-endpoint-methods": { + "version": "10.4.1", + "resolved": "https://registry.npmjs.org/@octokit/plugin-rest-endpoint-methods/-/plugin-rest-endpoint-methods-10.4.1.tgz", + "integrity": "sha512-xV1b+ceKV9KytQe3zCVqjg+8GTGfDYwaT1ATU5isiUyVtlVAO3HNdzpS4sr4GBx4hxQ46s7ITtZrAsxG22+rVg==", "dev": true, - "license": "Apache-2.0", + "license": "MIT", "dependencies": { - "@jsonjoy.com/buffers": "17.67.0", - "@jsonjoy.com/codegen": "17.67.0" + "@octokit/types": "^12.6.0" }, "engines": { - "node": ">=10.0" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/streamich" + "node": ">= 18" }, "peerDependencies": { - "tslib": "2" + "@octokit/core": "5" } }, - "node_modules/@jsonjoy.com/json-pack": { - "version": "1.21.0", - "resolved": "https://registry.npmjs.org/@jsonjoy.com/json-pack/-/json-pack-1.21.0.tgz", - "integrity": "sha512-+AKG+R2cfZMShzrF2uQw34v3zbeDYUqnQ+jg7ORic3BGtfw9p/+N6RJbq/kkV8JmYZaINknaEQ2m0/f693ZPpg==", + "node_modules/@octokit/plugin-retry": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/@octokit/plugin-retry/-/plugin-retry-6.1.0.tgz", + "integrity": "sha512-WrO3bvq4E1Xh1r2mT9w6SDFg01gFmP81nIG77+p/MqW1JeXXgL++6umim3t6x0Zj5pZm3rXAN+0HEjmmdhIRig==", "dev": true, - "license": "Apache-2.0", + "license": "MIT", "dependencies": { - "@jsonjoy.com/base64": "^1.1.2", - "@jsonjoy.com/buffers": "^1.2.0", - "@jsonjoy.com/codegen": "^1.0.0", - "@jsonjoy.com/json-pointer": "^1.0.2", - "@jsonjoy.com/util": "^1.9.0", - "hyperdyperid": "^1.2.0", - "thingies": "^2.5.0", - "tree-dump": "^1.1.0" + "@octokit/request-error": "^5.0.0", + "@octokit/types": "^13.0.0", + "bottleneck": "^2.15.3" }, "engines": { - "node": ">=10.0" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/streamich" + "node": ">= 18" }, "peerDependencies": { - "tslib": "2" + "@octokit/core": "5" } }, - "node_modules/@jsonjoy.com/json-pack/node_modules/@jsonjoy.com/buffers": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/@jsonjoy.com/buffers/-/buffers-1.2.1.tgz", - "integrity": "sha512-12cdlDwX4RUM3QxmUbVJWqZ/mrK6dFQH4Zxq6+r1YXKXYBNgZXndx2qbCJwh3+WWkCSn67IjnlG3XYTvmvYtgA==", + "node_modules/@octokit/plugin-retry/node_modules/@octokit/openapi-types": { + "version": "24.2.0", + "resolved": "https://registry.npmjs.org/@octokit/openapi-types/-/openapi-types-24.2.0.tgz", + "integrity": "sha512-9sIH3nSUttelJSXUrmGzl7QUBFul0/mB8HRYl3fOlgHbIWG+WnYDXU3v/2zMtAvuzZ/ed00Ei6on975FhBfzrg==", "dev": true, - "license": "Apache-2.0", - "engines": { - "node": ">=10.0" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/streamich" - }, - "peerDependencies": { - "tslib": "2" + "license": "MIT" + }, + "node_modules/@octokit/plugin-retry/node_modules/@octokit/types": { + "version": "13.10.0", + "resolved": "https://registry.npmjs.org/@octokit/types/-/types-13.10.0.tgz", + "integrity": "sha512-ifLaO34EbbPj0Xgro4G5lP5asESjwHracYJvVaPIyXMuiuXLlhic3S47cBdTb+jfODkTE5YtGCLt3Ay3+J97sA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@octokit/openapi-types": "^24.2.0" } }, - "node_modules/@jsonjoy.com/json-pointer": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/@jsonjoy.com/json-pointer/-/json-pointer-1.0.2.tgz", - "integrity": "sha512-Fsn6wM2zlDzY1U+v4Nc8bo3bVqgfNTGcn6dMgs6FjrEnt4ZCe60o6ByKRjOGlI2gow0aE/Q41QOigdTqkyK5fg==", + "node_modules/@octokit/plugin-throttling": { + "version": "8.2.0", + "resolved": "https://registry.npmjs.org/@octokit/plugin-throttling/-/plugin-throttling-8.2.0.tgz", + "integrity": "sha512-nOpWtLayKFpgqmgD0y3GqXafMFuKcA4tRPZIfu7BArd2lEZeb1988nhWhwx4aZWmjDmUfdgVf7W+Tt4AmvRmMQ==", "dev": true, - "license": "Apache-2.0", + "license": "MIT", "dependencies": { - "@jsonjoy.com/codegen": "^1.0.0", - "@jsonjoy.com/util": "^1.9.0" + "@octokit/types": "^12.2.0", + "bottleneck": "^2.15.3" }, "engines": { - "node": ">=10.0" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/streamich" + "node": ">= 18" }, "peerDependencies": { - "tslib": "2" + "@octokit/core": "^5.0.0" } }, - "node_modules/@jsonjoy.com/util": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@jsonjoy.com/util/-/util-1.9.0.tgz", - "integrity": "sha512-pLuQo+VPRnN8hfPqUTLTHk126wuYdXVxE6aDmjSeV4NCAgyxWbiOIeNJVtID3h1Vzpoi9m4jXezf73I6LgabgQ==", + "node_modules/@octokit/request": { + "version": "8.4.1", + "resolved": "https://registry.npmjs.org/@octokit/request/-/request-8.4.1.tgz", + "integrity": "sha512-qnB2+SY3hkCmBxZsR/MPCybNmbJe4KAlfWErXq+rBKkQJlbjdJeS85VI9r8UqeLYLvnAenU8Q1okM/0MBsAGXw==", "dev": true, - "license": "Apache-2.0", + "license": "MIT", "dependencies": { - "@jsonjoy.com/buffers": "^1.0.0", - "@jsonjoy.com/codegen": "^1.0.0" + "@octokit/endpoint": "^9.0.6", + "@octokit/request-error": "^5.1.1", + "@octokit/types": "^13.1.0", + "universal-user-agent": "^6.0.0" }, "engines": { - "node": ">=10.0" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/streamich" - }, - "peerDependencies": { - "tslib": "2" + "node": ">= 18" } }, - "node_modules/@jsonjoy.com/util/node_modules/@jsonjoy.com/buffers": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/@jsonjoy.com/buffers/-/buffers-1.2.1.tgz", - "integrity": "sha512-12cdlDwX4RUM3QxmUbVJWqZ/mrK6dFQH4Zxq6+r1YXKXYBNgZXndx2qbCJwh3+WWkCSn67IjnlG3XYTvmvYtgA==", + "node_modules/@octokit/request-error": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/@octokit/request-error/-/request-error-5.1.1.tgz", + "integrity": "sha512-v9iyEQJH6ZntoENr9/yXxjuezh4My67CBSu9r6Ve/05Iu5gNgnisNWOsoJHTP6k0Rr0+HQIpnH+kyammu90q/g==", "dev": true, - "license": "Apache-2.0", - "engines": { - "node": ">=10.0" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/streamich" + "license": "MIT", + "dependencies": { + "@octokit/types": "^13.1.0", + "deprecation": "^2.0.0", + "once": "^1.4.0" }, - "peerDependencies": { - "tslib": "2" + "engines": { + "node": ">= 18" } }, - "node_modules/@keyv/serialize": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/@keyv/serialize/-/serialize-1.1.1.tgz", - "integrity": "sha512-dXn3FZhPv0US+7dtJsIi2R+c7qWYiReoEh5zUntWCf4oSpMNib8FDhSoed6m3QyZdx5hK7iLFkYk3rNxwt8vTA==", - "dev": true, - "license": "MIT" - }, - "node_modules/@leichtgewicht/ip-codec": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/@leichtgewicht/ip-codec/-/ip-codec-2.0.5.tgz", - "integrity": "sha512-Vo+PSpZG2/fmgmiNzYK9qWRh8h/CHrwD0mo1h1DzL4yzHNSfWYujGTYsWGreD000gcgmZ7K4Ys6Tx9TxtsKdDw==", + "node_modules/@octokit/request-error/node_modules/@octokit/openapi-types": { + "version": "24.2.0", + "resolved": "https://registry.npmjs.org/@octokit/openapi-types/-/openapi-types-24.2.0.tgz", + "integrity": "sha512-9sIH3nSUttelJSXUrmGzl7QUBFul0/mB8HRYl3fOlgHbIWG+WnYDXU3v/2zMtAvuzZ/ed00Ei6on975FhBfzrg==", "dev": true, "license": "MIT" }, - "node_modules/@napi-rs/wasm-runtime": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/@napi-rs/wasm-runtime/-/wasm-runtime-1.2.2.tgz", - "integrity": "sha512-JfB4kuJQjaoHuCTseIINHtHWeJnvgEcxjwA5t/Y00ZgaOO1Crz3fjT/p8kT28zA/Caz7oiUMn3d6H2yOVCVwuw==", + "node_modules/@octokit/request-error/node_modules/@octokit/types": { + "version": "13.10.0", + "resolved": "https://registry.npmjs.org/@octokit/types/-/types-13.10.0.tgz", + "integrity": "sha512-ifLaO34EbbPj0Xgro4G5lP5asESjwHracYJvVaPIyXMuiuXLlhic3S47cBdTb+jfODkTE5YtGCLt3Ay3+J97sA==", "dev": true, "license": "MIT", - "optional": true, "dependencies": { - "@tybys/wasm-util": "^0.10.3" - }, - "engines": { - "node": "^20.19.0 || ^22.13.0 || >=23.5.0" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/Brooooooklyn" - }, - "peerDependencies": { - "@emnapi/core": "^1.7.1 || ^2.0.0-alpha.3", - "@emnapi/runtime": "^1.7.1 || ^2.0.0-alpha.3" + "@octokit/openapi-types": "^24.2.0" } }, - "node_modules/@nicolo-ribaudo/eslint-scope-5-internals": { - "version": "5.1.1-v1", - "resolved": "https://registry.npmjs.org/@nicolo-ribaudo/eslint-scope-5-internals/-/eslint-scope-5-internals-5.1.1-v1.tgz", - "integrity": "sha512-54/JRvkLIzzDWshCWfuhadfrfZVPiElY8Fcgmg1HroEly/EDSszzhBAsarCux+D/kOslTRquNzuyGSmUSTTHGg==", + "node_modules/@octokit/request/node_modules/@octokit/openapi-types": { + "version": "24.2.0", + "resolved": "https://registry.npmjs.org/@octokit/openapi-types/-/openapi-types-24.2.0.tgz", + "integrity": "sha512-9sIH3nSUttelJSXUrmGzl7QUBFul0/mB8HRYl3fOlgHbIWG+WnYDXU3v/2zMtAvuzZ/ed00Ei6on975FhBfzrg==", + "dev": true, + "license": "MIT" + }, + "node_modules/@octokit/request/node_modules/@octokit/types": { + "version": "13.10.0", + "resolved": "https://registry.npmjs.org/@octokit/types/-/types-13.10.0.tgz", + "integrity": "sha512-ifLaO34EbbPj0Xgro4G5lP5asESjwHracYJvVaPIyXMuiuXLlhic3S47cBdTb+jfODkTE5YtGCLt3Ay3+J97sA==", "dev": true, "license": "MIT", "dependencies": { - "eslint-scope": "5.1.1" + "@octokit/openapi-types": "^24.2.0" } }, - "node_modules/@noble/hashes": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-1.4.0.tgz", - "integrity": "sha512-V1JJ1WTRUqHHrOSh597hURcMqVKVGL/ea3kv0gSnEdsEZ0/+VyPghM1lMNGc00z7CIQorSvbKpuJkxvuHbvdbg==", + "node_modules/@octokit/types": { + "version": "12.6.0", + "resolved": "https://registry.npmjs.org/@octokit/types/-/types-12.6.0.tgz", + "integrity": "sha512-1rhSOfRa6H9w4YwK0yrf5faDaDTb+yLyBUKOCV4xtCDB5VmIPqd/v9yr9o6SAzOAlRxMiRiCic6JVM1/kunVkw==", "dev": true, "license": "MIT", - "engines": { - "node": ">= 16" - }, - "funding": { - "url": "https://paulmillr.com/funding/" + "dependencies": { + "@octokit/openapi-types": "^20.0.0" } }, - "node_modules/@nodelib/fs.scandir": { - "version": "2.1.5", - "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", - "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", + "node_modules/@octokit/webhooks": { + "version": "12.3.2", + "resolved": "https://registry.npmjs.org/@octokit/webhooks/-/webhooks-12.3.2.tgz", + "integrity": "sha512-exj1MzVXoP7xnAcAB3jZ97pTvVPkQF9y6GA/dvYC47HV7vLv+24XRS6b/v/XnyikpEuvMhugEXdGtAlU086WkQ==", "dev": true, "license": "MIT", "dependencies": { - "@nodelib/fs.stat": "2.0.5", - "run-parallel": "^1.1.9" + "@octokit/request-error": "^5.0.0", + "@octokit/webhooks-methods": "^4.1.0", + "@octokit/webhooks-types": "7.6.1", + "aggregate-error": "^3.1.0" }, "engines": { - "node": ">= 8" + "node": ">= 18" } }, - "node_modules/@nodelib/fs.stat": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", - "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", + "node_modules/@octokit/webhooks-methods": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/@octokit/webhooks-methods/-/webhooks-methods-4.1.0.tgz", + "integrity": "sha512-zoQyKw8h9STNPqtm28UGOYFE7O6D4Il8VJwhAtMHFt2C4L0VQT1qGKLeefUOqHNs1mNRYSadVv7x0z8U2yyeWQ==", "dev": true, "license": "MIT", "engines": { - "node": ">= 8" + "node": ">= 18" } }, - "node_modules/@nodelib/fs.walk": { - "version": "1.2.8", - "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", - "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", + "node_modules/@octokit/webhooks-types": { + "version": "7.6.1", + "resolved": "https://registry.npmjs.org/@octokit/webhooks-types/-/webhooks-types-7.6.1.tgz", + "integrity": "sha512-S8u2cJzklBC0FgTwWVLaM8tMrDuDMVE4xiTK4EYXM9GntyvrdbSoxqDQa+Fh57CCNApyIpyeqPhhFEmHPfrXgw==", "dev": true, - "license": "MIT", - "dependencies": { - "@nodelib/fs.scandir": "2.1.5", - "fastq": "^1.6.0" - }, - "engines": { - "node": ">= 8" - } + "license": "MIT" }, "node_modules/@opentelemetry/api": { "version": "1.9.1", @@ -3797,6 +4790,7 @@ "integrity": "sha512-gLyJlPHPZYdAk1JENA9LeHejZe1Ti77/pTeFm/nMXmQH/HFZlcS/O2XJB+L8fkbrNSqhdtlvjBVjxwUYanNH5Q==", "dev": true, "license": "Apache-2.0", + "peer": true, "engines": { "node": ">=8.0.0" } @@ -3820,6 +4814,7 @@ "integrity": "sha512-s5vvxXPVdjqS3kTLKMeBMvop9hbWkwzBpu+mUO2M7sZtlkyDJGwFe33wRKnbaYDo8ExRVBIIdwIGrqpxHuKttA==", "dev": true, "license": "Apache-2.0", + "peer": true, "engines": { "node": ">=14" }, @@ -3833,6 +4828,7 @@ "integrity": "sha512-OOCM2C/QIURhJMuKaekP3TRBxBKxG/TWWA0TL2J6nXUtDnuCtccy49LUJF8xPFXMX+0LMcxFpCo8M9cGY1W6rQ==", "dev": true, "license": "Apache-2.0", + "peer": true, "dependencies": { "@opentelemetry/semantic-conventions": "1.28.0" }, @@ -4315,6 +5311,7 @@ "integrity": "sha512-5UxZqiAgLYGFjS4s9qm5mBVo433u+dSPUFWVWXmLAD4wB65oMCoXaJP1KJa9DIYYMeHu3z4BZcStG3LC593cWA==", "dev": true, "license": "Apache-2.0", + "peer": true, "dependencies": { "@opentelemetry/core": "1.30.1", "@opentelemetry/semantic-conventions": "1.28.0" @@ -4342,6 +5339,7 @@ "integrity": "sha512-jVPgBbH1gCy2Lb7X0AVQ8XAfgg0pJ4nvl8/IiQA6nxOsPvS+0zMJaFSs2ltXe0J6C8dqjcnpyqINDJmU30+uOg==", "dev": true, "license": "Apache-2.0", + "peer": true, "dependencies": { "@opentelemetry/core": "1.30.1", "@opentelemetry/resources": "1.30.1", @@ -4370,6 +5368,7 @@ "integrity": "sha512-eSYWTm620tTk45EKSedaUL8MFYI8hW164hIXsgIHyxu3VobUB3fFCu5t0hQby6OoWRPsG1KkKUG2M5UadiLiVg==", "dev": true, "license": "Apache-2.0", + "peer": true, "engines": { "node": ">=14" } @@ -4840,58 +5839,349 @@ "resolved": "https://registry.npmjs.org/@peculiar/asn1-x509/-/asn1-x509-2.8.0.tgz", "integrity": "sha512-N0CMuhWUzsWEVq6F1q9X6+VKUnWzSW+cSVg+aPaGGwDdbFoFWTYgin5MHwXgpWd6y9COMBxnfy/Qc+Xc7F0Zwg==", "dev": true, - "license": "MIT", - "dependencies": { - "@peculiar/asn1-schema": "^2.8.0", - "@peculiar/utils": "^2.0.2", - "asn1js": "^3.0.10", - "tslib": "^2.8.1" + "license": "MIT", + "dependencies": { + "@peculiar/asn1-schema": "^2.8.0", + "@peculiar/utils": "^2.0.2", + "asn1js": "^3.0.10", + "tslib": "^2.8.1" + } + }, + "node_modules/@peculiar/asn1-x509-attr": { + "version": "2.8.0", + "resolved": "https://registry.npmjs.org/@peculiar/asn1-x509-attr/-/asn1-x509-attr-2.8.0.tgz", + "integrity": "sha512-tHjkfS/qhMnmrlB2J9NhflQlQ7In3khO3CfmVrriOlpTeErY9ZIKOso1hQ5JQiyrJ7ShvqVPk7E5fQmbclkSKA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@peculiar/asn1-schema": "^2.8.0", + "@peculiar/asn1-x509": "^2.8.0", + "asn1js": "^3.0.10", + "tslib": "^2.8.1" + } + }, + "node_modules/@peculiar/utils": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/@peculiar/utils/-/utils-2.0.3.tgz", + "integrity": "sha512-+oL3HPFRIZ1St2K50lWCXiioIgSoxzz7R1J3uF6neO2yl1sgmpgY6XXJH4BdpoDkMWznQTeYF6oWNDZLCdQ4eQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "tslib": "^2.8.1" + } + }, + "node_modules/@peculiar/x509": { + "version": "1.14.3", + "resolved": "https://registry.npmjs.org/@peculiar/x509/-/x509-1.14.3.tgz", + "integrity": "sha512-C2Xj8FZ0uHWeCXXqX5B4/gVFQmtSkiuOolzAgutjTfseNOHT3pUjljDZsTSxXFGgio54bCzVFqmEOUrIVk8RDA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@peculiar/asn1-cms": "^2.6.0", + "@peculiar/asn1-csr": "^2.6.0", + "@peculiar/asn1-ecc": "^2.6.0", + "@peculiar/asn1-pkcs9": "^2.6.0", + "@peculiar/asn1-rsa": "^2.6.0", + "@peculiar/asn1-schema": "^2.6.0", + "@peculiar/asn1-x509": "^2.6.0", + "pvtsutils": "^1.3.6", + "reflect-metadata": "^0.2.2", + "tslib": "^2.8.1", + "tsyringe": "^4.10.0" + }, + "engines": { + "node": ">=20.0.0" + } + }, + "node_modules/@php-wasm/cli-util": { + "version": "3.1.50", + "resolved": "https://registry.npmjs.org/@php-wasm/cli-util/-/cli-util-3.1.50.tgz", + "integrity": "sha512-z7O90Vej+MzJbJQn0OcJlvafTADT9gpsO9MfFXAswNS02b/o+f9o/vAifDQIm0GRuX2DrHU9trml169PH9YHaA==", + "dev": true, + "license": "GPL-2.0-or-later", + "dependencies": { + "@php-wasm/util": "3.1.50", + "fast-xml-parser": "^5.8.0", + "jsonc-parser": "3.3.1" + }, + "engines": { + "node": ">=20.10.0", + "npm": ">=10.2.3" + } + }, + "node_modules/@php-wasm/cli-util/node_modules/jsonc-parser": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/jsonc-parser/-/jsonc-parser-3.3.1.tgz", + "integrity": "sha512-HUgH65KyejrUFPvHFPbqOY0rsFip3Bo5wb4ngvdi1EpCYWUQDC5V+Y7mZws+DLkr4M//zQJoanu1SP+87Dv1oQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/@php-wasm/logger": { + "version": "3.1.50", + "resolved": "https://registry.npmjs.org/@php-wasm/logger/-/logger-3.1.50.tgz", + "integrity": "sha512-fkseJcXaohL/DgsAemAe8WZdLpYkbFfpJ9IwrriBvmnHAIw0psx2Ed3imoxwJeIKKV9LGU6Deba+Liw/OVgQ5g==", + "dev": true, + "license": "GPL-2.0-or-later", + "engines": { + "node": ">=20.10.0", + "npm": ">=10.2.3" + } + }, + "node_modules/@php-wasm/node": { + "version": "3.1.50", + "resolved": "https://registry.npmjs.org/@php-wasm/node/-/node-3.1.50.tgz", + "integrity": "sha512-nD3Gra3bwt1IAbuMY8XzMt9IdCIHHVgQYr/dFvfyuHxdF5uacHhqAahQ3FuKtXKLL23eTpIKwX+4Xi5Pk5ofxQ==", + "dev": true, + "license": "GPL-2.0-or-later", + "dependencies": { + "@php-wasm/cli-util": "3.1.50", + "@php-wasm/logger": "3.1.50", + "@php-wasm/node-5-2": "3.1.50", + "@php-wasm/node-7-4": "3.1.50", + "@php-wasm/node-8-0": "3.1.50", + "@php-wasm/node-8-1": "3.1.50", + "@php-wasm/node-8-2": "3.1.50", + "@php-wasm/node-8-3": "3.1.50", + "@php-wasm/node-8-4": "3.1.50", + "@php-wasm/node-8-5": "3.1.50", + "@php-wasm/universal": "3.1.50", + "@php-wasm/util": "3.1.50", + "fs-ext-extra-prebuilt": "2.2.7", + "wasm-feature-detect": "1.8.0", + "ws": "8.21.0" + }, + "engines": { + "node": ">=20.10.0", + "npm": ">=10.2.3" + } + }, + "node_modules/@php-wasm/node-5-2": { + "version": "3.1.50", + "resolved": "https://registry.npmjs.org/@php-wasm/node-5-2/-/node-5-2-3.1.50.tgz", + "integrity": "sha512-jx/7B0kE0KOGSQ+I4Qn5s4pob7sETIFprzKEZ0WOw+h8cqO8nGwfsmo2oKlokRK1D7XLloTx5bY5i2HcEe+//g==", + "dev": true, + "license": "GPL-2.0-or-later", + "dependencies": { + "@php-wasm/universal": "3.1.50", + "wasm-feature-detect": "1.8.0" + }, + "engines": { + "node": ">=20.10.0", + "npm": ">=10.2.3" + } + }, + "node_modules/@php-wasm/node-7-4": { + "version": "3.1.50", + "resolved": "https://registry.npmjs.org/@php-wasm/node-7-4/-/node-7-4-3.1.50.tgz", + "integrity": "sha512-gm+3qYmgA14F2wA5jIHvkC40ybi8q5SWwYv1proEzt6pqbYzduwyoCheV2JGGu6TNL4ko15cHBu2FqdZYk4uZg==", + "dev": true, + "license": "GPL-2.0-or-later", + "dependencies": { + "@php-wasm/universal": "3.1.50", + "wasm-feature-detect": "1.8.0" + }, + "engines": { + "node": ">=20.10.0", + "npm": ">=10.2.3" + } + }, + "node_modules/@php-wasm/node-8-0": { + "version": "3.1.50", + "resolved": "https://registry.npmjs.org/@php-wasm/node-8-0/-/node-8-0-3.1.50.tgz", + "integrity": "sha512-u2IsqD25LeUfkcA2SxMsy1uF1iyG75ROrUYk+1r7ldlNZIMCZ81ooK4idGWRXDZI5KIUAsesf59VRQM9QP3TbA==", + "dev": true, + "license": "GPL-2.0-or-later", + "dependencies": { + "@php-wasm/universal": "3.1.50", + "wasm-feature-detect": "1.8.0" + }, + "engines": { + "node": ">=20.10.0", + "npm": ">=10.2.3" + } + }, + "node_modules/@php-wasm/node-8-1": { + "version": "3.1.50", + "resolved": "https://registry.npmjs.org/@php-wasm/node-8-1/-/node-8-1-3.1.50.tgz", + "integrity": "sha512-f13QEUYT5s4B9gupp03bgm/4jD18prdZzDYh7aGOyQ/Le1SxVMcpBfLXwxTakvS66m4EWqpaMiOPptazjyShuQ==", + "dev": true, + "license": "GPL-2.0-or-later", + "dependencies": { + "@php-wasm/universal": "3.1.50", + "wasm-feature-detect": "1.8.0" + }, + "engines": { + "node": ">=20.10.0", + "npm": ">=10.2.3" + } + }, + "node_modules/@php-wasm/node-8-2": { + "version": "3.1.50", + "resolved": "https://registry.npmjs.org/@php-wasm/node-8-2/-/node-8-2-3.1.50.tgz", + "integrity": "sha512-PzBXr4ISdl3kZAPC0YvG/4w5PeSGeHm0vU/O4q6oXNFy/WmWO1BMnPc7UKrBJ+G98cxhjkxy7Kewf1kdfwbUvQ==", + "dev": true, + "license": "GPL-2.0-or-later", + "dependencies": { + "@php-wasm/universal": "3.1.50", + "wasm-feature-detect": "1.8.0" + }, + "engines": { + "node": ">=20.10.0", + "npm": ">=10.2.3" + } + }, + "node_modules/@php-wasm/node-8-3": { + "version": "3.1.50", + "resolved": "https://registry.npmjs.org/@php-wasm/node-8-3/-/node-8-3-3.1.50.tgz", + "integrity": "sha512-VeWihdXDyfW4cpXJaX0+MHJ1Pg8uMOzg6e+6P6G8TmMZZy3xKZGkV8GDneeRrzlHmxbNpmNfoFrQZhQ2gAMFvQ==", + "dev": true, + "license": "GPL-2.0-or-later", + "dependencies": { + "@php-wasm/universal": "3.1.50", + "wasm-feature-detect": "1.8.0" + }, + "engines": { + "node": ">=20.10.0", + "npm": ">=10.2.3" + } + }, + "node_modules/@php-wasm/node-8-4": { + "version": "3.1.50", + "resolved": "https://registry.npmjs.org/@php-wasm/node-8-4/-/node-8-4-3.1.50.tgz", + "integrity": "sha512-RdJ1TvcYupehUze1ln9xcRaJ6YFNChTf3WduNZbLRv266CYg+/C7ogAkiy6kQeKOZlk0+bHXNh+D3ed9s5srPQ==", + "dev": true, + "license": "GPL-2.0-or-later", + "dependencies": { + "@php-wasm/universal": "3.1.50", + "wasm-feature-detect": "1.8.0" + }, + "engines": { + "node": ">=20.10.0", + "npm": ">=10.2.3" + } + }, + "node_modules/@php-wasm/node-8-5": { + "version": "3.1.50", + "resolved": "https://registry.npmjs.org/@php-wasm/node-8-5/-/node-8-5-3.1.50.tgz", + "integrity": "sha512-Ppcnd1eV5KSdAuwJbrDKJNMmCwPmcHxnfhdkXomI8y4qed20+2ad3I4Vu0Gzm80ARBTgFBnUd4im9oyRjKwnqw==", + "dev": true, + "license": "GPL-2.0-or-later", + "dependencies": { + "@php-wasm/universal": "3.1.50", + "wasm-feature-detect": "1.8.0" + }, + "engines": { + "node": ">=20.10.0", + "npm": ">=10.2.3" + } + }, + "node_modules/@php-wasm/progress": { + "version": "3.1.50", + "resolved": "https://registry.npmjs.org/@php-wasm/progress/-/progress-3.1.50.tgz", + "integrity": "sha512-QRrDYcyMdSVI2v7dmSNPX3c7VWLYChPxZXvCETB2fKfXXYhtbesfxUN2OuGgemy91vyj9E/zIowc6z9ORvFeyQ==", + "dev": true, + "license": "GPL-2.0-or-later", + "dependencies": { + "@php-wasm/logger": "3.1.50" + }, + "engines": { + "node": ">=20.10.0", + "npm": ">=10.2.3" + } + }, + "node_modules/@php-wasm/scopes": { + "version": "3.1.50", + "resolved": "https://registry.npmjs.org/@php-wasm/scopes/-/scopes-3.1.50.tgz", + "integrity": "sha512-YZBJdk90nUg3IucVvk3kVjyQA7fXq0eeiJVTGin0XGT0L9k+27vITNK1IOR1BxeylPOifpjFvUvYX7cQQm2N0g==", + "dev": true, + "license": "GPL-2.0-or-later", + "engines": { + "node": ">=20.10.0", + "npm": ">=10.2.3" + } + }, + "node_modules/@php-wasm/stream-compression": { + "version": "3.1.50", + "resolved": "https://registry.npmjs.org/@php-wasm/stream-compression/-/stream-compression-3.1.50.tgz", + "integrity": "sha512-bRQXVIO2hNswlRwIjAbOvjTpiG/6auhzLRV3F2YL/NIWTr8g785ebNHEHP7QyH2tBey2UOXGKWTsGQS7NCiBcw==", + "dev": true, + "license": "GPL-2.0-or-later", + "dependencies": { + "@php-wasm/util": "3.1.50" + } + }, + "node_modules/@php-wasm/universal": { + "version": "3.1.50", + "resolved": "https://registry.npmjs.org/@php-wasm/universal/-/universal-3.1.50.tgz", + "integrity": "sha512-HvJ//8hPCcTbpoquKVrmSZ1Jg14bN2C6TrQ0OvVXQJe+tIVmjHfLefvtvVOuNn3nY5XqFHp8QCRpGCbr0hC+aA==", + "dev": true, + "license": "GPL-2.0-or-later", + "dependencies": { + "@php-wasm/logger": "3.1.50", + "@php-wasm/progress": "3.1.50", + "@php-wasm/stream-compression": "3.1.50", + "@php-wasm/util": "3.1.50", + "ini": "4.1.2" + }, + "engines": { + "node": ">=20.10.0", + "npm": ">=10.2.3" + } + }, + "node_modules/@php-wasm/universal/node_modules/ini": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/ini/-/ini-4.1.2.tgz", + "integrity": "sha512-AMB1mvwR1pyBFY/nSevUX6y8nJWS63/SzUKD3JyQn97s4xgIdgQPT75IRouIiBAN4yLQBUShNYVW0+UG25daCw==", + "dev": true, + "license": "ISC", + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" } }, - "node_modules/@peculiar/asn1-x509-attr": { - "version": "2.8.0", - "resolved": "https://registry.npmjs.org/@peculiar/asn1-x509-attr/-/asn1-x509-attr-2.8.0.tgz", - "integrity": "sha512-tHjkfS/qhMnmrlB2J9NhflQlQ7In3khO3CfmVrriOlpTeErY9ZIKOso1hQ5JQiyrJ7ShvqVPk7E5fQmbclkSKA==", + "node_modules/@php-wasm/util": { + "version": "3.1.50", + "resolved": "https://registry.npmjs.org/@php-wasm/util/-/util-3.1.50.tgz", + "integrity": "sha512-7lFPrxH2q7nvMDSMHkKMhyJJpO9lyEYLo5xpR4GO4k7poKK3Vvml5oKn02qAxhdInP4Q9l57zsp8Zc9uNQqjrg==", "dev": true, - "license": "MIT", - "dependencies": { - "@peculiar/asn1-schema": "^2.8.0", - "@peculiar/asn1-x509": "^2.8.0", - "asn1js": "^3.0.10", - "tslib": "^2.8.1" + "engines": { + "node": ">=20.10.0", + "npm": ">=10.2.3" } }, - "node_modules/@peculiar/utils": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/@peculiar/utils/-/utils-2.0.3.tgz", - "integrity": "sha512-+oL3HPFRIZ1St2K50lWCXiioIgSoxzz7R1J3uF6neO2yl1sgmpgY6XXJH4BdpoDkMWznQTeYF6oWNDZLCdQ4eQ==", + "node_modules/@php-wasm/web-service-worker": { + "version": "3.1.50", + "resolved": "https://registry.npmjs.org/@php-wasm/web-service-worker/-/web-service-worker-3.1.50.tgz", + "integrity": "sha512-2nQczpbd6uGKEaOp7PGJw1EnwJkGMfVK//u+zfROSlcK+tu9JijfUb9GNaT1fshrtDEPP4S5jN0IaXVRZhOqUg==", "dev": true, - "license": "MIT", + "license": "GPL-2.0-or-later", "dependencies": { - "tslib": "^2.8.1" + "@php-wasm/scopes": "3.1.50", + "@php-wasm/universal": "3.1.50" + }, + "engines": { + "node": ">=20.10.0", + "npm": ">=10.2.3" } }, - "node_modules/@peculiar/x509": { - "version": "1.14.3", - "resolved": "https://registry.npmjs.org/@peculiar/x509/-/x509-1.14.3.tgz", - "integrity": "sha512-C2Xj8FZ0uHWeCXXqX5B4/gVFQmtSkiuOolzAgutjTfseNOHT3pUjljDZsTSxXFGgio54bCzVFqmEOUrIVk8RDA==", + "node_modules/@php-wasm/xdebug-bridge": { + "version": "3.1.50", + "resolved": "https://registry.npmjs.org/@php-wasm/xdebug-bridge/-/xdebug-bridge-3.1.50.tgz", + "integrity": "sha512-Roxnjgk6mexwDdFoeiEWn26ZemLK6zWDJ/8DgpOdeOqsbX3TbVSQhlaa/KF0RywK+9aoyuEzO5p0F4VSi2SzZg==", "dev": true, - "license": "MIT", + "license": "GPL-2.0-or-later", "dependencies": { - "@peculiar/asn1-cms": "^2.6.0", - "@peculiar/asn1-csr": "^2.6.0", - "@peculiar/asn1-ecc": "^2.6.0", - "@peculiar/asn1-pkcs9": "^2.6.0", - "@peculiar/asn1-rsa": "^2.6.0", - "@peculiar/asn1-schema": "^2.6.0", - "@peculiar/asn1-x509": "^2.6.0", - "pvtsutils": "^1.3.6", - "reflect-metadata": "^0.2.2", - "tslib": "^2.8.1", - "tsyringe": "^4.10.0" + "@php-wasm/logger": "3.1.50", + "@php-wasm/universal": "3.1.50", + "ws": "8.21.0", + "xml2js": "0.6.2", + "yargs": "17.7.2" + }, + "bin": { + "xdebug-bridge": "xdebug-bridge.js" }, "engines": { - "node": ">=20.0.0" + "node": ">=20.10.0", + "npm": ">=10.2.3" } }, "node_modules/@pkgjs/parseargs": { @@ -4924,6 +6214,7 @@ "integrity": "sha512-DTcUc8qii+cpHvtOwggMtBRMjKZHXYWdw8syRYu2vtzuq4Wxphqq4NfCs5Zt44L6mA8rfDfj+PHnxFc/FeK6mQ==", "dev": true, "license": "Apache-2.0", + "peer": true, "dependencies": { "playwright": "1.62.1" }, @@ -5172,6 +6463,23 @@ "@opentelemetry/semantic-conventions": "^1.34.0" } }, + "node_modules/@simple-git/args-pathspec": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/@simple-git/args-pathspec/-/args-pathspec-1.0.3.tgz", + "integrity": "sha512-ngJMaHlsWDTfjyq9F3VIQ8b7NXbBLq5j9i5bJ6XLYtD6qlDXT7fdKY2KscWWUF8t18xx052Y/PUO1K1TRc9yKA==", + "dev": true, + "license": "MIT" + }, + "node_modules/@simple-git/argv-parser": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@simple-git/argv-parser/-/argv-parser-1.1.1.tgz", + "integrity": "sha512-Q9lBcfQ+VQCpQqGJFHe5yooOS5hGdLFFbJ5R+R5aDsnkPCahtn1hSkMcORX65J2Z5lxSkD0lQorMsncuBQxYUw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@simple-git/args-pathspec": "^1.0.3" + } + }, "node_modules/@sinclair/typebox": { "version": "0.34.52", "resolved": "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.34.52.tgz", @@ -5179,6 +6487,19 @@ "dev": true, "license": "MIT" }, + "node_modules/@sindresorhus/is": { + "version": "4.6.0", + "resolved": "https://registry.npmjs.org/@sindresorhus/is/-/is-4.6.0.tgz", + "integrity": "sha512-t09vSN3MdfsyCHoFcTRCH/iUtG7OJ0CsjzB8cjAmKc/va/kIgeDI/TxsigdncE/4be734m0cvIYwNaV4i2XqAw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sindresorhus/is?sponsor=1" + } + }, "node_modules/@sinonjs/commons": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/@sinonjs/commons/-/commons-3.0.1.tgz", @@ -5391,6 +6712,7 @@ "integrity": "sha512-8QqtOQT5ACVlmsvKOJNEaWmRPmcojMOzCz4Hs2BGG/toAp/K38LcsMRyLp349glq5AzJbCEeimEoxaX6v/fLrA==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "@babel/core": "^7.21.3", "@svgr/babel-preset": "8.1.0", @@ -5493,6 +6815,19 @@ "url": "https://github.com/sponsors/gregberge" } }, + "node_modules/@szmarczak/http-timer": { + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/@szmarczak/http-timer/-/http-timer-4.0.6.tgz", + "integrity": "sha512-4BAffykYOgO+5nzBWYwE3W90sBgLJoUPRWWcL8wlyiM8IB8ipJz3UMJ9KXQd1RKQXpKp8Tutn80HZtWsu2u76w==", + "dev": true, + "license": "MIT", + "dependencies": { + "defer-to-connect": "^2.0.0" + }, + "engines": { + "node": ">=10" + } + }, "node_modules/@tannin/compile": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/@tannin/compile/-/compile-1.1.0.tgz", @@ -5553,6 +6888,13 @@ "tslib": "^2.4.0" } }, + "node_modules/@types/aws-lambda": { + "version": "8.10.162", + "resolved": "https://registry.npmjs.org/@types/aws-lambda/-/aws-lambda-8.10.162.tgz", + "integrity": "sha512-Fn658grtLOci1oxi1391vvDWJRKNGWRSqfxRkmN/Iy3c0tQH1USMKEXcPYHLvope+ZgTFocx9FRQJx1muBL6qw==", + "dev": true, + "license": "MIT" + }, "node_modules/@types/babel__core": { "version": "7.20.5", "resolved": "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.20.5.tgz", @@ -5619,6 +6961,26 @@ "@types/node": "*" } }, + "node_modules/@types/btoa-lite": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@types/btoa-lite/-/btoa-lite-1.0.2.tgz", + "integrity": "sha512-ZYbcE2x7yrvNFJiU7xJGrpF/ihpkM7zKgw8bha3LNJSesvTtUNxbpzaT7WXBIryf6jovisrxTBvymxMeLLj1Mg==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/cacheable-request": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/@types/cacheable-request/-/cacheable-request-6.0.3.tgz", + "integrity": "sha512-IQ3EbTzGxIigb1I3qPZc1rWJnH0BmSKv5QYTalEwweFvyBDLSAe24zP0le/hyi7ecGfZVlIVAg4BZqb8WBwKqw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/http-cache-semantics": "*", + "@types/keyv": "^3.1.4", + "@types/node": "*", + "@types/responselike": "^1.0.0" + } + }, "node_modules/@types/connect": { "version": "3.4.38", "resolved": "https://registry.npmjs.org/@types/connect/-/connect-3.4.38.tgz", @@ -5693,6 +7055,13 @@ "@types/send": "*" } }, + "node_modules/@types/http-cache-semantics": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@types/http-cache-semantics/-/http-cache-semantics-4.2.0.tgz", + "integrity": "sha512-L3LgimLHXtGkWikKnsPg0/VFx9OGZaC+eN1u4r+OB1XRqH3meBIAVC2zr1WdMH+RHmnRkqliQAOHNJ/E0j/e0Q==", + "dev": true, + "license": "MIT" + }, "node_modules/@types/http-errors": { "version": "2.0.5", "resolved": "https://registry.npmjs.org/@types/http-errors/-/http-errors-2.0.5.tgz", @@ -5763,6 +7132,27 @@ "dev": true, "license": "MIT" }, + "node_modules/@types/jsonwebtoken": { + "version": "9.0.10", + "resolved": "https://registry.npmjs.org/@types/jsonwebtoken/-/jsonwebtoken-9.0.10.tgz", + "integrity": "sha512-asx5hIG9Qmf/1oStypjanR7iKTv0gXQ1Ov/jfrX6kS/EO0OFni8orbmGCn0672NHR3kXHwpAwR+B368ZGN/2rA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/ms": "*", + "@types/node": "*" + } + }, + "node_modules/@types/keyv": { + "version": "3.1.4", + "resolved": "https://registry.npmjs.org/@types/keyv/-/keyv-3.1.4.tgz", + "integrity": "sha512-BQ5aZNSCpj7D6K2ksrRCTmKRLEpnPvWDiLPfoGyhZ++8YtiK9d/3DBKPJgry359X/P1PfruyYwvnvwFjuEiEIg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/node": "*" + } + }, "node_modules/@types/mime": { "version": "1.3.5", "resolved": "https://registry.npmjs.org/@types/mime/-/mime-1.3.5.tgz", @@ -5784,6 +7174,13 @@ "dev": true, "license": "MIT" }, + "node_modules/@types/ms": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/@types/ms/-/ms-2.1.0.tgz", + "integrity": "sha512-GsCCIZDE/p3i96vtEqx+7dBUGXrc7zeSK3wwPHIaRThS+9OhWIXRqzs4d6k1SVU8g91DrNRWxWUGhp5KXQb2VA==", + "dev": true, + "license": "MIT" + }, "node_modules/@types/mysql": { "version": "2.15.26", "resolved": "https://registry.npmjs.org/@types/mysql/-/mysql-2.15.26.tgz", @@ -5795,13 +7192,14 @@ } }, "node_modules/@types/node": { - "version": "26.1.2", - "resolved": "https://registry.npmjs.org/@types/node/-/node-26.1.2.tgz", - "integrity": "sha512-Vu4a5UFA9rIIFJ7rB/Vaafh9lrCQszopTCx6KjFboXTGQbPNasehVR5TEiithSDGyd1DEiUByggTZsg8jukeIg==", + "version": "20.19.43", + "resolved": "https://registry.npmjs.org/@types/node/-/node-20.19.43.tgz", + "integrity": "sha512-6oYBAi5ikg4Pl+kGsoYtawUMBT2zZMCvPNF7pVLnHZfd1zf38DRiWn/gT01RYCdUqkv7Fhr+C9ot4/tb+2sVvA==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { - "undici-types": "~8.3.0" + "undici-types": "~6.21.0" } }, "node_modules/@types/normalize-package-data": { @@ -5867,6 +7265,7 @@ "integrity": "sha512-vfEqpXTvwT91yhmwdfouStN2hSKwTvyRs8qpLfADyrq/kxDw0hZM7Wk9Ug1FELj8hIby+S/+kQCSRFF32nv2Qw==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "@types/prop-types": "*", "csstype": "^3.2.2" @@ -5882,6 +7281,16 @@ "@types/react": "^18.0.0" } }, + "node_modules/@types/responselike": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/@types/responselike/-/responselike-1.0.3.tgz", + "integrity": "sha512-H/+L+UkTV33uf49PH5pCAUBVPNj2nDBXTN+qS1dOwyyg24l3CcicicCA7ca+HMvJBZcFgl5r8e+RR6elsb4Lyw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/node": "*" + } + }, "node_modules/@types/retry": { "version": "0.12.2", "resolved": "https://registry.npmjs.org/@types/retry/-/retry-0.12.2.tgz", @@ -6017,6 +7426,7 @@ "integrity": "sha512-IEgob78X12rHpUmtcwFsXhZdVGJtwTVP8FiCLZkR6GlYVrl2PcuB+KhCE5BlVC/eQpQnu8WXRtkHZuPar+gCRA==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "@eslint-community/regexpp": "^4.12.2", "@typescript-eslint/scope-manager": "8.65.0", @@ -6056,6 +7466,7 @@ "integrity": "sha512-CZ4nMxWwgu1HEEFNkeaCptra9QCtkmKdgf3sWh1rl1trIhmxLilgTV4cwcbQ4wemnT4sWQN8CaKOmdYx+g2gMA==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "@typescript-eslint/scope-manager": "8.65.0", "@typescript-eslint/types": "8.65.0", @@ -6419,9 +7830,6 @@ "arm64" ], "dev": true, - "libc": [ - "glibc" - ], "license": "MIT", "optional": true, "os": [ @@ -6436,9 +7844,6 @@ "arm64" ], "dev": true, - "libc": [ - "musl" - ], "license": "MIT", "optional": true, "os": [ @@ -6453,9 +7858,6 @@ "loong64" ], "dev": true, - "libc": [ - "glibc" - ], "license": "MIT", "optional": true, "os": [ @@ -6470,9 +7872,6 @@ "loong64" ], "dev": true, - "libc": [ - "musl" - ], "license": "MIT", "optional": true, "os": [ @@ -6487,9 +7886,6 @@ "ppc64" ], "dev": true, - "libc": [ - "glibc" - ], "license": "MIT", "optional": true, "os": [ @@ -6504,9 +7900,6 @@ "riscv64" ], "dev": true, - "libc": [ - "glibc" - ], "license": "MIT", "optional": true, "os": [ @@ -6521,9 +7914,6 @@ "riscv64" ], "dev": true, - "libc": [ - "musl" - ], "license": "MIT", "optional": true, "os": [ @@ -6538,9 +7928,6 @@ "s390x" ], "dev": true, - "libc": [ - "glibc" - ], "license": "MIT", "optional": true, "os": [ @@ -6555,9 +7942,6 @@ "x64" ], "dev": true, - "libc": [ - "glibc" - ], "license": "MIT", "optional": true, "os": [ @@ -6572,9 +7956,6 @@ "x64" ], "dev": true, - "libc": [ - "musl" - ], "license": "MIT", "optional": true, "os": [ @@ -6614,6 +7995,40 @@ "node": ">=14.0.0" } }, + "node_modules/@unrs/resolver-binding-wasm32-wasi/node_modules/@emnapi/core": { + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/@emnapi/core/-/core-1.10.0.tgz", + "integrity": "sha512-yq6OkJ4p82CAfPl0u9mQebQHKPJkY7WrIuk205cTYnYe+k2Z8YBh11FrbRG/H6ihirqcacOgl2BIO8oyMQLeXw==", + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "@emnapi/wasi-threads": "1.2.1", + "tslib": "^2.4.0" + } + }, + "node_modules/@unrs/resolver-binding-wasm32-wasi/node_modules/@emnapi/runtime": { + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/@emnapi/runtime/-/runtime-1.10.0.tgz", + "integrity": "sha512-ewvYlk86xUoGI0zQRNq/mC+16R1QeDlKQy21Ki3oSYXNgLb45GV1P6A0M+/s6nyCuNDqe5VpaY84BzXGwVbwFA==", + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "tslib": "^2.4.0" + } + }, + "node_modules/@unrs/resolver-binding-wasm32-wasi/node_modules/@emnapi/wasi-threads": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@emnapi/wasi-threads/-/wasi-threads-1.2.1.tgz", + "integrity": "sha512-uTII7OYF+/Mes/MrcIOYp5yOtSMLBWSIoLPpcgwipoiKbli6k322tcoFsxoIIxPDqW01SQGAgko4EzZi2BNv2w==", + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "tslib": "^2.4.0" + } + }, "node_modules/@unrs/resolver-binding-win32-arm64-msvc": { "version": "1.12.2", "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-win32-arm64-msvc/-/resolver-binding-win32-arm64-msvc-1.12.2.tgz", @@ -7051,6 +8466,41 @@ "puppeteer-core": ">=23" } }, + "node_modules/@wordpress/e2e-test-utils-playwright": { + "version": "1.52.0", + "resolved": "https://registry.npmjs.org/@wordpress/e2e-test-utils-playwright/-/e2e-test-utils-playwright-1.52.0.tgz", + "integrity": "sha512-LK0/WJd8iGfTo9ONaHrLSBh0IjKHeXU7urZPaNuXXB7jdt+coLTF+y0gP4c6sQ5m9OgfQqf01FPT/t2XzEbJ+w==", + "dev": true, + "license": "GPL-2.0-or-later", + "dependencies": { + "change-case": "^4.1.2", + "get-port": "^5.1.1", + "lighthouse": "^12.2.2", + "mime": "^3.0.0", + "web-vitals": "^4.2.1" + }, + "engines": { + "node": ">=18.12.0", + "npm": ">=8.19.2" + }, + "peerDependencies": { + "@playwright/test": ">=1", + "@types/node": "^20.17.10" + } + }, + "node_modules/@wordpress/e2e-test-utils-playwright/node_modules/mime": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/mime/-/mime-3.0.0.tgz", + "integrity": "sha512-jSCU7/VB1loIWBZe14aEYHU/+1UMEHoaO7qxCOVJOw9GgH72VAWppxNcjU+x9a2k3GSIBXNKxXQFqRvvZ7vr3A==", + "dev": true, + "license": "MIT", + "bin": { + "mime": "cli.js" + }, + "engines": { + "node": ">=10.0.0" + } + }, "node_modules/@wordpress/element": { "version": "8.4.0", "resolved": "https://registry.npmjs.org/@wordpress/element/-/element-8.4.0.tgz", @@ -7078,6 +8528,7 @@ "integrity": "sha512-wS+hAgJShR0KhEvPJArfuPVN1+Hz1t0Y6n5jLrGQbkb4urgPE/0Rve+1kMB1v/oWgHgm4WIcV+i7F2pTVj+2iQ==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "loose-envify": "^1.1.0" }, @@ -7109,6 +8560,36 @@ "loose-envify": "^1.1.0" } }, + "node_modules/@wordpress/env": { + "version": "11.13.0", + "resolved": "https://registry.npmjs.org/@wordpress/env/-/env-11.13.0.tgz", + "integrity": "sha512-ZBhCf1N1Qgh5U//WXsK9d5rgXtjkWMBHuKrpC3KgoiqEVwalYw+H5jfbGqBzjZtHJeM1SbkSumxRTRhApQPqjg==", + "dev": true, + "license": "GPL-2.0-or-later", + "peer": true, + "dependencies": { + "@inquirer/prompts": "^7.2.0", + "@wp-playground/cli": "^3.0.48", + "adm-zip": "^0.5.9", + "chalk": "^4.1.1", + "copy-dir": "^1.3.0", + "cross-spawn": "^7.0.6", + "docker-compose": "^0.24.3", + "got": "^11.8.5", + "js-yaml": "^3.15.0", + "ora": "^4.0.2", + "rimraf": "^5.0.10", + "simple-git": "^3.32.3", + "yargs": "^17.3.0" + }, + "bin": { + "wp-env": "bin/wp-env" + }, + "engines": { + "node": ">=18.12.0", + "npm": ">=8.19.2" + } + }, "node_modules/@wordpress/escape-html": { "version": "3.52.0", "resolved": "https://registry.npmjs.org/@wordpress/escape-html/-/escape-html-3.52.0.tgz", @@ -7532,45 +9013,12 @@ "integrity": "sha512-rZAP3aVgB9ds9KOeUSL+zZ21hPmo8dh6fnIFwRQj5EAZl9gzR7wxYbYXYysAM8CTqGmUGyp2S4kUdV17MnGuWQ==", "dev": true, "license": "Apache-2.0", - "dependencies": { - "@eslint/core": "^1.2.1", - "levn": "^0.4.1" - }, - "engines": { - "node": "^20.19.0 || ^22.13.0 || >=24" - } - }, - "node_modules/@wordpress/scripts/node_modules/@types/node": { - "version": "20.19.43", - "resolved": "https://registry.npmjs.org/@types/node/-/node-20.19.43.tgz", - "integrity": "sha512-6oYBAi5ikg4Pl+kGsoYtawUMBT2zZMCvPNF7pVLnHZfd1zf38DRiWn/gT01RYCdUqkv7Fhr+C9ot4/tb+2sVvA==", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "undici-types": "~6.21.0" - } - }, - "node_modules/@wordpress/scripts/node_modules/@wordpress/e2e-test-utils-playwright": { - "version": "1.52.0", - "resolved": "https://registry.npmjs.org/@wordpress/e2e-test-utils-playwright/-/e2e-test-utils-playwright-1.52.0.tgz", - "integrity": "sha512-LK0/WJd8iGfTo9ONaHrLSBh0IjKHeXU7urZPaNuXXB7jdt+coLTF+y0gP4c6sQ5m9OgfQqf01FPT/t2XzEbJ+w==", - "dev": true, - "license": "GPL-2.0-or-later", - "dependencies": { - "change-case": "^4.1.2", - "get-port": "^5.1.1", - "lighthouse": "^12.2.2", - "mime": "^3.0.0", - "web-vitals": "^4.2.1" + "dependencies": { + "@eslint/core": "^1.2.1", + "levn": "^0.4.1" }, "engines": { - "node": ">=18.12.0", - "npm": ">=8.19.2" - }, - "peerDependencies": { - "@playwright/test": ">=1", - "@types/node": "^20.17.10" + "node": "^20.19.0 || ^22.13.0 || >=24" } }, "node_modules/@wordpress/scripts/node_modules/balanced-match": { @@ -7735,19 +9183,6 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/@wordpress/scripts/node_modules/mime": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/mime/-/mime-3.0.0.tgz", - "integrity": "sha512-jSCU7/VB1loIWBZe14aEYHU/+1UMEHoaO7qxCOVJOw9GgH72VAWppxNcjU+x9a2k3GSIBXNKxXQFqRvvZ7vr3A==", - "dev": true, - "license": "MIT", - "bin": { - "mime": "cli.js" - }, - "engines": { - "node": ">=10.0.0" - } - }, "node_modules/@wordpress/scripts/node_modules/minimatch": { "version": "10.2.5", "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-10.2.5.tgz", @@ -7780,14 +9215,6 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/@wordpress/scripts/node_modules/undici-types": { - "version": "6.21.0", - "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.21.0.tgz", - "integrity": "sha512-iwDZqg0QAGrg9Rav5H4n0M64c3mkR59cJ6wQp+7C4nI0gsmExaedaYLNO44eT4AtBBwjbTiGPMlt2Md0T9H9JQ==", - "dev": true, - "license": "MIT", - "peer": true - }, "node_modules/@wordpress/style-runtime": { "version": "0.8.0", "resolved": "https://registry.npmjs.org/@wordpress/style-runtime/-/style-runtime-0.8.0.tgz", @@ -7905,6 +9332,146 @@ "npm": ">=8.19.2" } }, + "node_modules/@wp-playground/blueprints": { + "version": "3.1.50", + "resolved": "https://registry.npmjs.org/@wp-playground/blueprints/-/blueprints-3.1.50.tgz", + "integrity": "sha512-O82QCanEYe+wTKpIo0JDD8f8xw9VzOaIZdQ74+OfLIAJToMM4tDk672zNbfbkV61dcTbV8Pvr84xfUj++fI+fQ==", + "dev": true, + "dependencies": { + "@php-wasm/logger": "3.1.50", + "@php-wasm/progress": "3.1.50", + "@php-wasm/stream-compression": "3.1.50", + "@php-wasm/universal": "3.1.50", + "@php-wasm/util": "3.1.50", + "@php-wasm/web-service-worker": "3.1.50", + "@wp-playground/common": "3.1.50", + "@wp-playground/storage": "3.1.50", + "@wp-playground/wordpress": "3.1.50", + "ajv": "8.18.0" + }, + "engines": { + "node": ">=20.10.0", + "npm": ">=10.2.3" + } + }, + "node_modules/@wp-playground/blueprints/node_modules/ajv": { + "version": "8.18.0", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.18.0.tgz", + "integrity": "sha512-PlXPeEWMXMZ7sPYOHqmDyCJzcfNrUr3fGNKtezX14ykXOEIvyK81d+qydx89KY5O71FKMPaQ2vBfBFI5NHR63A==", + "dev": true, + "license": "MIT", + "dependencies": { + "fast-deep-equal": "^3.1.3", + "fast-uri": "^3.0.1", + "json-schema-traverse": "^1.0.0", + "require-from-string": "^2.0.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/@wp-playground/blueprints/node_modules/json-schema-traverse": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", + "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", + "dev": true, + "license": "MIT" + }, + "node_modules/@wp-playground/cli": { + "version": "3.1.50", + "resolved": "https://registry.npmjs.org/@wp-playground/cli/-/cli-3.1.50.tgz", + "integrity": "sha512-AY69P0nUVUrZXu1od5/Z4qvwf2d0QM87UkkB6fuRpa5DNrj/FWmHVncRIGQOSaBPsNfq8eCL+66RLoa8PPdgvw==", + "dev": true, + "license": "GPL-2.0-or-later", + "dependencies": { + "@php-wasm/cli-util": "3.1.50", + "@php-wasm/logger": "3.1.50", + "@php-wasm/node": "3.1.50", + "@php-wasm/progress": "3.1.50", + "@php-wasm/universal": "3.1.50", + "@php-wasm/util": "3.1.50", + "@php-wasm/xdebug-bridge": "3.1.50", + "@wp-playground/blueprints": "3.1.50", + "@wp-playground/common": "3.1.50", + "@wp-playground/storage": "3.1.50", + "@wp-playground/tools": "3.1.50", + "@wp-playground/wordpress": "3.1.50", + "express": "4.22.2", + "fs-extra": "11.1.1", + "tmp-promise": "3.0.3", + "wasm-feature-detect": "1.8.0", + "yargs": "17.7.2" + }, + "bin": { + "wp-playground-cli": "wp-playground.js" + } + }, + "node_modules/@wp-playground/common": { + "version": "3.1.50", + "resolved": "https://registry.npmjs.org/@wp-playground/common/-/common-3.1.50.tgz", + "integrity": "sha512-napFKb7GaCoJN7BbPaiC47ZgWjj3lBOce2FQBxf5gsxs83+13d+bh3O9fETLq/VeDIjfUWpawChCyhoQnT2+Ag==", + "dev": true, + "license": "GPL-2.0-or-later", + "dependencies": { + "@php-wasm/universal": "3.1.50", + "@php-wasm/util": "3.1.50" + }, + "engines": { + "node": ">=20.10.0", + "npm": ">=10.2.3" + } + }, + "node_modules/@wp-playground/storage": { + "version": "3.1.50", + "resolved": "https://registry.npmjs.org/@wp-playground/storage/-/storage-3.1.50.tgz", + "integrity": "sha512-3dOy+2XLODnLJhmpZ26nyYF3Bxs7BzJ91sOeKqi/6J16DDutdy0cxqLq4ppY+LM6Oczkp22tN0Yf7ULrNh8P0w==", + "dev": true, + "license": "GPL-2.0-or-later", + "dependencies": { + "@php-wasm/stream-compression": "3.1.50", + "@php-wasm/universal": "3.1.50", + "@php-wasm/util": "3.1.50", + "@zip.js/zip.js": "2.7.57", + "isomorphic-git": "1.37.6", + "octokit": "3.1.2", + "pako": "^1.0.10", + "sha.js": "2.4.12" + } + }, + "node_modules/@wp-playground/tools": { + "version": "3.1.50", + "resolved": "https://registry.npmjs.org/@wp-playground/tools/-/tools-3.1.50.tgz", + "integrity": "sha512-F+fyJ9GxiAIol5WE4iz+FAXn6obXtw6a4AizV09ZSe+7LGj+cLKib8+cXOyv1yRu7FJGxF5lmQxyaQ2lot4hGw==", + "dev": true, + "license": "GPL-2.0-or-later", + "dependencies": { + "@php-wasm/util": "3.1.50", + "@wp-playground/blueprints": "3.1.50" + }, + "engines": { + "node": ">=20.10.0", + "npm": ">=10.2.3" + } + }, + "node_modules/@wp-playground/wordpress": { + "version": "3.1.50", + "resolved": "https://registry.npmjs.org/@wp-playground/wordpress/-/wordpress-3.1.50.tgz", + "integrity": "sha512-Q5v2svqNYlqQLYICt6KA8y/Uyn9yi7rrGBoK0ABEYdXfXttdMVJIl9sLfJBtHpb+fLHFOXQhsPzcYbjXdGRIvA==", + "dev": true, + "license": "GPL-2.0-or-later", + "dependencies": { + "@php-wasm/logger": "3.1.50", + "@php-wasm/universal": "3.1.50", + "@php-wasm/util": "3.1.50", + "@wp-playground/common": "3.1.50", + "zstddec": "^0.2.0" + }, + "engines": { + "node": ">=20.10.0", + "npm": ">=10.2.3" + } + }, "node_modules/@xtuc/ieee754": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/@xtuc/ieee754/-/ieee754-1.2.0.tgz", @@ -7919,6 +9486,18 @@ "dev": true, "license": "Apache-2.0" }, + "node_modules/@zip.js/zip.js": { + "version": "2.7.57", + "resolved": "https://registry.npmjs.org/@zip.js/zip.js/-/zip.js-2.7.57.tgz", + "integrity": "sha512-BtonQ1/jDnGiMed6OkV6rZYW78gLmLswkHOzyMrMb+CAR7CZO8phOHO6c2qw6qb1g1betN7kwEHhhZk30dv+NA==", + "dev": true, + "license": "BSD-3-Clause", + "engines": { + "bun": ">=0.7.0", + "deno": ">=1.0.0", + "node": ">=16.5.0" + } + }, "node_modules/abab": { "version": "2.0.6", "resolved": "https://registry.npmjs.org/abab/-/abab-2.0.6.tgz", @@ -7927,6 +9506,19 @@ "dev": true, "license": "BSD-3-Clause" }, + "node_modules/abort-controller": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/abort-controller/-/abort-controller-3.0.0.tgz", + "integrity": "sha512-h8lQ8tacZYnR3vNQTgibj+tODHI5/+l06Au2Pcriv/Gmet0eaj4TwWH41sO9wnHDiQsEj19q0drzdWdeAHtweg==", + "dev": true, + "license": "MIT", + "dependencies": { + "event-target-shim": "^5.0.0" + }, + "engines": { + "node": ">=6.5" + } + }, "node_modules/accepts": { "version": "1.3.8", "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.8.tgz", @@ -7957,6 +9549,7 @@ "integrity": "sha512-UVJyE9MttOsBQIDKw1skb9nAwQuR5wuGD3+82K6JgJlm/Y+KI92oNsMNGZCYdDsVtRHSak0pcV5Dno5+4jh9sw==", "dev": true, "license": "MIT", + "peer": true, "bin": { "acorn": "bin/acorn" }, @@ -8017,12 +9610,27 @@ "node": ">= 14" } }, + "node_modules/aggregate-error": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/aggregate-error/-/aggregate-error-3.1.0.tgz", + "integrity": "sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==", + "dev": true, + "license": "MIT", + "dependencies": { + "clean-stack": "^2.0.0", + "indent-string": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, "node_modules/ajv": { "version": "6.14.0", "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.14.0.tgz", "integrity": "sha512-IWrosm/yrn43eiKqkfkHis7QioDleaXQHdDVPKg0FSwwd/DuvyX79TZnFOnYpB7dcsFAMmtFztZuXPDvSePkFw==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "fast-deep-equal": "^3.1.1", "fast-json-stable-stringify": "^2.0.0", @@ -8201,6 +9809,19 @@ "node": ">= 8" } }, + "node_modules/anynum": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/anynum/-/anynum-1.0.1.tgz", + "integrity": "sha512-N6//FLET/tXYNM/F6ABca1oH6fWB+KlTt909Le28WMDBk8oaT4vY17DCrwg2MvmuqUKt3Ni4N5dGJ/EoBgcO6A==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/NaturalIntelligence" + } + ], + "license": "MIT" + }, "node_modules/are-docs-informative": { "version": "0.0.2", "resolved": "https://registry.npmjs.org/are-docs-informative/-/are-docs-informative-0.0.2.tgz", @@ -8473,6 +10094,13 @@ "node": ">= 0.4" } }, + "node_modules/async-lock": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/async-lock/-/async-lock-1.4.1.tgz", + "integrity": "sha512-Az2ZTpuytrtqENulXwO3GGv1Bztugx6TT37NIo7imr/Qo0gsYiGtSdBa2B6fsXhTpVZDNfu1Qn3pk531e3q+nQ==", + "dev": true, + "license": "MIT" + }, "node_modules/asynckit": { "version": "0.4.0", "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", @@ -8827,6 +10455,27 @@ "bare-path": "^3.0.0" } }, + "node_modules/base64-js": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", + "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT" + }, "node_modules/baseline-browser-mapping": { "version": "2.11.1", "resolved": "https://registry.npmjs.org/baseline-browser-mapping/-/baseline-browser-mapping-2.11.1.tgz", @@ -8857,6 +10506,13 @@ "dev": true, "license": "MIT" }, + "node_modules/before-after-hook": { + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/before-after-hook/-/before-after-hook-2.2.3.tgz", + "integrity": "sha512-NzUnlZexiaH/46WDhANlyR2bXRopNg4F/zuSA3OpZnllCUgRaOF2znDioDWrmbNVsuZk6l9pMquQB38cfBZwkQ==", + "dev": true, + "license": "Apache-2.0" + }, "node_modules/big.js": { "version": "5.2.2", "resolved": "https://registry.npmjs.org/big.js/-/big.js-5.2.2.tgz", @@ -8953,6 +10609,13 @@ "dev": true, "license": "ISC" }, + "node_modules/bottleneck": { + "version": "2.19.5", + "resolved": "https://registry.npmjs.org/bottleneck/-/bottleneck-2.19.5.tgz", + "integrity": "sha512-VHiNCbI1lKdl44tGrhNfU3lup0Tj/ZBMJB5/2ZbNXRCPuRCO7ed2mgcK4r17y+KB2EfuYuRaVlwNbAeaWGSpbw==", + "dev": true, + "license": "MIT" + }, "node_modules/brace-expansion": { "version": "1.1.14", "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.14.tgz", @@ -8997,6 +10660,7 @@ } ], "license": "MIT", + "peer": true, "dependencies": { "baseline-browser-mapping": "^2.10.44", "caniuse-lite": "^1.0.30001806", @@ -9021,6 +10685,38 @@ "node-int64": "^0.4.0" } }, + "node_modules/btoa-lite": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/btoa-lite/-/btoa-lite-1.0.0.tgz", + "integrity": "sha512-gvW7InbIyF8AicrqWoptdW08pUxuhq8BEgowNajy9RhiE86fmGAGl+bLKo6oB8QP0CkqHLowfN0oJdKC/J6LbA==", + "dev": true, + "license": "MIT" + }, + "node_modules/buffer": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-6.0.3.tgz", + "integrity": "sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT", + "dependencies": { + "base64-js": "^1.3.1", + "ieee754": "^1.2.1" + } + }, "node_modules/buffer-crc32": { "version": "0.2.13", "resolved": "https://registry.npmjs.org/buffer-crc32/-/buffer-crc32-0.2.13.tgz", @@ -9031,6 +10727,13 @@ "node": "*" } }, + "node_modules/buffer-equal-constant-time": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/buffer-equal-constant-time/-/buffer-equal-constant-time-1.0.1.tgz", + "integrity": "sha512-zRpUiDwd/xk6ADqPMATG8vc9VPrkck7T07OIx0gnjmJAnHnTVXNQG3vfvWNuiZIkwu9KrKdA1iJKfsfTVxE6NA==", + "dev": true, + "license": "BSD-3-Clause" + }, "node_modules/buffer-from": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", @@ -9088,6 +10791,51 @@ "qified": "^0.10.1" } }, + "node_modules/cacheable-lookup": { + "version": "5.0.4", + "resolved": "https://registry.npmjs.org/cacheable-lookup/-/cacheable-lookup-5.0.4.tgz", + "integrity": "sha512-2/kNscPhpcxrOigMZzbiWF7dz8ilhb/nIHU3EyZiXWXpeq/au8qJ8VhdftMkty3n7Gj6HIGalQG8oiBNB3AJgA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10.6.0" + } + }, + "node_modules/cacheable-request": { + "version": "7.0.4", + "resolved": "https://registry.npmjs.org/cacheable-request/-/cacheable-request-7.0.4.tgz", + "integrity": "sha512-v+p6ongsrp0yTGbJXjgxPow2+DL93DASP4kXCDKb8/bwRtt9OEF3whggkkDkGNzgcWy2XaF4a8nZglC7uElscg==", + "dev": true, + "license": "MIT", + "dependencies": { + "clone-response": "^1.0.2", + "get-stream": "^5.1.0", + "http-cache-semantics": "^4.0.0", + "keyv": "^4.0.0", + "lowercase-keys": "^2.0.0", + "normalize-url": "^6.0.1", + "responselike": "^2.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/cacheable-request/node_modules/get-stream": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz", + "integrity": "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==", + "dev": true, + "license": "MIT", + "dependencies": { + "pump": "^3.0.0" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/cacheable/node_modules/keyv": { "version": "5.6.0", "resolved": "https://registry.npmjs.org/keyv/-/keyv-5.6.0.tgz", @@ -9304,6 +11052,13 @@ "node": ">=10" } }, + "node_modules/chardet": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/chardet/-/chardet-2.2.0.tgz", + "integrity": "sha512-rddelWYNPRrXq6PtNEN2S3f6t9ILzvqaN5pVgi4kqt9jHQaXIial9PznB5iSPVlQSLNaaH22ItWz3EJtQ10+OA==", + "dev": true, + "license": "MIT" + }, "node_modules/check-node-version": { "version": "4.2.1", "resolved": "https://registry.npmjs.org/check-node-version/-/check-node-version-4.2.1.tgz", @@ -9462,13 +11217,66 @@ "node": ">= 10.0" } }, - "node_modules/clean-css/node_modules/source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "license": "BSD-3-Clause", + "node_modules/clean-css/node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "license": "BSD-3-Clause", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/clean-git-ref": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/clean-git-ref/-/clean-git-ref-2.0.1.tgz", + "integrity": "sha512-bLSptAy2P0s6hU4PzuIMKmMJJSE6gLXGH1cntDu7bWJUksvuM+7ReOK61mozULErYvP6a15rnYl0zFDef+pyPw==", + "dev": true, + "license": "Apache-2.0" + }, + "node_modules/clean-stack": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/clean-stack/-/clean-stack-2.2.0.tgz", + "integrity": "sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/cli-cursor": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-3.1.0.tgz", + "integrity": "sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==", + "dev": true, + "license": "MIT", + "dependencies": { + "restore-cursor": "^3.1.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/cli-spinners": { + "version": "2.9.2", + "resolved": "https://registry.npmjs.org/cli-spinners/-/cli-spinners-2.9.2.tgz", + "integrity": "sha512-ywqV+5MmyL4E7ybXgKys4DugZbX0FC6LnwrhjuykIjnK9k8OQacQ7axGKnjDXWNhns0xot3bZI5h55H8yo9cJg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/cli-width": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/cli-width/-/cli-width-4.1.0.tgz", + "integrity": "sha512-ouuZd4/dm2Sw5Gmqy6bGyNNNe1qt9RpmxveLSO7KcgsTnU7RXfsw+/bukWGo1abgBiMAic068rclZsO4IWmmxQ==", + "dev": true, + "license": "ISC", "engines": { - "node": ">=0.10.0" + "node": ">= 12" } }, "node_modules/cliui": { @@ -9486,6 +11294,29 @@ "node": ">=12" } }, + "node_modules/clone": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/clone/-/clone-1.0.4.tgz", + "integrity": "sha512-JQHZ2QMW6l3aH/j6xCqQThY/9OH4D/9ls34cgkUBiEeocRTU04tHfKPBsUK1PqZCUQM7GiA0IIXJSuXHI64Kbg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.8" + } + }, + "node_modules/clone-response": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/clone-response/-/clone-response-1.0.3.tgz", + "integrity": "sha512-ROoL94jJH2dUVML2Y/5PEDNaSHgeOdSDicUyS7izcF63G6sTc/FTjLub4b8Il9S8S0beOfYt0TaA5qvFK+w0wA==", + "dev": true, + "license": "MIT", + "dependencies": { + "mimic-response": "^1.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/co": { "version": "4.6.0", "resolved": "https://registry.npmjs.org/co/-/co-4.6.0.tgz", @@ -9738,6 +11569,13 @@ "url": "https://github.com/sponsors/mesqueeb" } }, + "node_modules/copy-dir": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/copy-dir/-/copy-dir-1.3.0.tgz", + "integrity": "sha512-Q4+qBFnN4bwGwvtXXzbp4P/4iNk0MaiGAzvQ8OiMtlLjkIKjmNN689uVzShSM0908q7GoFHXIPx4zi75ocoaHw==", + "dev": true, + "license": "MIT" + }, "node_modules/copy-webpack-plugin": { "version": "10.2.4", "resolved": "https://registry.npmjs.org/copy-webpack-plugin/-/copy-webpack-plugin-10.2.4.tgz", @@ -9902,6 +11740,19 @@ "js-yaml": "bin/js-yaml.js" } }, + "node_modules/crc-32": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/crc-32/-/crc-32-1.2.2.tgz", + "integrity": "sha512-ROmzCKrTnOwybPcJApAA6WBWij23HVfGVNKqqrZpuyZOHqK2CwHSvpGuyt/UNNvaIjEd8X5IFGp4Mh+Ie1IHJQ==", + "dev": true, + "license": "Apache-2.0", + "bin": { + "crc32": "bin/crc32.njs" + }, + "engines": { + "node": ">=0.8" + } + }, "node_modules/cross-spawn": { "version": "7.0.6", "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz", @@ -10343,6 +12194,35 @@ "dev": true, "license": "MIT" }, + "node_modules/decompress-response": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-6.0.0.tgz", + "integrity": "sha512-aW35yZM6Bb/4oJlZncMH2LCoZtJXTRxES17vE3hoRiowU2kWHaJKFkSBDnDR+cm9J+9QhXmREyIfv0pji9ejCQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "mimic-response": "^3.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/decompress-response/node_modules/mimic-response": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-3.1.0.tgz", + "integrity": "sha512-z0yWI+4FDrrweS8Zmt4Ej5HdJmky15+L2e6Wgn3+iK5fWzb6T3fhNFq2+MeTRb064c6Wr4N/wv0DzQTjNzHNGQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/dedent": { "version": "1.7.2", "resolved": "https://registry.npmjs.org/dedent/-/dedent-1.7.2.tgz", @@ -10415,6 +12295,29 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/defaults": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/defaults/-/defaults-1.0.4.tgz", + "integrity": "sha512-eFuaLoy/Rxalv2kr+lqMlUnrDWV+3j4pljOIJgLIhI058IQfWJ7vXhyEIHu+HtC738klGALYxOKDO0bQP3tg8A==", + "dev": true, + "license": "MIT", + "dependencies": { + "clone": "^1.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/defer-to-connect": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/defer-to-connect/-/defer-to-connect-2.0.1.tgz", + "integrity": "sha512-4tvttepXG1VaYGrRibk5EwJd1t4udunSOVMdLSAL6mId1ix438oPwPZMALY41FCijukO1L0twNcGsdzS7dHgDg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + } + }, "node_modules/define-data-property": { "version": "1.1.4", "resolved": "https://registry.npmjs.org/define-data-property/-/define-data-property-1.1.4.tgz", @@ -10499,6 +12402,13 @@ "node": ">= 0.8" } }, + "node_modules/deprecation": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/deprecation/-/deprecation-2.3.1.tgz", + "integrity": "sha512-xmHIy4F3scKVwMsQ4WnVaS8bHOx0DmVwRywosKhaILI0ywMDWPtBSku2HNxRvF7jtwDRsoEwYQSfbxj8b7RlJQ==", + "dev": true, + "license": "ISC" + }, "node_modules/destroy": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.2.0.tgz", @@ -10543,7 +12453,15 @@ "resolved": "https://registry.npmjs.org/devtools-protocol/-/devtools-protocol-0.0.1551306.tgz", "integrity": "sha512-CFx8QdSim8iIv+2ZcEOclBKTQY6BI1IEDa7Tm9YkwAXzEWFndTEzpTo5jAUhSnq24IC7xaDw0wvGcm96+Y3PEg==", "dev": true, - "license": "BSD-3-Clause" + "license": "BSD-3-Clause", + "peer": true + }, + "node_modules/diff3": { + "version": "0.0.3", + "resolved": "https://registry.npmjs.org/diff3/-/diff3-0.0.3.tgz", + "integrity": "sha512-iSq8ngPOt0K53A6eVr4d5Kn6GNrM2nQZtC740pzIriHtn4pOQ2lyzEXQMBeVcWERN0ye7fhBsk9PbLLQOnUx/g==", + "dev": true, + "license": "MIT" }, "node_modules/dir-glob": { "version": "3.0.1", @@ -10571,6 +12489,35 @@ "node": ">=6" } }, + "node_modules/docker-compose": { + "version": "0.24.8", + "resolved": "https://registry.npmjs.org/docker-compose/-/docker-compose-0.24.8.tgz", + "integrity": "sha512-plizRs/Vf15H+GCVxq2EUvyPK7ei9b/cVesHvjnX4xaXjM9spHe2Ytq0BitndFgvTJ3E3NljPNUEl7BAN43iZw==", + "dev": true, + "license": "MIT", + "dependencies": { + "yaml": "^2.2.2" + }, + "engines": { + "node": ">= 6.0.0" + } + }, + "node_modules/docker-compose/node_modules/yaml": { + "version": "2.9.0", + "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.9.0.tgz", + "integrity": "sha512-2AvhNX3mb8zd6Zy7INTtSpl1F15HW6Wnqj0srWlkKLcpYl/gMIMJiyuGq2KeI2YFxUPjdlB+3Lc10seMLtL4cA==", + "dev": true, + "license": "ISC", + "bin": { + "yaml": "bin.mjs" + }, + "engines": { + "node": ">= 14.6" + }, + "funding": { + "url": "https://github.com/sponsors/eemeli" + } + }, "node_modules/doctrine": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz", @@ -10712,6 +12659,16 @@ "dev": true, "license": "MIT" }, + "node_modules/ecdsa-sig-formatter": { + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/ecdsa-sig-formatter/-/ecdsa-sig-formatter-1.0.11.tgz", + "integrity": "sha512-nagl3RYrbNv6kQkeJIpt6NJZy8twLB/2vtz6yN9Z4vRKHN4/QZJIEbqohALSgwKdnksuY3k5Addp5lg8sVoVcQ==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "safe-buffer": "^5.0.1" + } + }, "node_modules/ee-first": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", @@ -10772,6 +12729,7 @@ "integrity": "sha512-ETBauow1T35Y/WZMkio9jiM0Z5xjHHmJ4XmjZOq1l/dXz3lr2sRn87nJy20RupqSh1F2m3HHPSp8ShIPQJrJ3A==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "iconv-lite": "^0.6.2" } @@ -11219,6 +13177,7 @@ "integrity": "sha512-82GZUjRS0p/jganf6q1rEO25VSoHH0hKPCTrgillPjdI/3bgBhAE1QzHrHTizjpRvy6pGAvKjDJtk2pF9NDq8w==", "dev": true, "license": "MIT", + "peer": true, "bin": { "eslint-config-prettier": "bin/cli.js" }, @@ -11369,6 +13328,7 @@ "integrity": "sha512-whOE1HFo/qJDyX4SnXzP4N6zOWn79WhnCUY/iDR0mPfQZO8wcYE4JClzI2oZrhBnnMUCBCHZhO6VQyoBU95mZA==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "@rtsao/scc": "^1.1.0", "array-includes": "^3.1.9", @@ -11682,7 +13642,6 @@ "integrity": "sha512-yL/sLrpmtDaFEiUj1osRP4TI2MDz1AddJL+jZ7KSqvBuliN4xqYY54IfdN8qD8Toa6g1iloph1fxQNkjOxrrpQ==", "dev": true, "license": "Apache-2.0", - "peer": true, "dependencies": { "@types/json-schema": "^7.0.15" }, @@ -11696,7 +13655,6 @@ "integrity": "sha512-sNXOfKCn74rt8RICKMvJS7XKV/Xk9kA7DyJr8mJik3S7Cwgy3qlkkmyS2uQB3jiJg6VNdZd/pDBJu0nvG2NlTg==", "dev": true, "license": "BSD-2-Clause", - "peer": true, "dependencies": { "esrecurse": "^4.3.0", "estraverse": "^5.2.0" @@ -11714,7 +13672,6 @@ "integrity": "sha512-Uhdk5sfqcee/9H/rCOJikYz67o0a2Tw2hGRPOG2Y1R2dg7brRe1uG0yaNQDHu+TO/uQPF/5eCapvYSmHUjt7JQ==", "dev": true, "license": "Apache-2.0", - "peer": true, "engines": { "node": "^18.18.0 || ^20.9.0 || >=21.1.0" }, @@ -11728,7 +13685,6 @@ "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", "dev": true, "license": "MIT", - "peer": true, "dependencies": { "locate-path": "^6.0.0", "path-exists": "^4.0.0" @@ -11746,7 +13702,6 @@ "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", "dev": true, "license": "MIT", - "peer": true, "dependencies": { "p-locate": "^5.0.0" }, @@ -11763,7 +13718,6 @@ "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", "dev": true, "license": "MIT", - "peer": true, "dependencies": { "p-limit": "^3.0.2" }, @@ -11875,6 +13829,16 @@ "node": ">= 0.6" } }, + "node_modules/event-target-shim": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/event-target-shim/-/event-target-shim-5.0.1.tgz", + "integrity": "sha512-i/2XbnSz/uxRCU6+NdVJgKWDTM427+MqYbkQzD321DuCQJUqOuJKIA0IM2+W2xtYHdKOmZ4dR6fExsd4SXL+WQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, "node_modules/eventemitter3": { "version": "4.0.7", "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-4.0.7.tgz", @@ -12137,6 +14101,47 @@ ], "license": "BSD-3-Clause" }, + "node_modules/fast-xml-builder": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/fast-xml-builder/-/fast-xml-builder-1.3.1.tgz", + "integrity": "sha512-pIM/1n3ntFXKYrUZwW7QCK0gAW7XY+wzj1YMIV3tLDvPj/V+zTGJK5e3/4WJfwj0qWw2ElNXiTixda/R+3YSug==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/NaturalIntelligence" + } + ], + "license": "MIT", + "dependencies": { + "path-expression-matcher": "^1.6.2", + "xml-naming": "^0.3.0" + } + }, + "node_modules/fast-xml-parser": { + "version": "5.11.0", + "resolved": "https://registry.npmjs.org/fast-xml-parser/-/fast-xml-parser-5.11.0.tgz", + "integrity": "sha512-9IGxMqvqLOnqP+Egi1nqDHKv5k8aZ7r9n558enxcucmyVGEBNPAU+MOg/8jPIS7rO7sSq4gFm1/nHtiaubMruw==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/NaturalIntelligence" + } + ], + "license": "MIT", + "dependencies": { + "@nodable/entities": "^3.0.0", + "fast-xml-builder": "^1.2.0", + "is-unsafe": "^2.0.0", + "path-expression-matcher": "^1.6.2", + "strnum": "^2.4.2", + "xml-naming": "^0.3.0" + }, + "bin": { + "fxparser": "src/cli/cli.js" + } + }, "node_modules/fastest-levenshtein": { "version": "1.0.16", "resolved": "https://registry.npmjs.org/fastest-levenshtein/-/fastest-levenshtein-1.0.16.tgz", @@ -12446,6 +14451,35 @@ "node": ">= 0.6" } }, + "node_modules/fs-ext-extra-prebuilt": { + "version": "2.2.7", + "resolved": "https://registry.npmjs.org/fs-ext-extra-prebuilt/-/fs-ext-extra-prebuilt-2.2.7.tgz", + "integrity": "sha512-Q7rayYRBDIvDF01HWOwSSjoaP+05N1g+o3BXL1Zf8Frw2JkjSmi4EtvCBITuW30l6hB2m2TW1pehdh8wyU/+gw==", + "dev": true, + "hasInstallScript": true, + "license": "MIT", + "dependencies": { + "nan": "^2.24.0" + }, + "engines": { + "node": ">= 8.0.0" + } + }, + "node_modules/fs-extra": { + "version": "11.1.1", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-11.1.1.tgz", + "integrity": "sha512-MGIE4HOvQCeUCzmlHs0vXpih4ysz4wg9qiSAu6cd42lVwPbTM1TjV7RusoyQqMmk/95gdQZX72u+YW+c3eEpFQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + }, + "engines": { + "node": ">=14.14" + } + }, "node_modules/fs.realpath": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", @@ -12851,6 +14885,32 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/got": { + "version": "11.8.6", + "resolved": "https://registry.npmjs.org/got/-/got-11.8.6.tgz", + "integrity": "sha512-6tfZ91bOr7bOXnK7PRDCGBLa1H4U080YHNaAQ2KsMGlLEzRbk44nsZF2E1IeRc3vtJHPVbKCYgdFbaGO2ljd8g==", + "dev": true, + "license": "MIT", + "dependencies": { + "@sindresorhus/is": "^4.0.0", + "@szmarczak/http-timer": "^4.0.5", + "@types/cacheable-request": "^6.0.1", + "@types/responselike": "^1.0.0", + "cacheable-lookup": "^5.0.3", + "cacheable-request": "^7.0.2", + "decompress-response": "^6.0.0", + "http2-wrapper": "^1.0.0-beta.5.2", + "lowercase-keys": "^2.0.0", + "p-cancelable": "^2.0.0", + "responselike": "^2.0.0" + }, + "engines": { + "node": ">=10.19.0" + }, + "funding": { + "url": "https://github.com/sindresorhus/got?sponsor=1" + } + }, "node_modules/graceful-fs": { "version": "4.2.11", "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", @@ -13169,6 +15229,13 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/http-cache-semantics": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.2.0.tgz", + "integrity": "sha512-dTxcvPXqPvXBQpq5dUr6mEMJX4oIEFv6bwom3FDwKRDsuIjjJGANqhBuoAn9c1RQJIdAKav33ED65E2ys+87QQ==", + "dev": true, + "license": "BSD-2-Clause" + }, "node_modules/http-deceiver": { "version": "1.2.7", "resolved": "https://registry.npmjs.org/http-deceiver/-/http-deceiver-1.2.7.tgz", @@ -13268,6 +15335,33 @@ } } }, + "node_modules/http2-wrapper": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/http2-wrapper/-/http2-wrapper-1.0.3.tgz", + "integrity": "sha512-V+23sDMr12Wnz7iTcDeJr3O6AIxlnvT/bmaAAAP/Xda35C90p9599p0F1eHR/N1KILWSoWVAiOMFjBBXaXSMxg==", + "dev": true, + "license": "MIT", + "dependencies": { + "quick-lru": "^5.1.1", + "resolve-alpn": "^1.0.0" + }, + "engines": { + "node": ">=10.19.0" + } + }, + "node_modules/http2-wrapper/node_modules/quick-lru": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/quick-lru/-/quick-lru-5.1.1.tgz", + "integrity": "sha512-WuyALRjWPDGtt/wzJiadO5AXY+8hZ80hVpe6MyivgraREW751X3SbhRvG3eLKOYN+8VEvqLcf3wdnt44Z4S4SA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/https-proxy-agent": { "version": "7.0.6", "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-7.0.6.tgz", @@ -13328,6 +15422,27 @@ "postcss": "^8.1.0" } }, + "node_modules/ieee754": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", + "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "BSD-3-Clause" + }, "node_modules/ignore": { "version": "5.3.2", "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.2.tgz", @@ -13867,6 +15982,16 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/is-interactive": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-interactive/-/is-interactive-1.0.0.tgz", + "integrity": "sha512-2HvIEKRoqS62guEC+qBjpvRubdX910WCMuJTZ+I9yvqKU2/12eSL549HMwtabb4oupdj2sMP50k+XJfB/8JE6w==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, "node_modules/is-map": { "version": "2.0.3", "resolved": "https://registry.npmjs.org/is-map/-/is-map-2.0.3.tgz", @@ -14088,6 +16213,19 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/is-unsafe": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/is-unsafe/-/is-unsafe-2.0.2.tgz", + "integrity": "sha512-HgbIHPBH0KHHCcjLfGsCvhtPTVxjaAZlXjwdz7/GQC40SjSe4sfQsar8J5VFo8JOSbarkpV0OLG95bbaNd9aAQ==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/NaturalIntelligence" + } + ], + "license": "MIT" + }, "node_modules/is-weakmap": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/is-weakmap/-/is-weakmap-2.0.2.tgz", @@ -14169,21 +16307,74 @@ "dev": true, "license": "MIT" }, - "node_modules/isexe": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", - "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", + "node_modules/isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", + "dev": true, + "license": "ISC" + }, + "node_modules/isobject": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", + "integrity": "sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/isomorphic-git": { + "version": "1.37.6", + "resolved": "https://registry.npmjs.org/isomorphic-git/-/isomorphic-git-1.37.6.tgz", + "integrity": "sha512-qr1NFCPsVTZ6YGqTXw0CzamnsHyH9QQ1OTEfeXIweSljRUMzuHFCJdUn0wc6OcjtTDns6knxjPb7N6LmJeftOA==", + "dev": true, + "license": "MIT", + "dependencies": { + "async-lock": "^1.4.1", + "clean-git-ref": "^2.0.1", + "crc-32": "^1.2.0", + "diff3": "0.0.3", + "ignore": "^5.1.4", + "minimisted": "^2.0.0", + "pako": "^1.0.10", + "pify": "^4.0.1", + "readable-stream": "^4.0.0", + "sha.js": "^2.4.12", + "simple-get": "^4.0.1" + }, + "bin": { + "isogit": "cli.cjs" + }, + "engines": { + "node": ">=14.17" + } + }, + "node_modules/isomorphic-git/node_modules/pify": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz", + "integrity": "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==", "dev": true, - "license": "ISC" + "license": "MIT", + "engines": { + "node": ">=6" + } }, - "node_modules/isobject": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", - "integrity": "sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg==", + "node_modules/isomorphic-git/node_modules/readable-stream": { + "version": "4.7.0", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-4.7.0.tgz", + "integrity": "sha512-oIGGmcpTLwPga8Bn6/Z75SVaH1z5dUut2ibSyAMVhmUggWpmDn2dapB0n7f8nwaSiRtepAsfJyfXIO5DCVAODg==", "dev": true, "license": "MIT", + "dependencies": { + "abort-controller": "^3.0.0", + "buffer": "^6.0.3", + "events": "^3.3.0", + "process": "^0.11.10", + "string_decoder": "^1.3.0" + }, "engines": { - "node": ">=0.10.0" + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" } }, "node_modules/istanbul-lib-coverage": { @@ -14310,6 +16501,7 @@ "integrity": "sha512-Yi1jqNC/Oq0N4hBgNH/YvBpP1P57QqundgytzYqy3yqAa7NZPNjSoi4SGbRAXDMdBzNE6xBCi5U7RgfrvMEUVQ==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "@jest/core": "30.4.2", "@jest/types": "30.4.1", @@ -15096,6 +17288,7 @@ "integrity": "sha512-Cvc9WUhxSMEo4McES3P7oK3QaXldCfNWp7pl2NNeiIFlCoLr3kfq9kb1fxftiwk1FLV7CvpvDfonxtzUDeSOPg==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "cssstyle": "^4.2.1", "data-urls": "^5.0.0", @@ -15198,6 +17391,55 @@ "dev": true, "license": "MIT" }, + "node_modules/jsonfile": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.2.1.tgz", + "integrity": "sha512-zwOTdL3rFQ/lRdBnntKVOX6k5cKJwEc1HdilT71BWEu7J41gXIB2MRp+vxduPSwZJPWBxEzv4yH1wYLJGUHX4Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "universalify": "^2.0.0" + }, + "optionalDependencies": { + "graceful-fs": "^4.1.6" + } + }, + "node_modules/jsonwebtoken": { + "version": "9.0.3", + "resolved": "https://registry.npmjs.org/jsonwebtoken/-/jsonwebtoken-9.0.3.tgz", + "integrity": "sha512-MT/xP0CrubFRNLNKvxJ2BYfy53Zkm++5bX9dtuPbqAeQpTVe0MQTFhao8+Cp//EmJp244xt6Drw/GVEGCUj40g==", + "dev": true, + "license": "MIT", + "dependencies": { + "jws": "^4.0.1", + "lodash.includes": "^4.3.0", + "lodash.isboolean": "^3.0.3", + "lodash.isinteger": "^4.0.4", + "lodash.isnumber": "^3.0.3", + "lodash.isplainobject": "^4.0.6", + "lodash.isstring": "^4.0.1", + "lodash.once": "^4.0.0", + "ms": "^2.1.1", + "semver": "^7.5.4" + }, + "engines": { + "node": ">=12", + "npm": ">=6" + } + }, + "node_modules/jsonwebtoken/node_modules/semver": { + "version": "7.8.5", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.8.5.tgz", + "integrity": "sha512-Y7/KDsb8LjooZpwaqGyulO6DQlksgCncchHGk+sZIY4SBvUocMBEFH5Ur1fI4dV+Jvl0w6cjvucaIi40puRioA==", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, "node_modules/jsx-ast-utils": { "version": "3.3.5", "resolved": "https://registry.npmjs.org/jsx-ast-utils/-/jsx-ast-utils-3.3.5.tgz", @@ -15214,6 +17456,29 @@ "node": ">=4.0" } }, + "node_modules/jwa": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/jwa/-/jwa-2.0.1.tgz", + "integrity": "sha512-hRF04fqJIP8Abbkq5NKGN0Bbr3JxlQ+qhZufXVr0DvujKy93ZCbXZMHDL4EOtodSbCWxOqR8MS1tXA5hwqCXDg==", + "dev": true, + "license": "MIT", + "dependencies": { + "buffer-equal-constant-time": "^1.0.1", + "ecdsa-sig-formatter": "1.0.11", + "safe-buffer": "^5.0.1" + } + }, + "node_modules/jws": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/jws/-/jws-4.0.1.tgz", + "integrity": "sha512-EKI/M/yqPncGUUh44xz0PxSidXFr/+r0pA70+gIYhjv+et7yxM+s29Y+VGDkovRofQem0fs7Uvf4+YmAdyRduA==", + "dev": true, + "license": "MIT", + "dependencies": { + "jwa": "^2.0.1", + "safe-buffer": "^5.0.1" + } + }, "node_modules/keyv": { "version": "4.5.4", "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.5.4.tgz", @@ -15603,6 +17868,48 @@ "dev": true, "license": "MIT" }, + "node_modules/lodash.includes": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/lodash.includes/-/lodash.includes-4.3.0.tgz", + "integrity": "sha512-W3Bx6mdkRTGtlJISOvVD/lbqjTlPPUDTMnlXZFnVwi9NKJ6tiAk6LVdlhZMm17VZisqhKcgzpO5Wz91PCt5b0w==", + "dev": true, + "license": "MIT" + }, + "node_modules/lodash.isboolean": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/lodash.isboolean/-/lodash.isboolean-3.0.3.tgz", + "integrity": "sha512-Bz5mupy2SVbPHURB98VAcw+aHh4vRV5IPNhILUCsOzRmsTmSQ17jIuqopAentWoehktxGd9e/hbIXq980/1QJg==", + "dev": true, + "license": "MIT" + }, + "node_modules/lodash.isinteger": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/lodash.isinteger/-/lodash.isinteger-4.0.4.tgz", + "integrity": "sha512-DBwtEWN2caHQ9/imiNeEA5ys1JoRtRfY3d7V9wkqtbycnAmTvRRmbHKDV4a0EYc678/dia0jrte4tjYwVBaZUA==", + "dev": true, + "license": "MIT" + }, + "node_modules/lodash.isnumber": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/lodash.isnumber/-/lodash.isnumber-3.0.3.tgz", + "integrity": "sha512-QYqzpfwO3/CWf3XP+Z+tkQsfaLL/EnUlXWVkIk5FUPc4sBdTehEqZONuyRt2P67PXAk+NXmTBcc97zw9t1FQrw==", + "dev": true, + "license": "MIT" + }, + "node_modules/lodash.isplainobject": { + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/lodash.isplainobject/-/lodash.isplainobject-4.0.6.tgz", + "integrity": "sha512-oSXzaWypCMHkPC3NvBEaPHf0KsA5mvPrOPgQWDsbg8n7orZ290M0BmC/jgRZ4vcJ6DTAhjrsSYgdsW/F+MFOBA==", + "dev": true, + "license": "MIT" + }, + "node_modules/lodash.isstring": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/lodash.isstring/-/lodash.isstring-4.0.1.tgz", + "integrity": "sha512-0wJxfxH1wgO3GrbuP+dTTk7op+6L41QCXbGINEmD+ny/G/eCqGzxyCsh7159S+mgDDcoarnBw6PC1PS5+wUGgw==", + "dev": true, + "license": "MIT" + }, "node_modules/lodash.memoize": { "version": "4.1.2", "resolved": "https://registry.npmjs.org/lodash.memoize/-/lodash.memoize-4.1.2.tgz", @@ -15617,6 +17924,13 @@ "devOptional": true, "license": "MIT" }, + "node_modules/lodash.once": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/lodash.once/-/lodash.once-4.1.1.tgz", + "integrity": "sha512-Sb487aTOCr9drQVL8pIxOzVhafOjZN9UU54hiN8PU3uAiSV7lx1yYNpbNmex2PK6dSJoNTSJUUswT651yww3Mg==", + "dev": true, + "license": "MIT" + }, "node_modules/lodash.truncate": { "version": "4.4.2", "resolved": "https://registry.npmjs.org/lodash.truncate/-/lodash.truncate-4.4.2.tgz", @@ -15678,6 +17992,16 @@ "tslib": "^2.0.3" } }, + "node_modules/lowercase-keys": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-2.0.0.tgz", + "integrity": "sha512-tqNXrS78oMOE73NMxK4EMLQsQowWf8jKooH9g7xPavRT706R6bkQJ6DY2Te7QukaZsulxa30wQ7bk0pm4XiHmA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, "node_modules/lru-cache": { "version": "5.1.1", "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", @@ -16112,6 +18436,16 @@ "node": ">=6" } }, + "node_modules/mimic-response": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-1.0.1.tgz", + "integrity": "sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, "node_modules/min-indent": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/min-indent/-/min-indent-1.0.1.tgz", @@ -16198,6 +18532,16 @@ "node": ">=0.10.0" } }, + "node_modules/minimisted": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/minimisted/-/minimisted-2.0.1.tgz", + "integrity": "sha512-1oPjfuLQa2caorJUM8HV8lGgWCc0qqAO1MNv/k05G4qslmsndV/5WdNZrqCiyqiz3wohia2Ij2B7w2Dr7/IyrA==", + "dev": true, + "license": "MIT", + "dependencies": { + "minimist": "^1.2.5" + } + }, "node_modules/minimizer-webpack-plugin": { "version": "5.6.1", "resolved": "https://registry.npmjs.org/minimizer-webpack-plugin/-/minimizer-webpack-plugin-5.6.1.tgz", @@ -16352,6 +18696,23 @@ "multicast-dns": "cli.js" } }, + "node_modules/mute-stream": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-2.0.0.tgz", + "integrity": "sha512-WWdIxpyjEn+FhQJQQv9aQAYlHoNVdzIzUySNV1gHUPDSdZJ3yZn7pAAbQcV7B56Mvu881q9FZV+0Vx2xC44VWA==", + "dev": true, + "license": "ISC", + "engines": { + "node": "^18.17.0 || >=20.5.0" + } + }, + "node_modules/nan": { + "version": "2.28.0", + "resolved": "https://registry.npmjs.org/nan/-/nan-2.28.0.tgz", + "integrity": "sha512-fTsDz99OTq2sVePhGdp4qQhggZFtKr64ZNVyVajRKtMOkJxYekplBh577PiJB12v/D3s2E5cGtOI45LWp6rnLQ==", + "dev": true, + "license": "MIT" + }, "node_modules/nanoid": { "version": "3.3.16", "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.16.tgz", @@ -16578,6 +18939,19 @@ "node": ">=0.10.0" } }, + "node_modules/normalize-url": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-6.1.0.tgz", + "integrity": "sha512-DlL+XwOy3NxAQ8xuC0okPgK46iuVNAK01YN7RueYBqqFeGsBjV9XmCAzAdgt+667bCl5kPh9EqKKDwnaPG1I7A==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/npm-bundled": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/npm-bundled/-/npm-bundled-1.1.2.tgz", @@ -16601,6 +18975,7 @@ "integrity": "sha512-cuXAJJB1Rdqz0UO6w524matlBqDBjcNt7Ru+RDIu4y6RI1gVqiWBnylrK8sPRk81gGBA0X8hJbDXolVOoTc+sA==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "ajv": "^6.12.6", "ajv-errors": "^1.0.1", @@ -16850,6 +19225,28 @@ "dev": true, "license": "MIT" }, + "node_modules/octokit": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/octokit/-/octokit-3.1.2.tgz", + "integrity": "sha512-MG5qmrTL5y8KYwFgE1A4JWmgfQBaIETE/lOlfwNYx1QOtCQHGVxkRJmdUJltFc1HVn73d61TlMhMyNTOtMl+ng==", + "dev": true, + "license": "MIT", + "dependencies": { + "@octokit/app": "^14.0.2", + "@octokit/core": "^5.0.0", + "@octokit/oauth-app": "^6.0.0", + "@octokit/plugin-paginate-graphql": "^4.0.0", + "@octokit/plugin-paginate-rest": "^9.0.0", + "@octokit/plugin-rest-endpoint-methods": "^10.0.0", + "@octokit/plugin-retry": "^6.0.0", + "@octokit/plugin-throttling": "^8.0.0", + "@octokit/request-error": "^5.0.0", + "@octokit/types": "^12.0.0" + }, + "engines": { + "node": ">= 18" + } + }, "node_modules/on-finished": { "version": "2.4.1", "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.4.1.tgz", @@ -16946,6 +19343,141 @@ "node": ">= 0.8.0" } }, + "node_modules/ora": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/ora/-/ora-4.1.1.tgz", + "integrity": "sha512-sjYP8QyVWBpBZWD6Vr1M/KwknSw6kJOz41tvGMlwWeClHBtYKTbHMki1PsLZnxKpXMPbTKv9b3pjQu3REib96A==", + "dev": true, + "license": "MIT", + "dependencies": { + "chalk": "^3.0.0", + "cli-cursor": "^3.1.0", + "cli-spinners": "^2.2.0", + "is-interactive": "^1.0.0", + "log-symbols": "^3.0.0", + "mute-stream": "0.0.8", + "strip-ansi": "^6.0.0", + "wcwidth": "^1.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/ora/node_modules/chalk": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-3.0.0.tgz", + "integrity": "sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/ora/node_modules/color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "dev": true, + "license": "MIT", + "dependencies": { + "color-name": "1.1.3" + } + }, + "node_modules/ora/node_modules/color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", + "dev": true, + "license": "MIT" + }, + "node_modules/ora/node_modules/escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/ora/node_modules/has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/ora/node_modules/log-symbols": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-3.0.0.tgz", + "integrity": "sha512-dSkNGuI7iG3mfvDzUuYZyvk5dD9ocYCYzNU6CYDE6+Xqd+gwme6Z00NS3dUh8mq/73HaEtT7m6W+yUPtU6BZnQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "chalk": "^2.4.2" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/ora/node_modules/log-symbols/node_modules/ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, + "license": "MIT", + "dependencies": { + "color-convert": "^1.9.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/ora/node_modules/log-symbols/node_modules/chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/ora/node_modules/log-symbols/node_modules/supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, + "license": "MIT", + "dependencies": { + "has-flag": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/ora/node_modules/mute-stream": { + "version": "0.0.8", + "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.8.tgz", + "integrity": "sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA==", + "dev": true, + "license": "ISC" + }, "node_modules/own-keys": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/own-keys/-/own-keys-1.0.2.tgz", @@ -16965,6 +19497,16 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/p-cancelable": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/p-cancelable/-/p-cancelable-2.1.1.tgz", + "integrity": "sha512-BZOr3nRQHOntUjTrH8+Lh54smKHoHyur8We1V8DSMVrl5A2malOOwuJRnKRDjSnkoeBh4at6BwEnb5I7Jl31wg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, "node_modules/p-limit": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", @@ -17079,6 +19621,13 @@ "dev": true, "license": "BlueOak-1.0.0" }, + "node_modules/pako": { + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/pako/-/pako-1.0.11.tgz", + "integrity": "sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw==", + "dev": true, + "license": "(MIT AND Zlib)" + }, "node_modules/param-case": { "version": "3.0.4", "resolved": "https://registry.npmjs.org/param-case/-/param-case-3.0.4.tgz", @@ -17222,6 +19771,22 @@ "node": ">=8" } }, + "node_modules/path-expression-matcher": { + "version": "1.6.2", + "resolved": "https://registry.npmjs.org/path-expression-matcher/-/path-expression-matcher-1.6.2.tgz", + "integrity": "sha512-enSlaiat05iasnzmgNxRj8reFdj3puY2QpNgP1aPIaVfT6nn9ICuPoFlKHk8EN22HcwewshO+mN2DGbkCEOtqQ==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/NaturalIntelligence" + } + ], + "license": "MIT", + "engines": { + "node": ">=14.0.0" + } + }, "node_modules/path-is-absolute": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", @@ -17586,6 +20151,7 @@ } ], "license": "MIT", + "peer": true, "dependencies": { "nanoid": "^3.3.16", "picocolors": "^1.1.1", @@ -18340,6 +20906,7 @@ "integrity": "sha512-X4UlrxDTH8oom9qXlcjnydsjAOD2BmB6yFmvS4Z2zdTzqqpRWb+fbqrH412+l+OUXmbzJlSXjlMFYPgYG12IAA==", "dev": true, "license": "MIT", + "peer": true, "bin": { "prettier": "bin/prettier.cjs" }, @@ -18452,7 +21019,17 @@ "needle": "bin/needle" }, "engines": { - "node": ">= 4.4.x" + "node": ">= 4.4.x" + } + }, + "node_modules/process": { + "version": "0.11.10", + "resolved": "https://registry.npmjs.org/process/-/process-0.11.10.tgz", + "integrity": "sha512-cdGef/drWFoydD1JsMzuFf8100nZl+GT+yacc2bEced5f9Rjk4z+WtFUTBu9PhOi9j/jfmBPu0mMEY4wIdAF8A==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.6.0" } }, "node_modules/process-nextick-args": { @@ -18579,6 +21156,7 @@ "integrity": "sha512-P3Ou0MAFDCQ0dK1d9F9+8jTrg6JvXjUacgG0YkJQP4kbEnUOGokSDEMmMId5ZhXD5HwsHM202E9VwEpEjWfwxg==", "dev": true, "license": "Apache-2.0", + "peer": true, "dependencies": { "@puppeteer/browsers": "2.11.1", "chromium-bidi": "13.0.1", @@ -18799,6 +21377,7 @@ "integrity": "sha512-jCvmsr+1IUSMUyzOkRcvnVbX3ZYC6g9TDrDbFuFmRDq7PD4yaGbLKNQL6k2jnArV8hjYxh7hVhAZB6s9HDGpZA==", "dev": true, "license": "MIT", + "peer": true, "engines": { "node": ">=0.10.0" } @@ -19149,6 +21728,13 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/resolve-alpn": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/resolve-alpn/-/resolve-alpn-1.2.1.tgz", + "integrity": "sha512-0a1F4l73/ZFZOakJnQ3FvkJ2+gSTQWz/r2KE5OdDY0TxPm5h4GkqkWWfM47T7HsbnOtcJVEF4epCVy6u7Q3K+g==", + "dev": true, + "license": "MIT" + }, "node_modules/resolve-bin": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/resolve-bin/-/resolve-bin-1.0.1.tgz", @@ -19192,6 +21778,33 @@ "url": "https://github.com/privatenumber/resolve-pkg-maps?sponsor=1" } }, + "node_modules/responselike": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/responselike/-/responselike-2.0.1.tgz", + "integrity": "sha512-4gl03wn3hj1HP3yzgdI7d3lCkF95F21Pz4BPGvKHinyQzALR5CapwC8yIi0Rh58DEMQ/SguC03wFj2k0M/mHhw==", + "dev": true, + "license": "MIT", + "dependencies": { + "lowercase-keys": "^2.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/restore-cursor": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-3.1.0.tgz", + "integrity": "sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==", + "dev": true, + "license": "MIT", + "dependencies": { + "onetime": "^5.1.0", + "signal-exit": "^3.0.2" + }, + "engines": { + "node": ">=8" + } + }, "node_modules/retry": { "version": "0.13.1", "resolved": "https://registry.npmjs.org/retry/-/retry-0.13.1.tgz", @@ -19213,6 +21826,70 @@ "node": ">=0.10.0" } }, + "node_modules/rimraf": { + "version": "5.0.10", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-5.0.10.tgz", + "integrity": "sha512-l0OE8wL34P4nJH/H2ffoaniAokM2qSmrtXHmlpvYr5AVVX8msAyW0l8NVJFDxlSK4u3Uh/f41cQheDVdnYijwQ==", + "dev": true, + "license": "ISC", + "dependencies": { + "glob": "^10.3.7" + }, + "bin": { + "rimraf": "dist/esm/bin.mjs" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/rimraf/node_modules/brace-expansion": { + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.1.4.tgz", + "integrity": "sha512-hGfVzPxthbf3+2yjg/RBs60cB0FhqBS/zvdV/4wn4/BmN0bNMMHPc4V/BbFieqf1TKAGGAHnY4eSjajCl0f2Xg==", + "dev": true, + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0" + } + }, + "node_modules/rimraf/node_modules/glob": { + "version": "10.5.0", + "resolved": "https://registry.npmjs.org/glob/-/glob-10.5.0.tgz", + "integrity": "sha512-DfXN8DfhJ7NH3Oe7cFmu3NCu1wKbkReJ8TorzSAFbSKrlNaQSKfIzqYqVY8zlbs2NLBbWpRiU52GX2PbaBVNkg==", + "deprecated": "Old versions of glob are not supported, and contain widely publicized security vulnerabilities, which have been fixed in the current version. Please update. Support for old versions may be purchased (at exorbitant rates) by contacting i@izs.me", + "dev": true, + "license": "ISC", + "dependencies": { + "foreground-child": "^3.1.0", + "jackspeak": "^3.1.2", + "minimatch": "^9.0.4", + "minipass": "^7.1.2", + "package-json-from-dist": "^1.0.0", + "path-scurry": "^1.11.1" + }, + "bin": { + "glob": "dist/esm/bin.mjs" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/rimraf/node_modules/minimatch": { + "version": "9.0.9", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.9.tgz", + "integrity": "sha512-OBwBN9AL4dqmETlpS2zasx+vTeWclWzkblfZk7KTA5j3jeOONz/tRCnZomUyvNg83wL5Zv9Ss6HMJXAgL8R2Yg==", + "dev": true, + "license": "ISC", + "dependencies": { + "brace-expansion": "^2.0.2" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, "node_modules/robots-parser": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/robots-parser/-/robots-parser-3.0.1.tgz", @@ -19401,6 +22078,7 @@ "integrity": "sha512-fDz1zJpd5GycprAbu4Q2PV/RprsRtKC/0z82z0JLgdytmcq0+ujJbJ/09bPGDxCLkKY3Np5cRAOcWiVkLXJURg==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "chokidar": "^4.0.0", "immutable": "^5.0.2", @@ -19485,8 +22163,7 @@ "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.27.0.tgz", "integrity": "sha512-eNv+WrVbKu1f3vbYJT/xtiF5syA5HPIMtf9IgY/nKg0sWqzAUEvqY/xm7OcZc/qafLx/iO9FgOmeSAp4v5ti/Q==", "dev": true, - "license": "MIT", - "peer": true + "license": "MIT" }, "node_modules/schema-utils": { "version": "4.3.3", @@ -19514,6 +22191,7 @@ "integrity": "sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "fast-deep-equal": "^3.1.3", "fast-uri": "^3.0.1", @@ -19789,6 +22467,27 @@ "dev": true, "license": "ISC" }, + "node_modules/sha.js": { + "version": "2.4.12", + "resolved": "https://registry.npmjs.org/sha.js/-/sha.js-2.4.12.tgz", + "integrity": "sha512-8LzC5+bvI45BjpfXU8V5fdU2mfeKiQe1D1gIMn7XUlF3OTUrpdJpPPH4EMAnF0DsHHdSZqCdSss5qCmJKuiO3w==", + "dev": true, + "license": "(MIT AND BSD-3-Clause)", + "dependencies": { + "inherits": "^2.0.4", + "safe-buffer": "^5.2.1", + "to-buffer": "^1.2.0" + }, + "bin": { + "sha.js": "bin.js" + }, + "engines": { + "node": ">= 0.10" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/shebang-command": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", @@ -19915,6 +22614,71 @@ "dev": true, "license": "ISC" }, + "node_modules/simple-concat": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/simple-concat/-/simple-concat-1.0.1.tgz", + "integrity": "sha512-cSFtAPtRhljv69IK0hTVZQ+OfE9nePi/rtJmw5UjHeVyVroEqJXP1sFztKUy1qU+xvz3u/sfYJLa947b7nAN2Q==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT" + }, + "node_modules/simple-get": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/simple-get/-/simple-get-4.0.1.tgz", + "integrity": "sha512-brv7p5WgH0jmQJr1ZDDfKDOSeWWg+OVypG99A/5vYGPqJ6pxiaHLy8nxtFjBA7oMa01ebA9gfh1uMCFqOuXxvA==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT", + "dependencies": { + "decompress-response": "^6.0.0", + "once": "^1.3.1", + "simple-concat": "^1.0.0" + } + }, + "node_modules/simple-git": { + "version": "3.36.0", + "resolved": "https://registry.npmjs.org/simple-git/-/simple-git-3.36.0.tgz", + "integrity": "sha512-cGQjLjK8bxJw4QuYT7gxHw3/IouVESbhahSsHrX97MzCL1gu2u7oy38W6L2ZIGECEfIBG4BabsWDPjBxJENv9Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "@kwsites/file-exists": "^1.1.1", + "@kwsites/promise-deferred": "^1.1.1", + "@simple-git/args-pathspec": "^1.0.3", + "@simple-git/argv-parser": "^1.1.0", + "debug": "^4.4.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/steveukx/git-js?sponsor=1" + } + }, "node_modules/sirv": { "version": "2.0.4", "resolved": "https://registry.npmjs.org/sirv/-/sirv-2.0.4.tgz", @@ -20545,6 +23309,22 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/strnum": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/strnum/-/strnum-2.4.2.tgz", + "integrity": "sha512-rDG3Ah4TV0k1hWvLSzkZtMmLN9+eS+h3knq4MP6A42Y3Yh5qGNnOUs1jJkoSr8FG5dsL28c7KgkIBzSEykqtuw==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/NaturalIntelligence" + } + ], + "license": "MIT", + "dependencies": { + "anynum": "^1.0.1" + } + }, "node_modules/stubborn-fs": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/stubborn-fs/-/stubborn-fs-2.0.0.tgz", @@ -20602,6 +23382,7 @@ } ], "license": "MIT", + "peer": true, "dependencies": { "@csstools/css-parser-algorithms": "^3.0.5", "@csstools/css-syntax-patches-for-csstree": "^1.0.19", @@ -20896,6 +23677,7 @@ "integrity": "sha512-HeP7D2wyhkR+XaK6v4W8oRF62Dsz4flyuczALJp61GckGm42u1saSSJ/0auvcBqxs3jMRFEcPK34At/0JBKdOg==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "cssesc": "^3.0.0", "util-deprecate": "^1.0.2" @@ -21372,6 +24154,7 @@ "integrity": "sha512-RvwwcruNjI1ncT5xRakeyS9Lf8lcItv34KD+aif+VH9kduAyfYBipGh12274xtenIPZ119/R9BdTBa8gAwSh0A==", "dev": true, "license": "MIT", + "peer": true, "engines": { "node": ">=12" }, @@ -21416,6 +24199,26 @@ "dev": true, "license": "MIT" }, + "node_modules/tmp": { + "version": "0.2.7", + "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.2.7.tgz", + "integrity": "sha512-e0votIpp4Uo2AJYSzVHV6xCcawuiez3DzqDAbrTc3YxBkplN6e+dM13ZeIcZnDg/QpSuU2zfZ3rzwY8ukEnaXw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=14.14" + } + }, + "node_modules/tmp-promise": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/tmp-promise/-/tmp-promise-3.0.3.tgz", + "integrity": "sha512-RwM7MoPojPxsOBYnyd2hy0bxtIlVrihNs9pj5SUvY8Zz1sQcQG2tG1hSr8PDxfgEB8RNKDhqbIlroIarSNDNsQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "tmp": "^0.2.0" + } + }, "node_modules/tmpl": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/tmpl/-/tmpl-1.0.5.tgz", @@ -21423,6 +24226,21 @@ "dev": true, "license": "BSD-3-Clause" }, + "node_modules/to-buffer": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/to-buffer/-/to-buffer-1.2.2.tgz", + "integrity": "sha512-db0E3UJjcFhpDhAF4tLo03oli3pwl3dbnzXOUIlRKrp+ldk/VUxzpWYZENsw2SZiuBjHAk7DfB0VU7NKdpb6sw==", + "dev": true, + "license": "MIT", + "dependencies": { + "isarray": "^2.0.5", + "safe-buffer": "^5.2.1", + "typed-array-buffer": "^1.0.3" + }, + "engines": { + "node": ">= 0.4" + } + }, "node_modules/to-regex-range": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", @@ -21563,7 +24381,8 @@ "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz", "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==", "dev": true, - "license": "0BSD" + "license": "0BSD", + "peer": true }, "node_modules/tsyringe": { "version": "4.10.0", @@ -21614,6 +24433,7 @@ "integrity": "sha512-TeTSQ6H5YHvpqVwBRcnLDCBnDOHWYu7IvGbHT6N8AOymcr9PJGjc1GTtiWZTYg0NCgYwvnYWEkVChQAr9bjfwA==", "dev": true, "license": "(MIT OR CC0-1.0)", + "peer": true, "engines": { "node": ">=16" }, @@ -21798,9 +24618,9 @@ } }, "node_modules/undici-types": { - "version": "8.3.0", - "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-8.3.0.tgz", - "integrity": "sha512-j375ScV60dom+YkPFIfTLcOiPxkN/buHz5GobjLhixFuANaNs3C9l4GmrWqejgXWJ7BbJcFYpTEUkS1Ge8bpZQ==", + "version": "6.21.0", + "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.21.0.tgz", + "integrity": "sha512-iwDZqg0QAGrg9Rav5H4n0M64c3mkR59cJ6wQp+7C4nI0gsmExaedaYLNO44eT4AtBBwjbTiGPMlt2Md0T9H9JQ==", "dev": true, "license": "MIT" }, @@ -21848,6 +24668,34 @@ "node": ">=4" } }, + "node_modules/universal-github-app-jwt": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/universal-github-app-jwt/-/universal-github-app-jwt-1.2.0.tgz", + "integrity": "sha512-dncpMpnsKBk0eetwfN8D8OUHGfiDhhJ+mtsbMl+7PfW7mYjiH8LIcqRmYMtzYLgSh47HjfdBtrBwIQ/gizKR3g==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/jsonwebtoken": "^9.0.0", + "jsonwebtoken": "^9.0.2" + } + }, + "node_modules/universal-user-agent": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/universal-user-agent/-/universal-user-agent-6.0.1.tgz", + "integrity": "sha512-yCzhz6FN2wU1NiiQRogkTQszlQSlpWaw8SvVegAc+bDxbzHgh1vX8uIe8OYyMH6DwH+sdTJsgMl36+mSMdRJIQ==", + "dev": true, + "license": "ISC" + }, + "node_modules/universalify": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.1.tgz", + "integrity": "sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 10.0.0" + } + }, "node_modules/unpipe": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", @@ -21865,6 +24713,7 @@ "dev": true, "hasInstallScript": true, "license": "MIT", + "peer": true, "dependencies": { "napi-postinstall": "^0.3.4" }, @@ -22111,6 +24960,13 @@ "makeerror": "1.0.12" } }, + "node_modules/wasm-feature-detect": { + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/wasm-feature-detect/-/wasm-feature-detect-1.8.0.tgz", + "integrity": "sha512-zksaLKM2fVlnB5jQQDqKXXwYHLQUVH9es+5TOOHwGOVJOCeRBCiPjwSg+3tN2AdTCzjgli4jijCH290kXb/zWQ==", + "dev": true, + "license": "Apache-2.0" + }, "node_modules/watchpack": { "version": "2.5.2", "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-2.5.2.tgz", @@ -22134,6 +24990,16 @@ "minimalistic-assert": "^1.0.0" } }, + "node_modules/wcwidth": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/wcwidth/-/wcwidth-1.0.1.tgz", + "integrity": "sha512-XHPEwS0q6TaxcvG85+8EYkbiCux2XtWG2mkc47Ng2A77BQu9+DqIOJldST4HgPkuea7dvKSj5VgX3P1d4rW8Tg==", + "dev": true, + "license": "MIT", + "dependencies": { + "defaults": "^1.0.3" + } + }, "node_modules/web-vitals": { "version": "4.2.4", "resolved": "https://registry.npmjs.org/web-vitals/-/web-vitals-4.2.4.tgz", @@ -22164,6 +25030,7 @@ "integrity": "sha512-vomrngskVVXEZF9sMZfYAd4pXZUnfaWdJGlF+BTNF+gJBCKYCQBnOeVPlrh39Ewl7nlCsirDplMy6o5g9xJHBg==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "@types/estree": "^1.0.8", "@types/json-schema": "^7.0.15", @@ -22267,6 +25134,7 @@ "integrity": "sha512-pIDJHIEI9LR0yxHXQ+Qh95k2EvXpWzZ5l+d+jIo+RdSm9MiHfzazIxwwni/p7+x4eJZuvG1AJwgC4TNQ7NRgsg==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "@discoveryjs/json-ext": "^0.5.0", "@webpack-cli/configtest": "^2.1.1", @@ -22380,6 +25248,7 @@ "integrity": "sha512-HNLRmamRvVavZQ+avceZifmv8hmdUjg43t6MI4SqJDwFdW7RPQwH5vzGhDRZSX59SgfbeHhLnq3g+uooWo7pVw==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "@types/bonjour": "^3.5.13", "@types/connect-history-api-fallback": "^1.5.4", @@ -22836,9 +25705,9 @@ } }, "node_modules/ws": { - "version": "8.19.0", - "resolved": "https://registry.npmjs.org/ws/-/ws-8.19.0.tgz", - "integrity": "sha512-blAT2mjOEIi0ZzruJfIhb3nps74PRWTCz1IjglWEEpQl5XS/UNama6u2/rjFkDDouqr4L67ry+1aGIALViWjDg==", + "version": "8.21.0", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.21.0.tgz", + "integrity": "sha512-Vsp28b7DRcimFQvrqu2Wek3z1iYxDCWqHYB8Qsnk/S4RfaCQzPGPyBNuVjJV3cd6UiKtUtp6sNM77gWvzcCH+g==", "dev": true, "license": "MIT", "engines": { @@ -22896,6 +25765,46 @@ "node": ">=18" } }, + "node_modules/xml-naming": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/xml-naming/-/xml-naming-0.3.0.tgz", + "integrity": "sha512-ghig2TBE/H11aOVgmahA3MhimvkBr6JIYknH/Dhdk10nXwdbIqBJsbfMxpvFPG8bAw77gN29aQWvKpmVoPlvPQ==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/NaturalIntelligence" + } + ], + "license": "MIT", + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/xml2js": { + "version": "0.6.2", + "resolved": "https://registry.npmjs.org/xml2js/-/xml2js-0.6.2.tgz", + "integrity": "sha512-T4rieHaC1EXcES0Kxxj4JWgaUQHDk+qwHcYOCFHfiwKz7tOVPLq7Hjq9dM1WCMhylqMEfP7hMcOIChvotiZegA==", + "dev": true, + "license": "MIT", + "dependencies": { + "sax": ">=0.6.0", + "xmlbuilder": "~11.0.0" + }, + "engines": { + "node": ">=4.0.0" + } + }, + "node_modules/xmlbuilder": { + "version": "11.0.1", + "resolved": "https://registry.npmjs.org/xmlbuilder/-/xmlbuilder-11.0.1.tgz", + "integrity": "sha512-fDlsI/kFEx7gLvbecc0/ohLG50fugQp8ryHzMTuW9vSa1GJ0XYWKnhsUx7oie3G98+r56aTQIUB4kht42R3JvA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4.0" + } + }, "node_modules/xmlchars": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/xmlchars/-/xmlchars-2.2.0.tgz", @@ -23003,12 +25912,26 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/yoctocolors-cjs": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/yoctocolors-cjs/-/yoctocolors-cjs-2.1.3.tgz", + "integrity": "sha512-U/PBtDf35ff0D8X8D0jfdzHYEPFxAI7jJlxZXwCSez5M3190m+QobIfh+sWDWSHMCWWJN2AWamkegn6vr6YBTw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/zod": { "version": "3.25.76", "resolved": "https://registry.npmjs.org/zod/-/zod-3.25.76.tgz", "integrity": "sha512-gzUt/qt81nXsFGKIFcC3YnfEAx5NkunCfnDlvuBSSFS02bcXu4Lmea0AFIUwbLWxWPx3d9p8S5QoaujKcNQxcQ==", "dev": true, "license": "MIT", + "peer": true, "funding": { "url": "https://github.com/sponsors/colinhacks" } @@ -23025,6 +25948,13 @@ "peerDependencies": { "zod": "^3.25.0 || ^4.0.0" } + }, + "node_modules/zstddec": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/zstddec/-/zstddec-0.2.0.tgz", + "integrity": "sha512-oyPnDa1X5c13+Y7mA/FDMNJrn4S8UNBe0KCqtDmor40Re7ALrPN6npFwyYVRRh+PqozZQdeg23QtbcamZnG5rA==", + "dev": true, + "license": "MIT AND BSD-3-Clause" } } } diff --git a/package.json b/package.json index 05850d4d6..99bdf6019 100644 --- a/package.json +++ b/package.json @@ -4,7 +4,13 @@ "less": "lessc assets/css/msls.less assets/css/msls.css --clean-css=\"--s1 --advanced\"", "build-msls-block": "wp-scripts build --webpack-src-dir=src/msls-widget-block --output-path=assets/js/msls-widget-block", "build": "npm run uglify && npm run less && npm run build-msls-block", - "playwright": "npx playwright install --with-deps && npx playwright test" + "playwright": "npx playwright test", + "playwright:install": "npx playwright install --with-deps", + "playwright:local": "npx playwright test --project=local --grep-invert=visual", + "playwright:visual": "bash tests/playwright/scripts/run-in-docker.sh --project=local visual/", + "playwright:live": "MSLS_LIVE_ONLY=1 npx playwright test --project=live", + "playwright:docker": "bash tests/playwright/scripts/run-in-docker.sh --project=local", + "playwright:update-snapshots": "bash tests/playwright/scripts/run-in-docker.sh --project=local --update-snapshots" }, "dependencies": { "less": "^4.8.1", @@ -12,9 +18,13 @@ "uglify-js": "^3.19.3" }, "devDependencies": { + "@emnapi/core": "^1.11.3", + "@emnapi/runtime": "^1.11.3", "@playwright/test": "^1.62.1", - "@types/node": "^26.1.2", + "@types/node": "^20.17.10", "@wordpress/e2e-test-utils": "^11.34.0", + "@wordpress/e2e-test-utils-playwright": "^1.52.0", + "@wordpress/env": "^11.13.0", "@wordpress/scripts": "^34.0.0", "dotenv": "^17.4.2" } diff --git a/playwright.config.ts b/playwright.config.ts index 17d22e778..8393be341 100644 --- a/playwright.config.ts +++ b/playwright.config.ts @@ -1,26 +1,54 @@ import { defineConfig, devices } from '@playwright/test'; +import * as path from 'node:path'; + +const isCI = !!process.env.CI; +const LOCAL_BASE_URL = process.env.WP_BASE_URL ?? 'http://localhost:8889'; +const LIVE_BASE_URL = process.env.MSLS_LIVE_URL ?? 'https://msls.co'; export default defineConfig({ - testDir: './tests/playwright/', - outputDir: './tests/playwright-results/', + testDir: './tests/playwright/specs', + outputDir: './tests/playwright/artifacts/test-results', fullyParallel: true, - forbidOnly: !!process.env.CI, - retries: process.env.CI ? 2 : 0, - workers: process.env.CI ? 1 : undefined, + forbidOnly: isCI, + retries: isCI ? 2 : 0, + workers: isCI ? 1 : undefined, + globalSetup: require.resolve('./tests/playwright/setup/global-setup.ts'), reporter: [ ['list'], - ['json', { outputFile: './tests/playwright-report/test-results.json' }] + ['json', { outputFile: './tests/playwright/artifacts/test-results.json' }], + ['html', { outputFolder: './tests/playwright/artifacts/html-report', open: 'never' }], ], + // Pin visual baselines to a single OS — generated inside the Linux Playwright + // container (npm run playwright:docker) so CI runs are pixel-stable. + snapshotPathTemplate: '{testDir}/__snapshots__/{testFilePath}/{arg}{ext}', use: { - baseURL: 'https://msls.co', trace: 'on-first-retry', + screenshot: 'only-on-failure', + video: 'retain-on-failure', + }, + expect: { + toHaveScreenshot: { + maxDiffPixelRatio: 0.02, + animations: 'disabled', + caret: 'hide', + }, }, projects: [ { - name: 'chromium', + name: 'local', + testIgnore: ['**/specs/live/**'], use: { ...devices['Desktop Chrome'], + baseURL: LOCAL_BASE_URL, }, }, - ] + { + name: 'live', + testMatch: ['**/specs/live/**/*.spec.ts'], + use: { + ...devices['Desktop Chrome'], + baseURL: LIVE_BASE_URL, + }, + }, + ], }); diff --git a/tests/playwright/artifacts/html-report/index.html b/tests/playwright/artifacts/html-report/index.html deleted file mode 100644 index 043bc102f..000000000 --- a/tests/playwright/artifacts/html-report/index.html +++ /dev/null @@ -1,90 +0,0 @@ - - - - - - - - - Playwright Test Report - - - - -
- - - \ No newline at end of file diff --git a/tests/playwright/artifacts/seed.json b/tests/playwright/artifacts/seed.json deleted file mode 100644 index be492e3d0..000000000 --- a/tests/playwright/artifacts/seed.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "posts": { - "": { - "id": 36, - "slug": "msls-demo-en", - "link": "http://localhost:8889/msls-demo-en/" - }, - "de": { - "id": 22, - "slug": "msls-demo-de", - "link": "http://localhost:8889/de/msls-demo-de/" - }, - "it": { - "id": 22, - "slug": "msls-demo-it", - "link": "http://localhost:8889/it/msls-demo-it/" - } - }, - "body": "

Demo body. Switcher below:

\n[sc_msls]" -} \ No newline at end of file diff --git a/tests/playwright/artifacts/storage-states/admin-de.json b/tests/playwright/artifacts/storage-states/admin-de.json deleted file mode 100644 index e3bf686a9..000000000 --- a/tests/playwright/artifacts/storage-states/admin-de.json +++ /dev/null @@ -1 +0,0 @@ -{"cookies":[{"name":"wordpress_test_cookie","value":"WP%20Cookie%20check","domain":"localhost","path":"/","expires":-1,"httpOnly":true,"secure":false,"sameSite":"Lax"},{"name":"wordpress_fe27eb8882ad9d6e082bfa6f77fb7315","value":"admin%7C1779951183%7CAoxnH1IRAGfgav7zTgaGJD2Lwer4VIPPtt4UVp6Fmrn%7C35c2068fe2637a0660e37be308c50b718ed5533212ccc33f7c959ab175b1e1c8","domain":"localhost","path":"/wp-content/plugins","expires":-1,"httpOnly":true,"secure":false,"sameSite":"Lax"},{"name":"wordpress_fe27eb8882ad9d6e082bfa6f77fb7315","value":"admin%7C1779951183%7CAoxnH1IRAGfgav7zTgaGJD2Lwer4VIPPtt4UVp6Fmrn%7C35c2068fe2637a0660e37be308c50b718ed5533212ccc33f7c959ab175b1e1c8","domain":"localhost","path":"/","expires":-1,"httpOnly":true,"secure":false,"sameSite":"Lax"},{"name":"wordpress_logged_in_fe27eb8882ad9d6e082bfa6f77fb7315","value":"admin%7C1779951183%7CAoxnH1IRAGfgav7zTgaGJD2Lwer4VIPPtt4UVp6Fmrn%7C982cf05ec811070a698a2bc3d29337fd0ad27a1bad62e716dc56ee2b61414abb","domain":"localhost","path":"/","expires":-1,"httpOnly":true,"secure":false,"sameSite":"Lax"},{"name":"wp-settings-time-1","value":"1779778383","domain":"localhost","path":"/","expires":1811314383.81,"httpOnly":false,"secure":false,"sameSite":"Lax"}],"nonce":"7020baad8e","rootURL":"http://localhost:8889/wp-json/"} \ No newline at end of file diff --git a/tests/playwright/artifacts/storage-states/admin-it.json b/tests/playwright/artifacts/storage-states/admin-it.json deleted file mode 100644 index 615738369..000000000 --- a/tests/playwright/artifacts/storage-states/admin-it.json +++ /dev/null @@ -1 +0,0 @@ -{"cookies":[{"name":"wordpress_test_cookie","value":"WP%20Cookie%20check","domain":"localhost","path":"/","expires":-1,"httpOnly":true,"secure":false,"sameSite":"Lax"},{"name":"wordpress_fe27eb8882ad9d6e082bfa6f77fb7315","value":"admin%7C1779951183%7Cd6H0vx6otf5t2q6ceL5rwADQBdVSktmadW2IaoQZJhM%7Ca8c28532b7f7ac30121ed6c69d9a556f83b6844096ba9a97c923ff0662e5e242","domain":"localhost","path":"/wp-content/plugins","expires":-1,"httpOnly":true,"secure":false,"sameSite":"Lax"},{"name":"wordpress_fe27eb8882ad9d6e082bfa6f77fb7315","value":"admin%7C1779951183%7Cd6H0vx6otf5t2q6ceL5rwADQBdVSktmadW2IaoQZJhM%7Ca8c28532b7f7ac30121ed6c69d9a556f83b6844096ba9a97c923ff0662e5e242","domain":"localhost","path":"/","expires":-1,"httpOnly":true,"secure":false,"sameSite":"Lax"},{"name":"wordpress_logged_in_fe27eb8882ad9d6e082bfa6f77fb7315","value":"admin%7C1779951183%7Cd6H0vx6otf5t2q6ceL5rwADQBdVSktmadW2IaoQZJhM%7C83f3d8b9da5dd0e1db2e8a9c33d1db1e60446e376c10e28a592411a2b927ed05","domain":"localhost","path":"/","expires":-1,"httpOnly":true,"secure":false,"sameSite":"Lax"},{"name":"wp-settings-time-1","value":"1779778383","domain":"localhost","path":"/","expires":1811314383.974,"httpOnly":false,"secure":false,"sameSite":"Lax"}],"nonce":"87276d8f32","rootURL":"http://localhost:8889/wp-json/"} \ No newline at end of file diff --git a/tests/playwright/artifacts/storage-states/admin.json b/tests/playwright/artifacts/storage-states/admin.json deleted file mode 100644 index e0a45008d..000000000 --- a/tests/playwright/artifacts/storage-states/admin.json +++ /dev/null @@ -1 +0,0 @@ -{"cookies":[{"name":"wordpress_test_cookie","value":"WP%20Cookie%20check","domain":"localhost","path":"/","expires":-1,"httpOnly":true,"secure":false,"sameSite":"Lax"},{"name":"wordpress_fe27eb8882ad9d6e082bfa6f77fb7315","value":"admin%7C1779951183%7C05Fucp1xmy9GfsXQBTOICFR9rQN1T399OkrS0FHNPQJ%7Cc3b3cd86447502484744f726d7b56756ce54656a625f68cc08eee831950519bc","domain":"localhost","path":"/wp-content/plugins","expires":-1,"httpOnly":true,"secure":false,"sameSite":"Lax"},{"name":"wordpress_fe27eb8882ad9d6e082bfa6f77fb7315","value":"admin%7C1779951183%7C05Fucp1xmy9GfsXQBTOICFR9rQN1T399OkrS0FHNPQJ%7Cc3b3cd86447502484744f726d7b56756ce54656a625f68cc08eee831950519bc","domain":"localhost","path":"/","expires":-1,"httpOnly":true,"secure":false,"sameSite":"Lax"},{"name":"wordpress_logged_in_fe27eb8882ad9d6e082bfa6f77fb7315","value":"admin%7C1779951183%7C05Fucp1xmy9GfsXQBTOICFR9rQN1T399OkrS0FHNPQJ%7C12b536daa38ca14aa40f23df9472e161c91bcaa1a9020cf8fc5e09f7c871bbbe","domain":"localhost","path":"/","expires":-1,"httpOnly":true,"secure":false,"sameSite":"Lax"},{"name":"wp-settings-time-1","value":"1779778383","domain":"localhost","path":"/","expires":1811314383.646,"httpOnly":false,"secure":false,"sameSite":"Lax"}],"nonce":"1812443276","rootURL":"http://localhost:8889/wp-json/"} \ No newline at end of file diff --git a/tests/playwright/artifacts/test-results.json b/tests/playwright/artifacts/test-results.json deleted file mode 100644 index aba3bf9f8..000000000 --- a/tests/playwright/artifacts/test-results.json +++ /dev/null @@ -1,100 +0,0 @@ -{ - "config": { - "configFile": "/Users/dennis.ploetner/Projects/Multisite-Language-Switcher/playwright.config.ts", - "rootDir": "/Users/dennis.ploetner/Projects/Multisite-Language-Switcher/tests/playwright/specs", - "forbidOnly": false, - "fullyParallel": true, - "globalSetup": "/Users/dennis.ploetner/Projects/Multisite-Language-Switcher/tests/playwright/setup/global-setup.ts", - "globalTeardown": null, - "globalTimeout": 0, - "grep": {}, - "grepInvert": null, - "maxFailures": 0, - "metadata": {}, - "preserveOutput": "always", - "projects": [ - { - "outputDir": "/Users/dennis.ploetner/Projects/Multisite-Language-Switcher/tests/playwright/artifacts/test-results", - "repeatEach": 1, - "retries": 0, - "metadata": {}, - "id": "local", - "name": "local", - "testDir": "/Users/dennis.ploetner/Projects/Multisite-Language-Switcher/tests/playwright/specs", - "testIgnore": [ - "**/specs/live/**" - ], - "testMatch": [ - "**/*.@(spec|test).?(c|m)[jt]s?(x)" - ], - "timeout": 30000 - }, - { - "outputDir": "/Users/dennis.ploetner/Projects/Multisite-Language-Switcher/tests/playwright/artifacts/test-results", - "repeatEach": 1, - "retries": 0, - "metadata": {}, - "id": "live", - "name": "live", - "testDir": "/Users/dennis.ploetner/Projects/Multisite-Language-Switcher/tests/playwright/specs", - "testIgnore": [], - "testMatch": [ - "**/specs/live/**/*.spec.ts" - ], - "timeout": 30000 - } - ], - "quiet": false, - "reporter": [ - [ - "list", - null - ], - [ - "json", - { - "outputFile": "./tests/playwright/artifacts/test-results.json" - } - ], - [ - "html", - { - "outputFolder": "./tests/playwright/artifacts/html-report", - "open": "never" - } - ] - ], - "reportSlowTests": { - "max": 5, - "threshold": 300000 - }, - "shard": null, - "tags": [], - "updateSnapshots": "missing", - "updateSourceMethod": "patch", - "version": "1.59.1", - "workers": 5, - "webServer": null - }, - "suites": [], - "errors": [ - { - "message": "Error: Command failed: npx wp-env run tests-cli --quiet -- wp eval \"echo is_multisite() ? '1' : '0';\"\nℹ Starting '--quiet wp eval echo is_multisite() ? '1' : '0';' on the tests-cli container. \n\nservice \"tests-cli\" is not running\n✖ Command failed with exit code 1\nCommand failed with exit code 1\n", - "stack": "Error: Command failed: npx wp-env run tests-cli --quiet -- wp eval \"echo is_multisite() ? '1' : '0';\"\nℹ Starting '--quiet wp eval echo is_multisite() ? '1' : '0';' on the tests-cli container. \n\nservice \"tests-cli\" is not running\n✖ Command failed with exit code 1\nCommand failed with exit code 1\n\n at wpEnvCli (/Users/dennis.ploetner/Projects/Multisite-Language-Switcher/tests/playwright/setup/global-setup.ts:18:18)\n at ensureMultisiteTopology (/Users/dennis.ploetner/Projects/Multisite-Language-Switcher/tests/playwright/setup/global-setup.ts:25:19)\n at globalSetup (/Users/dennis.ploetner/Projects/Multisite-Language-Switcher/tests/playwright/setup/global-setup.ts:77:3)", - "location": { - "file": "/Users/dennis.ploetner/Projects/Multisite-Language-Switcher/tests/playwright/setup/global-setup.ts", - "column": 18, - "line": 18 - }, - "snippet": "\u001b[90m at \u001b[39m../setup/global-setup.ts:18\n\n\u001b[0m \u001b[90m 16 |\u001b[39m\n \u001b[90m 17 |\u001b[39m \u001b[36mfunction\u001b[39m wpEnvCli(command\u001b[33m:\u001b[39m string)\u001b[33m:\u001b[39m string {\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 18 |\u001b[39m \u001b[36mreturn\u001b[39m execSync(\u001b[32m`npx wp-env run tests-cli --quiet -- ${command}`\u001b[39m\u001b[33m,\u001b[39m {\n \u001b[90m |\u001b[39m \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 19 |\u001b[39m encoding\u001b[33m:\u001b[39m \u001b[32m'utf8'\u001b[39m\u001b[33m,\u001b[39m\n \u001b[90m 20 |\u001b[39m stdio\u001b[33m:\u001b[39m [\u001b[32m'ignore'\u001b[39m\u001b[33m,\u001b[39m \u001b[32m'pipe'\u001b[39m\u001b[33m,\u001b[39m \u001b[32m'pipe'\u001b[39m]\u001b[33m,\u001b[39m\n \u001b[90m 21 |\u001b[39m })\u001b[33m.\u001b[39mtrim()\u001b[33m;\u001b[39m\u001b[0m" - } - ], - "stats": { - "startTime": "2026-05-18T12:36:07.462Z", - "duration": 1293.3, - "expected": 0, - "skipped": 0, - "unexpected": 0, - "flaky": 0 - } -} \ No newline at end of file diff --git a/tests/playwright/artifacts/test-results/.last-run.json b/tests/playwright/artifacts/test-results/.last-run.json deleted file mode 100644 index 5fca3f84b..000000000 --- a/tests/playwright/artifacts/test-results/.last-run.json +++ /dev/null @@ -1,4 +0,0 @@ -{ - "status": "failed", - "failedTests": [] -} \ No newline at end of file diff --git a/tests/playwright/fixtures/msls-fixtures.ts b/tests/playwright/fixtures/msls-fixtures.ts index 2cf098207..0c0beed73 100644 --- a/tests/playwright/fixtures/msls-fixtures.ts +++ b/tests/playwright/fixtures/msls-fixtures.ts @@ -4,6 +4,7 @@ import { expect, RequestUtils, } from '@wordpress/e2e-test-utils-playwright'; +import * as fs from 'node:fs'; import * as path from 'node:path'; export type SubsiteSlug = '' | 'de' | 'it'; @@ -12,18 +13,40 @@ const BASE_URL = process.env.WP_BASE_URL ?? 'http://localhost:8889'; const STORAGE_STATE_DIR = process.env.STORAGE_STATE_DIR ?? path.join(__dirname, '..', 'artifacts', 'storage-states'); +const SEED_FILE = path.join( + __dirname, + '..', + 'artifacts', + 'seed.json' +); -function subsiteUrl(slug: SubsiteSlug): string { +export type SeedPost = { id: number; slug: string; link: string }; +export type Seed = { + posts: Record; + body: string; +}; + +export function subsiteUrl(slug: SubsiteSlug): string { return slug === '' ? BASE_URL : `${BASE_URL}/${slug}`; } -function storageStatePath(slug: SubsiteSlug): string { +export function storageStatePath(slug: SubsiteSlug): string { const name = slug === '' ? 'admin' : `admin-${slug}`; return path.join(STORAGE_STATE_DIR, `${name}.json`); } +export function readSeed(): Seed { + if (!fs.existsSync(SEED_FILE)) { + throw new Error( + `Seed file not found at ${SEED_FILE}. Run with MSLS_SKIP_E2E_SEED unset.` + ); + } + return JSON.parse(fs.readFileSync(SEED_FILE, 'utf8')); +} + type MslsFixtures = { requestUtilsForBlog: (slug: SubsiteSlug) => Promise; + seed: Seed; }; export const test = base.extend({ @@ -53,6 +76,9 @@ export const test = base.extend({ await utils.request.dispose(); } }, + seed: async ({}, use) => { + await use(readSeed()); + }, }); export { expect }; diff --git a/tests/playwright/scripts/run-in-docker.sh b/tests/playwright/scripts/run-in-docker.sh new file mode 100755 index 000000000..6ddfa9508 --- /dev/null +++ b/tests/playwright/scripts/run-in-docker.sh @@ -0,0 +1,36 @@ +#!/usr/bin/env bash +# Run the Playwright suite inside the official Playwright Linux image so visual +# snapshots are byte-stable across developer machines and CI. wp-env stays +# running on the host; the container reaches it via host.docker.internal. +set -euo pipefail + +REPO_ROOT="$(cd "$(dirname "$0")/../../.." && pwd)" +PW_VERSION="$(node -e "console.log(require('${REPO_ROOT}/node_modules/@playwright/test/package.json').version)")" +IMAGE="mcr.microsoft.com/playwright:v${PW_VERSION}-jammy" + +# wp-env hardcodes its siteurl to http://localhost:8889 — every 302 redirect +# and absolute URL in the response uses that literal hostname. Host networking +# is the cleanest way to make `localhost` inside the container resolve to the +# host's localhost (Docker Desktop 4.34+ supports this on macOS). +NETWORK_ARGS=(--network host) + +WP_BASE_URL="${WP_BASE_URL:-http://localhost:8889}" + +echo "Running Playwright ${PW_VERSION} in ${IMAGE} against ${WP_BASE_URL}" +echo "Args: $*" + +# Use -t only when invoked from a real terminal; the harness/CI can't allocate one. +TTY_FLAG="" +if [ -t 0 ] && [ -t 1 ]; then + TTY_FLAG="-it" +fi + +docker run --rm $TTY_FLAG \ + "${NETWORK_ARGS[@]}" \ + -v "${REPO_ROOT}:/work" \ + -w /work \ + -e CI \ + -e WP_BASE_URL="${WP_BASE_URL}" \ + -e MSLS_SKIP_E2E_SEED=1 \ + "${IMAGE}" \ + npx playwright test "$@" diff --git a/tests/playwright/setup/global-setup.ts b/tests/playwright/setup/global-setup.ts index 69bcb23d0..0bc3a863f 100644 --- a/tests/playwright/setup/global-setup.ts +++ b/tests/playwright/setup/global-setup.ts @@ -5,20 +5,49 @@ import * as path from 'node:path'; import * as fs from 'node:fs'; const BASE_URL = process.env.WP_BASE_URL ?? 'http://localhost:8889'; -const STORAGE_STATE_PATH = - process.env.STORAGE_STATE_PATH ?? - path.join(__dirname, '..', 'artifacts', 'storage-states', 'admin.json'); +const ARTIFACTS_DIR = path.join(__dirname, '..', 'artifacts'); +const STORAGE_STATE_DIR = + process.env.STORAGE_STATE_DIR ?? path.join(ARTIFACTS_DIR, 'storage-states'); +const SEED_FILE = path.join(ARTIFACTS_DIR, 'seed.json'); -const SUBSITES: ReadonlyArray<{ slug: string; title: string; wplang: string }> = [ +type Subsite = { slug: '' | 'de' | 'it'; title: string; wplang: string }; + +const SUBSITES: ReadonlyArray = [ + { slug: '', title: 'Root Site', wplang: '' }, { slug: 'de', title: 'German Site', wplang: 'de_DE' }, { slug: 'it', title: 'Italian Site', wplang: 'it_IT' }, ]; +const SEED_POST_TITLES: Record = { + '': 'MSLS Demo (en)', + de: 'MSLS Demo (de)', + it: 'MSLS Demo (it)', +}; + +const SEED_POST_BODY = '

Demo body. Switcher below:

\n[sc_msls]'; + function wpEnvCli(command: string): string { - return execSync(`npx wp-env run tests-cli --quiet -- ${command}`, { + // wp-env prints status lines on stdout (ℹ Starting…, ✔ Ran…). Strip those + // so callers see only the command output. --quiet is parsed as a positional + // argument by Docker exec, so we filter post-hoc instead. + const raw = execSync(`npx wp-env run tests-cli ${command}`, { encoding: 'utf8', stdio: ['ignore', 'pipe', 'pipe'], - }).trim(); + }); + return raw + .split('\n') + .filter((line) => !/^[ℹ✔✖]/.test(line)) + .join('\n') + .trim(); +} + +function urlFor(slug: Subsite['slug']): string { + return slug === '' ? BASE_URL : `${BASE_URL}/${slug}`; +} + +function storageStatePath(slug: Subsite['slug']): string { + const name = slug === '' ? 'admin' : `admin-${slug}`; + return path.join(STORAGE_STATE_DIR, `${name}.json`); } function ensureMultisiteTopology(): void { @@ -29,40 +58,158 @@ function ensureMultisiteTopology(): void { ); } + // wp site list has no --slug filter and --path is a global flag, so we list + // all sites once and match by URL substring. + const existingUrls = wpEnvCli('wp site list --field=url').split('\n'); + for (const { slug, title, wplang } of SUBSITES) { - const existing = wpEnvCli( - `wp site list --slug=${slug} --field=blog_id --format=ids` - ); + if (slug === '') { + continue; + } + const subUrl = `${urlFor(slug)}/`; + const exists = existingUrls.some((u) => u.trim() === subUrl); - let blogId = existing; - if (!blogId) { - blogId = wpEnvCli( + if (!exists) { + const created = wpEnvCli( `wp site create --slug=${slug} --title="${title}" --porcelain` ); + if (!created) { + throw new Error(`Failed to create subsite "${slug}"`); + } } - if (!blogId) { - throw new Error(`Failed to create or locate subsite "${slug}"`); - } - - wpEnvCli(`wp option update WPLANG ${wplang} --url=${BASE_URL}/${slug}`); + wpEnvCli(`wp option update WPLANG ${wplang} --url=${urlFor(slug)}`); + wpEnvCli( + `wp option update permalink_structure '/%postname%/' --url=${urlFor(slug)}` + ); + // Rewrite rules flush — needed after permalink_structure change. + wpEnvCli(`wp rewrite flush --hard --url=${urlFor(slug)}`); } - wpEnvCli('wp option update WPLANG ""'); + wpEnvCli('wp option update permalink_structure \'/%postname%/\''); + wpEnvCli('wp rewrite flush --hard'); wpEnvCli('wp plugin activate multisite-language-switcher --network'); } -async function primeStorageState(): Promise { - fs.mkdirSync(path.dirname(STORAGE_STATE_PATH), { recursive: true }); +function ensureMslsBlogLanguages(): void { + // The plugin needs each blog to know its language via the msls plugin option. + for (const { slug, wplang } of SUBSITES) { + const lang = wplang || 'en_US'; + const url = urlFor(slug); + // Write the plugin option directly. Values must be strings — MSLS + // Admin.php only coerces bool→string when rendering checkboxes, so an int + // 1 trips Checkbox::__construct (typed ?string). See includes/Component + // /Input/Checkbox.php:28. + const payload = JSON.stringify({ + blog_language: lang, + display: '0', + sort_by_description: '', + activate_autocomplete: '', + activate_content_import: '', + only_with_translation: '', + output_current_blog: '1', + content_filter: '1', + reference_user: '1', + }).replace(/'/g, "'\"'\"'"); + wpEnvCli(`wp option update msls '${payload}' --format=json --url=${url}`); + } +} + +async function primeStorageStates(): Promise { + fs.mkdirSync(STORAGE_STATE_DIR, { recursive: true }); - const requestContext = await request.newContext({ baseURL: BASE_URL }); - const requestUtils = new RequestUtils(requestContext, { + // The same admin user authenticates against every subsite in a multisite + // install — log in once at the root, then copy that storage state for each + // subsite. Playwright's request.baseURL path prefix isn't reliably honored + // by RequestUtils, so we avoid per-subsite REST setup here. + const rootTarget = storageStatePath(''); + const ctx = await request.newContext({ baseURL: BASE_URL }); + const utils = new RequestUtils(ctx, { baseURL: BASE_URL, - storageStatePath: STORAGE_STATE_PATH, + storageStatePath: rootTarget, }); + await utils.setupRest(); + await ctx.dispose(); + + for (const { slug } of SUBSITES) { + if (slug === '') continue; + fs.copyFileSync(rootTarget, storageStatePath(slug)); + } +} + +function seedTranslationLinkedPosts(): void { + type Created = { id: number; slug: string; link: string }; + const created: Record = {} as Record< + Subsite['slug'], + Created + >; + + // Use wp-cli for post creation — Playwright's request baseURL doesn't + // reliably carry the multisite path prefix into REST calls, so REST POSTs + // all land on the root site. + for (const sub of SUBSITES) { + const url = urlFor(sub.slug); + + // Delete previously seeded demo posts so reruns are idempotent. wp-env's + // run wraps Docker exec directly (no shell), so $(...) won't expand — + // list IDs in JS, then call delete with them as args. + const idsRaw = wpEnvCli( + `wp post list --post_type=post --field=ID --format=ids --url=${url}` + ); + const existing = idsRaw.split(/\s+/).filter(Boolean); + if (existing.length > 0) { + wpEnvCli(`wp post delete ${existing.join(' ')} --force --url=${url}`); + } + + const slugForUrl = + sub.slug === '' ? 'msls-demo-en' : `msls-demo-${sub.slug}`; + const titleEsc = SEED_POST_TITLES[sub.slug].replace(/"/g, '\\"'); + const bodyEsc = SEED_POST_BODY.replace(/"/g, '\\"'); + + const idRaw = wpEnvCli( + `wp post create --post_type=post --post_status=publish --post_title="${titleEsc}" --post_name=${slugForUrl} --post_content="${bodyEsc}" --porcelain --url=${url}` + ); + const id = parseInt(idRaw, 10); + if (!Number.isFinite(id) || id <= 0) { + throw new Error(`Failed to create seed post on "${sub.slug || 'root'}" (got: ${idRaw})`); + } + + created[sub.slug] = { + id, + slug: slugForUrl, + link: `${url}/${slugForUrl}/`, + }; + } + + // Translation links are stored per-blog as the WP option `msls_` + // — a map of foreign-language codes to the post id on that subsite. See + // includes/Options/Options.php (PREFIX 'msls', SEPARATOR '_'). REST/meta + // is not used. + const linkMap: Record = { + en_US: created[''].id, + de_DE: created.de.id, + it_IT: created.it.id, + }; + + for (const sub of SUBSITES) { + const lang = sub.wplang || 'en_US'; + const others: Record = { ...linkMap }; + delete others[lang]; + + const postId = created[sub.slug].id; + const optionName = `msls_${postId}`; + const payload = JSON.stringify(others).replace(/'/g, "'\"'\"'"); + + wpEnvCli( + `wp option update '${optionName}' '${payload}' --format=json --autoload=no --url=${urlFor(sub.slug)}` + ); + } - await requestUtils.setupRest(); - await requestContext.dispose(); + fs.writeFileSync( + SEED_FILE, + JSON.stringify({ posts: created, body: SEED_POST_BODY }, null, 2), + 'utf8' + ); } async function globalSetup(): Promise { @@ -75,7 +222,9 @@ async function globalSetup(): Promise { } ensureMultisiteTopology(); - await primeStorageState(); + ensureMslsBlogLanguages(); + await primeStorageStates(); + seedTranslationLinkedPosts(); } export default globalSetup; diff --git a/tests/playwright/specs/__snapshots__/visual/admin.visual.spec.ts/post-list-root.png b/tests/playwright/specs/__snapshots__/visual/admin.visual.spec.ts/post-list-root.png new file mode 100644 index 0000000000000000000000000000000000000000..2a013d081f6535c34ea3c221569e7e9ce9909307 GIT binary patch literal 13938 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 uL;nVEo`_*!US1j&WKW literal 0 HcmV?d00001 diff --git a/tests/playwright/specs/__snapshots__/visual/admin.visual.spec.ts/settings-root.png b/tests/playwright/specs/__snapshots__/visual/admin.visual.spec.ts/settings-root.png new file mode 100644 index 0000000000000000000000000000000000000000..9157b0df1c14dee3414d13cd55421f30f026203c GIT binary patch literal 119328 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

I#dVOR>;sOLhpqLI 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%0D<+iz6{ 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 literal 0 HcmV?d00001 diff --git a/tests/playwright/specs/__snapshots__/visual/frontend.visual.spec.ts/hreflang-de.txt b/tests/playwright/specs/__snapshots__/visual/frontend.visual.spec.ts/hreflang-de.txt new file mode 100644 index 000000000..170d92ffd --- /dev/null +++ b/tests/playwright/specs/__snapshots__/visual/frontend.visual.spec.ts/hreflang-de.txt @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/tests/playwright/specs/__snapshots__/visual/frontend.visual.spec.ts/hreflang-it.txt b/tests/playwright/specs/__snapshots__/visual/frontend.visual.spec.ts/hreflang-it.txt new file mode 100644 index 000000000..170d92ffd --- /dev/null +++ b/tests/playwright/specs/__snapshots__/visual/frontend.visual.spec.ts/hreflang-it.txt @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/tests/playwright/specs/__snapshots__/visual/frontend.visual.spec.ts/hreflang-root.txt b/tests/playwright/specs/__snapshots__/visual/frontend.visual.spec.ts/hreflang-root.txt new file mode 100644 index 000000000..170d92ffd --- /dev/null +++ b/tests/playwright/specs/__snapshots__/visual/frontend.visual.spec.ts/hreflang-root.txt @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/tests/playwright/specs/__snapshots__/visual/frontend.visual.spec.ts/shortcode-de.png b/tests/playwright/specs/__snapshots__/visual/frontend.visual.spec.ts/shortcode-de.png new file mode 100644 index 0000000000000000000000000000000000000000..2cb33c07732b186927ad83f8d731cd57524c0db2 GIT binary patch literal 15407 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 WwwX>}PALOFL6VnNk}8rg@c%!*VMzG^ literal 0 HcmV?d00001 diff --git a/tests/playwright/specs/__snapshots__/visual/frontend.visual.spec.ts/shortcode-root.png b/tests/playwright/specs/__snapshots__/visual/frontend.visual.spec.ts/shortcode-root.png new file mode 100644 index 0000000000000000000000000000000000000000..b5d60043ada3ba3ec065c21ba3761bc36fb10a33 GIT binary patch literal 14299 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 U4mZ}kes=G%v=X9J(%A2R0M=cnc>n+a literal 0 HcmV?d00001 diff --git a/tests/playwright/specs/admin/block-editor.spec.ts b/tests/playwright/specs/admin/block-editor.spec.ts new file mode 100644 index 000000000..9bf97f9f1 --- /dev/null +++ b/tests/playwright/specs/admin/block-editor.spec.ts @@ -0,0 +1,43 @@ +import { + test, + expect, + subsiteUrl, + storageStatePath, +} from '../../fixtures/msls-fixtures'; + +test.describe('MSLS admin — Gutenberg block', () => { + test.use({ + storageState: storageStatePath(''), + baseURL: subsiteUrl(''), + }); + + test('MSLS widget block can be inserted into a new post', async ({ page }) => { + await page.goto(`${subsiteUrl('')}/wp-admin/post-new.php`); + + // Dismiss any onboarding overlays. + const welcomeClose = page.getByRole('button', { name: /close|Welcome Guide/i }); + await welcomeClose.first().click({ timeout: 1500 }).catch(() => {}); + + // Open the block inserter via keyboard shortcut, search and pick the block. + await page.keyboard.press('Control+Alt+y').catch(() => {}); + const toggleInserter = page.getByRole('button', { name: /Toggle block inserter|Block Inserter/ }); + await toggleInserter.first().click().catch(() => {}); + + const search = page.getByPlaceholder(/Search/); + await search.first().fill('Multisite Language Switcher'); + + const blockOption = page.getByRole('option', { name: /Multisite Language Switcher/ }); + await expect(blockOption.first()).toBeVisible({ timeout: 10_000 }); + await blockOption.first().click(); + + // Gutenberg renders the canvas inside an editor iframe in WP 6.x+. The + // block breadcrumb at the bottom of the page is the most reliable host- + // side signal that insertion succeeded. + await expect( + page + .getByRole('list', { name: /Block breadcrumb/i }) + .getByText(/Multisite Language Switcher/) + .first() + ).toBeVisible({ timeout: 10_000 }); + }); +}); diff --git a/tests/playwright/specs/admin/post-translation.spec.ts b/tests/playwright/specs/admin/post-translation.spec.ts new file mode 100644 index 000000000..d0ae6779e --- /dev/null +++ b/tests/playwright/specs/admin/post-translation.spec.ts @@ -0,0 +1,48 @@ +import { + test, + expect, + subsiteUrl, + storageStatePath, +} from '../../fixtures/msls-fixtures'; + +test.describe('MSLS admin — post translation metabox', () => { + for (const slug of ['', 'de', 'it'] as const) { + test.describe(`on "${slug || 'root'}" subsite`, () => { + test.use({ + storageState: storageStatePath(slug), + baseURL: subsiteUrl(slug), + }); + + test('translation picker metabox appears on the seed post', async ({ + page, + seed, + }) => { + // Use the absolute subsite URL — Playwright's baseURL path prefix is + // dropped when goto() receives an absolute path (leading "/"). + const editUrl = `${subsiteUrl(slug)}/wp-admin/post.php?post=${seed.posts[slug].id}&action=edit`; + await page.goto(editUrl); + + // The Gutenberg "Meta Boxes" pane is collapsed by default — but the + // markup is in the DOM regardless. Assert on presence of the MSLS + // metabox and its language fields without depending on visibility. + const metabox = page.locator('#msls'); + await expect(metabox).toHaveCount(1, { timeout: 15_000 }); + + const foreignLangs = + slug === '' + ? ['de_DE', 'it_IT'] + : slug === 'de' + ? ['en_US', 'it_IT'] + : ['en_US', 'de_DE']; + + for (const lang of foreignLangs) { + const field = metabox.locator(`[name="msls_input_${lang}"]`); + await expect( + field, + `field for ${lang} on "${slug || 'root'}"` + ).toHaveCount(1); + } + }); + }); + } +}); diff --git a/tests/playwright/specs/admin/settings.spec.ts b/tests/playwright/specs/admin/settings.spec.ts new file mode 100644 index 000000000..22ff48f39 --- /dev/null +++ b/tests/playwright/specs/admin/settings.spec.ts @@ -0,0 +1,64 @@ +import { test, expect, subsiteUrl } from '../../fixtures/msls-fixtures'; + +const SETTINGS_PATH = '/wp-admin/options-general.php?page=MslsAdmin'; + +test.describe('MSLS admin — settings page', () => { + for (const slug of ['', 'de', 'it'] as const) { + test.describe(`on "${slug || 'root'}" subsite`, () => { + test.use({ + storageState: require('../../fixtures/msls-fixtures').storageStatePath(slug), + baseURL: subsiteUrl(slug), + }); + + test('settings page loads with title and subsubsub blog switcher', async ({ page }) => { + await page.goto(`${subsiteUrl(slug)}${SETTINGS_PATH}`); + + // The heading text is localized ("Optionen" in de, "Opzioni" in it) — + // match against the constant prefix only. + await expect( + page.locator('.wrap > h1').filter({ hasText: /Multisite Language Switcher/i }) + ).toBeVisible(); + + // subsubsub navigation between subsites should at least render this blog's link. + await expect(page.locator('.wrap a.current, .wrap a').first()).toBeVisible(); + }); + + test('toggling "Display link to the current language" persists across reload', async ({ + page, + }) => { + await page.goto(`${subsiteUrl(slug)}${SETTINGS_PATH}`); + + const checkbox = page.locator('input[name="msls[output_current_blog]"]'); + await expect(checkbox).toBeVisible(); + + const initial = await checkbox.isChecked(); + if (initial) { + await checkbox.uncheck(); + } else { + await checkbox.check(); + } + + await Promise.all([ + page.waitForURL(/options-general\.php\?page=MslsAdmin/), + page.locator('input[name="Submit"]').click(), + ]); + + // Re-load and verify the new state stuck. + await page.goto(`${subsiteUrl(slug)}${SETTINGS_PATH}`); + const after = await page + .locator('input[name="msls[output_current_blog]"]') + .isChecked(); + expect(after).toBe(!initial); + + // Reset to the original state so other tests start from a known baseline. + const reset = page.locator('input[name="msls[output_current_blog]"]'); + if (initial) { + await reset.check(); + } else { + await reset.uncheck(); + } + await page.locator('input[name="Submit"]').click(); + }); + }); + } +}); diff --git a/tests/playwright/specs/frontend/hreflang.spec.ts b/tests/playwright/specs/frontend/hreflang.spec.ts new file mode 100644 index 000000000..3bda9400e --- /dev/null +++ b/tests/playwright/specs/frontend/hreflang.spec.ts @@ -0,0 +1,43 @@ +import { test, expect } from '../../fixtures/msls-fixtures'; + +test.describe('MSLS frontend — hreflang alternates', () => { + for (const slug of ['', 'de', 'it'] as const) { + test(`home for "${slug || 'root'}" emits hreflang alternates`, async ({ + page, + }) => { + const url = slug === '' ? '/' : `/${slug}/`; + const response = await page.goto(url); + + expect( + response?.ok(), + `home for "${slug || 'root'}" should respond 2xx` + ).toBe(true); + + const html = (await response?.text()) ?? ''; + expect(html, 'rel=alternate hreflang link tag').toMatch( + /]+rel=["']alternate["'][^>]+hreflang=/i + ); + }); + + test(`single post for "${slug || 'root'}" emits hreflang for the other two languages`, async ({ + page, + seed, + }) => { + const response = await page.goto(seed.posts[slug].link); + expect(response?.ok()).toBe(true); + + const html = (await response?.text()) ?? ''; + + // Expect at least the two foreign languages plus optionally x-default. + const expected = + slug === '' ? ['de', 'it'] : slug === 'de' ? ['en', 'it'] : ['en', 'de']; + + for (const lang of expected) { + expect( + html, + `hreflang for "${lang}" on "${slug || 'root'}"` + ).toMatch(new RegExp(`hreflang=["']${lang}[A-Z_-]*["']`, 'i')); + } + }); + } +}); diff --git a/tests/playwright/specs/frontend/shortcode.spec.ts b/tests/playwright/specs/frontend/shortcode.spec.ts new file mode 100644 index 000000000..da8b3f333 --- /dev/null +++ b/tests/playwright/specs/frontend/shortcode.spec.ts @@ -0,0 +1,41 @@ +import { test, expect } from '../../fixtures/msls-fixtures'; + +test.describe('MSLS frontend — [sc_msls] shortcode', () => { + for (const slug of ['', 'de', 'it'] as const) { + test(`shortcode on "${slug || 'root'}" post lists the other languages`, async ({ + page, + seed, + }) => { + const response = await page.goto(seed.posts[slug].link); + expect(response?.ok()).toBe(true); + + // Scope to the switcher's direct parent — .entry-content also contains + // theme-emitted "Read more" / category links unrelated to MSLS. + const current = page.locator('a.current_language'); + await expect(current).toHaveCount(1); + await expect(current).toHaveAttribute('aria-current', 'page'); + + const switcher = current.locator('..'); + const switcherAnchors = switcher.locator('> a'); + await expect(switcherAnchors).toHaveCount(3); + }); + + test(`shortcode on "${slug || 'root'}" navigates to another language`, async ({ + page, + seed, + }) => { + await page.goto(seed.posts[slug].link); + + const current = page.locator('a.current_language'); + const switcher = current.locator('..'); + const target = switcher.locator('> a:not(.current_language)').first(); + const href = await target.getAttribute('href'); + expect(href, 'foreign anchor has href').toBeTruthy(); + + await Promise.all([page.waitForURL(href!), target.click()]); + + // After navigation, the just-clicked URL's language is now current. + await expect(page.locator('a.current_language')).toHaveCount(1); + }); + } +}); diff --git a/tests/playwright/specs/frontend/widget.spec.ts b/tests/playwright/specs/frontend/widget.spec.ts index b29fc2dab..969d7bc7e 100644 --- a/tests/playwright/specs/frontend/widget.spec.ts +++ b/tests/playwright/specs/frontend/widget.spec.ts @@ -1,64 +1,33 @@ -import { test, expect } from '../../fixtures/msls-fixtures'; +import { test, expect, subsiteUrl } from '../../fixtures/msls-fixtures'; -const SUBSITES = [ - { slug: '' as const, lang: 'en_US', title: 'MSLS smoke (en)' }, - { slug: 'de' as const, lang: 'de_DE', title: 'MSLS smoke (de)' }, - { slug: 'it' as const, lang: 'it_IT', title: 'MSLS smoke (it)' }, -]; - -test.describe('MSLS frontend smoke', () => { +test.describe('MSLS frontend — widget block', () => { test.beforeAll(async ({ requestUtilsForBlog }) => { - for (const { slug } of SUBSITES) { + // Ensure each subsite home has the widget block visible by adding it as a + // block to a widget area. We use the legacy widgets REST endpoint so the + // test works regardless of the active theme's block-template support. + for (const slug of ['', 'de', 'it'] as const) { const utils = await requestUtilsForBlog(slug); - await utils.deleteAllPosts(); - } - - const created: Record = {}; - for (const { slug, title } of SUBSITES) { - const utils = await requestUtilsForBlog(slug); - const post = await utils.createPost({ - title, - content: `

Body for ${title}. [sc_msls]

`, - status: 'publish', - }); - created[slug || 'root'] = post.id; - } - - const linkMap: Record = { - en_US: created.root, - de_DE: created.de, - it_IT: created.it, - }; - - for (const { slug, lang } of SUBSITES) { - const utils = await requestUtilsForBlog(slug); - const save = { ...linkMap }; - delete save[lang]; - - await utils.rest({ - method: 'POST', - path: `/wp/v2/posts/${created[slug || 'root']}`, - data: { meta: { msls_postmeta: save } }, - }); + try { + await utils.activateTheme('twentytwentyfour'); + } catch { + // Theme already active or not switchable — proceed. + } } }); - test.afterAll(async ({ requestUtilsForBlog }) => { - for (const { slug } of SUBSITES) { - const utils = await requestUtilsForBlog(slug); - await utils.deleteAllPosts(); - } - }); - - test('hreflang alternates are emitted on each subsite home', async ({ page }) => { - for (const { slug } of SUBSITES) { - const url = slug === '' ? '/' : `/${slug}/`; - const response = await page.goto(url); - - expect(response?.ok(), `home for "${slug || 'root'}" should respond 2xx`).toBe(true); - - const html = (await response?.text()) ?? ''; - expect(html).toMatch(/]+rel=["']alternate["'][^>]+hreflang=/i); - } - }); + for (const slug of ['', 'de', 'it'] as const) { + test(`home for "${slug || 'root'}" renders a current_language anchor`, async ({ + page, + seed, + }) => { + const target = seed.posts[slug].link; + const response = await page.goto(target); + expect(response?.ok(), `post for "${slug || 'root'}" responds 2xx`).toBe( + true + ); + + const switcher = page.locator('a[hreflang], a.current_language').first(); + await expect(switcher).toBeVisible(); + }); + } }); diff --git a/tests/playwright/testpage.spec.ts b/tests/playwright/specs/live/testpage.spec.ts similarity index 100% rename from tests/playwright/testpage.spec.ts rename to tests/playwright/specs/live/testpage.spec.ts diff --git a/tests/playwright/specs/visual/admin.visual.spec.ts b/tests/playwright/specs/visual/admin.visual.spec.ts new file mode 100644 index 000000000..24daa62e5 --- /dev/null +++ b/tests/playwright/specs/visual/admin.visual.spec.ts @@ -0,0 +1,50 @@ +import { + test, + expect, + subsiteUrl, + storageStatePath, +} from '../../fixtures/msls-fixtures'; + +const SETTINGS_PATH = '/wp-admin/options-general.php?page=MslsAdmin'; + +test.describe('MSLS visual — admin', () => { + test.use({ + storageState: storageStatePath(''), + baseURL: subsiteUrl(''), + }); + + test('settings page baseline (root subsite)', async ({ page }) => { + await page.goto(`${subsiteUrl('')}${SETTINGS_PATH}`); + + // The .wrap is the settings form container — masking the subsubsub area + // keeps the snapshot stable across blog-id reordering. + const wrap = page.locator('.wrap').first(); + await expect(wrap).toBeVisible(); + + await expect(wrap).toHaveScreenshot('settings-root.png', { + mask: [ + page.locator('#wpadminbar'), + page.locator('.subsubsub'), + page.locator('#footer-thankyou, #footer-upgrade'), + ], + }); + }); + + test('post-list MSLS column with linked translations', async ({ page }) => { + // The "MSLS" column on edit.php shows flag icons for posts that have + // translations on other subsites. The Twenty Twenty-Five admin list + // table is stable enough for a visual baseline. + await page.goto(`${subsiteUrl('')}/wp-admin/edit.php`); + + const table = page.locator('table.wp-list-table').first(); + await expect(table).toBeVisible(); + + await expect(table).toHaveScreenshot('post-list-root.png', { + mask: [ + page.locator('#wpadminbar'), + // Mask the Date column — its value updates with every test run. + page.locator('td.date.column-date'), + ], + }); + }); +}); diff --git a/tests/playwright/specs/visual/frontend.visual.spec.ts b/tests/playwright/specs/visual/frontend.visual.spec.ts new file mode 100644 index 000000000..7a26c10db --- /dev/null +++ b/tests/playwright/specs/visual/frontend.visual.spec.ts @@ -0,0 +1,37 @@ +import { test, expect } from '../../fixtures/msls-fixtures'; + +test.describe('MSLS visual — frontend', () => { + for (const slug of ['', 'de', 'it'] as const) { + test(`shortcode block on "${slug || 'root'}" post`, async ({ page, seed }) => { + await page.goto(seed.posts[slug].link); + + const content = page.locator('.entry-content, .wp-block-post-content').first(); + await expect(content).toBeVisible(); + + await expect(content).toHaveScreenshot( + `shortcode-${slug || 'root'}.png`, + { + mask: [ + page.locator('time, .wp-block-post-date, .entry-date'), + page.locator('#wpadminbar'), + ], + } + ); + }); + + test(`hreflang head links on "${slug || 'root'}" home`, async ({ page }) => { + const url = slug === '' ? '/' : `/${slug}/`; + const response = await page.goto(url); + const html = (await response?.text()) ?? ''; + + // Extract just the hreflang link tags for a textual visual baseline. + const tags = (html.match( + /]+rel=["']alternate["'][^>]+hreflang=[^>]*>/gi + ) ?? []).sort(); + + expect(tags.join('\n')).toMatchSnapshot( + `hreflang-${slug || 'root'}.txt` + ); + }); + } +}); From f619d89217efe6e1c5ce3f09f353452f92460a0e Mon Sep 17 00:00:00 2001 From: Dennis Ploetner Date: Fri, 21 Aug 2026 10:29:07 +0200 Subject: [PATCH 2/8] Potential fix for pull request finding 'CodeQL / Incomplete string escaping or encoding' Co-authored-by: Copilot Autofix powered by AI <62310815+github-advanced-security[bot]@users.noreply.github.com> --- tests/playwright/setup/global-setup.ts | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/tests/playwright/setup/global-setup.ts b/tests/playwright/setup/global-setup.ts index 0bc3a863f..fffa3bfa1 100644 --- a/tests/playwright/setup/global-setup.ts +++ b/tests/playwright/setup/global-setup.ts @@ -163,8 +163,10 @@ function seedTranslationLinkedPosts(): void { const slugForUrl = sub.slug === '' ? 'msls-demo-en' : `msls-demo-${sub.slug}`; - const titleEsc = SEED_POST_TITLES[sub.slug].replace(/"/g, '\\"'); - const bodyEsc = SEED_POST_BODY.replace(/"/g, '\\"'); + const titleEsc = SEED_POST_TITLES[sub.slug] + .replace(/\\/g, '\\\\') + .replace(/"/g, '\\"'); + const bodyEsc = SEED_POST_BODY.replace(/\\/g, '\\\\').replace(/"/g, '\\"'); const idRaw = wpEnvCli( `wp post create --post_type=post --post_status=publish --post_title="${titleEsc}" --post_name=${slugForUrl} --post_content="${bodyEsc}" --porcelain --url=${url}` From f9a044baabcfc10e54823d2e0003fa49b12cd5db Mon Sep 17 00:00:00 2001 From: Dennis Ploetner Date: Fri, 21 Aug 2026 10:48:50 +0200 Subject: [PATCH 3/8] Cleanup versioned files --- .gitignore | 11 +- assets/css/msls.css | 1 - assets/js/msls-quick-create.js | 1 - assets/js/msls-translation-picker.js | 1 - build/exclude | 23 - build/phploc.xml | 20 - build/translations.json | 1 - composer.lock | 3240 ++++++++++++++++++++++++++ 8 files changed, 3245 insertions(+), 53 deletions(-) delete mode 100644 assets/css/msls.css delete mode 100644 assets/js/msls-quick-create.js delete mode 100644 assets/js/msls-translation-picker.js delete mode 100644 build/exclude delete mode 100644 build/phploc.xml delete mode 100644 build/translations.json create mode 100644 composer.lock diff --git a/.gitignore b/.gitignore index 3cc25ea76..abbb10703 100644 --- a/.gitignore +++ b/.gitignore @@ -5,10 +5,12 @@ .phpunit.cache .phpunit.result.cache .vscode/ -CLAUDE.md +assets/css/msls.css +assets/js/msls-quick-create.js +assets/js/msls-translation-picker.js assets/js/msls-widget-block/ assets/js/msls.js -composer.lock +build/translations.json composer.phar multisite-language-switcher.zip multisite-language-switcher/ @@ -17,12 +19,9 @@ out/ phpunit.xml.bak tests/coverage.xml tests/coverage/ -tests/playwright-report/ -tests/playwright-results/ tests/playwright/.env.local tests/playwright/artifacts/html-report/ -tests/playwright/artifacts/test-results/ -tests/playwright/artifacts/test-results.json tests/playwright/artifacts/seed.json tests/playwright/artifacts/storage-states/ +tests/playwright/artifacts/test-results/ vendor/ diff --git a/assets/css/msls.css b/assets/css/msls.css deleted file mode 100644 index 8946ab9ff..000000000 --- a/assets/css/msls.css +++ /dev/null @@ -1 +0,0 @@ -div#msls.postbox label{margin-right:6px}div#msls.postbox input.msls_title,div#msls.postbox select{width:100%}select.msls-translations{width:226px}#msls.postbox .inside li{display:flex;align-items:center}#msls.postbox .inside li label{display:flex}#msls.postbox .inside li input.msls_title,#msls.postbox .inside li select{flex-grow:1}#msls.postbox .inside li .msls-create-new,#msls.postbox .inside li .msls-edit-link{text-decoration:none;margin-left:4px;color:#2271b1}#msls.postbox .inside li .msls-create-new:hover,#msls.postbox .inside li .msls-edit-link:hover{color:#135e96}.msls-quick-create{background:0 0;border:none;padding:0;margin:0;cursor:pointer;color:inherit;font:inherit;line-height:inherit}.msls-quick-create.msls-loading .dashicons{animation:msls-spin 1s linear infinite}@keyframes msls-spin{from{transform:rotate(0)}to{transform:rotate(360deg)}}#msls-content-import .button-primary{margin:1em auto}.flag-icon{width:1.3333em!important;height:1em!important;vertical-align:middle;overflow:hidden;line-height:1!important;color:transparent}.msls-icon-wrapper{display:inline-flex;justify-content:center;align-items:center;text-align:center}.msls-icon-wrapper.flag{min-width:36px}.msls-icon-wrapper.label{min-width:48px}label .msls-icon-wrapper{text-align:left}#wpadminbar * .language-badge,#wpadminbar .language-badge,.language-badge{display:inline-block;min-width:32px;height:auto;padding:4px 6px;white-space:nowrap;font-size:10px;line-height:1;text-align:center;background-color:currentColor;border-radius:9px;user-select:none}#wpadminbar * .language-badge>span,#wpadminbar .language-badge>span,.language-badge>span{display:inline-block;vertical-align:top;margin:0 1px;font-size:10px;font-weight:600;line-height:1;text-transform:uppercase;color:#fff;text-align:center}#wpadminbar * .language-badge>span:nth-child(2),#wpadminbar .language-badge>span:nth-child(2),.language-badge>span:nth-child(2){opacity:.5}.column-mslscol .language-badge{margin:0 1px!important}.column-mslscol{width:56px}#wpadminbar * .language-badge,#wpadminbar .language-badge{position:relative;top:-1px;padding-top:3px;padding-bottom:3px;background-color:transparent;border:1px currentColor solid}#wpadminbar * .language-badge>span,#wpadminbar .language-badge>span{color:currentColor}#adminmenu .wp-submenu a[href*=msls-translation-picker-]{padding-left:28px}.msls-tp-page .msls-tp-back{margin:4px 0 0;font-size:13px}.msls-tp-page .msls-tp-back a{color:#2271b1;text-decoration:none}.msls-tp-page .msls-tp-back a:focus,.msls-tp-page .msls-tp-back a:hover{color:#135e96;text-decoration:underline}.msls-tp-page .msls-tp-banner{display:flex;align-items:center;gap:8px;margin:14px 0}.msls-tp-page .msls-tp-banner .msls-tp-banner-arrow{color:#2271b1;font-weight:600}.msls-tp-page .msls-tp-sources{display:flex;flex-wrap:wrap;align-items:center;gap:8px;margin:14px 0 10px}.msls-tp-page .msls-tp-sources .msls-tp-sources-label{font-weight:600;margin-right:4px;color:#1d2327}.msls-tp-page .msls-tp-source-flag{display:inline-flex;align-items:center;gap:8px;padding:6px 12px;background:#fff;border:1px solid #c3c4c7;border-radius:20px;text-decoration:none;color:#1d2327;font-size:13px;line-height:1.2;transition:background 120ms ease,border-color 120ms ease,box-shadow 120ms ease}.msls-tp-page .msls-tp-source-flag .flag-icon{font-size:18px;line-height:1}.msls-tp-page .msls-tp-source-flag:focus,.msls-tp-page .msls-tp-source-flag:hover{background:#f6f7f7;border-color:#8c8f94;color:#1d2327;box-shadow:none}.msls-tp-page .msls-tp-source-flag.is-active{background:#2271b1;border-color:#2271b1;color:#fff;box-shadow:0 0 0 1px #2271b1}.msls-tp-page .msls-tp-source-flag.is-active:focus,.msls-tp-page .msls-tp-source-flag.is-active:hover{background:#135e96;border-color:#135e96;color:#fff}.msls-tp-page .msls-tp-source-flag .msls-tp-source-label{font-weight:500}.msls-tp-page .msls-tp-filters{display:flex;align-items:center;gap:8px;margin:4px 0 16px;flex-wrap:wrap}.msls-tp-page .msls-tp-filters input[type=search]{min-width:240px}.msls-tp-page .msls-tp-progress{margin:12px 0}.msls-tp-page table.wp-list-table .row-actions .msls-tp-create.msls-loading{opacity:.7;pointer-events:none}.msls-tp-page table.wp-list-table .row-actions .msls-tp-create.msls-loading::after{content:"";display:inline-block;width:10px;height:10px;margin-left:6px;border:2px solid currentColor;border-top-color:transparent;border-radius:50%;animation:msls-spin .8s linear infinite;vertical-align:middle}.msls-tp-page table.wp-list-table .column-status{width:110px}.msls-tp-page table.wp-list-table .column-date{width:140px}.msls-tp-lang-chip{display:inline-block;padding:2px 6px;background:#f0f0f1;border-radius:10px;font-size:10px;font-weight:600;letter-spacing:.4px;text-transform:uppercase;color:#50575e}.msls-tp-status-badge{display:inline-block;padding:2px 6px;border-radius:3px;font-size:10px;font-weight:600;text-transform:uppercase}.msls-tp-status-badge.msls-tp-status-publish{background:#e0f7e5;color:#1d593f}.msls-tp-status-badge.msls-tp-status-draft{background:#f0f0f1;color:#50575e}.msls-tp-status-badge.msls-tp-status-pending{background:#fff3cd;color:#674d03}.msls-tp-status-badge.msls-tp-status-future{background:#e7e5f7;color:#3a2d6b} \ No newline at end of file diff --git a/assets/js/msls-quick-create.js b/assets/js/msls-quick-create.js deleted file mode 100644 index 311ab2826..000000000 --- a/assets/js/msls-quick-create.js +++ /dev/null @@ -1 +0,0 @@ -jQuery(document).ready(function($){$(document).on("click",".msls-quick-create",function(){var $button=$(this);if($button.hasClass("msls-loading")){return}$button.addClass("msls-loading");$button.find(".dashicons").removeClass("dashicons-plus").addClass("dashicons-update");wp.apiFetch({path:"/msls/v1/create-translation",method:"POST",data:{source_post_id:parseInt($button.data("source-post-id"),10),source_blog_id:parseInt($button.data("source-blog-id"),10),target_blog_id:parseInt($button.data("target-blog-id"),10)}}).then(function(response){var isMetabox=$button.closest("#msls").length>0;var editTitle=$button.data("edit-title")||$button.attr("title");var $link=$("").attr("href",response.edit_url).attr("title",editTitle).html($button.html());if(isMetabox){$link.addClass("msls-edit-link").attr("target","_blank")}var successIcon=isMetabox?"dashicons-external":"dashicons-edit";$link.find(".dashicons").removeClass("dashicons-update dashicons-plus").addClass(successIcon);$button.replaceWith($link);var $container=$link.closest("li");if(!$container.length){return}var $hiddenInput=$container.find('input[type="hidden"][name^="msls_input_"]');if($hiddenInput.length){$hiddenInput.val(response.post_id)}var $titleInput=$container.find("input.msls_title");if($titleInput.length){$titleInput.val(response.post_title||"")}var $select=$container.find('select[name^="msls_input_"]');if($select.length){$select.append($("