diff --git a/.github/workflows/docs.yml b/.github/workflows/docs.yml deleted file mode 100644 index c5f8f48c..00000000 --- a/.github/workflows/docs.yml +++ /dev/null @@ -1,31 +0,0 @@ -name: Generate documentation - -on: - create: - tags: - - v* - -jobs: - doc: - runs-on: ubuntu-latest - steps: - - name: Checkout - uses: actions/checkout@v2 - with: - persist-credentials: false - ref: gh-pages - env: - GIT_TRACE: 1 - GIT_CURL_VERBOSE: 1 - - - name: Build documentation - run: | - PKG_VERSION=$(curl -s https://api.github.com/repos/preactjs/preact-devtools/releases/latest | jq -r '.tag_name') - echo $PKG_VERSION - sed -i -- "s/Version: v[0-9]\+.[0-9]\+.[0-9]\+/Version: $PKG_VERSION/g" index.html - - - name: Upload to gh-pages - uses: peaceiris/actions-gh-pages@v3 - with: - github_token: ${{ secrets.GITHUB_TOKEN }} - publish_dir: . diff --git a/.github/workflows/nodejs.yml b/.github/workflows/nodejs.yml index 67508738..1a52bff2 100644 --- a/.github/workflows/nodejs.yml +++ b/.github/workflows/nodejs.yml @@ -26,7 +26,7 @@ jobs: - name: Lint run: npm run lint - name: Unit tests - run: npm run test + run: npm run test && npm run test:lynx - name: Run e2e tests run: npm run build:chrome && npm run test:e2e --retries=5 env: diff --git a/.github/workflows/publish.yml b/.github/workflows/publish.yml new file mode 100644 index 00000000..2e233ff8 --- /dev/null +++ b/.github/workflows/publish.yml @@ -0,0 +1,80 @@ +name: Publish to npm and GitHub Release + +on: + workflow_dispatch: + push: + branches: + - main + +jobs: + publish: + runs-on: ubuntu-latest + permissions: + contents: write + id-token: write # Required for OIDC + steps: + - uses: actions/checkout@v4 + - uses: actions/setup-node@v4 + with: + node-version: 22 + - name: Install Deps + run: npm i + + - name: Get package version + id: package-version + run: | + VERSION=$(node -p "require('./package.json').version") + echo "version=$VERSION" >> $GITHUB_OUTPUT + + - name: Get commit hash + id: commit-hash + run: | + SHORT_SHA=$(git rev-parse --short=7 HEAD) + echo "sha=$SHORT_SHA" >> $GITHUB_OUTPUT + + - name: Build package version + id: build-version + run: | + # Fixed-width UTC timestamp keeps semver prerelease ordering monotonic across + # commits, so tooling like Renovate will always see later releases as newer + # (git short-shas alone sort lexicographically and are not monotonic). + TIMESTAMP=$(date -u +%Y%m%d%H%M%S) + FULL_VERSION="${{ steps.package-version.outputs.version }}-${TIMESTAMP}-${{ steps.commit-hash.outputs.sha }}" + echo "full_version=$FULL_VERSION" >> $GITHUB_OUTPUT + echo "TAG_NAME=$FULL_VERSION" >> $GITHUB_ENV + + - name: Update package.json version + run: | + npm version ${{ steps.build-version.outputs.full_version }} --no-git-tag-version + + # https://docs.npmjs.com/trusted-publishers#step-2-configure-your-cicd-workflow + # Ensure npm 11.5.1 or later is installed + - name: Update npm + run: npm install -g npm@latest + + - name: Publish to npm + run: npm publish --tag latest + + - name: Generate release notes + id: release-notes + run: | + RELEASE_NOTES=$(git log -1 --pretty=%B) + echo "notes<> $GITHUB_OUTPUT + echo "## Release ${{ env.TAG_NAME }}" >> $GITHUB_OUTPUT + echo "**Commit:** ${{ steps.commit-hash.outputs.sha }}" >> $GITHUB_OUTPUT + echo "**Published:** $(date -u)" >> $GITHUB_OUTPUT + echo "### Commit Message" >> $GITHUB_OUTPUT + echo "$RELEASE_NOTES" >> $GITHUB_OUTPUT + echo "EOF" >> $GITHUB_OUTPUT + shell: bash + + - name: Create GitHub Release + uses: actions/create-release@v1 + with: + tag_name: ${{ env.TAG_NAME }} + release_name: Release ${{ env.TAG_NAME }} + body: ${{ steps.release-notes.outputs.notes }} + draft: false + prerelease: true + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} diff --git a/.gitignore b/.gitignore index a58dde2a..bf060946 100644 --- a/.gitignore +++ b/.gitignore @@ -69,7 +69,7 @@ typings/ # parcel-bundler cache (https://parceljs.org/) .cache -/dist/ +dist .rts* *.pdf test-e2e/screenshots @@ -83,3 +83,4 @@ profiles/chrome/* .DS_Store test-results/ +lib diff --git a/.npmrc b/.npmrc new file mode 100644 index 00000000..214c29d1 --- /dev/null +++ b/.npmrc @@ -0,0 +1 @@ +registry=https://registry.npmjs.org/ diff --git a/.nvmrc b/.nvmrc new file mode 100644 index 00000000..2bd5a0a9 --- /dev/null +++ b/.nvmrc @@ -0,0 +1 @@ +22 diff --git a/.oxlintrc.json b/.oxlintrc.json index dc01bb8a..175bca7b 100644 --- a/.oxlintrc.json +++ b/.oxlintrc.json @@ -16,8 +16,15 @@ "it": "readonly" }, "rules": { - "no-console": "error", - "no-unused-vars": ["error", { "caughtErrors": "none" }], + "no-console": "warn", + "no-unused-vars": [ + "error", + { + "caughtErrors": "none", + "argsIgnorePattern": "^_", + "varsIgnorePattern": "^_" + } + ], "no-unused-expressions": "off", "react/exhaustive-deps": "off", "oxc/only-used-in-recursion": "off", diff --git a/CHANGELOG.md b/CHANGELOG.md index 7167aa40..41a3fd08 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,11 @@ # Changelog +## 5.0.1 + +### Features (Lynx) + +- Add support for ReactLynx and Lynx Devtool + ## 4.5.0 ### Features diff --git a/LICENSE b/LICENSE index 4af4826f..0ed49ff5 100644 --- a/LICENSE +++ b/LICENSE @@ -1,6 +1,7 @@ The MIT License (MIT) Copyright (c) 2019-present Marvin Hagemeister +Copyright (c) 2025 Lynx Authors. Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal diff --git a/README.md b/README.md index 85a13fd3..8d1dce71 100644 --- a/README.md +++ b/README.md @@ -1,64 +1,28 @@ -# Preact Devtools +# Preact Devtools for ReactLynx -Browser extension that allows you to inspect a Preact component hierarchy, -including props and state. - -**Requires Preact >=10.1.0** - -![Screenshot of Preact devtools](media/preact-chrome-light.png) +The [Lynx Devtool](https://github.com/lynx-family/lynx-devtool) Panel that allows you to inspect a ReactLynx component hierarchy, including props and state. ## Usage -Firstly, we need to import `preact/debug` somewhere to initialize the connection -to the extension. Make sure that this import is **the first** import in your +We need to import `@lynx-js/preact-devtools` somewhere to initialize the connection +to Preact Devtools Panel. Make sure that this import is **the first** import in your whole app. -```javascript -// Must be the first import -import "preact/debug"; - -// Or if you just want the devtools bridge (~240B) without other -// debug code (useful for production sites) -import "preact/devtools"; +```bash +import '@lynx-js/preact-devtools' ``` -Then, download the Preact Devtools extension for your browser: - -- [Firefox](https://addons.mozilla.org/en-US/firefox/addon/preact-devtools/) -- [Chrome](https://chrome.google.com/webstore/detail/preact-developer-tools/ilcajpmogmhpliinlbcdebhbcanbghmd) -- [Edge](https://microsoftedge.microsoft.com/addons/detail/hdkhobcafnfejjieimdkmjaiihkjpmhk) +See the documentation of [Preact Devtools Panel in Lynx Devtool](https://lynxjs.org/guide/devtool/panels/preact-devtools-panel.html#preact-devtools-panel) for more information. ## Contributing -- Use `npm run dev` to start a demo page -- Use `npm run watch` to rebuild all extensions on any code changes -- Use `npm run build:firefox` or `npm run build:chrome` to create a release build - -Chrome: - -1. Go to extensions page -2. Enable developer mode -3. Click "Load unpacked" -4. Select `dist/chrome/` folder - -Firefox: - -1. Go to addons page -2. Click the settings icon -3. Select "Debug addons" -4. Click "Load temporary addon" -5. Select the `manifest.json` in `dist/firefox/` - -## For extension reviewers - -These commands will build the extension and load it into a browser with a temporary profile. The browser will automatically navigate to [preactjs.com](https://preactjs.com). There you can test the extension. +- [`ldt-plugin`](./ldt-plugin/) contains the source code of Preact Devtools Panel in Lynx Devtool. Run it by `npm run dev:ldt-plugin` when developing, and `npm run build:ldt-plugin` to build it. +- [`src`](./src/) contains the source code for ReactLynx App to setup Preact Devtools related hooks. You can build it just by `npm run build:lib` in the root folder of this repository. -Chrome: +The ReactLynx App will communicate with the Preact Devtools Panel in Lynx Devtool using CDP messages. -1. Execute `npm run run:chrome` -2. Click on `Preact` tab in devtools +## Credits -Firefox: +Thanks to: -1. Exectue `npm run run:firefox` -2. Open devtools + click on `Preact` tab in devtools +- [Preact Devtools](https://github.com/preactjs/preact-devtools) for the original Devtools implementation for Preact. diff --git a/README.preact.md b/README.preact.md new file mode 100644 index 00000000..85a13fd3 --- /dev/null +++ b/README.preact.md @@ -0,0 +1,64 @@ +# Preact Devtools + +Browser extension that allows you to inspect a Preact component hierarchy, +including props and state. + +**Requires Preact >=10.1.0** + +![Screenshot of Preact devtools](media/preact-chrome-light.png) + +## Usage + +Firstly, we need to import `preact/debug` somewhere to initialize the connection +to the extension. Make sure that this import is **the first** import in your +whole app. + +```javascript +// Must be the first import +import "preact/debug"; + +// Or if you just want the devtools bridge (~240B) without other +// debug code (useful for production sites) +import "preact/devtools"; +``` + +Then, download the Preact Devtools extension for your browser: + +- [Firefox](https://addons.mozilla.org/en-US/firefox/addon/preact-devtools/) +- [Chrome](https://chrome.google.com/webstore/detail/preact-developer-tools/ilcajpmogmhpliinlbcdebhbcanbghmd) +- [Edge](https://microsoftedge.microsoft.com/addons/detail/hdkhobcafnfejjieimdkmjaiihkjpmhk) + +## Contributing + +- Use `npm run dev` to start a demo page +- Use `npm run watch` to rebuild all extensions on any code changes +- Use `npm run build:firefox` or `npm run build:chrome` to create a release build + +Chrome: + +1. Go to extensions page +2. Enable developer mode +3. Click "Load unpacked" +4. Select `dist/chrome/` folder + +Firefox: + +1. Go to addons page +2. Click the settings icon +3. Select "Debug addons" +4. Click "Load temporary addon" +5. Select the `manifest.json` in `dist/firefox/` + +## For extension reviewers + +These commands will build the extension and load it into a browser with a temporary profile. The browser will automatically navigate to [preactjs.com](https://preactjs.com). There you can test the extension. + +Chrome: + +1. Execute `npm run run:chrome` +2. Click on `Preact` tab in devtools + +Firefox: + +1. Exectue `npm run run:firefox` +2. Open devtools + click on `Preact` tab in devtools diff --git a/demo/lynx.config.ts b/demo/lynx.config.ts new file mode 100644 index 00000000..e15f4d46 --- /dev/null +++ b/demo/lynx.config.ts @@ -0,0 +1,32 @@ +import { defineConfig } from "@lynx-js/rspeedy"; + +import { pluginQRCode } from "@lynx-js/qrcode-rsbuild-plugin"; +import { pluginReactLynx } from "@lynx-js/react-rsbuild-plugin"; + +export default defineConfig({ + // output: { + // filenameHash: 'contenthash:8', + // minify: false, + // }, + source: { + define: { + "globalThis.preactDevtoolsCtx.__DEBUG__": "true", + }, + }, + plugins: [ + pluginQRCode({ + schema(url) { + // We use `?fullscreen=true` to open the page in LynxExplorer in full screen mode + return `${url}?fullscreen=true`; + }, + }), + pluginReactLynx({ + enableRemoveCSSScope: false, + }), + ], + output: { + minify: { + css: false, + }, + }, +}); diff --git a/demo/package-lock.json b/demo/package-lock.json new file mode 100644 index 00000000..aee19a99 --- /dev/null +++ b/demo/package-lock.json @@ -0,0 +1,14219 @@ +{ + "name": "demo", + "lockfileVersion": 3, + "requires": true, + "packages": { + "": { + "dependencies": { + "@lynx-js/react": "0.121.2" + }, + "devDependencies": { + "@lynx-js/preact-devtools": "file:../", + "@lynx-js/qrcode-rsbuild-plugin": "0.5.0", + "@lynx-js/react-rsbuild-plugin": "0.17.0", + "@lynx-js/rspeedy": "0.15.0", + "@lynx-js/tailwind-preset": "^0.1.1", + "@lynx-js/types": "3.7.0", + "@types/react": "^18.3.20", + "tailwindcss": "^3.4.17", + "typescript": "~5.7.3" + }, + "engines": { + "node": ">=18" + } + }, + "..": { + "name": "@lynx-js/preact-devtools", + "version": "5.0.1", + "dev": true, + "license": "MIT", + "dependencies": { + "errorstacks": "^2.4.1", + "htm": "^3.1.1" + }, + "devDependencies": { + "@babel/core": "^7.29.0", + "@babel/plugin-syntax-typescript": "^7.28.6", + "@babel/plugin-transform-react-jsx": "^7.28.6", + "@lynx-js/react": "0.121.0", + "@lynx-js/testing-environment": "0.1.5", + "@lynx-js/types": "^3.3.0", + "@playwright/test": "^1.59.1", + "@preact/signals": "^2.9.0", + "@prefresh/vite": "^3.0.0", + "@rsbuild/core": "^1.4.11", + "@rsbuild/plugin-preact": "^1.5.1", + "@testing-library/preact": "^3.2.4", + "@types/archiver": "^7.0.0", + "@types/babel__core": "^7.20.5", + "@types/chrome": "^0.1.42", + "@types/jsdom": "^21.1.7", + "@types/mri": "^1.1.1", + "@types/node": "^25.6.2", + "@types/tar": "^7.0.87", + "archiver": "^8.0.0", + "babel-plugin-helpers": "^0.1.1", + "babel-plugin-transform-define": "^2.1.4", + "babel-plugin-transform-jsx-to-htm": "^2.2.0", + "babel-plugin-transform-rename-properties": "^0.1.0", + "cross-env": "^10.1.0", + "esbuild": "^0.28.0", + "jsdom": "^29.1.1", + "kolorist": "^1.8.0", + "lightningcss": "^1.32.0", + "mri": "^1.2.0", + "oxfmt": "^0.48.0", + "oxlint": "^1.63.0", + "preact": "^10.29.1", + "tar": "^7.5.15", + "typescript": "^6.0.3", + "vite": "^8.0.12", + "vitest": "^4.1.5", + "web-ext": "^10.1.0" + } + }, + "../node_modules/@ampproject/remapping": { + "version": "2.3.0", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@jridgewell/gen-mapping": "^0.3.5", + "@jridgewell/trace-mapping": "^0.3.24" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "../node_modules/@asamuzakjp/css-color": { + "version": "3.1.1", + "dev": true, + "license": "MIT", + "dependencies": { + "@csstools/css-calc": "^2.1.2", + "@csstools/css-color-parser": "^3.0.8", + "@csstools/css-parser-algorithms": "^3.0.4", + "@csstools/css-tokenizer": "^3.0.3", + "lru-cache": "^10.4.3" + } + }, + "../node_modules/@asamuzakjp/css-color/node_modules/lru-cache": { + "version": "10.4.3", + "dev": true, + "license": "ISC" + }, + "../node_modules/@babel/code-frame": { + "version": "7.26.2", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-validator-identifier": "^7.25.9", + "js-tokens": "^4.0.0", + "picocolors": "^1.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "../node_modules/@babel/compat-data": { + "version": "7.26.8", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "../node_modules/@babel/core": { + "version": "7.26.10", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "@ampproject/remapping": "^2.2.0", + "@babel/code-frame": "^7.26.2", + "@babel/generator": "^7.26.10", + "@babel/helper-compilation-targets": "^7.26.5", + "@babel/helper-module-transforms": "^7.26.0", + "@babel/helpers": "^7.26.10", + "@babel/parser": "^7.26.10", + "@babel/template": "^7.26.9", + "@babel/traverse": "^7.26.10", + "@babel/types": "^7.26.10", + "convert-source-map": "^2.0.0", + "debug": "^4.1.0", + "gensync": "^1.0.0-beta.2", + "json5": "^2.2.3", + "semver": "^6.3.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/babel" + } + }, + "../node_modules/@babel/generator": { + "version": "7.26.10", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/parser": "^7.26.10", + "@babel/types": "^7.26.10", + "@jridgewell/gen-mapping": "^0.3.5", + "@jridgewell/trace-mapping": "^0.3.25", + "jsesc": "^3.0.2" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "../node_modules/@babel/helper-annotate-as-pure": { + "version": "7.25.9", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/types": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "../node_modules/@babel/helper-compilation-targets": { + "version": "7.26.5", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/compat-data": "^7.26.5", + "@babel/helper-validator-option": "^7.25.9", + "browserslist": "^4.24.0", + "lru-cache": "^5.1.1", + "semver": "^6.3.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "../node_modules/@babel/helper-module-imports": { + "version": "7.25.9", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/traverse": "^7.25.9", + "@babel/types": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "../node_modules/@babel/helper-module-transforms": { + "version": "7.26.0", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-module-imports": "^7.25.9", + "@babel/helper-validator-identifier": "^7.25.9", + "@babel/traverse": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "../node_modules/@babel/helper-plugin-utils": { + "version": "7.26.5", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "../node_modules/@babel/helper-string-parser": { + "version": "7.25.9", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "../node_modules/@babel/helper-validator-identifier": { + "version": "7.25.9", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "../node_modules/@babel/helper-validator-option": { + "version": "7.25.9", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "../node_modules/@babel/helpers": { + "version": "7.26.10", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/template": "^7.26.9", + "@babel/types": "^7.26.10" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "../node_modules/@babel/parser": { + "version": "7.26.10", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/types": "^7.26.10" + }, + "bin": { + "parser": "bin/babel-parser.js" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "../node_modules/@babel/plugin-syntax-jsx": { + "version": "7.25.9", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "../node_modules/@babel/plugin-syntax-typescript": { + "version": "7.25.9", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "../node_modules/@babel/plugin-transform-react-jsx": { + "version": "7.25.9", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.25.9", + "@babel/helper-module-imports": "^7.25.9", + "@babel/helper-plugin-utils": "^7.25.9", + "@babel/plugin-syntax-jsx": "^7.25.9", + "@babel/types": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "../node_modules/@babel/runtime": { + "version": "7.26.10", + "dev": true, + "license": "MIT", + "dependencies": { + "regenerator-runtime": "^0.14.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "../node_modules/@babel/template": { + "version": "7.26.9", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/code-frame": "^7.26.2", + "@babel/parser": "^7.26.9", + "@babel/types": "^7.26.9" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "../node_modules/@babel/traverse": { + "version": "7.26.10", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/code-frame": "^7.26.2", + "@babel/generator": "^7.26.10", + "@babel/parser": "^7.26.10", + "@babel/template": "^7.26.9", + "@babel/types": "^7.26.10", + "debug": "^4.3.1", + "globals": "^11.1.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "../node_modules/@babel/types": { + "version": "7.26.10", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-string-parser": "^7.25.9", + "@babel/helper-validator-identifier": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "../node_modules/@csstools/color-helpers": { + "version": "5.0.2", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "license": "MIT-0", + "engines": { + "node": ">=18" + } + }, + "../node_modules/@csstools/css-calc": { + "version": "2.1.2", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "license": "MIT", + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "@csstools/css-parser-algorithms": "^3.0.4", + "@csstools/css-tokenizer": "^3.0.3" + } + }, + "../node_modules/@csstools/css-color-parser": { + "version": "3.0.8", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "license": "MIT", + "dependencies": { + "@csstools/color-helpers": "^5.0.2", + "@csstools/css-calc": "^2.1.2" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "@csstools/css-parser-algorithms": "^3.0.4", + "@csstools/css-tokenizer": "^3.0.3" + } + }, + "../node_modules/@csstools/css-parser-algorithms": { + "version": "3.0.4", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "license": "MIT", + "peer": true, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "@csstools/css-tokenizer": "^3.0.3" + } + }, + "../node_modules/@csstools/css-tokenizer": { + "version": "3.0.3", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "license": "MIT", + "peer": true, + "engines": { + "node": ">=18" + } + }, + "../node_modules/@devicefarmer/adbkit": { + "version": "3.3.8", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@devicefarmer/adbkit-logcat": "^2.1.2", + "@devicefarmer/adbkit-monkey": "~1.2.1", + "bluebird": "~3.7", + "commander": "^9.1.0", + "debug": "~4.3.1", + "node-forge": "^1.3.1", + "split": "~1.0.1" + }, + "bin": { + "adbkit": "bin/adbkit" + }, + "engines": { + "node": ">= 0.10.4" + } + }, + "../node_modules/@devicefarmer/adbkit-logcat": { + "version": "2.1.3", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">= 4" + } + }, + "../node_modules/@devicefarmer/adbkit-monkey": { + "version": "1.2.1", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">= 0.10.4" + } + }, + "../node_modules/@devicefarmer/adbkit/node_modules/commander": { + "version": "9.5.0", + "dev": true, + "license": "MIT", + "engines": { + "node": "^12.20.0 || >=14" + } + }, + "../node_modules/@devicefarmer/adbkit/node_modules/debug": { + "version": "4.3.7", + "dev": true, + "license": "MIT", + "dependencies": { + "ms": "^2.1.3" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "../node_modules/@esbuild/aix-ppc64": { + "dev": true, + "optional": true + }, + "../node_modules/@esbuild/android-arm": { + "dev": true, + "optional": true + }, + "../node_modules/@esbuild/android-arm64": { + "dev": true, + "optional": true + }, + "../node_modules/@esbuild/android-x64": { + "dev": true, + "optional": true + }, + "../node_modules/@esbuild/darwin-arm64": { + "version": "0.21.5", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=12" + } + }, + "../node_modules/@esbuild/darwin-x64": { + "dev": true, + "optional": true + }, + "../node_modules/@esbuild/freebsd-arm64": { + "dev": true, + "optional": true + }, + "../node_modules/@esbuild/freebsd-x64": { + "dev": true, + "optional": true + }, + "../node_modules/@esbuild/linux-arm": { + "dev": true, + "optional": true + }, + "../node_modules/@esbuild/linux-arm64": { + "dev": true, + "optional": true + }, + "../node_modules/@esbuild/linux-ia32": { + "dev": true, + "optional": true + }, + "../node_modules/@esbuild/linux-loong64": { + "dev": true, + "optional": true + }, + "../node_modules/@esbuild/linux-mips64el": { + "dev": true, + "optional": true + }, + "../node_modules/@esbuild/linux-ppc64": { + "dev": true, + "optional": true + }, + "../node_modules/@esbuild/linux-riscv64": { + "dev": true, + "optional": true + }, + "../node_modules/@esbuild/linux-s390x": { + "dev": true, + "optional": true + }, + "../node_modules/@esbuild/linux-x64": { + "dev": true, + "optional": true + }, + "../node_modules/@esbuild/netbsd-x64": { + "dev": true, + "optional": true + }, + "../node_modules/@esbuild/openbsd-x64": { + "dev": true, + "optional": true + }, + "../node_modules/@esbuild/sunos-x64": { + "dev": true, + "optional": true + }, + "../node_modules/@esbuild/win32-arm64": { + "dev": true, + "optional": true + }, + "../node_modules/@esbuild/win32-ia32": { + "dev": true, + "optional": true + }, + "../node_modules/@esbuild/win32-x64": { + "dev": true, + "optional": true + }, + "../node_modules/@eslint-community/eslint-utils": { + "version": "4.5.1", + "dev": true, + "license": "MIT", + "dependencies": { + "eslint-visitor-keys": "^3.4.3" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + }, + "peerDependencies": { + "eslint": "^6.0.0 || ^7.0.0 || >=8.0.0" + } + }, + "../node_modules/@eslint-community/regexpp": { + "version": "4.12.1", + "dev": true, + "license": "MIT", + "engines": { + "node": "^12.0.0 || ^14.0.0 || >=16.0.0" + } + }, + "../node_modules/@eslint/eslintrc": { + "version": "2.1.4", + "dev": true, + "license": "MIT", + "dependencies": { + "ajv": "^6.12.4", + "debug": "^4.3.2", + "espree": "^9.6.0", + "globals": "^13.19.0", + "ignore": "^5.2.0", + "import-fresh": "^3.2.1", + "js-yaml": "^4.1.0", + "minimatch": "^3.1.2", + "strip-json-comments": "^3.1.1" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "../node_modules/@eslint/eslintrc/node_modules/brace-expansion": { + "version": "1.1.11", + "dev": true, + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "../node_modules/@eslint/eslintrc/node_modules/globals": { + "version": "13.24.0", + "dev": true, + "license": "MIT", + "dependencies": { + "type-fest": "^0.20.2" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "../node_modules/@eslint/eslintrc/node_modules/minimatch": { + "version": "3.1.2", + "dev": true, + "license": "ISC", + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "../node_modules/@eslint/eslintrc/node_modules/type-fest": { + "version": "0.20.2", + "dev": true, + "license": "(MIT OR CC0-1.0)", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "../node_modules/@eslint/js": { + "version": "8.57.1", + "dev": true, + "license": "MIT", + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + } + }, + "../node_modules/@fluent/syntax": { + "version": "0.19.0", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=14.0.0", + "npm": ">=7.0.0" + } + }, + "../node_modules/@fregante/relaxed-json": { + "version": "2.0.0", + "dev": true, + "license": "BSD-3-Clause", + "engines": { + "node": ">= 0.10.0" + } + }, + "../node_modules/@humanwhocodes/config-array": { + "version": "0.13.0", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@humanwhocodes/object-schema": "^2.0.3", + "debug": "^4.3.1", + "minimatch": "^3.0.5" + }, + "engines": { + "node": ">=10.10.0" + } + }, + "../node_modules/@humanwhocodes/config-array/node_modules/brace-expansion": { + "version": "1.1.11", + "dev": true, + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "../node_modules/@humanwhocodes/config-array/node_modules/minimatch": { + "version": "3.1.2", + "dev": true, + "license": "ISC", + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "../node_modules/@humanwhocodes/module-importer": { + "version": "1.0.1", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=12.22" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/nzakas" + } + }, + "../node_modules/@humanwhocodes/object-schema": { + "version": "2.0.3", + "dev": true, + "license": "BSD-3-Clause" + }, + "../node_modules/@jridgewell/gen-mapping": { + "version": "0.3.8", + "dev": true, + "license": "MIT", + "dependencies": { + "@jridgewell/set-array": "^1.2.1", + "@jridgewell/sourcemap-codec": "^1.4.10", + "@jridgewell/trace-mapping": "^0.3.24" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "../node_modules/@jridgewell/resolve-uri": { + "version": "3.1.2", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.0.0" + } + }, + "../node_modules/@jridgewell/set-array": { + "version": "1.2.1", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.0.0" + } + }, + "../node_modules/@jridgewell/sourcemap-codec": { + "version": "1.5.0", + "dev": true, + "license": "MIT" + }, + "../node_modules/@jridgewell/trace-mapping": { + "version": "0.3.25", + "dev": true, + "license": "MIT", + "dependencies": { + "@jridgewell/resolve-uri": "^3.1.0", + "@jridgewell/sourcemap-codec": "^1.4.14" + } + }, + "../node_modules/@lynx-js/react": { + "version": "0.112.2", + "dev": true, + "dependencies": { + "preact": "npm:@hongzhiyuan/preact@10.24.0-00213bad" + }, + "peerDependencies": { + "@lynx-js/types": "*", + "@types/react": "^18" + }, + "peerDependenciesMeta": { + "@lynx-js/types": { + "optional": true + } + } + }, + "../node_modules/@lynx-js/react/node_modules/preact": { + "name": "@hongzhiyuan/preact", + "version": "10.24.0-00213bad", + "dev": true, + "license": "MIT", + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/preact" + } + }, + "../node_modules/@lynx-js/testing-environment": { + "dev": true + }, + "../node_modules/@lynx-js/types": { + "version": "3.3.0", + "dev": true, + "license": "Apache-2.0", + "peer": true, + "dependencies": { + "csstype": "3.1.3" + } + }, + "../node_modules/@mdn/browser-compat-data": { + "version": "5.7.3", + "dev": true, + "license": "CC0-1.0" + }, + "../node_modules/@module-federation/error-codes": { + "version": "0.17.1", + "dev": true, + "license": "MIT" + }, + "../node_modules/@module-federation/runtime": { + "version": "0.17.1", + "dev": true, + "license": "MIT", + "dependencies": { + "@module-federation/error-codes": "0.17.1", + "@module-federation/runtime-core": "0.17.1", + "@module-federation/sdk": "0.17.1" + } + }, + "../node_modules/@module-federation/runtime-core": { + "version": "0.17.1", + "dev": true, + "license": "MIT", + "dependencies": { + "@module-federation/error-codes": "0.17.1", + "@module-federation/sdk": "0.17.1" + } + }, + "../node_modules/@module-federation/runtime-tools": { + "version": "0.17.1", + "dev": true, + "license": "MIT", + "dependencies": { + "@module-federation/runtime": "0.17.1", + "@module-federation/webpack-bundler-runtime": "0.17.1" + } + }, + "../node_modules/@module-federation/sdk": { + "version": "0.17.1", + "dev": true, + "license": "MIT" + }, + "../node_modules/@module-federation/webpack-bundler-runtime": { + "version": "0.17.1", + "dev": true, + "license": "MIT", + "dependencies": { + "@module-federation/runtime": "0.17.1", + "@module-federation/sdk": "0.17.1" + } + }, + "../node_modules/@nodelib/fs.scandir": { + "version": "2.1.5", + "dev": true, + "license": "MIT", + "dependencies": { + "@nodelib/fs.stat": "2.0.5", + "run-parallel": "^1.1.9" + }, + "engines": { + "node": ">= 8" + } + }, + "../node_modules/@nodelib/fs.stat": { + "version": "2.0.5", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 8" + } + }, + "../node_modules/@nodelib/fs.walk": { + "version": "1.2.8", + "dev": true, + "license": "MIT", + "dependencies": { + "@nodelib/fs.scandir": "2.1.5", + "fastq": "^1.6.0" + }, + "engines": { + "node": ">= 8" + } + }, + "../node_modules/@playwright/test": { + "version": "1.51.1", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "playwright": "1.51.1" + }, + "bin": { + "playwright": "cli.js" + }, + "engines": { + "node": ">=18" + } + }, + "../node_modules/@pnpm/config.env-replace": { + "version": "1.1.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12.22.0" + } + }, + "../node_modules/@pnpm/network.ca-file": { + "version": "1.0.2", + "dev": true, + "license": "MIT", + "dependencies": { + "graceful-fs": "4.2.10" + }, + "engines": { + "node": ">=12.22.0" + } + }, + "../node_modules/@pnpm/network.ca-file/node_modules/graceful-fs": { + "version": "4.2.10", + "dev": true, + "license": "ISC" + }, + "../node_modules/@pnpm/npm-conf": { + "version": "2.3.1", + "dev": true, + "license": "MIT", + "dependencies": { + "@pnpm/config.env-replace": "^1.1.0", + "@pnpm/network.ca-file": "^1.0.1", + "config-chain": "^1.1.11" + }, + "engines": { + "node": ">=12" + } + }, + "../node_modules/@preact/signals": { + "version": "1.3.2", + "dev": true, + "license": "MIT", + "dependencies": { + "@preact/signals-core": "^1.7.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/preact" + }, + "peerDependencies": { + "preact": "10.x" + } + }, + "../node_modules/@preact/signals-core": { + "version": "1.8.0", + "dev": true, + "license": "MIT", + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/preact" + } + }, + "../node_modules/@prefresh/babel-plugin": { + "version": "0.5.1", + "dev": true, + "license": "MIT" + }, + "../node_modules/@prefresh/core": { + "version": "1.5.5", + "dev": true, + "license": "MIT", + "peer": true, + "peerDependencies": { + "preact": "^10.0.0" + } + }, + "../node_modules/@prefresh/utils": { + "version": "1.2.1", + "dev": true, + "license": "MIT", + "peer": true + }, + "../node_modules/@prefresh/vite": { + "version": "2.4.7", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/core": "^7.22.1", + "@prefresh/babel-plugin": "0.5.1", + "@prefresh/core": "^1.5.1", + "@prefresh/utils": "^1.2.0", + "@rollup/pluginutils": "^4.2.1" + }, + "peerDependencies": { + "preact": "^10.4.0", + "vite": ">=2.0.0" + } + }, + "../node_modules/@rollup/pluginutils": { + "version": "4.2.1", + "dev": true, + "license": "MIT", + "dependencies": { + "estree-walker": "^2.0.1", + "picomatch": "^2.2.2" + }, + "engines": { + "node": ">= 8.0.0" + } + }, + "../node_modules/@rollup/rollup-android-arm-eabi": { + "dev": true, + "optional": true + }, + "../node_modules/@rollup/rollup-android-arm64": { + "dev": true, + "optional": true + }, + "../node_modules/@rollup/rollup-darwin-arm64": { + "version": "4.37.0", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ] + }, + "../node_modules/@rollup/rollup-darwin-x64": { + "dev": true, + "optional": true + }, + "../node_modules/@rollup/rollup-freebsd-arm64": { + "dev": true, + "optional": true + }, + "../node_modules/@rollup/rollup-freebsd-x64": { + "dev": true, + "optional": true + }, + "../node_modules/@rollup/rollup-linux-arm-gnueabihf": { + "dev": true, + "optional": true + }, + "../node_modules/@rollup/rollup-linux-arm-musleabihf": { + "dev": true, + "optional": true + }, + "../node_modules/@rollup/rollup-linux-arm64-gnu": { + "dev": true, + "optional": true + }, + "../node_modules/@rollup/rollup-linux-arm64-musl": { + "dev": true, + "optional": true + }, + "../node_modules/@rollup/rollup-linux-loongarch64-gnu": { + "dev": true, + "optional": true + }, + "../node_modules/@rollup/rollup-linux-powerpc64le-gnu": { + "dev": true, + "optional": true + }, + "../node_modules/@rollup/rollup-linux-riscv64-gnu": { + "dev": true, + "optional": true + }, + "../node_modules/@rollup/rollup-linux-riscv64-musl": { + "dev": true, + "optional": true + }, + "../node_modules/@rollup/rollup-linux-s390x-gnu": { + "dev": true, + "optional": true + }, + "../node_modules/@rollup/rollup-linux-x64-gnu": { + "dev": true, + "optional": true + }, + "../node_modules/@rollup/rollup-linux-x64-musl": { + "dev": true, + "optional": true + }, + "../node_modules/@rollup/rollup-win32-arm64-msvc": { + "dev": true, + "optional": true + }, + "../node_modules/@rollup/rollup-win32-ia32-msvc": { + "dev": true, + "optional": true + }, + "../node_modules/@rollup/rollup-win32-x64-msvc": { + "dev": true, + "optional": true + }, + "../node_modules/@rsbuild/core": { + "version": "1.4.15", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "@rspack/core": "1.4.11", + "@rspack/lite-tapable": "~1.0.1", + "@swc/helpers": "^0.5.17", + "core-js": "~3.45.0", + "jiti": "^2.5.1" + }, + "bin": { + "rsbuild": "bin/rsbuild.js" + }, + "engines": { + "node": ">=16.10.0" + } + }, + "../node_modules/@rsbuild/plugin-preact": { + "version": "1.5.2", + "dev": true, + "license": "MIT", + "dependencies": { + "@prefresh/core": "^1.5.5", + "@prefresh/utils": "^1.2.1", + "@rspack/plugin-preact-refresh": "^1.1.2", + "@swc/plugin-prefresh": "^9.0.1" + }, + "peerDependencies": { + "@rsbuild/core": "1.x" + } + }, + "../node_modules/@rspack/binding": { + "version": "1.4.11", + "dev": true, + "license": "MIT", + "optionalDependencies": { + "@rspack/binding-darwin-arm64": "1.4.11", + "@rspack/binding-darwin-x64": "1.4.11", + "@rspack/binding-linux-arm64-gnu": "1.4.11", + "@rspack/binding-linux-arm64-musl": "1.4.11", + "@rspack/binding-linux-x64-gnu": "1.4.11", + "@rspack/binding-linux-x64-musl": "1.4.11", + "@rspack/binding-wasm32-wasi": "1.4.11", + "@rspack/binding-win32-arm64-msvc": "1.4.11", + "@rspack/binding-win32-ia32-msvc": "1.4.11", + "@rspack/binding-win32-x64-msvc": "1.4.11" + } + }, + "../node_modules/@rspack/binding-darwin-arm64": { + "version": "1.4.11", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ] + }, + "../node_modules/@rspack/binding-darwin-x64": { + "dev": true, + "optional": true + }, + "../node_modules/@rspack/binding-linux-arm64-gnu": { + "dev": true, + "optional": true + }, + "../node_modules/@rspack/binding-linux-arm64-musl": { + "dev": true, + "optional": true + }, + "../node_modules/@rspack/binding-linux-x64-gnu": { + "dev": true, + "optional": true + }, + "../node_modules/@rspack/binding-linux-x64-musl": { + "dev": true, + "optional": true + }, + "../node_modules/@rspack/binding-wasm32-wasi": { + "dev": true, + "optional": true + }, + "../node_modules/@rspack/binding-win32-arm64-msvc": { + "dev": true, + "optional": true + }, + "../node_modules/@rspack/binding-win32-ia32-msvc": { + "dev": true, + "optional": true + }, + "../node_modules/@rspack/binding-win32-x64-msvc": { + "dev": true, + "optional": true + }, + "../node_modules/@rspack/core": { + "version": "1.4.11", + "dev": true, + "license": "MIT", + "dependencies": { + "@module-federation/runtime-tools": "0.17.1", + "@rspack/binding": "1.4.11", + "@rspack/lite-tapable": "1.0.1" + }, + "engines": { + "node": ">=16.0.0" + }, + "peerDependencies": { + "@swc/helpers": ">=0.5.1" + }, + "peerDependenciesMeta": { + "@swc/helpers": { + "optional": true + } + } + }, + "../node_modules/@rspack/lite-tapable": { + "version": "1.0.1", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=16.0.0" + } + }, + "../node_modules/@rspack/plugin-preact-refresh": { + "version": "1.1.2", + "dev": true, + "license": "MIT", + "peerDependencies": { + "@prefresh/core": "^1.5.0", + "@prefresh/utils": "^1.2.0" + } + }, + "../node_modules/@swc/counter": { + "version": "0.1.3", + "dev": true, + "license": "Apache-2.0" + }, + "../node_modules/@swc/helpers": { + "version": "0.5.17", + "dev": true, + "license": "Apache-2.0", + "peer": true, + "dependencies": { + "tslib": "^2.8.0" + } + }, + "../node_modules/@swc/plugin-prefresh": { + "version": "9.0.2", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@swc/counter": "^0.1.3" + } + }, + "../node_modules/@testing-library/dom": { + "version": "8.20.1", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/code-frame": "^7.10.4", + "@babel/runtime": "^7.12.5", + "@types/aria-query": "^5.0.1", + "aria-query": "5.1.3", + "chalk": "^4.1.0", + "dom-accessibility-api": "^0.5.9", + "lz-string": "^1.5.0", + "pretty-format": "^27.0.2" + }, + "engines": { + "node": ">=12" + } + }, + "../node_modules/@testing-library/preact": { + "version": "3.2.4", + "dev": true, + "license": "MIT", + "dependencies": { + "@testing-library/dom": "^8.11.1" + }, + "engines": { + "node": ">= 12" + }, + "peerDependencies": { + "preact": ">=10 || ^10.0.0-alpha.0 || ^10.0.0-beta.0" + } + }, + "../node_modules/@types/archiver": { + "version": "5.3.4", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/readdir-glob": "*" + } + }, + "../node_modules/@types/aria-query": { + "version": "5.0.4", + "dev": true, + "license": "MIT" + }, + "../node_modules/@types/babel__core": { + "version": "7.20.5", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/parser": "^7.20.7", + "@babel/types": "^7.20.7", + "@types/babel__generator": "*", + "@types/babel__template": "*", + "@types/babel__traverse": "*" + } + }, + "../node_modules/@types/babel__generator": { + "version": "7.6.8", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/types": "^7.0.0" + } + }, + "../node_modules/@types/babel__template": { + "version": "7.4.4", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/parser": "^7.1.0", + "@babel/types": "^7.0.0" + } + }, + "../node_modules/@types/babel__traverse": { + "version": "7.20.6", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/types": "^7.20.7" + } + }, + "../node_modules/@types/chrome": { + "version": "0.0.310", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/filesystem": "*", + "@types/har-format": "*" + } + }, + "../node_modules/@types/estree": { + "version": "1.0.6", + "dev": true, + "license": "MIT" + }, + "../node_modules/@types/filesystem": { + "version": "0.0.36", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/filewriter": "*" + } + }, + "../node_modules/@types/filewriter": { + "version": "0.0.33", + "dev": true, + "license": "MIT" + }, + "../node_modules/@types/har-format": { + "version": "1.2.16", + "dev": true, + "license": "MIT" + }, + "../node_modules/@types/minimatch": { + "version": "3.0.5", + "dev": true, + "license": "MIT" + }, + "../node_modules/@types/mri": { + "version": "1.1.5", + "dev": true, + "license": "MIT" + }, + "../node_modules/@types/node": { + "version": "20.17.26", + "dev": true, + "license": "MIT", + "dependencies": { + "undici-types": "~6.19.2" + } + }, + "../node_modules/@types/prop-types": { + "version": "15.7.15", + "dev": true, + "license": "MIT" + }, + "../node_modules/@types/react": { + "version": "18.3.23", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "@types/prop-types": "*", + "csstype": "^3.0.2" + } + }, + "../node_modules/@types/readdir-glob": { + "version": "1.1.5", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/node": "*" + } + }, + "../node_modules/@types/tar": { + "version": "6.1.13", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/node": "*", + "minipass": "^4.0.0" + } + }, + "../node_modules/@types/yauzl": { + "version": "2.10.3", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/node": "*" + } + }, + "../node_modules/@ungap/structured-clone": { + "version": "1.3.0", + "dev": true, + "license": "ISC" + }, + "../node_modules/abort-controller": { + "version": "3.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "event-target-shim": "^5.0.0" + }, + "engines": { + "node": ">=6.5" + } + }, + "../node_modules/acorn": { + "version": "8.14.1", + "dev": true, + "license": "MIT", + "peer": true, + "bin": { + "acorn": "bin/acorn" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "../node_modules/acorn-jsx": { + "version": "5.3.2", + "dev": true, + "license": "MIT", + "peerDependencies": { + "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" + } + }, + "../node_modules/addons-linter": { + "version": "7.9.0", + "dev": true, + "license": "MPL-2.0", + "dependencies": { + "@fluent/syntax": "0.19.0", + "@fregante/relaxed-json": "2.0.0", + "@mdn/browser-compat-data": "5.7.3", + "addons-moz-compare": "1.3.0", + "addons-scanner-utils": "9.12.0", + "ajv": "8.17.1", + "chalk": "4.1.2", + "cheerio": "1.0.0-rc.12", + "columnify": "1.6.0", + "common-tags": "1.8.2", + "deepmerge": "4.3.1", + "eslint": "8.57.1", + "eslint-plugin-no-unsanitized": "4.1.2", + "eslint-visitor-keys": "4.2.0", + "espree": "10.3.0", + "esprima": "4.0.1", + "fast-json-patch": "3.1.1", + "image-size": "2.0.1", + "json-merge-patch": "1.0.2", + "pino": "8.20.0", + "semver": "7.7.1", + "source-map-support": "0.5.21", + "upath": "2.0.1", + "yargs": "17.7.2", + "yauzl": "2.10.0" + }, + "bin": { + "addons-linter": "bin/addons-linter" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "../node_modules/addons-linter/node_modules/ajv": { + "version": "8.17.1", + "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/addons-linter/node_modules/eslint-visitor-keys": { + "version": "4.2.0", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "../node_modules/addons-linter/node_modules/espree": { + "version": "10.3.0", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "acorn": "^8.14.0", + "acorn-jsx": "^5.3.2", + "eslint-visitor-keys": "^4.2.0" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "../node_modules/addons-linter/node_modules/json-schema-traverse": { + "version": "1.0.0", + "dev": true, + "license": "MIT" + }, + "../node_modules/addons-linter/node_modules/pino": { + "version": "8.20.0", + "dev": true, + "license": "MIT", + "dependencies": { + "atomic-sleep": "^1.0.0", + "fast-redact": "^3.1.1", + "on-exit-leak-free": "^2.1.0", + "pino-abstract-transport": "^1.1.0", + "pino-std-serializers": "^6.0.0", + "process-warning": "^3.0.0", + "quick-format-unescaped": "^4.0.3", + "real-require": "^0.2.0", + "safe-stable-stringify": "^2.3.1", + "sonic-boom": "^3.7.0", + "thread-stream": "^2.0.0" + }, + "bin": { + "pino": "bin.js" + } + }, + "../node_modules/addons-linter/node_modules/pino-std-serializers": { + "version": "6.2.2", + "dev": true, + "license": "MIT" + }, + "../node_modules/addons-linter/node_modules/process-warning": { + "version": "3.0.0", + "dev": true, + "license": "MIT" + }, + "../node_modules/addons-linter/node_modules/semver": { + "version": "7.7.1", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "../node_modules/addons-linter/node_modules/sonic-boom": { + "version": "3.8.1", + "dev": true, + "license": "MIT", + "dependencies": { + "atomic-sleep": "^1.0.0" + } + }, + "../node_modules/addons-linter/node_modules/thread-stream": { + "version": "2.7.0", + "dev": true, + "license": "MIT", + "dependencies": { + "real-require": "^0.2.0" + } + }, + "../node_modules/addons-moz-compare": { + "version": "1.3.0", + "dev": true, + "license": "MPL-2.0" + }, + "../node_modules/addons-scanner-utils": { + "version": "9.12.0", + "dev": true, + "license": "MPL-2.0", + "dependencies": { + "@types/yauzl": "2.10.3", + "common-tags": "1.8.2", + "first-chunk-stream": "3.0.0", + "strip-bom-stream": "4.0.0", + "upath": "2.0.1", + "yauzl": "2.10.0" + }, + "peerDependencies": { + "body-parser": "1.20.3", + "express": "4.21.0", + "node-fetch": "2.6.11", + "safe-compare": "1.1.4" + }, + "peerDependenciesMeta": { + "body-parser": { + "optional": true + }, + "express": { + "optional": true + }, + "node-fetch": { + "optional": true + }, + "safe-compare": { + "optional": true + } + } + }, + "../node_modules/adm-zip": { + "version": "0.5.16", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12.0" + } + }, + "../node_modules/agent-base": { + "version": "7.1.3", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 14" + } + }, + "../node_modules/ajv": { + "version": "6.12.6", + "dev": true, + "license": "MIT", + "dependencies": { + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "../node_modules/ansi-align": { + "version": "3.0.1", + "dev": true, + "license": "ISC", + "dependencies": { + "string-width": "^4.1.0" + } + }, + "../node_modules/ansi-regex": { + "version": "5.0.1", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "../node_modules/ansi-styles": { + "version": "4.3.0", + "dev": true, + "license": "MIT", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "../node_modules/archiver": { + "version": "5.3.2", + "dev": true, + "license": "MIT", + "dependencies": { + "archiver-utils": "^2.1.0", + "async": "^3.2.4", + "buffer-crc32": "^0.2.1", + "readable-stream": "^3.6.0", + "readdir-glob": "^1.1.2", + "tar-stream": "^2.2.0", + "zip-stream": "^4.1.0" + }, + "engines": { + "node": ">= 10" + } + }, + "../node_modules/archiver-utils": { + "version": "2.1.0", + "dev": true, + "license": "MIT", + "dependencies": { + "glob": "^7.1.4", + "graceful-fs": "^4.2.0", + "lazystream": "^1.0.0", + "lodash.defaults": "^4.2.0", + "lodash.difference": "^4.5.0", + "lodash.flatten": "^4.4.0", + "lodash.isplainobject": "^4.0.6", + "lodash.union": "^4.6.0", + "normalize-path": "^3.0.0", + "readable-stream": "^2.0.0" + }, + "engines": { + "node": ">= 6" + } + }, + "../node_modules/archiver-utils/node_modules/isarray": { + "version": "1.0.0", + "dev": true, + "license": "MIT" + }, + "../node_modules/archiver-utils/node_modules/readable-stream": { + "version": "2.3.8", + "dev": true, + "license": "MIT", + "dependencies": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "../node_modules/archiver-utils/node_modules/safe-buffer": { + "version": "5.1.2", + "dev": true, + "license": "MIT" + }, + "../node_modules/archiver-utils/node_modules/string_decoder": { + "version": "1.1.1", + "dev": true, + "license": "MIT", + "dependencies": { + "safe-buffer": "~5.1.0" + } + }, + "../node_modules/argparse": { + "version": "2.0.1", + "dev": true, + "license": "Python-2.0" + }, + "../node_modules/aria-query": { + "version": "5.1.3", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "deep-equal": "^2.0.5" + } + }, + "../node_modules/array-buffer-byte-length": { + "version": "1.0.2", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.3", + "is-array-buffer": "^3.0.5" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "../node_modules/array-differ": { + "version": "4.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "../node_modules/async": { + "version": "3.2.6", + "dev": true, + "license": "MIT" + }, + "../node_modules/asynckit": { + "version": "0.4.0", + "dev": true, + "license": "MIT" + }, + "../node_modules/atomic-sleep": { + "version": "1.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8.0.0" + } + }, + "../node_modules/atomically": { + "version": "2.0.3", + "dev": true, + "dependencies": { + "stubborn-fs": "^1.2.5", + "when-exit": "^2.1.1" + } + }, + "../node_modules/available-typed-arrays": { + "version": "1.0.7", + "dev": true, + "license": "MIT", + "dependencies": { + "possible-typed-array-names": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "../node_modules/babel-plugin-helpers": { + "version": "0.1.1", + "dev": true, + "license": "MIT", + "peerDependencies": { + "@babel/core": "7.x" + } + }, + "../node_modules/babel-plugin-transform-define": { + "version": "2.1.4", + "dev": true, + "license": "MIT", + "dependencies": { + "lodash": "^4.17.11", + "traverse": "0.6.6" + }, + "engines": { + "node": ">= 8.x.x" + } + }, + "../node_modules/babel-plugin-transform-jsx-to-htm": { + "version": "2.2.0", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@babel/plugin-syntax-jsx": "^7.2.0", + "htm": "^3.0.0" + } + }, + "../node_modules/babel-plugin-transform-rename-properties": { + "version": "0.1.0", + "dev": true, + "license": "MIT", + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "../node_modules/balanced-match": { + "version": "1.0.2", + "dev": true, + "license": "MIT" + }, + "../node_modules/base64-js": { + "version": "1.5.1", + "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/big-integer": { + "version": "1.6.52", + "dev": true, + "license": "Unlicense", + "engines": { + "node": ">=0.6" + } + }, + "../node_modules/bl": { + "version": "4.1.0", + "dev": true, + "license": "MIT", + "dependencies": { + "buffer": "^5.5.0", + "inherits": "^2.0.4", + "readable-stream": "^3.4.0" + } + }, + "../node_modules/bluebird": { + "version": "3.7.2", + "dev": true, + "license": "MIT" + }, + "../node_modules/boolbase": { + "version": "1.0.0", + "dev": true, + "license": "ISC" + }, + "../node_modules/boxen": { + "version": "8.0.1", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-align": "^3.0.1", + "camelcase": "^8.0.0", + "chalk": "^5.3.0", + "cli-boxes": "^3.0.0", + "string-width": "^7.2.0", + "type-fest": "^4.21.0", + "widest-line": "^5.0.0", + "wrap-ansi": "^9.0.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "../node_modules/boxen/node_modules/ansi-regex": { + "version": "6.1.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-regex?sponsor=1" + } + }, + "../node_modules/boxen/node_modules/ansi-styles": { + "version": "6.2.1", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "../node_modules/boxen/node_modules/chalk": { + "version": "5.4.1", + "dev": true, + "license": "MIT", + "engines": { + "node": "^12.17.0 || ^14.13 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "../node_modules/boxen/node_modules/emoji-regex": { + "version": "10.4.0", + "dev": true, + "license": "MIT" + }, + "../node_modules/boxen/node_modules/string-width": { + "version": "7.2.0", + "dev": true, + "license": "MIT", + "dependencies": { + "emoji-regex": "^10.3.0", + "get-east-asian-width": "^1.0.0", + "strip-ansi": "^7.1.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "../node_modules/boxen/node_modules/strip-ansi": { + "version": "7.1.0", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-regex": "^6.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/strip-ansi?sponsor=1" + } + }, + "../node_modules/boxen/node_modules/type-fest": { + "version": "4.38.0", + "dev": true, + "license": "(MIT OR CC0-1.0)", + "engines": { + "node": ">=16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "../node_modules/boxen/node_modules/wrap-ansi": { + "version": "9.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-styles": "^6.2.1", + "string-width": "^7.0.0", + "strip-ansi": "^7.1.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, + "../node_modules/bplist-parser": { + "version": "0.2.0", + "dev": true, + "license": "MIT", + "dependencies": { + "big-integer": "^1.6.44" + }, + "engines": { + "node": ">= 5.10.0" + } + }, + "../node_modules/brace-expansion": { + "version": "2.0.1", + "dev": true, + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0" + } + }, + "../node_modules/browserslist": { + "version": "4.24.4", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/browserslist" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "peer": true, + "dependencies": { + "caniuse-lite": "^1.0.30001688", + "electron-to-chromium": "^1.5.73", + "node-releases": "^2.0.19", + "update-browserslist-db": "^1.1.1" + }, + "bin": { + "browserslist": "cli.js" + }, + "engines": { + "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" + } + }, + "../node_modules/buffer": { + "version": "5.7.1", + "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.1.13" + } + }, + "../node_modules/buffer-crc32": { + "version": "0.2.13", + "dev": true, + "license": "MIT", + "engines": { + "node": "*" + } + }, + "../node_modules/buffer-from": { + "version": "1.1.2", + "dev": true, + "license": "MIT" + }, + "../node_modules/bundle-name": { + "version": "3.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "run-applescript": "^5.0.0" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "../node_modules/call-bind": { + "version": "1.0.8", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind-apply-helpers": "^1.0.0", + "es-define-property": "^1.0.0", + "get-intrinsic": "^1.2.4", + "set-function-length": "^1.2.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "../node_modules/call-bind-apply-helpers": { + "version": "1.0.2", + "dev": true, + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0", + "function-bind": "^1.1.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "../node_modules/call-bound": { + "version": "1.0.4", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind-apply-helpers": "^1.0.2", + "get-intrinsic": "^1.3.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "../node_modules/callsites": { + "version": "3.1.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "../node_modules/camelcase": { + "version": "8.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "../node_modules/caniuse-lite": { + "version": "1.0.30001707", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/caniuse-lite" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "CC-BY-4.0" + }, + "../node_modules/chalk": { + "version": "4.1.2", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "../node_modules/cheerio": { + "version": "1.0.0-rc.12", + "dev": true, + "license": "MIT", + "dependencies": { + "cheerio-select": "^2.1.0", + "dom-serializer": "^2.0.0", + "domhandler": "^5.0.3", + "domutils": "^3.0.1", + "htmlparser2": "^8.0.1", + "parse5": "^7.0.0", + "parse5-htmlparser2-tree-adapter": "^7.0.0" + }, + "engines": { + "node": ">= 6" + }, + "funding": { + "url": "https://github.com/cheeriojs/cheerio?sponsor=1" + } + }, + "../node_modules/cheerio-select": { + "version": "2.1.0", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "boolbase": "^1.0.0", + "css-select": "^5.1.0", + "css-what": "^6.1.0", + "domelementtype": "^2.3.0", + "domhandler": "^5.0.3", + "domutils": "^3.0.1" + }, + "funding": { + "url": "https://github.com/sponsors/fb55" + } + }, + "../node_modules/chownr": { + "version": "2.0.0", + "dev": true, + "license": "ISC", + "engines": { + "node": ">=10" + } + }, + "../node_modules/chrome-launcher": { + "version": "1.1.2", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@types/node": "*", + "escape-string-regexp": "^4.0.0", + "is-wsl": "^2.2.0", + "lighthouse-logger": "^2.0.1" + }, + "bin": { + "print-chrome-path": "bin/print-chrome-path.js" + }, + "engines": { + "node": ">=12.13.0" + } + }, + "../node_modules/cli-boxes": { + "version": "3.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "../node_modules/cliui": { + "version": "8.0.1", + "dev": true, + "license": "ISC", + "dependencies": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.1", + "wrap-ansi": "^7.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "../node_modules/clone": { + "version": "1.0.4", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.8" + } + }, + "../node_modules/color-convert": { + "version": "2.0.1", + "dev": true, + "license": "MIT", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "../node_modules/color-name": { + "version": "1.1.4", + "dev": true, + "license": "MIT" + }, + "../node_modules/columnify": { + "version": "1.6.0", + "dev": true, + "license": "MIT", + "dependencies": { + "strip-ansi": "^6.0.1", + "wcwidth": "^1.0.0" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "../node_modules/combined-stream": { + "version": "1.0.8", + "dev": true, + "license": "MIT", + "dependencies": { + "delayed-stream": "~1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, + "../node_modules/common-tags": { + "version": "1.8.2", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4.0.0" + } + }, + "../node_modules/compress-commons": { + "version": "4.1.2", + "dev": true, + "license": "MIT", + "dependencies": { + "buffer-crc32": "^0.2.13", + "crc32-stream": "^4.0.2", + "normalize-path": "^3.0.0", + "readable-stream": "^3.6.0" + }, + "engines": { + "node": ">= 10" + } + }, + "../node_modules/concat-map": { + "version": "0.0.1", + "dev": true, + "license": "MIT" + }, + "../node_modules/concat-stream": { + "version": "1.6.2", + "dev": true, + "engines": [ + "node >= 0.8" + ], + "license": "MIT", + "dependencies": { + "buffer-from": "^1.0.0", + "inherits": "^2.0.3", + "readable-stream": "^2.2.2", + "typedarray": "^0.0.6" + } + }, + "../node_modules/concat-stream/node_modules/isarray": { + "version": "1.0.0", + "dev": true, + "license": "MIT" + }, + "../node_modules/concat-stream/node_modules/readable-stream": { + "version": "2.3.8", + "dev": true, + "license": "MIT", + "dependencies": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "../node_modules/concat-stream/node_modules/safe-buffer": { + "version": "5.1.2", + "dev": true, + "license": "MIT" + }, + "../node_modules/concat-stream/node_modules/string_decoder": { + "version": "1.1.1", + "dev": true, + "license": "MIT", + "dependencies": { + "safe-buffer": "~5.1.0" + } + }, + "../node_modules/config-chain": { + "version": "1.1.13", + "dev": true, + "license": "MIT", + "dependencies": { + "ini": "^1.3.4", + "proto-list": "~1.2.1" + } + }, + "../node_modules/config-chain/node_modules/ini": { + "version": "1.3.8", + "dev": true, + "license": "ISC" + }, + "../node_modules/configstore": { + "version": "7.0.0", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "atomically": "^2.0.3", + "dot-prop": "^9.0.0", + "graceful-fs": "^4.2.11", + "xdg-basedir": "^5.1.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/yeoman/configstore?sponsor=1" + } + }, + "../node_modules/convert-source-map": { + "version": "2.0.0", + "dev": true, + "license": "MIT" + }, + "../node_modules/core-js": { + "version": "3.45.0", + "dev": true, + "hasInstallScript": true, + "license": "MIT", + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/core-js" + } + }, + "../node_modules/core-util-is": { + "version": "1.0.3", + "dev": true, + "license": "MIT" + }, + "../node_modules/crc-32": { + "version": "1.2.2", + "dev": true, + "license": "Apache-2.0", + "bin": { + "crc32": "bin/crc32.njs" + }, + "engines": { + "node": ">=0.8" + } + }, + "../node_modules/crc32-stream": { + "version": "4.0.3", + "dev": true, + "license": "MIT", + "dependencies": { + "crc-32": "^1.2.0", + "readable-stream": "^3.4.0" + }, + "engines": { + "node": ">= 10" + } + }, + "../node_modules/cross-env": { + "version": "7.0.3", + "dev": true, + "license": "MIT", + "dependencies": { + "cross-spawn": "^7.0.1" + }, + "bin": { + "cross-env": "src/bin/cross-env.js", + "cross-env-shell": "src/bin/cross-env-shell.js" + }, + "engines": { + "node": ">=10.14", + "npm": ">=6", + "yarn": ">=1" + } + }, + "../node_modules/cross-spawn": { + "version": "7.0.6", + "dev": true, + "license": "MIT", + "dependencies": { + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + }, + "engines": { + "node": ">= 8" + } + }, + "../node_modules/css-select": { + "version": "5.1.0", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "boolbase": "^1.0.0", + "css-what": "^6.1.0", + "domhandler": "^5.0.2", + "domutils": "^3.0.1", + "nth-check": "^2.0.1" + }, + "funding": { + "url": "https://github.com/sponsors/fb55" + } + }, + "../node_modules/css-what": { + "version": "6.1.0", + "dev": true, + "license": "BSD-2-Clause", + "engines": { + "node": ">= 6" + }, + "funding": { + "url": "https://github.com/sponsors/fb55" + } + }, + "../node_modules/cssstyle": { + "version": "4.3.0", + "dev": true, + "license": "MIT", + "dependencies": { + "@asamuzakjp/css-color": "^3.1.1", + "rrweb-cssom": "^0.8.0" + }, + "engines": { + "node": ">=18" + } + }, + "../node_modules/csstype": { + "version": "3.1.3", + "dev": true, + "license": "MIT" + }, + "../node_modules/data-urls": { + "version": "5.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "whatwg-mimetype": "^4.0.0", + "whatwg-url": "^14.0.0" + }, + "engines": { + "node": ">=18" + } + }, + "../node_modules/debounce": { + "version": "1.2.1", + "dev": true, + "license": "MIT" + }, + "../node_modules/debug": { + "version": "4.4.0", + "dev": true, + "license": "MIT", + "dependencies": { + "ms": "^2.1.3" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "../node_modules/decamelize": { + "version": "6.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "../node_modules/decimal.js": { + "version": "10.5.0", + "dev": true, + "license": "MIT" + }, + "../node_modules/deep-equal": { + "version": "2.2.3", + "dev": true, + "license": "MIT", + "dependencies": { + "array-buffer-byte-length": "^1.0.0", + "call-bind": "^1.0.5", + "es-get-iterator": "^1.1.3", + "get-intrinsic": "^1.2.2", + "is-arguments": "^1.1.1", + "is-array-buffer": "^3.0.2", + "is-date-object": "^1.0.5", + "is-regex": "^1.1.4", + "is-shared-array-buffer": "^1.0.2", + "isarray": "^2.0.5", + "object-is": "^1.1.5", + "object-keys": "^1.1.1", + "object.assign": "^4.1.4", + "regexp.prototype.flags": "^1.5.1", + "side-channel": "^1.0.4", + "which-boxed-primitive": "^1.0.2", + "which-collection": "^1.0.1", + "which-typed-array": "^1.1.13" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "../node_modules/deep-extend": { + "version": "0.6.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4.0.0" + } + }, + "../node_modules/deep-is": { + "version": "0.1.4", + "dev": true, + "license": "MIT" + }, + "../node_modules/deepmerge": { + "version": "4.3.1", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "../node_modules/default-browser": { + "version": "4.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "bundle-name": "^3.0.0", + "default-browser-id": "^3.0.0", + "execa": "^7.1.1", + "titleize": "^3.0.0" + }, + "engines": { + "node": ">=14.16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "../node_modules/default-browser-id": { + "version": "3.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "bplist-parser": "^0.2.0", + "untildify": "^4.0.0" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "../node_modules/default-browser/node_modules/execa": { + "version": "7.2.0", + "dev": true, + "license": "MIT", + "dependencies": { + "cross-spawn": "^7.0.3", + "get-stream": "^6.0.1", + "human-signals": "^4.3.0", + "is-stream": "^3.0.0", + "merge-stream": "^2.0.0", + "npm-run-path": "^5.1.0", + "onetime": "^6.0.0", + "signal-exit": "^3.0.7", + "strip-final-newline": "^3.0.0" + }, + "engines": { + "node": "^14.18.0 || ^16.14.0 || >=18.0.0" + }, + "funding": { + "url": "https://github.com/sindresorhus/execa?sponsor=1" + } + }, + "../node_modules/default-browser/node_modules/get-stream": { + "version": "6.0.1", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "../node_modules/default-browser/node_modules/human-signals": { + "version": "4.3.1", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=14.18.0" + } + }, + "../node_modules/default-browser/node_modules/is-stream": { + "version": "3.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "../node_modules/default-browser/node_modules/mimic-fn": { + "version": "4.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "../node_modules/default-browser/node_modules/npm-run-path": { + "version": "5.3.0", + "dev": true, + "license": "MIT", + "dependencies": { + "path-key": "^4.0.0" + }, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "../node_modules/default-browser/node_modules/onetime": { + "version": "6.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "mimic-fn": "^4.0.0" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "../node_modules/default-browser/node_modules/path-key": { + "version": "4.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "../node_modules/default-browser/node_modules/strip-final-newline": { + "version": "3.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "../node_modules/defaults": { + "version": "1.0.4", + "dev": true, + "license": "MIT", + "dependencies": { + "clone": "^1.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "../node_modules/define-data-property": { + "version": "1.1.4", + "dev": true, + "license": "MIT", + "dependencies": { + "es-define-property": "^1.0.0", + "es-errors": "^1.3.0", + "gopd": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "../node_modules/define-lazy-prop": { + "version": "3.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "../node_modules/define-properties": { + "version": "1.2.1", + "dev": true, + "license": "MIT", + "dependencies": { + "define-data-property": "^1.0.1", + "has-property-descriptors": "^1.0.0", + "object-keys": "^1.1.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "../node_modules/delayed-stream": { + "version": "1.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.4.0" + } + }, + "../node_modules/detect-libc": { + "version": "2.0.3", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=8" + } + }, + "../node_modules/doctrine": { + "version": "3.0.0", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "esutils": "^2.0.2" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "../node_modules/dom-accessibility-api": { + "version": "0.5.16", + "dev": true, + "license": "MIT" + }, + "../node_modules/dom-serializer": { + "version": "2.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "domelementtype": "^2.3.0", + "domhandler": "^5.0.2", + "entities": "^4.2.0" + }, + "funding": { + "url": "https://github.com/cheeriojs/dom-serializer?sponsor=1" + } + }, + "../node_modules/domelementtype": { + "version": "2.3.0", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/fb55" + } + ], + "license": "BSD-2-Clause" + }, + "../node_modules/domhandler": { + "version": "5.0.3", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "domelementtype": "^2.3.0" + }, + "engines": { + "node": ">= 4" + }, + "funding": { + "url": "https://github.com/fb55/domhandler?sponsor=1" + } + }, + "../node_modules/domutils": { + "version": "3.2.2", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "dom-serializer": "^2.0.0", + "domelementtype": "^2.3.0", + "domhandler": "^5.0.3" + }, + "funding": { + "url": "https://github.com/fb55/domutils?sponsor=1" + } + }, + "../node_modules/dot-prop": { + "version": "9.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "type-fest": "^4.18.2" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "../node_modules/dot-prop/node_modules/type-fest": { + "version": "4.38.0", + "dev": true, + "license": "(MIT OR CC0-1.0)", + "engines": { + "node": ">=16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "../node_modules/dunder-proto": { + "version": "1.0.1", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind-apply-helpers": "^1.0.1", + "es-errors": "^1.3.0", + "gopd": "^1.2.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "../node_modules/electron-to-chromium": { + "version": "1.5.123", + "dev": true, + "license": "ISC" + }, + "../node_modules/emoji-regex": { + "version": "8.0.0", + "dev": true, + "license": "MIT" + }, + "../node_modules/end-of-stream": { + "version": "1.4.4", + "dev": true, + "license": "MIT", + "dependencies": { + "once": "^1.4.0" + } + }, + "../node_modules/entities": { + "version": "4.5.0", + "dev": true, + "license": "BSD-2-Clause", + "engines": { + "node": ">=0.12" + }, + "funding": { + "url": "https://github.com/fb55/entities?sponsor=1" + } + }, + "../node_modules/error-ex": { + "version": "1.3.2", + "dev": true, + "license": "MIT", + "dependencies": { + "is-arrayish": "^0.2.1" + } + }, + "../node_modules/errorstacks": { + "version": "2.4.1", + "dev": true, + "license": "MIT" + }, + "../node_modules/es-define-property": { + "version": "1.0.1", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, + "../node_modules/es-errors": { + "version": "1.3.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, + "../node_modules/es-get-iterator": { + "version": "1.1.3", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.2", + "get-intrinsic": "^1.1.3", + "has-symbols": "^1.0.3", + "is-arguments": "^1.1.1", + "is-map": "^2.0.2", + "is-set": "^2.0.2", + "is-string": "^1.0.7", + "isarray": "^2.0.5", + "stop-iteration-iterator": "^1.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "../node_modules/es-object-atoms": { + "version": "1.1.1", + "dev": true, + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "../node_modules/es-set-tostringtag": { + "version": "2.1.0", + "dev": true, + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.6", + "has-tostringtag": "^1.0.2", + "hasown": "^2.0.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "../node_modules/es6-error": { + "version": "4.1.1", + "dev": true, + "license": "MIT" + }, + "../node_modules/esbuild": { + "version": "0.15.18", + "dev": true, + "hasInstallScript": true, + "license": "MIT", + "bin": { + "esbuild": "bin/esbuild" + }, + "engines": { + "node": ">=12" + }, + "optionalDependencies": { + "@esbuild/android-arm": "0.15.18", + "@esbuild/linux-loong64": "0.15.18", + "esbuild-android-64": "0.15.18", + "esbuild-android-arm64": "0.15.18", + "esbuild-darwin-64": "0.15.18", + "esbuild-darwin-arm64": "0.15.18", + "esbuild-freebsd-64": "0.15.18", + "esbuild-freebsd-arm64": "0.15.18", + "esbuild-linux-32": "0.15.18", + "esbuild-linux-64": "0.15.18", + "esbuild-linux-arm": "0.15.18", + "esbuild-linux-arm64": "0.15.18", + "esbuild-linux-mips64le": "0.15.18", + "esbuild-linux-ppc64le": "0.15.18", + "esbuild-linux-riscv64": "0.15.18", + "esbuild-linux-s390x": "0.15.18", + "esbuild-netbsd-64": "0.15.18", + "esbuild-openbsd-64": "0.15.18", + "esbuild-sunos-64": "0.15.18", + "esbuild-windows-32": "0.15.18", + "esbuild-windows-64": "0.15.18", + "esbuild-windows-arm64": "0.15.18" + } + }, + "../node_modules/esbuild-android-64": { + "dev": true, + "optional": true + }, + "../node_modules/esbuild-android-arm64": { + "dev": true, + "optional": true + }, + "../node_modules/esbuild-darwin-64": { + "dev": true, + "optional": true + }, + "../node_modules/esbuild-darwin-arm64": { + "version": "0.15.18", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=12" + } + }, + "../node_modules/esbuild-freebsd-64": { + "dev": true, + "optional": true + }, + "../node_modules/esbuild-freebsd-arm64": { + "dev": true, + "optional": true + }, + "../node_modules/esbuild-linux-32": { + "dev": true, + "optional": true + }, + "../node_modules/esbuild-linux-64": { + "dev": true, + "optional": true + }, + "../node_modules/esbuild-linux-arm": { + "dev": true, + "optional": true + }, + "../node_modules/esbuild-linux-arm64": { + "dev": true, + "optional": true + }, + "../node_modules/esbuild-linux-mips64le": { + "dev": true, + "optional": true + }, + "../node_modules/esbuild-linux-ppc64le": { + "dev": true, + "optional": true + }, + "../node_modules/esbuild-linux-riscv64": { + "dev": true, + "optional": true + }, + "../node_modules/esbuild-linux-s390x": { + "dev": true, + "optional": true + }, + "../node_modules/esbuild-netbsd-64": { + "dev": true, + "optional": true + }, + "../node_modules/esbuild-openbsd-64": { + "dev": true, + "optional": true + }, + "../node_modules/esbuild-sunos-64": { + "dev": true, + "optional": true + }, + "../node_modules/esbuild-windows-32": { + "dev": true, + "optional": true + }, + "../node_modules/esbuild-windows-64": { + "dev": true, + "optional": true + }, + "../node_modules/esbuild-windows-arm64": { + "dev": true, + "optional": true + }, + "../node_modules/escalade": { + "version": "3.2.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "../node_modules/escape-goat": { + "version": "4.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "../node_modules/escape-string-regexp": { + "version": "4.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "../node_modules/eslint": { + "version": "8.57.1", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "@eslint-community/eslint-utils": "^4.2.0", + "@eslint-community/regexpp": "^4.6.1", + "@eslint/eslintrc": "^2.1.4", + "@eslint/js": "8.57.1", + "@humanwhocodes/config-array": "^0.13.0", + "@humanwhocodes/module-importer": "^1.0.1", + "@nodelib/fs.walk": "^1.2.8", + "@ungap/structured-clone": "^1.2.0", + "ajv": "^6.12.4", + "chalk": "^4.0.0", + "cross-spawn": "^7.0.2", + "debug": "^4.3.2", + "doctrine": "^3.0.0", + "escape-string-regexp": "^4.0.0", + "eslint-scope": "^7.2.2", + "eslint-visitor-keys": "^3.4.3", + "espree": "^9.6.1", + "esquery": "^1.4.2", + "esutils": "^2.0.2", + "fast-deep-equal": "^3.1.3", + "file-entry-cache": "^6.0.1", + "find-up": "^5.0.0", + "glob-parent": "^6.0.2", + "globals": "^13.19.0", + "graphemer": "^1.4.0", + "ignore": "^5.2.0", + "imurmurhash": "^0.1.4", + "is-glob": "^4.0.0", + "is-path-inside": "^3.0.3", + "js-yaml": "^4.1.0", + "json-stable-stringify-without-jsonify": "^1.0.1", + "levn": "^0.4.1", + "lodash.merge": "^4.6.2", + "minimatch": "^3.1.2", + "natural-compare": "^1.4.0", + "optionator": "^0.9.3", + "strip-ansi": "^6.0.1", + "text-table": "^0.2.0" + }, + "bin": { + "eslint": "bin/eslint.js" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "../node_modules/eslint-plugin-no-unsanitized": { + "version": "4.1.2", + "dev": true, + "license": "MPL-2.0", + "peerDependencies": { + "eslint": "^8 || ^9" + } + }, + "../node_modules/eslint-scope": { + "version": "7.2.2", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "esrecurse": "^4.3.0", + "estraverse": "^5.2.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "../node_modules/eslint-visitor-keys": { + "version": "3.4.3", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "../node_modules/eslint/node_modules/brace-expansion": { + "version": "1.1.11", + "dev": true, + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "../node_modules/eslint/node_modules/globals": { + "version": "13.24.0", + "dev": true, + "license": "MIT", + "dependencies": { + "type-fest": "^0.20.2" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "../node_modules/eslint/node_modules/minimatch": { + "version": "3.1.2", + "dev": true, + "license": "ISC", + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "../node_modules/eslint/node_modules/type-fest": { + "version": "0.20.2", + "dev": true, + "license": "(MIT OR CC0-1.0)", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "../node_modules/espree": { + "version": "9.6.1", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "acorn": "^8.9.0", + "acorn-jsx": "^5.3.2", + "eslint-visitor-keys": "^3.4.1" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "../node_modules/esprima": { + "version": "4.0.1", + "dev": true, + "license": "BSD-2-Clause", + "bin": { + "esparse": "bin/esparse.js", + "esvalidate": "bin/esvalidate.js" + }, + "engines": { + "node": ">=4" + } + }, + "../node_modules/esquery": { + "version": "1.6.0", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "estraverse": "^5.1.0" + }, + "engines": { + "node": ">=0.10" + } + }, + "../node_modules/esrecurse": { + "version": "4.3.0", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "estraverse": "^5.2.0" + }, + "engines": { + "node": ">=4.0" + } + }, + "../node_modules/estraverse": { + "version": "5.3.0", + "dev": true, + "license": "BSD-2-Clause", + "engines": { + "node": ">=4.0" + } + }, + "../node_modules/estree-walker": { + "version": "2.0.2", + "dev": true, + "license": "MIT" + }, + "../node_modules/esutils": { + "version": "2.0.3", + "dev": true, + "license": "BSD-2-Clause", + "engines": { + "node": ">=0.10.0" + } + }, + "../node_modules/event-target-shim": { + "version": "5.0.1", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "../node_modules/events": { + "version": "3.3.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.8.x" + } + }, + "../node_modules/fast-deep-equal": { + "version": "3.1.3", + "dev": true, + "license": "MIT" + }, + "../node_modules/fast-json-patch": { + "version": "3.1.1", + "dev": true, + "license": "MIT" + }, + "../node_modules/fast-json-stable-stringify": { + "version": "2.1.0", + "dev": true, + "license": "MIT" + }, + "../node_modules/fast-levenshtein": { + "version": "2.0.6", + "dev": true, + "license": "MIT" + }, + "../node_modules/fast-redact": { + "version": "3.5.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "../node_modules/fast-uri": { + "version": "3.0.6", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/fastify" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/fastify" + } + ], + "license": "BSD-3-Clause" + }, + "../node_modules/fastq": { + "version": "1.19.1", + "dev": true, + "license": "ISC", + "dependencies": { + "reusify": "^1.0.4" + } + }, + "../node_modules/fd-slicer": { + "version": "1.1.0", + "dev": true, + "license": "MIT", + "dependencies": { + "pend": "~1.2.0" + } + }, + "../node_modules/file-entry-cache": { + "version": "6.0.1", + "dev": true, + "license": "MIT", + "dependencies": { + "flat-cache": "^3.0.4" + }, + "engines": { + "node": "^10.12.0 || >=12.0.0" + } + }, + "../node_modules/find-up": { + "version": "5.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "locate-path": "^6.0.0", + "path-exists": "^4.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "../node_modules/firefox-profile": { + "version": "4.7.0", + "dev": true, + "license": "MIT", + "dependencies": { + "adm-zip": "~0.5.x", + "fs-extra": "^11.2.0", + "ini": "^4.1.3", + "minimist": "^1.2.8", + "xml2js": "^0.6.2" + }, + "bin": { + "firefox-profile": "lib/cli.js" + }, + "engines": { + "node": ">=18" + } + }, + "../node_modules/firefox-profile/node_modules/fs-extra": { + "version": "11.3.0", + "dev": true, + "license": "MIT", + "dependencies": { + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + }, + "engines": { + "node": ">=14.14" + } + }, + "../node_modules/first-chunk-stream": { + "version": "3.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "../node_modules/flat-cache": { + "version": "3.2.0", + "dev": true, + "license": "MIT", + "dependencies": { + "flatted": "^3.2.9", + "keyv": "^4.5.3", + "rimraf": "^3.0.2" + }, + "engines": { + "node": "^10.12.0 || >=12.0.0" + } + }, + "../node_modules/flatted": { + "version": "3.3.3", + "dev": true, + "license": "ISC" + }, + "../node_modules/for-each": { + "version": "0.3.5", + "dev": true, + "license": "MIT", + "dependencies": { + "is-callable": "^1.2.7" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "../node_modules/form-data": { + "version": "4.0.2", + "dev": true, + "license": "MIT", + "dependencies": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.8", + "es-set-tostringtag": "^2.1.0", + "mime-types": "^2.1.12" + }, + "engines": { + "node": ">= 6" + } + }, + "../node_modules/fs-constants": { + "version": "1.0.0", + "dev": true, + "license": "MIT" + }, + "../node_modules/fs-minipass": { + "version": "2.1.0", + "dev": true, + "license": "ISC", + "dependencies": { + "minipass": "^3.0.0" + }, + "engines": { + "node": ">= 8" + } + }, + "../node_modules/fs-minipass/node_modules/minipass": { + "version": "3.3.6", + "dev": true, + "license": "ISC", + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "../node_modules/fs-minipass/node_modules/yallist": { + "version": "4.0.0", + "dev": true, + "license": "ISC" + }, + "../node_modules/fs.realpath": { + "version": "1.0.0", + "dev": true, + "license": "ISC" + }, + "../node_modules/fsevents": { + "version": "2.3.3", + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^8.16.0 || ^10.6.0 || >=11.0.0" + } + }, + "../node_modules/function-bind": { + "version": "1.1.2", + "dev": true, + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "../node_modules/functions-have-names": { + "version": "1.2.3", + "dev": true, + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "../node_modules/fx-runner": { + "version": "1.4.0", + "dev": true, + "license": "MPL-2.0", + "dependencies": { + "commander": "2.9.0", + "shell-quote": "1.7.3", + "spawn-sync": "1.0.15", + "when": "3.7.7", + "which": "1.2.4", + "winreg": "0.0.12" + }, + "bin": { + "fx-runner": "bin/fx-runner" + } + }, + "../node_modules/fx-runner/node_modules/commander": { + "version": "2.9.0", + "dev": true, + "license": "MIT", + "dependencies": { + "graceful-readlink": ">= 1.0.0" + }, + "engines": { + "node": ">= 0.6.x" + } + }, + "../node_modules/fx-runner/node_modules/isexe": { + "version": "1.1.2", + "dev": true, + "license": "ISC" + }, + "../node_modules/fx-runner/node_modules/which": { + "version": "1.2.4", + "dev": true, + "license": "ISC", + "dependencies": { + "is-absolute": "^0.1.7", + "isexe": "^1.1.1" + }, + "bin": { + "which": "bin/which" + } + }, + "../node_modules/gensync": { + "version": "1.0.0-beta.2", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "../node_modules/get-caller-file": { + "version": "2.0.5", + "dev": true, + "license": "ISC", + "engines": { + "node": "6.* || 8.* || >= 10.*" + } + }, + "../node_modules/get-east-asian-width": { + "version": "1.3.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "../node_modules/get-intrinsic": { + "version": "1.3.0", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind-apply-helpers": "^1.0.2", + "es-define-property": "^1.0.1", + "es-errors": "^1.3.0", + "es-object-atoms": "^1.1.1", + "function-bind": "^1.1.2", + "get-proto": "^1.0.1", + "gopd": "^1.2.0", + "has-symbols": "^1.1.0", + "hasown": "^2.0.2", + "math-intrinsics": "^1.1.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "../node_modules/get-proto": { + "version": "1.0.1", + "dev": true, + "license": "MIT", + "dependencies": { + "dunder-proto": "^1.0.1", + "es-object-atoms": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "../node_modules/glob": { + "version": "7.2.3", + "dev": true, + "license": "ISC", + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.1.1", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "../node_modules/glob-parent": { + "version": "6.0.2", + "dev": true, + "license": "ISC", + "dependencies": { + "is-glob": "^4.0.3" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "../node_modules/glob-to-regexp": { + "version": "0.4.1", + "dev": true, + "license": "BSD-2-Clause" + }, + "../node_modules/glob/node_modules/brace-expansion": { + "version": "1.1.11", + "dev": true, + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "../node_modules/glob/node_modules/minimatch": { + "version": "3.1.2", + "dev": true, + "license": "ISC", + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "../node_modules/global-directory": { + "version": "4.0.1", + "dev": true, + "license": "MIT", + "dependencies": { + "ini": "4.1.1" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "../node_modules/global-directory/node_modules/ini": { + "version": "4.1.1", + "dev": true, + "license": "ISC", + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "../node_modules/globals": { + "version": "11.12.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "../node_modules/gopd": { + "version": "1.2.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "../node_modules/graceful-fs": { + "version": "4.2.11", + "dev": true, + "license": "ISC" + }, + "../node_modules/graceful-readlink": { + "version": "1.0.1", + "dev": true, + "license": "MIT" + }, + "../node_modules/graphemer": { + "version": "1.4.0", + "dev": true, + "license": "MIT" + }, + "../node_modules/growly": { + "version": "1.3.0", + "dev": true, + "license": "MIT" + }, + "../node_modules/has-bigints": { + "version": "1.1.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "../node_modules/has-flag": { + "version": "4.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "../node_modules/has-property-descriptors": { + "version": "1.0.2", + "dev": true, + "license": "MIT", + "dependencies": { + "es-define-property": "^1.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "../node_modules/has-symbols": { + "version": "1.1.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "../node_modules/has-tostringtag": { + "version": "1.0.2", + "dev": true, + "license": "MIT", + "dependencies": { + "has-symbols": "^1.0.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "../node_modules/hasown": { + "version": "2.0.2", + "dev": true, + "license": "MIT", + "dependencies": { + "function-bind": "^1.1.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "../node_modules/htm": { + "version": "3.1.1", + "dev": true, + "license": "Apache-2.0" + }, + "../node_modules/html-encoding-sniffer": { + "version": "4.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "whatwg-encoding": "^3.1.1" + }, + "engines": { + "node": ">=18" + } + }, + "../node_modules/htmlparser2": { + "version": "8.0.2", + "dev": true, + "funding": [ + "https://github.com/fb55/htmlparser2?sponsor=1", + { + "type": "github", + "url": "https://github.com/sponsors/fb55" + } + ], + "license": "MIT", + "dependencies": { + "domelementtype": "^2.3.0", + "domhandler": "^5.0.3", + "domutils": "^3.0.1", + "entities": "^4.4.0" + } + }, + "../node_modules/http-proxy-agent": { + "version": "7.0.2", + "dev": true, + "license": "MIT", + "dependencies": { + "agent-base": "^7.1.0", + "debug": "^4.3.4" + }, + "engines": { + "node": ">= 14" + } + }, + "../node_modules/https-proxy-agent": { + "version": "7.0.6", + "dev": true, + "license": "MIT", + "dependencies": { + "agent-base": "^7.1.2", + "debug": "4" + }, + "engines": { + "node": ">= 14" + } + }, + "../node_modules/iconv-lite": { + "version": "0.6.3", + "dev": true, + "license": "MIT", + "dependencies": { + "safer-buffer": ">= 2.1.2 < 3.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "../node_modules/ieee754": { + "version": "1.2.1", + "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", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 4" + } + }, + "../node_modules/image-size": { + "version": "2.0.1", + "dev": true, + "license": "MIT", + "bin": { + "image-size": "bin/image-size.js" + }, + "engines": { + "node": ">=16.x" + } + }, + "../node_modules/immediate": { + "version": "3.0.6", + "dev": true, + "license": "MIT" + }, + "../node_modules/import-fresh": { + "version": "3.3.1", + "dev": true, + "license": "MIT", + "dependencies": { + "parent-module": "^1.0.0", + "resolve-from": "^4.0.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "../node_modules/imurmurhash": { + "version": "0.1.4", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.8.19" + } + }, + "../node_modules/inflight": { + "version": "1.0.6", + "dev": true, + "license": "ISC", + "dependencies": { + "once": "^1.3.0", + "wrappy": "1" + } + }, + "../node_modules/inherits": { + "version": "2.0.4", + "dev": true, + "license": "ISC" + }, + "../node_modules/ini": { + "version": "4.1.3", + "dev": true, + "license": "ISC", + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "../node_modules/internal-slot": { + "version": "1.1.0", + "dev": true, + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0", + "hasown": "^2.0.2", + "side-channel": "^1.1.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "../node_modules/is-absolute": { + "version": "0.1.7", + "dev": true, + "license": "MIT", + "dependencies": { + "is-relative": "^0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "../node_modules/is-arguments": { + "version": "1.2.0", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.2", + "has-tostringtag": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "../node_modules/is-array-buffer": { + "version": "3.0.5", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.8", + "call-bound": "^1.0.3", + "get-intrinsic": "^1.2.6" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "../node_modules/is-arrayish": { + "version": "0.2.1", + "dev": true, + "license": "MIT" + }, + "../node_modules/is-bigint": { + "version": "1.1.0", + "dev": true, + "license": "MIT", + "dependencies": { + "has-bigints": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "../node_modules/is-boolean-object": { + "version": "1.2.2", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.3", + "has-tostringtag": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "../node_modules/is-callable": { + "version": "1.2.7", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "../node_modules/is-date-object": { + "version": "1.1.0", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.2", + "has-tostringtag": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "../node_modules/is-docker": { + "version": "2.2.1", + "dev": true, + "license": "MIT", + "bin": { + "is-docker": "cli.js" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "../node_modules/is-extglob": { + "version": "2.1.1", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "../node_modules/is-fullwidth-code-point": { + "version": "3.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "../node_modules/is-glob": { + "version": "4.0.3", + "dev": true, + "license": "MIT", + "dependencies": { + "is-extglob": "^2.1.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "../node_modules/is-in-ci": { + "version": "1.0.0", + "dev": true, + "license": "MIT", + "bin": { + "is-in-ci": "cli.js" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "../node_modules/is-inside-container": { + "version": "1.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "is-docker": "^3.0.0" + }, + "bin": { + "is-inside-container": "cli.js" + }, + "engines": { + "node": ">=14.16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "../node_modules/is-inside-container/node_modules/is-docker": { + "version": "3.0.0", + "dev": true, + "license": "MIT", + "bin": { + "is-docker": "cli.js" + }, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "../node_modules/is-installed-globally": { + "version": "1.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "global-directory": "^4.0.1", + "is-path-inside": "^4.0.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "../node_modules/is-installed-globally/node_modules/is-path-inside": { + "version": "4.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "../node_modules/is-map": { + "version": "2.0.3", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "../node_modules/is-npm": { + "version": "6.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "../node_modules/is-number-object": { + "version": "1.1.1", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.3", + "has-tostringtag": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "../node_modules/is-path-inside": { + "version": "3.0.3", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "../node_modules/is-potential-custom-element-name": { + "version": "1.0.1", + "dev": true, + "license": "MIT" + }, + "../node_modules/is-regex": { + "version": "1.2.1", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.2", + "gopd": "^1.2.0", + "has-tostringtag": "^1.0.2", + "hasown": "^2.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "../node_modules/is-relative": { + "version": "0.1.3", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "../node_modules/is-set": { + "version": "2.0.3", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "../node_modules/is-shared-array-buffer": { + "version": "1.0.4", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "../node_modules/is-stream": { + "version": "2.0.1", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "../node_modules/is-string": { + "version": "1.1.1", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.3", + "has-tostringtag": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "../node_modules/is-symbol": { + "version": "1.1.1", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.2", + "has-symbols": "^1.1.0", + "safe-regex-test": "^1.1.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "../node_modules/is-utf8": { + "version": "0.2.1", + "dev": true, + "license": "MIT" + }, + "../node_modules/is-weakmap": { + "version": "2.0.2", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "../node_modules/is-weakset": { + "version": "2.0.4", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.3", + "get-intrinsic": "^1.2.6" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "../node_modules/is-wsl": { + "version": "2.2.0", + "dev": true, + "license": "MIT", + "dependencies": { + "is-docker": "^2.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "../node_modules/isarray": { + "version": "2.0.5", + "dev": true, + "license": "MIT" + }, + "../node_modules/isexe": { + "version": "2.0.0", + "dev": true, + "license": "ISC" + }, + "../node_modules/jiti": { + "version": "2.5.1", + "dev": true, + "license": "MIT", + "bin": { + "jiti": "lib/jiti-cli.mjs" + } + }, + "../node_modules/jose": { + "version": "5.9.6", + "dev": true, + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/panva" + } + }, + "../node_modules/js-tokens": { + "version": "4.0.0", + "dev": true, + "license": "MIT" + }, + "../node_modules/js-yaml": { + "version": "4.1.0", + "dev": true, + "license": "MIT", + "dependencies": { + "argparse": "^2.0.1" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, + "../node_modules/jsdom": { + "version": "26.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "cssstyle": "^4.2.1", + "data-urls": "^5.0.0", + "decimal.js": "^10.4.3", + "form-data": "^4.0.1", + "html-encoding-sniffer": "^4.0.0", + "http-proxy-agent": "^7.0.2", + "https-proxy-agent": "^7.0.6", + "is-potential-custom-element-name": "^1.0.1", + "nwsapi": "^2.2.16", + "parse5": "^7.2.1", + "rrweb-cssom": "^0.8.0", + "saxes": "^6.0.0", + "symbol-tree": "^3.2.4", + "tough-cookie": "^5.0.0", + "w3c-xmlserializer": "^5.0.0", + "webidl-conversions": "^7.0.0", + "whatwg-encoding": "^3.1.1", + "whatwg-mimetype": "^4.0.0", + "whatwg-url": "^14.1.0", + "ws": "^8.18.0", + "xml-name-validator": "^5.0.0" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "canvas": "^3.0.0" + }, + "peerDependenciesMeta": { + "canvas": { + "optional": true + } + } + }, + "../node_modules/jsesc": { + "version": "3.1.0", + "dev": true, + "license": "MIT", + "bin": { + "jsesc": "bin/jsesc" + }, + "engines": { + "node": ">=6" + } + }, + "../node_modules/json-buffer": { + "version": "3.0.1", + "dev": true, + "license": "MIT" + }, + "../node_modules/json-merge-patch": { + "version": "1.0.2", + "dev": true, + "license": "MIT", + "dependencies": { + "fast-deep-equal": "^3.1.3" + } + }, + "../node_modules/json-schema-traverse": { + "version": "0.4.1", + "dev": true, + "license": "MIT" + }, + "../node_modules/json-stable-stringify-without-jsonify": { + "version": "1.0.1", + "dev": true, + "license": "MIT" + }, + "../node_modules/json5": { + "version": "2.2.3", + "dev": true, + "license": "MIT", + "bin": { + "json5": "lib/cli.js" + }, + "engines": { + "node": ">=6" + } + }, + "../node_modules/jsonfile": { + "version": "6.1.0", + "dev": true, + "license": "MIT", + "dependencies": { + "universalify": "^2.0.0" + }, + "optionalDependencies": { + "graceful-fs": "^4.1.6" + } + }, + "../node_modules/jszip": { + "version": "3.10.1", + "dev": true, + "license": "(MIT OR GPL-3.0-or-later)", + "dependencies": { + "lie": "~3.3.0", + "pako": "~1.0.2", + "readable-stream": "~2.3.6", + "setimmediate": "^1.0.5" + } + }, + "../node_modules/jszip/node_modules/isarray": { + "version": "1.0.0", + "dev": true, + "license": "MIT" + }, + "../node_modules/jszip/node_modules/readable-stream": { + "version": "2.3.8", + "dev": true, + "license": "MIT", + "dependencies": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "../node_modules/jszip/node_modules/safe-buffer": { + "version": "5.1.2", + "dev": true, + "license": "MIT" + }, + "../node_modules/jszip/node_modules/string_decoder": { + "version": "1.1.1", + "dev": true, + "license": "MIT", + "dependencies": { + "safe-buffer": "~5.1.0" + } + }, + "../node_modules/keyv": { + "version": "4.5.4", + "dev": true, + "license": "MIT", + "dependencies": { + "json-buffer": "3.0.1" + } + }, + "../node_modules/kolorist": { + "version": "1.8.0", + "dev": true, + "license": "MIT" + }, + "../node_modules/ky": { + "version": "1.7.5", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sindresorhus/ky?sponsor=1" + } + }, + "../node_modules/latest-version": { + "version": "9.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "package-json": "^10.0.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "../node_modules/lazystream": { + "version": "1.0.1", + "dev": true, + "license": "MIT", + "dependencies": { + "readable-stream": "^2.0.5" + }, + "engines": { + "node": ">= 0.6.3" + } + }, + "../node_modules/lazystream/node_modules/isarray": { + "version": "1.0.0", + "dev": true, + "license": "MIT" + }, + "../node_modules/lazystream/node_modules/readable-stream": { + "version": "2.3.8", + "dev": true, + "license": "MIT", + "dependencies": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "../node_modules/lazystream/node_modules/safe-buffer": { + "version": "5.1.2", + "dev": true, + "license": "MIT" + }, + "../node_modules/lazystream/node_modules/string_decoder": { + "version": "1.1.1", + "dev": true, + "license": "MIT", + "dependencies": { + "safe-buffer": "~5.1.0" + } + }, + "../node_modules/levn": { + "version": "0.4.1", + "dev": true, + "license": "MIT", + "dependencies": { + "prelude-ls": "^1.2.1", + "type-check": "~0.4.0" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "../node_modules/lie": { + "version": "3.3.0", + "dev": true, + "license": "MIT", + "dependencies": { + "immediate": "~3.0.5" + } + }, + "../node_modules/lighthouse-logger": { + "version": "2.0.1", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "debug": "^2.6.9", + "marky": "^1.2.2" + } + }, + "../node_modules/lighthouse-logger/node_modules/debug": { + "version": "2.6.9", + "dev": true, + "license": "MIT", + "dependencies": { + "ms": "2.0.0" + } + }, + "../node_modules/lighthouse-logger/node_modules/ms": { + "version": "2.0.0", + "dev": true, + "license": "MIT" + }, + "../node_modules/lightningcss": { + "version": "1.29.3", + "dev": true, + "license": "MPL-2.0", + "peer": true, + "dependencies": { + "detect-libc": "^2.0.3" + }, + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + }, + "optionalDependencies": { + "lightningcss-darwin-arm64": "1.29.3", + "lightningcss-darwin-x64": "1.29.3", + "lightningcss-freebsd-x64": "1.29.3", + "lightningcss-linux-arm-gnueabihf": "1.29.3", + "lightningcss-linux-arm64-gnu": "1.29.3", + "lightningcss-linux-arm64-musl": "1.29.3", + "lightningcss-linux-x64-gnu": "1.29.3", + "lightningcss-linux-x64-musl": "1.29.3", + "lightningcss-win32-arm64-msvc": "1.29.3", + "lightningcss-win32-x64-msvc": "1.29.3" + } + }, + "../node_modules/lightningcss-darwin-arm64": { + "version": "1.29.3", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MPL-2.0", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "../node_modules/lightningcss-darwin-x64": { + "dev": true, + "optional": true + }, + "../node_modules/lightningcss-freebsd-x64": { + "dev": true, + "optional": true + }, + "../node_modules/lightningcss-linux-arm-gnueabihf": { + "dev": true, + "optional": true + }, + "../node_modules/lightningcss-linux-arm64-gnu": { + "dev": true, + "optional": true + }, + "../node_modules/lightningcss-linux-arm64-musl": { + "dev": true, + "optional": true + }, + "../node_modules/lightningcss-linux-x64-gnu": { + "dev": true, + "optional": true + }, + "../node_modules/lightningcss-linux-x64-musl": { + "dev": true, + "optional": true + }, + "../node_modules/lightningcss-win32-arm64-msvc": { + "dev": true, + "optional": true + }, + "../node_modules/lightningcss-win32-x64-msvc": { + "dev": true, + "optional": true + }, + "../node_modules/locate-path": { + "version": "6.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "p-locate": "^5.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "../node_modules/lodash": { + "version": "4.17.21", + "dev": true, + "license": "MIT" + }, + "../node_modules/lodash.defaults": { + "version": "4.2.0", + "dev": true, + "license": "MIT" + }, + "../node_modules/lodash.difference": { + "version": "4.5.0", + "dev": true, + "license": "MIT" + }, + "../node_modules/lodash.flatten": { + "version": "4.4.0", + "dev": true, + "license": "MIT" + }, + "../node_modules/lodash.isplainobject": { + "version": "4.0.6", + "dev": true, + "license": "MIT" + }, + "../node_modules/lodash.merge": { + "version": "4.6.2", + "dev": true, + "license": "MIT" + }, + "../node_modules/lodash.union": { + "version": "4.6.0", + "dev": true, + "license": "MIT" + }, + "../node_modules/lru-cache": { + "version": "5.1.1", + "dev": true, + "license": "ISC", + "dependencies": { + "yallist": "^3.0.2" + } + }, + "../node_modules/lz-string": { + "version": "1.5.0", + "dev": true, + "license": "MIT", + "bin": { + "lz-string": "bin/bin.js" + } + }, + "../node_modules/make-error": { + "version": "1.3.6", + "dev": true, + "license": "ISC" + }, + "../node_modules/marky": { + "version": "1.2.5", + "dev": true, + "license": "Apache-2.0" + }, + "../node_modules/math-intrinsics": { + "version": "1.1.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, + "../node_modules/merge-stream": { + "version": "2.0.0", + "dev": true, + "license": "MIT" + }, + "../node_modules/mime-db": { + "version": "1.52.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "../node_modules/mime-types": { + "version": "2.1.35", + "dev": true, + "license": "MIT", + "dependencies": { + "mime-db": "1.52.0" + }, + "engines": { + "node": ">= 0.6" + } + }, + "../node_modules/mimic-fn": { + "version": "2.1.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "../node_modules/minimist": { + "version": "1.2.8", + "dev": true, + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "../node_modules/minipass": { + "version": "4.2.8", + "dev": true, + "license": "ISC", + "engines": { + "node": ">=8" + } + }, + "../node_modules/minizlib": { + "version": "2.1.2", + "dev": true, + "license": "MIT", + "dependencies": { + "minipass": "^3.0.0", + "yallist": "^4.0.0" + }, + "engines": { + "node": ">= 8" + } + }, + "../node_modules/minizlib/node_modules/minipass": { + "version": "3.3.6", + "dev": true, + "license": "ISC", + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "../node_modules/minizlib/node_modules/yallist": { + "version": "4.0.0", + "dev": true, + "license": "ISC" + }, + "../node_modules/mkdirp": { + "version": "1.0.4", + "dev": true, + "license": "MIT", + "bin": { + "mkdirp": "bin/cmd.js" + }, + "engines": { + "node": ">=10" + } + }, + "../node_modules/mri": { + "version": "1.2.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "../node_modules/ms": { + "version": "2.1.3", + "dev": true, + "license": "MIT" + }, + "../node_modules/multimatch": { + "version": "6.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/minimatch": "^3.0.5", + "array-differ": "^4.0.0", + "array-union": "^3.0.1", + "minimatch": "^3.0.4" + }, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "../node_modules/multimatch/node_modules/array-union": { + "version": "3.0.1", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "../node_modules/multimatch/node_modules/brace-expansion": { + "version": "1.1.11", + "dev": true, + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "../node_modules/multimatch/node_modules/minimatch": { + "version": "3.1.2", + "dev": true, + "license": "ISC", + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "../node_modules/nanoid": { + "version": "3.3.11", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "bin": { + "nanoid": "bin/nanoid.cjs" + }, + "engines": { + "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" + } + }, + "../node_modules/natural-compare": { + "version": "1.4.0", + "dev": true, + "license": "MIT" + }, + "../node_modules/node-forge": { + "version": "1.3.1", + "dev": true, + "license": "(BSD-3-Clause OR GPL-2.0)", + "engines": { + "node": ">= 6.13.0" + } + }, + "../node_modules/node-notifier": { + "version": "10.0.1", + "dev": true, + "license": "MIT", + "dependencies": { + "growly": "^1.3.0", + "is-wsl": "^2.2.0", + "semver": "^7.3.5", + "shellwords": "^0.1.1", + "uuid": "^8.3.2", + "which": "^2.0.2" + } + }, + "../node_modules/node-notifier/node_modules/semver": { + "version": "7.7.1", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "../node_modules/node-releases": { + "version": "2.0.19", + "dev": true, + "license": "MIT" + }, + "../node_modules/normalize-path": { + "version": "3.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "../node_modules/npm-run-path": { + "version": "4.0.1", + "dev": true, + "license": "MIT", + "dependencies": { + "path-key": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "../node_modules/nth-check": { + "version": "2.1.1", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "boolbase": "^1.0.0" + }, + "funding": { + "url": "https://github.com/fb55/nth-check?sponsor=1" + } + }, + "../node_modules/nwsapi": { + "version": "2.2.19", + "dev": true, + "license": "MIT" + }, + "../node_modules/object-inspect": { + "version": "1.13.4", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "../node_modules/object-is": { + "version": "1.1.6", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.7", + "define-properties": "^1.2.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "../node_modules/object-keys": { + "version": "1.1.1", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, + "../node_modules/object.assign": { + "version": "4.1.7", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.8", + "call-bound": "^1.0.3", + "define-properties": "^1.2.1", + "es-object-atoms": "^1.0.0", + "has-symbols": "^1.1.0", + "object-keys": "^1.1.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "../node_modules/on-exit-leak-free": { + "version": "2.1.2", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=14.0.0" + } + }, + "../node_modules/once": { + "version": "1.4.0", + "dev": true, + "license": "ISC", + "dependencies": { + "wrappy": "1" + } + }, + "../node_modules/onetime": { + "version": "5.1.2", + "dev": true, + "license": "MIT", + "dependencies": { + "mimic-fn": "^2.1.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "../node_modules/open": { + "version": "9.1.0", + "dev": true, + "license": "MIT", + "dependencies": { + "default-browser": "^4.0.0", + "define-lazy-prop": "^3.0.0", + "is-inside-container": "^1.0.0", + "is-wsl": "^2.2.0" + }, + "engines": { + "node": ">=14.16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "../node_modules/optionator": { + "version": "0.9.4", + "dev": true, + "license": "MIT", + "dependencies": { + "deep-is": "^0.1.3", + "fast-levenshtein": "^2.0.6", + "levn": "^0.4.1", + "prelude-ls": "^1.2.1", + "type-check": "^0.4.0", + "word-wrap": "^1.2.5" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "../node_modules/os-shim": { + "version": "0.1.3", + "dev": true, + "engines": { + "node": ">= 0.4.0" + } + }, + "../node_modules/p-limit": { + "version": "3.1.0", + "dev": true, + "license": "MIT", + "dependencies": { + "yocto-queue": "^0.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "../node_modules/p-locate": { + "version": "5.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "p-limit": "^3.0.2" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "../node_modules/package-json": { + "version": "10.0.1", + "dev": true, + "license": "MIT", + "dependencies": { + "ky": "^1.2.0", + "registry-auth-token": "^5.0.2", + "registry-url": "^6.0.1", + "semver": "^7.6.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "../node_modules/package-json/node_modules/semver": { + "version": "7.7.1", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "../node_modules/pako": { + "version": "1.0.11", + "dev": true, + "license": "(MIT AND Zlib)" + }, + "../node_modules/parent-module": { + "version": "1.0.1", + "dev": true, + "license": "MIT", + "dependencies": { + "callsites": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "../node_modules/parse5": { + "version": "7.2.1", + "dev": true, + "license": "MIT", + "dependencies": { + "entities": "^4.5.0" + }, + "funding": { + "url": "https://github.com/inikulin/parse5?sponsor=1" + } + }, + "../node_modules/parse5-htmlparser2-tree-adapter": { + "version": "7.1.0", + "dev": true, + "license": "MIT", + "dependencies": { + "domhandler": "^5.0.3", + "parse5": "^7.0.0" + }, + "funding": { + "url": "https://github.com/inikulin/parse5?sponsor=1" + } + }, + "../node_modules/path-exists": { + "version": "4.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "../node_modules/path-is-absolute": { + "version": "1.0.1", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "../node_modules/path-key": { + "version": "3.1.1", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "../node_modules/pend": { + "version": "1.2.0", + "dev": true, + "license": "MIT" + }, + "../node_modules/picocolors": { + "version": "1.1.1", + "dev": true, + "license": "ISC" + }, + "../node_modules/picomatch": { + "version": "2.3.1", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8.6" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "../node_modules/pino": { + "version": "9.4.0", + "dev": true, + "license": "MIT", + "dependencies": { + "atomic-sleep": "^1.0.0", + "fast-redact": "^3.1.1", + "on-exit-leak-free": "^2.1.0", + "pino-abstract-transport": "^1.2.0", + "pino-std-serializers": "^7.0.0", + "process-warning": "^4.0.0", + "quick-format-unescaped": "^4.0.3", + "real-require": "^0.2.0", + "safe-stable-stringify": "^2.3.1", + "sonic-boom": "^4.0.1", + "thread-stream": "^3.0.0" + }, + "bin": { + "pino": "bin.js" + } + }, + "../node_modules/pino-abstract-transport": { + "version": "1.2.0", + "dev": true, + "license": "MIT", + "dependencies": { + "readable-stream": "^4.0.0", + "split2": "^4.0.0" + } + }, + "../node_modules/pino-abstract-transport/node_modules/buffer": { + "version": "6.0.3", + "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/pino-abstract-transport/node_modules/readable-stream": { + "version": "4.7.0", + "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": "^12.22.0 || ^14.17.0 || >=16.0.0" + } + }, + "../node_modules/pino-std-serializers": { + "version": "7.0.0", + "dev": true, + "license": "MIT" + }, + "../node_modules/playwright": { + "version": "1.51.1", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "playwright-core": "1.51.1" + }, + "bin": { + "playwright": "cli.js" + }, + "engines": { + "node": ">=18" + }, + "optionalDependencies": { + "fsevents": "2.3.2" + } + }, + "../node_modules/playwright-core": { + "version": "1.51.1", + "dev": true, + "license": "Apache-2.0", + "bin": { + "playwright-core": "cli.js" + }, + "engines": { + "node": ">=18" + } + }, + "../node_modules/playwright/node_modules/fsevents": { + "version": "2.3.2", + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^8.16.0 || ^10.6.0 || >=11.0.0" + } + }, + "../node_modules/possible-typed-array-names": { + "version": "1.1.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, + "../node_modules/postcss": { + "version": "8.5.3", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/postcss" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "dependencies": { + "nanoid": "^3.3.8", + "picocolors": "^1.1.1", + "source-map-js": "^1.2.1" + }, + "engines": { + "node": "^10 || ^12 || >=14" + } + }, + "../node_modules/preact": { + "version": "10.26.4", + "dev": true, + "license": "MIT", + "peer": true, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/preact" + } + }, + "../node_modules/prelude-ls": { + "version": "1.2.1", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.8.0" + } + }, + "../node_modules/pretty-format": { + "version": "27.5.1", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-regex": "^5.0.1", + "ansi-styles": "^5.0.0", + "react-is": "^17.0.1" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "../node_modules/pretty-format/node_modules/ansi-styles": { + "version": "5.2.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "../node_modules/process": { + "version": "0.11.10", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.6.0" + } + }, + "../node_modules/process-nextick-args": { + "version": "2.0.1", + "dev": true, + "license": "MIT" + }, + "../node_modules/process-warning": { + "version": "4.0.1", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/fastify" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/fastify" + } + ], + "license": "MIT" + }, + "../node_modules/promise-toolbox": { + "version": "0.21.0", + "dev": true, + "license": "ISC", + "dependencies": { + "make-error": "^1.3.2" + }, + "engines": { + "node": ">=6" + } + }, + "../node_modules/proto-list": { + "version": "1.2.4", + "dev": true, + "license": "ISC" + }, + "../node_modules/punycode": { + "version": "2.3.1", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "../node_modules/pupa": { + "version": "3.1.0", + "dev": true, + "license": "MIT", + "dependencies": { + "escape-goat": "^4.0.0" + }, + "engines": { + "node": ">=12.20" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "../node_modules/queue-microtask": { + "version": "1.2.3", + "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/quick-format-unescaped": { + "version": "4.0.4", + "dev": true, + "license": "MIT" + }, + "../node_modules/rc": { + "version": "1.2.8", + "dev": true, + "license": "(BSD-2-Clause OR MIT OR Apache-2.0)", + "dependencies": { + "deep-extend": "^0.6.0", + "ini": "~1.3.0", + "minimist": "^1.2.0", + "strip-json-comments": "~2.0.1" + }, + "bin": { + "rc": "cli.js" + } + }, + "../node_modules/rc/node_modules/ini": { + "version": "1.3.8", + "dev": true, + "license": "ISC" + }, + "../node_modules/rc/node_modules/strip-json-comments": { + "version": "2.0.1", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "../node_modules/react-is": { + "version": "17.0.2", + "dev": true, + "license": "MIT" + }, + "../node_modules/readable-stream": { + "version": "3.6.2", + "dev": true, + "license": "MIT", + "dependencies": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "../node_modules/readdir-glob": { + "version": "1.1.3", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "minimatch": "^5.1.0" + } + }, + "../node_modules/readdir-glob/node_modules/minimatch": { + "version": "5.1.6", + "dev": true, + "license": "ISC", + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=10" + } + }, + "../node_modules/real-require": { + "version": "0.2.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 12.13.0" + } + }, + "../node_modules/regenerator-runtime": { + "version": "0.14.1", + "dev": true, + "license": "MIT" + }, + "../node_modules/regexp.prototype.flags": { + "version": "1.5.4", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.8", + "define-properties": "^1.2.1", + "es-errors": "^1.3.0", + "get-proto": "^1.0.1", + "gopd": "^1.2.0", + "set-function-name": "^2.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "../node_modules/registry-auth-token": { + "version": "5.1.0", + "dev": true, + "license": "MIT", + "dependencies": { + "@pnpm/npm-conf": "^2.1.0" + }, + "engines": { + "node": ">=14" + } + }, + "../node_modules/registry-url": { + "version": "6.0.1", + "dev": true, + "license": "MIT", + "dependencies": { + "rc": "1.2.8" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "../node_modules/require-directory": { + "version": "2.1.1", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "../node_modules/require-from-string": { + "version": "2.0.2", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "../node_modules/resolve-from": { + "version": "4.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "../node_modules/reusify": { + "version": "1.1.0", + "dev": true, + "license": "MIT", + "engines": { + "iojs": ">=1.0.0", + "node": ">=0.10.0" + } + }, + "../node_modules/rimraf": { + "version": "3.0.2", + "dev": true, + "license": "ISC", + "dependencies": { + "glob": "^7.1.3" + }, + "bin": { + "rimraf": "bin.js" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "../node_modules/rollup": { + "version": "4.37.0", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/estree": "1.0.6" + }, + "bin": { + "rollup": "dist/bin/rollup" + }, + "engines": { + "node": ">=18.0.0", + "npm": ">=8.0.0" + }, + "optionalDependencies": { + "@rollup/rollup-android-arm-eabi": "4.37.0", + "@rollup/rollup-android-arm64": "4.37.0", + "@rollup/rollup-darwin-arm64": "4.37.0", + "@rollup/rollup-darwin-x64": "4.37.0", + "@rollup/rollup-freebsd-arm64": "4.37.0", + "@rollup/rollup-freebsd-x64": "4.37.0", + "@rollup/rollup-linux-arm-gnueabihf": "4.37.0", + "@rollup/rollup-linux-arm-musleabihf": "4.37.0", + "@rollup/rollup-linux-arm64-gnu": "4.37.0", + "@rollup/rollup-linux-arm64-musl": "4.37.0", + "@rollup/rollup-linux-loongarch64-gnu": "4.37.0", + "@rollup/rollup-linux-powerpc64le-gnu": "4.37.0", + "@rollup/rollup-linux-riscv64-gnu": "4.37.0", + "@rollup/rollup-linux-riscv64-musl": "4.37.0", + "@rollup/rollup-linux-s390x-gnu": "4.37.0", + "@rollup/rollup-linux-x64-gnu": "4.37.0", + "@rollup/rollup-linux-x64-musl": "4.37.0", + "@rollup/rollup-win32-arm64-msvc": "4.37.0", + "@rollup/rollup-win32-ia32-msvc": "4.37.0", + "@rollup/rollup-win32-x64-msvc": "4.37.0", + "fsevents": "~2.3.2" + } + }, + "../node_modules/rrweb-cssom": { + "version": "0.8.0", + "dev": true, + "license": "MIT" + }, + "../node_modules/run-applescript": { + "version": "5.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "execa": "^5.0.0" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "../node_modules/run-applescript/node_modules/execa": { + "version": "5.1.1", + "dev": true, + "license": "MIT", + "dependencies": { + "cross-spawn": "^7.0.3", + "get-stream": "^6.0.0", + "human-signals": "^2.1.0", + "is-stream": "^2.0.0", + "merge-stream": "^2.0.0", + "npm-run-path": "^4.0.1", + "onetime": "^5.1.2", + "signal-exit": "^3.0.3", + "strip-final-newline": "^2.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sindresorhus/execa?sponsor=1" + } + }, + "../node_modules/run-applescript/node_modules/get-stream": { + "version": "6.0.1", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "../node_modules/run-applescript/node_modules/human-signals": { + "version": "2.1.0", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=10.17.0" + } + }, + "../node_modules/run-parallel": { + "version": "1.2.0", + "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": { + "queue-microtask": "^1.2.2" + } + }, + "../node_modules/safe-buffer": { + "version": "5.2.1", + "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/safe-regex-test": { + "version": "1.1.0", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.2", + "es-errors": "^1.3.0", + "is-regex": "^1.2.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "../node_modules/safe-stable-stringify": { + "version": "2.5.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + } + }, + "../node_modules/safer-buffer": { + "version": "2.1.2", + "dev": true, + "license": "MIT" + }, + "../node_modules/sax": { + "version": "1.4.1", + "dev": true, + "license": "ISC" + }, + "../node_modules/saxes": { + "version": "6.0.0", + "dev": true, + "license": "ISC", + "dependencies": { + "xmlchars": "^2.2.0" + }, + "engines": { + "node": ">=v12.22.7" + } + }, + "../node_modules/semver": { + "version": "6.3.1", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + } + }, + "../node_modules/set-function-length": { + "version": "1.2.2", + "dev": true, + "license": "MIT", + "dependencies": { + "define-data-property": "^1.1.4", + "es-errors": "^1.3.0", + "function-bind": "^1.1.2", + "get-intrinsic": "^1.2.4", + "gopd": "^1.0.1", + "has-property-descriptors": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "../node_modules/set-function-name": { + "version": "2.0.2", + "dev": true, + "license": "MIT", + "dependencies": { + "define-data-property": "^1.1.4", + "es-errors": "^1.3.0", + "functions-have-names": "^1.2.3", + "has-property-descriptors": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "../node_modules/setimmediate": { + "version": "1.0.5", + "dev": true, + "license": "MIT" + }, + "../node_modules/shebang-command": { + "version": "2.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "shebang-regex": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "../node_modules/shebang-regex": { + "version": "3.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "../node_modules/shell-quote": { + "version": "1.7.3", + "dev": true, + "license": "MIT" + }, + "../node_modules/shellwords": { + "version": "0.1.1", + "dev": true, + "license": "MIT" + }, + "../node_modules/side-channel": { + "version": "1.1.0", + "dev": true, + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0", + "object-inspect": "^1.13.3", + "side-channel-list": "^1.0.0", + "side-channel-map": "^1.0.1", + "side-channel-weakmap": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "../node_modules/side-channel-list": { + "version": "1.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0", + "object-inspect": "^1.13.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "../node_modules/side-channel-map": { + "version": "1.0.1", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.2", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.5", + "object-inspect": "^1.13.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "../node_modules/side-channel-weakmap": { + "version": "1.0.2", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.2", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.5", + "object-inspect": "^1.13.3", + "side-channel-map": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "../node_modules/signal-exit": { + "version": "3.0.7", + "dev": true, + "license": "ISC" + }, + "../node_modules/sonic-boom": { + "version": "4.2.0", + "dev": true, + "license": "MIT", + "dependencies": { + "atomic-sleep": "^1.0.0" + } + }, + "../node_modules/source-map-js": { + "version": "1.2.1", + "dev": true, + "license": "BSD-3-Clause", + "engines": { + "node": ">=0.10.0" + } + }, + "../node_modules/source-map-support": { + "version": "0.5.21", + "dev": true, + "license": "MIT", + "dependencies": { + "buffer-from": "^1.0.0", + "source-map": "^0.6.0" + } + }, + "../node_modules/source-map-support/node_modules/source-map": { + "version": "0.6.1", + "dev": true, + "license": "BSD-3-Clause", + "engines": { + "node": ">=0.10.0" + } + }, + "../node_modules/spawn-sync": { + "version": "1.0.15", + "dev": true, + "hasInstallScript": true, + "license": "MIT", + "dependencies": { + "concat-stream": "^1.4.7", + "os-shim": "^0.1.2" + } + }, + "../node_modules/split": { + "version": "1.0.1", + "dev": true, + "license": "MIT", + "dependencies": { + "through": "2" + }, + "engines": { + "node": "*" + } + }, + "../node_modules/split2": { + "version": "4.2.0", + "dev": true, + "license": "ISC", + "engines": { + "node": ">= 10.x" + } + }, + "../node_modules/stop-iteration-iterator": { + "version": "1.1.0", + "dev": true, + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0", + "internal-slot": "^1.1.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "../node_modules/string_decoder": { + "version": "1.3.0", + "dev": true, + "license": "MIT", + "dependencies": { + "safe-buffer": "~5.2.0" + } + }, + "../node_modules/string-width": { + "version": "4.2.3", + "dev": true, + "license": "MIT", + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "../node_modules/strip-ansi": { + "version": "6.0.1", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "../node_modules/strip-bom": { + "version": "5.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "../node_modules/strip-bom-buf": { + "version": "2.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "is-utf8": "^0.2.1" + }, + "engines": { + "node": ">=8" + } + }, + "../node_modules/strip-bom-stream": { + "version": "4.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "first-chunk-stream": "^3.0.0", + "strip-bom-buf": "^2.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "../node_modules/strip-final-newline": { + "version": "2.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "../node_modules/strip-json-comments": { + "version": "3.1.1", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "../node_modules/stubborn-fs": { + "version": "1.2.5", + "dev": true + }, + "../node_modules/supports-color": { + "version": "7.2.0", + "dev": true, + "license": "MIT", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "../node_modules/symbol-tree": { + "version": "3.2.4", + "dev": true, + "license": "MIT" + }, + "../node_modules/tar": { + "version": "6.2.1", + "dev": true, + "license": "ISC", + "dependencies": { + "chownr": "^2.0.0", + "fs-minipass": "^2.0.0", + "minipass": "^5.0.0", + "minizlib": "^2.1.1", + "mkdirp": "^1.0.3", + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "../node_modules/tar-stream": { + "version": "2.2.0", + "dev": true, + "license": "MIT", + "dependencies": { + "bl": "^4.0.3", + "end-of-stream": "^1.4.1", + "fs-constants": "^1.0.0", + "inherits": "^2.0.3", + "readable-stream": "^3.1.1" + }, + "engines": { + "node": ">=6" + } + }, + "../node_modules/tar/node_modules/minipass": { + "version": "5.0.0", + "dev": true, + "license": "ISC", + "engines": { + "node": ">=8" + } + }, + "../node_modules/tar/node_modules/yallist": { + "version": "4.0.0", + "dev": true, + "license": "ISC" + }, + "../node_modules/text-table": { + "version": "0.2.0", + "dev": true, + "license": "MIT" + }, + "../node_modules/thread-stream": { + "version": "3.1.0", + "dev": true, + "license": "MIT", + "dependencies": { + "real-require": "^0.2.0" + } + }, + "../node_modules/through": { + "version": "2.3.8", + "dev": true, + "license": "MIT" + }, + "../node_modules/titleize": { + "version": "3.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "../node_modules/tldts": { + "version": "6.1.85", + "dev": true, + "license": "MIT", + "dependencies": { + "tldts-core": "^6.1.85" + }, + "bin": { + "tldts": "bin/cli.js" + } + }, + "../node_modules/tldts-core": { + "version": "6.1.85", + "dev": true, + "license": "MIT" + }, + "../node_modules/tmp": { + "version": "0.2.3", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=14.14" + } + }, + "../node_modules/tough-cookie": { + "version": "5.1.2", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "tldts": "^6.1.32" + }, + "engines": { + "node": ">=16" + } + }, + "../node_modules/tr46": { + "version": "5.1.0", + "dev": true, + "license": "MIT", + "dependencies": { + "punycode": "^2.3.1" + }, + "engines": { + "node": ">=18" + } + }, + "../node_modules/traverse": { + "version": "0.6.6", + "dev": true, + "license": "MIT" + }, + "../node_modules/tslib": { + "version": "2.8.1", + "dev": true, + "license": "0BSD" + }, + "../node_modules/type-check": { + "version": "0.4.0", + "dev": true, + "license": "MIT", + "dependencies": { + "prelude-ls": "^1.2.1" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "../node_modules/typedarray": { + "version": "0.0.6", + "dev": true, + "license": "MIT" + }, + "../node_modules/typescript": { + "version": "5.8.2", + "dev": true, + "license": "Apache-2.0", + "bin": { + "tsc": "bin/tsc", + "tsserver": "bin/tsserver" + }, + "engines": { + "node": ">=14.17" + } + }, + "../node_modules/undici-types": { + "version": "6.19.8", + "dev": true, + "license": "MIT" + }, + "../node_modules/universalify": { + "version": "2.0.1", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 10.0.0" + } + }, + "../node_modules/untildify": { + "version": "4.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "../node_modules/upath": { + "version": "2.0.1", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4", + "yarn": "*" + } + }, + "../node_modules/update-browserslist-db": { + "version": "1.1.3", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/browserslist" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "dependencies": { + "escalade": "^3.2.0", + "picocolors": "^1.1.1" + }, + "bin": { + "update-browserslist-db": "cli.js" + }, + "peerDependencies": { + "browserslist": ">= 4.21.0" + } + }, + "../node_modules/update-notifier": { + "version": "7.3.1", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "boxen": "^8.0.1", + "chalk": "^5.3.0", + "configstore": "^7.0.0", + "is-in-ci": "^1.0.0", + "is-installed-globally": "^1.0.0", + "is-npm": "^6.0.0", + "latest-version": "^9.0.0", + "pupa": "^3.1.0", + "semver": "^7.6.3", + "xdg-basedir": "^5.1.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/yeoman/update-notifier?sponsor=1" + } + }, + "../node_modules/update-notifier/node_modules/chalk": { + "version": "5.4.1", + "dev": true, + "license": "MIT", + "engines": { + "node": "^12.17.0 || ^14.13 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "../node_modules/update-notifier/node_modules/semver": { + "version": "7.7.1", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "../node_modules/uri-js": { + "version": "4.4.1", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "punycode": "^2.1.0" + } + }, + "../node_modules/util-deprecate": { + "version": "1.0.2", + "dev": true, + "license": "MIT" + }, + "../node_modules/uuid": { + "version": "8.3.2", + "dev": true, + "license": "MIT", + "bin": { + "uuid": "dist/bin/uuid" + } + }, + "../node_modules/vite": { + "version": "5.4.14", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "esbuild": "^0.21.3", + "postcss": "^8.4.43", + "rollup": "^4.20.0" + }, + "bin": { + "vite": "bin/vite.js" + }, + "engines": { + "node": "^18.0.0 || >=20.0.0" + }, + "funding": { + "url": "https://github.com/vitejs/vite?sponsor=1" + }, + "optionalDependencies": { + "fsevents": "~2.3.3" + }, + "peerDependencies": { + "@types/node": "^18.0.0 || >=20.0.0", + "less": "*", + "lightningcss": "^1.21.0", + "sass": "*", + "sass-embedded": "*", + "stylus": "*", + "sugarss": "*", + "terser": "^5.4.0" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + }, + "less": { + "optional": true + }, + "lightningcss": { + "optional": true + }, + "sass": { + "optional": true + }, + "sass-embedded": { + "optional": true + }, + "stylus": { + "optional": true + }, + "sugarss": { + "optional": true + }, + "terser": { + "optional": true + } + } + }, + "../node_modules/vite/node_modules/@esbuild/android-arm": { + "dev": true, + "optional": true + }, + "../node_modules/vite/node_modules/@esbuild/linux-loong64": { + "dev": true, + "optional": true + }, + "../node_modules/vite/node_modules/esbuild": { + "version": "0.21.5", + "dev": true, + "hasInstallScript": true, + "license": "MIT", + "bin": { + "esbuild": "bin/esbuild" + }, + "engines": { + "node": ">=12" + }, + "optionalDependencies": { + "@esbuild/aix-ppc64": "0.21.5", + "@esbuild/android-arm": "0.21.5", + "@esbuild/android-arm64": "0.21.5", + "@esbuild/android-x64": "0.21.5", + "@esbuild/darwin-arm64": "0.21.5", + "@esbuild/darwin-x64": "0.21.5", + "@esbuild/freebsd-arm64": "0.21.5", + "@esbuild/freebsd-x64": "0.21.5", + "@esbuild/linux-arm": "0.21.5", + "@esbuild/linux-arm64": "0.21.5", + "@esbuild/linux-ia32": "0.21.5", + "@esbuild/linux-loong64": "0.21.5", + "@esbuild/linux-mips64el": "0.21.5", + "@esbuild/linux-ppc64": "0.21.5", + "@esbuild/linux-riscv64": "0.21.5", + "@esbuild/linux-s390x": "0.21.5", + "@esbuild/linux-x64": "0.21.5", + "@esbuild/netbsd-x64": "0.21.5", + "@esbuild/openbsd-x64": "0.21.5", + "@esbuild/sunos-x64": "0.21.5", + "@esbuild/win32-arm64": "0.21.5", + "@esbuild/win32-ia32": "0.21.5", + "@esbuild/win32-x64": "0.21.5" + } + }, + "../node_modules/w3c-xmlserializer": { + "version": "5.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "xml-name-validator": "^5.0.0" + }, + "engines": { + "node": ">=18" + } + }, + "../node_modules/watchpack": { + "version": "2.4.2", + "dev": true, + "license": "MIT", + "dependencies": { + "glob-to-regexp": "^0.4.1", + "graceful-fs": "^4.1.2" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "../node_modules/wcwidth": { + "version": "1.0.1", + "dev": true, + "license": "MIT", + "dependencies": { + "defaults": "^1.0.3" + } + }, + "../node_modules/web-ext": { + "version": "8.5.0", + "dev": true, + "license": "MPL-2.0", + "dependencies": { + "@babel/runtime": "7.26.10", + "@devicefarmer/adbkit": "3.3.8", + "addons-linter": "7.9.0", + "camelcase": "8.0.0", + "chrome-launcher": "1.1.2", + "debounce": "1.2.1", + "decamelize": "6.0.0", + "es6-error": "4.1.1", + "firefox-profile": "4.7.0", + "fx-runner": "1.4.0", + "https-proxy-agent": "^7.0.0", + "jose": "5.9.6", + "jszip": "3.10.1", + "multimatch": "6.0.0", + "node-notifier": "10.0.1", + "open": "9.1.0", + "parse-json": "7.1.1", + "pino": "9.4.0", + "promise-toolbox": "0.21.0", + "source-map-support": "0.5.21", + "strip-bom": "5.0.0", + "strip-json-comments": "5.0.1", + "tmp": "0.2.3", + "update-notifier": "7.3.1", + "watchpack": "2.4.2", + "ws": "8.18.1", + "yargs": "17.7.2", + "zip-dir": "2.0.0" + }, + "bin": { + "web-ext": "bin/web-ext.js" + }, + "engines": { + "node": ">=18.0.0", + "npm": ">=8.0.0" + } + }, + "../node_modules/web-ext/node_modules/json-parse-even-better-errors": { + "version": "3.0.2", + "dev": true, + "license": "MIT", + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "../node_modules/web-ext/node_modules/lines-and-columns": { + "version": "2.0.4", + "dev": true, + "license": "MIT", + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + } + }, + "../node_modules/web-ext/node_modules/parse-json": { + "version": "7.1.1", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/code-frame": "^7.21.4", + "error-ex": "^1.3.2", + "json-parse-even-better-errors": "^3.0.0", + "lines-and-columns": "^2.0.3", + "type-fest": "^3.8.0" + }, + "engines": { + "node": ">=16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "../node_modules/web-ext/node_modules/strip-json-comments": { + "version": "5.0.1", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=14.16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "../node_modules/web-ext/node_modules/type-fest": { + "version": "3.13.1", + "dev": true, + "license": "(MIT OR CC0-1.0)", + "engines": { + "node": ">=14.16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "../node_modules/webidl-conversions": { + "version": "7.0.0", + "dev": true, + "license": "BSD-2-Clause", + "engines": { + "node": ">=12" + } + }, + "../node_modules/whatwg-encoding": { + "version": "3.1.1", + "dev": true, + "license": "MIT", + "dependencies": { + "iconv-lite": "0.6.3" + }, + "engines": { + "node": ">=18" + } + }, + "../node_modules/whatwg-mimetype": { + "version": "4.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + } + }, + "../node_modules/whatwg-url": { + "version": "14.2.0", + "dev": true, + "license": "MIT", + "dependencies": { + "tr46": "^5.1.0", + "webidl-conversions": "^7.0.0" + }, + "engines": { + "node": ">=18" + } + }, + "../node_modules/when": { + "version": "3.7.7", + "dev": true, + "license": "MIT" + }, + "../node_modules/when-exit": { + "version": "2.1.4", + "dev": true, + "license": "MIT" + }, + "../node_modules/which": { + "version": "2.0.2", + "dev": true, + "license": "ISC", + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "node-which": "bin/node-which" + }, + "engines": { + "node": ">= 8" + } + }, + "../node_modules/which-boxed-primitive": { + "version": "1.1.1", + "dev": true, + "license": "MIT", + "dependencies": { + "is-bigint": "^1.1.0", + "is-boolean-object": "^1.2.1", + "is-number-object": "^1.1.1", + "is-string": "^1.1.1", + "is-symbol": "^1.1.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "../node_modules/which-collection": { + "version": "1.0.2", + "dev": true, + "license": "MIT", + "dependencies": { + "is-map": "^2.0.3", + "is-set": "^2.0.3", + "is-weakmap": "^2.0.2", + "is-weakset": "^2.0.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "../node_modules/which-typed-array": { + "version": "1.1.19", + "dev": true, + "license": "MIT", + "dependencies": { + "available-typed-arrays": "^1.0.7", + "call-bind": "^1.0.8", + "call-bound": "^1.0.4", + "for-each": "^0.3.5", + "get-proto": "^1.0.1", + "gopd": "^1.2.0", + "has-tostringtag": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "../node_modules/widest-line": { + "version": "5.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "string-width": "^7.0.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "../node_modules/widest-line/node_modules/ansi-regex": { + "version": "6.1.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-regex?sponsor=1" + } + }, + "../node_modules/widest-line/node_modules/emoji-regex": { + "version": "10.4.0", + "dev": true, + "license": "MIT" + }, + "../node_modules/widest-line/node_modules/string-width": { + "version": "7.2.0", + "dev": true, + "license": "MIT", + "dependencies": { + "emoji-regex": "^10.3.0", + "get-east-asian-width": "^1.0.0", + "strip-ansi": "^7.1.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "../node_modules/widest-line/node_modules/strip-ansi": { + "version": "7.1.0", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-regex": "^6.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/strip-ansi?sponsor=1" + } + }, + "../node_modules/winreg": { + "version": "0.0.12", + "dev": true, + "license": "BSD" + }, + "../node_modules/word-wrap": { + "version": "1.2.5", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "../node_modules/wrap-ansi": { + "version": "7.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, + "../node_modules/wrappy": { + "version": "1.0.2", + "dev": true, + "license": "ISC" + }, + "../node_modules/ws": { + "version": "8.18.1", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10.0.0" + }, + "peerDependencies": { + "bufferutil": "^4.0.1", + "utf-8-validate": ">=5.0.2" + }, + "peerDependenciesMeta": { + "bufferutil": { + "optional": true + }, + "utf-8-validate": { + "optional": true + } + } + }, + "../node_modules/xdg-basedir": { + "version": "5.1.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "../node_modules/xml-name-validator": { + "version": "5.0.0", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=18" + } + }, + "../node_modules/xml2js": { + "version": "0.6.2", + "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", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4.0" + } + }, + "../node_modules/xmlchars": { + "version": "2.2.0", + "dev": true, + "license": "MIT" + }, + "../node_modules/y18n": { + "version": "5.0.8", + "dev": true, + "license": "ISC", + "engines": { + "node": ">=10" + } + }, + "../node_modules/yallist": { + "version": "3.1.1", + "dev": true, + "license": "ISC" + }, + "../node_modules/yargs": { + "version": "17.7.2", + "dev": true, + "license": "MIT", + "dependencies": { + "cliui": "^8.0.1", + "escalade": "^3.1.1", + "get-caller-file": "^2.0.5", + "require-directory": "^2.1.1", + "string-width": "^4.2.3", + "y18n": "^5.0.5", + "yargs-parser": "^21.1.1" + }, + "engines": { + "node": ">=12" + } + }, + "../node_modules/yargs-parser": { + "version": "21.1.1", + "dev": true, + "license": "ISC", + "engines": { + "node": ">=12" + } + }, + "../node_modules/yauzl": { + "version": "2.10.0", + "dev": true, + "license": "MIT", + "dependencies": { + "buffer-crc32": "~0.2.3", + "fd-slicer": "~1.1.0" + } + }, + "../node_modules/yocto-queue": { + "version": "0.1.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "../node_modules/zip-dir": { + "version": "2.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "async": "^3.2.0", + "jszip": "^3.2.2" + } + }, + "../node_modules/zip-stream": { + "version": "4.1.1", + "dev": true, + "license": "MIT", + "dependencies": { + "archiver-utils": "^3.0.4", + "compress-commons": "^4.1.2", + "readable-stream": "^3.6.0" + }, + "engines": { + "node": ">= 10" + } + }, + "../node_modules/zip-stream/node_modules/archiver-utils": { + "version": "3.0.4", + "dev": true, + "license": "MIT", + "dependencies": { + "glob": "^7.2.3", + "graceful-fs": "^4.2.0", + "lazystream": "^1.0.0", + "lodash.defaults": "^4.2.0", + "lodash.difference": "^4.5.0", + "lodash.flatten": "^4.4.0", + "lodash.isplainobject": "^4.0.6", + "lodash.union": "^4.6.0", + "normalize-path": "^3.0.0", + "readable-stream": "^3.6.0" + }, + "engines": { + "node": ">= 10" + } + }, + "node_modules/@alloc/quick-lru": { + "version": "5.2.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@babel/code-frame": { + "version": "7.26.2", + "resolved": "https://bnpm.byted.org/@babel/code-frame/-/code-frame-7.26.2.tgz", + "integrity": "sha512-RJlIHRueQgwWitWgF8OdFYGZX328Ax5BCemNGlqHfplnRT9ESi8JkFlvaVYbS+UubVY6dpv87Fs2u5M29iNFVQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-validator-identifier": "^7.25.9", + "js-tokens": "^4.0.0", + "picocolors": "^1.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-validator-identifier": { + "version": "7.29.7", + "resolved": "https://bnpm.byted.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.29.7.tgz", + "integrity": "sha512-qehxGkRj55h/ff8EMaJ+cYhyaKlHIxqYDn682wQD7RNp9UujOQsHog2uS0r2vzr4pW+sXf90NeeayjcNaX3fFg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@colordx/core": { + "version": "5.4.3", + "resolved": "https://bnpm.byted.org/@colordx/core/-/core-5.4.3.tgz", + "integrity": "sha512-kIxYSfA5T8HXjav55UaaH/o/cKivF6jCCGIb8eqtcsfI46wsvlSiT8jMDyrl779qLec3c2c2oHBZo4oAhvbjrQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/@emnapi/wasi-threads": { + "version": "1.2.2", + "resolved": "https://bnpm.byted.org/@emnapi/wasi-threads/-/wasi-threads-1.2.2.tgz", + "integrity": "sha512-c95qOXkHdydNKhscBTebqEC1CVAZpyqOfVfBzQ1qgzyl3gfeldUjIggDbIZgDKsHLgnsM+igH7TJ/eAasaVuMA==", + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "tslib": "^2.4.0" + } + }, + "node_modules/@isaacs/cliui": { + "version": "8.0.2", + "dev": true, + "license": "ISC", + "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" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/@isaacs/cliui/node_modules/ansi-regex": { + "version": "6.1.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-regex?sponsor=1" + } + }, + "node_modules/@isaacs/cliui/node_modules/strip-ansi": { + "version": "7.1.0", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-regex": "^6.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/strip-ansi?sponsor=1" + } + }, + "node_modules/@jest/pattern": { + "version": "30.4.0", + "resolved": "https://bnpm.byted.org/@jest/pattern/-/pattern-30.4.0.tgz", + "integrity": "sha512-RAWn3+f9u8BsHijKJ71uHcFp6vmyEt6VvoWXkl6hKF3qVIuWNmudVjg12DlBPGup/frIl5UcUlH5HfEuvHpEXg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/node": "*", + "jest-regex-util": "30.4.0" + }, + "engines": { + "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" + } + }, + "node_modules/@jest/schemas": { + "version": "30.4.1", + "resolved": "https://bnpm.byted.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/types": { + "version": "30.4.1", + "resolved": "https://bnpm.byted.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.12", + "dev": true, + "license": "MIT", + "dependencies": { + "@jridgewell/sourcemap-codec": "^1.5.0", + "@jridgewell/trace-mapping": "^0.3.24" + } + }, + "node_modules/@jridgewell/resolve-uri": { + "version": "3.1.2", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/source-map": { + "version": "0.3.11", + "resolved": "https://bnpm.byted.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.4", + "dev": true, + "license": "MIT" + }, + "node_modules/@jridgewell/trace-mapping": { + "version": "0.3.29", + "dev": true, + "license": "MIT", + "dependencies": { + "@jridgewell/resolve-uri": "^3.1.0", + "@jridgewell/sourcemap-codec": "^1.4.14" + } + }, + "node_modules/@lynx-js/cache-events-webpack-plugin": { + "version": "0.1.0", + "resolved": "https://bnpm.byted.org/@lynx-js/cache-events-webpack-plugin/-/cache-events-webpack-plugin-0.1.0.tgz", + "integrity": "sha512-VVPbWkmRegTGFoR/0b9A6hoiyUVy0O54PrKhc87cpV104krJiIfdO3KRuvGO2B1iBZu9ewWIuBGiSG52hSIqwA==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@lynx-js/webpack-runtime-globals": "^0.0.6" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/@lynx-js/chunk-loading-webpack-plugin": { + "version": "0.4.0", + "resolved": "https://bnpm.byted.org/@lynx-js/chunk-loading-webpack-plugin/-/chunk-loading-webpack-plugin-0.4.0.tgz", + "integrity": "sha512-ud56B1ZzX+ejthk8v7MjpTAOQpr7jC9ea//tgW3hrx36jGzZAmI9EIPoCqkLvUIoFqMXr2lsanh0WYMZ8LUBnw==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@lynx-js/webpack-runtime-globals": "0.0.6" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/@lynx-js/css-extract-webpack-plugin": { + "version": "0.8.0", + "resolved": "https://bnpm.byted.org/@lynx-js/css-extract-webpack-plugin/-/css-extract-webpack-plugin-0.8.0.tgz", + "integrity": "sha512-BXvd5OZfLEp6ekprCxp252ix9imiRAdDeRoZYV3g6TqnYUP9Rj6lj6SNuL/IQNElzzDaCY8o2E3tWjIaTdYULA==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "@lynx-js/template-webpack-plugin": "^0.11.0 || ^0.12.0" + } + }, + "node_modules/@lynx-js/css-serializer": { + "version": "0.1.6", + "resolved": "https://bnpm.byted.org/@lynx-js/css-serializer/-/css-serializer-0.1.6.tgz", + "integrity": "sha512-AgYrhsNljp+xBqO2UUGFTfHR+zPBiH9XE8eD13PDkcTDXWA9uKE/cZ6glZUE3Ze0lUDEtp0cSPCOVlHTMEyKIg==", + "dev": true, + "license": "Apache-2.0", + "peer": true, + "dependencies": { + "css-tree": "^3.1.0" + } + }, + "node_modules/@lynx-js/debug-metadata": { + "version": "0.1.0", + "resolved": "https://bnpm.byted.org/@lynx-js/debug-metadata/-/debug-metadata-0.1.0.tgz", + "integrity": "sha512-3N+Wgc/kIc4/aG5KpdPWKsC9MsNngygeyg9JS6IOayS8AQJ37xjVEzlz1U3aYzT9al0RJKL7w4poa0tGaXBv1g==", + "dev": true, + "license": "Apache-2.0", + "bin": { + "debug-metadata": "dist/cli.js" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/@lynx-js/debug-metadata-rsbuild-plugin": { + "version": "0.1.0", + "resolved": "https://bnpm.byted.org/@lynx-js/debug-metadata-rsbuild-plugin/-/debug-metadata-rsbuild-plugin-0.1.0.tgz", + "integrity": "sha512-ZEND+ZhVf4LpcZrBWMNk1lxibO7s12of9iFKkFdtUOHeJyGQN7bFEP36MVVgeHQWwfBg56rVyACkBc7BO2ypQw==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@lynx-js/debug-metadata": "^0.1.0" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/@lynx-js/preact-devtools": { + "resolved": "..", + "link": true + }, + "node_modules/@lynx-js/qrcode-rsbuild-plugin": { + "version": "0.5.0", + "resolved": "https://bnpm.byted.org/@lynx-js/qrcode-rsbuild-plugin/-/qrcode-rsbuild-plugin-0.5.0.tgz", + "integrity": "sha512-+cc2gsv02Cqa7+5Ard7Kow20N/KZC5BKZmEI/TEVTBV21jMyN+g0h4cNp344GwIzkSRG2G1J0YmxML3F/ArKRw==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": "^20.19.0 || >=22.12.0" + }, + "peerDependencies": { + "@lynx-js/rspeedy": "^0.15.0" + } + }, + "node_modules/@lynx-js/react": { + "version": "0.121.2", + "resolved": "https://bnpm.byted.org/@lynx-js/react/-/react-0.121.2.tgz", + "integrity": "sha512-Ruf5d2P0v1mXiZXbtxTOoR06Frfrs031Rp4bebnf1ZNW12PuXvnGa6n8gFi+ioJ4c1v9SUSpU40Fl/97TMgSRA==", + "peer": true, + "dependencies": { + "preact": "npm:@lynx-js/internal-preact@10.29.1-20260519060144-e6da44c" + }, + "peerDependencies": { + "@lynx-js/types": "*", + "@types/react": "^18" + }, + "peerDependenciesMeta": { + "@lynx-js/types": { + "optional": true + } + } + }, + "node_modules/@lynx-js/react-alias-rsbuild-plugin": { + "version": "0.17.0", + "resolved": "https://bnpm.byted.org/@lynx-js/react-alias-rsbuild-plugin/-/react-alias-rsbuild-plugin-0.17.0.tgz", + "integrity": "sha512-37tOmn5Wy8F5wfUqVBLGlnlamlyY5c2XHOTPkgIUq5k2CnoJZOe9FXOdE+0sOp9HeoXUDOmDWIuETgxg4cUpGA==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=18" + } + }, + "node_modules/@lynx-js/react-refresh-webpack-plugin": { + "version": "0.4.0", + "resolved": "https://bnpm.byted.org/@lynx-js/react-refresh-webpack-plugin/-/react-refresh-webpack-plugin-0.4.0.tgz", + "integrity": "sha512-HWkqou1JzmnTWhVQdRYn7KPfT23Rys8/H5x3gAoSEZcbuHi0INpCabuZNdEddk6PRe6NiUFjkW19Xm0/+qDMEw==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "@lynx-js/react-webpack-plugin": "^0.3.0 || ^0.4.0 || ^0.5.0 || ^0.6.0 || ^0.7.0 || ^0.8.0 || ^0.9.0" + } + }, + "node_modules/@lynx-js/react-rsbuild-plugin": { + "version": "0.17.0", + "resolved": "https://bnpm.byted.org/@lynx-js/react-rsbuild-plugin/-/react-rsbuild-plugin-0.17.0.tgz", + "integrity": "sha512-TEHdYV4nN8T6xugA9a2+deiijUmMgjb/p78qzJCdA1lZhadHrmvdDHxIkW1GrPcUgqi0qJ9hV2wav2Nr+vfd/A==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@lynx-js/css-extract-webpack-plugin": "0.8.0", + "@lynx-js/react-alias-rsbuild-plugin": "0.17.0", + "@lynx-js/react-refresh-webpack-plugin": "0.4.0", + "@lynx-js/react-webpack-plugin": "0.9.4", + "@lynx-js/runtime-wrapper-webpack-plugin": "0.2.0", + "@lynx-js/template-webpack-plugin": "0.12.0", + "@lynx-js/use-sync-external-store": "1.5.0", + "background-only": "^0.0.1", + "tiny-invariant": "^1.3.3" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "@lynx-js/react": "^0.103.0 || ^0.104.0 || ^0.105.0 || ^0.106.0 || ^0.107.0 || ^0.108.0 || ^0.109.0 || ^0.110.0 || ^0.111.0 || ^0.112.0 || ^0.113.0 || ^0.114.0 || ^0.115.0 || ^0.116.0 || ^0.117.0 || ^0.118.0 || ^0.119.0 || ^0.120.0 || ^0.121.0" + }, + "peerDependenciesMeta": { + "@lynx-js/react": { + "optional": true + } + } + }, + "node_modules/@lynx-js/react-webpack-plugin": { + "version": "0.9.4", + "resolved": "https://bnpm.byted.org/@lynx-js/react-webpack-plugin/-/react-webpack-plugin-0.9.4.tgz", + "integrity": "sha512-5+pp8VIO9f6X1OkFZQJ8PFFIM2h7EGfX5NIyD0JQUwG6YvpXasPHm6Y8R9AjmYWFr/9i3cx6GbKRp3lZf8rNMA==", + "dev": true, + "license": "Apache-2.0", + "peer": true, + "dependencies": { + "@lynx-js/debug-metadata": "^0.1.0", + "@lynx-js/webpack-runtime-globals": "0.0.6", + "tiny-invariant": "^1.3.3" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "@lynx-js/template-webpack-plugin": "^0.4.0 || ^0.5.0 || ^0.6.0 || ^0.7.0 || ^0.8.0 || ^0.9.0 || ^0.10.0 || ^0.11.0 || ^0.12.0" + }, + "peerDependenciesMeta": { + "@lynx-js/react": { + "optional": true + } + } + }, + "node_modules/@lynx-js/rspeedy": { + "version": "0.15.0", + "resolved": "https://bnpm.byted.org/@lynx-js/rspeedy/-/rspeedy-0.15.0.tgz", + "integrity": "sha512-kapJuvpelodGjVGCMPxPZ6jf9DRWuWZZBKlPG3ML1FfDZmo38NXRWmIuS6FMzDze6YtKbiYmXHKZ1bhILtJhFw==", + "dev": true, + "license": "Apache-2.0", + "peer": true, + "dependencies": { + "@lynx-js/cache-events-webpack-plugin": "^0.1.0", + "@lynx-js/chunk-loading-webpack-plugin": "^0.4.0", + "@lynx-js/debug-metadata-rsbuild-plugin": "^0.1.0", + "@lynx-js/web-rsbuild-server-middleware": "0.21.1", + "@lynx-js/webpack-dev-transport": "^0.3.0", + "@lynx-js/websocket": "^0.0.4", + "@rsbuild/core": "2.0.11", + "@rsbuild/plugin-css-minimizer": "2.0.0", + "@rsdoctor/rspack-plugin": "~1.5.6" + }, + "bin": { + "rspeedy": "bin/rspeedy.js" + }, + "engines": { + "node": "^20.19.0 || >=22.12.0" + }, + "peerDependencies": { + "typescript": "5.1.6 - 5.9.x" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/@lynx-js/runtime-wrapper-webpack-plugin": { + "version": "0.2.0", + "resolved": "https://bnpm.byted.org/@lynx-js/runtime-wrapper-webpack-plugin/-/runtime-wrapper-webpack-plugin-0.2.0.tgz", + "integrity": "sha512-/SdXXcHKyHiDdrA2zNWlyL21wik1WNx5udtCPiag+1oD550KXcVn6CiSXgkIjSdVIiDzhckmUaOmzfHQQ5NkJA==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@lynx-js/webpack-runtime-globals": "0.0.6" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/@lynx-js/tailwind-preset": { + "version": "0.1.2", + "dev": true, + "peerDependencies": { + "tailwindcss": "^3" + } + }, + "node_modules/@lynx-js/tasm": { + "version": "0.0.39", + "resolved": "https://bnpm.byted.org/@lynx-js/tasm/-/tasm-0.0.39.tgz", + "integrity": "sha512-FNIV6Cc2K0wCKOHVMfpr3M6kpIZqHHNI02GpVl+h0ClyyK44jxEO+lf58gLFD5E3o0hJ1cp3H2OBIxSUJGkPDw==", + "dev": true, + "license": "Apache-2.0", + "bin": { + "lynx-tasm": "cli.js" + } + }, + "node_modules/@lynx-js/template-webpack-plugin": { + "version": "0.12.0", + "resolved": "https://bnpm.byted.org/@lynx-js/template-webpack-plugin/-/template-webpack-plugin-0.12.0.tgz", + "integrity": "sha512-sLyo8w5Lu3cot4V/wJJWKc8XFsCrT7LoMdiGZwxhIpNv/riEUEGbFjz3ooW1OSV3nQv9Q3mfy6YPatQ/4m+I3A==", + "dev": true, + "license": "Apache-2.0", + "peer": true, + "dependencies": { + "@jridgewell/trace-mapping": "^0.3.29", + "@lynx-js/css-serializer": "0.1.6", + "@lynx-js/tasm": "0.0.39", + "@lynx-js/web-core": "0.21.1", + "@lynx-js/webpack-runtime-globals": "^0.0.6", + "@rspack/lite-tapable": "1.1.0", + "css-tree": "^3.1.0", + "object.groupby": "^1.0.3", + "tinypool": "^2.1.0" + }, + "engines": { + "node": "^18.14 || >=19.4" + } + }, + "node_modules/@lynx-js/types": { + "version": "3.7.0", + "resolved": "https://bnpm.byted.org/@lynx-js/types/-/types-3.7.0.tgz", + "integrity": "sha512-VEcz5HBJ8m938In1VJj2phR06cWyT0Tx+HnwBJrPINiuWPjN9YfrPl1lX87XWr3eMDhKZY+6F+5eFpJ7JFgjXw==", + "devOptional": true, + "license": "Apache-2.0", + "peer": true, + "dependencies": { + "csstype": "3.1.3" + } + }, + "node_modules/@lynx-js/use-sync-external-store": { + "version": "1.5.0", + "dev": true, + "license": "MIT", + "peerDependencies": { + "@lynx-js/react": "*" + } + }, + "node_modules/@lynx-js/web-core": { + "version": "0.21.1", + "resolved": "https://bnpm.byted.org/@lynx-js/web-core/-/web-core-0.21.1.tgz", + "integrity": "sha512-PfbUnZltJOYkL2d/VA58zhBpvdD3yYKEa2B06aJ0BQidfXF/MOUUVZiYcRfxMdd2NPw7xdG8V1B3yVR/+LMRag==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@lynx-js/web-elements": "0.12.4", + "@lynx-js/web-worker-rpc": "0.21.1", + "wasm-feature-detect": "^1.8.0" + }, + "peerDependencies": { + "@lynx-js/css-serializer": "0.1.6", + "@lynx-js/lynx-core": "0.1.3", + "tslib": "^2.5.0" + }, + "peerDependenciesMeta": { + "@lynx-js/css-serializer": { + "optional": true + }, + "@lynx-js/lynx-core": { + "optional": true + }, + "tslib": { + "optional": true + } + } + }, + "node_modules/@lynx-js/web-elements": { + "version": "0.12.4", + "resolved": "https://bnpm.byted.org/@lynx-js/web-elements/-/web-elements-0.12.4.tgz", + "integrity": "sha512-4xyJK3h8NDMYgeH488YgyLzAfxGN7TjtSaakKyVXdrbBiBEEGl2Pa8QDJl6cc8+p8fwDrj8ZsNCVgrJL+802oA==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "dompurify": "^3.3.1", + "markdown-it": "^14.1.0" + }, + "peerDependencies": { + "tslib": "^2.5.0" + } + }, + "node_modules/@lynx-js/web-rsbuild-server-middleware": { + "version": "0.21.1", + "resolved": "https://bnpm.byted.org/@lynx-js/web-rsbuild-server-middleware/-/web-rsbuild-server-middleware-0.21.1.tgz", + "integrity": "sha512-U9wiYo50HLQhQZfgA1PNQrxYLdsh7H7PqT6E9vI//G6fpO+dBh31XnzHIGt54ewVDS9cADZXFILOmHn+DboTiw==", + "dev": true, + "license": "Apache-2.0" + }, + "node_modules/@lynx-js/web-worker-rpc": { + "version": "0.21.1", + "resolved": "https://bnpm.byted.org/@lynx-js/web-worker-rpc/-/web-worker-rpc-0.21.1.tgz", + "integrity": "sha512-FuNt8mU3FWS7Gf6MycNqJXOfeQqWRRuw5QrBUn7fCcKMWgHvJO1kGWdS9vqQB5LJS24O9Rh6fc+OgUFzxoKcNA==", + "dev": true, + "license": "Apache-2.0" + }, + "node_modules/@lynx-js/webpack-dev-transport": { + "version": "0.3.0", + "resolved": "https://bnpm.byted.org/@lynx-js/webpack-dev-transport/-/webpack-dev-transport-0.3.0.tgz", + "integrity": "sha512-vpa0X/eqb50DhNhXEEfCi6gEd/ti32bFJtkt9zkPv6dTTsd2HJkYnCiKSUWpHpqPbnRbVLf/UacAY6h1uTtZeA==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=18" + } + }, + "node_modules/@lynx-js/webpack-runtime-globals": { + "version": "0.0.6", + "resolved": "https://bnpm.byted.org/@lynx-js/webpack-runtime-globals/-/webpack-runtime-globals-0.0.6.tgz", + "integrity": "sha512-VzpJc/w7v38/SHaZ+f3WBVBrsgXOG13YX9mRRxRrCgJQa+wZ6waRz7OIjntuTYJk2p7rQ0wKRGzsMgMfRBs/3g==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=18" + } + }, + "node_modules/@lynx-js/websocket": { + "version": "0.0.4", + "resolved": "https://bnpm.byted.org/@lynx-js/websocket/-/websocket-0.0.4.tgz", + "integrity": "sha512-yXuMiTALLNvkDz8hG+0KdkBodnyJDvyfr8bdIq6zMP9X8JAoBC/czc1HIhUgYEJ3Zee5F/vGKjNxcoSx2t1E6w==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "eventemitter3": "^5.0.1" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/@napi-rs/wasm-runtime": { + "version": "1.1.4", + "resolved": "https://bnpm.byted.org/@napi-rs/wasm-runtime/-/wasm-runtime-1.1.4.tgz", + "integrity": "sha512-3NQNNgA1YSlJb/kMH1ildASP9HW7/7kYnRI2szWJaofaS1hWmbGI4H+d3+22aGzXXN9IJ+n+GiFVcGipJP18ow==", + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "@tybys/wasm-util": "^0.10.1" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/Brooooooklyn" + }, + "peerDependencies": { + "@emnapi/core": "^1.7.1", + "@emnapi/runtime": "^1.7.1" + } + }, + "node_modules/@nodelib/fs.scandir": { + "version": "2.1.5", + "dev": true, + "license": "MIT", + "dependencies": { + "@nodelib/fs.stat": "2.0.5", + "run-parallel": "^1.1.9" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@nodelib/fs.stat": { + "version": "2.0.5", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 8" + } + }, + "node_modules/@nodelib/fs.walk": { + "version": "1.2.8", + "dev": true, + "license": "MIT", + "dependencies": { + "@nodelib/fs.scandir": "2.1.5", + "fastq": "^1.6.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@pkgjs/parseargs": { + "version": "0.11.0", + "dev": true, + "license": "MIT", + "optional": true, + "engines": { + "node": ">=14" + } + }, + "node_modules/@rsbuild/core": { + "version": "2.0.11", + "resolved": "https://bnpm.byted.org/@rsbuild/core/-/core-2.0.11.tgz", + "integrity": "sha512-Mpp/viUSkVdSWJkFipdZxM2nUztrBwSnMm6Q86bPzLHtHnXqQ3VFpSMlA4wWRyySNddP6s6efKiVpx0ZOCf7Gg==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "@rspack/core": "~2.0.6", + "@swc/helpers": "^0.5.23" + }, + "bin": { + "rsbuild": "bin/rsbuild.js" + }, + "engines": { + "node": "^20.19.0 || >=22.12.0" + }, + "peerDependencies": { + "core-js": ">= 3.0.0" + }, + "peerDependenciesMeta": { + "core-js": { + "optional": true + } + } + }, + "node_modules/@rsbuild/plugin-check-syntax": { + "version": "1.6.1", + "resolved": "https://bnpm.byted.org/@rsbuild/plugin-check-syntax/-/plugin-check-syntax-1.6.1.tgz", + "integrity": "sha512-26xtEYN0QjZYoyt0lWnvIztBWjEZJvcfw7MN4f5B4SpNggmnF7F7aNPrgkY3EccXVFx1VGQBhnCkBV//OoS07Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "acorn": "^8.15.0", + "browserslist-to-es-version": "^1.2.0", + "htmlparser2": "10.0.0", + "picocolors": "^1.1.1", + "source-map": "^0.7.6" + }, + "peerDependencies": { + "@rsbuild/core": "^1.0.0 || ^2.0.0-0" + }, + "peerDependenciesMeta": { + "@rsbuild/core": { + "optional": true + } + } + }, + "node_modules/@rsbuild/plugin-css-minimizer": { + "version": "2.0.0", + "resolved": "https://bnpm.byted.org/@rsbuild/plugin-css-minimizer/-/plugin-css-minimizer-2.0.0.tgz", + "integrity": "sha512-gSBkvOJP18JiaUuCyu4dPlEWY5aNTCJD3etsWqht9nO1l5cOBdLtq0vSu1SlLmhVS2b6fXlSs9+thMoHvSXwqw==", + "dev": true, + "license": "MIT", + "dependencies": { + "css-minimizer-webpack-plugin": "^8.0.0", + "reduce-configs": "^1.1.2" + }, + "peerDependencies": { + "@rsbuild/core": "^1.0.0 || ^2.0.0-0" + }, + "peerDependenciesMeta": { + "@rsbuild/core": { + "optional": true + } + } + }, + "node_modules/@rsdoctor/client": { + "version": "1.5.16", + "resolved": "https://bnpm.byted.org/@rsdoctor/client/-/client-1.5.16.tgz", + "integrity": "sha512-SskR2c06w+QTCrrhlN5wIjpVzJgqscQlMlYT3e/rSc2lH09lA1VBkKlgh2jy0OkE7FTZIO+9n6hdXM4qCAFOOA==", + "dev": true, + "license": "MIT" + }, + "node_modules/@rsdoctor/core": { + "version": "1.5.16", + "resolved": "https://bnpm.byted.org/@rsdoctor/core/-/core-1.5.16.tgz", + "integrity": "sha512-Sj9bJO3yRYvTn111pNFzADLrE9WJ8ZgOJertzeST4ueOSw4yeUkM9oMgj21p7NWYsM44C2vDuBIcerAHuxIkBA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@rsbuild/plugin-check-syntax": "^1.6.1", + "@rsdoctor/graph": "1.5.16", + "@rsdoctor/sdk": "1.5.16", + "@rsdoctor/types": "1.5.16", + "@rsdoctor/utils": "1.5.16", + "@rspack/resolver": "^0.2.8", + "browserslist-load-config": "^1.0.2", + "es-toolkit": "^1.47.0", + "filesize": "^11.0.17", + "fs-extra": "^11.1.1", + "semver": "^7.7.4", + "source-map": "^0.7.6" + } + }, + "node_modules/@rsdoctor/graph": { + "version": "1.5.16", + "resolved": "https://bnpm.byted.org/@rsdoctor/graph/-/graph-1.5.16.tgz", + "integrity": "sha512-Uzq5n5Za30z2CW6V9j6Bl4x8Bbek1YHJyhKEXyF1P3UoQIQ2qpdYu1B//krlDV2YmwB7ENwqaV5D0D+LoB690g==", + "dev": true, + "license": "MIT", + "dependencies": { + "@rsdoctor/types": "1.5.16", + "@rsdoctor/utils": "1.5.16", + "es-toolkit": "^1.47.0", + "path-browserify": "1.0.1", + "source-map": "^0.7.6" + } + }, + "node_modules/@rsdoctor/rspack-plugin": { + "version": "1.5.16", + "resolved": "https://bnpm.byted.org/@rsdoctor/rspack-plugin/-/rspack-plugin-1.5.16.tgz", + "integrity": "sha512-CoFLPpJF+XU96sVZ8EWbbQh4ZjihmZAv3hlyQzrn+HO8VBa0BRI/k+oyRAPwg7fI0/Uc1OHDtgL7D8IST3vbTw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@rsdoctor/core": "1.5.16", + "@rsdoctor/graph": "1.5.16", + "@rsdoctor/sdk": "1.5.16", + "@rsdoctor/types": "1.5.16", + "@rsdoctor/utils": "1.5.16" + }, + "peerDependencies": { + "@rspack/core": "*" + }, + "peerDependenciesMeta": { + "@rspack/core": { + "optional": true + } + } + }, + "node_modules/@rsdoctor/sdk": { + "version": "1.5.16", + "resolved": "https://bnpm.byted.org/@rsdoctor/sdk/-/sdk-1.5.16.tgz", + "integrity": "sha512-t2ghEUCUKFwP12QeeLX3VvI5b+Z+SI9rwUiE8VHa+gOFi8oHkceEi0rlBf1k9BexMpQf3zP3RNTZtzo09mxpCw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@rsdoctor/client": "1.5.16", + "@rsdoctor/graph": "1.5.16", + "@rsdoctor/types": "1.5.16", + "@rsdoctor/utils": "1.5.16", + "launch-editor": "^2.13.2", + "safer-buffer": "2.1.2", + "socket.io": "4.8.1", + "tapable": "2.3.3" + } + }, + "node_modules/@rsdoctor/types": { + "version": "1.5.16", + "resolved": "https://bnpm.byted.org/@rsdoctor/types/-/types-1.5.16.tgz", + "integrity": "sha512-J9yqQu1VNFgLJpkgzAucjA1AkVnrg6kRyMhAzj05uYyPM6FQgFmi3NlQFDxRPLAfTuwSXC72xhSi7LYd6MuVvA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/connect": "3.4.38", + "@types/estree": "1.0.5", + "@types/tapable": "2.3.0", + "source-map": "^0.7.6" + }, + "peerDependencies": { + "@rspack/core": "*", + "webpack": "5.x" + }, + "peerDependenciesMeta": { + "@rspack/core": { + "optional": true + }, + "webpack": { + "optional": true + } + } + }, + "node_modules/@rsdoctor/utils": { + "version": "1.5.16", + "resolved": "https://bnpm.byted.org/@rsdoctor/utils/-/utils-1.5.16.tgz", + "integrity": "sha512-aFhv9gzDjJ5qyODO1Uno1NAfl/7WDhmJASJ5lQj1Qo8FV1VgtnYKFbbYdQYSpsowhxgklNISxVs905HdiBp6yg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/code-frame": "7.26.2", + "@rsdoctor/types": "1.5.16", + "@types/estree": "1.0.5", + "acorn": "^8.10.0", + "acorn-import-attributes": "^1.9.5", + "acorn-walk": "8.3.5", + "deep-eql": "4.1.4", + "envinfo": "7.21.0", + "fs-extra": "^11.1.1", + "get-port": "5.1.1", + "json-stream-stringify": "3.0.1", + "lines-and-columns": "2.0.4", + "picocolors": "^1.1.1", + "rslog": "^2.1.2", + "strip-ansi": "^6.0.1" + } + }, + "node_modules/@rspack/binding": { + "version": "2.0.8", + "resolved": "https://bnpm.byted.org/@rspack/binding/-/binding-2.0.8.tgz", + "integrity": "sha512-3uZ+y8aQxq33ty2srMxg2Nu0XuBI6vVrG50rkDaXqwWqOohfgGUSfFuQK7EnSUNy4aFUQlCG6NHialQHJov0wg==", + "dev": true, + "license": "MIT", + "optionalDependencies": { + "@rspack/binding-darwin-arm64": "2.0.8", + "@rspack/binding-darwin-x64": "2.0.8", + "@rspack/binding-linux-arm64-gnu": "2.0.8", + "@rspack/binding-linux-arm64-musl": "2.0.8", + "@rspack/binding-linux-x64-gnu": "2.0.8", + "@rspack/binding-linux-x64-musl": "2.0.8", + "@rspack/binding-wasm32-wasi": "2.0.8", + "@rspack/binding-win32-arm64-msvc": "2.0.8", + "@rspack/binding-win32-ia32-msvc": "2.0.8", + "@rspack/binding-win32-x64-msvc": "2.0.8" + } + }, + "node_modules/@rspack/binding-darwin-arm64": { + "version": "2.0.8", + "resolved": "https://bnpm.byted.org/@rspack/binding-darwin-arm64/-/binding-darwin-arm64-2.0.8.tgz", + "integrity": "sha512-vCgbgH7B7qom+uID+RCZsTCOYFb9wC4/4+1U6rMfytrXGVJ72eNQs2tbdjOl0lb18CT3N/n+VkWynUiLk84GwA==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ] + }, + "node_modules/@rspack/binding-darwin-x64": { + "version": "2.0.8", + "resolved": "https://bnpm.byted.org/@rspack/binding-darwin-x64/-/binding-darwin-x64-2.0.8.tgz", + "integrity": "sha512-satPm2PD4B7jDTVlVAdvMVdUszwLvWUEnUDzLb77mvVkezKNDZmuhb+e8s+FfKs8hJpNbZ9VAejuA2rr8o985w==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ] + }, + "node_modules/@rspack/binding-linux-arm64-gnu": { + "version": "2.0.8", + "resolved": "https://bnpm.byted.org/@rspack/binding-linux-arm64-gnu/-/binding-linux-arm64-gnu-2.0.8.tgz", + "integrity": "sha512-pSI+npPQE/uDtiboqvcOIRJbEV2+B+H1xffmko/gw50la92oTUW60kVULFwsb6L0+GVCzIcwX3yq60GtYIn+Ug==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rspack/binding-linux-arm64-musl": { + "version": "2.0.8", + "resolved": "https://bnpm.byted.org/@rspack/binding-linux-arm64-musl/-/binding-linux-arm64-musl-2.0.8.tgz", + "integrity": "sha512-igjJ43yxWQ72GZqjDDZSSHax9/Vg+6rLMmOvFglTJUkQpB4Tyvu/YjW+WRjYj2xRw6blOjLxUSJWASvuSqqlvg==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rspack/binding-linux-x64-gnu": { + "version": "2.0.8", + "resolved": "https://bnpm.byted.org/@rspack/binding-linux-x64-gnu/-/binding-linux-x64-gnu-2.0.8.tgz", + "integrity": "sha512-zrkoEOnqj1hOEBO5T2I/2Ts2HSJsYFh1qXwMpK4dMJFGGNWDfNeUa6/LF5uq3VINF3JUl7RL47AgrucoSZJXPA==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rspack/binding-linux-x64-musl": { + "version": "2.0.8", + "resolved": "https://bnpm.byted.org/@rspack/binding-linux-x64-musl/-/binding-linux-x64-musl-2.0.8.tgz", + "integrity": "sha512-6CtDaGZjNDvJd9TBp7a9zABbrPORO21W96+3ZcGBn0YNUPUk4ARxIxrTTpeJ/1F41QDM8AYIkGDdqEYMqTYBsA==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rspack/binding-wasm32-wasi": { + "version": "2.0.8", + "resolved": "https://bnpm.byted.org/@rspack/binding-wasm32-wasi/-/binding-wasm32-wasi-2.0.8.tgz", + "integrity": "sha512-Yf4SiqTUroT5Ju+te0YAY2xxKOb35tECsO21v7hYyGa705wrgoAK/MmF7enOvs9GR1iZIqgiLD/wxsIxl8GjJw==", + "cpu": [ + "wasm32" + ], + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "@emnapi/core": "1.10.0", + "@emnapi/runtime": "1.10.0", + "@napi-rs/wasm-runtime": "1.1.4" + } + }, + "node_modules/@rspack/binding-wasm32-wasi/node_modules/@emnapi/core": { + "version": "1.10.0", + "resolved": "https://bnpm.byted.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/@rspack/binding-wasm32-wasi/node_modules/@emnapi/runtime": { + "version": "1.10.0", + "resolved": "https://bnpm.byted.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/@rspack/binding-wasm32-wasi/node_modules/@emnapi/wasi-threads": { + "version": "1.2.1", + "resolved": "https://bnpm.byted.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/@rspack/binding-win32-arm64-msvc": { + "version": "2.0.8", + "resolved": "https://bnpm.byted.org/@rspack/binding-win32-arm64-msvc/-/binding-win32-arm64-msvc-2.0.8.tgz", + "integrity": "sha512-8NCuiQsAhXrwRBy57QZoypqrws/zLBkaQVGiB8hksr6v++8hNigNjqpQARLbd0iyMuHsQQ++8+auGk6xlDXmzw==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@rspack/binding-win32-ia32-msvc": { + "version": "2.0.8", + "resolved": "https://bnpm.byted.org/@rspack/binding-win32-ia32-msvc/-/binding-win32-ia32-msvc-2.0.8.tgz", + "integrity": "sha512-bxiekytbX7V9KFAra+HkwtNWC6pYfHEBBZFpiT0xUs3mCFOmAAFVBsBSQsoCP9AdCEXoMAvNdnrHNw3iov4OZw==", + "cpu": [ + "ia32" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@rspack/binding-win32-x64-msvc": { + "version": "2.0.8", + "resolved": "https://bnpm.byted.org/@rspack/binding-win32-x64-msvc/-/binding-win32-x64-msvc-2.0.8.tgz", + "integrity": "sha512-7zPs8YCe/ZVJTwd+5lpB0CP0tkn2pONf/T1ycmVY76u21Nrwt8mXQGc/2yH2eWP4B7fikYBr3hGr7mpR2fajqQ==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@rspack/core": { + "version": "2.0.8", + "resolved": "https://bnpm.byted.org/@rspack/core/-/core-2.0.8.tgz", + "integrity": "sha512-+NLGJf8gZxihDmMFzjlly3toc2SMjeDmuvz0/Cai9AMdV4F+Pqcnt2BA9V4e3SY2jmhJQtPwgyyLtR1RiJO77g==", + "dev": true, + "license": "MIT", + "dependencies": { + "@rspack/binding": "2.0.8" + }, + "engines": { + "node": "^20.19.0 || >=22.12.0" + }, + "peerDependencies": { + "@module-federation/runtime-tools": "^0.24.1 || ^2.0.0", + "@swc/helpers": "^0.5.23" + }, + "peerDependenciesMeta": { + "@module-federation/runtime-tools": { + "optional": true + }, + "@swc/helpers": { + "optional": true + } + } + }, + "node_modules/@rspack/lite-tapable": { + "version": "1.1.0", + "resolved": "https://bnpm.byted.org/@rspack/lite-tapable/-/lite-tapable-1.1.0.tgz", + "integrity": "sha512-E2B0JhYFmVAwdDiG14+DW0Di4Ze4Jg10Pc4/lILUrd5DRCaklduz2OvJ5HYQ6G+hd+WTzqQb3QnDNfK4yvAFYw==", + "dev": true, + "license": "MIT" + }, + "node_modules/@rspack/resolver": { + "version": "0.2.8", + "resolved": "https://bnpm.byted.org/@rspack/resolver/-/resolver-0.2.8.tgz", + "integrity": "sha512-FBWqdHhzS8mcf/WN4Ktzr7EaeaN+hsxbN98EweegX3924beZuY6H70CSFWCv1fIHAieCUv/9XCjKggHvhCsLwA==", + "dev": true, + "license": "MIT", + "optionalDependencies": { + "@rspack/resolver-binding-darwin-arm64": "0.2.8", + "@rspack/resolver-binding-darwin-x64": "0.2.8", + "@rspack/resolver-binding-linux-arm64-gnu": "0.2.8", + "@rspack/resolver-binding-linux-arm64-musl": "0.2.8", + "@rspack/resolver-binding-linux-x64-gnu": "0.2.8", + "@rspack/resolver-binding-linux-x64-musl": "0.2.8", + "@rspack/resolver-binding-wasm32-wasi": "0.2.8", + "@rspack/resolver-binding-win32-arm64-msvc": "0.2.8", + "@rspack/resolver-binding-win32-ia32-msvc": "0.2.8", + "@rspack/resolver-binding-win32-x64-msvc": "0.2.8" + } + }, + "node_modules/@rspack/resolver-binding-darwin-arm64": { + "version": "0.2.8", + "resolved": "https://bnpm.byted.org/@rspack/resolver-binding-darwin-arm64/-/resolver-binding-darwin-arm64-0.2.8.tgz", + "integrity": "sha512-nTnK17kmxXEvR+WpOIZPSIzUFYeWCHoffgU9tvOLOwuTBH41kWnSQXXWu+AiMVwvJ6wdRO6Vo30hPhlXEG7Pyw==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ] + }, + "node_modules/@rspack/resolver-binding-darwin-x64": { + "version": "0.2.8", + "resolved": "https://bnpm.byted.org/@rspack/resolver-binding-darwin-x64/-/resolver-binding-darwin-x64-0.2.8.tgz", + "integrity": "sha512-Aqr4TK2rA6XVYUOmM5YCtYyCMZhOIR53P4cOGgGARg99A7OuMBMzUL4r1n0M0Fx35v6/sSx1OBe+odHmPxksEg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ] + }, + "node_modules/@rspack/resolver-binding-linux-arm64-gnu": { + "version": "0.2.8", + "resolved": "https://bnpm.byted.org/@rspack/resolver-binding-linux-arm64-gnu/-/resolver-binding-linux-arm64-gnu-0.2.8.tgz", + "integrity": "sha512-wGvkxm2G4mNTztslaOzLzx5JuySQSy5DcOWEZxHcjJJzp5L3ODbYLK18HtUc6cvmaVOmjaGrrYPrqJJ0hHTVFg==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rspack/resolver-binding-linux-arm64-musl": { + "version": "0.2.8", + "resolved": "https://bnpm.byted.org/@rspack/resolver-binding-linux-arm64-musl/-/resolver-binding-linux-arm64-musl-0.2.8.tgz", + "integrity": "sha512-EqRJ9zLQsLAvyDKJKVZ45BSqRIMS12f5HtJdy3KkAHU14ZmsGv8e5IKkwUZN5CNBRad8xVlOMMx3dOfF4whJzg==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rspack/resolver-binding-linux-x64-gnu": { + "version": "0.2.8", + "resolved": "https://bnpm.byted.org/@rspack/resolver-binding-linux-x64-gnu/-/resolver-binding-linux-x64-gnu-0.2.8.tgz", + "integrity": "sha512-eXbeotNCTntL4/+mxJRVCxK63YeWzTfp0F3POeHJFSs6Nt0f2J/mZNFlasJmd6xm7zvE80h/HWOwbwjRBLcElA==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rspack/resolver-binding-linux-x64-musl": { + "version": "0.2.8", + "resolved": "https://bnpm.byted.org/@rspack/resolver-binding-linux-x64-musl/-/resolver-binding-linux-x64-musl-0.2.8.tgz", + "integrity": "sha512-KWFHlOWGkT+eMngoUgPGXrDi+rU04VCh9jyk0U6Ot2RTWvhGxwKykjmLS+CWZI/EBrzr9A6g2U3jzKTMNz9oCw==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rspack/resolver-binding-wasm32-wasi": { + "version": "0.2.8", + "resolved": "https://bnpm.byted.org/@rspack/resolver-binding-wasm32-wasi/-/resolver-binding-wasm32-wasi-0.2.8.tgz", + "integrity": "sha512-I6GIhgICFViE88jejIV74oiiWHnpLpQ5ogaZM1ozM9KDnfqcHoX0IVEyrIh5KqA8iLDyhuoFSW+Hf0qN7VTBBQ==", + "cpu": [ + "wasm32" + ], + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "@napi-rs/wasm-runtime": "^1.1.1" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@rspack/resolver-binding-win32-arm64-msvc": { + "version": "0.2.8", + "resolved": "https://bnpm.byted.org/@rspack/resolver-binding-win32-arm64-msvc/-/resolver-binding-win32-arm64-msvc-0.2.8.tgz", + "integrity": "sha512-ZXCt3qUfDAEbtc2sHpvxM7lNFZM+DxfblgXUIl3Jy6BuEZbHe1i6z+t9c34ayHoGTVbVSNCtaYuG/MaWdSnPHw==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@rspack/resolver-binding-win32-ia32-msvc": { + "version": "0.2.8", + "resolved": "https://bnpm.byted.org/@rspack/resolver-binding-win32-ia32-msvc/-/resolver-binding-win32-ia32-msvc-0.2.8.tgz", + "integrity": "sha512-2LRymjDK8MpUERD8CL0PPae5y2crU5TAg4T4EzpeL5jLARVq6izsEruiWzB6Y+D15vUYlvmgs2370GXVSB861w==", + "cpu": [ + "ia32" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@rspack/resolver-binding-win32-x64-msvc": { + "version": "0.2.8", + "resolved": "https://bnpm.byted.org/@rspack/resolver-binding-win32-x64-msvc/-/resolver-binding-win32-x64-msvc-0.2.8.tgz", + "integrity": "sha512-hzRpfbtvv4M4EVrKKIAaHDs5wT8lVcbSUjtwPs5u4IeLEix45nQPQ6ZQjmE4lIH0GP/3L3XQhZroYmTcH/xdsQ==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@sinclair/typebox": { + "version": "0.34.49", + "resolved": "https://bnpm.byted.org/@sinclair/typebox/-/typebox-0.34.49.tgz", + "integrity": "sha512-brySQQs7Jtn0joV8Xh9ZV/hZb9Ozb0pmazDIASBkYKCjXrXU3mpcFahmK/z4YDhGkQvP9mWJbVyahdtU5wQA+A==", + "dev": true, + "license": "MIT" + }, + "node_modules/@socket.io/component-emitter": { + "version": "3.1.2", + "resolved": "https://bnpm.byted.org/@socket.io/component-emitter/-/component-emitter-3.1.2.tgz", + "integrity": "sha512-9BCxFwvbGg/RsZK9tjXd8s4UcwR0MWeFQ1XEKIQVVvAGJyINdrqKMcTRyLoK8Rse1GjzLV9cwjWV1olXRWEXVA==", + "dev": true, + "license": "MIT" + }, + "node_modules/@swc/helpers": { + "version": "0.5.23", + "resolved": "https://bnpm.byted.org/@swc/helpers/-/helpers-0.5.23.tgz", + "integrity": "sha512-5lSsMOTXURePglDfvuAQUqkGek9Hg2kksOYay2m0+XR++b2NWYL/4sWyuvVBIs8oKnJaxkdi9whaL/sqN13afw==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "tslib": "^2.8.0" + } + }, + "node_modules/@tybys/wasm-util": { + "version": "0.10.3", + "resolved": "https://bnpm.byted.org/@tybys/wasm-util/-/wasm-util-0.10.3.tgz", + "integrity": "sha512-F3fo1MYrRJYL3zER0OUOmkutjr1Vp23m7OsSgp7nq4SP6OqX6C/56XFIPAl5bt3zaBRjmW7SGz3u/6LwFpYcOg==", + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "tslib": "^2.4.0" + } + }, + "node_modules/@types/connect": { + "version": "3.4.38", + "resolved": "https://bnpm.byted.org/@types/connect/-/connect-3.4.38.tgz", + "integrity": "sha512-K6uROf1LD88uDQqJCktA4yzL1YYAK6NgfsI0v/mTgyPKWsX1CnJ0XPSDhViejru1GcRkLWb8RlzFYJRqGUbaug==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/cors": { + "version": "2.8.19", + "resolved": "https://bnpm.byted.org/@types/cors/-/cors-2.8.19.tgz", + "integrity": "sha512-mFNylyeyqN93lfe/9CSxOGREz8cpzAhH+E93xJ4xWQf62V8sQ/24reV2nyzUWM6H6Xji+GGHpkbLe7pVoUEskg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/estree": { + "version": "1.0.5", + "resolved": "https://bnpm.byted.org/@types/estree/-/estree-1.0.5.tgz", + "integrity": "sha512-/kYRxGDLWzHOB7q+wtSUQlFrtcdUccpfy+X+9iMBpHK8QLLhx2wIPYuS5DYtR9Wa/YlZAbIovy7qVdB1Aq6Lyw==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/istanbul-lib-coverage": { + "version": "2.0.6", + "resolved": "https://bnpm.byted.org/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.6.tgz", + "integrity": "sha512-2QF/t/auWm0lsy8XtKVPG19v3sSOQlJe/YHZgfjb/KBBHOGSV+J2q/S671rcq9uTBrLAXmZpqJiaQbMT+zNU1w==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/istanbul-lib-report": { + "version": "3.0.3", + "resolved": "https://bnpm.byted.org/@types/istanbul-lib-report/-/istanbul-lib-report-3.0.3.tgz", + "integrity": "sha512-NQn7AHQnk/RSLOxrBbGyJM/aVQ+pjj5HCgasFxc0K/KhoATfQ/47AyUl15I2yBUpihjmas+a+VJBOqecrFH+uA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/istanbul-lib-coverage": "*" + } + }, + "node_modules/@types/istanbul-reports": { + "version": "3.0.4", + "resolved": "https://bnpm.byted.org/@types/istanbul-reports/-/istanbul-reports-3.0.4.tgz", + "integrity": "sha512-pk2B1NWalF9toCRu6gjBzR69syFjP4Od8WRAX+0mmf9lAjCRicLOWc+ZrxZHx/0XRjotgkF9t6iaMJ+aXcOdZQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/istanbul-lib-report": "*" + } + }, + "node_modules/@types/json-schema": { + "version": "7.0.15", + "resolved": "https://bnpm.byted.org/@types/json-schema/-/json-schema-7.0.15.tgz", + "integrity": "sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/node": { + "version": "26.0.0", + "resolved": "https://bnpm.byted.org/@types/node/-/node-26.0.0.tgz", + "integrity": "sha512-vf2YFi1iY9lHGwNJMs01biZFbKJkrZR1T6/MlzjhJLPdntOHLhTrDSnSVcdtvjihi4VQNlrFRIxLsDBlQpAipA==", + "dev": true, + "license": "MIT", + "dependencies": { + "undici-types": "~8.3.0" + } + }, + "node_modules/@types/prop-types": { + "version": "15.7.15", + "license": "MIT" + }, + "node_modules/@types/react": { + "version": "18.3.23", + "license": "MIT", + "peer": true, + "dependencies": { + "@types/prop-types": "*", + "csstype": "^3.0.2" + } + }, + "node_modules/@types/tapable": { + "version": "2.3.0", + "resolved": "https://bnpm.byted.org/@types/tapable/-/tapable-2.3.0.tgz", + "integrity": "sha512-oMnbAXeVo+KUnje3hzdORXUbfnzTfqD0H92mLl19NE5hFqH9Q4ktq+xehNSxcNeeLm1COopYwa0zeP6Iz+oIXg==", + "dev": true, + "license": "MIT", + "dependencies": { + "tapable": "^2.3.0" + } + }, + "node_modules/@types/trusted-types": { + "version": "2.0.7", + "resolved": "https://bnpm.byted.org/@types/trusted-types/-/trusted-types-2.0.7.tgz", + "integrity": "sha512-ScaPdn1dQczgbl0QFTeTOmVHFULt394XJgOQNoyVhZ6r2vLnMLJfBPd53SB52T/3G36VI1/g2MZaX0cwDuXsfw==", + "dev": true, + "license": "MIT", + "optional": true + }, + "node_modules/@types/ws": { + "version": "8.18.1", + "resolved": "https://bnpm.byted.org/@types/ws/-/ws-8.18.1.tgz", + "integrity": "sha512-ThVF6DCVhA8kUGy+aazFQ4kXQ7E1Ty7A3ypFOe0IcJV8O/M511G99AW24irKrW56Wt44yG9+ij8FaqoBGkuBXg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/yargs": { + "version": "17.0.35", + "resolved": "https://bnpm.byted.org/@types/yargs/-/yargs-17.0.35.tgz", + "integrity": "sha512-qUHkeCyQFxMXg79wQfTtfndEC+N9ZZg76HJftDJp+qH2tV7Gj4OJi7l+PiWwJ+pWtW8GwSmqsDj/oymhrTWXjg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/yargs-parser": "*" + } + }, + "node_modules/@types/yargs-parser": { + "version": "21.0.3", + "resolved": "https://bnpm.byted.org/@types/yargs-parser/-/yargs-parser-21.0.3.tgz", + "integrity": "sha512-I4q9QU9MQv4oEOz4tAHJtNz1cwuLxn2F3xcc2iV5WdqLPpUnj30aUuxt1mAxYTG+oe8CZMV/+6rU4S4gRDzqtQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/@ungap/structured-clone": { + "version": "1.3.2", + "resolved": "https://bnpm.byted.org/@ungap/structured-clone/-/structured-clone-1.3.2.tgz", + "integrity": "sha512-5jsZFwgR5rTdKwidH9Qmat75RKwqfpKlWWB1frDkljN127mwqBu8K0PYo7/hFpF03IEJpfVPpCQDY/eDx3iHvA==", + "dev": true, + "license": "ISC" + }, + "node_modules/@webassemblyjs/ast": { + "version": "1.14.1", + "resolved": "https://bnpm.byted.org/@webassemblyjs/ast/-/ast-1.14.1.tgz", + "integrity": "sha512-nuBEDgQfm1ccRp/8bCQrx1frohyufl4JlbMMZ4P1wpeOfDhF6FQkxZJ1b/e+PLwr6X1Nhw6OLme5usuBWYBvuQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@webassemblyjs/helper-numbers": "1.13.2", + "@webassemblyjs/helper-wasm-bytecode": "1.13.2" + } + }, + "node_modules/@webassemblyjs/floating-point-hex-parser": { + "version": "1.13.2", + "resolved": "https://bnpm.byted.org/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.13.2.tgz", + "integrity": "sha512-6oXyTOzbKxGH4steLbLNOu71Oj+C8Lg34n6CqRvqfS2O71BxY6ByfMDRhBytzknj9yGUPVJ1qIKhRlAwO1AovA==", + "dev": true, + "license": "MIT" + }, + "node_modules/@webassemblyjs/helper-api-error": { + "version": "1.13.2", + "resolved": "https://bnpm.byted.org/@webassemblyjs/helper-api-error/-/helper-api-error-1.13.2.tgz", + "integrity": "sha512-U56GMYxy4ZQCbDZd6JuvvNV/WFildOjsaWD3Tzzvmw/mas3cXzRJPMjP83JqEsgSbyrmaGjBfDtV7KDXV9UzFQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/@webassemblyjs/helper-buffer": { + "version": "1.14.1", + "resolved": "https://bnpm.byted.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.14.1.tgz", + "integrity": "sha512-jyH7wtcHiKssDtFPRB+iQdxlDf96m0E39yb0k5uJVhFGleZFoNw1c4aeIcVUPPbXUVJ94wwnMOAqUHyzoEPVMA==", + "dev": true, + "license": "MIT" + }, + "node_modules/@webassemblyjs/helper-numbers": { + "version": "1.13.2", + "resolved": "https://bnpm.byted.org/@webassemblyjs/helper-numbers/-/helper-numbers-1.13.2.tgz", + "integrity": "sha512-FE8aCmS5Q6eQYcV3gI35O4J789wlQA+7JrqTTpJqn5emA4U2hvwJmvFRC0HODS+3Ye6WioDklgd6scJ3+PLnEA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@webassemblyjs/floating-point-hex-parser": "1.13.2", + "@webassemblyjs/helper-api-error": "1.13.2", + "@xtuc/long": "4.2.2" + } + }, + "node_modules/@webassemblyjs/helper-wasm-bytecode": { + "version": "1.13.2", + "resolved": "https://bnpm.byted.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.13.2.tgz", + "integrity": "sha512-3QbLKy93F0EAIXLh0ogEVR6rOubA9AoZ+WRYhNbFyuB70j3dRdwH9g+qXhLAO0kiYGlg3TxDV+I4rQTr/YNXkA==", + "dev": true, + "license": "MIT" + }, + "node_modules/@webassemblyjs/helper-wasm-section": { + "version": "1.14.1", + "resolved": "https://bnpm.byted.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.14.1.tgz", + "integrity": "sha512-ds5mXEqTJ6oxRoqjhWDU83OgzAYjwsCV8Lo/N+oRsNDmx/ZDpqalmrtgOMkHwxsG0iI//3BwWAErYRHtgn0dZw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@webassemblyjs/ast": "1.14.1", + "@webassemblyjs/helper-buffer": "1.14.1", + "@webassemblyjs/helper-wasm-bytecode": "1.13.2", + "@webassemblyjs/wasm-gen": "1.14.1" + } + }, + "node_modules/@webassemblyjs/ieee754": { + "version": "1.13.2", + "resolved": "https://bnpm.byted.org/@webassemblyjs/ieee754/-/ieee754-1.13.2.tgz", + "integrity": "sha512-4LtOzh58S/5lX4ITKxnAK2USuNEvpdVV9AlgGQb8rJDHaLeHciwG4zlGr0j/SNWlr7x3vO1lDEsuePvtcDNCkw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@xtuc/ieee754": "^1.2.0" + } + }, + "node_modules/@webassemblyjs/leb128": { + "version": "1.13.2", + "resolved": "https://bnpm.byted.org/@webassemblyjs/leb128/-/leb128-1.13.2.tgz", + "integrity": "sha512-Lde1oNoIdzVzdkNEAWZ1dZ5orIbff80YPdHx20mrHwHrVNNTjNr8E3xz9BdpcGqRQbAEa+fkrCb+fRFTl/6sQw==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@xtuc/long": "4.2.2" + } + }, + "node_modules/@webassemblyjs/utf8": { + "version": "1.13.2", + "resolved": "https://bnpm.byted.org/@webassemblyjs/utf8/-/utf8-1.13.2.tgz", + "integrity": "sha512-3NQWGjKTASY1xV5m7Hr0iPeXD9+RDobLll3T9d2AO+g3my8xy5peVyjSag4I50mR1bBSN/Ct12lo+R9tJk0NZQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/@webassemblyjs/wasm-edit": { + "version": "1.14.1", + "resolved": "https://bnpm.byted.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.14.1.tgz", + "integrity": "sha512-RNJUIQH/J8iA/1NzlE4N7KtyZNHi3w7at7hDjvRNm5rcUXa00z1vRz3glZoULfJ5mpvYhLybmVcwcjGrC1pRrQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@webassemblyjs/ast": "1.14.1", + "@webassemblyjs/helper-buffer": "1.14.1", + "@webassemblyjs/helper-wasm-bytecode": "1.13.2", + "@webassemblyjs/helper-wasm-section": "1.14.1", + "@webassemblyjs/wasm-gen": "1.14.1", + "@webassemblyjs/wasm-opt": "1.14.1", + "@webassemblyjs/wasm-parser": "1.14.1", + "@webassemblyjs/wast-printer": "1.14.1" + } + }, + "node_modules/@webassemblyjs/wasm-gen": { + "version": "1.14.1", + "resolved": "https://bnpm.byted.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.14.1.tgz", + "integrity": "sha512-AmomSIjP8ZbfGQhumkNvgC33AY7qtMCXnN6bL2u2Js4gVCg8fp735aEiMSBbDR7UQIj90n4wKAFUSEd0QN2Ukg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@webassemblyjs/ast": "1.14.1", + "@webassemblyjs/helper-wasm-bytecode": "1.13.2", + "@webassemblyjs/ieee754": "1.13.2", + "@webassemblyjs/leb128": "1.13.2", + "@webassemblyjs/utf8": "1.13.2" + } + }, + "node_modules/@webassemblyjs/wasm-opt": { + "version": "1.14.1", + "resolved": "https://bnpm.byted.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.14.1.tgz", + "integrity": "sha512-PTcKLUNvBqnY2U6E5bdOQcSM+oVP/PmrDY9NzowJjislEjwP/C4an2303MCVS2Mg9d3AJpIGdUFIQQWbPds0Sw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@webassemblyjs/ast": "1.14.1", + "@webassemblyjs/helper-buffer": "1.14.1", + "@webassemblyjs/wasm-gen": "1.14.1", + "@webassemblyjs/wasm-parser": "1.14.1" + } + }, + "node_modules/@webassemblyjs/wasm-parser": { + "version": "1.14.1", + "resolved": "https://bnpm.byted.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.14.1.tgz", + "integrity": "sha512-JLBl+KZ0R5qB7mCnud/yyX08jWFw5MsoalJ1pQ4EdFlgj9VdXKGuENGsiCIjegI1W7p91rUlcB/LB5yRJKNTcQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@webassemblyjs/ast": "1.14.1", + "@webassemblyjs/helper-api-error": "1.13.2", + "@webassemblyjs/helper-wasm-bytecode": "1.13.2", + "@webassemblyjs/ieee754": "1.13.2", + "@webassemblyjs/leb128": "1.13.2", + "@webassemblyjs/utf8": "1.13.2" + } + }, + "node_modules/@webassemblyjs/wast-printer": { + "version": "1.14.1", + "resolved": "https://bnpm.byted.org/@webassemblyjs/wast-printer/-/wast-printer-1.14.1.tgz", + "integrity": "sha512-kPSSXE6De1XOR820C90RIo2ogvZG+c3KiHzqUoO/F34Y2shGzesfqv7o57xrxovZJH/MetF5UjroJ/R/3isoiw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@webassemblyjs/ast": "1.14.1", + "@xtuc/long": "4.2.2" + } + }, + "node_modules/@xtuc/ieee754": { + "version": "1.2.0", + "resolved": "https://bnpm.byted.org/@xtuc/ieee754/-/ieee754-1.2.0.tgz", + "integrity": "sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA==", + "dev": true, + "license": "BSD-3-Clause" + }, + "node_modules/@xtuc/long": { + "version": "4.2.2", + "resolved": "https://bnpm.byted.org/@xtuc/long/-/long-4.2.2.tgz", + "integrity": "sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ==", + "dev": true, + "license": "Apache-2.0" + }, + "node_modules/accepts": { + "version": "1.3.8", + "resolved": "https://bnpm.byted.org/accepts/-/accepts-1.3.8.tgz", + "integrity": "sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==", + "dev": true, + "license": "MIT", + "dependencies": { + "mime-types": "~2.1.34", + "negotiator": "0.6.3" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/acorn": { + "version": "8.17.0", + "resolved": "https://bnpm.byted.org/acorn/-/acorn-8.17.0.tgz", + "integrity": "sha512-xRQbDb9BnwDafYNn6Vwl839DYVjqXYb1XVGtWAZ1kcDc6iwAL4hg3B1dZlRiuENFeO2H53gFG3in621AdERVAg==", + "dev": true, + "license": "MIT", + "peer": true, + "bin": { + "acorn": "bin/acorn" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/acorn-import-attributes": { + "version": "1.9.5", + "resolved": "https://bnpm.byted.org/acorn-import-attributes/-/acorn-import-attributes-1.9.5.tgz", + "integrity": "sha512-n02Vykv5uA3eHGM/Z2dQrcD56kL8TyDb2p1+0P83PClMnC/nc+anbQRhIOWnSq4Ke/KvDPrY3C9hDtC/A3eHnQ==", + "dev": true, + "license": "MIT", + "peerDependencies": { + "acorn": "^8" + } + }, + "node_modules/acorn-import-phases": { + "version": "1.0.4", + "resolved": "https://bnpm.byted.org/acorn-import-phases/-/acorn-import-phases-1.0.4.tgz", + "integrity": "sha512-wKmbr/DDiIXzEOiWrTTUcDm24kQ2vGfZQvM2fwg2vXqR5uW6aapr7ObPtj1th32b9u90/Pf4AItvdTh42fBmVQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10.13.0" + }, + "peerDependencies": { + "acorn": "^8.14.0" + } + }, + "node_modules/acorn-walk": { + "version": "8.3.5", + "resolved": "https://bnpm.byted.org/acorn-walk/-/acorn-walk-8.3.5.tgz", + "integrity": "sha512-HEHNfbars9v4pgpW6SO1KSPkfoS0xVOM/9UzkJltjlsHZmJasxg8aXkuZa7SMf8vKGIBhpUsPluQSqhJFCqebw==", + "dev": true, + "license": "MIT", + "dependencies": { + "acorn": "^8.11.0" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/ajv": { + "version": "8.20.0", + "resolved": "https://bnpm.byted.org/ajv/-/ajv-8.20.0.tgz", + "integrity": "sha512-Thbli+OlOj+iMPYFBVBfJ3OmCAnaSyNn4M1vz9T6Gka5Jt9ba/HIR56joy65tY6kx/FCF5VXNB819Y7/GUrBGA==", + "dev": true, + "license": "MIT", + "peer": true, + "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/ajv-formats": { + "version": "2.1.1", + "resolved": "https://bnpm.byted.org/ajv-formats/-/ajv-formats-2.1.1.tgz", + "integrity": "sha512-Wx0Kx52hxE7C18hkMEggYlEifqWZtYaRgouJor+WMdPnQyEK13vgEWyVNup7SoeeoLMsr4kf5h6dOW11I15MUA==", + "dev": true, + "license": "MIT", + "dependencies": { + "ajv": "^8.0.0" + }, + "peerDependencies": { + "ajv": "^8.0.0" + }, + "peerDependenciesMeta": { + "ajv": { + "optional": true + } + } + }, + "node_modules/ajv-keywords": { + "version": "5.1.0", + "resolved": "https://bnpm.byted.org/ajv-keywords/-/ajv-keywords-5.1.0.tgz", + "integrity": "sha512-YCS/JNFAUyr5vAuhk1DWm1CBxRHW9LbJ2ozWeemrIqpbsqKjHVxYPyi5GC0rjZIT5JxJ3virVTS8wk4i/Z+krw==", + "dev": true, + "license": "MIT", + "dependencies": { + "fast-deep-equal": "^3.1.3" + }, + "peerDependencies": { + "ajv": "^8.8.2" + } + }, + "node_modules/ansi-regex": { + "version": "5.0.1", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/ansi-styles": { + "version": "4.3.0", + "dev": true, + "license": "MIT", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/any-promise": { + "version": "1.3.0", + "dev": true, + "license": "MIT" + }, + "node_modules/anymatch": { + "version": "3.1.3", + "dev": true, + "license": "ISC", + "dependencies": { + "normalize-path": "^3.0.0", + "picomatch": "^2.0.4" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/arg": { + "version": "5.0.2", + "dev": true, + "license": "MIT" + }, + "node_modules/argparse": { + "version": "2.0.1", + "resolved": "https://bnpm.byted.org/argparse/-/argparse-2.0.1.tgz", + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", + "dev": true, + "license": "Python-2.0" + }, + "node_modules/array-buffer-byte-length": { + "version": "1.0.2", + "resolved": "https://bnpm.byted.org/array-buffer-byte-length/-/array-buffer-byte-length-1.0.2.tgz", + "integrity": "sha512-LHE+8BuR7RYGDKvnrmcuSq3tDcKv9OFEXQt/HpbZhY7V6h0zlUXutnAD82GiFx9rdieCMjkvtcsPqBwgUl1Iiw==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.3", + "is-array-buffer": "^3.0.5" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/arraybuffer.prototype.slice": { + "version": "1.0.4", + "resolved": "https://bnpm.byted.org/arraybuffer.prototype.slice/-/arraybuffer.prototype.slice-1.0.4.tgz", + "integrity": "sha512-BNoCY6SXXPQ7gF2opIP4GBE+Xw7U+pHMYKuzjgCN3GwiaIR09UUeKfheyIry77QtrCBlC0KK0q5/TER/tYh3PQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "array-buffer-byte-length": "^1.0.1", + "call-bind": "^1.0.8", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.5", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.6", + "is-array-buffer": "^3.0.4" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/async-function": { + "version": "1.0.0", + "resolved": "https://bnpm.byted.org/async-function/-/async-function-1.0.0.tgz", + "integrity": "sha512-hsU18Ae8CDTR6Kgu9DYf0EbCr/a5iGL0rytQDobUcdpYOKokk8LEjVphnXkDkgpi0wYVsqrXuP0bZxJaTqdgoA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/available-typed-arrays": { + "version": "1.0.7", + "resolved": "https://bnpm.byted.org/available-typed-arrays/-/available-typed-arrays-1.0.7.tgz", + "integrity": "sha512-wvUjBtSGN7+7SjNpq/9M2Tg350UZD3q62IFZLbRAR1bSMlCo1ZaeW+BJ+D090e4hIIZLBcTDWe4Mh4jvUDajzQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "possible-typed-array-names": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/background-only": { + "version": "0.0.1", + "dev": true, + "license": "MIT" + }, + "node_modules/balanced-match": { + "version": "1.0.2", + "dev": true, + "license": "MIT" + }, + "node_modules/base64id": { + "version": "2.0.0", + "resolved": "https://bnpm.byted.org/base64id/-/base64id-2.0.0.tgz", + "integrity": "sha512-lGe34o6EHj9y3Kts9R4ZYs/Gr+6N7MCaMlIFA3F1R2O5/m7K06AxfSeO5530PEERE6/WyEg3lsuyw4GHlPZHog==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^4.5.0 || >= 5.9" + } + }, + "node_modules/baseline-browser-mapping": { + "version": "2.10.38", + "resolved": "https://bnpm.byted.org/baseline-browser-mapping/-/baseline-browser-mapping-2.10.38.tgz", + "integrity": "sha512-31/02mVB4yuQU6adKk5SlY6m+mxDwUq5KZkyYgnLrrKl7TEm1+3PyDtDBz2kOv/wxZz41GHsvV1A/u6RmiyBvw==", + "dev": true, + "license": "Apache-2.0", + "bin": { + "baseline-browser-mapping": "dist/cli.cjs" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/binary-extensions": { + "version": "2.3.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/boolbase": { + "version": "1.0.0", + "resolved": "https://bnpm.byted.org/boolbase/-/boolbase-1.0.0.tgz", + "integrity": "sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==", + "dev": true, + "license": "ISC" + }, + "node_modules/brace-expansion": { + "version": "2.0.2", + "dev": true, + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0" + } + }, + "node_modules/braces": { + "version": "3.0.3", + "dev": true, + "license": "MIT", + "dependencies": { + "fill-range": "^7.1.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/browserslist": { + "version": "4.28.4", + "resolved": "https://bnpm.byted.org/browserslist/-/browserslist-4.28.4.tgz", + "integrity": "sha512-MTc8i/x9jBQd1iMw2CFGS+rwMa07eYjLR0CCTLDACl9xhxy+nIs3KeML/biicXtk9JrZ6dnnTatmc7ErPXIxqw==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/browserslist" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "peer": true, + "dependencies": { + "baseline-browser-mapping": "^2.10.38", + "caniuse-lite": "^1.0.30001799", + "electron-to-chromium": "^1.5.376", + "node-releases": "^2.0.48", + "update-browserslist-db": "^1.2.3" + }, + "bin": { + "browserslist": "cli.js" + }, + "engines": { + "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" + } + }, + "node_modules/browserslist-load-config": { + "version": "1.0.3", + "resolved": "https://bnpm.byted.org/browserslist-load-config/-/browserslist-load-config-1.0.3.tgz", + "integrity": "sha512-boNaPS4KlW6AITZQ60G+1oDJLuxauljDd7QNQFOYpRtldzcTDknMZ8awbwI0BT/8h1/Y/CG4k/tDOLip9lAGcg==", + "dev": true, + "license": "MIT" + }, + "node_modules/browserslist-to-es-version": { + "version": "1.4.2", + "resolved": "https://bnpm.byted.org/browserslist-to-es-version/-/browserslist-to-es-version-1.4.2.tgz", + "integrity": "sha512-3NV13pCv0wmPxxZZcekHAG6vt8rQ94w2c4/UBe3ZU3NDUm5TP+QFK3rjS6XeKWSHWpnPYNfQzlhnljka0BrEOA==", + "dev": true, + "license": "MIT", + "dependencies": { + "browserslist": "^4.28.2" + }, + "bin": { + "browserslist-to-es-version": "dist/cli.js" + } + }, + "node_modules/buffer-from": { + "version": "1.1.2", + "resolved": "https://bnpm.byted.org/buffer-from/-/buffer-from-1.1.2.tgz", + "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/call-bind": { + "version": "1.0.9", + "resolved": "https://bnpm.byted.org/call-bind/-/call-bind-1.0.9.tgz", + "integrity": "sha512-a/hy+pNsFUTR+Iz8TCJvXudKVLAnz/DyeSUo10I5yvFDQJBFU2s9uqQpoSrJlroHUKoKqzg+epxyP9lqFdzfBQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind-apply-helpers": "^1.0.2", + "es-define-property": "^1.0.1", + "get-intrinsic": "^1.3.0", + "set-function-length": "^1.2.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/call-bind-apply-helpers": { + "version": "1.0.2", + "resolved": "https://bnpm.byted.org/call-bind-apply-helpers/-/call-bind-apply-helpers-1.0.2.tgz", + "integrity": "sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0", + "function-bind": "^1.1.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/call-bound": { + "version": "1.0.4", + "resolved": "https://bnpm.byted.org/call-bound/-/call-bound-1.0.4.tgz", + "integrity": "sha512-+ys997U96po4Kx/ABpBCqhA9EuxJaQWDQg7295H4hBphv3IZg0boBKuwYpt4YXp6MZ5AmZQnU/tyMTlRpaSejg==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind-apply-helpers": "^1.0.2", + "get-intrinsic": "^1.3.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/camelcase-css": { + "version": "2.0.1", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 6" + } + }, + "node_modules/caniuse-api": { + "version": "3.0.0", + "resolved": "https://bnpm.byted.org/caniuse-api/-/caniuse-api-3.0.0.tgz", + "integrity": "sha512-bsTwuIg/BZZK/vreVTYYbSWoe2F+71P7K5QGEX+pT250DZbfU1MQ5prOKpPR+LL6uWKK3KMwMCAS74QB3Um1uw==", + "dev": true, + "license": "MIT", + "dependencies": { + "browserslist": "^4.0.0", + "caniuse-lite": "^1.0.0", + "lodash.memoize": "^4.1.2", + "lodash.uniq": "^4.5.0" + } + }, + "node_modules/caniuse-lite": { + "version": "1.0.30001799", + "resolved": "https://bnpm.byted.org/caniuse-lite/-/caniuse-lite-1.0.30001799.tgz", + "integrity": "sha512-hG1bReV+OUU+MOqK4t/ZWI0tZOyz3rqS9XuhOUz1cIcbwBKjOyJEJuw9ER5JuNyqxNk8u/JUVbGibBOL1yrjFw==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/caniuse-lite" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "CC-BY-4.0" + }, + "node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://bnpm.byted.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/chalk/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://bnpm.byted.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "license": "MIT", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/chokidar": { + "version": "3.6.0", + "dev": true, + "license": "MIT", + "dependencies": { + "anymatch": "~3.1.2", + "braces": "~3.0.2", + "glob-parent": "~5.1.2", + "is-binary-path": "~2.1.0", + "is-glob": "~4.0.1", + "normalize-path": "~3.0.0", + "readdirp": "~3.6.0" + }, + "engines": { + "node": ">= 8.10.0" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + }, + "optionalDependencies": { + "fsevents": "~2.3.2" + } + }, + "node_modules/chokidar/node_modules/glob-parent": { + "version": "5.1.2", + "dev": true, + "license": "ISC", + "dependencies": { + "is-glob": "^4.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/chrome-trace-event": { + "version": "1.0.4", + "resolved": "https://bnpm.byted.org/chrome-trace-event/-/chrome-trace-event-1.0.4.tgz", + "integrity": "sha512-rNjApaLzuwaOTjCiT8lSDdGN1APCiqkChLMJxJPWLunPAt5fy8xgU9/jNOchV84wfIxrA0lRQB7oCT8jrn/wrQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.0" + } + }, + "node_modules/ci-info": { + "version": "4.4.0", + "resolved": "https://bnpm.byted.org/ci-info/-/ci-info-4.4.0.tgz", + "integrity": "sha512-77PSwercCZU2Fc4sX94eF8k8Pxte6JAwL4/ICZLFjJLqegs7kCuAsqqj/70NQF6TvDpgFjkubQB2FW2ZZddvQg==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/sibiraj-s" + } + ], + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/color-convert": { + "version": "2.0.1", + "dev": true, + "license": "MIT", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/color-name": { + "version": "1.1.4", + "dev": true, + "license": "MIT" + }, + "node_modules/commander": { + "version": "11.1.0", + "resolved": "https://bnpm.byted.org/commander/-/commander-11.1.0.tgz", + "integrity": "sha512-yPVavfyCcRhmorC7rWlkHn15b4wDVgVmBA7kV4QVBsF7kv/9TKJAbAXVTxvTnwP8HHKjRCJDClKbciiYS7p0DQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=16" + } + }, + "node_modules/cookie": { + "version": "0.7.2", + "resolved": "https://bnpm.byted.org/cookie/-/cookie-0.7.2.tgz", + "integrity": "sha512-yki5XnKuf750l50uGTllt6kKILY4nQ1eNIQatoXEByZ5dWgnKqbnqmTrBE5B4N7lrMJKQ2ytWMiTO2o0v6Ew/w==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/cors": { + "version": "2.8.6", + "resolved": "https://bnpm.byted.org/cors/-/cors-2.8.6.tgz", + "integrity": "sha512-tJtZBBHA6vjIAaF6EnIaq6laBBP9aq/Y3ouVJjEfoHbRBcHBAHYcMh/w8LDrk2PvIMMq8gmopa5D4V8RmbrxGw==", + "dev": true, + "license": "MIT", + "dependencies": { + "object-assign": "^4", + "vary": "^1" + }, + "engines": { + "node": ">= 0.10" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" + } + }, + "node_modules/cross-spawn": { + "version": "7.0.6", + "dev": true, + "license": "MIT", + "dependencies": { + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/css-declaration-sorter": { + "version": "7.4.0", + "resolved": "https://bnpm.byted.org/css-declaration-sorter/-/css-declaration-sorter-7.4.0.tgz", + "integrity": "sha512-LTuzjPoyA2vMGKKcaOqKSp7Ub2eGrNfKiZH4LpezxpNrsICGCSFvsQOI29psISxNZtaXibkC2CXzrQ5enMeGGw==", + "dev": true, + "license": "ISC", + "engines": { + "node": "^14 || ^16 || >=18" + }, + "peerDependencies": { + "postcss": "^8.0.9" + } + }, + "node_modules/css-minimizer-webpack-plugin": { + "version": "8.0.0", + "resolved": "https://bnpm.byted.org/css-minimizer-webpack-plugin/-/css-minimizer-webpack-plugin-8.0.0.tgz", + "integrity": "sha512-9bEpzHs8gEq6/cbEj418jXL/YWjBUD2YTLLk905Npt2JODqnRITin0+So5Vx4Dp5vyi2Lpt9pp2QHzQ7fdxNrw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jridgewell/trace-mapping": "^0.3.25", + "cssnano": "^7.0.4", + "jest-worker": "^30.0.5", + "postcss": "^8.4.40", + "schema-utils": "^4.2.0", + "serialize-javascript": "^7.0.3" + }, + "engines": { + "node": ">= 20.9.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "webpack": "^5.0.0" + }, + "peerDependenciesMeta": { + "@parcel/css": { + "optional": true + }, + "@swc/css": { + "optional": true + }, + "clean-css": { + "optional": true + }, + "csso": { + "optional": true + }, + "esbuild": { + "optional": true + }, + "lightningcss": { + "optional": true + } + } + }, + "node_modules/css-select": { + "version": "5.2.2", + "resolved": "https://bnpm.byted.org/css-select/-/css-select-5.2.2.tgz", + "integrity": "sha512-TizTzUddG/xYLA3NXodFM0fSbNizXjOKhqiQQwvhlspadZokn1KDy0NZFS0wuEubIYAV5/c1/lAr0TaaFXEXzw==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "boolbase": "^1.0.0", + "css-what": "^6.1.0", + "domhandler": "^5.0.2", + "domutils": "^3.0.1", + "nth-check": "^2.0.1" + }, + "funding": { + "url": "https://github.com/sponsors/fb55" + } + }, + "node_modules/css-tree": { + "version": "3.2.1", + "resolved": "https://bnpm.byted.org/css-tree/-/css-tree-3.2.1.tgz", + "integrity": "sha512-X7sjQzceUhu1u7Y/ylrRZFU2FS6LRiFVp6rKLPg23y3x3c3DOKAwuXGDp+PAGjh6CSnCjYeAul8pcT8bAl+lSA==", + "dev": true, + "license": "MIT", + "dependencies": { + "mdn-data": "2.27.1", + "source-map-js": "^1.2.1" + }, + "engines": { + "node": "^10 || ^12.20.0 || ^14.13.0 || >=15.0.0" + } + }, + "node_modules/css-what": { + "version": "6.2.2", + "resolved": "https://bnpm.byted.org/css-what/-/css-what-6.2.2.tgz", + "integrity": "sha512-u/O3vwbptzhMs3L1fQE82ZSLHQQfto5gyZzwteVIEyeaY5Fc7R4dapF/BvRoSYFeqfBk4m0V1Vafq5Pjv25wvA==", + "dev": true, + "license": "BSD-2-Clause", + "engines": { + "node": ">= 6" + }, + "funding": { + "url": "https://github.com/sponsors/fb55" + } + }, + "node_modules/cssesc": { + "version": "3.0.0", + "dev": true, + "license": "MIT", + "bin": { + "cssesc": "bin/cssesc" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/cssnano": { + "version": "7.1.9", + "resolved": "https://bnpm.byted.org/cssnano/-/cssnano-7.1.9.tgz", + "integrity": "sha512-uPR75+5Dk/WJ/YSPR1/YDHdwMM9c5FsaARljfKWgeCKLKOtJ0we21xy/RcCjn53fZnD/f6yYEIZ8pu18+GnbNQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "cssnano-preset-default": "^7.0.17", + "lilconfig": "^3.1.3" + }, + "engines": { + "node": "^18.12.0 || ^20.9.0 || >=22.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/cssnano" + }, + "peerDependencies": { + "postcss": "^8.5.13" + } + }, + "node_modules/cssnano-preset-default": { + "version": "7.0.17", + "resolved": "https://bnpm.byted.org/cssnano-preset-default/-/cssnano-preset-default-7.0.17.tgz", + "integrity": "sha512-11qO63A+czwguQFJCaTdICvbaxn0pJzz/XghLlv+OT7WyToDxAMR0Xb3/26/l0y0hQJywwNbj/SLSQlGBHE1OA==", + "dev": true, + "license": "MIT", + "dependencies": { + "browserslist": "^4.28.2", + "css-declaration-sorter": "^7.2.0", + "cssnano-utils": "^5.0.3", + "postcss-calc": "^10.1.1", + "postcss-colormin": "^7.0.10", + "postcss-convert-values": "^7.0.12", + "postcss-discard-comments": "^7.0.8", + "postcss-discard-duplicates": "^7.0.4", + "postcss-discard-empty": "^7.0.3", + "postcss-discard-overridden": "^7.0.3", + "postcss-merge-longhand": "^7.0.7", + "postcss-merge-rules": "^7.0.11", + "postcss-minify-font-values": "^7.0.3", + "postcss-minify-gradients": "^7.0.5", + "postcss-minify-params": "^7.0.9", + "postcss-minify-selectors": "^7.1.2", + "postcss-normalize-charset": "^7.0.3", + "postcss-normalize-display-values": "^7.0.3", + "postcss-normalize-positions": "^7.0.4", + "postcss-normalize-repeat-style": "^7.0.4", + "postcss-normalize-string": "^7.0.3", + "postcss-normalize-timing-functions": "^7.0.3", + "postcss-normalize-unicode": "^7.0.9", + "postcss-normalize-url": "^7.0.3", + "postcss-normalize-whitespace": "^7.0.3", + "postcss-ordered-values": "^7.0.4", + "postcss-reduce-initial": "^7.0.9", + "postcss-reduce-transforms": "^7.0.3", + "postcss-svgo": "^7.1.3", + "postcss-unique-selectors": "^7.0.7" + }, + "engines": { + "node": "^18.12.0 || ^20.9.0 || >=22.0" + }, + "peerDependencies": { + "postcss": "^8.5.13" + } + }, + "node_modules/cssnano-utils": { + "version": "5.0.3", + "resolved": "https://bnpm.byted.org/cssnano-utils/-/cssnano-utils-5.0.3.tgz", + "integrity": "sha512-ynIREMICLxkxm7e9bCR9sh75s4Q5drICi0ua1yxo5jH2XPBqSKkl4dOh4EbFqtUmnTMhRffHgYL0EKKkMjtJTg==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^18.12.0 || ^20.9.0 || >=22.0" + }, + "peerDependencies": { + "postcss": "^8.5.13" + } + }, + "node_modules/csso": { + "version": "5.0.5", + "resolved": "https://bnpm.byted.org/csso/-/csso-5.0.5.tgz", + "integrity": "sha512-0LrrStPOdJj+SPCCrGhzryycLjwcgUSHBtxNA8aIDxf0GLsRh1cKYhB00Gd1lDOS4yGH69+SNn13+TWbVHETFQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "css-tree": "~2.2.0" + }, + "engines": { + "node": "^10 || ^12.20.0 || ^14.13.0 || >=15.0.0", + "npm": ">=7.0.0" + } + }, + "node_modules/csso/node_modules/css-tree": { + "version": "2.2.1", + "resolved": "https://bnpm.byted.org/css-tree/-/css-tree-2.2.1.tgz", + "integrity": "sha512-OA0mILzGc1kCOCSJerOeqDxDQ4HOh+G8NbOJFOTgOCzpw7fCBubk0fEyxp8AgOL/jvLgYA/uV0cMbe43ElF1JA==", + "dev": true, + "license": "MIT", + "dependencies": { + "mdn-data": "2.0.28", + "source-map-js": "^1.0.1" + }, + "engines": { + "node": "^10 || ^12.20.0 || ^14.13.0 || >=15.0.0", + "npm": ">=7.0.0" + } + }, + "node_modules/csso/node_modules/mdn-data": { + "version": "2.0.28", + "resolved": "https://bnpm.byted.org/mdn-data/-/mdn-data-2.0.28.tgz", + "integrity": "sha512-aylIc7Z9y4yzHYAJNuESG3hfhC+0Ibp/MAMiaOZgNv4pmEdFyfZhhhny4MNiAfWdBQ1RQ2mfDWmM1x8SvGyp8g==", + "dev": true, + "license": "CC0-1.0" + }, + "node_modules/csstype": { + "version": "3.1.3", + "license": "MIT" + }, + "node_modules/data-view-buffer": { + "version": "1.0.2", + "resolved": "https://bnpm.byted.org/data-view-buffer/-/data-view-buffer-1.0.2.tgz", + "integrity": "sha512-EmKO5V3OLXh1rtK2wgXRansaK1/mtVdTUEiEI0W8RkvgT05kfxaH29PliLnpLP73yYO6142Q72QNa8Wx/A5CqQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.3", + "es-errors": "^1.3.0", + "is-data-view": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/data-view-byte-length": { + "version": "1.0.2", + "resolved": "https://bnpm.byted.org/data-view-byte-length/-/data-view-byte-length-1.0.2.tgz", + "integrity": "sha512-tuhGbE6CfTM9+5ANGf+oQb72Ky/0+s3xKUpHvShfiz2RxMFgFPjsXuRLBVMtvMs15awe45SRb83D6wH4ew6wlQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.3", + "es-errors": "^1.3.0", + "is-data-view": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/inspect-js" + } + }, + "node_modules/data-view-byte-offset": { + "version": "1.0.1", + "resolved": "https://bnpm.byted.org/data-view-byte-offset/-/data-view-byte-offset-1.0.1.tgz", + "integrity": "sha512-BS8PfmtDGnrgYdOonGZQdLZslWIeCGFP9tpan0hi1Co2Zr2NKADsvGYA8XxuG/4UWgJ6Cjtv+YJnB6MM69QGlQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.2", + "es-errors": "^1.3.0", + "is-data-view": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/debug": { + "version": "4.3.7", + "resolved": "https://bnpm.byted.org/debug/-/debug-4.3.7.tgz", + "integrity": "sha512-Er2nc/H7RrMXZBFCEim6TCmMk02Z8vLC2Rbi1KEBggpo0fS6l0S1nnapwmIi3yW/+GOJap1Krg4w0Hg80oCqgQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "ms": "^2.1.3" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/deep-eql": { + "version": "4.1.4", + "resolved": "https://bnpm.byted.org/deep-eql/-/deep-eql-4.1.4.tgz", + "integrity": "sha512-SUwdGfqdKOwxCPeVYjwSyRpJ7Z+fhpwIAtmCUdZIWZ/YP5R9WAsyuSgpLVDi9bjWoN2LXHNss/dk3urXtdQxGg==", + "dev": true, + "license": "MIT", + "dependencies": { + "type-detect": "^4.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/define-data-property": { + "version": "1.1.4", + "resolved": "https://bnpm.byted.org/define-data-property/-/define-data-property-1.1.4.tgz", + "integrity": "sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==", + "dev": true, + "license": "MIT", + "dependencies": { + "es-define-property": "^1.0.0", + "es-errors": "^1.3.0", + "gopd": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/define-properties": { + "version": "1.2.1", + "resolved": "https://bnpm.byted.org/define-properties/-/define-properties-1.2.1.tgz", + "integrity": "sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==", + "dev": true, + "license": "MIT", + "dependencies": { + "define-data-property": "^1.0.1", + "has-property-descriptors": "^1.0.0", + "object-keys": "^1.1.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/didyoumean": { + "version": "1.2.2", + "dev": true, + "license": "Apache-2.0" + }, + "node_modules/dlv": { + "version": "1.1.3", + "dev": true, + "license": "MIT" + }, + "node_modules/dom-serializer": { + "version": "2.0.0", + "resolved": "https://bnpm.byted.org/dom-serializer/-/dom-serializer-2.0.0.tgz", + "integrity": "sha512-wIkAryiqt/nV5EQKqQpo3SToSOV9J0DnbJqwK7Wv/Trc92zIAYZ4FlMu+JPFW1DfGFt81ZTCGgDEabffXeLyJg==", + "dev": true, + "license": "MIT", + "dependencies": { + "domelementtype": "^2.3.0", + "domhandler": "^5.0.2", + "entities": "^4.2.0" + }, + "funding": { + "url": "https://github.com/cheeriojs/dom-serializer?sponsor=1" + } + }, + "node_modules/dom-serializer/node_modules/entities": { + "version": "4.5.0", + "resolved": "https://bnpm.byted.org/entities/-/entities-4.5.0.tgz", + "integrity": "sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==", + "dev": true, + "license": "BSD-2-Clause", + "engines": { + "node": ">=0.12" + }, + "funding": { + "url": "https://github.com/fb55/entities?sponsor=1" + } + }, + "node_modules/domelementtype": { + "version": "2.3.0", + "resolved": "https://bnpm.byted.org/domelementtype/-/domelementtype-2.3.0.tgz", + "integrity": "sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/fb55" + } + ], + "license": "BSD-2-Clause" + }, + "node_modules/domhandler": { + "version": "5.0.3", + "resolved": "https://bnpm.byted.org/domhandler/-/domhandler-5.0.3.tgz", + "integrity": "sha512-cgwlv/1iFQiFnU96XXgROh8xTeetsnJiDsTc7TYCLFd9+/WNkIqPTxiM/8pSd8VIrhXGTf1Ny1q1hquVqDJB5w==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "domelementtype": "^2.3.0" + }, + "engines": { + "node": ">= 4" + }, + "funding": { + "url": "https://github.com/fb55/domhandler?sponsor=1" + } + }, + "node_modules/dompurify": { + "version": "3.4.11", + "resolved": "https://bnpm.byted.org/dompurify/-/dompurify-3.4.11.tgz", + "integrity": "sha512-zhlUV12GsaRzMsf9q5M254YhA4+VuF0fG+QFqu6aYpoGlKtz+w8//jBcGVYBgQkR5GHjUomejY84AV+/uPbWdw==", + "dev": true, + "license": "(MPL-2.0 OR Apache-2.0)", + "optionalDependencies": { + "@types/trusted-types": "^2.0.7" + } + }, + "node_modules/domutils": { + "version": "3.2.2", + "resolved": "https://bnpm.byted.org/domutils/-/domutils-3.2.2.tgz", + "integrity": "sha512-6kZKyUajlDuqlHKVX1w7gyslj9MPIXzIFiz/rGu35uC1wMi+kMhQwGhl4lt9unC9Vb9INnY9Z3/ZA3+FhASLaw==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "dom-serializer": "^2.0.0", + "domelementtype": "^2.3.0", + "domhandler": "^5.0.3" + }, + "funding": { + "url": "https://github.com/fb55/domutils?sponsor=1" + } + }, + "node_modules/dunder-proto": { + "version": "1.0.1", + "resolved": "https://bnpm.byted.org/dunder-proto/-/dunder-proto-1.0.1.tgz", + "integrity": "sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind-apply-helpers": "^1.0.1", + "es-errors": "^1.3.0", + "gopd": "^1.2.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/eastasianwidth": { + "version": "0.2.0", + "dev": true, + "license": "MIT" + }, + "node_modules/electron-to-chromium": { + "version": "1.5.378", + "resolved": "https://bnpm.byted.org/electron-to-chromium/-/electron-to-chromium-1.5.378.tgz", + "integrity": "sha512-VinvOAuuPmdD1guEgGv5f2Qp7/vlfqOrUOMYNnOD4wj3pit8kRsQHzfIf6teyUGWo15Tg5+bOJaRunvyltpVWQ==", + "dev": true, + "license": "ISC" + }, + "node_modules/emoji-regex": { + "version": "9.2.2", + "dev": true, + "license": "MIT" + }, + "node_modules/engine.io": { + "version": "6.6.9", + "resolved": "https://bnpm.byted.org/engine.io/-/engine.io-6.6.9.tgz", + "integrity": "sha512-clKkw4C7nJ22mGgoVcCg6V/W/TxdNyIOTr89k2ONZu81qqkddPFDF0LXcbAwhzPD8DjkiRCjzuiO6Y+fkpD4vg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/cors": "^2.8.12", + "@types/node": ">=10.0.0", + "@types/ws": "^8.5.12", + "accepts": "~1.3.4", + "base64id": "2.0.0", + "cookie": "~0.7.2", + "cors": "~2.8.5", + "debug": "~4.4.1", + "engine.io-parser": "~5.2.1", + "ws": "~8.21.0" + }, + "engines": { + "node": ">=10.2.0" + } + }, + "node_modules/engine.io-parser": { + "version": "5.2.3", + "resolved": "https://bnpm.byted.org/engine.io-parser/-/engine.io-parser-5.2.3.tgz", + "integrity": "sha512-HqD3yTBfnBxIrbnM1DoD6Pcq8NECnh8d4As1Qgh0z5Gg3jRRIqijury0CL3ghu/edArpUYiYqQiDUQBIs4np3Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10.0.0" + } + }, + "node_modules/engine.io/node_modules/debug": { + "version": "4.4.3", + "resolved": "https://bnpm.byted.org/debug/-/debug-4.4.3.tgz", + "integrity": "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==", + "dev": true, + "license": "MIT", + "dependencies": { + "ms": "^2.1.3" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/enhanced-resolve": { + "version": "5.24.0", + "resolved": "https://bnpm.byted.org/enhanced-resolve/-/enhanced-resolve-5.24.0.tgz", + "integrity": "sha512-SkE2t82KlkkxQRVMVLAGKxLfORGQfrkx5dkj+vlgXRVNEdPc4eZcR+J/Fvj8C+yKSFH5L0q3NFlyufOVQnCcYQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "graceful-fs": "^4.2.4", + "tapable": "^2.3.3" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/entities": { + "version": "6.0.1", + "resolved": "https://bnpm.byted.org/entities/-/entities-6.0.1.tgz", + "integrity": "sha512-aN97NXWF6AWBTahfVOIrB/NShkzi5H7F9r1s9mD3cDj4Ko5f2qhhVoYMibXF7GlLveb/D2ioWay8lxI97Ven3g==", + "dev": true, + "license": "BSD-2-Clause", + "engines": { + "node": ">=0.12" + }, + "funding": { + "url": "https://github.com/fb55/entities?sponsor=1" + } + }, + "node_modules/envinfo": { + "version": "7.21.0", + "resolved": "https://bnpm.byted.org/envinfo/-/envinfo-7.21.0.tgz", + "integrity": "sha512-Lw7I8Zp5YKHFCXL7+Dz95g4CcbMEpgvqZNNq3AmlT5XAV6CgAAk6gyAMqn2zjw08K9BHfcNuKrMiCPLByGafow==", + "dev": true, + "license": "MIT", + "bin": { + "envinfo": "dist/cli.js" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/es-abstract": { + "version": "1.24.2", + "resolved": "https://bnpm.byted.org/es-abstract/-/es-abstract-1.24.2.tgz", + "integrity": "sha512-2FpH9Q5i2RRwyEP1AylXe6nYLR5OhaJTZwmlcP0dL/+JCbgg7yyEo/sEK6HeGZRf3dFpWwThaRHVApXSkW3xeg==", + "dev": true, + "license": "MIT", + "dependencies": { + "array-buffer-byte-length": "^1.0.2", + "arraybuffer.prototype.slice": "^1.0.4", + "available-typed-arrays": "^1.0.7", + "call-bind": "^1.0.8", + "call-bound": "^1.0.4", + "data-view-buffer": "^1.0.2", + "data-view-byte-length": "^1.0.2", + "data-view-byte-offset": "^1.0.1", + "es-define-property": "^1.0.1", + "es-errors": "^1.3.0", + "es-object-atoms": "^1.1.1", + "es-set-tostringtag": "^2.1.0", + "es-to-primitive": "^1.3.0", + "function.prototype.name": "^1.1.8", + "get-intrinsic": "^1.3.0", + "get-proto": "^1.0.1", + "get-symbol-description": "^1.1.0", + "globalthis": "^1.0.4", + "gopd": "^1.2.0", + "has-property-descriptors": "^1.0.2", + "has-proto": "^1.2.0", + "has-symbols": "^1.1.0", + "hasown": "^2.0.2", + "internal-slot": "^1.1.0", + "is-array-buffer": "^3.0.5", + "is-callable": "^1.2.7", + "is-data-view": "^1.0.2", + "is-negative-zero": "^2.0.3", + "is-regex": "^1.2.1", + "is-set": "^2.0.3", + "is-shared-array-buffer": "^1.0.4", + "is-string": "^1.1.1", + "is-typed-array": "^1.1.15", + "is-weakref": "^1.1.1", + "math-intrinsics": "^1.1.0", + "object-inspect": "^1.13.4", + "object-keys": "^1.1.1", + "object.assign": "^4.1.7", + "own-keys": "^1.0.1", + "regexp.prototype.flags": "^1.5.4", + "safe-array-concat": "^1.1.3", + "safe-push-apply": "^1.0.0", + "safe-regex-test": "^1.1.0", + "set-proto": "^1.0.0", + "stop-iteration-iterator": "^1.1.0", + "string.prototype.trim": "^1.2.10", + "string.prototype.trimend": "^1.0.9", + "string.prototype.trimstart": "^1.0.8", + "typed-array-buffer": "^1.0.3", + "typed-array-byte-length": "^1.0.3", + "typed-array-byte-offset": "^1.0.4", + "typed-array-length": "^1.0.7", + "unbox-primitive": "^1.1.0", + "which-typed-array": "^1.1.19" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/es-abstract-get": { + "version": "1.0.0", + "resolved": "https://bnpm.byted.org/es-abstract-get/-/es-abstract-get-1.0.0.tgz", + "integrity": "sha512-6PMWXpdhshVvFp+FoWYs1EvG1Nj0tvk0dZM+XcK0xMEM1czRVcP6ohqPWHy6qPagSpC8j4+p89WXlT+xXJs/fg==", + "dev": true, + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0", + "es-object-atoms": "^1.1.2", + "is-callable": "^1.2.7", + "object-inspect": "^1.13.4" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/es-define-property": { + "version": "1.0.1", + "resolved": "https://bnpm.byted.org/es-define-property/-/es-define-property-1.0.1.tgz", + "integrity": "sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-errors": { + "version": "1.3.0", + "resolved": "https://bnpm.byted.org/es-errors/-/es-errors-1.3.0.tgz", + "integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-module-lexer": { + "version": "2.1.0", + "resolved": "https://bnpm.byted.org/es-module-lexer/-/es-module-lexer-2.1.0.tgz", + "integrity": "sha512-n27zTYMjYu1aj4MjCWzSP7G9r75utsaoc8m61weK+W8JMBGGQybd43GstCXZ3WNmSFtGT9wi59qQTW6mhTR5LQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/es-object-atoms": { + "version": "1.1.2", + "resolved": "https://bnpm.byted.org/es-object-atoms/-/es-object-atoms-1.1.2.tgz", + "integrity": "sha512-HWcBoN6NileqtSydK2FqHbS/LoDd2pqrnQHLyJzBj4kOp/ky2MWMN694xOfkK8/SnUsW2DH7EfyVlydKCsm1Zw==", + "dev": true, + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-set-tostringtag": { + "version": "2.1.0", + "resolved": "https://bnpm.byted.org/es-set-tostringtag/-/es-set-tostringtag-2.1.0.tgz", + "integrity": "sha512-j6vWzfrGVfyXxge+O0x5sh6cvxAog0a/4Rdd2K36zCMV5eJ+/+tOAngRO8cODMNWbVRdVlmGZQL2YS3yR8bIUA==", + "dev": true, + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.6", + "has-tostringtag": "^1.0.2", + "hasown": "^2.0.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-to-primitive": { + "version": "1.3.1", + "resolved": "https://bnpm.byted.org/es-to-primitive/-/es-to-primitive-1.3.1.tgz", + "integrity": "sha512-CxN9N56HYfd2m/acc/NOFrZQsN9kU4eh+2kk6A707Kz1krH8tKmfrs5RnftB8WNX80T0NS7vSQsDOlg23diR2g==", + "dev": true, + "license": "MIT", + "dependencies": { + "es-abstract-get": "^1.0.0", + "es-errors": "^1.3.0", + "is-callable": "^1.2.7", + "is-date-object": "^1.1.0", + "is-symbol": "^1.1.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/es-toolkit": { + "version": "1.48.1", + "resolved": "https://bnpm.byted.org/es-toolkit/-/es-toolkit-1.48.1.tgz", + "integrity": "sha512-wfnXlwd5I75eXRtdD2vuEs50xHHESECDsGD7yiQnfFVNoa5522NwXEbmgo98LfiukSQHs+mBM7/YG3qKJB9/mQ==", + "dev": true, + "license": "MIT", + "workspaces": [ + "docs", + "benchmarks" + ] + }, + "node_modules/escalade": { + "version": "3.2.0", + "resolved": "https://bnpm.byted.org/escalade/-/escalade-3.2.0.tgz", + "integrity": "sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/eslint-scope": { + "version": "5.1.1", + "resolved": "https://bnpm.byted.org/eslint-scope/-/eslint-scope-5.1.1.tgz", + "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "esrecurse": "^4.3.0", + "estraverse": "^4.1.1" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/esrecurse": { + "version": "4.3.0", + "resolved": "https://bnpm.byted.org/esrecurse/-/esrecurse-4.3.0.tgz", + "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "estraverse": "^5.2.0" + }, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/esrecurse/node_modules/estraverse": { + "version": "5.3.0", + "resolved": "https://bnpm.byted.org/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", + "dev": true, + "license": "BSD-2-Clause", + "engines": { + "node": ">=4.0" + } + }, + "node_modules/estraverse": { + "version": "4.3.0", + "resolved": "https://bnpm.byted.org/estraverse/-/estraverse-4.3.0.tgz", + "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", + "dev": true, + "license": "BSD-2-Clause", + "engines": { + "node": ">=4.0" + } + }, + "node_modules/eventemitter3": { + "version": "5.0.4", + "resolved": "https://bnpm.byted.org/eventemitter3/-/eventemitter3-5.0.4.tgz", + "integrity": "sha512-mlsTRyGaPBjPedk6Bvw+aqbsXDtoAyAzm5MO7JgU+yVRyMQ5O8bD4Kcci7BS85f93veegeCPkL8R4GLClnjLFw==", + "dev": true, + "license": "MIT" + }, + "node_modules/events": { + "version": "3.3.0", + "resolved": "https://bnpm.byted.org/events/-/events-3.3.0.tgz", + "integrity": "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.8.x" + } + }, + "node_modules/fast-deep-equal": { + "version": "3.1.3", + "resolved": "https://bnpm.byted.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", + "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", + "dev": true, + "license": "MIT" + }, + "node_modules/fast-glob": { + "version": "3.3.3", + "dev": true, + "license": "MIT", + "dependencies": { + "@nodelib/fs.stat": "^2.0.2", + "@nodelib/fs.walk": "^1.2.3", + "glob-parent": "^5.1.2", + "merge2": "^1.3.0", + "micromatch": "^4.0.8" + }, + "engines": { + "node": ">=8.6.0" + } + }, + "node_modules/fast-glob/node_modules/glob-parent": { + "version": "5.1.2", + "dev": true, + "license": "ISC", + "dependencies": { + "is-glob": "^4.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/fast-uri": { + "version": "3.1.2", + "resolved": "https://bnpm.byted.org/fast-uri/-/fast-uri-3.1.2.tgz", + "integrity": "sha512-rVjf7ArG3LTk+FS6Yw81V1DLuZl1bRbNrev6Tmd/9RaroeeRRJhAt7jg/6YFxbvAQXUCavSoZhPPj6oOx+5KjQ==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/fastify" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/fastify" + } + ], + "license": "BSD-3-Clause" + }, + "node_modules/fastq": { + "version": "1.19.1", + "dev": true, + "license": "ISC", + "dependencies": { + "reusify": "^1.0.4" + } + }, + "node_modules/filesize": { + "version": "11.0.17", + "resolved": "https://bnpm.byted.org/filesize/-/filesize-11.0.17.tgz", + "integrity": "sha512-oHLTvMLw6imZUl1se/RBQrFlyy50nXce4sU7yGR6Qc0JgCwqnfiFsAnEwotdGmfKLD7SArGUk2/5STU0k8LOBQ==", + "dev": true, + "license": "BSD-3-Clause", + "engines": { + "node": ">= 10.8.0" + } + }, + "node_modules/fill-range": { + "version": "7.1.1", + "dev": true, + "license": "MIT", + "dependencies": { + "to-regex-range": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/for-each": { + "version": "0.3.5", + "resolved": "https://bnpm.byted.org/for-each/-/for-each-0.3.5.tgz", + "integrity": "sha512-dKx12eRCVIzqCxFGplyFKJMPvLEWgmNtUrpTiJIR5u97zEhRG8ySrtboPHZXx7daLxQVrl643cTzbab2tkQjxg==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-callable": "^1.2.7" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/foreground-child": { + "version": "3.3.1", + "dev": true, + "license": "ISC", + "dependencies": { + "cross-spawn": "^7.0.6", + "signal-exit": "^4.0.1" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/fs-extra": { + "version": "11.3.5", + "resolved": "https://bnpm.byted.org/fs-extra/-/fs-extra-11.3.5.tgz", + "integrity": "sha512-eKpRKAovdpZtR1WopLHxlBWvAgPny3c4gX1G5Jhwmmw4XJj0ifSD5qB5TOo8hmA0wlRKDAOAhEE1yVPgs6Fgcg==", + "dev": true, + "license": "MIT", + "dependencies": { + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + }, + "engines": { + "node": ">=14.14" + } + }, + "node_modules/fsevents": { + "version": "2.3.3", + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^8.16.0 || ^10.6.0 || >=11.0.0" + } + }, + "node_modules/function-bind": { + "version": "1.1.2", + "dev": true, + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/function.prototype.name": { + "version": "1.2.0", + "resolved": "https://bnpm.byted.org/function.prototype.name/-/function.prototype.name-1.2.0.tgz", + "integrity": "sha512-jObKIik1P2QjPHP5nz5BaOtUlfgS0fWo8IUByNXkM+o+02sJOi94em77GwJKQSJ3gfPHdgzLNrHc1uokV4P/ew==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.9", + "call-bound": "^1.0.4", + "es-define-property": "^1.0.1", + "es-errors": "^1.3.0", + "functions-have-names": "^1.2.3", + "has-property-descriptors": "^1.0.2", + "hasown": "^2.0.4", + "is-callable": "^1.2.7", + "is-document.all": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/functions-have-names": { + "version": "1.2.3", + "resolved": "https://bnpm.byted.org/functions-have-names/-/functions-have-names-1.2.3.tgz", + "integrity": "sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==", + "dev": true, + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/generator-function": { + "version": "2.0.1", + "resolved": "https://bnpm.byted.org/generator-function/-/generator-function-2.0.1.tgz", + "integrity": "sha512-SFdFmIJi+ybC0vjlHN0ZGVGHc3lgE0DxPAT0djjVg+kjOnSqclqmj0KQ7ykTOLP6YxoqOvuAODGdcHJn+43q3g==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/get-intrinsic": { + "version": "1.3.0", + "resolved": "https://bnpm.byted.org/get-intrinsic/-/get-intrinsic-1.3.0.tgz", + "integrity": "sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind-apply-helpers": "^1.0.2", + "es-define-property": "^1.0.1", + "es-errors": "^1.3.0", + "es-object-atoms": "^1.1.1", + "function-bind": "^1.1.2", + "get-proto": "^1.0.1", + "gopd": "^1.2.0", + "has-symbols": "^1.1.0", + "hasown": "^2.0.2", + "math-intrinsics": "^1.1.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/get-port": { + "version": "5.1.1", + "resolved": "https://bnpm.byted.org/get-port/-/get-port-5.1.1.tgz", + "integrity": "sha512-g/Q1aTSDOxFpchXC4i8ZWvxA1lnPqx/JHqcpIw0/LX9T8x/GBbi6YnlN5nhaKIFkT8oFsscUKgDJYxfwfS6QsQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/get-proto": { + "version": "1.0.1", + "resolved": "https://bnpm.byted.org/get-proto/-/get-proto-1.0.1.tgz", + "integrity": "sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g==", + "dev": true, + "license": "MIT", + "dependencies": { + "dunder-proto": "^1.0.1", + "es-object-atoms": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/get-symbol-description": { + "version": "1.1.0", + "resolved": "https://bnpm.byted.org/get-symbol-description/-/get-symbol-description-1.1.0.tgz", + "integrity": "sha512-w9UMqWwJxHNOvoNzSJ2oPF5wvYcvP7jUvYzhp67yEhTi17ZDBBC1z9pTdGuzjD+EFIqLSYRweZjqfiPzQ06Ebg==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.3", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.6" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/glob": { + "version": "10.4.5", + "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/glob-parent": { + "version": "6.0.2", + "dev": true, + "license": "ISC", + "dependencies": { + "is-glob": "^4.0.3" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/glob-to-regexp": { + "version": "0.4.1", + "resolved": "https://bnpm.byted.org/glob-to-regexp/-/glob-to-regexp-0.4.1.tgz", + "integrity": "sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw==", + "dev": true, + "license": "BSD-2-Clause" + }, + "node_modules/globalthis": { + "version": "1.0.4", + "resolved": "https://bnpm.byted.org/globalthis/-/globalthis-1.0.4.tgz", + "integrity": "sha512-DpLKbNU4WylpxJykQujfCcwYWiV/Jhm50Goo0wrVILAv5jOr9d+H+UR3PhSCD2rCCEIg0uc+G+muBTwD54JhDQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "define-properties": "^1.2.1", + "gopd": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/gopd": { + "version": "1.2.0", + "resolved": "https://bnpm.byted.org/gopd/-/gopd-1.2.0.tgz", + "integrity": "sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/graceful-fs": { + "version": "4.2.11", + "resolved": "https://bnpm.byted.org/graceful-fs/-/graceful-fs-4.2.11.tgz", + "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==", + "dev": true, + "license": "ISC" + }, + "node_modules/has-bigints": { + "version": "1.1.0", + "resolved": "https://bnpm.byted.org/has-bigints/-/has-bigints-1.1.0.tgz", + "integrity": "sha512-R3pbpkcIqv2Pm3dUwgjclDRVmWpTJW2DcMzcIhEXEx1oh/CEMObMm3KLmRJOdvhM7o4uQBnwr8pzRK2sJWIqfg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://bnpm.byted.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/has-property-descriptors": { + "version": "1.0.2", + "resolved": "https://bnpm.byted.org/has-property-descriptors/-/has-property-descriptors-1.0.2.tgz", + "integrity": "sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==", + "dev": true, + "license": "MIT", + "dependencies": { + "es-define-property": "^1.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-proto": { + "version": "1.2.0", + "resolved": "https://bnpm.byted.org/has-proto/-/has-proto-1.2.0.tgz", + "integrity": "sha512-KIL7eQPfHQRC8+XluaIw7BHUwwqL19bQn4hzNgdr+1wXoU0KKj6rufu47lhY7KbJR2C6T6+PfyN0Ea7wkSS+qQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "dunder-proto": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-symbols": { + "version": "1.1.0", + "resolved": "https://bnpm.byted.org/has-symbols/-/has-symbols-1.1.0.tgz", + "integrity": "sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-tostringtag": { + "version": "1.0.2", + "resolved": "https://bnpm.byted.org/has-tostringtag/-/has-tostringtag-1.0.2.tgz", + "integrity": "sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==", + "dev": true, + "license": "MIT", + "dependencies": { + "has-symbols": "^1.0.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/hasown": { + "version": "2.0.4", + "resolved": "https://bnpm.byted.org/hasown/-/hasown-2.0.4.tgz", + "integrity": "sha512-T2UbfbBEF32wiepXIsMlTW9+dDYC6wMh/t/vYA4tuOMKqWz/n3vr1NFSxQiyP+zk2mXsoMA/i/7qV6LKut1t1A==", + "dev": true, + "license": "MIT", + "dependencies": { + "function-bind": "^1.1.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/htmlparser2": { + "version": "10.0.0", + "resolved": "https://bnpm.byted.org/htmlparser2/-/htmlparser2-10.0.0.tgz", + "integrity": "sha512-TwAZM+zE5Tq3lrEHvOlvwgj1XLWQCtaaibSN11Q+gGBAS7Y1uZSWwXXRe4iF6OXnaq1riyQAPFOBtYc77Mxq0g==", + "dev": true, + "funding": [ + "https://github.com/fb55/htmlparser2?sponsor=1", + { + "type": "github", + "url": "https://github.com/sponsors/fb55" + } + ], + "license": "MIT", + "dependencies": { + "domelementtype": "^2.3.0", + "domhandler": "^5.0.3", + "domutils": "^3.2.1", + "entities": "^6.0.0" + } + }, + "node_modules/internal-slot": { + "version": "1.1.0", + "resolved": "https://bnpm.byted.org/internal-slot/-/internal-slot-1.1.0.tgz", + "integrity": "sha512-4gd7VpWNQNB4UKKCFFVcp1AVv+FMOgs9NKzjHKusc8jTMhd5eL1NqQqOpE0KzMds804/yHlglp3uxgluOqAPLw==", + "dev": true, + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0", + "hasown": "^2.0.2", + "side-channel": "^1.1.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/is-array-buffer": { + "version": "3.0.5", + "resolved": "https://bnpm.byted.org/is-array-buffer/-/is-array-buffer-3.0.5.tgz", + "integrity": "sha512-DDfANUiiG2wC1qawP66qlTugJeL5HyzMpfr8lLK+jMQirGzNod0B12cFB/9q838Ru27sBwfw78/rdoU7RERz6A==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.8", + "call-bound": "^1.0.3", + "get-intrinsic": "^1.2.6" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-async-function": { + "version": "2.1.1", + "resolved": "https://bnpm.byted.org/is-async-function/-/is-async-function-2.1.1.tgz", + "integrity": "sha512-9dgM/cZBnNvjzaMYHVoxxfPj2QXt22Ev7SuuPrs+xav0ukGB0S6d4ydZdEiM48kLx5kDV+QBPrpVnFyefL8kkQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "async-function": "^1.0.0", + "call-bound": "^1.0.3", + "get-proto": "^1.0.1", + "has-tostringtag": "^1.0.2", + "safe-regex-test": "^1.1.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-bigint": { + "version": "1.1.0", + "resolved": "https://bnpm.byted.org/is-bigint/-/is-bigint-1.1.0.tgz", + "integrity": "sha512-n4ZT37wG78iz03xPRKJrHTdZbe3IicyucEtdRsV5yglwc3GyUfbAfpSeD0FJ41NbUNSt5wbhqfp1fS+BgnvDFQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "has-bigints": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-binary-path": { + "version": "2.1.0", + "dev": true, + "license": "MIT", + "dependencies": { + "binary-extensions": "^2.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/is-boolean-object": { + "version": "1.2.2", + "resolved": "https://bnpm.byted.org/is-boolean-object/-/is-boolean-object-1.2.2.tgz", + "integrity": "sha512-wa56o2/ElJMYqjCjGkXri7it5FbebW5usLw/nPmCMs5DeZ7eziSYZhSmPRn0txqeW4LnAmQQU7FgqLpsEFKM4A==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.3", + "has-tostringtag": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-callable": { + "version": "1.2.7", + "resolved": "https://bnpm.byted.org/is-callable/-/is-callable-1.2.7.tgz", + "integrity": "sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-core-module": { + "version": "2.16.1", + "dev": true, + "license": "MIT", + "dependencies": { + "hasown": "^2.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-data-view": { + "version": "1.0.2", + "resolved": "https://bnpm.byted.org/is-data-view/-/is-data-view-1.0.2.tgz", + "integrity": "sha512-RKtWF8pGmS87i2D6gqQu/l7EYRlVdfzemCJN/P3UOs//x1QE7mfhvzHIApBTRf7axvT6DMGwSwBXYCT0nfB9xw==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.2", + "get-intrinsic": "^1.2.6", + "is-typed-array": "^1.1.13" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-date-object": { + "version": "1.1.0", + "resolved": "https://bnpm.byted.org/is-date-object/-/is-date-object-1.1.0.tgz", + "integrity": "sha512-PwwhEakHVKTdRNVOw+/Gyh0+MzlCl4R6qKvkhuvLtPMggI1WAHt9sOwZxQLSGpUaDnrdyDsomoRgNnCfKNSXXg==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.2", + "has-tostringtag": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-document.all": { + "version": "1.0.0", + "resolved": "https://bnpm.byted.org/is-document.all/-/is-document.all-1.0.0.tgz", + "integrity": "sha512-+XSoyS05OdBbhFuELhgTCpFNHkpBOJqtsZfUFFpe5QTw+9Sjbh8zitxhQkYAo6wV7e1Vb8cAPvpCk9jGam/82g==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.4" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-extglob": { + "version": "2.1.1", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-finalizationregistry": { + "version": "1.1.1", + "resolved": "https://bnpm.byted.org/is-finalizationregistry/-/is-finalizationregistry-1.1.1.tgz", + "integrity": "sha512-1pC6N8qWJbWoPtEjgcL2xyhQOP491EQjeUo3qTKcmV8YSDDJrOepfG8pcC7h/QgnQHYSv0mJ3Z/ZWxmatVrysg==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-fullwidth-code-point": { + "version": "3.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/is-generator-function": { + "version": "1.1.2", + "resolved": "https://bnpm.byted.org/is-generator-function/-/is-generator-function-1.1.2.tgz", + "integrity": "sha512-upqt1SkGkODW9tsGNG5mtXTXtECizwtS2kA161M+gJPc1xdb/Ax629af6YrTwcOeQHbewrPNlE5Dx7kzvXTizA==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.4", + "generator-function": "^2.0.0", + "get-proto": "^1.0.1", + "has-tostringtag": "^1.0.2", + "safe-regex-test": "^1.1.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-glob": { + "version": "4.0.3", + "dev": true, + "license": "MIT", + "dependencies": { + "is-extglob": "^2.1.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-map": { + "version": "2.0.3", + "resolved": "https://bnpm.byted.org/is-map/-/is-map-2.0.3.tgz", + "integrity": "sha512-1Qed0/Hr2m+YqxnM09CjA2d/i6YZNfF6R2oRAOj36eUdS6qIV/huPJNSEpKbupewFs+ZsJlxsjjPbc0/afW6Lw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-negative-zero": { + "version": "2.0.3", + "resolved": "https://bnpm.byted.org/is-negative-zero/-/is-negative-zero-2.0.3.tgz", + "integrity": "sha512-5KoIu2Ngpyek75jXodFvnafB6DJgr3u8uuK0LEZJjrU19DrMD3EVERaR8sjz8CCGgpZvxPl9SuE1GMVPFHx1mw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-number": { + "version": "7.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.12.0" + } + }, + "node_modules/is-number-object": { + "version": "1.1.1", + "resolved": "https://bnpm.byted.org/is-number-object/-/is-number-object-1.1.1.tgz", + "integrity": "sha512-lZhclumE1G6VYD8VHe35wFaIif+CTy5SJIi5+3y4psDgWu4wPDoBhF8NxUOinEc7pHgiTsT6MaBb92rKhhD+Xw==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.3", + "has-tostringtag": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-regex": { + "version": "1.2.1", + "resolved": "https://bnpm.byted.org/is-regex/-/is-regex-1.2.1.tgz", + "integrity": "sha512-MjYsKHO5O7mCsmRGxWcLWheFqN9DJ/2TmngvjKXihe6efViPqc274+Fx/4fYj/r03+ESvBdTXK0V6tA3rgez1g==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.2", + "gopd": "^1.2.0", + "has-tostringtag": "^1.0.2", + "hasown": "^2.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-set": { + "version": "2.0.3", + "resolved": "https://bnpm.byted.org/is-set/-/is-set-2.0.3.tgz", + "integrity": "sha512-iPAjerrse27/ygGLxw+EBR9agv9Y6uLeYVJMu+QNCoouJ1/1ri0mGrcWpfCqFZuzzx3WjtwxG098X+n4OuRkPg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-shared-array-buffer": { + "version": "1.0.4", + "resolved": "https://bnpm.byted.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.4.tgz", + "integrity": "sha512-ISWac8drv4ZGfwKl5slpHG9OwPNty4jOWPRIhBpxOoD+hqITiwuipOQ2bNthAzwA3B4fIjO4Nln74N0S9byq8A==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-string": { + "version": "1.1.1", + "resolved": "https://bnpm.byted.org/is-string/-/is-string-1.1.1.tgz", + "integrity": "sha512-BtEeSsoaQjlSPBemMQIrY1MY0uM6vnS1g5fmufYOtnxLGUZM2178PKbhsk7Ffv58IX+ZtcvoGwccYsh0PglkAA==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.3", + "has-tostringtag": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-symbol": { + "version": "1.1.1", + "resolved": "https://bnpm.byted.org/is-symbol/-/is-symbol-1.1.1.tgz", + "integrity": "sha512-9gGx6GTtCQM73BgmHQXfDmLtfjjTUDSyoxTCbp5WtoixAhfgsDirWIcVQ/IHpvI5Vgd5i/J5F7B9cN/WlVbC/w==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.2", + "has-symbols": "^1.1.0", + "safe-regex-test": "^1.1.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-typed-array": { + "version": "1.1.15", + "resolved": "https://bnpm.byted.org/is-typed-array/-/is-typed-array-1.1.15.tgz", + "integrity": "sha512-p3EcsicXjit7SaskXHs1hA91QxgTw46Fv6EFKKGS5DRFLD8yKnohjF3hxoju94b/OcMZoQukzpPpBE9uLVKzgQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "which-typed-array": "^1.1.16" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-weakmap": { + "version": "2.0.2", + "resolved": "https://bnpm.byted.org/is-weakmap/-/is-weakmap-2.0.2.tgz", + "integrity": "sha512-K5pXYOm9wqY1RgjpL3YTkF39tni1XajUIkawTLUo9EZEVUFga5gSQJF8nNS7ZwJQ02y+1YCNYcMh+HIf1ZqE+w==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-weakref": { + "version": "1.1.1", + "resolved": "https://bnpm.byted.org/is-weakref/-/is-weakref-1.1.1.tgz", + "integrity": "sha512-6i9mGWSlqzNMEqpCp93KwRS1uUOodk2OJ6b+sq7ZPDSy2WuI5NFIxp/254TytR8ftefexkWn5xNiHUNpPOfSew==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-weakset": { + "version": "2.0.4", + "resolved": "https://bnpm.byted.org/is-weakset/-/is-weakset-2.0.4.tgz", + "integrity": "sha512-mfcwb6IzQyOKTs84CQMrOwW4gQcaTOAWJ0zzJCl2WSPDrWk/OzDaImWFH3djXhb24g4eudZfLRozAvPGw4d9hQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.3", + "get-intrinsic": "^1.2.6" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/isarray": { + "version": "2.0.5", + "resolved": "https://bnpm.byted.org/isarray/-/isarray-2.0.5.tgz", + "integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==", + "dev": true, + "license": "MIT" + }, + "node_modules/isexe": { + "version": "2.0.0", + "dev": true, + "license": "ISC" + }, + "node_modules/jackspeak": { + "version": "3.4.3", + "dev": true, + "license": "BlueOak-1.0.0", + "dependencies": { + "@isaacs/cliui": "^8.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + }, + "optionalDependencies": { + "@pkgjs/parseargs": "^0.11.0" + } + }, + "node_modules/jest-regex-util": { + "version": "30.4.0", + "resolved": "https://bnpm.byted.org/jest-regex-util/-/jest-regex-util-30.4.0.tgz", + "integrity": "sha512-mWlvLviKIgIQ8VCuM1xRdD0TWp3zlzionlmDBjuXVBs+VkmXq6FgW9T4Emr7oGz/Rk6feDCGyiugolcQEyp3mg==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" + } + }, + "node_modules/jest-util": { + "version": "30.4.1", + "resolved": "https://bnpm.byted.org/jest-util/-/jest-util-30.4.1.tgz", + "integrity": "sha512-vjQb1sACEiv13DKJMDToJpzVW0joCsIQrmbg0fi7CyOOt+g9jTuQl2A216pWRBYhOVt53XbL/2LbMKg1BECWOw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jest/types": "30.4.1", + "@types/node": "*", + "chalk": "^4.1.2", + "ci-info": "^4.2.0", + "graceful-fs": "^4.2.11", + "picomatch": "^4.0.3" + }, + "engines": { + "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" + } + }, + "node_modules/jest-util/node_modules/picomatch": { + "version": "4.0.4", + "resolved": "https://bnpm.byted.org/picomatch/-/picomatch-4.0.4.tgz", + "integrity": "sha512-QP88BAKvMam/3NxH6vj2o21R6MjxZUAd6nlwAS/pnGvN9IVLocLHxGYIzFhg6fUQ+5th6P4dv4eW9jX3DSIj7A==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/jest-worker": { + "version": "30.4.1", + "resolved": "https://bnpm.byted.org/jest-worker/-/jest-worker-30.4.1.tgz", + "integrity": "sha512-SHynN/q/QD++iNyvMdy+WMmbCGk8jIsNcRxycXbWubSOhvo6T+j2afcfUSl+3hYsiBebOTo0cT7c2H7CXugu1g==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/node": "*", + "@ungap/structured-clone": "^1.3.0", + "jest-util": "30.4.1", + "merge-stream": "^2.0.0", + "supports-color": "^8.1.1" + }, + "engines": { + "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" + } + }, + "node_modules/js-tokens": { + "version": "4.0.0", + "resolved": "https://bnpm.byted.org/js-tokens/-/js-tokens-4.0.0.tgz", + "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/json-schema-traverse": { + "version": "1.0.0", + "resolved": "https://bnpm.byted.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", + "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", + "dev": true, + "license": "MIT" + }, + "node_modules/json-stream-stringify": { + "version": "3.0.1", + "resolved": "https://bnpm.byted.org/json-stream-stringify/-/json-stream-stringify-3.0.1.tgz", + "integrity": "sha512-vuxs3G1ocFDiAQ/SX0okcZbtqXwgj1g71qE9+vrjJ2EkjKQlEFDAcUNRxRU8O+GekV4v5cM2qXP0Wyt/EMDBiQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/jsonfile": { + "version": "6.2.1", + "resolved": "https://bnpm.byted.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/launch-editor": { + "version": "2.14.1", + "resolved": "https://bnpm.byted.org/launch-editor/-/launch-editor-2.14.1.tgz", + "integrity": "sha512-QWBrQsMpH7gPr965dsKD/3cKWiNoTjpATQf++Xq63N6sKRGMwlVXz41O1IZTMfZQgBctD/K5Zt06+/I6pP6+HA==", + "dev": true, + "license": "MIT", + "dependencies": { + "picocolors": "^1.1.1", + "shell-quote": "^1.8.4" + } + }, + "node_modules/lilconfig": { + "version": "3.1.3", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/antonk52" + } + }, + "node_modules/lines-and-columns": { + "version": "2.0.4", + "resolved": "https://bnpm.byted.org/lines-and-columns/-/lines-and-columns-2.0.4.tgz", + "integrity": "sha512-wM1+Z03eypVAVUCE7QdSqpVIvelbOakn1M0bPDoA4SGWPx3sNDVUiMo3L6To6WWGClB7VyXnhQ4Sn7gxiJbE6A==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + } + }, + "node_modules/linkify-it": { + "version": "5.0.1", + "resolved": "https://bnpm.byted.org/linkify-it/-/linkify-it-5.0.1.tgz", + "integrity": "sha512-wVoTjP4Q6R0NW5hiZkVJaFZPWgtXfoGF+6LucL3/FtiNjmcHhYjEr5f1Kqjirc1nBW07J/ZuRFumqr2oqccEWg==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/puzrin" + }, + { + "type": "github", + "url": "https://github.com/sponsors/markdown-it" + } + ], + "license": "MIT", + "dependencies": { + "uc.micro": "^2.0.0" + } + }, + "node_modules/loader-runner": { + "version": "4.3.2", + "resolved": "https://bnpm.byted.org/loader-runner/-/loader-runner-4.3.2.tgz", + "integrity": "sha512-DFEqQ3ihfS9blba08cLfYf1NRAIEm+dDjic073DRDc3/JspI/8wYmtDsHwd3+4hwvdxSK7PGaElfTmm0awWJ4w==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.11.5" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + } + }, + "node_modules/lodash.memoize": { + "version": "4.1.2", + "resolved": "https://bnpm.byted.org/lodash.memoize/-/lodash.memoize-4.1.2.tgz", + "integrity": "sha512-t7j+NzmgnQzTAYXcsHYLgimltOV1MXHtlOWf6GjL9Kj8GK5FInw5JotxvbOs+IvV1/Dzo04/fCGfLVs7aXb4Ag==", + "dev": true, + "license": "MIT" + }, + "node_modules/lodash.uniq": { + "version": "4.5.0", + "resolved": "https://bnpm.byted.org/lodash.uniq/-/lodash.uniq-4.5.0.tgz", + "integrity": "sha512-xfBaXQd9ryd9dlSDvnvI0lvxfLJlYAZzXomUYzLKtUeOQvOP5piqAWuGtrhWeqaXK9hhoM/iyJc5AV+XfsX3HQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/lru-cache": { + "version": "10.4.3", + "dev": true, + "license": "ISC" + }, + "node_modules/markdown-it": { + "version": "14.2.0", + "resolved": "https://bnpm.byted.org/markdown-it/-/markdown-it-14.2.0.tgz", + "integrity": "sha512-1TGiQiJVRQ3NPmZH6sx5Cfnmg6GQm9jvC1ch4TK511NjSJvjzKLzn5pPfZRNZkRPZP0HqCioSndqH8v2nRaWVQ==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/puzrin" + }, + { + "type": "github", + "url": "https://github.com/sponsors/markdown-it" + } + ], + "license": "MIT", + "dependencies": { + "argparse": "^2.0.1", + "entities": "^4.4.0", + "linkify-it": "^5.0.1", + "mdurl": "^2.0.0", + "punycode.js": "^2.3.1", + "uc.micro": "^2.1.0" + }, + "bin": { + "markdown-it": "bin/markdown-it.mjs" + } + }, + "node_modules/markdown-it/node_modules/entities": { + "version": "4.5.0", + "resolved": "https://bnpm.byted.org/entities/-/entities-4.5.0.tgz", + "integrity": "sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==", + "dev": true, + "license": "BSD-2-Clause", + "engines": { + "node": ">=0.12" + }, + "funding": { + "url": "https://github.com/fb55/entities?sponsor=1" + } + }, + "node_modules/math-intrinsics": { + "version": "1.1.0", + "resolved": "https://bnpm.byted.org/math-intrinsics/-/math-intrinsics-1.1.0.tgz", + "integrity": "sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/mdn-data": { + "version": "2.27.1", + "resolved": "https://bnpm.byted.org/mdn-data/-/mdn-data-2.27.1.tgz", + "integrity": "sha512-9Yubnt3e8A0OKwxYSXyhLymGW4sCufcLG6VdiDdUGVkPhpqLxlvP5vl1983gQjJl3tqbrM731mjaZaP68AgosQ==", + "dev": true, + "license": "CC0-1.0" + }, + "node_modules/mdurl": { + "version": "2.0.0", + "resolved": "https://bnpm.byted.org/mdurl/-/mdurl-2.0.0.tgz", + "integrity": "sha512-Lf+9+2r+Tdp5wXDXC4PcIBjTDtq4UKjCPMQhKIuzpJNW0b96kVqSwW0bT7FhRSfmAiFYgP+SCRvdrDozfh0U5w==", + "dev": true, + "license": "MIT" + }, + "node_modules/merge-stream": { + "version": "2.0.0", + "resolved": "https://bnpm.byted.org/merge-stream/-/merge-stream-2.0.0.tgz", + "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==", + "dev": true, + "license": "MIT" + }, + "node_modules/merge2": { + "version": "1.4.1", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 8" + } + }, + "node_modules/micromatch": { + "version": "4.0.8", + "dev": true, + "license": "MIT", + "dependencies": { + "braces": "^3.0.3", + "picomatch": "^2.3.1" + }, + "engines": { + "node": ">=8.6" + } + }, + "node_modules/mime-db": { + "version": "1.52.0", + "resolved": "https://bnpm.byted.org/mime-db/-/mime-db-1.52.0.tgz", + "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/mime-types": { + "version": "2.1.35", + "resolved": "https://bnpm.byted.org/mime-types/-/mime-types-2.1.35.tgz", + "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", + "dev": true, + "license": "MIT", + "dependencies": { + "mime-db": "1.52.0" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/minimatch": { + "version": "9.0.5", + "dev": true, + "license": "ISC", + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/minipass": { + "version": "7.1.2", + "dev": true, + "license": "ISC", + "engines": { + "node": ">=16 || 14 >=14.17" + } + }, + "node_modules/ms": { + "version": "2.1.3", + "resolved": "https://bnpm.byted.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "dev": true, + "license": "MIT" + }, + "node_modules/mz": { + "version": "2.7.0", + "dev": true, + "license": "MIT", + "dependencies": { + "any-promise": "^1.0.0", + "object-assign": "^4.0.1", + "thenify-all": "^1.0.0" + } + }, + "node_modules/nanoid": { + "version": "3.3.15", + "resolved": "https://bnpm.byted.org/nanoid/-/nanoid-3.3.15.tgz", + "integrity": "sha512-y7Wygv/7mEOvxTuEQDB8StXdMRBWf1kR/tlhAzBRUFkB2jfcLOAxO/SHmOO2zgz1pVgK29/kyupn059/bCHdjA==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "bin": { + "nanoid": "bin/nanoid.cjs" + }, + "engines": { + "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" + } + }, + "node_modules/negotiator": { + "version": "0.6.3", + "resolved": "https://bnpm.byted.org/negotiator/-/negotiator-0.6.3.tgz", + "integrity": "sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/neo-async": { + "version": "2.6.2", + "resolved": "https://bnpm.byted.org/neo-async/-/neo-async-2.6.2.tgz", + "integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==", + "dev": true, + "license": "MIT" + }, + "node_modules/node-releases": { + "version": "2.0.49", + "resolved": "https://bnpm.byted.org/node-releases/-/node-releases-2.0.49.tgz", + "integrity": "sha512-f06bl1D+8ZDkn2oOQQKAh5/otFWqVnM1Q5oerA8Pex7UfT66Tx4IPHIqVVFKqFT3FUtaDstdgkM7yT7JWhqxfw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + } + }, + "node_modules/normalize-path": { + "version": "3.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/nth-check": { + "version": "2.1.1", + "resolved": "https://bnpm.byted.org/nth-check/-/nth-check-2.1.1.tgz", + "integrity": "sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "boolbase": "^1.0.0" + }, + "funding": { + "url": "https://github.com/fb55/nth-check?sponsor=1" + } + }, + "node_modules/object-assign": { + "version": "4.1.1", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/object-hash": { + "version": "3.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 6" + } + }, + "node_modules/object-inspect": { + "version": "1.13.4", + "resolved": "https://bnpm.byted.org/object-inspect/-/object-inspect-1.13.4.tgz", + "integrity": "sha512-W67iLl4J2EXEGTbfeHCffrjDfitvLANg0UlX3wFUUSTx92KXRFegMHUVgSqE+wvhAbi4WqjGg9czysTV2Epbew==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/object-keys": { + "version": "1.1.1", + "resolved": "https://bnpm.byted.org/object-keys/-/object-keys-1.1.1.tgz", + "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/object.assign": { + "version": "4.1.7", + "resolved": "https://bnpm.byted.org/object.assign/-/object.assign-4.1.7.tgz", + "integrity": "sha512-nK28WOo+QIjBkDduTINE4JkF/UJJKyf2EJxvJKfblDpyg0Q+pkOHNTL0Qwy6NP6FhE/EnzV73BxxqcJaXY9anw==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.8", + "call-bound": "^1.0.3", + "define-properties": "^1.2.1", + "es-object-atoms": "^1.0.0", + "has-symbols": "^1.1.0", + "object-keys": "^1.1.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/object.groupby": { + "version": "1.0.3", + "resolved": "https://bnpm.byted.org/object.groupby/-/object.groupby-1.0.3.tgz", + "integrity": "sha512-+Lhy3TQTuzXI5hevh8sBGqbmurHbbIjAi0Z4S63nthVLmLxfbj4T54a4CfZrXIrt9iP4mVAPYMo/v99taj3wjQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/own-keys": { + "version": "1.0.1", + "resolved": "https://bnpm.byted.org/own-keys/-/own-keys-1.0.1.tgz", + "integrity": "sha512-qFOyK5PjiWZd+QQIh+1jhdb9LpxTF0qs7Pm8o5QHYZ0M3vKqSqzsZaEB6oWlxZ+q2sJBMI/Ktgd2N5ZwQoRHfg==", + "dev": true, + "license": "MIT", + "dependencies": { + "get-intrinsic": "^1.2.6", + "object-keys": "^1.1.1", + "safe-push-apply": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/package-json-from-dist": { + "version": "1.0.1", + "dev": true, + "license": "BlueOak-1.0.0" + }, + "node_modules/path-browserify": { + "version": "1.0.1", + "resolved": "https://bnpm.byted.org/path-browserify/-/path-browserify-1.0.1.tgz", + "integrity": "sha512-b7uo2UCUOYZcnF/3ID0lulOJi/bafxa1xPe7ZPsammBSpjSWQkjNxlt635YGS2MiR9GjvuXCtz2emr3jbsz98g==", + "dev": true, + "license": "MIT" + }, + "node_modules/path-key": { + "version": "3.1.1", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/path-parse": { + "version": "1.0.7", + "dev": true, + "license": "MIT" + }, + "node_modules/path-scurry": { + "version": "1.11.1", + "dev": true, + "license": "BlueOak-1.0.0", + "dependencies": { + "lru-cache": "^10.2.0", + "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0" + }, + "engines": { + "node": ">=16 || 14 >=14.18" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/picocolors": { + "version": "1.1.1", + "dev": true, + "license": "ISC" + }, + "node_modules/picomatch": { + "version": "2.3.1", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8.6" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/pify": { + "version": "2.3.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/pirates": { + "version": "4.0.7", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 6" + } + }, + "node_modules/possible-typed-array-names": { + "version": "1.1.0", + "resolved": "https://bnpm.byted.org/possible-typed-array-names/-/possible-typed-array-names-1.1.0.tgz", + "integrity": "sha512-/+5VFTchJDoVj3bhoqi6UeymcD00DAwb1nJwamzPvHEszJ4FpF6SNNbUbOS8yI56qHzdV8eK0qEfOSiodkTdxg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/postcss": { + "version": "8.5.15", + "resolved": "https://bnpm.byted.org/postcss/-/postcss-8.5.15.tgz", + "integrity": "sha512-FfR8sjd4em2T6fb3I2MwAJU7HWVMr9zba+enmQeeWFfCbm+UOC/0X4DS8XtpUTMwWMGbjKYP7xjfNekzyGmB3A==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/postcss" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "peer": true, + "dependencies": { + "nanoid": "^3.3.12", + "picocolors": "^1.1.1", + "source-map-js": "^1.2.1" + }, + "engines": { + "node": "^10 || ^12 || >=14" + } + }, + "node_modules/postcss-calc": { + "version": "10.1.1", + "resolved": "https://bnpm.byted.org/postcss-calc/-/postcss-calc-10.1.1.tgz", + "integrity": "sha512-NYEsLHh8DgG/PRH2+G9BTuUdtf9ViS+vdoQ0YA5OQdGsfN4ztiwtDWNtBl9EKeqNMFnIu8IKZ0cLxEQ5r5KVMw==", + "dev": true, + "license": "MIT", + "dependencies": { + "postcss-selector-parser": "^7.0.0", + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^18.12 || ^20.9 || >=22.0" + }, + "peerDependencies": { + "postcss": "^8.4.38" + } + }, + "node_modules/postcss-calc/node_modules/postcss-selector-parser": { + "version": "7.1.4", + "resolved": "https://bnpm.byted.org/postcss-selector-parser/-/postcss-selector-parser-7.1.4.tgz", + "integrity": "sha512-HeP7D2wyhkR+XaK6v4W8oRF62Dsz4flyuczALJp61GckGm42u1saSSJ/0auvcBqxs3jMRFEcPK34At/0JBKdOg==", + "dev": true, + "license": "MIT", + "dependencies": { + "cssesc": "^3.0.0", + "util-deprecate": "^1.0.2" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/postcss-colormin": { + "version": "7.0.10", + "resolved": "https://bnpm.byted.org/postcss-colormin/-/postcss-colormin-7.0.10.tgz", + "integrity": "sha512-yFr6JezOolHLta/buLE71VKPh2mXursp4saVe98/ol8ZnEWhL+racShqPKlvd/DKWLre/39B6HhcMXf7RZ3hxg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@colordx/core": "^5.4.3", + "browserslist": "^4.28.2", + "caniuse-api": "^3.0.0", + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^18.12.0 || ^20.9.0 || >=22.0" + }, + "peerDependencies": { + "postcss": "^8.5.13" + } + }, + "node_modules/postcss-convert-values": { + "version": "7.0.12", + "resolved": "https://bnpm.byted.org/postcss-convert-values/-/postcss-convert-values-7.0.12.tgz", + "integrity": "sha512-xurKu5qqk4viR3Cp3p4xBR4KfnZm4w4ys6+UBwBmeuBSNkH7+DtLnYOYnOffgtE4yx8sH9S1VZ6RAAvROXzP2Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "browserslist": "^4.28.2", + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^18.12.0 || ^20.9.0 || >=22.0" + }, + "peerDependencies": { + "postcss": "^8.5.13" + } + }, + "node_modules/postcss-discard-comments": { + "version": "7.0.8", + "resolved": "https://bnpm.byted.org/postcss-discard-comments/-/postcss-discard-comments-7.0.8.tgz", + "integrity": "sha512-CvvS5S9WrXblFXCEJ9nVo+4z+eA7zSC7Z88V1HEJuwlQhlFnYTIjg1xJY+BCUiG2bvICap2tXii4mP22BD108Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "postcss-selector-parser": "^7.1.1" + }, + "engines": { + "node": "^18.12.0 || ^20.9.0 || >=22.0" + }, + "peerDependencies": { + "postcss": "^8.5.13" + } + }, + "node_modules/postcss-discard-comments/node_modules/postcss-selector-parser": { + "version": "7.1.4", + "resolved": "https://bnpm.byted.org/postcss-selector-parser/-/postcss-selector-parser-7.1.4.tgz", + "integrity": "sha512-HeP7D2wyhkR+XaK6v4W8oRF62Dsz4flyuczALJp61GckGm42u1saSSJ/0auvcBqxs3jMRFEcPK34At/0JBKdOg==", + "dev": true, + "license": "MIT", + "dependencies": { + "cssesc": "^3.0.0", + "util-deprecate": "^1.0.2" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/postcss-discard-duplicates": { + "version": "7.0.4", + "resolved": "https://bnpm.byted.org/postcss-discard-duplicates/-/postcss-discard-duplicates-7.0.4.tgz", + "integrity": "sha512-VBNn1+EuMZkeGVVtz0gRfbNGtx9IFgAsAV+E2pHtXPrp4qfGBkhTIiAuE/wrb+Y6Pakg9NewAlfTpYIFAWODtw==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^18.12.0 || ^20.9.0 || >=22.0" + }, + "peerDependencies": { + "postcss": "^8.5.13" + } + }, + "node_modules/postcss-discard-empty": { + "version": "7.0.3", + "resolved": "https://bnpm.byted.org/postcss-discard-empty/-/postcss-discard-empty-7.0.3.tgz", + "integrity": "sha512-M2pyjQCU+/7cMHVtL6bKTHjv0lZnPLMpicgr67Dlth7AbuV9gjVTtUqaRwn6Pp6BwSDspUzhz8SaUrRykJU5Dw==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^18.12.0 || ^20.9.0 || >=22.0" + }, + "peerDependencies": { + "postcss": "^8.5.13" + } + }, + "node_modules/postcss-discard-overridden": { + "version": "7.0.3", + "resolved": "https://bnpm.byted.org/postcss-discard-overridden/-/postcss-discard-overridden-7.0.3.tgz", + "integrity": "sha512-aNovXo9UsZuRNLzHJtp13lHIvinDPfiXBPePpXkSjCbgp++iU2FqE+YxvjIsg6EdyPZsASFbfu+JcBFVsErXIQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^18.12.0 || ^20.9.0 || >=22.0" + }, + "peerDependencies": { + "postcss": "^8.5.13" + } + }, + "node_modules/postcss-import": { + "version": "15.1.0", + "dev": true, + "license": "MIT", + "dependencies": { + "postcss-value-parser": "^4.0.0", + "read-cache": "^1.0.0", + "resolve": "^1.1.7" + }, + "engines": { + "node": ">=14.0.0" + }, + "peerDependencies": { + "postcss": "^8.0.0" + } + }, + "node_modules/postcss-js": { + "version": "4.0.1", + "dev": true, + "license": "MIT", + "dependencies": { + "camelcase-css": "^2.0.1" + }, + "engines": { + "node": "^12 || ^14 || >= 16" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + "peerDependencies": { + "postcss": "^8.4.21" + } + }, + "node_modules/postcss-load-config": { + "version": "4.0.2", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "dependencies": { + "lilconfig": "^3.0.0", + "yaml": "^2.3.4" + }, + "engines": { + "node": ">= 14" + }, + "peerDependencies": { + "postcss": ">=8.0.9", + "ts-node": ">=9.0.0" + }, + "peerDependenciesMeta": { + "postcss": { + "optional": true + }, + "ts-node": { + "optional": true + } + } + }, + "node_modules/postcss-merge-longhand": { + "version": "7.0.7", + "resolved": "https://bnpm.byted.org/postcss-merge-longhand/-/postcss-merge-longhand-7.0.7.tgz", + "integrity": "sha512-b3mfYUxR388u5Pt0HPcVIUtUDn/k15UfTY9M+ORW+meCR6JLNxoZffiYvXyOYQoRYQNZyX/UFkMCM/mNHxe1qA==", + "dev": true, + "license": "MIT", + "dependencies": { + "postcss-value-parser": "^4.2.0", + "stylehacks": "^7.0.11" + }, + "engines": { + "node": "^18.12.0 || ^20.9.0 || >=22.0" + }, + "peerDependencies": { + "postcss": "^8.5.13" + } + }, + "node_modules/postcss-merge-rules": { + "version": "7.0.11", + "resolved": "https://bnpm.byted.org/postcss-merge-rules/-/postcss-merge-rules-7.0.11.tgz", + "integrity": "sha512-SJUPM18g2BmPhf8BVlbwqWz4aK3pLu6u6xjfwEzra7xL6IBR10sUaiB++EzqcVfadPHrKBSMlNdP+XieykhI+Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "browserslist": "^4.28.2", + "caniuse-api": "^3.0.0", + "cssnano-utils": "^5.0.3", + "postcss-selector-parser": "^7.1.1" + }, + "engines": { + "node": "^18.12.0 || ^20.9.0 || >=22.0" + }, + "peerDependencies": { + "postcss": "^8.5.13" + } + }, + "node_modules/postcss-merge-rules/node_modules/postcss-selector-parser": { + "version": "7.1.4", + "resolved": "https://bnpm.byted.org/postcss-selector-parser/-/postcss-selector-parser-7.1.4.tgz", + "integrity": "sha512-HeP7D2wyhkR+XaK6v4W8oRF62Dsz4flyuczALJp61GckGm42u1saSSJ/0auvcBqxs3jMRFEcPK34At/0JBKdOg==", + "dev": true, + "license": "MIT", + "dependencies": { + "cssesc": "^3.0.0", + "util-deprecate": "^1.0.2" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/postcss-minify-font-values": { + "version": "7.0.3", + "resolved": "https://bnpm.byted.org/postcss-minify-font-values/-/postcss-minify-font-values-7.0.3.tgz", + "integrity": "sha512-yilG/VOaNI74IylQvAQQxm3/wZVBkXyYUqNUAdxqwtbWUXPsbK1q8Ms0mL83v+f8YicgcyfYCRZtWACUdYajpA==", + "dev": true, + "license": "MIT", + "dependencies": { + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^18.12.0 || ^20.9.0 || >=22.0" + }, + "peerDependencies": { + "postcss": "^8.5.13" + } + }, + "node_modules/postcss-minify-gradients": { + "version": "7.0.5", + "resolved": "https://bnpm.byted.org/postcss-minify-gradients/-/postcss-minify-gradients-7.0.5.tgz", + "integrity": "sha512-YraROyQRg3BI1+Hg8E05B/JPdnTm8EDSVu4P2BxdM+CRiOyfmou809+chGIqo6fQqwjPGQ947nbGncSjmTU1WQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@colordx/core": "^5.4.3", + "cssnano-utils": "^5.0.3", + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^18.12.0 || ^20.9.0 || >=22.0" + }, + "peerDependencies": { + "postcss": "^8.5.13" + } + }, + "node_modules/postcss-minify-params": { + "version": "7.0.9", + "resolved": "https://bnpm.byted.org/postcss-minify-params/-/postcss-minify-params-7.0.9.tgz", + "integrity": "sha512-R8itbB8BhlpoYyBm1ou0dD+vJnQ3F6adQipR4UnkCHUwlo+S9WXJaDRg1RHjC8YVAtIdrQzSWvJl40HnGDTKjA==", + "dev": true, + "license": "MIT", + "dependencies": { + "browserslist": "^4.28.2", + "cssnano-utils": "^5.0.3", + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^18.12.0 || ^20.9.0 || >=22.0" + }, + "peerDependencies": { + "postcss": "^8.5.13" + } + }, + "node_modules/postcss-minify-selectors": { + "version": "7.1.2", + "resolved": "https://bnpm.byted.org/postcss-minify-selectors/-/postcss-minify-selectors-7.1.2.tgz", + "integrity": "sha512-aQtrEWKwqafNlExcKHQvPGsXR2+vlUqqJtf5XsCQcgsSb5PL4wlujWBYDJuWsP4UnQX1YHDHU8qRlD+1PzTQ+Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "browserslist": "^4.28.1", + "caniuse-api": "^3.0.0", + "cssesc": "^3.0.0", + "postcss-selector-parser": "^7.1.1" + }, + "engines": { + "node": "^18.12.0 || ^20.9.0 || >=22.0" + }, + "peerDependencies": { + "postcss": "^8.5.13" + } + }, + "node_modules/postcss-minify-selectors/node_modules/postcss-selector-parser": { + "version": "7.1.4", + "resolved": "https://bnpm.byted.org/postcss-selector-parser/-/postcss-selector-parser-7.1.4.tgz", + "integrity": "sha512-HeP7D2wyhkR+XaK6v4W8oRF62Dsz4flyuczALJp61GckGm42u1saSSJ/0auvcBqxs3jMRFEcPK34At/0JBKdOg==", + "dev": true, + "license": "MIT", + "dependencies": { + "cssesc": "^3.0.0", + "util-deprecate": "^1.0.2" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/postcss-nested": { + "version": "6.2.0", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "dependencies": { + "postcss-selector-parser": "^6.1.1" + }, + "engines": { + "node": ">=12.0" + }, + "peerDependencies": { + "postcss": "^8.2.14" + } + }, + "node_modules/postcss-normalize-charset": { + "version": "7.0.3", + "resolved": "https://bnpm.byted.org/postcss-normalize-charset/-/postcss-normalize-charset-7.0.3.tgz", + "integrity": "sha512-NoBfZu8PR4c2NlmjvrqQTzCzLY79hwcSRgNQ3ZiNK0ABzf9kYKloE/jNj+/8GQY1wsm8pRRgANk6ydLH8cwo0Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^18.12.0 || ^20.9.0 || >=22.0" + }, + "peerDependencies": { + "postcss": "^8.5.13" + } + }, + "node_modules/postcss-normalize-display-values": { + "version": "7.0.3", + "resolved": "https://bnpm.byted.org/postcss-normalize-display-values/-/postcss-normalize-display-values-7.0.3.tgz", + "integrity": "sha512-ldsCX0QIt05pKIOobZtVQ48wXJecr+czw4+e1/YjVhLMqslShgpVxgPtI2CefURR8oyVoYaU/l829MMwExDMLw==", + "dev": true, + "license": "MIT", + "dependencies": { + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^18.12.0 || ^20.9.0 || >=22.0" + }, + "peerDependencies": { + "postcss": "^8.5.13" + } + }, + "node_modules/postcss-normalize-positions": { + "version": "7.0.4", + "resolved": "https://bnpm.byted.org/postcss-normalize-positions/-/postcss-normalize-positions-7.0.4.tgz", + "integrity": "sha512-VEvlpeGd3Ju1Hqa/oN4jaP3+ms4laYwkEL9N9u+B6k54PZjXbW1n6wI+aVprf1BQXlCYpS5+1pl/7/vHiKgARg==", + "dev": true, + "license": "MIT", + "dependencies": { + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^18.12.0 || ^20.9.0 || >=22.0" + }, + "peerDependencies": { + "postcss": "^8.5.13" + } + }, + "node_modules/postcss-normalize-repeat-style": { + "version": "7.0.4", + "resolved": "https://bnpm.byted.org/postcss-normalize-repeat-style/-/postcss-normalize-repeat-style-7.0.4.tgz", + "integrity": "sha512-6mPKlY/8cSaDHxX502wERADarJsccwlky6yIrOapHH2ZgfoKAV94SbiTKfKEs4EEpdazuc3J72WsqeYk7hp9+Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^18.12.0 || ^20.9.0 || >=22.0" + }, + "peerDependencies": { + "postcss": "^8.5.13" + } + }, + "node_modules/postcss-normalize-string": { + "version": "7.0.3", + "resolved": "https://bnpm.byted.org/postcss-normalize-string/-/postcss-normalize-string-7.0.3.tgz", + "integrity": "sha512-HnEQPUchi1eznmDKEYrKUTqrprEq97SrpUYClgUkv7V2zRODD9DFoUsYU+m9ZOetmD5ku7fEMZB/lwy8IT6xVQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^18.12.0 || ^20.9.0 || >=22.0" + }, + "peerDependencies": { + "postcss": "^8.5.13" + } + }, + "node_modules/postcss-normalize-timing-functions": { + "version": "7.0.3", + "resolved": "https://bnpm.byted.org/postcss-normalize-timing-functions/-/postcss-normalize-timing-functions-7.0.3.tgz", + "integrity": "sha512-zmEzHdvpZBZu0OKlbJSfgASQvaayyAoVuWtvyr34IJ/LyS+DaOKvvR3EvFJ9RWWtNIx+CMvO125OVophaxNYew==", + "dev": true, + "license": "MIT", + "dependencies": { + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^18.12.0 || ^20.9.0 || >=22.0" + }, + "peerDependencies": { + "postcss": "^8.5.13" + } + }, + "node_modules/postcss-normalize-unicode": { + "version": "7.0.9", + "resolved": "https://bnpm.byted.org/postcss-normalize-unicode/-/postcss-normalize-unicode-7.0.9.tgz", + "integrity": "sha512-DRAdWfeh/TjmhLJsw91vdiWCnUod9iwvM7xyS02/nF/sLsCR3A8l3pztrSUrWG8DSBqfX7yEk9FM0USaVJ2mSg==", + "dev": true, + "license": "MIT", + "dependencies": { + "browserslist": "^4.28.2", + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^18.12.0 || ^20.9.0 || >=22.0" + }, + "peerDependencies": { + "postcss": "^8.5.13" + } + }, + "node_modules/postcss-normalize-url": { + "version": "7.0.3", + "resolved": "https://bnpm.byted.org/postcss-normalize-url/-/postcss-normalize-url-7.0.3.tgz", + "integrity": "sha512-CL93wmloq5qsffmFv+bw24MIRbmhHrp53qoh1LDAb/5TtjWEXI/np4xcP/Gw9oWCb2XyWnqHYLDUwiKRoJBA1Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^18.12.0 || ^20.9.0 || >=22.0" + }, + "peerDependencies": { + "postcss": "^8.5.13" + } + }, + "node_modules/postcss-normalize-whitespace": { + "version": "7.0.3", + "resolved": "https://bnpm.byted.org/postcss-normalize-whitespace/-/postcss-normalize-whitespace-7.0.3.tgz", + "integrity": "sha512-FdHjjn+Ht5Z2ZRjNOmeCbNq6lq09sUYKpmlF/Aq0XjVNSLTL6fmHlA/3swN2wP2caY9GV/tjSDcIIyS7aN7W0A==", + "dev": true, + "license": "MIT", + "dependencies": { + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^18.12.0 || ^20.9.0 || >=22.0" + }, + "peerDependencies": { + "postcss": "^8.5.13" + } + }, + "node_modules/postcss-ordered-values": { + "version": "7.0.4", + "resolved": "https://bnpm.byted.org/postcss-ordered-values/-/postcss-ordered-values-7.0.4.tgz", + "integrity": "sha512-nubSi49hDHQk4E8KIj+IbLY8Bg+8OcSUEhgyolgM+atnOvXjV7EjaR6bac4YGZoFyPa9mWoAF3EaYbWdFkKqVg==", + "dev": true, + "license": "MIT", + "dependencies": { + "cssnano-utils": "^5.0.3", + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^18.12.0 || ^20.9.0 || >=22.0" + }, + "peerDependencies": { + "postcss": "^8.5.13" + } + }, + "node_modules/postcss-reduce-initial": { + "version": "7.0.9", + "resolved": "https://bnpm.byted.org/postcss-reduce-initial/-/postcss-reduce-initial-7.0.9.tgz", + "integrity": "sha512-ztTNPdIxXTxtBcG03E9u8v44M4ElXbMIRT7pf2onlquGula0Y83nKKxqM22FA/hMgkfCjN7ohevkVlaNwI8iOQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "browserslist": "^4.28.2", + "caniuse-api": "^3.0.0" + }, + "engines": { + "node": "^18.12.0 || ^20.9.0 || >=22.0" + }, + "peerDependencies": { + "postcss": "^8.5.13" + } + }, + "node_modules/postcss-reduce-transforms": { + "version": "7.0.3", + "resolved": "https://bnpm.byted.org/postcss-reduce-transforms/-/postcss-reduce-transforms-7.0.3.tgz", + "integrity": "sha512-FXsnN9ZwcZTT8Yf8cAHA8qIGUXcX6WfLd9JoYhrdDfmvsVhhfqkkv7m4AC3rwFOfz+GzkUa87OCKF9dUcicd+g==", + "dev": true, + "license": "MIT", + "dependencies": { + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^18.12.0 || ^20.9.0 || >=22.0" + }, + "peerDependencies": { + "postcss": "^8.5.13" + } + }, + "node_modules/postcss-selector-parser": { + "version": "6.1.2", + "dev": true, + "license": "MIT", + "dependencies": { + "cssesc": "^3.0.0", + "util-deprecate": "^1.0.2" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/postcss-svgo": { + "version": "7.1.3", + "resolved": "https://bnpm.byted.org/postcss-svgo/-/postcss-svgo-7.1.3.tgz", + "integrity": "sha512-2QfoFOYMcj8lwcVEf9WeTlkVIAm7u2QvOEhMzkQU3KUhhGX/l8hVV9EtjMv4iq3E9iI3OeeMN0YoMLbGusuigw==", + "dev": true, + "license": "MIT", + "dependencies": { + "postcss-value-parser": "^4.2.0", + "svgo": "^4.0.1" + }, + "engines": { + "node": "^18.12.0 || ^20.9.0 || >= 18" + }, + "peerDependencies": { + "postcss": "^8.5.13" + } + }, + "node_modules/postcss-unique-selectors": { + "version": "7.0.7", + "resolved": "https://bnpm.byted.org/postcss-unique-selectors/-/postcss-unique-selectors-7.0.7.tgz", + "integrity": "sha512-d+sCkaRnSefghOUdH8CMJZV9yUQhj2ojpe8Nw/lA+LV1UOfeleGkLTl6XdCFFSai9UJ+DJPb69FFuqthXYsY8w==", + "dev": true, + "license": "MIT", + "dependencies": { + "postcss-selector-parser": "^7.1.1" + }, + "engines": { + "node": "^18.12.0 || ^20.9.0 || >=22.0" + }, + "peerDependencies": { + "postcss": "^8.5.13" + } + }, + "node_modules/postcss-unique-selectors/node_modules/postcss-selector-parser": { + "version": "7.1.4", + "resolved": "https://bnpm.byted.org/postcss-selector-parser/-/postcss-selector-parser-7.1.4.tgz", + "integrity": "sha512-HeP7D2wyhkR+XaK6v4W8oRF62Dsz4flyuczALJp61GckGm42u1saSSJ/0auvcBqxs3jMRFEcPK34At/0JBKdOg==", + "dev": true, + "license": "MIT", + "dependencies": { + "cssesc": "^3.0.0", + "util-deprecate": "^1.0.2" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/postcss-value-parser": { + "version": "4.2.0", + "dev": true, + "license": "MIT" + }, + "node_modules/preact": { + "name": "@lynx-js/internal-preact", + "version": "10.29.1-20260519060144-e6da44c", + "resolved": "https://bnpm.byted.org/@lynx-js/internal-preact/-/internal-preact-10.29.1-20260519060144-e6da44c.tgz", + "integrity": "sha512-h2pRrt5oLK9LT1NkjyprtzJij/AdZGvv3CN6B5edL4chixqvITbxoCSdYy667Hl6+uKOBuxmCNZoDddgRfcLnw==", + "license": "MIT", + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/preact" + } + }, + "node_modules/punycode.js": { + "version": "2.3.1", + "resolved": "https://bnpm.byted.org/punycode.js/-/punycode.js-2.3.1.tgz", + "integrity": "sha512-uxFIHU0YlHYhDQtV4R9J6a52SLx28BCjT+4ieh7IGbgwVJWO+km431c4yRlREUAsAmt/uMjQUyQHNEPf0M39CA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/queue-microtask": { + "version": "1.2.3", + "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/read-cache": { + "version": "1.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "pify": "^2.3.0" + } + }, + "node_modules/readdirp": { + "version": "3.6.0", + "dev": true, + "license": "MIT", + "dependencies": { + "picomatch": "^2.2.1" + }, + "engines": { + "node": ">=8.10.0" + } + }, + "node_modules/reduce-configs": { + "version": "1.1.2", + "resolved": "https://bnpm.byted.org/reduce-configs/-/reduce-configs-1.1.2.tgz", + "integrity": "sha512-AgBP55V8FC7NaqoOP2RCbTpu6LE+YuX3LUZkNAoitcfyS3/PIC8Obg/TJrBzTkJ+lDvZv0TTAeDpLkzjTtYlbw==", + "dev": true, + "license": "MIT" + }, + "node_modules/reflect.getprototypeof": { + "version": "1.0.10", + "resolved": "https://bnpm.byted.org/reflect.getprototypeof/-/reflect.getprototypeof-1.0.10.tgz", + "integrity": "sha512-00o4I+DVrefhv+nX0ulyi3biSHCPDe+yLv5o/p6d/UVlirijB8E16FtfwSAi4g3tcqrQ4lRAqQSoFEZJehYEcw==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.8", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.9", + "es-errors": "^1.3.0", + "es-object-atoms": "^1.0.0", + "get-intrinsic": "^1.2.7", + "get-proto": "^1.0.1", + "which-builtin-type": "^1.2.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/regexp.prototype.flags": { + "version": "1.5.4", + "resolved": "https://bnpm.byted.org/regexp.prototype.flags/-/regexp.prototype.flags-1.5.4.tgz", + "integrity": "sha512-dYqgNSZbDwkaJ2ceRd9ojCGjBq+mOm9LmtXnAnEGyHhN/5R7iDW2TRw3h+o/jCFxus3P2LfWIIiwowAjANm7IA==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.8", + "define-properties": "^1.2.1", + "es-errors": "^1.3.0", + "get-proto": "^1.0.1", + "gopd": "^1.2.0", + "set-function-name": "^2.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/require-from-string": { + "version": "2.0.2", + "resolved": "https://bnpm.byted.org/require-from-string/-/require-from-string-2.0.2.tgz", + "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/resolve": { + "version": "1.22.10", + "dev": true, + "license": "MIT", + "dependencies": { + "is-core-module": "^2.16.0", + "path-parse": "^1.0.7", + "supports-preserve-symlinks-flag": "^1.0.0" + }, + "bin": { + "resolve": "bin/resolve" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/reusify": { + "version": "1.1.0", + "dev": true, + "license": "MIT", + "engines": { + "iojs": ">=1.0.0", + "node": ">=0.10.0" + } + }, + "node_modules/rslog": { + "version": "2.1.3", + "resolved": "https://bnpm.byted.org/rslog/-/rslog-2.1.3.tgz", + "integrity": "sha512-DCUkRKUBR1lSpHKRcxNvHaYwGrUVf9MsoE1u6gd0CF37I8vwwtWc4b+FA9OwYZ4QA/shslzAYorD3MMfd+Rs/Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/run-parallel": { + "version": "1.2.0", + "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": { + "queue-microtask": "^1.2.2" + } + }, + "node_modules/safe-array-concat": { + "version": "1.1.4", + "resolved": "https://bnpm.byted.org/safe-array-concat/-/safe-array-concat-1.1.4.tgz", + "integrity": "sha512-wtZlHyOje6OZTGqAoaDKxFkgRtkF9CnHAVnCHKfuj200wAgL+bSJhdsCD2l0Qx/2ekEXjPWcyKkfGb5CPboslg==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.9", + "call-bound": "^1.0.4", + "get-intrinsic": "^1.3.0", + "has-symbols": "^1.1.0", + "isarray": "^2.0.5" + }, + "engines": { + "node": ">=0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/safe-push-apply": { + "version": "1.0.0", + "resolved": "https://bnpm.byted.org/safe-push-apply/-/safe-push-apply-1.0.0.tgz", + "integrity": "sha512-iKE9w/Z7xCzUMIZqdBsp6pEQvwuEebH4vdpjcDWnyzaI6yl6O9FHvVpmGelvEHNsoY6wGblkxR6Zty/h00WiSA==", + "dev": true, + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0", + "isarray": "^2.0.5" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/safe-regex-test": { + "version": "1.1.0", + "resolved": "https://bnpm.byted.org/safe-regex-test/-/safe-regex-test-1.1.0.tgz", + "integrity": "sha512-x/+Cz4YrimQxQccJf5mKEbIa1NzeCRNI5Ecl/ekmlYaampdNLPalVyIcCZNNH3MvmqBugV5TMYZXv0ljslUlaw==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.2", + "es-errors": "^1.3.0", + "is-regex": "^1.2.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/safer-buffer": { + "version": "2.1.2", + "resolved": "https://bnpm.byted.org/safer-buffer/-/safer-buffer-2.1.2.tgz", + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", + "dev": true, + "license": "MIT" + }, + "node_modules/sax": { + "version": "1.6.0", + "resolved": "https://bnpm.byted.org/sax/-/sax-1.6.0.tgz", + "integrity": "sha512-6R3J5M4AcbtLUdZmRv2SygeVaM7IhrLXu9BmnOGmmACak8fiUtOsYNWUS4uK7upbmHIBbLBeFeI//477BKLBzA==", + "dev": true, + "license": "BlueOak-1.0.0", + "engines": { + "node": ">=11.0.0" + } + }, + "node_modules/schema-utils": { + "version": "4.3.3", + "resolved": "https://bnpm.byted.org/schema-utils/-/schema-utils-4.3.3.tgz", + "integrity": "sha512-eflK8wEtyOE6+hsaRVPxvUKYCpRgzLqDTb8krvAsRIwOGlHoSgYLgBXoubGgLd2fT41/OUYdb48v4k4WWHQurA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/json-schema": "^7.0.9", + "ajv": "^8.9.0", + "ajv-formats": "^2.1.1", + "ajv-keywords": "^5.1.0" + }, + "engines": { + "node": ">= 10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + } + }, + "node_modules/semver": { + "version": "7.8.5", + "resolved": "https://bnpm.byted.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/serialize-javascript": { + "version": "7.0.6", + "resolved": "https://bnpm.byted.org/serialize-javascript/-/serialize-javascript-7.0.6.tgz", + "integrity": "sha512-ATTK5Q4gFVg0YDp1my2vqygyvhcklD/UV5GIlYHooGTn/NogJqIzpetkD6E5kmuVULqz/S9inUL25XcAgDRJQg==", + "dev": true, + "license": "BSD-3-Clause", + "engines": { + "node": ">=20.0.0" + } + }, + "node_modules/set-function-length": { + "version": "1.2.2", + "resolved": "https://bnpm.byted.org/set-function-length/-/set-function-length-1.2.2.tgz", + "integrity": "sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==", + "dev": true, + "license": "MIT", + "dependencies": { + "define-data-property": "^1.1.4", + "es-errors": "^1.3.0", + "function-bind": "^1.1.2", + "get-intrinsic": "^1.2.4", + "gopd": "^1.0.1", + "has-property-descriptors": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/set-function-name": { + "version": "2.0.2", + "resolved": "https://bnpm.byted.org/set-function-name/-/set-function-name-2.0.2.tgz", + "integrity": "sha512-7PGFlmtwsEADb0WYyvCMa1t+yke6daIG4Wirafur5kcf+MhUnPms1UeR0CKQdTZD81yESwMHbtn+TR+dMviakQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "define-data-property": "^1.1.4", + "es-errors": "^1.3.0", + "functions-have-names": "^1.2.3", + "has-property-descriptors": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/set-proto": { + "version": "1.0.0", + "resolved": "https://bnpm.byted.org/set-proto/-/set-proto-1.0.0.tgz", + "integrity": "sha512-RJRdvCo6IAnPdsvP/7m6bsQqNnn1FCBX5ZNtFL98MmFF/4xAIJTIg1YbHW5DC2W5SKZanrC6i4HsJqlajw/dZw==", + "dev": true, + "license": "MIT", + "dependencies": { + "dunder-proto": "^1.0.1", + "es-errors": "^1.3.0", + "es-object-atoms": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/shebang-command": { + "version": "2.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "shebang-regex": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/shebang-regex": { + "version": "3.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/shell-quote": { + "version": "1.8.4", + "resolved": "https://bnpm.byted.org/shell-quote/-/shell-quote-1.8.4.tgz", + "integrity": "sha512-VsC6n6vz1ihYYyZZwX7YZSF5l5x36ca17OC+a69h94YqB7X6XLwf+5MOgynYir2SLFUbl8gIYvBo8K8RoNQ6bQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/side-channel": { + "version": "1.1.1", + "resolved": "https://bnpm.byted.org/side-channel/-/side-channel-1.1.1.tgz", + "integrity": "sha512-6x6dK6zJdpTzF4sQeNYxwtvBzf6Eg4GtlesS94HOvTudUeyK2WXAaIfmDgsyslYrRBeFIlsi54AYsFGUuhmvrQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0", + "object-inspect": "^1.13.4", + "side-channel-list": "^1.0.1", + "side-channel-map": "^1.0.1", + "side-channel-weakmap": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/side-channel-list": { + "version": "1.0.1", + "resolved": "https://bnpm.byted.org/side-channel-list/-/side-channel-list-1.0.1.tgz", + "integrity": "sha512-mjn/0bi/oUURjc5Xl7IaWi/OJJJumuoJFQJfDDyO46+hBWsfaVM65TBHq2eoZBhzl9EchxOijpkbRC8SVBQU0w==", + "dev": true, + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0", + "object-inspect": "^1.13.4" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/side-channel-map": { + "version": "1.0.1", + "resolved": "https://bnpm.byted.org/side-channel-map/-/side-channel-map-1.0.1.tgz", + "integrity": "sha512-VCjCNfgMsby3tTdo02nbjtM/ewra6jPHmpThenkTYh8pG9ucZ/1P8So4u4FGBek/BjpOVsDCMoLA/iuBKIFXRA==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.2", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.5", + "object-inspect": "^1.13.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/side-channel-weakmap": { + "version": "1.0.2", + "resolved": "https://bnpm.byted.org/side-channel-weakmap/-/side-channel-weakmap-1.0.2.tgz", + "integrity": "sha512-WPS/HvHQTYnHisLo9McqBHOJk2FkHO/tlpvldyrnem4aeQp4hai3gythswg6p01oSoTl58rcpiFAjF2br2Ak2A==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.2", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.5", + "object-inspect": "^1.13.3", + "side-channel-map": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/signal-exit": { + "version": "4.1.0", + "dev": true, + "license": "ISC", + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/socket.io": { + "version": "4.8.1", + "resolved": "https://bnpm.byted.org/socket.io/-/socket.io-4.8.1.tgz", + "integrity": "sha512-oZ7iUCxph8WYRHHcjBEc9unw3adt5CmSNlppj/5Q4k2RIrhl8Z5yY2Xr4j9zj0+wzVZ0bxmYoGSzKJnRl6A4yg==", + "dev": true, + "license": "MIT", + "dependencies": { + "accepts": "~1.3.4", + "base64id": "~2.0.0", + "cors": "~2.8.5", + "debug": "~4.3.2", + "engine.io": "~6.6.0", + "socket.io-adapter": "~2.5.2", + "socket.io-parser": "~4.2.4" + }, + "engines": { + "node": ">=10.2.0" + } + }, + "node_modules/socket.io-adapter": { + "version": "2.5.8", + "resolved": "https://bnpm.byted.org/socket.io-adapter/-/socket.io-adapter-2.5.8.tgz", + "integrity": "sha512-6Oy52pbg+kvdCVvjcN+FnY7BvxZ7cIHNScbvztT/It5d0vbwoJoVZmF2gjJmnV0/4WlXRfG15zc45ySk9Ah8bw==", + "dev": true, + "license": "MIT", + "dependencies": { + "debug": "~4.4.1", + "ws": "~8.21.0" + } + }, + "node_modules/socket.io-adapter/node_modules/debug": { + "version": "4.4.3", + "resolved": "https://bnpm.byted.org/debug/-/debug-4.4.3.tgz", + "integrity": "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==", + "dev": true, + "license": "MIT", + "dependencies": { + "ms": "^2.1.3" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/socket.io-parser": { + "version": "4.2.6", + "resolved": "https://bnpm.byted.org/socket.io-parser/-/socket.io-parser-4.2.6.tgz", + "integrity": "sha512-asJqbVBDsBCJx0pTqw3WfesSY0iRX+2xzWEWzrpcH7L6fLzrhyF8WPI8UaeM4YCuDfpwA/cgsdugMsmtz8EJeg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@socket.io/component-emitter": "~3.1.0", + "debug": "~4.4.1" + }, + "engines": { + "node": ">=10.0.0" + } + }, + "node_modules/socket.io-parser/node_modules/debug": { + "version": "4.4.3", + "resolved": "https://bnpm.byted.org/debug/-/debug-4.4.3.tgz", + "integrity": "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==", + "dev": true, + "license": "MIT", + "dependencies": { + "ms": "^2.1.3" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/source-map": { + "version": "0.7.6", + "resolved": "https://bnpm.byted.org/source-map/-/source-map-0.7.6.tgz", + "integrity": "sha512-i5uvt8C3ikiWeNZSVZNWcfZPItFQOsYTUAOkcUPGd8DqDy1uOUikjt5dG+uRlwyvR108Fb9DOd4GvXfT0N2/uQ==", + "dev": true, + "license": "BSD-3-Clause", + "engines": { + "node": ">= 12" + } + }, + "node_modules/source-map-js": { + "version": "1.2.1", + "dev": true, + "license": "BSD-3-Clause", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/source-map-support": { + "version": "0.5.21", + "resolved": "https://bnpm.byted.org/source-map-support/-/source-map-support-0.5.21.tgz", + "integrity": "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==", + "dev": true, + "license": "MIT", + "dependencies": { + "buffer-from": "^1.0.0", + "source-map": "^0.6.0" + } + }, + "node_modules/source-map-support/node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://bnpm.byted.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true, + "license": "BSD-3-Clause", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/stop-iteration-iterator": { + "version": "1.1.0", + "resolved": "https://bnpm.byted.org/stop-iteration-iterator/-/stop-iteration-iterator-1.1.0.tgz", + "integrity": "sha512-eLoXW/DHyl62zxY4SCaIgnRhuMr6ri4juEYARS8E6sCEqzKpOiE521Ucofdx+KnDZl5xmvGYaaKCk5FEOxJCoQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0", + "internal-slot": "^1.1.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/string-width": { + "version": "5.1.2", + "dev": true, + "license": "MIT", + "dependencies": { + "eastasianwidth": "^0.2.0", + "emoji-regex": "^9.2.2", + "strip-ansi": "^7.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/string-width-cjs": { + "name": "string-width", + "version": "4.2.3", + "dev": true, + "license": "MIT", + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/string-width-cjs/node_modules/emoji-regex": { + "version": "8.0.0", + "dev": true, + "license": "MIT" + }, + "node_modules/string-width/node_modules/ansi-regex": { + "version": "6.1.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-regex?sponsor=1" + } + }, + "node_modules/string-width/node_modules/strip-ansi": { + "version": "7.1.0", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-regex": "^6.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/strip-ansi?sponsor=1" + } + }, + "node_modules/string.prototype.trim": { + "version": "1.2.11", + "resolved": "https://bnpm.byted.org/string.prototype.trim/-/string.prototype.trim-1.2.11.tgz", + "integrity": "sha512-PwvK7BU+CMTJGYQCTZb5RWXIML92lftJLhQz1tBzgKiqGxJaMlBAa48POXaNAC2s4y8jr3EFqrkF9+44neS46w==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.9", + "call-bound": "^1.0.4", + "define-data-property": "^1.1.4", + "define-properties": "^1.2.1", + "es-abstract": "^1.24.2", + "es-object-atoms": "^1.1.2", + "has-property-descriptors": "^1.0.2", + "safe-regex-test": "^1.1.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/string.prototype.trimend": { + "version": "1.0.10", + "resolved": "https://bnpm.byted.org/string.prototype.trimend/-/string.prototype.trimend-1.0.10.tgz", + "integrity": "sha512-2+3aDAOmPTmuFwjDnmJG2ctEkQKVki7vOSqaxkv42Mowj1V6PnvuwFCRrR5lChUux1TBskPjfkeTOhqczDMxTw==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.9", + "call-bound": "^1.0.4", + "define-properties": "^1.2.1", + "es-object-atoms": "^1.1.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/string.prototype.trimstart": { + "version": "1.0.8", + "resolved": "https://bnpm.byted.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.8.tgz", + "integrity": "sha512-UXSH262CSZY1tfu3G3Secr6uGLCFVPMhIqHjlgCUtCCcgihYc/xKs9djMTMUOb2j1mVSeU8EU6NWc/iQKU6Gfg==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-object-atoms": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/strip-ansi": { + "version": "6.0.1", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-ansi-cjs": { + "name": "strip-ansi", + "version": "6.0.1", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/stylehacks": { + "version": "7.0.11", + "resolved": "https://bnpm.byted.org/stylehacks/-/stylehacks-7.0.11.tgz", + "integrity": "sha512-iODNfhXVLqc5LADs+Y6Oh5wJuK5ZcHbVng8aiK3y9pjMQdc5hLrBW0eFU6FtnpNrE6PoEg/MmFTU4waotj5WNg==", + "dev": true, + "license": "MIT", + "dependencies": { + "browserslist": "^4.28.2", + "postcss-selector-parser": "^7.1.1" + }, + "engines": { + "node": "^18.12.0 || ^20.9.0 || >=22.0" + }, + "peerDependencies": { + "postcss": "^8.5.13" + } + }, + "node_modules/stylehacks/node_modules/postcss-selector-parser": { + "version": "7.1.4", + "resolved": "https://bnpm.byted.org/postcss-selector-parser/-/postcss-selector-parser-7.1.4.tgz", + "integrity": "sha512-HeP7D2wyhkR+XaK6v4W8oRF62Dsz4flyuczALJp61GckGm42u1saSSJ/0auvcBqxs3jMRFEcPK34At/0JBKdOg==", + "dev": true, + "license": "MIT", + "dependencies": { + "cssesc": "^3.0.0", + "util-deprecate": "^1.0.2" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/sucrase": { + "version": "3.35.0", + "dev": true, + "license": "MIT", + "dependencies": { + "@jridgewell/gen-mapping": "^0.3.2", + "commander": "^4.0.0", + "glob": "^10.3.10", + "lines-and-columns": "^1.1.6", + "mz": "^2.7.0", + "pirates": "^4.0.1", + "ts-interface-checker": "^0.1.9" + }, + "bin": { + "sucrase": "bin/sucrase", + "sucrase-node": "bin/sucrase-node" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + } + }, + "node_modules/sucrase/node_modules/commander": { + "version": "4.1.1", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 6" + } + }, + "node_modules/sucrase/node_modules/lines-and-columns": { + "version": "1.2.4", + "dev": true, + "license": "MIT" + }, + "node_modules/supports-color": { + "version": "8.1.1", + "resolved": "https://bnpm.byted.org/supports-color/-/supports-color-8.1.1.tgz", + "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/supports-color?sponsor=1" + } + }, + "node_modules/supports-preserve-symlinks-flag": { + "version": "1.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/svgo": { + "version": "4.0.1", + "resolved": "https://bnpm.byted.org/svgo/-/svgo-4.0.1.tgz", + "integrity": "sha512-XDpWUOPC6FEibaLzjfe0ucaV0YrOjYotGJO1WpF0Zd+n6ZGEQUsSugaoLq9QkEZtAfQIxT42UChcssDVPP3+/w==", + "dev": true, + "license": "MIT", + "dependencies": { + "commander": "^11.1.0", + "css-select": "^5.1.0", + "css-tree": "^3.0.1", + "css-what": "^6.1.0", + "csso": "^5.0.5", + "picocolors": "^1.1.1", + "sax": "^1.5.0" + }, + "bin": { + "svgo": "bin/svgo.js" + }, + "engines": { + "node": ">=16" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/svgo" + } + }, + "node_modules/tailwindcss": { + "version": "3.4.17", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "@alloc/quick-lru": "^5.2.0", + "arg": "^5.0.2", + "chokidar": "^3.6.0", + "didyoumean": "^1.2.2", + "dlv": "^1.1.3", + "fast-glob": "^3.3.2", + "glob-parent": "^6.0.2", + "is-glob": "^4.0.3", + "jiti": "^1.21.6", + "lilconfig": "^3.1.3", + "micromatch": "^4.0.8", + "normalize-path": "^3.0.0", + "object-hash": "^3.0.0", + "picocolors": "^1.1.1", + "postcss": "^8.4.47", + "postcss-import": "^15.1.0", + "postcss-js": "^4.0.1", + "postcss-load-config": "^4.0.2", + "postcss-nested": "^6.2.0", + "postcss-selector-parser": "^6.1.2", + "resolve": "^1.22.8", + "sucrase": "^3.35.0" + }, + "bin": { + "tailwind": "lib/cli.js", + "tailwindcss": "lib/cli.js" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/tailwindcss/node_modules/jiti": { + "version": "1.21.7", + "dev": true, + "license": "MIT", + "bin": { + "jiti": "bin/jiti.js" + } + }, + "node_modules/tapable": { + "version": "2.3.3", + "resolved": "https://bnpm.byted.org/tapable/-/tapable-2.3.3.tgz", + "integrity": "sha512-uxc/zpqFg6x7C8vOE7lh6Lbda8eEL9zmVm/PLeTPBRhh1xCgdWaQ+J1CUieGpIfm2HdtsUpRv+HshiasBMcc6A==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + } + }, + "node_modules/terser": { + "version": "5.48.0", + "resolved": "https://bnpm.byted.org/terser/-/terser-5.48.0.tgz", + "integrity": "sha512-J/9An6vs9Us6wKRriSFXBWdRZapREHqFzdNUKk0pmu804EMR6dr6winwo7e5JDxN4xahxQsuysyYFwlwj4XN/Q==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "@jridgewell/source-map": "^0.3.3", + "acorn": "^8.15.0", + "commander": "^2.20.0", + "source-map-support": "~0.5.20" + }, + "bin": { + "terser": "bin/terser" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/terser-webpack-plugin": { + "version": "5.6.1", + "resolved": "https://bnpm.byted.org/terser-webpack-plugin/-/terser-webpack-plugin-5.6.1.tgz", + "integrity": "sha512-201R5j+sJpK8nFWwKVyNfZot8FaJbLZDq5evriVzbV1wDtSXDjRUDRfJzHpAaxFDMEhsZL1QkeqM61wgsS3KaQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jridgewell/trace-mapping": "^0.3.25", + "jest-worker": "^27.4.5", + "schema-utils": "^4.3.0", + "terser": "^5.31.1" + }, + "engines": { + "node": ">= 10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "webpack": "^5.1.0" + }, + "peerDependenciesMeta": { + "@minify-html/node": { + "optional": true + }, + "@swc/core": { + "optional": true + }, + "@swc/css": { + "optional": true + }, + "@swc/html": { + "optional": true + }, + "clean-css": { + "optional": true + }, + "cssnano": { + "optional": true + }, + "csso": { + "optional": true + }, + "esbuild": { + "optional": true + }, + "html-minifier-terser": { + "optional": true + }, + "lightningcss": { + "optional": true + }, + "postcss": { + "optional": true + }, + "uglify-js": { + "optional": true + } + } + }, + "node_modules/terser-webpack-plugin/node_modules/jest-worker": { + "version": "27.5.1", + "resolved": "https://bnpm.byted.org/jest-worker/-/jest-worker-27.5.1.tgz", + "integrity": "sha512-7vuh85V5cdDofPyxn58nrPjBktZo0u9x1g8WtjQol+jZDaE+fhN+cIvTj11GndBnMnyfrUOG1sZQxCdjKh+DKg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/node": "*", + "merge-stream": "^2.0.0", + "supports-color": "^8.0.0" + }, + "engines": { + "node": ">= 10.13.0" + } + }, + "node_modules/terser/node_modules/commander": { + "version": "2.20.3", + "resolved": "https://bnpm.byted.org/commander/-/commander-2.20.3.tgz", + "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/thenify": { + "version": "3.3.1", + "dev": true, + "license": "MIT", + "dependencies": { + "any-promise": "^1.0.0" + } + }, + "node_modules/thenify-all": { + "version": "1.6.0", + "dev": true, + "license": "MIT", + "dependencies": { + "thenify": ">= 3.1.0 < 4" + }, + "engines": { + "node": ">=0.8" + } + }, + "node_modules/tiny-invariant": { + "version": "1.3.3", + "resolved": "https://bnpm.byted.org/tiny-invariant/-/tiny-invariant-1.3.3.tgz", + "integrity": "sha512-+FbBPE1o9QAYvviau/qC5SE3caw21q3xkvWKBtja5vgqOWIHHJ3ioaq1VPfn/Szqctz2bU/oYeKd9/z5BL+PVg==", + "dev": true, + "license": "MIT" + }, + "node_modules/tinypool": { + "version": "2.1.0", + "resolved": "https://bnpm.byted.org/tinypool/-/tinypool-2.1.0.tgz", + "integrity": "sha512-Pugqs6M0m7Lv1I7FtxN4aoyToKg1C4tu+/381vH35y8oENM/Ai7f7C4StcoK4/+BSw9ebcS8jRiVrORFKCALLw==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^20.0.0 || >=22.0.0" + } + }, + "node_modules/to-regex-range": { + "version": "5.0.1", + "dev": true, + "license": "MIT", + "dependencies": { + "is-number": "^7.0.0" + }, + "engines": { + "node": ">=8.0" + } + }, + "node_modules/ts-interface-checker": { + "version": "0.1.13", + "dev": true, + "license": "Apache-2.0" + }, + "node_modules/tslib": { + "version": "2.8.1", + "resolved": "https://bnpm.byted.org/tslib/-/tslib-2.8.1.tgz", + "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==", + "dev": true, + "license": "0BSD", + "peer": true + }, + "node_modules/type-detect": { + "version": "4.1.0", + "resolved": "https://bnpm.byted.org/type-detect/-/type-detect-4.1.0.tgz", + "integrity": "sha512-Acylog8/luQ8L7il+geoSxhEkazvkslg7PSNKOX59mbB9cOveP5aq9h74Y7YU8yDpJwetzQQrfIwtf4Wp4LKcw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/typed-array-buffer": { + "version": "1.0.3", + "resolved": "https://bnpm.byted.org/typed-array-buffer/-/typed-array-buffer-1.0.3.tgz", + "integrity": "sha512-nAYYwfY3qnzX30IkA6AQZjVbtK6duGontcQm1WSG1MD94YLqK0515GNApXkoxKOWMusVssAHWLh9SeaoefYFGw==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.3", + "es-errors": "^1.3.0", + "is-typed-array": "^1.1.14" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/typed-array-byte-length": { + "version": "1.0.3", + "resolved": "https://bnpm.byted.org/typed-array-byte-length/-/typed-array-byte-length-1.0.3.tgz", + "integrity": "sha512-BaXgOuIxz8n8pIq3e7Atg/7s+DpiYrxn4vdot3w9KbnBhcRQq6o3xemQdIfynqSeXeDrF32x+WvfzmOjPiY9lg==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.8", + "for-each": "^0.3.3", + "gopd": "^1.2.0", + "has-proto": "^1.2.0", + "is-typed-array": "^1.1.14" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/typed-array-byte-offset": { + "version": "1.0.4", + "resolved": "https://bnpm.byted.org/typed-array-byte-offset/-/typed-array-byte-offset-1.0.4.tgz", + "integrity": "sha512-bTlAFB/FBYMcuX81gbL4OcpH5PmlFHqlCCpAl8AlEzMz5k53oNDvN8p1PNOWLEmI2x4orp3raOFB51tv9X+MFQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "available-typed-arrays": "^1.0.7", + "call-bind": "^1.0.8", + "for-each": "^0.3.3", + "gopd": "^1.2.0", + "has-proto": "^1.2.0", + "is-typed-array": "^1.1.15", + "reflect.getprototypeof": "^1.0.9" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/typed-array-length": { + "version": "1.0.8", + "resolved": "https://bnpm.byted.org/typed-array-length/-/typed-array-length-1.0.8.tgz", + "integrity": "sha512-phPGCwqr2+Qo0fwniCE8e4pKnGu/yFb5nD5Y8bf0EEeiI5GklnACYA9GFy/DrAeRrKHXvHn+1SUsOWgJp6RO+g==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.9", + "for-each": "^0.3.5", + "gopd": "^1.2.0", + "is-typed-array": "^1.1.15", + "possible-typed-array-names": "^1.1.0", + "reflect.getprototypeof": "^1.0.10" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/typescript": { + "version": "5.7.3", + "dev": true, + "license": "Apache-2.0", + "peer": true, + "bin": { + "tsc": "bin/tsc", + "tsserver": "bin/tsserver" + }, + "engines": { + "node": ">=14.17" + } + }, + "node_modules/uc.micro": { + "version": "2.1.0", + "resolved": "https://bnpm.byted.org/uc.micro/-/uc.micro-2.1.0.tgz", + "integrity": "sha512-ARDJmphmdvUk6Glw7y9DQ2bFkKBHwQHLi2lsaH6PPmz/Ka9sFOBsBluozhDltWmnv9u/cF6Rt87znRTPV+yp/A==", + "dev": true, + "license": "MIT" + }, + "node_modules/unbox-primitive": { + "version": "1.1.0", + "resolved": "https://bnpm.byted.org/unbox-primitive/-/unbox-primitive-1.1.0.tgz", + "integrity": "sha512-nWJ91DjeOkej/TA8pXQ3myruKpKEYgqvpw9lz4OPHj/NWFNluYrjbz9j01CJ8yKQd2g4jFoOkINCTW2I5LEEyw==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.3", + "has-bigints": "^1.0.2", + "has-symbols": "^1.1.0", + "which-boxed-primitive": "^1.1.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/undici-types": { + "version": "8.3.0", + "resolved": "https://bnpm.byted.org/undici-types/-/undici-types-8.3.0.tgz", + "integrity": "sha512-j375ScV60dom+YkPFIfTLcOiPxkN/buHz5GobjLhixFuANaNs3C9l4GmrWqejgXWJ7BbJcFYpTEUkS1Ge8bpZQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/universalify": { + "version": "2.0.1", + "resolved": "https://bnpm.byted.org/universalify/-/universalify-2.0.1.tgz", + "integrity": "sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 10.0.0" + } + }, + "node_modules/update-browserslist-db": { + "version": "1.2.3", + "resolved": "https://bnpm.byted.org/update-browserslist-db/-/update-browserslist-db-1.2.3.tgz", + "integrity": "sha512-Js0m9cx+qOgDxo0eMiFGEueWztz+d4+M3rGlmKPT+T4IS/jP4ylw3Nwpu6cpTTP8R1MAC1kF4VbdLt3ARf209w==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/browserslist" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "dependencies": { + "escalade": "^3.2.0", + "picocolors": "^1.1.1" + }, + "bin": { + "update-browserslist-db": "cli.js" + }, + "peerDependencies": { + "browserslist": ">= 4.21.0" + } + }, + "node_modules/util-deprecate": { + "version": "1.0.2", + "dev": true, + "license": "MIT" + }, + "node_modules/vary": { + "version": "1.1.2", + "resolved": "https://bnpm.byted.org/vary/-/vary-1.1.2.tgz", + "integrity": "sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/wasm-feature-detect": { + "version": "1.8.0", + "resolved": "https://bnpm.byted.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://bnpm.byted.org/watchpack/-/watchpack-2.5.2.tgz", + "integrity": "sha512-6i/00NBjP4yGPs+caKSyRfpTF/8Torsu0MOW3mMzIbhgISFder8i7xbqgHlLMwJrdiN8ndBV3UA1/AfzPSr+jg==", + "dev": true, + "license": "MIT", + "dependencies": { + "graceful-fs": "^4.1.2" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/webpack": { + "version": "5.107.2", + "resolved": "https://bnpm.byted.org/webpack/-/webpack-5.107.2.tgz", + "integrity": "sha512-v7RhXaJbpMlV0D7hC7lb2EbnxkoeUqf9qhKr6lozx3Q48pmFrqqNRmZFUEGmi7pSwm6fCQ2H1IjvCkHqdpVdjQ==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "@types/estree": "^1.0.8", + "@types/json-schema": "^7.0.15", + "@webassemblyjs/ast": "^1.14.1", + "@webassemblyjs/wasm-edit": "^1.14.1", + "@webassemblyjs/wasm-parser": "^1.14.1", + "acorn": "^8.16.0", + "acorn-import-phases": "^1.0.3", + "browserslist": "^4.28.1", + "chrome-trace-event": "^1.0.2", + "enhanced-resolve": "^5.22.0", + "es-module-lexer": "^2.1.0", + "eslint-scope": "5.1.1", + "events": "^3.2.0", + "glob-to-regexp": "^0.4.1", + "graceful-fs": "^4.2.11", + "loader-runner": "^4.3.2", + "mime-db": "^1.54.0", + "neo-async": "^2.6.2", + "schema-utils": "^4.3.3", + "tapable": "^2.3.0", + "terser-webpack-plugin": "^5.5.0", + "watchpack": "^2.5.1", + "webpack-sources": "^3.5.0" + }, + "bin": { + "webpack": "bin/webpack.js" + }, + "engines": { + "node": ">=10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependenciesMeta": { + "webpack-cli": { + "optional": true + } + } + }, + "node_modules/webpack-sources": { + "version": "3.5.0", + "resolved": "https://bnpm.byted.org/webpack-sources/-/webpack-sources-3.5.0.tgz", + "integrity": "sha512-HPuy+uuoTCaaoEoI1LQ3JN9+vrPBvEesnnX1jADHy728cHSMlq4wUc4afYqahq2B1mhQVZxCXOkNTnXltr+2vQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/webpack/node_modules/@types/estree": { + "version": "1.0.9", + "resolved": "https://bnpm.byted.org/@types/estree/-/estree-1.0.9.tgz", + "integrity": "sha512-GhdPgy1el4/ImP05X05Uw4cw2/M93BCUmnEvWZNStlCzEKME4Fkk+YpoA5OiHNQmoS7Cafb8Xa3Pya8m1Qrzeg==", + "dev": true, + "license": "MIT" + }, + "node_modules/webpack/node_modules/mime-db": { + "version": "1.54.0", + "resolved": "https://bnpm.byted.org/mime-db/-/mime-db-1.54.0.tgz", + "integrity": "sha512-aU5EJuIN2WDemCcAp2vFBfp/m4EAhWJnUNSSw0ixs7/kXbd6Pg64EmwJkNdFhB8aWt1sH2CTXrLxo/iAGV3oPQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/which": { + "version": "2.0.2", + "dev": true, + "license": "ISC", + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "node-which": "bin/node-which" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/which-boxed-primitive": { + "version": "1.1.1", + "resolved": "https://bnpm.byted.org/which-boxed-primitive/-/which-boxed-primitive-1.1.1.tgz", + "integrity": "sha512-TbX3mj8n0odCBFVlY8AxkqcHASw3L60jIuF8jFP78az3C2YhmGvqbHBpAjTRH2/xqYunrJ9g1jSyjCjpoWzIAA==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-bigint": "^1.1.0", + "is-boolean-object": "^1.2.1", + "is-number-object": "^1.1.1", + "is-string": "^1.1.1", + "is-symbol": "^1.1.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/which-builtin-type": { + "version": "1.2.1", + "resolved": "https://bnpm.byted.org/which-builtin-type/-/which-builtin-type-1.2.1.tgz", + "integrity": "sha512-6iBczoX+kDQ7a3+YJBnh3T+KZRxM/iYNPXicqk66/Qfm1b93iu+yOImkg0zHbj5LNOcNv1TEADiZ0xa34B4q6Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.2", + "function.prototype.name": "^1.1.6", + "has-tostringtag": "^1.0.2", + "is-async-function": "^2.0.0", + "is-date-object": "^1.1.0", + "is-finalizationregistry": "^1.1.0", + "is-generator-function": "^1.0.10", + "is-regex": "^1.2.1", + "is-weakref": "^1.0.2", + "isarray": "^2.0.5", + "which-boxed-primitive": "^1.1.0", + "which-collection": "^1.0.2", + "which-typed-array": "^1.1.16" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/which-collection": { + "version": "1.0.2", + "resolved": "https://bnpm.byted.org/which-collection/-/which-collection-1.0.2.tgz", + "integrity": "sha512-K4jVyjnBdgvc86Y6BkaLZEN933SwYOuBFkdmBu9ZfkcAbdVbpITnDmjvZ/aQjRXQrv5EPkTnD1s39GiiqbngCw==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-map": "^2.0.3", + "is-set": "^2.0.3", + "is-weakmap": "^2.0.2", + "is-weakset": "^2.0.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/which-typed-array": { + "version": "1.1.22", + "resolved": "https://bnpm.byted.org/which-typed-array/-/which-typed-array-1.1.22.tgz", + "integrity": "sha512-fvO4ExWMFsqyhG3AiPAObMuY1lxaqgYcxbc49CNdWDDECOJNgQyvsOWVwbZc+qf3rzRtxojBK+CMEv0Ld5CYpw==", + "dev": true, + "license": "MIT", + "dependencies": { + "available-typed-arrays": "^1.0.7", + "call-bind": "^1.0.9", + "call-bound": "^1.0.4", + "for-each": "^0.3.5", + "get-proto": "^1.0.1", + "gopd": "^1.2.0", + "has-tostringtag": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/wrap-ansi": { + "version": "8.1.0", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-styles": "^6.1.0", + "string-width": "^5.0.1", + "strip-ansi": "^7.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, + "node_modules/wrap-ansi-cjs": { + "name": "wrap-ansi", + "version": "7.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, + "node_modules/wrap-ansi-cjs/node_modules/emoji-regex": { + "version": "8.0.0", + "dev": true, + "license": "MIT" + }, + "node_modules/wrap-ansi-cjs/node_modules/string-width": { + "version": "4.2.3", + "dev": true, + "license": "MIT", + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/wrap-ansi/node_modules/ansi-regex": { + "version": "6.1.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-regex?sponsor=1" + } + }, + "node_modules/wrap-ansi/node_modules/ansi-styles": { + "version": "6.2.1", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/wrap-ansi/node_modules/strip-ansi": { + "version": "7.1.0", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-regex": "^6.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/strip-ansi?sponsor=1" + } + }, + "node_modules/ws": { + "version": "8.21.0", + "resolved": "https://bnpm.byted.org/ws/-/ws-8.21.0.tgz", + "integrity": "sha512-Vsp28b7DRcimFQvrqu2Wek3z1iYxDCWqHYB8Qsnk/S4RfaCQzPGPyBNuVjJV3cd6UiKtUtp6sNM77gWvzcCH+g==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10.0.0" + }, + "peerDependencies": { + "bufferutil": "^4.0.1", + "utf-8-validate": ">=5.0.2" + }, + "peerDependenciesMeta": { + "bufferutil": { + "optional": true + }, + "utf-8-validate": { + "optional": true + } + } + }, + "node_modules/yaml": { + "version": "2.8.0", + "dev": true, + "license": "ISC", + "bin": { + "yaml": "bin.mjs" + }, + "engines": { + "node": ">= 14.6" + } + } + } +} diff --git a/demo/package.json b/demo/package.json new file mode 100644 index 00000000..aa5224c0 --- /dev/null +++ b/demo/package.json @@ -0,0 +1,30 @@ +{ + "type": "module", + "scripts": { + "build": "rspeedy build", + "dev": "rspeedy dev" + }, + "dependencies": { + "@lynx-js/react": "0.121.2" + }, + "devDependencies": { + "@lynx-js/qrcode-rsbuild-plugin": "0.5.0", + "@lynx-js/react-rsbuild-plugin": "0.17.0", + "@lynx-js/rspeedy": "0.15.0", + "@lynx-js/tailwind-preset": "^0.1.1", + "@lynx-js/types": "3.7.0", + "@types/react": "^18.3.20", + "tailwindcss": "^3.4.17", + "typescript": "~5.7.3", + "@lynx-js/preact-devtools": "file:../" + }, + "engines": { + "node": ">=18" + }, + "eslintConfig": { + "rules": { + "react/react-in-jsx-scope": "off", + "react/no-unknown-property": "off" + } + } +} diff --git a/demo/src/App.tsx b/demo/src/App.tsx new file mode 100644 index 00000000..7d3a59bd --- /dev/null +++ b/demo/src/App.tsx @@ -0,0 +1,71 @@ +// @ts-nocheck +import { useState } from "preact/hooks"; +import Menu from "./apps/Menu.js"; + +import Counter from "./apps/Counter/index.jsx"; +import CounterAuto from "./apps/Counter/auto.jsx"; +import ListSimple from "./apps/List/simple.jsx"; +import List from "./apps/List/index.jsx"; +import SnapshotProps from "./apps/SnapshotProps/index.jsx"; + +const ComponentMap: Record = { + Counter, + CounterAuto, + ListSimple, + List, + SnapshotProps, +}; +export function ComponentSwitcher() { + const [componentName, setComponentName] = useState("Counter"); + const Component = ComponentMap[componentName]; + return ( + + + + {Object.entries(ComponentMap).map(([demoName]) => ( + + { + setComponentName(demoName); + }} + style={{ + fontSize: "18px", + padding: "2px", + color: "blue", + textDecoration: "underline", + }} + > + ▷ {demoName} + + + ))} + + + + {Component && } + + + ); +} + +export function App() { + return ; +} diff --git a/demo/src/apps/Counter/auto.jsx b/demo/src/apps/Counter/auto.jsx new file mode 100644 index 00000000..01042dd8 --- /dev/null +++ b/demo/src/apps/Counter/auto.jsx @@ -0,0 +1,51 @@ +// @ts-nocheck + +import { useState, useEffect } from "@lynx-js/react"; + +function Display(props) { + return ( + + Counter: {props.value} + + ); +} + +export default function Counter() { + const [v, set] = useState(0); + + useEffect(() => { + setInterval(() => { + set(v => v + 1); + }, 1000); + }, []); + + return ( + + + { + set(v + 1); + }} + > + + Increment + + + + ); +} + +// render(, document.getElementById("app")); diff --git a/demo/src/apps/Counter/index.jsx b/demo/src/apps/Counter/index.jsx new file mode 100644 index 00000000..21b49313 --- /dev/null +++ b/demo/src/apps/Counter/index.jsx @@ -0,0 +1,45 @@ +// @ts-nocheck + +import { useState } from "@lynx-js/react"; + +function Display(props) { + return ( + + Counter: {props.value} + + ); +} + +export default function Counter() { + const [v, set] = useState(0); + + return ( + + + { + set(v + 1); + }} + > + + Increment + + + + ); +} + +// render(, document.getElementById("app")); diff --git a/demo/src/apps/List/index.css b/demo/src/apps/List/index.css new file mode 100644 index 00000000..82a84aa9 --- /dev/null +++ b/demo/src/apps/List/index.css @@ -0,0 +1,3 @@ +.container { + border: 1px solid red; +} diff --git a/demo/src/apps/List/index.jsx b/demo/src/apps/List/index.jsx new file mode 100644 index 00000000..3c98c976 --- /dev/null +++ b/demo/src/apps/List/index.jsx @@ -0,0 +1,191 @@ +/* eslint-disable react/no-unknown-property */ + +import { Component } from "@lynx-js/react"; + +import "./index.css"; + +class Foo extends Component { + /** + * @override + */ + render() { + return ( + + item-key: {this.props.name} + + ); + } +} + +class Bar extends Component { + /** + * @override + */ + render() { + return ( + + item-key: {this.props.name} + + ); + } +} + +export default class App extends Component { + constructor(props) { + super(props); + this.state = { + data0: Array.from(Array(100).keys()), + listType: "single", + columnCount: 1, + }; + } + + increaseColumnCount() { + this.setState({ + columnCount: this.state.columnCount + 1, + }); + } + decreaseColumnCount() { + this.setState({ + columnCount: this.state.columnCount - 1, + }); + } + changeListTypeToSingle() { + this.setState({ + listType: "single", + }); + } + changeListTypeToWaterfall() { + this.setState({ + listType: "waterfall", + }); + } + changeListTypeToFlow() { + this.setState({ + listType: "flow", + }); + } + + /** + * @override + */ + render() { + const items = [ + + + , + ]; + + this.state.data0 && + this.state.data0.map((item, index) => { + if (index % 2 == 0) { + items.push( + + + , + ); + } else { + items.push( + + + , + ); + } + }); + + return ( + + Start of a List + + {items} + + + + + + + + columnCount: {this.state.columnCount} + + + + + + listType: {this.state.listType} + + + + + + Change listType to single + + + + + + Change listType to waterfall + + + + + + Change listType to flow + + + + + + Reduce columnCount + + + + + + Reduce columnCount + + + + ); + } +} diff --git a/demo/src/apps/List/simple.jsx b/demo/src/apps/List/simple.jsx new file mode 100644 index 00000000..5f7e2805 --- /dev/null +++ b/demo/src/apps/List/simple.jsx @@ -0,0 +1,23 @@ +export const Item = ({ text }) => { + return ( + + item: {text} + + ); +}; + +export default function ListSimple() { + return ( + + + {Array(100) + .fill(0) + .map((_item, index) => ( + + + + ))} + + + ); +} diff --git a/demo/src/apps/Menu.js b/demo/src/apps/Menu.js new file mode 100644 index 00000000..4292c8fa --- /dev/null +++ b/demo/src/apps/Menu.js @@ -0,0 +1,10 @@ +import { H1 } from "./header.js"; + +let Menu = ({ children }) => ( + +

Preact Devtools Demos

+ {children} +
+); + +export default Menu; diff --git a/demo/src/apps/SnapshotProps/index.jsx b/demo/src/apps/SnapshotProps/index.jsx new file mode 100644 index 00000000..5f8cf0a9 --- /dev/null +++ b/demo/src/apps/SnapshotProps/index.jsx @@ -0,0 +1,14 @@ +export const View = props => { + return ( + + View + {props.child} + + ); +}; + +export default function SnapshotProps() { + const child = child; + + return ; +} diff --git a/demo/src/apps/button.jsx b/demo/src/apps/button.jsx new file mode 100644 index 00000000..0217d87d --- /dev/null +++ b/demo/src/apps/button.jsx @@ -0,0 +1,16 @@ +export const Button = ({ onClick, children }) => { + return ( + + {children} + + ); +}; diff --git a/demo/src/apps/header.tsx b/demo/src/apps/header.tsx new file mode 100644 index 00000000..921ef3d1 --- /dev/null +++ b/demo/src/apps/header.tsx @@ -0,0 +1,38 @@ +export function H1(props: { children: any }) { + return ( + + {props.children} + + ); +} + +export function H2(props: { children: any }) { + return ( + + {props.children} + + ); +} + +export function H3(props: { children: any }) { + return ( + + {props.children} + + ); +} diff --git a/demo/src/index.tsx b/demo/src/index.tsx new file mode 100644 index 00000000..50ded138 --- /dev/null +++ b/demo/src/index.tsx @@ -0,0 +1,10 @@ +import "@lynx-js/preact-devtools"; + +import { root } from "@lynx-js/react"; +import { App } from "./App.jsx"; + +root.render(); + +if (import.meta.webpackHot) { + import.meta.webpackHot.accept(); +} diff --git a/demo/src/rspeedy-env.d.ts b/demo/src/rspeedy-env.d.ts new file mode 100644 index 00000000..1c813a68 --- /dev/null +++ b/demo/src/rspeedy-env.d.ts @@ -0,0 +1 @@ +/// diff --git a/demo/tsconfig.json b/demo/tsconfig.json new file mode 100644 index 00000000..001a2cef --- /dev/null +++ b/demo/tsconfig.json @@ -0,0 +1,17 @@ +{ + "compilerOptions": { + "jsx": "react-jsx", + "jsxImportSource": "@lynx-js/react", + + "module": "node18", + "moduleResolution": "node16", + + "strict": true, + "isolatedModules": true, + "verbatimModuleSyntax": true, + + "esModuleInterop": true, + "skipLibCheck": true + }, + "exclude": ["dist/"] +} diff --git a/ldt-plugin/README.md b/ldt-plugin/README.md new file mode 100644 index 00000000..9bba7f86 --- /dev/null +++ b/ldt-plugin/README.md @@ -0,0 +1,12 @@ +# Lynx Devtool Plugin for ReactLynx Preact Devtools + +The source code of Preact Devtools Panel in Lynx Devtool. + +## Developing + +```bash +npm dev:ldt-plugin + +# The JS bundle will be served at http://localhost:8080/dist/index.js +# You can replace it to Lynx Devtool: https://github.com/lynx-family/lynx-devtool/blob/dd671992f4a739fb18044950ad4acb568161a34b/packages/devtools-frontend-lynx/front_end/panels/preact_devtools/PreactDevtoolsPanel.ts#L85 +``` diff --git a/ldt-plugin/rsbuild.config.ts b/ldt-plugin/rsbuild.config.ts new file mode 100644 index 00000000..2c51d637 --- /dev/null +++ b/ldt-plugin/rsbuild.config.ts @@ -0,0 +1,99 @@ +import { defineConfig } from "@rsbuild/core"; +import { type RspackPluginInstance } from "@rspack/core"; +import { pluginPreact } from "@rsbuild/plugin-preact"; +import fs from "node:fs"; +import path from "node:path"; +import { fileURLToPath } from "node:url"; + +const isDev = process.env.NODE_ENV === "development"; +const __filename = fileURLToPath(import.meta.url); +const __dirname = path.dirname(__filename); + +export default defineConfig({ + html: { + template: path.join(__dirname, "./src/index.html"), + }, + source: { + entry: { + index: { + import: path.join(__dirname, "./src/plugin-entry.ts"), + // On dev mode we need to enable html to utilize the devServer to serve the index.js file + html: isDev, + }, + }, + define: { + __DEBUG__: isDev ? JSON.stringify(true) : JSON.stringify(false), + }, + }, + server: { + port: 8080, + }, + output: { + minify: false, + // Make sure we can serve the js at http://localhost:8080/dist/index.js on dev mode + distPath: isDev + ? { + root: ".", + js: "./dist", + } + : { + js: ".", + }, + filenameHash: false, + }, + performance: { + chunkSplit: { + strategy: "all-in-one", + }, + }, + plugins: [pluginPreact()], + tools: { + rspack: { + output: { + iife: false, + library: { + type: "module", + }, + }, + plugins: [ + { + name: "inject-to-js", + apply(compiler) { + compiler.hooks.compilation.tap("inject-to-js", compilation => { + compilation.hooks.processAssets.tap("inject-to-js", assets => { + let cssContent = ""; + for (const [name, asset] of Object.entries(assets)) { + if (name.endsWith(".css")) { + cssContent += asset.source().toString(); + compilation.deleteAsset(name); + } + } + + // svg for icons + const svgContent = fs.readFileSync( + path.join(__dirname, "../src/view/sprite.svg"), + "utf-8", + ); + + const { ConcatSource } = compiler.webpack.sources; + for (const [name] of Object.entries(assets)) { + if (name.endsWith(".js")) { + compilation.updateAsset(name, old => { + return new ConcatSource( + ` +document.head.appendChild(document.createElement('style')).textContent = \`${cssContent}\`; +document.body.appendChild(document.createElement('svg')).outerHTML = \`${svgContent}\`; +`, + old, + ); + }); + } + } + }); + }); + }, + } as RspackPluginInstance, + ], + }, + }, +}); diff --git a/ldt-plugin/src/.gitignore b/ldt-plugin/src/.gitignore new file mode 100644 index 00000000..1521c8b7 --- /dev/null +++ b/ldt-plugin/src/.gitignore @@ -0,0 +1 @@ +dist diff --git a/ldt-plugin/src/components/lynx-black-logo-svg.ts b/ldt-plugin/src/components/lynx-black-logo-svg.ts new file mode 100644 index 00000000..f6485f3b --- /dev/null +++ b/ldt-plugin/src/components/lynx-black-logo-svg.ts @@ -0,0 +1,45 @@ +const { React } = window; + +export const LynxBlackLogoSvg: React.FC = () => { + return React.createElement( + "svg", + { + width: "92px", + height: "110px", + viewBox: "0 0 92 110", + version: "1.1", + xmlns: "http://www.w3.org/2000/svg", + xmlnsXlink: "http://www.w3.org/1999/xlink", + }, + React.createElement( + "g", + { + id: "page-1", + stroke: "none", + strokeWidth: "1", + fill: "none", + fillRule: "evenodd", + }, + React.createElement( + "g", + { + id: "logo", + fill: "#1C1E21", + fillRule: "nonzero", + }, + React.createElement("path", { + d: "M33.8278683,111 C44.1235652,79.1309152 94.3376658,76.4186526 66.8975263,34.3584924 C58.8696925,21.7113126 62.6528092,10.3549689 66.1599691,0.992640448 C66.3857519,0.0684621011 65.6582295,-0.313263738 65.0762115,0.294483979 C64.4941936,0.902231697 52.0711207,13.3535258 45.4180534,19.7373882 C37.4755153,26.1463642 24.3449896,21.9574253 18.0531748,31.5960028 C12.8401002,40.4610831 5.97128491,42.7162792 2.45910761,43.6404575 C-1.05306969,44.5646359 -2.23717518,48.6330297 8.88137468,65.2381037 C14.5510323,72.691803 26.6630266,61.0893465 31.8710838,68.2517287 C43.9027998,89.2868316 36.3516186,92.069412 33.8278683,111 Z", + id: "path", + }), + React.createElement("path", { + d: "M40,110 C55.439341,82.5800141 95.7562244,103.899992 83.8237838,46 C86.2182535,86.8970968 52.65577,80.5566946 40,110 Z", + id: "path", + }), + React.createElement("path", { + d: "M48,111 C63.8700855,95.0638035 86.4793162,117.224204 92,74 C79.1835897,106.867453 59.3973789,90.9109495 48,111 Z", + id: "path", + }), + ), + ), + ); +}; diff --git a/ldt-plugin/src/components/not-supported.ts b/ldt-plugin/src/components/not-supported.ts new file mode 100644 index 00000000..ebea5aa7 --- /dev/null +++ b/ldt-plugin/src/components/not-supported.ts @@ -0,0 +1,32 @@ +const { React } = window; + +export const NotSupported: React.FC<{ + minSdkVersion: string; +}> = ({ minSdkVersion }) => { + return React.createElement( + "div", + { + style: { + margin: "auto", + maxWidth: "600px", + fontSize: "20px", + padding: "32px", + backgroundColor: "white", + color: "black", + }, + }, + [ + `The current version of LynxSDK`, + React.createElement( + "span", + { + style: { + fontWeight: 600, + }, + }, + ` ${window.info.sdkVersion} `, + ), + `is not supported by Preact Devtools. The minimum required LynxSDK version of ${window.info.App} is ${minSdkVersion}. Please upgrade to the latest version.`, + ], + ); +}; diff --git a/ldt-plugin/src/components/preact-logo-text-svg.ts b/ldt-plugin/src/components/preact-logo-text-svg.ts new file mode 100644 index 00000000..67ab6d41 --- /dev/null +++ b/ldt-plugin/src/components/preact-logo-text-svg.ts @@ -0,0 +1,58 @@ +const { React } = window; + +export const PreactLogoTextSvg: React.FC = () => { + return React.createElement( + "svg", + { + width: "100%", + height: "100%", + viewBox: "-256 -256 1900 512", + version: "1.1", + xmlns: "http://www.w3.org/2000/svg", + xmlnsXlink: "http://www.w3.org/1999/xlink", + xmlSpace: "preserve", + }, + React.createElement("path", { + d: "M0,-256 221.7025033688164,-128 221.7025033688164,128 0,256 -221.7025033688164,128 -221.7025033688164,-128z", + fill: "#673ab8", + }), + React.createElement("ellipse", { + cx: "0", + cy: "0", + strokeWidth: "16px", + rx: "75px", + ry: "196px", + fill: "none", + stroke: "white", + transform: "rotate(52.5)", + }), + React.createElement("ellipse", { + cx: "0", + cy: "0", + strokeWidth: "16px", + rx: "75px", + ry: "196px", + fill: "none", + stroke: "white", + transform: "rotate(-52.5)", + }), + React.createElement("circle", { + cx: "0", + cy: "0", + r: "34", + fill: "white", + }), + React.createElement( + "text", + { + x: "250", + y: "128", + fontSize: "350", + fontFamily: "Helvetica Neue, helvetica, arial", + fontWeight: "300", + fill: "#673ab8", + }, + "PREACT", + ), + ); +}; diff --git a/ldt-plugin/src/global.d.ts b/ldt-plugin/src/global.d.ts new file mode 100644 index 00000000..c52314a0 --- /dev/null +++ b/ldt-plugin/src/global.d.ts @@ -0,0 +1,10 @@ +export {}; +declare global { + interface Window { + info: { + sdkVersion: string; + App: string; + }; + compareVersions: (a: string, b: string) => number; + } +} diff --git a/ldt-plugin/src/index.html b/ldt-plugin/src/index.html new file mode 100644 index 00000000..34dbbaf9 --- /dev/null +++ b/ldt-plugin/src/index.html @@ -0,0 +1,26 @@ + + + + + + Preact Devtools Frame + + + + +
+ + diff --git a/ldt-plugin/src/plugin-entry.ts b/ldt-plugin/src/plugin-entry.ts new file mode 100644 index 00000000..e72bb740 --- /dev/null +++ b/ldt-plugin/src/plugin-entry.ts @@ -0,0 +1,143 @@ +import { setupInlineDevtools } from "../../src/shells/inline/index"; +import { PreactLogoTextSvg } from "./components/preact-logo-text-svg"; +import { LynxBlackLogoSvg } from "./components/lynx-black-logo-svg"; +import { NotSupported } from "./components/not-supported"; +import setup from "./setup"; + +const minSdkVersion = "2.18.8"; +const isSupported = ({ + info, + compareVersions, +}: { + info: typeof window.info; + compareVersions: typeof window.compareVersions; +}) => { + return compareVersions(info.sdkVersion, minSdkVersion) >= 0; +}; +const { React } = window; + +const PreactDevtoolsPanel: React.FC< + typeof window.preactDevtoolsLDTCtx.devtoolsProps +> = ({ + isOSSLynxDevtool = false, + addEventListener, + postMessage, + addOnScreenCastPanelUINodeIdSelectedListener, + onPreactDevtoolsPanelUINodeIdSelected, +}) => { + const supported = + isOSSLynxDevtool || + isSupported({ + info: window.info, + compareVersions: window.compareVersions, + }); + + React.useEffect(() => { + if (!supported) { + return; + } + + // @ts-expect-error + window.preactDevtoolsLDTCtx = {}; + window.preactDevtoolsLDTCtx.devtoolsProps = { + addEventListener, + postMessage, + isOSSLynxDevtool, + addOnScreenCastPanelUINodeIdSelectedListener, + onPreactDevtoolsPanelUINodeIdSelected, + }; + + setup(); + + const container = document.getElementById("preact-devtools-container")!; + setupInlineDevtools(container, window.preactDevtoolsLDTCtx); + }, []); + + return React.createElement( + "div", + { + id: "preact-devtools-container", + style: { + height: "100%", + fontSize: "14px", + ...(supported + ? {} + : { + overflow: "scroll", + }), + }, + }, + supported + ? null + : [ + React.createElement( + "div", + { + style: { + margin: "auto", + maxWidth: "600px", + padding: "48px", + fontSize: "40px", + backgroundColor: "white", + color: "black", + display: "flex", + justifyContent: "space-between", + alignItems: "center", + }, + }, + [ + React.createElement( + "div", + { + style: { + display: "flex", + alignItems: "center", + }, + }, + React.createElement(PreactLogoTextSvg, {}), + ), + "❤️", + React.createElement( + "div", + { + style: { + display: "flex", + alignItems: "center", + paddingLeft: "16px", + }, + }, + React.createElement(LynxBlackLogoSvg, {}), + ), + ], + ), + React.createElement( + "div", + { + style: { + width: "100%", + fontSize: "32px", + padding: "32px", + backgroundColor: "white", + color: "black", + display: "flex", + justifyContent: "center", + alignItems: "flex-start", + }, + }, + React.createElement( + "a", + { + href: "https://github.com/lynx-family/preact-devtools", + target: "_blank", + }, + "Preact Devtools for ReactLynx", + ), + ), + React.createElement(NotSupported, { + minSdkVersion, + }), + ], + ); +}; + +export default PreactDevtoolsPanel; diff --git a/ldt-plugin/src/setup.ts b/ldt-plugin/src/setup.ts new file mode 100644 index 00000000..4cf411c9 --- /dev/null +++ b/ldt-plugin/src/setup.ts @@ -0,0 +1,64 @@ +export default function setupDevtoolPanel(): void { + const devtoolsProps = window.preactDevtoolsLDTCtx.devtoolsProps; + const listeners: Record void)[]> = {}; + preactDevtoolsLDTCtx.addEventListener = (type, callback) => { + if (!listeners[type]) { + listeners[type] = []; + } + listeners[type].push(callback); + }; + preactDevtoolsLDTCtx.removeEventListener = (type, callback) => { + if (listeners[type]?.length) { + listeners[type].splice(listeners[type].indexOf(callback), 1); + } + }; + preactDevtoolsLDTCtx.postMessage = ( + { source, type, data }, + _targetOrigin, + ) => { + for (let i = 0; i < (listeners["message"]?.length ?? 0); i++) { + listeners["message"]?.[i]?.({ + source: window, + data: { + source, + type, + data, + }, + } as unknown as MessageEvent); + } + devtoolsProps.postMessage("Remote.Customized.CDP", { + method: "Lynx.sendVMEvent", + params: { + vmType: "JSContext", + event: "PreactDevtools", + data: JSON.stringify({ + source, + type, + data, + }), + }, + }); + }; + + devtoolsProps.addEventListener("Remote.Customized.CDP", msg => { + const msgObj = JSON.parse(msg); + if (msgObj?.method === "Lynx.onVMEvent") { + const { event, vmType: _vmType, data: _data } = msgObj.params; + if (event === "PreactDevtools") { + const dataObj = JSON.parse(msgObj.params.data); + if (__DEBUG__) console.log("frontend -> hdt message received", dataObj); + const { source, type, data } = dataObj; + for (let i = 0; i < (listeners["message"]?.length ?? 0); i++) { + listeners["message"]?.[i]?.({ + source: window, + data: { + source, + type, + data, + }, + } as unknown as MessageEvent); + } + } + } + }); +} diff --git a/package-lock.json b/package-lock.json index 5a7716b9..d65adaae 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,11 +1,11 @@ { - "name": "preact-devtools", + "name": "@lynx-js/preact-devtools", "version": "5.0.1", "lockfileVersion": 3, "requires": true, "packages": { "": { - "name": "preact-devtools", + "name": "@lynx-js/preact-devtools", "version": "5.0.1", "license": "MIT", "dependencies": { @@ -16,13 +16,20 @@ "@babel/core": "^7.29.0", "@babel/plugin-syntax-typescript": "^7.28.6", "@babel/plugin-transform-react-jsx": "^7.28.6", + "@lynx-js/react": "0.121.2", + "@lynx-js/testing-environment": "0.3.0", + "@lynx-js/types": "^4.0.0", "@playwright/test": "^1.59.1", "@preact/signals": "^2.9.0", "@prefresh/vite": "^3.0.0", + "@rsbuild/core": "^1.4.11", + "@rsbuild/plugin-preact": "^1.5.1", "@testing-library/preact": "^3.2.4", "@types/archiver": "^7.0.0", "@types/babel__core": "^7.20.5", "@types/chrome": "^0.1.42", + "@types/jsdom": "^21.1.7", + "@types/mri": "^1.1.1", "@types/node": "^25.6.2", "@types/tar": "^7.0.87", "archiver": "^8.0.0", @@ -44,9 +51,6 @@ "vite": "^8.0.12", "vitest": "^4.1.5", "web-ext": "^10.1.0" - }, - "peerDependencies": { - "preact": "10.x" } }, "node_modules/@asamuzakjp/css-color": { @@ -131,6 +135,7 @@ "integrity": "sha512-CGOfOJqWjg2qW/Mb6zNsDm+u5vFQ8DxXfbM09z69p5Z6+mE1ikP2jUXw+j42Pf1XTYED2Rni5f95npYeuwMDQA==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "@babel/code-frame": "^7.29.0", "@babel/generator": "^7.29.0", @@ -526,6 +531,7 @@ } ], "license": "MIT", + "peer": true, "engines": { "node": ">=20.19.0" }, @@ -574,6 +580,7 @@ } ], "license": "MIT", + "peer": true, "engines": { "node": ">=20.19.0" } @@ -648,33 +655,10 @@ } } }, - "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/@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/@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.2", + "resolved": "https://registry.npmjs.org/@emnapi/wasi-threads/-/wasi-threads-1.2.2.tgz", + "integrity": "sha512-c95qOXkHdydNKhscBTebqEC1CVAZpyqOfVfBzQ1qgzyl3gfeldUjIggDbIZgDKsHLgnsM+igH7TJ/eAasaVuMA==", "dev": true, "license": "MIT", "optional": true, @@ -1559,6 +1543,54 @@ "@jridgewell/sourcemap-codec": "^1.4.14" } }, + "node_modules/@lynx-js/react": { + "version": "0.121.2", + "resolved": "https://registry.npmjs.org/@lynx-js/react/-/react-0.121.2.tgz", + "integrity": "sha512-Ruf5d2P0v1mXiZXbtxTOoR06Frfrs031Rp4bebnf1ZNW12PuXvnGa6n8gFi+ioJ4c1v9SUSpU40Fl/97TMgSRA==", + "dev": true, + "dependencies": { + "preact": "npm:@lynx-js/internal-preact@10.29.1-20260519060144-e6da44c" + }, + "peerDependencies": { + "@lynx-js/types": "*", + "@types/react": "^18" + }, + "peerDependenciesMeta": { + "@lynx-js/types": { + "optional": true + } + } + }, + "node_modules/@lynx-js/react/node_modules/preact": { + "name": "@lynx-js/internal-preact", + "version": "10.29.1-20260519060144-e6da44c", + "resolved": "https://registry.npmjs.org/@lynx-js/internal-preact/-/internal-preact-10.29.1-20260519060144-e6da44c.tgz", + "integrity": "sha512-h2pRrt5oLK9LT1NkjyprtzJij/AdZGvv3CN6B5edL4chixqvITbxoCSdYy667Hl6+uKOBuxmCNZoDddgRfcLnw==", + "dev": true, + "license": "MIT", + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/preact" + } + }, + "node_modules/@lynx-js/testing-environment": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/@lynx-js/testing-environment/-/testing-environment-0.3.0.tgz", + "integrity": "sha512-a08y6fmEZZHNva/bCs4UT8SavTPFnH8j0wb01gnnC6RA28r0139I5ApjAzaPi+LSaj1pH+A5o41bDts2iV+ulw==", + "dev": true, + "license": "Apache-2.0" + }, + "node_modules/@lynx-js/types": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@lynx-js/types/-/types-4.0.0.tgz", + "integrity": "sha512-FBtBV8wt+9/CAUbTdZwvbhGjJEnyzKLWVpq5gaTHTbhDztbhdP0avZ0nHD6I5HSgAhzYNB9oDrqMt/r6YqBkng==", + "dev": true, + "license": "Apache-2.0", + "peer": true, + "dependencies": { + "csstype": "3.1.3" + } + }, "node_modules/@mdn/browser-compat-data": { "version": "7.3.9", "resolved": "https://registry.npmjs.org/@mdn/browser-compat-data/-/browser-compat-data-7.3.9.tgz", @@ -1566,6 +1598,65 @@ "dev": true, "license": "CC0-1.0" }, + "node_modules/@module-federation/error-codes": { + "version": "0.22.0", + "resolved": "https://registry.npmjs.org/@module-federation/error-codes/-/error-codes-0.22.0.tgz", + "integrity": "sha512-xF9SjnEy7vTdx+xekjPCV5cIHOGCkdn3pIxo9vU7gEZMIw0SvAEdsy6Uh17xaCpm8V0FWvR0SZoK9Ik6jGOaug==", + "dev": true, + "license": "MIT" + }, + "node_modules/@module-federation/runtime": { + "version": "0.22.0", + "resolved": "https://registry.npmjs.org/@module-federation/runtime/-/runtime-0.22.0.tgz", + "integrity": "sha512-38g5iPju2tPC3KHMPxRKmy4k4onNp6ypFPS1eKGsNLUkXgHsPMBFqAjDw96iEcjri91BrahG4XcdyKi97xZzlA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@module-federation/error-codes": "0.22.0", + "@module-federation/runtime-core": "0.22.0", + "@module-federation/sdk": "0.22.0" + } + }, + "node_modules/@module-federation/runtime-core": { + "version": "0.22.0", + "resolved": "https://registry.npmjs.org/@module-federation/runtime-core/-/runtime-core-0.22.0.tgz", + "integrity": "sha512-GR1TcD6/s7zqItfhC87zAp30PqzvceoeDGYTgF3Vx2TXvsfDrhP6Qw9T4vudDQL3uJRne6t7CzdT29YyVxlgIA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@module-federation/error-codes": "0.22.0", + "@module-federation/sdk": "0.22.0" + } + }, + "node_modules/@module-federation/runtime-tools": { + "version": "0.22.0", + "resolved": "https://registry.npmjs.org/@module-federation/runtime-tools/-/runtime-tools-0.22.0.tgz", + "integrity": "sha512-4ScUJ/aUfEernb+4PbLdhM/c60VHl698Gn1gY21m9vyC1Ucn69fPCA1y2EwcCB7IItseRMoNhdcWQnzt/OPCNA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@module-federation/runtime": "0.22.0", + "@module-federation/webpack-bundler-runtime": "0.22.0" + } + }, + "node_modules/@module-federation/sdk": { + "version": "0.22.0", + "resolved": "https://registry.npmjs.org/@module-federation/sdk/-/sdk-0.22.0.tgz", + "integrity": "sha512-x4aFNBKn2KVQRuNVC5A7SnrSCSqyfIWmm1DvubjbO9iKFe7ith5niw8dqSFBekYBg2Fwy+eMg4sEFNVvCAdo6g==", + "dev": true, + "license": "MIT" + }, + "node_modules/@module-federation/webpack-bundler-runtime": { + "version": "0.22.0", + "resolved": "https://registry.npmjs.org/@module-federation/webpack-bundler-runtime/-/webpack-bundler-runtime-0.22.0.tgz", + "integrity": "sha512-aM8gCqXu+/4wBmJtVeMeeMN5guw3chf+2i6HajKtQv7SJfxV/f4IyNQJUeUQu9HfiAZHjqtMV5Lvq/Lvh8LdyA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@module-federation/runtime": "0.22.0", + "@module-federation/sdk": "0.22.0" + } + }, "node_modules/@napi-rs/wasm-runtime": { "version": "1.1.4", "resolved": "https://registry.npmjs.org/@napi-rs/wasm-runtime/-/wasm-runtime-1.1.4.tgz", @@ -2345,13 +2436,14 @@ "license": "MIT" }, "node_modules/@prefresh/core": { - "version": "1.5.3", - "resolved": "https://registry.npmjs.org/@prefresh/core/-/core-1.5.3.tgz", - "integrity": "sha512-nDzxj0tA1/M6APNAWqaxkZ+3sTdPHESa+gol4+Bw7rMc2btWdkLoNH7j9rGhUb8SThC0Vz0VoXtq+U+9azGLHg==", + "version": "1.5.10", + "resolved": "https://registry.npmjs.org/@prefresh/core/-/core-1.5.10.tgz", + "integrity": "sha512-7yPTFbG56sutaFu8krp3B4a200KOFUvrtlllKWRuLjsYXo9UUucHOZRcer+gtgMkFTpv6ob8TGcTwA32bSwa1w==", "dev": true, "license": "MIT", + "peer": true, "peerDependencies": { - "preact": "^10.0.0" + "preact": "^10.0.0 || ^11.0.0-0" } }, "node_modules/@prefresh/rolldown": { @@ -2375,11 +2467,12 @@ } }, "node_modules/@prefresh/utils": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/@prefresh/utils/-/utils-1.2.0.tgz", - "integrity": "sha512-KtC/fZw+oqtwOLUFM9UtiitB0JsVX0zLKNyRTA332sqREqSALIIQQxdUCS1P3xR/jT1e2e8/5rwH6gdcMLEmsQ==", + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@prefresh/utils/-/utils-1.2.1.tgz", + "integrity": "sha512-vq/sIuN5nYfYzvyayXI4C2QkprfNaHUQ9ZX+3xLD8nL3rWyzpxOm1+K7RtMbhd+66QcaISViK7amjnheQ/4WZw==", "dev": true, - "license": "MIT" + "license": "MIT", + "peer": true }, "node_modules/@prefresh/vite": { "version": "3.0.0", @@ -2624,6 +2717,40 @@ "node": "^20.19.0 || >=22.12.0" } }, + "node_modules/@rolldown/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/@rolldown/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/@rolldown/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/@rolldown/binding-win32-arm64-msvc": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/@rolldown/binding-win32-arm64-msvc/-/binding-win32-arm64-msvc-1.0.0.tgz", @@ -2679,6 +2806,261 @@ "node": ">= 8.0.0" } }, + "node_modules/@rsbuild/core": { + "version": "1.7.5", + "resolved": "https://registry.npmjs.org/@rsbuild/core/-/core-1.7.5.tgz", + "integrity": "sha512-i37urpoV4y9NSsGiUOuLdoI42KJ5h4gAZ8EG8Ilmsond3bxoAoOCu7YvC+1pJ7p+r16suVPW8cki891ZKHOoXQ==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "@rspack/core": "~1.7.10", + "@rspack/lite-tapable": "~1.1.0", + "@swc/helpers": "^0.5.20", + "core-js": "~3.47.0", + "jiti": "^2.6.1" + }, + "bin": { + "rsbuild": "bin/rsbuild.js" + }, + "engines": { + "node": ">=18.12.0" + } + }, + "node_modules/@rsbuild/plugin-preact": { + "version": "1.7.2", + "resolved": "https://registry.npmjs.org/@rsbuild/plugin-preact/-/plugin-preact-1.7.2.tgz", + "integrity": "sha512-MHDpgrwmUp0Ktgem6A2Tih3xX7arGuKiUVkh4dDObE/UbWfJhyXcyq0q5gNaWVfqTgbVBHfL9bVy8jhzcY67TA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@prefresh/core": "^1.5.9", + "@prefresh/utils": "^1.2.1", + "@rspack/plugin-preact-refresh": "^1.1.5", + "@swc/plugin-prefresh": "^12.7.0" + }, + "peerDependencies": { + "@rsbuild/core": "^1.0.0 || ^2.0.0-0" + }, + "peerDependenciesMeta": { + "@rsbuild/core": { + "optional": true + } + } + }, + "node_modules/@rspack/binding": { + "version": "1.7.11", + "resolved": "https://registry.npmjs.org/@rspack/binding/-/binding-1.7.11.tgz", + "integrity": "sha512-2MGdy2s2HimsDT444Bp5XnALzNRxuBNc7y0JzyuqKbHBywd4x2NeXyhWXXoxufaCFu5PBc9Qq9jyfjW2Aeh06Q==", + "dev": true, + "license": "MIT", + "optionalDependencies": { + "@rspack/binding-darwin-arm64": "1.7.11", + "@rspack/binding-darwin-x64": "1.7.11", + "@rspack/binding-linux-arm64-gnu": "1.7.11", + "@rspack/binding-linux-arm64-musl": "1.7.11", + "@rspack/binding-linux-x64-gnu": "1.7.11", + "@rspack/binding-linux-x64-musl": "1.7.11", + "@rspack/binding-wasm32-wasi": "1.7.11", + "@rspack/binding-win32-arm64-msvc": "1.7.11", + "@rspack/binding-win32-ia32-msvc": "1.7.11", + "@rspack/binding-win32-x64-msvc": "1.7.11" + } + }, + "node_modules/@rspack/binding-darwin-arm64": { + "version": "1.7.11", + "resolved": "https://registry.npmjs.org/@rspack/binding-darwin-arm64/-/binding-darwin-arm64-1.7.11.tgz", + "integrity": "sha512-oduECiZVqbO5zlVw+q7Vy65sJFth99fWPTyucwvLJJtJkPL5n17Uiql2cYP6Ijn0pkqtf1SXgK8WjiKLG5bIig==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ] + }, + "node_modules/@rspack/binding-darwin-x64": { + "version": "1.7.11", + "resolved": "https://registry.npmjs.org/@rspack/binding-darwin-x64/-/binding-darwin-x64-1.7.11.tgz", + "integrity": "sha512-a1+TtTE9ap6RalgFi7FGIgkJP6O4Vy6ctv+9WGJy53E4kuqHR0RygzaiVxCI/GMc/vBT9vY23hyrpWb3d1vtXA==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ] + }, + "node_modules/@rspack/binding-linux-arm64-gnu": { + "version": "1.7.11", + "resolved": "https://registry.npmjs.org/@rspack/binding-linux-arm64-gnu/-/binding-linux-arm64-gnu-1.7.11.tgz", + "integrity": "sha512-P0QrGRPbTWu6RKWfN0bDtbnEps3rXH0MWIMreZABoUrVmNQKtXR6e73J3ub6a+di5s2+K0M2LJ9Bh2/H4UsDUA==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rspack/binding-linux-arm64-musl": { + "version": "1.7.11", + "resolved": "https://registry.npmjs.org/@rspack/binding-linux-arm64-musl/-/binding-linux-arm64-musl-1.7.11.tgz", + "integrity": "sha512-6ky7R43VMjWwmx3Yx7Jl7faLBBMAgMDt+/bN35RgwjiPgsIByz65EwytUVuW9rikB43BGHvA/eqlnjLrUzNBqw==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rspack/binding-linux-x64-gnu": { + "version": "1.7.11", + "resolved": "https://registry.npmjs.org/@rspack/binding-linux-x64-gnu/-/binding-linux-x64-gnu-1.7.11.tgz", + "integrity": "sha512-cuOJMfCOvb2Wgsry5enXJ3iT1FGUjdPqtGUBVupQlEG4ntSYsQ2PtF4wIDVasR3wdxC5nQbipOrDiN/u6fYsdQ==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rspack/binding-linux-x64-musl": { + "version": "1.7.11", + "resolved": "https://registry.npmjs.org/@rspack/binding-linux-x64-musl/-/binding-linux-x64-musl-1.7.11.tgz", + "integrity": "sha512-CoK37hva4AmHGh3VCsQXmGr40L36m1/AdnN5LEjUX6kx5rEH7/1nEBN6Ii72pejqDVvk9anEROmPDiPw10tpFg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rspack/binding-wasm32-wasi": { + "version": "1.7.11", + "resolved": "https://registry.npmjs.org/@rspack/binding-wasm32-wasi/-/binding-wasm32-wasi-1.7.11.tgz", + "integrity": "sha512-OtrmnPUVJMxjNa3eDMfHyPdtlLRmmp/aIm0fQHlAOATbZvlGm12q7rhPW5BXTu1yh+1rQ1/uqvz+SzKEZXuJaQ==", + "cpu": [ + "wasm32" + ], + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "@napi-rs/wasm-runtime": "1.0.7" + } + }, + "node_modules/@rspack/binding-wasm32-wasi/node_modules/@napi-rs/wasm-runtime": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/@napi-rs/wasm-runtime/-/wasm-runtime-1.0.7.tgz", + "integrity": "sha512-SeDnOO0Tk7Okiq6DbXmmBODgOAb9dp9gjlphokTUxmt8U3liIP1ZsozBahH69j/RJv+Rfs6IwUKHTgQYJ/HBAw==", + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "@emnapi/core": "^1.5.0", + "@emnapi/runtime": "^1.5.0", + "@tybys/wasm-util": "^0.10.1" + } + }, + "node_modules/@rspack/binding-win32-arm64-msvc": { + "version": "1.7.11", + "resolved": "https://registry.npmjs.org/@rspack/binding-win32-arm64-msvc/-/binding-win32-arm64-msvc-1.7.11.tgz", + "integrity": "sha512-lObFW6e5lCWNgTBNwT//yiEDbsxm9QG4BYUojqeXxothuzJ/L6ibXz6+gLMvbOvLGV3nKgkXmx8GvT9WDKR0mA==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@rspack/binding-win32-ia32-msvc": { + "version": "1.7.11", + "resolved": "https://registry.npmjs.org/@rspack/binding-win32-ia32-msvc/-/binding-win32-ia32-msvc-1.7.11.tgz", + "integrity": "sha512-0pYGnZd8PPqNR68zQ8skamqNAXEA1sUfXuAdYcknIIRq2wsbiwFzIc0Pov1cIfHYab37G7sSIPBiOUdOWF5Ivw==", + "cpu": [ + "ia32" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@rspack/binding-win32-x64-msvc": { + "version": "1.7.11", + "resolved": "https://registry.npmjs.org/@rspack/binding-win32-x64-msvc/-/binding-win32-x64-msvc-1.7.11.tgz", + "integrity": "sha512-EeQXayoQk/uBkI3pdoXfQBXNIUrADq56L3s/DFyM2pJeUDrWmhfIw2UFIGkYPTMSCo8F2JcdcGM32FGJrSnU0Q==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@rspack/core": { + "version": "1.7.11", + "resolved": "https://registry.npmjs.org/@rspack/core/-/core-1.7.11.tgz", + "integrity": "sha512-rsD9b+Khmot5DwCMiB3cqTQo53ioPG3M/A7BySu8+0+RS7GCxKm+Z+mtsjtG/vsu4Tn2tcqCdZtA3pgLoJB+ew==", + "dev": true, + "license": "MIT", + "dependencies": { + "@module-federation/runtime-tools": "0.22.0", + "@rspack/binding": "1.7.11", + "@rspack/lite-tapable": "1.1.0" + }, + "engines": { + "node": ">=18.12.0" + }, + "peerDependencies": { + "@swc/helpers": ">=0.5.1" + }, + "peerDependenciesMeta": { + "@swc/helpers": { + "optional": true + } + } + }, + "node_modules/@rspack/lite-tapable": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@rspack/lite-tapable/-/lite-tapable-1.1.0.tgz", + "integrity": "sha512-E2B0JhYFmVAwdDiG14+DW0Di4Ze4Jg10Pc4/lILUrd5DRCaklduz2OvJ5HYQ6G+hd+WTzqQb3QnDNfK4yvAFYw==", + "dev": true, + "license": "MIT" + }, + "node_modules/@rspack/plugin-preact-refresh": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/@rspack/plugin-preact-refresh/-/plugin-preact-refresh-1.1.5.tgz", + "integrity": "sha512-1oXF8ovAF+XoMcZ1qjeJ+l28qXAnKmVulV8Q5/Q1bXDkfMBmvC10O94wpxojcIY/kdMrHIFTfWbUhm0qBcYeGA==", + "dev": true, + "license": "MIT", + "peerDependencies": { + "@prefresh/core": "^1.5.0", + "@prefresh/utils": "^1.2.0" + } + }, "node_modules/@standard-schema/spec": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/@standard-schema/spec/-/spec-1.1.0.tgz", @@ -2686,6 +3068,34 @@ "dev": true, "license": "MIT" }, + "node_modules/@swc/counter": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/@swc/counter/-/counter-0.1.3.tgz", + "integrity": "sha512-e2BR4lsJkkRlKZ/qCHPw9ZaSxc0MVUd7gtbtaB7aMvHeJVYe8sOB8DBZkP2DtISHGSku9sCK6T6cnY0CtXrOCQ==", + "dev": true, + "license": "Apache-2.0" + }, + "node_modules/@swc/helpers": { + "version": "0.5.21", + "resolved": "https://registry.npmjs.org/@swc/helpers/-/helpers-0.5.21.tgz", + "integrity": "sha512-jI/VAmtdjB/RnI8GTnokyX7Ug8c+g+ffD6QRLa6XQewtnGyukKkKSk3wLTM3b5cjt1jNh9x0jfVlagdN2gDKQg==", + "dev": true, + "license": "Apache-2.0", + "peer": true, + "dependencies": { + "tslib": "^2.8.0" + } + }, + "node_modules/@swc/plugin-prefresh": { + "version": "12.10.0", + "resolved": "https://registry.npmjs.org/@swc/plugin-prefresh/-/plugin-prefresh-12.10.0.tgz", + "integrity": "sha512-QGxS9IVAggBEB+6fXJcsHYXDRPg2762J9HqhHVAryoPxT4hObWAX1nyOhp0/kWLN77SGu665DY/xlFdLWiVCDw==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@swc/counter": "^0.1.3" + } + }, "node_modules/@testing-library/dom": { "version": "8.20.1", "resolved": "https://registry.npmjs.org/@testing-library/dom/-/dom-8.20.1.tgz", @@ -2855,6 +3265,44 @@ "dev": true, "license": "MIT" }, + "node_modules/@types/jsdom": { + "version": "21.1.7", + "resolved": "https://registry.npmjs.org/@types/jsdom/-/jsdom-21.1.7.tgz", + "integrity": "sha512-yOriVnggzrnQ3a9OKOCxaVuSug3w3/SbOj5i7VwXWZEyUNl3bLF9V3MfxGbZKuwqJOQyRfqXyROBB1CoZLFWzA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/node": "*", + "@types/tough-cookie": "*", + "parse5": "^7.0.0" + } + }, + "node_modules/@types/jsdom/node_modules/entities": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/entities/-/entities-6.0.1.tgz", + "integrity": "sha512-aN97NXWF6AWBTahfVOIrB/NShkzi5H7F9r1s9mD3cDj4Ko5f2qhhVoYMibXF7GlLveb/D2ioWay8lxI97Ven3g==", + "dev": true, + "license": "BSD-2-Clause", + "engines": { + "node": ">=0.12" + }, + "funding": { + "url": "https://github.com/fb55/entities?sponsor=1" + } + }, + "node_modules/@types/jsdom/node_modules/parse5": { + "version": "7.3.0", + "resolved": "https://registry.npmjs.org/parse5/-/parse5-7.3.0.tgz", + "integrity": "sha512-IInvU7fabl34qmi9gY8XOVxhYyMyuH2xUNpb2q8/Y+7552KlejkRvqvD19nMoUW/uQGGbqNpA6Tufu5FL5BZgw==", + "dev": true, + "license": "MIT", + "dependencies": { + "entities": "^6.0.0" + }, + "funding": { + "url": "https://github.com/inikulin/parse5?sponsor=1" + } + }, "node_modules/@types/json-schema": { "version": "7.0.15", "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.15.tgz", @@ -2869,6 +3317,13 @@ "dev": true, "license": "MIT" }, + "node_modules/@types/mri": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/@types/mri/-/mri-1.1.5.tgz", + "integrity": "sha512-C6NscC1RO9iz1YmvqPlFdbo/q8krKwrvWsciw2MG+pH+WUgxWKv1VFpY/Y2AAZubzUpA4FH6d+FDtroboN9xMw==", + "dev": true, + "license": "MIT" + }, "node_modules/@types/node": { "version": "25.6.2", "resolved": "https://registry.npmjs.org/@types/node/-/node-25.6.2.tgz", @@ -2879,6 +3334,31 @@ "undici-types": "~7.19.0" } }, + "node_modules/@types/prop-types": { + "version": "15.7.15", + "resolved": "https://registry.npmjs.org/@types/prop-types/-/prop-types-15.7.15.tgz", + "integrity": "sha512-F6bEyamV9jKGAFBEmlQnesRPGOQqS2+Uwi0Em15xenOxHaf2hv6L8YCVn3rPdPJOiJfPiCnLIRyvwVaqMY3MIw==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/react": { + "version": "18.3.29", + "resolved": "https://registry.npmjs.org/@types/react/-/react-18.3.29.tgz", + "integrity": "sha512-ch0qJdr2JY0r04NXSprbK6TXOgnaJ1Tz23fm5W+z0/CBah6BSBc3n96h7K9GOtwh0HrilNWHIBzE1Ko4Dcw/Wg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/prop-types": "*", + "csstype": "^3.2.2" + } + }, + "node_modules/@types/react/node_modules/csstype": { + "version": "3.2.3", + "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.2.3.tgz", + "integrity": "sha512-z1HGKcYy2xA8AGQfwrn0PAy+PB7X/GSj3UVJW9qKyn43xWa+gl5nXmU4qqLMRzWVLFC8KusUX8T/0kCiOYpAIQ==", + "dev": true, + "license": "MIT" + }, "node_modules/@types/readdir-glob": { "version": "1.1.5", "resolved": "https://registry.npmjs.org/@types/readdir-glob/-/readdir-glob-1.1.5.tgz", @@ -2900,6 +3380,13 @@ "tar": "*" } }, + "node_modules/@types/tough-cookie": { + "version": "4.0.5", + "resolved": "https://registry.npmjs.org/@types/tough-cookie/-/tough-cookie-4.0.5.tgz", + "integrity": "sha512-/Ad8+nIOV7Rl++6f1BdKxFSMgmoqEoYbHRpPcx3JEfv8VRsQe9Z4mCXeJBzxs7mbHY/XOZZuXlRNfhpVPbs6ZA==", + "dev": true, + "license": "MIT" + }, "node_modules/@vitest/expect": { "version": "4.1.5", "resolved": "https://registry.npmjs.org/@vitest/expect/-/expect-4.1.5.tgz", @@ -3052,6 +3539,7 @@ "integrity": "sha512-UVJyE9MttOsBQIDKw1skb9nAwQuR5wuGD3+82K6JgJlm/Y+KI92oNsMNGZCYdDsVtRHSak0pcV5Dno5+4jh9sw==", "dev": true, "license": "MIT", + "peer": true, "bin": { "acorn": "bin/acorn" }, @@ -3423,6 +3911,7 @@ "integrity": "sha512-riJjyv1/mHLIPX4RwiK+oW9/4c3TEUeORHKefKAKnZ5kyslbN+HXowtbaVEqt4IMUB7OXlfixcs6gsFeo/jhiQ==", "dev": true, "license": "Apache-2.0", + "peer": true, "peerDependencies": { "bare-abort-controller": "*" }, @@ -3736,6 +4225,7 @@ } ], "license": "MIT", + "peer": true, "dependencies": { "baseline-browser-mapping": "^2.10.12", "caniuse-lite": "^1.0.30001782", @@ -4259,6 +4749,18 @@ "dev": true, "license": "MIT" }, + "node_modules/core-js": { + "version": "3.47.0", + "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.47.0.tgz", + "integrity": "sha512-c3Q2VVkGAUyupsjRnaNX6u8Dq2vAdzm9iuPj5FW0fRxzlxgq9Q39MDq10IvmQSpLgHQNyQzQmOo6bgGHmH3NNg==", + "dev": true, + "hasInstallScript": true, + "license": "MIT", + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/core-js" + } + }, "node_modules/core-util-is": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz", @@ -4370,6 +4872,13 @@ "url": "https://github.com/sponsors/fb55" } }, + "node_modules/csstype": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.3.tgz", + "integrity": "sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==", + "dev": true, + "license": "MIT" + }, "node_modules/data-urls": { "version": "7.0.0", "resolved": "https://registry.npmjs.org/data-urls/-/data-urls-7.0.0.tgz", @@ -4833,6 +5342,7 @@ "dev": true, "hasInstallScript": true, "license": "MIT", + "peer": true, "bin": { "esbuild": "bin/esbuild" }, @@ -4910,6 +5420,7 @@ "integrity": "sha512-XoMjdBOwe/esVgEvLmNsD3IRHkm7fbKIUGvrleloJXUZgDHig2IPWNniv+GwjyJXzuNqVjlr5+4yVUZjycJwfQ==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "@eslint-community/eslint-utils": "^4.8.0", "@eslint-community/regexpp": "^4.12.1", @@ -6377,6 +6888,16 @@ "dev": true, "license": "ISC" }, + "node_modules/jiti": { + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/jiti/-/jiti-2.7.0.tgz", + "integrity": "sha512-AC/7JofJvZGrrneWNaEnJeOLUx+JlGt7tNa0wZiRPT4MY1wmfKjt2+6O2p2uz2+skll8OZZmJMNqeke7kKbNgQ==", + "dev": true, + "license": "MIT", + "bin": { + "jiti": "lib/jiti-cli.mjs" + } + }, "node_modules/jose": { "version": "5.9.6", "resolved": "https://registry.npmjs.org/jose/-/jose-5.9.6.tgz", @@ -8021,6 +8542,7 @@ "integrity": "sha512-gQCLc/vWroE8lIpleXtdJhTFDogTdZG9AjMUpVkDf2iTCNwYNWA+u16dL41TqUDJO4gm2IgrcMv3uTpjd4Pwmg==", "dev": true, "license": "MIT", + "peer": true, "funding": { "type": "opencollective", "url": "https://opencollective.com/preact" @@ -8320,6 +8842,7 @@ "integrity": "sha512-yD986aXDESFGS95spT1LAv0jssywP4npMEjmMHyN2/5+eE8qQJUype2AaKkRiLgBgyD0LFlubwAht7VmY8rGoA==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "@oxc-project/types": "=0.129.0", "@rolldown/pluginutils": "1.0.0" @@ -9003,6 +9526,7 @@ "integrity": "sha512-QP88BAKvMam/3NxH6vj2o21R6MjxZUAd6nlwAS/pnGvN9IVLocLHxGYIzFhg6fUQ+5th6P4dv4eW9jX3DSIj7A==", "dev": true, "license": "MIT", + "peer": true, "engines": { "node": ">=12" }, @@ -9098,8 +9622,7 @@ "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz", "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==", "dev": true, - "license": "0BSD", - "optional": true + "license": "0BSD" }, "node_modules/type-check": { "version": "0.4.0", @@ -9301,6 +9824,7 @@ "integrity": "sha512-w2dDofOWv2QB09ZITZBsvKTVAlYvPR4IAmrY/v0ir9KvLs0xybR7i48wxhM1/oyBWO34wPns+bPGw5ZrZqDpZg==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "lightningcss": "^1.32.0", "picomatch": "^4.0.4", diff --git a/package.json b/package.json index bb71d30d..2b75d4e5 100644 --- a/package.json +++ b/package.json @@ -1,24 +1,13 @@ { - "name": "preact-devtools", + "name": "@lynx-js/preact-devtools", "version": "5.0.1", "description": "Preact Devtools Extension", - "main": "dist/preact-devtools.js", - "module": "dist/preact-devtools.module.js", - "types": "types/devtools.d.ts", - "exports": { - ".": { - "types": "./dist/inline/types/shells/shared/panel/panel.d.ts", - "import": "./dist/inline/panel/panel.js" - }, - "./client": { - "types": "./dist/inline/types/shells/shared/installHook.d.ts", - "import": "./dist/inline/client.js" - } - }, + "main": "lib/react-lynx/index.js", + "types": "lib/react-lynx/index.d.ts", "scripts": { "type-check": "tsc --noEmit && tsc -p tsconfig.vitest.json --noEmit", "prebuild": "npm run type-check", - "prepublishOnly": "npm run run build:inline", + "prepublishOnly": "npm run build:lynx", "build": "node tools/build.mjs --browser chrome,edge,firefox,inline && npm run build:inline:types", "build:chrome": "node tools/build.mjs --browser chrome", "build:edge": "node tools/build.mjs --browser edge", @@ -39,25 +28,40 @@ "dev:serve": "vite test-e2e/fixtures --port 8100", "run:chrome": "node tools/build.mjs --browser chrome --debug && mkdir -p ./profiles/chrome && node tools/run-chrome.js", "run:firefox": "node tools/build.mjs --browser firefox --debug && mkdir -p ./profiles/firefox && web-ext run --verbose --devtools --source-dir ./dist/firefox-debug/ --start-url https://preactjs.com --firefox-profile=./profiles/firefox --keep-profile-changes", - "release": "node tools/release.js" + "release": "node tools/release.js", + "build:ldt-plugin": "rsbuild build --config ldt-plugin/rsbuild.config.ts", + "dev:ldt-plugin": "rsbuild dev --config ldt-plugin/rsbuild.config.ts", + "test:lynx": "vitest run --config vitest.config.lynx.ts", + "build:lib": "tsc --project tsconfig.build.json", + "build:lynx": "npm run build:ldt-plugin && npm run build:lib" }, "repository": { "type": "git", - "url": "https://github.com/marvinhagemeister/preact-devtools.git" + "url": "git+https://github.com/lynx-family/preact-devtools.git" + }, + "author": { + "name": "Yiming Li", + "email": "yimingli.cs@gmail.com" }, - "author": "Marvin Hagemeister ", "license": "MIT", "devDependencies": { "@babel/core": "^7.29.0", "@babel/plugin-syntax-typescript": "^7.28.6", "@babel/plugin-transform-react-jsx": "^7.28.6", + "@lynx-js/react": "0.121.2", + "@lynx-js/testing-environment": "0.3.0", + "@lynx-js/types": "^4.0.0", "@playwright/test": "^1.59.1", "@preact/signals": "^2.9.0", "@prefresh/vite": "^3.0.0", + "@rsbuild/core": "^1.4.11", + "@rsbuild/plugin-preact": "^1.5.1", "@testing-library/preact": "^3.2.4", "@types/archiver": "^7.0.0", "@types/babel__core": "^7.20.5", "@types/chrome": "^0.1.42", + "@types/jsdom": "^21.1.7", + "@types/mri": "^1.1.1", "@types/node": "^25.6.2", "@types/tar": "^7.0.87", "archiver": "^8.0.0", @@ -84,13 +88,14 @@ "errorstacks": "^2.4.1", "htm": "^3.1.1" }, - "peerDependencies": { - "preact": "10.x" - }, "files": [ - "types/", - "dist/inline/", + "lib/", + "dist/", "README.md", - "LICENSE" - ] + "LICENSE", + "CHANGELOG.md" + ], + "publishConfig": { + "access": "public" + } } diff --git a/src/adapter/10/internal.ts b/src/adapter/10/internal.ts new file mode 100644 index 00000000..77da95d6 --- /dev/null +++ b/src/adapter/10/internal.ts @@ -0,0 +1,191 @@ +/* eslint-disable */ +// Ported from https://github.com/preactjs/preact/blob/main/src/internal.d.ts + +import * as preact from "preact"; + +export enum HookType { + useState = 1, + useReducer = 2, + useEffect = 3, + useLayoutEffect = 4, + useRef = 5, + useImperativeHandle = 6, + useMemo = 7, + useCallback = 8, + useContext = 9, + useErrorBoundary = 10, + // Not a real hook, but the devtools treat is as such + useDebugvalue = 11, +} + +export interface DevSource { + fileName: string; + lineNumber: number; +} + +export interface ErrorInfo { + componentStack?: string; +} + +export interface Options extends preact.Options { + /** Attach a hook that is invoked before render, mainly to check the arguments. */ + _root?(vnode: ComponentChild, parent: preact.ContainerNode): void; + /** Attach a hook that is invoked before a vnode is diffed. */ + _diff?(vnode: VNode): void; + /** Attach a hook that is invoked after a tree was mounted or was updated. */ + _commit?(vnode: VNode, commitQueue: Component[]): void; + /** Attach a hook that is invoked before a vnode has rendered. */ + _render?(vnode: VNode): void; + /** Attach a hook that is invoked before a hook's state is queried. */ + _hook?(component: Component, index: number, type: HookType): void; + /** Bypass effect execution. Currently only used in devtools for hooks inspection */ + _skipEffects?: boolean; + /** Attach a hook that is invoked after an error is caught in a component but before calling lifecycle hooks */ + _catchError( + error: any, + vnode: VNode, + oldVNode?: VNode | undefined, + errorInfo?: ErrorInfo | undefined, + ): void; + /** Attach a hook that fires when hydration can't find a proper DOM-node to match with */ + _hydrationMismatch?(vnode: VNode, excessDomChildren: PreactElement[]): void; +} + +export type ComponentChild = + | VNode + | string + | number + | boolean + | null + | undefined; +export type ComponentChildren = ComponentChild[] | ComponentChild; + +export interface FunctionComponent

extends preact.FunctionComponent

{ + // Internally, createContext uses `contextType` on a Function component to + // implement the Consumer component + contextType?: PreactContext; + + // Internally, createContext stores a ref to the context object on the Provider + // Function component to help devtools + _contextRef?: PreactContext; + + // Define these properties as undefined on FunctionComponent to get rid of + // some errors in `diff()` + getDerivedStateFromProps?: undefined; + getDerivedStateFromError?: undefined; +} + +export interface ComponentClass

extends preact.ComponentClass

{ + _contextRef?: any; + + // Override public contextType with internal PreactContext type + contextType?: PreactContext; +} + +// Redefine ComponentType using our new internal FunctionComponent interface above +export type ComponentType

= ComponentClass

| FunctionComponent

; + +export interface PreactElement extends preact.ContainerNode { + // Namespace detection + readonly namespaceURI?: string; + // Property used to update Text nodes + data?: CharacterData["data"]; + // Property to set __dangerouslySetInnerHTML + innerHTML?: Element["innerHTML"]; + + // Attribute reading and setting + readonly attributes?: Element["attributes"]; + setAttribute?: Element["setAttribute"]; + removeAttribute?: Element["removeAttribute"]; + + // Event listeners + addEventListener?: Element["addEventListener"]; + removeEventListener?: Element["removeEventListener"]; + + // Setting styles + readonly style?: CSSStyleDeclaration; + + // nextSibling required for inserting nodes + readonly nextSibling: preact.ContainerNode | null; + + // Used to match DOM nodes to VNodes during hydration. Note: doesn't exist + // on Text nodes + readonly localName?: string; + + // Input handling + value?: HTMLInputElement["value"]; + checked?: HTMLInputElement["checked"]; + + // Internal properties + _children?: VNode | null; + /** Event listeners to support event delegation */ + _listeners?: Record void>; +} + +export interface PreactEvent extends Event { + _dispatched?: number; +} + +// We use the `current` property to differentiate between the two kinds of Refs so +// internally we'll define `current` on both to make TypeScript happy +type RefObject = { current: T | null }; +type RefCallback = { + (instance: T | null): void | (() => void); + current: undefined; +}; +type Ref = RefObject | RefCallback; + +export interface VNode

extends preact.VNode

{ + // Redefine type here using our internal ComponentType type, and specify + // string has an undefined `defaultProps` property to make TS happy + type: (string & { defaultProps: undefined }) | ComponentType

; + props: P & { children: ComponentChildren }; + ref?: Ref | null; + _children: Array> | null; + _parent: VNode | null; + _depth: number | null; + /** + * The [first (for Fragments)] DOM child of a VNode + */ + _dom: PreactElement | null; + /** + * The last dom child of a Fragment, or components that return a Fragment + */ + _nextDom: PreactElement | null | undefined; + _component: Component | null; + constructor: undefined; + _original: number; + _index: number; + _flags: number; +} + +export interface Component

extends preact.Component { + // When component is functional component, this is reset to functional component + constructor: ComponentType

; + state: S; // Override Component["state"] to not be readonly for internal use, specifically Hooks + // base?: PreactElement; + + _dirty: boolean; + _force?: boolean; + _renderCallbacks: Array<() => void>; // Only class components + _stateCallbacks: Array<() => void>; // Only class components + _globalContext?: any; + _vnode?: VNode

| null; + _nextState?: S | null; // Only class components + /** Only used in the devtools to later dirty check if state has changed */ + _prevState?: S | null; + /** + * Pointer to the parent dom node. This is only needed for top-level Fragment + * components or array returns. + */ + _parentDom?: PreactElement | null; + // Always read, set only when handling error + _processingException?: Component | null; + // Always read, set only when handling error. This is used to indicate at diffTime to set _processingException + _pendingError?: Component | null; +} + +export interface PreactContext extends preact.Context { + _id: string; + _defaultValue: any; +} diff --git a/src/adapter/10/options.test.tsx b/src/adapter/10/options.test.tsx new file mode 100644 index 00000000..4cd79150 --- /dev/null +++ b/src/adapter/10/options.test.tsx @@ -0,0 +1,172 @@ +import { Fragment, options } from "preact"; +import { expect } from "vitest"; +import { setupOptionsV10 } from "./options"; +import { createRenderer } from "../shared/renderer"; +import { bindingsV10 } from "./bindings"; +import { newProfiler } from "../adapter/profiler"; +import { createIdMappingState } from "../shared/idMapper"; + +describe("setupOptionsV10", () => { + describe("_root hook (root container detection)", () => { + // Regression test for the ReactLynx host where `globalThis.Node` is + // undefined but `preactDevtoolsCtx.Node` is shimmed with the + // `BackgroundSnapshotInstance` constructor (`react-lynx/setup.ts`). + // The `__root` snapshot has no `parentNode`, so the old guard + // `"Node" in globalThis && parent instanceof preactDevtoolsCtx.Node` + // fell through to `parent.parentNode`, set `userRootToContainer` + // to `null`, and `_commit` skipped `roots.set(vnode, dom)`. That + // left `getRootMappings()` permanently empty -- breaking + // `refresh` / `applyFilters` / `root-order-page` even after the + // `document.body` shim landed. + it("treats a preactDevtoolsCtx.Node container as the root container, even with no globalThis.Node and no parentNode", () => { + const hadGlobalNode = Object.prototype.hasOwnProperty.call( + globalThis, + "Node", + ); + const originalGlobalNode = (globalThis as any).Node; + const hadCtxNode = Object.prototype.hasOwnProperty.call( + preactDevtoolsCtx, + "Node", + ); + const originalCtxNode = preactDevtoolsCtx.Node; + + // Reproduce the ReactLynx Background VM environment: + // `globalThis.Node` is missing and the application root has no + // parent. We build a custom Node-like base class so we can + // instantiate parent-less containers (jsdom `Node`s always + // keep a real parent chain and would not exercise the bug). + class FakeBackgroundSnapshotInstance { + childNodes: FakeBackgroundSnapshotInstance[] = []; + parentNode: FakeBackgroundSnapshotInstance | null = null; + nodeName = "ROOT"; + appendChild(child: FakeBackgroundSnapshotInstance) { + child.parentNode = this; + this.childNodes.push(child); + return child; + } + insertBefore( + child: FakeBackgroundSnapshotInstance, + _ref: FakeBackgroundSnapshotInstance | null, + ) { + return this.appendChild(child); + } + removeChild(child: FakeBackgroundSnapshotInstance) { + const idx = this.childNodes.indexOf(child); + if (idx >= 0) this.childNodes.splice(idx, 1); + child.parentNode = null; + return child; + } + } + + preactDevtoolsCtx.Node = FakeBackgroundSnapshotInstance as any; + delete (globalThis as any).Node; + + try { + const fakeRoot = new FakeBackgroundSnapshotInstance(); + + // We do not run a full Preact mount here because Preact 10 + // expects a real DOM-ish node with the browser createElement + // surface. Instead we drive the option hooks directly with + // shapes that match what Preact would pass: `_root` reports + // the container, then `_commit` reports the matching root + // VNode. + const events: Array<[string, unknown]> = []; + const roots = new Map(); + const renderer = createRenderer( + { + send: (type, data) => { + events.push([type, data]); + }, + listen: () => {}, + listenToPage: () => {}, + }, + { Fragment: Fragment as any }, + options, + { hooks: false, renderReasons: false }, + newProfiler(), + { type: new Set(), regex: [] }, + createIdMappingState(1, bindingsV10.getInstance), + bindingsV10, + roots, + "", + ); + const destroy = setupOptionsV10(options, renderer, roots, { + Fragment: Fragment as any, + }); + + try { + const o = options as any; + + // Reproduce the call sequence Preact 10 emits during a + // successful mount. `_root` is invoked with the *user* + // vnode and the container DOM (`render(, container)`), + // then `_commit` is invoked with the synthetic Fragment + // root that wraps the user vnode. + const childVNode: any = { + type: "div", + props: { children: null }, + _children: [], + __k: [], + _parent: null, + __: null, + _component: null, + __c: null, + _dom: new FakeBackgroundSnapshotInstance(), + __e: undefined, + }; + childVNode.__e = childVNode._dom; + + const rootVNode: any = { + type: Fragment, + props: { children: childVNode }, + _children: [childVNode], + __k: [childVNode], + _parent: null, + __: null, + _component: null, + __c: null, + }; + childVNode._parent = rootVNode; + childVNode.__ = rootVNode; + + (o._root || o.__).call(o, childVNode, fakeRoot); + (o._commit || o.__c).call(o, rootVNode, []); + + expect(roots.size).to.equal( + 1, + "the root vnode must be tracked in `roots` after commit", + ); + + const mappings = renderer.getRootMappings(); + expect(mappings.length).to.equal( + 1, + "`getRootMappings` is what `applyFilters` and `root-order-page` consume", + ); + expect(mappings[0].node).to.equal( + fakeRoot, + "the parentless container must be used as-is, not its (null) parentNode", + ); + } finally { + destroy(); + } + } finally { + // Restore both globals exactly to their pre-test shape. A + // plain reassignment would leave an own `Node` property set + // to `undefined` when the property never existed (the + // ReactLynx test setup is exactly that case), which would + // make `"Node" in globalThis` true for subsequent tests and + // break `instanceof Node` callers. + if (hadGlobalNode) { + (globalThis as any).Node = originalGlobalNode; + } else { + delete (globalThis as any).Node; + } + if (hadCtxNode) { + preactDevtoolsCtx.Node = originalCtxNode; + } else { + delete (preactDevtoolsCtx as any).Node; + } + } + }); + }); +}); diff --git a/src/adapter/10/options.ts b/src/adapter/10/options.ts index 1cbcf533..f7b37d77 100644 --- a/src/adapter/10/options.ts +++ b/src/adapter/10/options.ts @@ -75,7 +75,7 @@ export function setupOptionsV10( // Make sure that we are always the first `option._hook` to be called. // This is necessary to ensure that our callstack remains consistent. - // Othwerwise we'll end up with an unknown number of frames in-between + // Otherwise we'll end up with an unknown number of frames in-between // the called hook and `options._hook`. This will lead to wrongly // parsed hooks. let hasHookFirst = false; @@ -142,7 +142,7 @@ export function setupOptionsV10( } if (vnode.type !== null) { - timings.start.set(vnode, performance.now()); + timings.start.set(vnode, preactDevtoolsCtx.performance.now()); } if (prevBeforeDiff != null) prevBeforeDiff(vnode); @@ -174,7 +174,7 @@ export function setupOptionsV10( } if (vnode.type !== null) { - timings.end.set(vnode, performance.now()); + timings.end.set(vnode, preactDevtoolsCtx.performance.now()); } if (prevAfterDiff) prevAfterDiff(vnode); @@ -208,8 +208,18 @@ export function setupOptionsV10( } else { // Some islands based frameworks use a virtual container node // instead of an actual DOM node. + // + // On a browser host `preactDevtoolsCtx.Node === window.Node`. On + // ReactLynx, `setup.ts` shims `preactDevtoolsCtx.Node` with the + // `BackgroundSnapshotInstance` constructor (`__root.__proto__.constructor`) + // so the shim is always defined when this hook fires. Guarding on + // `"Node" in globalThis` would always be false in the ReactLynx + // Background VM, forcing the islands fallback below and producing + // `treeParent = parent.parentNode === null` for the top-level + // `__root`. That kept `roots` empty and broke `refresh` / + // `getRootMappings`. Compare against the shim instead. const treeParent = - "Node" in globalThis && parent instanceof Node + preactDevtoolsCtx.Node && parent instanceof preactDevtoolsCtx.Node ? parent : (parent as any).parentNode; userRootToContainer.set(vnode, treeParent); diff --git a/src/adapter/11/options.ts b/src/adapter/11/options.ts index 87473020..40c254b0 100644 --- a/src/adapter/11/options.ts +++ b/src/adapter/11/options.ts @@ -134,7 +134,7 @@ export function setupOptionsV11( // Make sure that we are always the first `option._hook` to be called. // This is necessary to ensure that our callstack remains consistent. - // Othwerwise we'll end up with an unknown number of frames in-between + // Otherwise we'll end up with an unknown number of frames in-between // the called hook and `options._hook`. This will lead to wrongly // parsed hooks. setTimeout(() => { diff --git a/src/adapter/adapter/adapter.test.ts b/src/adapter/adapter/adapter.test.ts new file mode 100644 index 00000000..12b8eaef --- /dev/null +++ b/src/adapter/adapter/adapter.test.ts @@ -0,0 +1,174 @@ +import { expect, vi } from "vitest"; +import { createAdapter } from "./adapter"; +import { newProfiler } from "./profiler"; +import { PortPageHook } from "./port"; +import { Renderer } from "../renderer"; +import { RootData } from "../shared/utils"; +import { DevtoolEvents } from "../hook"; + +type Listener = (data: any) => void; + +interface FakePort { + port: PortPageHook; + pageListeners: Map; + devtoolListeners: Map; + sent: Array<{ type: string; data: any }>; +} + +function createFakePort(): FakePort { + const pageListeners = new Map(); + const devtoolListeners = new Map(); + const sent: Array<{ type: string; data: any }> = []; + + const port: PortPageHook = { + send: (type, message) => { + sent.push({ type, data: message }); + }, + listen: (type, callback) => { + const list = devtoolListeners.get(type) ?? []; + list.push(callback as Listener); + devtoolListeners.set(type, list); + }, + listenToPage: (type, callback) => { + const list = pageListeners.get(type) ?? []; + list.push(callback as Listener); + pageListeners.set(type, list); + }, + }; + + return { port, pageListeners, devtoolListeners, sent }; +} + +function fireFromPage( + fake: FakePort, + type: K, + data: DevtoolEvents[K], +): void { + for (const cb of fake.pageListeners.get(type) ?? []) { + cb(data); + } +} + +function fireFromDevtools( + fake: FakePort, + type: K, + data: DevtoolEvents[K], +): void { + for (const cb of fake.devtoolListeners.get(type) ?? []) { + cb(data); + } +} + +function makeRenderer(rootMappings: RootData[]): Renderer { + // Only `getRootMappings` is exercised by the `root-order-page` listener; the + // rest of the Renderer surface is intentionally left unimplemented to keep + // the regression test focused on the body-of-undefined crash path. + return { + refresh: () => {}, + getVNodeById: () => null, + getUniqueListIdById: () => null, + getUniqueListIdBySnapshotId: () => null, + getIdByUniqueId: () => null, + getDisplayName: () => "", + findDomForVNode: () => null, + findVNodeIdForDom: () => -1, + applyFilters: () => {}, + log: () => {}, + inspect: () => null, + update: () => {}, + onCommit: () => {}, + onUnmount: () => {}, + getRootMappings: () => rootMappings, + }; +} + +describe("createAdapter", () => { + describe("root-order-page", () => { + it("reads document.body from preactDevtoolsCtx, not the global scope", () => { + // Regression test for the ReactLynx host where `globalThis.document` + // is undefined. The adapter aliases `window = preactDevtoolsCtx` + // (adapter.ts) so every DOM access must go through `window.*`. A + // stray bare `document.body` reference used to crash here with + // `TypeError: cannot read property 'body' of undefined` on the + // `refresh` -> `applyFilters` -> `port.send("root-order-page")` + // path. + const fakeBody = window.document.createElement("div"); + const child = window.document.createElement("div"); + fakeBody.appendChild(child); + + const originalCtxDocument = preactDevtoolsCtx.document; + const originalGlobalDocument = (globalThis as any).document; + (preactDevtoolsCtx as any).document = { body: fakeBody }; + + // Simulate the ReactLynx Background VM, where the bundler-resolved + // `document` global does not exist. Without the fix this is what + // makes `document.body` throw at runtime. + delete (globalThis as any).document; + + try { + const fake = createFakePort(); + const renderer = makeRenderer([{ id: 42, node: child }]); + const renderers = new Map([[1, renderer]]); + + createAdapter(fake.port, newProfiler(), renderers); + + expect(() => + fireFromPage(fake, "root-order-page", null), + ).not.to.throw(); + + const sortMessages = fake.sent.filter(m => m.type === "root-order"); + expect(sortMessages.length).to.equal(1); + expect(sortMessages[0].data).to.deep.equal([42]); + } finally { + (preactDevtoolsCtx as any).document = originalCtxDocument; + (globalThis as any).document = originalGlobalDocument; + } + }); + }); + + describe("refresh", () => { + it("re-sends attach so a late-connecting panel re-learns supports, then refreshes", () => { + // A panel that connected after mount missed the initial `attach`, so it + // never learned `supportsHooks`. The `refresh` handler must re-send + // `attach` (in addition to re-walking the tree) so hooks inspection works + // without a full page reload. + const fake = createFakePort(); + const refresh = vi.fn(); + const renderer: Renderer = { ...makeRenderer([]), refresh }; + const renderers = new Map([[1, renderer]]); + const rendererSupports = new Map([ + [1, { hooks: true, renderReasons: true, profiling: false }], + ]); + + createAdapter(fake.port, newProfiler(), renderers, rendererSupports); + + fireFromDevtools(fake, "refresh", null); + + const attaches = fake.sent.filter(m => m.type === "attach"); + expect(attaches.length).to.equal(1); + expect(attaches[0].data).to.deep.equal({ + id: 1, + supportsProfiling: false, + supportsRenderReasons: true, + supportsHooks: true, + }); + expect(refresh).toHaveBeenCalledTimes(1); + }); + + it("sends no attach when supports are unknown, but still refreshes", () => { + const fake = createFakePort(); + const refresh = vi.fn(); + const renderers = new Map([ + [1, { ...makeRenderer([]), refresh }], + ]); + + // No `rendererSupports` passed (back-compat default). + createAdapter(fake.port, newProfiler(), renderers); + + fireFromDevtools(fake, "refresh", null); + + expect(fake.sent.filter(m => m.type === "attach").length).to.equal(0); + expect(refresh).toHaveBeenCalledTimes(1); + }); + }); +}); diff --git a/src/adapter/adapter/adapter.ts b/src/adapter/adapter/adapter.ts index 9a3df541..c154235a 100644 --- a/src/adapter/adapter/adapter.ts +++ b/src/adapter/adapter/adapter.ts @@ -1,7 +1,7 @@ import { DevtoolEvents, DevtoolsHook } from "../hook"; import { getRendererByVNodeId, Renderer } from "../renderer"; import { copyToClipboard } from "../../shells/shared/utils"; -import { createPicker } from "./picker"; +// import { createPicker } from "./picker"; import { ID } from "../../view/store/types"; import { createHightlighter } from "./highlight"; import { parseFilters } from "./filter"; @@ -41,13 +41,26 @@ export interface InspectData { suspended: boolean; /** Preact version that rendered this VNode */ version: string; + __source: Source; +} + +export interface Source { + fileName: string; + lineNumber: number; + columnNumber: number; } export function createAdapter( port: PortPageHook, profiler: ProfilerState, renderers: Map, + rendererSupports: Map< + number, + { renderReasons?: boolean; hooks?: boolean; profiling?: boolean } + > = new Map(), ) { + const window = preactDevtoolsCtx; + const { listen, send, listenToPage } = port; const forAll = (fn: (renderer: Renderer) => void) => { @@ -56,7 +69,7 @@ export function createAdapter( } }; - const highlight = createHightlighter(id => + const highlight = createHightlighter(renderers, port, id => getRendererByVNodeId(renderers, id), ); @@ -67,24 +80,24 @@ export function createAdapter( } }; - const picker = createPicker( - window, - renderers, - id => { - highlight.highlight(id); - if (id > -1) { - inspect(id); - send("select-node", id); - } - }, - () => { - send("stop-picker", null); - highlight.destroy(); - }, - ); - - listen("start-picker", () => picker.start()); - listen("stop-picker", () => picker.stop()); + // const picker = createPicker( + // window, + // renderers, + // id => { + // highlight.highlight(id); + // if (id > -1) { + // inspect(id); + // send("select-node", id); + // } + // }, + // () => { + // send("stop-picker", null); + // highlight.destroy(); + // }, + // ); + + // listen("start-picker", () => picker.start()); + // listen("stop-picker", () => picker.stop()); listen("copy", value => { try { @@ -101,7 +114,7 @@ export function createAdapter( const res = getRendererByVNodeId(renderers, id)?.findDomForVNode(id); if (res && res.length > 0) { - (window as any).__PREACT_DEVTOOLS__.$0 = res[0]; + (globalThis as any).__PREACT_DEVTOOLS__.$0 = res[0]; } inspect(id); }); @@ -115,6 +128,18 @@ export function createAdapter( else highlight.highlight(id); }); + listen("element-picked", ({ uniqueId }) => { + if (uniqueId == null) return; + const rendererList = [...renderers.values()]; + // Unlike Chrome extension, we only have one renderer here + const id = rendererList[0].getIdByUniqueId(uniqueId); + if (id != null) { + port.send("element-picked-vnode-id", { + id, + }); + } + }); + listen("disconnect", () => { // The devtools disconnected, clear any stateful // ui elements we may be displaying. @@ -142,7 +167,11 @@ export function createAdapter( roots = roots.concat(m); }); - const sorted = sortRoots(document.body, roots); + // `window === preactDevtoolsCtx`, see top of `createAdapter`. The + // ReactLynx host shims `document.body` with the background root + // snapshot (see `react-lynx/setup.ts`), which is structurally + // compatible with the small subset of `Node` used by `sortRoots`. + const sorted = sortRoots(window.document.body as unknown as Node, roots); send("root-order", sorted); }); @@ -171,7 +200,25 @@ export function createAdapter( forAll(r => r.applyFilters(filters)); }); - listen("refresh", () => forAll(r => r.refresh?.())); + listen("refresh", () => { + // A panel that connected after mount never received the initial `attach`, + // so it doesn't know which features (e.g. hooks) are supported. The browser + // shell replays this from the content-script's buffered queue; the Lynx + // bridge has no such buffer, so re-send `attach` (idempotent) before + // re-walking the tree. + for (const id of renderers.keys()) { + const supports = rendererSupports.get(id); + if (supports) { + send("attach", { + id, + supportsProfiling: !!supports.profiling, + supportsRenderReasons: !!supports.renderReasons, + supportsHooks: !!supports.hooks, + }); + } + } + forAll(r => r.refresh?.()); + }); // Profiler listen("start-profiling", options => { @@ -185,7 +232,7 @@ export function createAdapter( window.localStorage.setItem(PROFILE_RELOAD, JSON.stringify(options)); try { - window.location.reload(); + lynx.reload({}, () => {}); } catch (err) { // eslint-disable-next-line no-console console.error("Preact Devtools was not able to reload the current page."); @@ -205,7 +252,7 @@ export function createAdapter( window.localStorage.setItem(STATS_RELOAD, "true"); try { - window.location.reload(); + lynx.reload({}, () => {}); } catch (err) { // eslint-disable-next-line no-console console.error("Preact Devtools was not able to reload the current page."); diff --git a/src/adapter/adapter/highlight.ts b/src/adapter/adapter/highlight.ts index f9cce9c5..da3fb30c 100644 --- a/src/adapter/adapter/highlight.ts +++ b/src/adapter/adapter/highlight.ts @@ -1,20 +1,23 @@ import { Renderer } from "../renderer"; -import { render, h } from "preact"; -import { getNearestElement, measureNode, mergeMeasure } from "../dom"; +// import { render, h } from "preact"; +// import { getNearestElement, measureNode, mergeMeasure } from "../dom"; import { ID } from "../../view/store/types"; -import { Highlighter, style } from "../../view/components/Highlighter"; +// import { Highlighter, style } from "../../view/components/Highlighter"; +import { PortPageHook } from "./port"; /** * This module is responsible for displaying the transparent element overlay * inside the user's web page. */ export function createHightlighter( + renderers: Map, + port: PortPageHook, getRendererByVnodeId: (id: ID) => Renderer | null, ) { /** * Reference to the DOM element that we'll render the selection highlighter * into. We'll cache it so that we don't unnecessarily re-create it when the - * hover state changes. We only destroy this elment once the user stops + * hover state changes. We only destroy this element once the user stops * hovering a node in the tree. */ let highlightRef: HTMLDivElement | null = null; @@ -39,77 +42,94 @@ export function createHightlighter( const dom = renderer.findDomForVNode(id); if (dom != null) { - if (highlightRef == null) { - highlightRef = document.createElement("div"); - highlightRef.id = "preact-devtools-highlighter"; - highlightRef.className = style.outerContainer; + // if (highlightRef == null) { + // highlightRef = document.createElement("div"); + // highlightRef.id = "preact-devtools-highlighter"; + // highlightRef.className = style.outerContainer; - document.body.appendChild(highlightRef); - } + // document.body.appendChild(highlightRef); + // } - // eslint-disable-next-line prefer-const - let [first, last] = dom; + // eslint-disable-next-line prefer-const, @typescript-eslint/no-unused-vars + let [first, _last] = dom; if (first === null) return; - const node = getNearestElement(first); - const nodeEnd = last ? getNearestElement(last) : null; - if (node != null) { - let label = renderer.getDisplayName(vnode); - - // Account for HOCs - const lastOpenIdx = label.lastIndexOf("("); - const firstCloseIdx = label.indexOf(")"); - if (lastOpenIdx > -1 && lastOpenIdx < firstCloseIdx) { - label = label.slice(lastOpenIdx + 1, firstCloseIdx) || "Anonymous"; - } - - let size = measureNode(node); - if (nodeEnd !== null) { - const sizeLast = measureNode(nodeEnd); - size = mergeMeasure(size, sizeLast); - } - - // If the current DOM is inside an iframe, the position data - // is relative to the content inside the iframe. We need to - // add the position of the iframe in the parent document to - // display the highlight overlay at the correct place. - if (document !== first?.ownerDocument) { - let iframe; - const iframes = Array.from(document.querySelectorAll("iframe")); - for (let i = 0; i < iframes.length; i++) { - const w = iframes[i].contentWindow; - if (w && w.document === first?.ownerDocument) { - iframe = iframes[i]; - break; - } - } - - if (iframe) { - const sizeIframe = measureNode(iframe); - size.top += sizeIframe.top; - size.left += sizeIframe.left; - } - } - - let height = size.height; - let width = size.width; - if (size.boxSizing === "border-box") { - height += size.marginTop + size.marginBottom; - width += size.marginLeft + size.marginRight; - } - - render( - h(Highlighter, { - label, - ...size, - top: size.top - size.marginTop, - left: size.left - size.marginLeft, - height, - width, - }), - highlightRef, - ); + // @ts-expect-error This is ReactLynx BackgroundSnapshotInstance + const snapshotId = first.__id; + const rendererList = [...renderers.values()]; + // Unlike Chrome extension, we only have one renderer here + const id = rendererList[0].getUniqueListIdBySnapshotId(snapshotId); + if (id?.[0] == null) { + // It is as expected when list-item that is not in the viewport + // since lynx uses a virtual list, so it is not rendered in to main-thread + // but the vdom exists in the background thread + // TODO: can we recognize this case and only warn on non-virtual list situations + // console.warn("Failed to get unique id for snapshot", snapshotId); + return; } + port.send("preact-devtools-highlight", { + snapshotId, + uniqueId: id[0], + }); + + // const nodeEnd = last ? getNearestElement(last) : null; + // if (node != null) { + // let label = renderer.getDisplayName(vnode); + + // // Account for HOCs + // const lastOpenIdx = label.lastIndexOf("("); + // const firstCloseIdx = label.indexOf(")"); + // if (lastOpenIdx > -1 && lastOpenIdx < firstCloseIdx) { + // label = label.slice(lastOpenIdx + 1, firstCloseIdx) || "Anonymous"; + // } + + // let size = measureNode(node); + // if (nodeEnd !== null) { + // const sizeLast = measureNode(nodeEnd); + // size = mergeMeasure(size, sizeLast); + // } + + // // If the current DOM is inside an iframe, the position data + // // is relative to the content inside the iframe. We need to + // // add the position of the iframe in the parent document to + // // display the highlight overlay at the correct place. + // if (document !== first?.ownerDocument) { + // let iframe; + // const iframes = Array.from(document.querySelectorAll("iframe")); + // for (let i = 0; i < iframes.length; i++) { + // const w = iframes[i].contentWindow; + // if (w && w.document === first?.ownerDocument) { + // iframe = iframes[i]; + // break; + // } + // } + + // if (iframe) { + // const sizeIframe = measureNode(iframe); + // size.top += sizeIframe.top; + // size.left += sizeIframe.left; + // } + // } + + // let height = size.height; + // let width = size.width; + // if (size.boxSizing === "border-box") { + // height += size.marginTop + size.marginBottom; + // width += size.marginLeft + size.marginRight; + // } + + // render( + // h(Highlighter, { + // label, + // ...size, + // top: size.top - size.marginTop, + // left: size.left - size.marginLeft, + // height, + // width, + // }), + // highlightRef, + // ); + // } } } diff --git a/src/adapter/adapter/port.ts b/src/adapter/adapter/port.ts index 1b6c6230..7efc1f64 100644 --- a/src/adapter/adapter/port.ts +++ b/src/adapter/adapter/port.ts @@ -9,9 +9,9 @@ export interface BaseEvent { export function listenToDevtools< K extends keyof DevtoolEvents, T extends DevtoolEvents[K], ->(ctx: Window, type: K, callback: (message: T) => void) { +>(ctx: PreactDevtoolsCtx, type: K, callback: (message: T) => void) { ctx.addEventListener("message", e => { - if (e.source === window && e.data.source === DevtoolsToClient) { + if (e.source === ctx && e.data.source === DevtoolsToClient) { const data = e.data; if (data.type === type) callback(data.data); } @@ -21,9 +21,9 @@ export function listenToDevtools< export function listenToPageHook< K extends keyof DevtoolEvents, T extends DevtoolEvents[K], ->(ctx: Window, type: K, callback: (message: T) => void) { +>(ctx: PreactDevtoolsCtx, type: K, callback: (message: T) => void) { ctx.addEventListener("message", e => { - if (e.source === window && e.data.source === PageHookName) { + if (e.source === ctx && e.data.source === PageHookName) { const data = e.data; if (data.type === type) callback(data.data); } @@ -31,7 +31,7 @@ export function listenToPageHook< } export function sendToDevtools( - ctx: Window, + ctx: PreactDevtoolsCtx, type: K, data: DevtoolEvents[K], ) { @@ -64,7 +64,7 @@ export interface PortPageHook { ) => void; } -export function createPortForHook(ctx: Window): PortPageHook { +export function createPortForHook(ctx: PreactDevtoolsCtx): PortPageHook { return { send: (type, message) => sendToDevtools(ctx, type, message), listen: (type, callback) => listenToDevtools(ctx, type, callback), diff --git a/src/adapter/debug.test.ts b/src/adapter/debug.test.ts index c4f8a58e..9be82367 100644 --- a/src/adapter/debug.test.ts +++ b/src/adapter/debug.test.ts @@ -1,6 +1,6 @@ import { expect } from "vitest"; import { fromSnapshot, toStringTable } from "./debug"; -import { MsgTypes } from "./protocol/events"; +import { MsgTypes } from "./protocol/events-types"; import { DevNodeType } from "../view/store/types"; describe("debug", () => { diff --git a/src/adapter/debug.ts b/src/adapter/debug.ts index e6df8074..f77f06c8 100644 --- a/src/adapter/debug.ts +++ b/src/adapter/debug.ts @@ -1,4 +1,4 @@ -import { MsgTypes } from "./protocol/events"; +import { MsgTypes } from "./protocol/events-types"; import { parseTable, flushTable } from "./protocol/string-table"; import { ID, DevNodeType } from "../view/store/types"; import { renderReasonToStr } from "./shared/renderReasons"; diff --git a/src/adapter/hook.ts b/src/adapter/hook.ts index 126da106..66ee42a0 100644 --- a/src/adapter/hook.ts +++ b/src/adapter/hook.ts @@ -65,6 +65,9 @@ export interface DevtoolEvents { "root-order": number[]; operation: number[]; operation_v2: number[]; + "preact-devtools-highlight": { snapshotId: number; uniqueId: number }; + "element-picked": { uniqueId: number }; + "element-picked-vnode-id": { id: number }; } export type EmitFn = ( name: K, @@ -95,8 +98,16 @@ export interface DevtoolsHook { * is the entrypoint where everything begins. */ export function createHook(port: PortPageHook): DevtoolsHook { + const window = preactDevtoolsCtx; + const { listen, send } = port; const renderers = new Map(); + // Track each renderer's supported features so we can re-send `attach` when a + // panel connects after mount (see the `refresh` handler in `adapter.ts`). + const rendererSupports = new Map< + number, + { renderReasons?: boolean; hooks?: boolean; profiling?: boolean } + >(); let uid = 0; let status: "connected" | "pending" | "disconnected" = "disconnected"; @@ -105,7 +116,7 @@ export function createHook(port: PortPageHook): DevtoolsHook { // Lazily init the adapter when a renderer is attached const init = () => { - createAdapter(port, profiler, renderers); + createAdapter(port, profiler, renderers, rendererSupports); status = "pending"; listen("init", () => { @@ -123,6 +134,7 @@ export function createHook(port: PortPageHook): DevtoolsHook { } renderers.set(++uid, renderer); + rendererSupports.set(uid, supports); // Content Script is likely not ready at this point, so don't // flush any events here and politely request it to initialize @@ -154,11 +166,17 @@ export function createHook(port: PortPageHook): DevtoolsHook { }; // Delete all roots when the current frame is closed - window.addEventListener("pagehide", () => { - renderers.forEach(r => { - if (r.clear) r.clear(); - }); - }); + // @ts-ignore + const tt = lynxCoreInject.tt; + if (tt.callDestroyLifetimeFun) { + const oldCallDestroyLifetimeFun = tt.callDestroyLifetimeFun; + tt.callDestroyLifetimeFun = () => { + oldCallDestroyLifetimeFun(); + renderers.forEach(r => { + if (r.clear) r.clear(); + }); + }; + } // TODO: This should be added to codesandbox itself. I'm not too // happy with having site specific code in the extension, but @@ -229,6 +247,23 @@ export function createHook(port: PortPageHook): DevtoolsHook { namespace, bindingsV10.getInstance, ); + lynx + .getJSModule("GlobalEventEmitter") + .removeAllListeners("onBackgroundSnapshotInstanceUpdateId"); + lynx.getJSModule("GlobalEventEmitter").addListener( + "onBackgroundSnapshotInstanceUpdateId", + // @ts-expect-error + ({ + oldId, + newId, + }: { + backgroundSnapshotInstance: any; + oldId: number; + newId: number; + }) => { + idMapper.updateSnapshotId(oldId, newId); + }, + ); const renderer = createRenderer( port, diff --git a/src/adapter/protocol/events-react-lynx.ts b/src/adapter/protocol/events-react-lynx.ts new file mode 100644 index 00000000..c2107d55 --- /dev/null +++ b/src/adapter/protocol/events-react-lynx.ts @@ -0,0 +1,28 @@ +// This is extracted to avoid signals to be bundled with react-lynx + +import { Commit, MsgTypes } from "./events-types"; +import { flushTable } from "./string-table"; +import { stats2ops } from "../shared/stats"; + +/** + * Collect all relevant data from a commit and convert it to a message + * the detools can understand + */ +export function flush(commit: Commit) { + const { rootId, unmountIds, operations, strings, stats } = commit; + if (unmountIds.length === 0 && operations.length === 0) return; + + const msg = [rootId, ...flushTable(strings)]; + if (unmountIds.length > 0) { + msg.push(MsgTypes.REMOVE_VNODE, unmountIds.length, ...unmountIds); + } + + for (let i = 0; i < operations.length; i++) { + msg.push(operations[i]); + } + if (stats !== null) { + stats2ops(stats, msg); + } + + return { type: "operation_v2", data: msg }; +} diff --git a/src/adapter/protocol/events-types.ts b/src/adapter/protocol/events-types.ts new file mode 100644 index 00000000..15b92d44 --- /dev/null +++ b/src/adapter/protocol/events-types.ts @@ -0,0 +1,78 @@ +// This is extracted to avoid signals to be bundled with react-lynx + +import type { StringTable } from "./string-table"; +import type { Stats } from "../shared/stats"; + +export enum MsgTypes { + ADD_ROOT = 1, + ADD_VNODE = 2, // Used by Preact 10.1.x + REMOVE_VNODE = 3, + UPDATE_VNODE_TIMINGS = 4, // Used by Preact 10.1.x + REORDER_CHILDREN = 5, + RENDER_REASON = 6, + COMMIT_STATS = 7, + HOC_NODES = 8, +} + +// Event Examples: +// +// ADD_ROOT +// id +// +// ADD_VNODE +// id +// type +// parent +// owner +// name +// key +// +// ADD_VNODE_V2 +// id +// type +// parent +// owner +// name +// key +// startTime +// duration +// +// REMOVE_VNODE +// id +// +// UPDATE_VNODE_TIMINGS +// id +// duration +// +// UPDATE_VNODE_TIMINGS_V2 +// id +// startTime +// duration +// +// REORDER_CHILDREN +// id +// childrenCount +// childId +// childId +// ... +// +// RENDER_REASON +// id +// type +// stringsCount +// ...stringIds +// +// COMMIT_STATS -> Check `stats.ts` +// +// HOC_NODES +// vnodeId +// stringsCounts +// ...stringIds +// +export interface Commit { + rootId: number; + strings: StringTable; + unmountIds: number[]; + operations: number[]; + stats: Stats | null; +} diff --git a/src/adapter/protocol/events.test.ts b/src/adapter/protocol/events.test.ts index 7faa3eac..f39b8ca9 100644 --- a/src/adapter/protocol/events.test.ts +++ b/src/adapter/protocol/events.test.ts @@ -233,6 +233,11 @@ describe("applyEvent", () => { canSuspend: false, suspended: false, version: "", + __source: { + fileName: "foo.tsx", + lineNumber: 12, + columnNumber: 10, + }, }; const data = fromSnapshot([ @@ -262,6 +267,11 @@ describe("applyEvent", () => { canSuspend: false, suspended: false, version: "", + __source: { + fileName: "foo.tsx", + lineNumber: 12, + columnNumber: 10, + }, }; store.sidebar.props.uncollapsed.value = ["a", "b", "c"]; diff --git a/src/adapter/protocol/events.ts b/src/adapter/protocol/events.ts index d5f1cf13..5353eef5 100644 --- a/src/adapter/protocol/events.ts +++ b/src/adapter/protocol/events.ts @@ -1,108 +1,12 @@ -import { flushTable, StringTable } from "./string-table"; import { Store } from "../../view/store/types"; -import { batch } from "@preact/signals"; +// import { batch } from "@preact/signals-core"; import { recordProfilerCommit } from "../../view/components/profiler/data/commits"; import { ops2Tree } from "./operations"; import { applyOperationsV1 } from "./legacy/operationsV1"; -import { OperationInfo, Stats, stats2ops } from "../shared/stats"; +import { OperationInfo } from "../shared/stats"; import { DevtoolEvents } from "../hook"; -export enum MsgTypes { - ADD_ROOT = 1, - ADD_VNODE = 2, // Used by Preact 10.1.x - REMOVE_VNODE = 3, - UPDATE_VNODE_TIMINGS = 4, // Used by Preact 10.1.x - REORDER_CHILDREN = 5, - RENDER_REASON = 6, - COMMIT_STATS = 7, - HOC_NODES = 8, -} - -// Event Examples: -// -// ADD_ROOT -// id -// -// ADD_VNODE -// id -// type -// parent -// owner -// name -// key -// -// ADD_VNODE_V2 -// id -// type -// parent -// owner -// name -// key -// startTime -// duration -// -// REMOVE_VNODE -// id -// -// UPDATE_VNODE_TIMINGS -// id -// duration -// -// UPDATE_VNODE_TIMINGS_V2 -// id -// startTime -// duration -// -// REORDER_CHILDREN -// id -// childrenCount -// childId -// childId -// ... -// -// RENDER_REASON -// id -// type -// stringsCount -// ...stringIds -// -// COMMIT_STATS -> Check `stats.ts` -// -// HOC_NODES -// vnodeId -// stringsCounts -// ...stringIds -// -export interface Commit { - rootId: number; - strings: StringTable; - unmountIds: number[]; - operations: number[]; - stats: Stats | null; -} - -/** - * Collect all relevant data from a commit and convert it to a message - * the detools can understand - */ -export function flush(commit: Commit) { - const { rootId, unmountIds, operations, strings, stats } = commit; - if (unmountIds.length === 0 && operations.length === 0) return; - - const msg = [rootId, ...flushTable(strings)]; - if (unmountIds.length > 0) { - msg.push(MsgTypes.REMOVE_VNODE, unmountIds.length, ...unmountIds); - } - - for (let i = 0; i < operations.length; i++) { - msg.push(operations[i]); - } - if (stats !== null) { - stats2ops(stats, msg); - } - - return { type: "operation_v2", data: msg }; -} +const { postPluginMessage } = window as any; function sumArrays(a: number[], b: number[]) { for (let i = 0; i < b.length; i++) { @@ -198,6 +102,7 @@ export function applyOperationsV2(store: Store, data: number[]) { } export function applyEvent(store: Store, type: keyof DevtoolEvents, data: any) { + if (__DEBUG__) console.log("NOTICE: devtools applyEvent", type, data); switch (type) { case "attach": if (!store.profiler.isSupported.value) { @@ -220,9 +125,10 @@ export function applyEvent(store: Store, type: keyof DevtoolEvents, data: any) { applyOperationsV1(store, data); break; case "operation_v2": - batch(() => { - applyOperationsV2(store, data); - }); + // batch(() => { + // What for signals works with react-lynx + applyOperationsV2(store, data); + // }); break; case "inspect-result": { const { props, state, context } = store.sidebar; @@ -258,5 +164,43 @@ export function applyEvent(store: Store, type: keyof DevtoolEvents, data: any) { store.roots.value = data; break; } + case "init": { + // We have to clear the state manually since browser will reload the extension on reload, but HDT does not reload plugin on react-lynx app reload + store.roots.value = []; + break; + } + case "preact-devtools-highlight": { + const { uniqueId } = data || {}; + if (uniqueId != null) { + globalThis.preactDevtoolsLDTCtx.highlightUniqueId = uniqueId; + try { + if ( + globalThis.preactDevtoolsLDTCtx.devtoolsProps + ?.onPreactDevtoolsPanelUINodeIdSelected + ) { + globalThis.preactDevtoolsLDTCtx.devtoolsProps?.onPreactDevtoolsPanelUINodeIdSelected?.( + uniqueId, + ); + } else { + postPluginMessage?.("uitree-drawer")("Extensions.uitree-drawer", { + UINodeId: uniqueId, + }); + postPluginMessage?.("uitree-panel")("Extensions.uitree-panel", { + UINodeId: uniqueId, + }); + } + } catch (err) { + console.error("preact-devtools-highlight error", err); + } + } + break; + } + case "element-picked-vnode-id": { + const { id } = data || {}; + if (id != null) { + store.selection.selectById(id); + } + break; + } } } diff --git a/src/adapter/protocol/legacy/operationsV1.ts b/src/adapter/protocol/legacy/operationsV1.ts index 1e9d6317..37560497 100644 --- a/src/adapter/protocol/legacy/operationsV1.ts +++ b/src/adapter/protocol/legacy/operationsV1.ts @@ -1,4 +1,4 @@ -import { MsgTypes } from "../events"; +import { MsgTypes } from "../events-types"; import { parseTable } from "../string-table"; import { Store } from "../../../view/store/types"; import { deepClone } from "../../shared/utils"; diff --git a/src/adapter/protocol/operations.ts b/src/adapter/protocol/operations.ts index c8f24f64..7087bae7 100644 --- a/src/adapter/protocol/operations.ts +++ b/src/adapter/protocol/operations.ts @@ -1,6 +1,6 @@ import { ID, Tree } from "../../view/store/types"; import { parseTable } from "./string-table"; -import { MsgTypes } from "./events"; +import { MsgTypes } from "./events-types"; import { deepClone } from "../shared/utils"; import { RenderReasonMap } from "../shared/renderReasons"; import { ParsedStats, parseStats } from "../shared/stats"; diff --git a/src/adapter/renderer.ts b/src/adapter/renderer.ts index 8bbb7850..07f2eb9d 100644 --- a/src/adapter/renderer.ts +++ b/src/adapter/renderer.ts @@ -11,6 +11,9 @@ export type ObjPath = Array; export interface Renderer { refresh?(): void; getVNodeById(id: ID): T | null; + getUniqueListIdById(id: ID): number[] | null; + getUniqueListIdBySnapshotId(snapshotId: number): number[] | null; + getIdByUniqueId(uniqueId: number): ID | null; getDisplayName(vnode: T): string; findDomForVNode(id: ID): Array | null; findVNodeIdForDom(node: HTMLElement | Text): number; diff --git a/src/adapter/shared/hooks.ts b/src/adapter/shared/hooks.ts index d282ea1d..6feaeebd 100644 --- a/src/adapter/shared/hooks.ts +++ b/src/adapter/shared/hooks.ts @@ -102,7 +102,8 @@ export function addHookStack(type: HookType) { ) { trim += 1; } - stack = stack.slice(trim, ancestorIdx); + // Lynx has one more `call at call (native)` stack, we need `- 1` here + stack = stack.slice(trim, ancestorIdx - 1); } const normalized: HookLocation[] = []; @@ -117,9 +118,11 @@ export function addHookStack(type: HookType) { const next = stack[i + 1]; normalized.push({ name: frame.name, - location: `${next.fileName.replace(window.origin, "")}:${next.line}:${ - next.column - }`, + // file://view2/.rspeedy/main/background.ed172d51.js -> /.rspeedy/main/background.ed172d51.js + location: `${next.fileName.replace( + /^file:\/\/[^/]*/, + "", + )}:${next.line}:${next.column}`, }); } @@ -192,7 +195,10 @@ export function parseHookData( // The user should be able to click through the value // properties if the value is an object. We parse it // separately and append it as children to our hook node - if (typeof rawValue === "object" && !(rawValue instanceof Element)) { + if ( + typeof rawValue === "object" && + !(rawValue instanceof preactDevtoolsCtx.Node) + ) { const valueTree = parseProps(value, id, 8, 1, name); children = valueTree.get(id)!.children; diff --git a/src/adapter/shared/idMapper.ts b/src/adapter/shared/idMapper.ts index 691dcf1f..602ee68a 100644 --- a/src/adapter/shared/idMapper.ts +++ b/src/adapter/shared/idMapper.ts @@ -11,6 +11,13 @@ export interface IdMappingState { idToInst: Map; nextId: ID; getInstance: (vnode: T) => any; + + snapshotIdToId: Map; + idToUniqueIdList: Map; + uniqueIdToId: Map; + + updateSnapshotId: (oldId: number, newId: number) => void; + updateIdToUniqueIdRelation: (snapshotId: number, id: number) => void; } export function createIdMappingState( @@ -23,12 +30,69 @@ export function createIdMappingState( idToInst: new Map(), nextId: initial, getInstance, + + snapshotIdToId: new Map(), + idToUniqueIdList: new Map(), + uniqueIdToId: new Map(), + + updateSnapshotId: function (oldId: number, newId: number) { + if (this.snapshotIdToId.has(oldId)) { + const id = this.snapshotIdToId.get(oldId)!; + this.snapshotIdToId.delete(oldId); + this.snapshotIdToId.set(newId, id); + + this.updateIdToUniqueIdRelation(newId, id); + } + }, + + updateIdToUniqueIdRelation: function (snapshotId: number, id: number) { + lynx + // @ts-expect-error type error + .getNativeApp() + .callLepusMethod( + "getUniqueIdListBySnapshotId", + { snapshotId }, + (ret: { uniqueIdList: number[] }) => { + if (ret?.uniqueIdList == null) { + // console.warn("Failed to get unique id for snapshot", snapshotId); + return; + } + const { uniqueIdList } = ret; + this.idToUniqueIdList.set(id, uniqueIdList); + if (uniqueIdList != null) { + for (const uniqueId of uniqueIdList) { + this.uniqueIdToId.set(uniqueId, id); + } + } + }, + ); + }, }; } export function getVNodeById(state: IdMappingState, id: ID): T | null { return state.idToVNode.get(id) || null; } +export function getUniqueListIdById( + state: IdMappingState, + id: ID, +): number[] | null { + return state.idToUniqueIdList.get(id) || null; +} +export function getUniqueListIdBySnapshotId( + state: IdMappingState, + snapshotId: number, +): number[] | null { + const id = state.snapshotIdToId.get(snapshotId); + if (!id) return null; + return state.idToUniqueIdList.get(id) || null; +} +export function getIdByUniqueId( + state: IdMappingState, + uniqueId: number, +): ID | null { + return state.uniqueIdToId.get(uniqueId) || null; +} export function hasVNodeId(state: IdMappingState, vnode: T) { return vnode != null && state.instToId.has(state.getInstance(vnode)); @@ -43,7 +107,7 @@ export function getVNodeId(state: IdMappingState, vnode: T) { export function getOrCreateVNodeId( state: IdMappingState, vnode: T, -): number { +): number | undefined { const id = getVNodeId(state, vnode); if (id !== -1) return id; return createVNodeId(state, vnode); @@ -53,6 +117,20 @@ export function updateVNodeId(state: IdMappingState, id: ID, vnode: T) { const inst = state.getInstance(vnode); state.idToInst.set(id, inst); state.idToVNode.set(id, vnode); + + let snapshotId; + try { + // @ts-ignore + snapshotId = vnode.__e.__id; + } catch (e) { + // When a component returns null/Fragment + // it will has no `__e` property, so it has + // no related snapshotInstance. + return; + } + state.snapshotIdToId.set(snapshotId, id); + + state.updateIdToUniqueIdRelation(snapshotId, id); } export function removeVNodeId(state: IdMappingState, vnode: T) { @@ -60,6 +138,26 @@ export function removeVNodeId(state: IdMappingState, vnode: T) { const id = getVNodeId(state, vnode); state.idToInst.delete(id); state.idToVNode.delete(id); + + let snapshotId; + try { + // @ts-ignore + snapshotId = vnode.__e.__id; + } catch (e) { + // When a component returns null/Fragment + // it will has no `__e` property, so it has + // no related snapshotInstance. + return; + } + state.snapshotIdToId.delete(snapshotId); + + const uniqueIdList = state.idToUniqueIdList.get(id); + state.idToUniqueIdList.delete(id); + if (uniqueIdList != null) { + for (const uniqueId of uniqueIdList) { + state.uniqueIdToId.delete(uniqueId); + } + } } const inst = state.getInstance(vnode); state.instToId.delete(inst); @@ -71,5 +169,19 @@ export function createVNodeId(state: IdMappingState, vnode: T) { state.instToId.set(inst, id); state.idToInst.set(id, inst); state.idToVNode.set(id, vnode); + + let snapshotId: number; + try { + // @ts-ignore + snapshotId = vnode.__e.__id; + } catch (e) { + // When a component returns null/Fragment + // it will has no `__e` property, so it has + // no related snapshotInstance. + return id; + } + state.snapshotIdToId.set(snapshotId, id); + + state.updateIdToUniqueIdRelation(snapshotId, id); return id; } diff --git a/src/adapter/shared/inspectVNode.ts b/src/adapter/shared/inspectVNode.ts index 950a15c4..f5796eef 100644 --- a/src/adapter/shared/inspectVNode.ts +++ b/src/adapter/shared/inspectVNode.ts @@ -88,6 +88,8 @@ export function inspectVNode( type: getDevtoolsType(vnode, bindings), suspended, version, + // @ts-ignore + __source: vnode.__source || null, }; } diff --git a/src/adapter/shared/renderReasons.ts b/src/adapter/shared/renderReasons.ts index ed49458b..525e151d 100644 --- a/src/adapter/shared/renderReasons.ts +++ b/src/adapter/shared/renderReasons.ts @@ -44,7 +44,7 @@ export function createReason( } /** - * Get all keys that have differnt values in two objects. Does a + * Get all keys that have different values in two objects. Does a * shallow comparison. */ export function getChangedKeys( diff --git a/src/adapter/shared/renderer.ts b/src/adapter/shared/renderer.ts index 9597531e..511f0654 100644 --- a/src/adapter/shared/renderer.ts +++ b/src/adapter/shared/renderer.ts @@ -1,15 +1,19 @@ import { BaseEvent, PortPageHook } from "../adapter/port"; -import { Commit, flush } from "../protocol/events"; +import { Commit } from "../protocol/events-types"; +import { flush } from "../protocol/events-react-lynx"; import { FunctionalComponent, ComponentConstructor, Options } from "preact"; import { ID, DevNodeType } from "../../view/store/types"; import { newRootData, traverse } from "./utils"; import { FilterState } from "../adapter/filter"; import { Renderer } from "../renderer"; -import { startDrawing } from "../adapter/highlightUpdates"; +// import { startDrawing } from "../adapter/highlightUpdates"; import { setIn, setInCopy } from "../shared/serialize"; import { createStats, OperationInfo } from "../shared/stats"; import { ProfilerState } from "../adapter/profiler"; import { + getIdByUniqueId, + getUniqueListIdById, + getUniqueListIdBySnapshotId, getVNodeById, getVNodeId, hasVNodeId, @@ -134,6 +138,10 @@ export function createRenderer( }, getVNodeById: id => getVNodeById(ids, id), + getUniqueListIdById: id => getUniqueListIdById(ids, id), + getUniqueListIdBySnapshotId: snapshotId => + getUniqueListIdBySnapshotId(ids, snapshotId), + getIdByUniqueId: uniqueId => getIdByUniqueId(ids, uniqueId), getDisplayName(vnode) { return bindings.getDisplayName(vnode, config); }, @@ -302,7 +310,8 @@ export function createRenderer( if (!ev) return; if (profiler.updateRects.size > 0) { - startDrawing(profiler.updateRects); + // TODO: make this work + // startDrawing(profiler.updateRects); profiler.pendingHighlightUpdates.clear(); } diff --git a/src/adapter/shared/serialize.ts b/src/adapter/shared/serialize.ts index 043557ef..608168d0 100644 --- a/src/adapter/shared/serialize.ts +++ b/src/adapter/shared/serialize.ts @@ -102,7 +102,7 @@ export function jsonify( } case "object": { if (data === null) return null; - else if (data instanceof window.Blob) { + else if (data instanceof preactDevtoolsCtx.Blob) { return { type: "blob", name: "Blob", diff --git a/src/adapter/shared/stats.ts b/src/adapter/shared/stats.ts index 0b0e7fa4..30d117b2 100644 --- a/src/adapter/shared/stats.ts +++ b/src/adapter/shared/stats.ts @@ -1,5 +1,5 @@ import { DevNodeType } from "../../view/store/types"; -import { MsgTypes } from "../protocol/events"; +import { MsgTypes } from "../protocol/events-types"; import { PreactBindings, SharedVNode } from "./bindings"; import { getDevtoolsType, RendererConfig } from "./renderer"; diff --git a/src/adapter/shared/traverse.ts b/src/adapter/shared/traverse.ts index a3b95ef3..9168709a 100644 --- a/src/adapter/shared/traverse.ts +++ b/src/adapter/shared/traverse.ts @@ -1,6 +1,6 @@ import { ID } from "../../view/store/types"; import { FilterState } from "../adapter/filter"; -import { Commit, MsgTypes } from "../protocol/events"; +import { Commit, MsgTypes } from "../protocol/events-types"; import { getStringId } from "../protocol/string-table"; import { getOrCreateVNodeId, @@ -14,9 +14,9 @@ import { ProfilerState } from "../adapter/profiler"; import { getDevtoolsType, RendererConfig } from "./renderer"; import { RenderReason, RenderReasonData } from "./renderReasons"; import { createStats, DiffType, updateDiffStats, updateOpStats } from "./stats"; -import { NodeType } from "../../constants"; +// import { NodeType } from "../../constants"; import { getDiffType, recordComponentStats } from "./stats"; -import { measureUpdate } from "../adapter/highlightUpdates"; +// import { measureUpdate } from "../adapter/highlightUpdates"; import { PreactBindings, SharedVNode } from "./bindings"; import { VNodeTimings } from "./timings"; import { getSignalTextName } from "./utils"; @@ -57,42 +57,42 @@ function detectHocs(commit: Commit, name: string, id: ID, hocs: string[]) { return { name, hocs }; } -function isTextNode(dom: HTMLElement | Text | null): dom is Text { - return dom != null && dom.nodeType === NodeType.Text; -} - -function updateHighlight( - profiler: ProfilerState, - vnode: T, - bindings: PreactBindings, -) { - if (profiler.highlightUpdates && bindings.isComponent(vnode)) { - const stack: Array = [vnode]; - let item; - let dom; - while ((item = stack.shift()) !== undefined) { - // Account for placholders/holes - if (item === null) continue; - - if (!bindings.isComponent(item)) { - dom = bindings.getDom(item); - break; - } - - stack.push(...bindings.getActualChildren(item)); - } - - if (dom === null || dom === undefined) return; - - if (isTextNode(dom)) { - dom = dom.parentNode as HTMLElement; - } - if (dom && !profiler.pendingHighlightUpdates.has(dom)) { - profiler.pendingHighlightUpdates.add(dom); - measureUpdate(profiler.updateRects, dom); - } - } -} +// function isTextNode(dom: HTMLElement | Text | null): dom is Text { +// return dom != null && dom.nodeType === NodeType.Text; +// } + +// function updateHighlight( +// profiler: ProfilerState, +// vnode: T, +// bindings: PreactBindings, +// ) { +// if (profiler.highlightUpdates && bindings.isComponent(vnode)) { +// const stack: Array = [vnode]; +// let item; +// let dom; +// while ((item = stack.shift()) !== undefined) { +// // Account for placholders/holes +// if (item === null) continue; + +// if (!bindings.isComponent(item)) { +// dom = bindings.getDom(item); +// break; +// } + +// stack.push(...bindings.getActualChildren(item)); +// } + +// if (dom === null || dom === undefined) return; + +// if (isTextNode(dom)) { +// dom = dom.parentNode as HTMLElement; +// } +// if (dom && !profiler.pendingHighlightUpdates.has(dom)) { +// profiler.pendingHighlightUpdates.add(dom); +// measureUpdate(profiler.updateRects, dom); +// } +// } +// } export function getFilteredChildren( vnode: T, @@ -225,6 +225,7 @@ function mount( if (root || !skip) { const id = getOrCreateVNodeId(ids, vnode); + if (!id) return; if (root) { commit.operations.push(MsgTypes.ADD_ROOT, id); } @@ -266,7 +267,7 @@ function mount( commit.operations.push(MsgTypes.RENDER_REASON, id, RenderReason.MOUNT, 0); } - updateHighlight(profiler, vnode, bindings); + // updateHighlight(profiler, vnode, bindings); ancestorId = id; } @@ -476,7 +477,7 @@ function update( } } - updateHighlight(profiler, vnode, bindings); + // updateHighlight(profiler, vnode, bindings); const oldChildren = oldVNode ? bindings diff --git a/src/adapter/store.test.ts b/src/adapter/store.test.ts index a93fad4e..72ec9cb8 100644 --- a/src/adapter/store.test.ts +++ b/src/adapter/store.test.ts @@ -86,6 +86,11 @@ describe("Store", () => { suspended: false, type: 1, version: "", + __source: { + fileName: "foo.tsx", + lineNumber: 12, + columnNumber: 10, + }, }; store.clear(); expect(store.inspectData.value).to.equal(null); @@ -129,6 +134,11 @@ describe("Store", () => { suspended: false, type: 1, version: "", + __source: { + fileName: "foo.tsx", + lineNumber: 12, + columnNumber: 10, + }, }; expect(store.sidebar.hooks.items.value).to.deep.equal([]); diff --git a/src/global.d.ts b/src/global.d.ts index 64920d32..8e0793cc 100644 --- a/src/global.d.ts +++ b/src/global.d.ts @@ -1,10 +1,68 @@ -declare module "*.css" { - const styles: Record; - export default styles; -} +import { BackgroundSnapshotInstance } from "@lynx-js/react/runtime/lib/backgroundSnapshot"; +import type { UnsafeLynx } from "@lynx-js/types"; -declare module "@preact-list-versions" { - export const preactVersions: string[]; -} +interface FiberElement {} + +declare global { + declare module "*.css" { + const styles: Record; + export default styles; + } -declare const __DEBUG__: boolean; + declare const __DEBUG__: boolean; + /** + * The global context of preact-devtools will be injected to ReactLynx App + */ + interface PreactDevtoolsCtx { + __DEBUG__?: boolean; + lynx?: UnsafeLynx; + __page?: FiberElement; + __root?: BackgroundSnapshotInstance & { + __jsx?: React.ReactNode; + }; + lynxCoreInject?: { + tt: any; + }; + addEventListener: ( + type: string, + listener: (e: { source: any; data: any }) => void, + ) => void; + postMessage: (message: any, targetOrigin: string) => void; + localStorage: Storage; + performance: Performance; + Node: typeof BackgroundSnapshotInstance; + document: { + body: BackgroundSnapshotInstance; + }; + Blob: typeof Blob; + } + // eslint-disable-next-line no-var + var preactDevtoolsCtx: PreactDevtoolsCtx; + + /** + * The global context of preact-devtools will be injected to Lynx Devtool + */ + interface PreactDevtoolsLDTCtx { + devtoolsProps: { + addEventListener: (type: string, cb: (msg: string) => void) => void; + postMessage: (type: string, msg: string | Record) => void; + isOSSLynxDevtool: boolean; + addOnScreenCastPanelUINodeIdSelectedListener: ( + cb: (UINodeId: number) => void, + ) => void; + onPreactDevtoolsPanelUINodeIdSelected: (UINodeId: number) => void; + }; + addEventListener: ( + type: string, + listener: (e: MessageEvent) => void, + ) => void; + removeEventListener: ( + type: string, + listener: (e: MessageEvent) => void, + ) => void; + postMessage: (message: any, targetOrigin: string) => void; + highlightUniqueId?: number; + } + // eslint-disable-next-line no-var + var preactDevtoolsLDTCtx: PreactDevtoolsLDTCtx; +} diff --git a/src/react-lynx/index.ts b/src/react-lynx/index.ts new file mode 100644 index 00000000..92bc834e --- /dev/null +++ b/src/react-lynx/index.ts @@ -0,0 +1,13 @@ +// Importing `@lynx-js/preact-devtools` is itself the opt-in: in development the +// module is always bundled, and in production `@lynx-js/react-alias-rsbuild-plugin` +// only keeps it (instead of aliasing it to `false`) when the `REACT_DEVTOOL` +// environment variable is set. So whenever this module actually runs, devtools +// is wanted — no extra build-time flag needed. +// Skip setup in test environment because `require` does not work +// in vitest esm env, and `lynx.getDevtool` is not mocked yet +if (process.env.NODE_ENV !== "test") { + // We cannot use dynamic import here because + // dynamic import will generate a new lazy bundle + // which is not what we needed + require("./setup").setupReactLynx(); +} diff --git a/src/react-lynx/setup.ts b/src/react-lynx/setup.ts new file mode 100644 index 00000000..e7955f64 --- /dev/null +++ b/src/react-lynx/setup.ts @@ -0,0 +1,286 @@ +import type {} from "@lynx-js/react"; +import { __root, __page } from "@lynx-js/react/internal"; + +export function setupReactLynx() { + if (__BACKGROUND__) { + try { + // @ts-ignore + if (typeof lynx.getDevtool !== "function") { + throw new Error( + "`lynx.getDevtool` is not a function. Please upgrade your LynxSDK to the latest version.", + ); + } + + // Capture the devtool instance once. `lynx.getDevtool()` can return + // `undefined` later (e.g. when the page is being closed), which would + // throw when accessing `.dispatchEvent`/`.addEventListener` on it. + // @ts-ignore + const devtool = lynx.getDevtool(); + + // @ts-ignore + globalThis.preactDevtoolsCtx ||= {}; + + const __DEBUG__ = globalThis.preactDevtoolsCtx.__DEBUG__; + if (__DEBUG__) { + console.log("[PREACT DEVTOOLS] debug mode is enabled"); + } + + if (__DEBUG__) { + // For quick debug in HDT console + Object.assign(preactDevtoolsCtx, { + lynx, + __page, + __root, + // @ts-ignore + lynxCoreInject, + }); + } + + const listeners: Record< + string, + ((e: { source: any; data: any }) => void)[] + > = {}; + preactDevtoolsCtx.addEventListener = (type, callback) => { + if (!listeners[type]) { + listeners[type] = []; + } + listeners[type].push(callback); + }; + preactDevtoolsCtx.postMessage = ( + { source, type, data }, + // eslint-disable-next-line @typescript-eslint/no-unused-vars + _targetOrigin, + ) => { + for (let i = 0; i < (listeners["message"]?.length ?? 0); i++) { + listeners["message"]?.[i]?.({ + // in-App to-self message + source: preactDevtoolsCtx, + data: { + source, + type, + data, + }, + }); + } + + if (__DEBUG__) { + // App -> Devtools + console.log("lynx.getDevtool().dispatchEvent", { + source, + type, + data, + }); + } + devtool.dispatchEvent({ + type: "PreactDevtools", + data: JSON.stringify({ + source, + type, + data, + }), + }); + }; + + devtool.addEventListener("PreactDevtools", e => { + const dataObj = JSON.parse(e.data); + if (__DEBUG__) { + console.log("hdt -> frontend message received", dataObj); + } + const { source, type, data } = dataObj; + + for (let i = 0; i < (listeners["message"]?.length ?? 0); i++) { + listeners["message"]?.[i]?.({ + source: preactDevtoolsCtx, + data: { + source, + type, + data, + }, + }); + } + }); + + if ( + typeof preactDevtoolsCtx.localStorage === "undefined" || + preactDevtoolsCtx.localStorage === null + ) { + const storage: Record = {}; + + preactDevtoolsCtx.localStorage = { + getItem: function (key) { + if (__DEBUG__) console.log(`getItem called with key: ${key}`); + return Object.prototype.hasOwnProperty.call(storage, key) + ? (storage[key] ?? null) + : null; + }, + setItem: function (key, value) { + if (__DEBUG__) { + console.log(`setItem called with key: ${key}, value: ${value}`); + } + storage[key] = value.toString(); + }, + removeItem: function (key) { + if (__DEBUG__) console.log(`removeItem called with key: ${key}`); + delete storage[key]; + }, + clear: function () { + if (__DEBUG__) console.log("clear called"); + for (const key in storage) { + if (Object.prototype.hasOwnProperty.call(storage, key)) { + delete storage[key]; + } + } + }, + key: function (index) { + if (__DEBUG__) console.log(`key called with index: ${index}`); + const keys = Object.keys(storage); + return keys[index] || null; + }, + get length() { + if (__DEBUG__) console.log("length property accessed"); + return Object.keys(storage).length; + }, + }; + } + + if ( + typeof preactDevtoolsCtx.performance === "undefined" || + preactDevtoolsCtx.performance === null + ) { + if (__DEBUG__) console.log("Mocking performance API..."); + + const marks: any[] = []; + const measures: any[] = []; + const startTime = Date.now(); + + preactDevtoolsCtx.performance = { + now: function () { + return Date.now() - startTime; + }, + // @ts-ignore + mark: function (markName) { + if (__DEBUG__) { + console.log(`performance.mark called with markName: ${markName}`); + } + marks.push({ + name: markName, + entryType: "mark", + startTime: this.now(), + duration: 0, + }); + }, + // @ts-ignore + measure: function (measureName, startMark, endMark) { + if (__DEBUG__) { + console.log( + `performance.measure called with measureName: ${measureName}, startMark: ${startMark}, endMark: ${endMark}`, + ); + } + const start = marks.find(mark => mark.name === startMark); + const end = marks.find(mark => mark.name === endMark); + if (start && end) { + measures.push({ + name: measureName, + entryType: "measure", + startTime: start.startTime, + duration: end.startTime - start.startTime, + }); + } else { + if (__DEBUG__) { + console.warn("Invalid marks for performance.measure"); + } + } + }, + getEntriesByType: function (type) { + if (__DEBUG__) { + console.log( + `performance.getEntriesByType called with type: ${type}`, + ); + } + if (type === "mark") { + return [...marks]; + } else if (type === "measure") { + return [...measures]; + } + return []; + }, + clearMarks: function (markName) { + if (__DEBUG__) { + console.log( + `performance.clearMarks called with markName: ${markName}`, + ); + } + if (markName) { + for (let i = marks.length - 1; i >= 0; i--) { + if (marks[i].name === markName) { + marks.splice(i, 1); + } + } + } else { + marks.length = 0; // Clear all marks + } + }, + clearMeasures: function (measureName) { + if (__DEBUG__) { + console.log( + `performance.clearMeasures called with measureName: ${measureName}`, + ); + } + if (measureName) { + for (let i = measures.length - 1; i >= 0; i--) { + if (measures[i].name === measureName) { + measures.splice(i, 1); + } + } + } else { + measures.length = 0; // Clear all measures + } + }, + }; + } + + // Shims for: + // const treeParent = ... + if ( + typeof preactDevtoolsCtx.Node === "undefined" || + preactDevtoolsCtx.Node === null + ) { + // @ts-ignore + preactDevtoolsCtx.Node = __root.__proto__.constructor; + } + // } + // Shims for: + // const sorted = sortRoots(document.body, roots); + if ( + typeof preactDevtoolsCtx.document === "undefined" || + preactDevtoolsCtx.document === null + ) { + preactDevtoolsCtx.document = { + // @ts-ignore + body: __root, + }; + } + // Shims for: + // else if (data instanceof window.Blob) { + if ( + typeof preactDevtoolsCtx.Blob === "undefined" || + preactDevtoolsCtx.Blob === null + ) { + // @ts-ignore + preactDevtoolsCtx.Blob = class Blob { + constructor(parts: any, options: any) { + if (__DEBUG__) console.log("Blob constructor", parts, options); + } + }; + } + + require("../shells/shared/installHook"); + require("preact/devtools"); + + console.log("[PREACT DEVTOOLS] Devtools initialized successfully"); + } catch (e) { + console.warn("[PREACT DEVTOOLS] Devtools failed to initialize:"); + console.warn(e); + } + } +} diff --git a/src/shells/inline/index.ts b/src/shells/inline/index.ts index 28fb0a94..20ab4f09 100644 --- a/src/shells/inline/index.ts +++ b/src/shells/inline/index.ts @@ -3,10 +3,9 @@ export { createStore } from "../../view/store"; import { render, h } from "preact"; import { DevTools } from "../../view/components/Devtools"; import { applyEvent } from "../../adapter/protocol/events"; -import { Store } from "../../view/store/types"; import { PageHookName, DevtoolsToClient } from "../../constants"; -export function setupFrontendStore(ctx: Window) { +export function setupFrontendStore(ctx: PreactDevtoolsLDTCtx) { const store = createStore(); function handleClientEvents(e: MessageEvent) { @@ -40,12 +39,11 @@ export function setupFrontendStore(ctx: Window) { }; } -export function setupInlineDevtools(container: HTMLElement, ctx: Window) { +export function setupInlineDevtools( + container: HTMLElement, + ctx: PreactDevtoolsLDTCtx, +) { const { store } = setupFrontendStore(ctx); - render(h(DevTools, { store, window: ctx }), container); + render(h(DevTools, { store, ctx }), container); return store; } - -export function renderDevtools(store: Store, container: HTMLElement) { - render(h(DevTools, { store, window }), container); -} diff --git a/src/shells/shared/installHook.ts b/src/shells/shared/installHook.ts index a54c5ba0..43e009f1 100644 --- a/src/shells/shared/installHook.ts +++ b/src/shells/shared/installHook.ts @@ -4,4 +4,6 @@ import { createHook } from "../../adapter/hook"; import { createPortForHook } from "../../adapter/adapter/port"; -(window as any).__PREACT_DEVTOOLS__ = createHook(createPortForHook(window)); +(globalThis as any).__PREACT_DEVTOOLS__ = createHook( + createPortForHook(preactDevtoolsCtx), +); diff --git a/src/shells/shared/panel/panel.ts b/src/shells/shared/panel/panel.ts index 04fcf8d9..532e1a62 100644 --- a/src/shells/shared/panel/panel.ts +++ b/src/shells/shared/panel/panel.ts @@ -71,7 +71,7 @@ function inspectHostNode() { ); } -async function initDevtools() { +async function initDevtools(ctx: PreactDevtoolsLDTCtx) { initialized = true; const { window, panel } = await showPanel(); panel.onShown.addListener(() => { @@ -96,7 +96,7 @@ async function initDevtools() { // Render our application const container = window.document.getElementById("preact-devtools-root")!; - render(h(DevTools, { store, window }), container); + render(h(DevTools, { store, ctx }), container); } // Send messages from devtools to the content script @@ -152,7 +152,7 @@ const IS_FIREFOX = isFirefox(); port.onMessage.addListener(async message => { if (!initialized) { debug("initialize devtools panel"); - await initDevtools(); + await initDevtools(preactDevtoolsLDTCtx); } const tabId = chrome.devtools.inspectedWindow.tabId; diff --git a/src/view/components/Devtools.tsx b/src/view/components/Devtools.tsx index 1fe63ec1..1e8be1a7 100644 --- a/src/view/components/Devtools.tsx +++ b/src/view/components/Devtools.tsx @@ -1,4 +1,5 @@ import { h, Fragment } from "preact"; +import { useEffect } from "preact/hooks"; import { AppCtx, EmitCtx, WindowCtx } from "../store/react-bindings"; import { Store, Panel } from "../store/types"; import { Elements } from "./elements/Elements"; @@ -10,16 +11,62 @@ import { ThemeSwitcher } from "./ThemeSwitcher"; import { Settings } from "./settings/Settings"; import { StatsPanel } from "./stats/StatsPanel"; -export function DevTools(props: { store: Store; window: Window }) { +const { addPluginEventListener } = window as any; + +export function DevTools(props: { store: Store; ctx: PreactDevtoolsLDTCtx }) { const panel = props.store.activePanel.value; + useEffect(() => { + // No tree yet (the panel opened after the page rendered, or reopened + // without its previous state): request a `refresh` to re-fetch the tree + // instead of reloading the page. If there really are no roots, an empty + // tree is the correct state — leave reloading to the user. + if (props.store.roots.value.length === 0) { + props.store.emit("refresh", null); + } + }, []); + + useEffect(() => { + const onUINodeIdSelected = (UINodeId?: number) => { + if (UINodeId == null) return; + if (UINodeId === globalThis.preactDevtoolsLDTCtx.highlightUniqueId) { + if (__DEBUG__) { + console.log( + `skip because unique id of ${UINodeId} has been highlighted`, + ); + } + return; + } + + props.store.emit("element-picked", { + uniqueId: UINodeId, + }); + }; + + if (props.ctx.devtoolsProps.addOnScreenCastPanelUINodeIdSelectedListener) { + props.ctx.devtoolsProps.addOnScreenCastPanelUINodeIdSelectedListener?.( + UINodeId => { + onUINodeIdSelected(UINodeId); + }, + ); + } else { + addPluginEventListener?.("uitree-drawer")( + "Extensions.uitree-drawer", + (msg: any) => { + const { UINodeId } = msg || {}; + onUINodeIdSelected(UINodeId); + }, + ); + } + }, []); + const showElements = panel === Panel.ELEMENTS; const showProfiler = panel === Panel.PROFILER; const showSettings = panel === Panel.SETTINGS; const showStats = panel === Panel.STATISTICS; return ( - + diff --git a/src/view/components/FilterPopup/FilterPopup.module.css b/src/view/components/FilterPopup/FilterPopup.module.css index 8f63d83f..b3be93b8 100644 --- a/src/view/components/FilterPopup/FilterPopup.module.css +++ b/src/view/components/FilterPopup/FilterPopup.module.css @@ -3,60 +3,20 @@ display: flex; height: 100%; align-items: center; - anchor-name: --filter-popover-anchor; } .filter { - position: fixed; - inset: 2rem 0.75rem auto auto; - margin: 0; + position: absolute; + top: 90%; + right: -0.5rem; border-top: none; border: 0.0625rem solid var(--color-border); background: var(--color-bg); - color: var(--color-text); - font-family: sans-serif; - font-size: 0.875rem; width: 12rem; z-index: 10; padding: 0.5rem 0.5rem 0.5rem 0.75rem; } -.filter:popover-open { - display: block; -} - -.filterBtnWrapper:has(.filter:popover-open) - > :global(.icon-btn) - :global(.icon-btn-inner) { - position: relative; - z-index: 2; - color: var(--color-selected-text); -} - -.filterBtnWrapper:has(.filter:popover-open) - > :global(.icon-btn) - :global(.icon-btn-bg) { - display: block; - content: ""; - position: absolute; - left: -0.25rem; - top: -0.25rem; - right: -0.25rem; - bottom: -0.25rem; - background: var(--color-selected-bg); - border-radius: 0.2rem; -} - -@supports (position-area: bottom) { - .filter { - position: fixed; - position-area: bottom span-left; - position-anchor: --filter-popover-anchor; - inset: auto; - margin-top: 0.25rem; - } -} - .filter form { margin: 0; } @@ -143,15 +103,3 @@ width: 3rem; padding: 0.15rem; } - -.removeWrapper { - width: 1.5rem; - display: flex; - flex: 0 0 auto; - justify-content: flex-end; -} - -.vSep { - height: 0.0625rem; - margin: 0.4rem 0; -} diff --git a/src/view/components/FilterPopup/FilterPopup.tsx b/src/view/components/FilterPopup/FilterPopup.tsx index 417a5c81..6a20b1e5 100644 --- a/src/view/components/FilterPopup/FilterPopup.tsx +++ b/src/view/components/FilterPopup/FilterPopup.tsx @@ -74,26 +74,14 @@ export function FilterPopup({ onFiltersSubmit, filterActions, className, - id, - onOpen, }: { children: ComponentChildren; filterActions?: ComponentChildren; onFiltersSubmit: () => void; className?: string; - id: string; - onOpen?: () => void; }) { return ( -

{ - if ((e as any).newState === "open") onOpen?.(); - }} - > +
{ e.preventDefault(); diff --git a/src/view/components/IconBtn.tsx b/src/view/components/IconBtn.tsx index 50698735..ccd33da2 100644 --- a/src/view/components/IconBtn.tsx +++ b/src/view/components/IconBtn.tsx @@ -7,7 +7,6 @@ export interface IconBtnProps { disabled?: boolean; color?: string; onClick?: () => void; - popoverTarget?: string; styling?: "secondary" | "primary"; children: ComponentChildren; testId?: string; @@ -23,7 +22,6 @@ export function IconBtn(props: IconBtnProps) { title={props.title} disabled={props.disabled} data-testid={props.testId} - popovertarget={props.popoverTarget} onClick={e => { e.stopPropagation(); if (props.onClick) props.onClick(); diff --git a/src/view/components/OutsideClick.tsx b/src/view/components/OutsideClick.tsx new file mode 100644 index 00000000..f0990600 --- /dev/null +++ b/src/view/components/OutsideClick.tsx @@ -0,0 +1,33 @@ +import { h } from "preact"; +import { useEffect, useRef } from "preact/hooks"; + +export interface Props { + onClick: () => void; + children: any; + class?: string; + style?: string | Record; +} + +export function OutsideClick(props: Props) { + const ref = useRef(null); + + useEffect(() => { + if (!ref.current) return; + + const listener = (e: MouseEvent) => { + if (ref.current && !ref.current.contains(e.target as any)) { + props.onClick(); + } + }; + + const root = ref.current!.getRootNode() as HTMLElement; + root.addEventListener("click", listener); + return () => root.removeEventListener("click", listener); + }, [props.children, ref.current]); + + return ( +
+ {props.children} +
+ ); +} diff --git a/src/view/components/elements/OwnerInfo.tsx b/src/view/components/elements/OwnerInfo.tsx index 2f2541b6..6f2c77dc 100644 --- a/src/view/components/elements/OwnerInfo.tsx +++ b/src/view/components/elements/OwnerInfo.tsx @@ -3,6 +3,7 @@ import { h } from "preact"; import { useStore } from "../../store/react-bindings"; import { DevNode } from "../../store/types"; import { SidebarPanel } from "../sidebar/SidebarPanel"; +import { ClickToComponent } from "../sidebar/ClickToComponent"; export function OwnerInfo() { const store = useStore(); @@ -53,6 +54,7 @@ export function OwnerInfo() { +
); diff --git a/src/view/components/elements/TreeBar.tsx b/src/view/components/elements/TreeBar.tsx index 32a8b0e0..a9b18ac9 100644 --- a/src/view/components/elements/TreeBar.tsx +++ b/src/view/components/elements/TreeBar.tsx @@ -6,6 +6,7 @@ import { Icon, Picker } from "../icons"; import { useStore } from "../../store/react-bindings"; import s from "./TreeBar.module.css"; import { useSearch } from "../../store/search"; +import { OutsideClick } from "../OutsideClick"; import { FilterCheck, FilterPopup } from "../FilterPopup/FilterPopup"; import filterBarStyles from "../FilterPopup/FilterPopup.module.css"; @@ -14,6 +15,8 @@ export function TreeBar() { const isPicking = store.isPicking.value; const { value, count, selected, goPrev, goNext } = useSearch(); + const [filterVisible, setFilterVisible] = useState(false); + const onKeyDown = (e: KeyboardEvent) => { if (e.key === "Enter") { e.preventDefault(); @@ -32,12 +35,14 @@ export function TreeBar() {
{ store.isPicking.value = !isPicking; store.notify(!isPicking ? "start-picker" : "stop-picker", null); }} + disabled > @@ -89,16 +94,20 @@ export function TreeBar() {
-
+ setFilterVisible(false)} + class={filterBarStyles.filterBtnWrapper} + > setFilterVisible(!filterVisible)} > - -
+ {filterVisible && } +
); @@ -116,14 +125,6 @@ export function TreeFilterPopup() { store.filter.filterTextSignal.value, ); const [filters, setFilters] = useState(store.filter.filters.value); - const resetFilters = () => { - setFilterDom(store.filter.filterDom.value); - setFilterFragment(store.filter.filterFragment.value); - setFilterHoc(store.filter.filterHoc.value); - setFilterRoot(store.filter.filterRoot.value); - setFilterTextSignal(store.filter.filterTextSignal.value); - setFilters(store.filter.filters.value); - }; const removeFilter = (id: number) => { const nextFilters = filters.filter(filter => filter.id !== id); setFilters(nextFilters); @@ -132,8 +133,6 @@ export function TreeFilterPopup() { return ( { store.filter.filterDom.value = filterDom; store.filter.filterFragment.value = filterFragment; diff --git a/src/view/components/elements/TreeView.tsx b/src/view/components/elements/TreeView.tsx index f90bef27..40fafe00 100644 --- a/src/view/components/elements/TreeView.tsx +++ b/src/view/components/elements/TreeView.tsx @@ -109,9 +109,9 @@ export function TreeView() {

- If this message doesn't go away Preact started rendering - before devtools was initialized. You can fix this by adding the{" "} - preact/debug or preact/devtools import + If this message doesn't go away, your ReactLynx App is not + setup with devtools. You can fix this by adding the{" "} + import '@lynx-js/preact-devtools' import at the top of your entry file.

diff --git a/src/view/components/elements/VirtualizedList.tsx b/src/view/components/elements/VirtualizedList.tsx index 140730ee..875ede4b 100644 --- a/src/view/components/elements/VirtualizedList.tsx +++ b/src/view/components/elements/VirtualizedList.tsx @@ -35,7 +35,7 @@ export function useVirtualizedList({ const max = idx + Math.ceil(height / rowHeight) + bufferCount; let top = idx * rowHeight; - // A bit hacky, we bascially want to ensure that `scrollToItem` + // A bit hacky, we basically want to ensure that `scrollToItem` // is ALWAYS stable const timeoutRef = useRef(null); const scrollRef = useRef(scroll); diff --git a/src/view/components/profiler/components/CommitInfo/CommitInfo.tsx b/src/view/components/profiler/components/CommitInfo/CommitInfo.tsx index 2dfd1a0c..4827e491 100644 --- a/src/view/components/profiler/components/CommitInfo/CommitInfo.tsx +++ b/src/view/components/profiler/components/CommitInfo/CommitInfo.tsx @@ -24,7 +24,7 @@ export function CommitInfo() {
{formatTime(root.startTime)}

Duration:
-
{formatTime(commit.duration)}
+
{formatTime(commit.duration)}
); diff --git a/src/view/components/profiler/components/RenderedAt/DebugNodeNav.tsx b/src/view/components/profiler/components/RenderedAt/DebugNodeNav.tsx index 727467b0..7b753df4 100644 --- a/src/view/components/profiler/components/RenderedAt/DebugNodeNav.tsx +++ b/src/view/components/profiler/components/RenderedAt/DebugNodeNav.tsx @@ -36,7 +36,7 @@ export function DebugNodeNav() { return ( {nodes.length === 0 ? ( - No nodes found inside commmit + No nodes found inside commit ) : (
+ diff --git a/test-e2e/tests/collapse.test.ts b/test-e2e/tests/collapse.test.ts index c5156617..54bcb620 100644 --- a/test-e2e/tests/collapse.test.ts +++ b/test-e2e/tests/collapse.test.ts @@ -1,7 +1,7 @@ import { expect, test } from "@playwright/test"; import { locateTab, gotoTest, locateTreeItem } from "../pw-utils"; -test("Display no stats initially", async ({ page }) => { +test.skip("Display no stats initially", async ({ page }) => { const { devtools } = await gotoTest(page, "update-all"); await devtools.locator('[data-testid="tree-item"]').first().waitFor(); diff --git a/test-e2e/tests/debug-mode.test.ts b/test-e2e/tests/debug-mode.test.ts index 598f4bd7..cbaa6dd1 100644 --- a/test-e2e/tests/debug-mode.test.ts +++ b/test-e2e/tests/debug-mode.test.ts @@ -6,7 +6,7 @@ import { locateTab, } from "../pw-utils"; -test("Debug mode toggles debug views", async ({ page }) => { +test.skip("Debug mode toggles debug views", async ({ page }) => { const { devtools } = await gotoTest(page, "counter"); // Enable Capturing diff --git a/test-e2e/tests/element-search-keyboard.test.ts b/test-e2e/tests/element-search-keyboard.test.ts index fd567d21..05e359ad 100644 --- a/test-e2e/tests/element-search-keyboard.test.ts +++ b/test-e2e/tests/element-search-keyboard.test.ts @@ -1,7 +1,7 @@ import { test, expect } from "@playwright/test"; import { gotoTest } from "../pw-utils"; -test("Pressing Enter should scroll marked results into view during search #162", async ({ +test.skip("Pressing Enter should scroll marked results into view during search #162", async ({ page, }) => { const { devtools } = await gotoTest(page, "deep-tree"); diff --git a/test-e2e/tests/filter-fragment.test.ts b/test-e2e/tests/filter-fragment.test.ts index 5f6a70ea..811a7a26 100644 --- a/test-e2e/tests/filter-fragment.test.ts +++ b/test-e2e/tests/filter-fragment.test.ts @@ -1,7 +1,7 @@ import { expect, test } from "@playwright/test"; import { gotoTest } from "../pw-utils"; -test("Fragment filter should filter Fragment nodes", async ({ page }) => { +test.skip("Fragment filter should filter Fragment nodes", async ({ page }) => { const { devtools } = await gotoTest(page, "fragment-filter", { preact: "10.4.1", }); diff --git a/test-e2e/tests/filter-text-signal.test.ts b/test-e2e/tests/filter-text-signal.test.ts index 60329bdd..ccd82d10 100644 --- a/test-e2e/tests/filter-text-signal.test.ts +++ b/test-e2e/tests/filter-text-signal.test.ts @@ -1,7 +1,9 @@ import { expect, test } from "@playwright/test"; import { gotoTest } from "../pw-utils"; -test("Text Signal filter should filter Text Signal nodes", async ({ page }) => { +test.skip("Text Signal filter should filter Text Signal nodes", async ({ + page, +}) => { test.skip( process.env.PREACT_VERSION !== "10", "Signals are not supported in v11 yet.", diff --git a/test-e2e/tests/highlight-iframe.test.ts b/test-e2e/tests/highlight-iframe.test.ts index 9bcd0db4..f4ab9e3c 100644 --- a/test-e2e/tests/highlight-iframe.test.ts +++ b/test-e2e/tests/highlight-iframe.test.ts @@ -1,7 +1,7 @@ import { expect, test } from "@playwright/test"; import { gotoTest } from "../pw-utils"; -test("Highlight iframe nodes", async ({ page }) => { +test.skip("Highlight iframe nodes", async ({ page }) => { const { devtools } = await gotoTest(page, "iframe"); await page.waitForFunction(() => diff --git a/test-e2e/tests/highlight-margin.test.ts b/test-e2e/tests/highlight-margin.test.ts index a9e92783..0e1503f3 100644 --- a/test-e2e/tests/highlight-margin.test.ts +++ b/test-e2e/tests/highlight-margin.test.ts @@ -1,7 +1,9 @@ import { expect, Frame, Page, test } from "@playwright/test"; import { gotoTest, locateTreeItem } from "../pw-utils"; -test("Highlight overlay should detect memo for margin", async ({ page }) => { +test.skip("Highlight overlay should detect memo for margin", async ({ + page, +}) => { const { devtools } = await gotoTest(page, "highlight-margin"); await devtools.locator(locateTreeItem("Headline")).waitFor(); diff --git a/test-e2e/tests/highlight-suspense.test.ts b/test-e2e/tests/highlight-suspense.test.ts index 5f7138fa..b72dcd9c 100644 --- a/test-e2e/tests/highlight-suspense.test.ts +++ b/test-e2e/tests/highlight-suspense.test.ts @@ -1,7 +1,7 @@ import { expect, test } from "@playwright/test"; import { gotoTest, locateTreeItem } from "../pw-utils"; -test("Highlight Suspense nodes without crashing", async ({ page }) => { +test.skip("Highlight Suspense nodes without crashing", async ({ page }) => { const { devtools } = await gotoTest(page, "suspense"); await devtools.locator(locateTreeItem("Suspense")).waitFor(); diff --git a/test-e2e/tests/highlighter.test.ts b/test-e2e/tests/highlighter.test.ts index 8734edb0..2ec1d5a2 100644 --- a/test-e2e/tests/highlighter.test.ts +++ b/test-e2e/tests/highlighter.test.ts @@ -1,7 +1,7 @@ import { expect, test } from "@playwright/test"; import { gotoTest, locateTreeItem } from "../pw-utils"; -test("Highlight item", async ({ page }) => { +test.skip("Highlight item", async ({ page }) => { const { devtools } = await gotoTest(page, "counter"); await devtools.locator(locateTreeItem("Counter")).waitFor(); diff --git a/test-e2e/tests/hoc-filter-disable.test.ts b/test-e2e/tests/hoc-filter-disable.test.ts index d02b55d2..7787bcdf 100644 --- a/test-e2e/tests/hoc-filter-disable.test.ts +++ b/test-e2e/tests/hoc-filter-disable.test.ts @@ -1,7 +1,7 @@ import { expect, test } from "@playwright/test"; import { gotoTest, locateTreeItem } from "../pw-utils"; -test("HOC-Component filter should be disabled", async ({ page }) => { +test.skip("HOC-Component filter should be disabled", async ({ page }) => { const { devtools } = await gotoTest(page, "hoc"); await devtools.click('[data-testid="filter-menu-button"]'); diff --git a/test-e2e/tests/hoc-filter-search.test.ts b/test-e2e/tests/hoc-filter-search.test.ts index 623085f5..385d5d44 100644 --- a/test-e2e/tests/hoc-filter-search.test.ts +++ b/test-e2e/tests/hoc-filter-search.test.ts @@ -1,7 +1,7 @@ import { expect, test } from "@playwright/test"; import { gotoTest, locateTreeItem } from "../pw-utils"; -test("HOC-Component labels should be searchable", async ({ page }) => { +test.skip("HOC-Component labels should be searchable", async ({ page }) => { const { devtools } = await gotoTest(page, "hoc"); await devtools.locator(locateTreeItem("Foo")).first().waitFor(); diff --git a/test-e2e/tests/hoc-filter-update.test.ts b/test-e2e/tests/hoc-filter-update.test.ts index 64857c74..5a64ba15 100644 --- a/test-e2e/tests/hoc-filter-update.test.ts +++ b/test-e2e/tests/hoc-filter-update.test.ts @@ -1,7 +1,7 @@ import { expect, test } from "@playwright/test"; import { getTreeItems, gotoTest, locateTreeItem } from "../pw-utils"; -test("HOC-Component should work with updates", async ({ page }) => { +test.skip("HOC-Component should work with updates", async ({ page }) => { const { devtools } = await gotoTest(page, "hoc-update"); await devtools.locator(locateTreeItem("Wrapped")).waitFor(); diff --git a/test-e2e/tests/hoc-filter.test.ts b/test-e2e/tests/hoc-filter.test.ts index 7a8add11..7ad558ba 100644 --- a/test-e2e/tests/hoc-filter.test.ts +++ b/test-e2e/tests/hoc-filter.test.ts @@ -1,7 +1,7 @@ import { test, expect } from "@playwright/test"; import { gotoTest } from "../pw-utils"; -test("HOC-Component filter should flatten tree", async ({ page }) => { +test.skip("HOC-Component filter should flatten tree", async ({ page }) => { const { devtools } = await gotoTest(page, "hoc"); await devtools diff --git a/test-e2e/tests/hoc-forward-update.test.ts b/test-e2e/tests/hoc-forward-update.test.ts index 41aa4ccc..38850f5a 100644 --- a/test-e2e/tests/hoc-forward-update.test.ts +++ b/test-e2e/tests/hoc-forward-update.test.ts @@ -1,7 +1,7 @@ import { test, expect } from "@playwright/test"; import { gotoTest } from "../pw-utils"; -test("Test HOCs on forwardRef update", async ({ page }) => { +test.skip("Test HOCs on forwardRef update", async ({ page }) => { const { devtools } = await gotoTest(page, "forwardRef-update"); await devtools.locator('[data-name="Foo"]').click(); diff --git a/test-e2e/tests/hoc-highlight.test.ts b/test-e2e/tests/hoc-highlight.test.ts index 74112510..38bad11c 100644 --- a/test-e2e/tests/hoc-highlight.test.ts +++ b/test-e2e/tests/hoc-highlight.test.ts @@ -1,7 +1,7 @@ import { test, Frame, Page } from "@playwright/test"; import { gotoTest } from "../pw-utils"; -test("HOC-Component original name should show in highlight", async ({ +test.skip("HOC-Component original name should show in highlight", async ({ page, }) => { const { devtools } = await gotoTest(page, "hoc"); diff --git a/test-e2e/tests/hoc-update.test.ts b/test-e2e/tests/hoc-update.test.ts index c6f4846f..6ea18e82 100644 --- a/test-e2e/tests/hoc-update.test.ts +++ b/test-e2e/tests/hoc-update.test.ts @@ -1,7 +1,7 @@ import { test, expect } from "@playwright/test"; import { gotoTest } from "../pw-utils"; -test("Test HOCs on update", async ({ page }) => { +test.skip("Test HOCs on update", async ({ page }) => { const { devtools } = await gotoTest(page, "static-subtree"); await devtools diff --git a/test-e2e/tests/hooks/hook-name.test.ts b/test-e2e/tests/hooks/hook-name.test.ts index 89b757aa..a14aa3d6 100644 --- a/test-e2e/tests/hooks/hook-name.test.ts +++ b/test-e2e/tests/hooks/hook-name.test.ts @@ -1,7 +1,9 @@ import { test, expect } from "@playwright/test"; import { clickTreeItem, getHooks, gotoTest } from "../../pw-utils"; -test("Show custom hook name", async ({ page }) => { +// src/adapter/shared/hooks.ts is changed to Lynx specific logic, so it does +// break on the web version +test.skip("Show custom hook name", async ({ page }) => { const { devtools } = await gotoTest(page, "hooks-name"); // Counter @@ -62,7 +64,7 @@ test("Show custom hook name", async ({ page }) => { await expect.poll(() => getHooks(devtools)).toEqual([["useEffect", "ƒ ()"]]); }); -test("Skip custom hook name for user hook", async ({ page }) => { +test.skip("Skip custom hook name for user hook", async ({ page }) => { const { devtools } = await gotoTest(page, "hooks-name-custom"); await clickTreeItem(devtools, "App"); diff --git a/test-e2e/tests/hooks/hooks-depth-limit.test.ts b/test-e2e/tests/hooks/hooks-depth-limit.test.ts index a9956da6..fde9755e 100644 --- a/test-e2e/tests/hooks/hooks-depth-limit.test.ts +++ b/test-e2e/tests/hooks/hooks-depth-limit.test.ts @@ -1,7 +1,7 @@ import { test, expect } from "@playwright/test"; import { clickHookItem, gotoTest } from "../../pw-utils"; -test("Show a deeply nested hook tree and limit value parsing depth", async ({ +test.skip("Show a deeply nested hook tree and limit value parsing depth", async ({ page, }) => { const { devtools } = await gotoTest(page, "hooks-depth-limit"); diff --git a/test-e2e/tests/hooks/hooks-expand-state.test.ts b/test-e2e/tests/hooks/hooks-expand-state.test.ts index 6f9ff975..d2db52ba 100644 --- a/test-e2e/tests/hooks/hooks-expand-state.test.ts +++ b/test-e2e/tests/hooks/hooks-expand-state.test.ts @@ -7,7 +7,7 @@ import { locateHook, } from "../../pw-utils"; -test("Inspect useRef hook", async ({ page }) => { +test.skip("Inspect useRef hook", async ({ page }) => { const { devtools } = await gotoTest(page, "hooks-expand"); await clickTreeItem(devtools, "Memo"); diff --git a/test-e2e/tests/hooks/hooks-multiple.test.ts b/test-e2e/tests/hooks/hooks-multiple.test.ts index 698352bf..c284f149 100644 --- a/test-e2e/tests/hooks/hooks-multiple.test.ts +++ b/test-e2e/tests/hooks/hooks-multiple.test.ts @@ -6,7 +6,7 @@ import { gotoTest, } from "../../pw-utils"; -test("Show multiple hook names at the same time", async ({ page }) => { +test.skip("Show multiple hook names at the same time", async ({ page }) => { const { devtools } = await gotoTest(page, "hooks-multiple"); await clickTreeItem(devtools, "App"); diff --git a/test-e2e/tests/hooks/hooks-number.test.ts b/test-e2e/tests/hooks/hooks-number.test.ts index f0959489..55189521 100644 --- a/test-e2e/tests/hooks/hooks-number.test.ts +++ b/test-e2e/tests/hooks/hooks-number.test.ts @@ -1,7 +1,7 @@ import { test, expect } from "@playwright/test"; import { clickTreeItem, gotoTest } from "../../pw-utils"; -test("Show hook number", async ({ page }) => { +test.skip("Show hook number", async ({ page }) => { const { devtools } = await gotoTest(page, "hooks-multiple"); await clickTreeItem(devtools, "App"); @@ -11,7 +11,7 @@ test("Show hook number", async ({ page }) => { ).toHaveText(["1", "2", "3", "4", "5"]); }); -test("Show hook number only for top level items", async ({ page }) => { +test.skip("Show hook number only for top level items", async ({ page }) => { const { devtools } = await gotoTest(page, "hooks-expand"); await clickTreeItem(devtools, "Memo"); diff --git a/test-e2e/tests/hooks/useCallback.test.ts b/test-e2e/tests/hooks/useCallback.test.ts index 96b0c103..39507bd5 100644 --- a/test-e2e/tests/hooks/useCallback.test.ts +++ b/test-e2e/tests/hooks/useCallback.test.ts @@ -1,7 +1,7 @@ import { test, expect } from "@playwright/test"; import { getHooks, gotoTest, locateTreeItem } from "../../pw-utils"; -test("Inspect useCallback hook", async ({ page }) => { +test.skip("Inspect useCallback hook", async ({ page }) => { const { devtools } = await gotoTest(page, "hooks"); await devtools.locator(locateTreeItem("CallbackOnly")).click(); diff --git a/test-e2e/tests/hooks/useContext-10.5.14.test.ts b/test-e2e/tests/hooks/useContext-10.5.14.test.ts index 7e38fd9e..265b5ddb 100644 --- a/test-e2e/tests/hooks/useContext-10.5.14.test.ts +++ b/test-e2e/tests/hooks/useContext-10.5.14.test.ts @@ -1,7 +1,9 @@ import { test, expect } from "@playwright/test"; import { getHooks, gotoTest, locateTreeItem } from "../../pw-utils"; -test("Inspect useContext hook Preact 10.5.14 (goober)", async ({ page }) => { +test.skip("Inspect useContext hook Preact 10.5.14 (goober)", async ({ + page, +}) => { const { devtools } = await gotoTest(page, "goober"); await devtools.locator(locateTreeItem("a")).click(); diff --git a/test-e2e/tests/hooks/useContext.test.ts b/test-e2e/tests/hooks/useContext.test.ts index 15db22e9..4615c9fc 100644 --- a/test-e2e/tests/hooks/useContext.test.ts +++ b/test-e2e/tests/hooks/useContext.test.ts @@ -1,7 +1,7 @@ import { test, expect } from "@playwright/test"; import { getHooks, gotoTest, locateTreeItem } from "../../pw-utils"; -test("Inspect useContext hook", async ({ page }) => { +test.skip("Inspect useContext hook", async ({ page }) => { const { devtools } = await gotoTest(page, "hooks"); await devtools.locator(locateTreeItem("ContextComponent")).click(); diff --git a/test-e2e/tests/hooks/useCustomHooks.test.ts b/test-e2e/tests/hooks/useCustomHooks.test.ts index 961f0782..6443208f 100644 --- a/test-e2e/tests/hooks/useCustomHooks.test.ts +++ b/test-e2e/tests/hooks/useCustomHooks.test.ts @@ -1,7 +1,7 @@ import { test, expect } from "@playwright/test"; import { gotoTest, locateHook, locateTreeItem } from "../../pw-utils"; -test("Inspect custom hooks", async ({ page }) => { +test.skip("Inspect custom hooks", async ({ page }) => { const { devtools } = await gotoTest(page, "hooks"); await devtools.locator(locateTreeItem("CustomHooks")).click(); diff --git a/test-e2e/tests/hooks/useDebugValue-complex.test.ts b/test-e2e/tests/hooks/useDebugValue-complex.test.ts index 920f57ee..bb5fa621 100644 --- a/test-e2e/tests/hooks/useDebugValue-complex.test.ts +++ b/test-e2e/tests/hooks/useDebugValue-complex.test.ts @@ -1,7 +1,7 @@ import { test, expect } from "@playwright/test"; import { getHooks, gotoTest, locateTreeItem } from "../../pw-utils"; -test("Show custom debug value complex", async ({ page }) => { +test.skip("Show custom debug value complex", async ({ page }) => { const { devtools } = await gotoTest(page, "hooks-debug"); await devtools.locator(locateTreeItem("App")).click(); diff --git a/test-e2e/tests/hooks/useDebugValue.test.ts b/test-e2e/tests/hooks/useDebugValue.test.ts index 365e0213..d949ea5b 100644 --- a/test-e2e/tests/hooks/useDebugValue.test.ts +++ b/test-e2e/tests/hooks/useDebugValue.test.ts @@ -1,7 +1,7 @@ import { test, expect } from "@playwright/test"; import { getHooks, gotoTest, locateTreeItem } from "../../pw-utils"; -test("Show custom debug value", async ({ page }) => { +test.skip("Show custom debug value", async ({ page }) => { const { devtools } = await gotoTest(page, "hooks"); await devtools.locator(locateTreeItem("DebugValue")).click(); diff --git a/test-e2e/tests/hooks/useDeepHook.test.ts b/test-e2e/tests/hooks/useDeepHook.test.ts index 68860cab..e3b7aefd 100644 --- a/test-e2e/tests/hooks/useDeepHook.test.ts +++ b/test-e2e/tests/hooks/useDeepHook.test.ts @@ -1,7 +1,7 @@ import { test, expect } from "@playwright/test"; import { getHooks, gotoTest, locateHook, locateTreeItem } from "../../pw-utils"; -test("Inspect deep hook tree", async ({ page }) => { +test.skip("Inspect deep hook tree", async ({ page }) => { const { devtools } = await gotoTest(page, "hooks"); await devtools.locator(locateTreeItem("CustomHooks3")).click(); diff --git a/test-e2e/tests/hooks/useEffect.test.ts b/test-e2e/tests/hooks/useEffect.test.ts index 9366e516..42201414 100644 --- a/test-e2e/tests/hooks/useEffect.test.ts +++ b/test-e2e/tests/hooks/useEffect.test.ts @@ -1,7 +1,7 @@ import { test, expect } from "@playwright/test"; import { getHooks, gotoTest, locateTreeItem } from "../../pw-utils"; -test("Inspect useEffect hook", async ({ page }) => { +test.skip("Inspect useEffect hook", async ({ page }) => { const { devtools } = await gotoTest(page, "hooks"); await devtools.locator(locateTreeItem("Effect")).click(); diff --git a/test-e2e/tests/hooks/useErrorBoundary.test.ts b/test-e2e/tests/hooks/useErrorBoundary.test.ts index 55f8d3a0..3d20fab9 100644 --- a/test-e2e/tests/hooks/useErrorBoundary.test.ts +++ b/test-e2e/tests/hooks/useErrorBoundary.test.ts @@ -1,7 +1,7 @@ import { test, expect } from "@playwright/test"; import { getHooks, gotoTest, locateTreeItem } from "../../pw-utils"; -test("Inspect useErrorBoundary hook", async ({ page }) => { +test.skip("Inspect useErrorBoundary hook", async ({ page }) => { const { devtools } = await gotoTest(page, "hooks"); await devtools.locator(locateTreeItem("ErrorBoundary1")).click(); diff --git a/test-e2e/tests/hooks/useImperativeHandle.test.ts b/test-e2e/tests/hooks/useImperativeHandle.test.ts index e80e5dfb..92b4f34d 100644 --- a/test-e2e/tests/hooks/useImperativeHandle.test.ts +++ b/test-e2e/tests/hooks/useImperativeHandle.test.ts @@ -1,7 +1,7 @@ import { test, expect } from "@playwright/test"; import { getHooks, gotoTest, locateTreeItem } from "../../pw-utils"; -test("Inspect useImperativeHandle hook", async ({ page }) => { +test.skip("Inspect useImperativeHandle hook", async ({ page }) => { const { devtools } = await gotoTest(page, "hooks"); await devtools.locator(locateTreeItem("ImperativeHandle")).click(); diff --git a/test-e2e/tests/hooks/useLayoutEffect.test.ts b/test-e2e/tests/hooks/useLayoutEffect.test.ts index 66dbd620..3128214d 100644 --- a/test-e2e/tests/hooks/useLayoutEffect.test.ts +++ b/test-e2e/tests/hooks/useLayoutEffect.test.ts @@ -1,7 +1,7 @@ import { test, expect } from "@playwright/test"; import { getHooks, gotoTest, locateTreeItem } from "../../pw-utils"; -test("Inspect useLayoutEffect hook", async ({ page }) => { +test.skip("Inspect useLayoutEffect hook", async ({ page }) => { const { devtools } = await gotoTest(page, "hooks"); await devtools.locator(locateTreeItem("LayoutEffect")).click(); diff --git a/test-e2e/tests/hooks/useMemo.test.ts b/test-e2e/tests/hooks/useMemo.test.ts index 8180a743..6f52a4d9 100644 --- a/test-e2e/tests/hooks/useMemo.test.ts +++ b/test-e2e/tests/hooks/useMemo.test.ts @@ -1,7 +1,7 @@ import { test, expect } from "@playwright/test"; import { getHooks, gotoTest, locateTreeItem } from "../../pw-utils"; -test("Inspect useMemo hook", async ({ page }) => { +test.skip("Inspect useMemo hook", async ({ page }) => { const { devtools } = await gotoTest(page, "hooks"); await devtools.locator(locateTreeItem("Memo")).click(); diff --git a/test-e2e/tests/hooks/useRef-element.test.ts b/test-e2e/tests/hooks/useRef-element.test.ts index 7ec22c96..89727ad4 100644 --- a/test-e2e/tests/hooks/useRef-element.test.ts +++ b/test-e2e/tests/hooks/useRef-element.test.ts @@ -1,7 +1,7 @@ import { test, expect } from "@playwright/test"; import { getHooks, gotoTest, locateTreeItem } from "../../pw-utils"; -test("Inspect useRef-element hook", async ({ page }) => { +test.skip("Inspect useRef-element hook", async ({ page }) => { const { devtools } = await gotoTest(page, "use-ref-element"); await devtools.locator(locateTreeItem("App")).click(); diff --git a/test-e2e/tests/hooks/useRef.test.ts b/test-e2e/tests/hooks/useRef.test.ts index 2ac3d966..262120dd 100644 --- a/test-e2e/tests/hooks/useRef.test.ts +++ b/test-e2e/tests/hooks/useRef.test.ts @@ -1,7 +1,7 @@ import { test, expect } from "@playwright/test"; import { getHooks, gotoTest, locateTreeItem } from "../../pw-utils"; -test("Inspect useRef hook", async ({ page }) => { +test.skip("Inspect useRef hook", async ({ page }) => { const { devtools } = await gotoTest(page, "hooks"); await devtools.locator(locateTreeItem("RefComponent")).click(); diff --git a/test-e2e/tests/hooks/useState.test.ts b/test-e2e/tests/hooks/useState.test.ts index fc8a2d02..63ee8cbf 100644 --- a/test-e2e/tests/hooks/useState.test.ts +++ b/test-e2e/tests/hooks/useState.test.ts @@ -1,7 +1,7 @@ import { test, expect } from "@playwright/test"; import { getHooks, gotoTest, locateTreeItem } from "../../pw-utils"; -test("Inspect useState hook", async ({ page }) => { +test.skip("Inspect useState hook", async ({ page }) => { const { devtools } = await gotoTest(page, "hooks"); await devtools.locator(locateTreeItem("Counter")).click(); diff --git a/test-e2e/tests/inspect-click.test.ts b/test-e2e/tests/inspect-click.test.ts index 0f7e340f..ee1ceedd 100644 --- a/test-e2e/tests/inspect-click.test.ts +++ b/test-e2e/tests/inspect-click.test.ts @@ -1,7 +1,9 @@ import { test, expect } from "@playwright/test"; import { gotoTest } from "../pw-utils"; -test("Don't trigger events on click during inspection", async ({ page }) => { +test.skip("Don't trigger events on click during inspection", async ({ + page, +}) => { const { devtools } = await gotoTest(page, "counter"); await expect(page.locator('[data-testid="result"]')).toHaveText("Counter: 0"); diff --git a/test-e2e/tests/inspect-fragment.test.ts b/test-e2e/tests/inspect-fragment.test.ts index 46084195..3b3af3b0 100644 --- a/test-e2e/tests/inspect-fragment.test.ts +++ b/test-e2e/tests/inspect-fragment.test.ts @@ -1,7 +1,7 @@ import { test, expect } from "@playwright/test"; import { gotoTest } from "../pw-utils"; -test("Highlighting combined DOM tree of a Fragment", async ({ page }) => { +test.skip("Highlighting combined DOM tree of a Fragment", async ({ page }) => { const { devtools } = await gotoTest(page, "highlight-fragment"); // 1st test diff --git a/test-e2e/tests/inspect-highlight.test.ts b/test-e2e/tests/inspect-highlight.test.ts index ebaa4115..9a975125 100644 --- a/test-e2e/tests/inspect-highlight.test.ts +++ b/test-e2e/tests/inspect-highlight.test.ts @@ -1,7 +1,9 @@ import { test, expect } from "@playwright/test"; import { gotoTest } from "../pw-utils"; -test("Highlighting nested elements affects overlay size", async ({ page }) => { +test.skip("Highlighting nested elements affects overlay size", async ({ + page, +}) => { const { devtools } = await gotoTest(page, "counter"); await page.locator('[data-testid="result"]:has-text("Counter: 0")').waitFor(); diff --git a/test-e2e/tests/inspect-map-set.test.ts b/test-e2e/tests/inspect-map-set.test.ts index 84a934bf..7339a938 100644 --- a/test-e2e/tests/inspect-map-set.test.ts +++ b/test-e2e/tests/inspect-map-set.test.ts @@ -53,7 +53,7 @@ test("Inspect Map and Set objects", async ({ page }) => { .toEqual(JSON.stringify([[{ foo: 111 }, 12345]], null, 2)); }); -test("Inspect Map and Set objects in hooks", async ({ page }) => { +test.skip("Inspect Map and Set objects in hooks", async ({ page }) => { const { devtools } = await gotoTest(page, "inspect-map-set-hooks"); await devtools.locator(locateTreeItem("MapView")).click(); diff --git a/test-e2e/tests/inspect-scroll.test.ts b/test-e2e/tests/inspect-scroll.test.ts index 39ef3ddb..eb6773e8 100644 --- a/test-e2e/tests/inspect-scroll.test.ts +++ b/test-e2e/tests/inspect-scroll.test.ts @@ -2,7 +2,7 @@ import { test, expect } from "@playwright/test"; import { gotoTest } from "../pw-utils"; import assert from "assert"; -test("Highlighting should move with scroll", async ({ page }) => { +test.skip("Highlighting should move with scroll", async ({ page }) => { const { devtools } = await gotoTest(page, "highlight-scroll"); const inspect = '[data-testid="inspect-btn"]'; diff --git a/test-e2e/tests/inspect-select.test.ts b/test-e2e/tests/inspect-select.test.ts index b12121f3..7518281c 100644 --- a/test-e2e/tests/inspect-select.test.ts +++ b/test-e2e/tests/inspect-select.test.ts @@ -1,7 +1,7 @@ import { test, expect } from "@playwright/test"; import { getLog, gotoTest } from "../pw-utils"; -test("Should inspect during picking", async ({ page }) => { +test.skip("Should inspect during picking", async ({ page }) => { const { devtools } = await gotoTest(page, "counter"); const elem1 = '[data-testid="tree-item"][data-name="Counter"]'; diff --git a/test-e2e/tests/inspect-signal.test.ts b/test-e2e/tests/inspect-signal.test.ts index 9a7f1738..b9a455ed 100644 --- a/test-e2e/tests/inspect-signal.test.ts +++ b/test-e2e/tests/inspect-signal.test.ts @@ -1,7 +1,7 @@ import { test, expect } from "@playwright/test"; import { gotoTest, locateTreeItem } from "../pw-utils"; -test("Show signal in props and update value", async ({ page }) => { +test.skip("Show signal in props and update value", async ({ page }) => { test.skip( process.env.PREACT_VERSION !== "10", "Signals are not supported in v11 yet.", @@ -27,7 +27,7 @@ test("Show signal in props and update value", async ({ page }) => { await expect(preview).toHaveText("ƒ Signal (1)"); }); -test("Show computed signal as readonly", async ({ page }) => { +test.skip("Show computed signal as readonly", async ({ page }) => { const { devtools } = await gotoTest(page, "signals"); await devtools.locator(locateTreeItem("Display") + ":nth-child(2n)").click(); @@ -47,7 +47,7 @@ test("Show computed signal as readonly", async ({ page }) => { ).toHaveCount(0); }); -test("Show signals in hooks", async ({ page }) => { +test.skip("Show signals in hooks", async ({ page }) => { const { devtools } = await gotoTest(page, "signals"); await page.locator("button:has-text('force update')").click(); @@ -71,7 +71,7 @@ test("Show signals in hooks", async ({ page }) => { ).toHaveCount(1); }); -test("Dectect signal subscriptions", async ({ page }) => { +test.skip("Dectect signal subscriptions", async ({ page }) => { test.skip( process.env.PREACT_VERSION !== "10", "Signals are not supported in v11 yet.", @@ -101,7 +101,7 @@ test("Dectect signal subscriptions", async ({ page }) => { }); // https://github.com/preactjs/preact-devtools/issues/456 -test("Don't crash when signal hook is updated", async ({ page }) => { +test.skip("Don't crash when signal hook is updated", async ({ page }) => { test.skip( process.env.PREACT_VERSION !== "10", "Signals are not supported in v11 yet.", diff --git a/test-e2e/tests/inspect-virtual.test.ts b/test-e2e/tests/inspect-virtual.test.ts index 1a414c6d..77252c81 100644 --- a/test-e2e/tests/inspect-virtual.test.ts +++ b/test-e2e/tests/inspect-virtual.test.ts @@ -1,7 +1,7 @@ import { test, expect } from "@playwright/test"; import { gotoTest } from "../pw-utils"; -test("Scroll a virtualized element into view #333", async ({ page }) => { +test.skip("Scroll a virtualized element into view #333", async ({ page }) => { const { devtools } = await gotoTest(page, "deep-tree-2"); const selector = '[data-name="App"]'; diff --git a/test-e2e/tests/inspect.test.ts b/test-e2e/tests/inspect.test.ts index 03bbaf2e..5bdbfbcb 100644 --- a/test-e2e/tests/inspect.test.ts +++ b/test-e2e/tests/inspect.test.ts @@ -1,7 +1,7 @@ import { test, expect } from "@playwright/test"; import { getLog, gotoTest } from "../pw-utils"; -test("Inspect should select node in elements panel", async ({ page }) => { +test.skip("Inspect should select node in elements panel", async ({ page }) => { const { devtools } = await gotoTest(page, "counter"); await devtools.locator("data-testid=inspect-btn").click(); diff --git a/test-e2e/tests/profiler/flamegraph/highlight-flamegraph.test.ts b/test-e2e/tests/profiler/flamegraph/highlight-flamegraph.test.ts index 90d38d39..9195c292 100644 --- a/test-e2e/tests/profiler/flamegraph/highlight-flamegraph.test.ts +++ b/test-e2e/tests/profiler/flamegraph/highlight-flamegraph.test.ts @@ -6,7 +6,9 @@ import { locateFlame, } from "../../../pw-utils"; -test("Should highlight flamegraph node if present in DOM", async ({ page }) => { +test.skip("Should highlight flamegraph node if present in DOM", async ({ + page, +}) => { const { devtools } = await gotoTest(page, "profiler-highlight"); await devtools.locator(locateTab("PROFILER")).click(); diff --git a/test-e2e/tests/profiler/flamegraph/profiler-flamegraph-focus.test.ts b/test-e2e/tests/profiler/flamegraph/profiler-flamegraph-focus.test.ts index 9ae93f29..a4b0e5fa 100644 --- a/test-e2e/tests/profiler/flamegraph/profiler-flamegraph-focus.test.ts +++ b/test-e2e/tests/profiler/flamegraph/profiler-flamegraph-focus.test.ts @@ -7,7 +7,7 @@ import { } from "../../../pw-utils"; import { getFlameNodes } from "./utils"; -test("Focus nodes in flamegraph layout", async ({ page }) => { +test.skip("Focus nodes in flamegraph layout", async ({ page }) => { const { devtools } = await gotoTest(page, "profiler-3"); await devtools.locator(locateTab("PROFILER")).click(); diff --git a/test-e2e/tests/profiler/flamegraph/profiler-hoc.test.ts b/test-e2e/tests/profiler/flamegraph/profiler-hoc.test.ts index 20589604..20896df3 100644 --- a/test-e2e/tests/profiler/flamegraph/profiler-hoc.test.ts +++ b/test-e2e/tests/profiler/flamegraph/profiler-hoc.test.ts @@ -7,7 +7,7 @@ import { } from "../../../pw-utils"; import { getFlameNodes } from "./utils"; -test("Should work with filtered HOC roots", async ({ page }) => { +test.skip("Should work with filtered HOC roots", async ({ page }) => { const { devtools } = await gotoTest(page, "hoc-update"); await devtools.locator(locateTab("PROFILER")).click(); diff --git a/test-e2e/tests/profiler/highlight-updates-text.test.ts b/test-e2e/tests/profiler/highlight-updates-text.test.ts index 05048f35..de852c6a 100644 --- a/test-e2e/tests/profiler/highlight-updates-text.test.ts +++ b/test-e2e/tests/profiler/highlight-updates-text.test.ts @@ -1,7 +1,7 @@ import { expect, test } from "@playwright/test"; import { locateTab, gotoTest } from "../../pw-utils"; -test("Don't crash on measuring text nodes", async ({ page }) => { +test.skip("Don't crash on measuring text nodes", async ({ page }) => { const { devtools } = await gotoTest(page, "highlight-text"); await devtools.locator(locateTab("SETTINGS")).click(); diff --git a/test-e2e/tests/profiler/highlight-updates.test.ts b/test-e2e/tests/profiler/highlight-updates.test.ts index 0b3d0414..0ce4deb4 100644 --- a/test-e2e/tests/profiler/highlight-updates.test.ts +++ b/test-e2e/tests/profiler/highlight-updates.test.ts @@ -1,7 +1,7 @@ import { expect, test } from "@playwright/test"; import { locateTab, gotoTest } from "../../pw-utils"; -test("Check if highlight updates is rendered", async ({ page }) => { +test.skip("Check if highlight updates is rendered", async ({ page }) => { const { devtools } = await gotoTest(page, "todo"); await devtools.locator(locateTab("SETTINGS")).click(); diff --git a/test-e2e/tests/suspense-toggle.test.ts b/test-e2e/tests/suspense-toggle.test.ts index bb45b0f9..ac7369e0 100644 --- a/test-e2e/tests/suspense-toggle.test.ts +++ b/test-e2e/tests/suspense-toggle.test.ts @@ -39,7 +39,7 @@ function testCase(preactVersion: string) { }; } -test.describe("Display Suspense in tree view", () => { +test.describe.skip("Display Suspense in tree view", () => { test("Preact 10.5.9", testCase("10.5.9")); test("Preact 10.4.1", testCase("10.4.1")); }); diff --git a/test-e2e/tests/suspense.test.ts b/test-e2e/tests/suspense.test.ts index 3c80c735..c16b7946 100644 --- a/test-e2e/tests/suspense.test.ts +++ b/test-e2e/tests/suspense.test.ts @@ -36,9 +36,9 @@ function testCase(version: string) { }; } -test.describe("Display Suspense in tree view", () => { - test("Preact 10.5.9", testCase("10.5.9")); +test.describe.skip("Display Suspense in tree view", () => { + test.skip("Preact 10.5.9", testCase("10.5.9")); // <10.4.5, uses a component instead of a Fragment as the boundary - test("Preact 10.4.1", testCase("10.4.1")); + test.skip("Preact 10.4.1", testCase("10.4.1")); }); diff --git a/test-e2e/tests/symbol-value.test.ts b/test-e2e/tests/symbol-value.test.ts index 8f22c25e..0352d14e 100644 --- a/test-e2e/tests/symbol-value.test.ts +++ b/test-e2e/tests/symbol-value.test.ts @@ -1,7 +1,7 @@ import { test } from "@playwright/test"; import { gotoTest, locateTreeItem } from "../pw-utils"; -test("Display symbol values", async ({ page }) => { +test.skip("Display symbol values", async ({ page }) => { const { devtools } = await gotoTest(page, "symbols"); // Hooks diff --git a/tools/build-plugins/esbuild-plugins.mjs b/tools/build-plugins/esbuild-plugins.mjs index c8074456..82d17f55 100644 --- a/tools/build-plugins/esbuild-plugins.mjs +++ b/tools/build-plugins/esbuild-plugins.mjs @@ -77,7 +77,9 @@ export function renamePlugin(mapping) { if (args.errors.length) return; for (const k in mapping) { - await fs.rename(k, mapping[k], { recursive: true }); + if (fsSync.existsSync(k)) { + await fs.rename(k, mapping[k]); + } } }); }, diff --git a/tools/vitest-setup-lynx.ts b/tools/vitest-setup-lynx.ts new file mode 100644 index 00000000..3a9dc0b3 --- /dev/null +++ b/tools/vitest-setup-lynx.ts @@ -0,0 +1,32 @@ +import { performance } from "node:perf_hooks"; +import { options } from "preact"; +import { JSDOM } from "jsdom"; +import { LynxTestingEnv } from "@lynx-js/testing-environment"; + +(globalThis as any).__DEBUG__ = false; + +// Unlike the standard setup, the Lynx test run drives the adapter through the +// dual-threaded ReactLynx runtime emulated by `LynxTestingEnv`, which takes the +// host `window` directly (>=0.2, it no longer reads `global.jsdom`). +const jsdom = new JSDOM(); +(globalThis as any).jsdom = jsdom; +const lynxTestingEnv = new LynxTestingEnv({ + window: jsdom.window as unknown as Window & typeof globalThis, +}); +(globalThis as any).lynxTestingEnv = lynxTestingEnv; +lynxTestingEnv.mainThread.globalThis.getUniqueIdListBySnapshotId = () => { + return []; +}; +lynxTestingEnv.switchToBackgroundThread(); + +const { window } = jsdom; +(globalThis as any).window = window; +(globalThis as any).document = window.document; +(globalThis as any).performance = performance; +(options as any).document = window.document; + +(globalThis as any).preactDevtoolsCtx = { + ...lynxTestingEnv.mainThread.globalThis, + performance, + Blob: window.Blob, +}; diff --git a/tools/vitest-setup.ts b/tools/vitest-setup.ts index bfed56a6..2daa4e29 100644 --- a/tools/vitest-setup.ts +++ b/tools/vitest-setup.ts @@ -1,4 +1,30 @@ import { performance } from "node:perf_hooks"; +import { options } from "preact"; (globalThis as any).performance = performance; (globalThis as any).__DEBUG__ = false; + +// The `jsdom` environment already provides `window`/`document`. Wire up the +// ReactLynx-style `preactDevtoolsCtx` host object that the adapter reads DOM +// access from (see `const window = preactDevtoolsCtx` in adapter.ts), plus the +// minimal `lynx` native bridge stub the adapter expects to exist. +(options as any).document = document; + +// Copy the enumerable globals as own data properties (so tests can freely +// reassign e.g. `preactDevtoolsCtx.document`), and explicitly pull over the +// non-enumerable `Node` constructor used by `parent instanceof +// preactDevtoolsCtx.Node` in options.ts. +(globalThis as any).preactDevtoolsCtx = { + ...globalThis, + Node: (globalThis as any).Node, + performance, + Blob, +}; + +(globalThis as any).lynx = { + getNativeApp: () => { + return { + callLepusMethod: () => {}, + }; + }, +}; diff --git a/tsconfig.build.json b/tsconfig.build.json new file mode 100644 index 00000000..d9fae692 --- /dev/null +++ b/tsconfig.build.json @@ -0,0 +1,7 @@ +{ + "extends": "./tsconfig.json", + "compilerOptions": { + "rootDir": "./src" + }, + "include": ["src"] +} diff --git a/tsconfig.json b/tsconfig.json index e7741240..0fca25d9 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -9,7 +9,7 @@ "jsxImportSource": "preact", "types": ["node", "chrome", "vitest/globals"], "skipLibCheck": true, - "rootDir": "." + "outDir": "./lib" }, - "include": ["./src/global.d.ts", "./src"] + "include": ["./src/global.d.ts", "./src", "./ldt-plugin"] } diff --git a/tsconfig.vitest.json b/tsconfig.vitest.json index 039907f5..164cccd1 100644 --- a/tsconfig.vitest.json +++ b/tsconfig.vitest.json @@ -3,5 +3,10 @@ "compilerOptions": { "moduleResolution": "bundler" }, - "include": ["./vitest.config.ts", "./tools/vitest-setup.ts"] + "include": [ + "./vitest.config.ts", + "./vitest.config.lynx.ts", + "./tools/vitest-setup.ts", + "./tools/vitest-setup-lynx.ts" + ] } diff --git a/vitest.config.lynx.ts b/vitest.config.lynx.ts new file mode 100644 index 00000000..0781b5c7 --- /dev/null +++ b/vitest.config.lynx.ts @@ -0,0 +1,20 @@ +import { defineConfig } from "vitest/config"; + +// Runs the same unit suite as `vitest.config.ts`, but inside the ReactLynx +// runtime emulated by `@lynx-js/testing-environment` instead of plain jsdom. +export default defineConfig({ + define: { + __DEBUG__: "false", + }, + oxc: { + jsx: { + importSource: "preact", + }, + }, + test: { + include: ["src/**/*.test.{ts,tsx}"], + environment: "node", + globals: true, + setupFiles: ["./tools/vitest-setup-lynx.ts"], + }, +});