diff --git a/.github/PULL_REQUEST_TEMPLATE.md b/.github/PULL_REQUEST_TEMPLATE.md index fb8a9e52..463f17fd 100644 --- a/.github/PULL_REQUEST_TEMPLATE.md +++ b/.github/PULL_REQUEST_TEMPLATE.md @@ -1,28 +1,51 @@ - + ## Description - + + + ## Motivation and Context - - + + + ## How has this been tested? - - - -## Screenshots (if appropriate): + + + + +## Screenshots: + + + ## Types of changes - + + + - [ ] Bug fix (non-breaking change which fixes an issue) - [ ] New feature (non-breaking change which adds functionality) - [ ] Breaking change (fix or feature that would cause existing functionality to not work as expected) +- [ ] Refactoring (change which does not alter existing functionality) +- [ ] Documentation (changes to documentation only) ## Checklist: - - + + + + +- [ ] I have reviewed my own changes. - [ ] My code follows the code style of this project. +- [ ] I have added or updated tests where appropriate. +- [ ] My changes do not include unrelated modifications. - [ ] My change requires a change to the documentation. - [ ] I have updated the documentation accordingly. + +## AI Disclosure: + + + + + diff --git a/.github/workflows/codeql.yml b/.github/workflows/codeql.yml index 00f6bc97..9c96424d 100644 --- a/.github/workflows/codeql.yml +++ b/.github/workflows/codeql.yml @@ -27,7 +27,7 @@ jobs: steps: - name: Checkout repository - uses: actions/checkout@v6 + uses: actions/checkout@v7 - name: Initialize CodeQL uses: github/codeql-action/init@v4 diff --git a/.github/workflows/deploy-development.yml b/.github/workflows/deploy-development.yml index 9d549148..52288de5 100644 --- a/.github/workflows/deploy-development.yml +++ b/.github/workflows/deploy-development.yml @@ -21,7 +21,7 @@ jobs: # - platform: linux/arm/v7 # os: ubuntu-24.04-arm steps: - - uses: actions/checkout@v6 + - uses: actions/checkout@v7 - name: Prepare run: | @@ -123,8 +123,14 @@ jobs: - name: Create manifest list and push working-directory: ${{ runner.temp }}/digests run: | - docker buildx imagetools create $(jq -cr '.tags | map("-t " + .) | join(" ")' <<< "$DOCKER_METADATA_OUTPUT_JSON") \ - $(printf 'ghcr.io/wg-easy/wg-easy@sha256:%s ' *) + n=3 + for i in $(seq 1 $n); do + docker buildx imagetools create $(jq -cr '.tags | map("-t " + .) | join(" ")' <<< "$DOCKER_METADATA_OUTPUT_JSON") \ + $(printf 'ghcr.io/wg-easy/wg-easy@sha256:%s ' *) && break + + [ "$i" = "$n" ] && exit 1 + sleep 10 + done - name: Inspect image run: | @@ -138,7 +144,7 @@ jobs: contents: write needs: docker-merge steps: - - uses: actions/checkout@v6 + - uses: actions/checkout@v7 - name: Setup Python uses: actions/setup-python@v6 diff --git a/.github/workflows/deploy-edge.yml b/.github/workflows/deploy-edge.yml index 4e46b92a..b2e5c53c 100644 --- a/.github/workflows/deploy-edge.yml +++ b/.github/workflows/deploy-edge.yml @@ -28,7 +28,7 @@ jobs: # - platform: linux/arm/v7 # os: ubuntu-24.04-arm steps: - - uses: actions/checkout@v6 + - uses: actions/checkout@v7 with: ref: master @@ -132,8 +132,14 @@ jobs: - name: Create manifest list and push working-directory: ${{ runner.temp }}/digests run: | - docker buildx imagetools create $(jq -cr '.tags | map("-t " + .) | join(" ")' <<< "$DOCKER_METADATA_OUTPUT_JSON") \ - $(printf 'ghcr.io/wg-easy/wg-easy@sha256:%s ' *) + n=3 + for i in $(seq 1 $n); do + docker buildx imagetools create $(jq -cr '.tags | map("-t " + .) | join(" ")' <<< "$DOCKER_METADATA_OUTPUT_JSON") \ + $(printf 'ghcr.io/wg-easy/wg-easy@sha256:%s ' *) && break + + [ "$i" = "$n" ] && exit 1 + sleep 10 + done - name: Inspect image run: | @@ -147,7 +153,7 @@ jobs: contents: write needs: docker-merge steps: - - uses: actions/checkout@v6 + - uses: actions/checkout@v7 with: ref: master diff --git a/.github/workflows/deploy-pr.yml b/.github/workflows/deploy-pr.yml index ca8710fc..952879d0 100644 --- a/.github/workflows/deploy-pr.yml +++ b/.github/workflows/deploy-pr.yml @@ -24,7 +24,7 @@ jobs: # - platform: linux/arm/v7 # os: ubuntu-24.04-arm steps: - - uses: actions/checkout@v6 + - uses: actions/checkout@v7 - name: Prepare run: | diff --git a/.github/workflows/deploy.yml b/.github/workflows/deploy.yml index f45b5589..13fa3e6b 100644 --- a/.github/workflows/deploy.yml +++ b/.github/workflows/deploy.yml @@ -29,7 +29,7 @@ jobs: # - platform: linux/arm/v7 # os: ubuntu-24.04-arm steps: - - uses: actions/checkout@v6 + - uses: actions/checkout@v7 - name: Prepare run: | @@ -135,8 +135,14 @@ jobs: - name: Create manifest list and push working-directory: ${{ runner.temp }}/digests run: | - docker buildx imagetools create $(jq -cr '.tags | map("-t " + .) | join(" ")' <<< "$DOCKER_METADATA_OUTPUT_JSON") \ - $(printf 'ghcr.io/wg-easy/wg-easy@sha256:%s ' *) + n=3 + for i in $(seq 1 $n); do + docker buildx imagetools create $(jq -cr '.tags | map("-t " + .) | join(" ")' <<< "$DOCKER_METADATA_OUTPUT_JSON") \ + $(printf 'ghcr.io/wg-easy/wg-easy@sha256:%s ' *) && break + + [ "$i" = "$n" ] && exit 1 + sleep 10 + done - name: Inspect image run: | @@ -152,7 +158,7 @@ jobs: contents: write needs: docker-merge steps: - - uses: actions/checkout@v6 + - uses: actions/checkout@v7 - name: Setup Python uses: actions/setup-python@v6 diff --git a/.github/workflows/lint.yml b/.github/workflows/lint.yml index 37a46d49..2bc5860f 100644 --- a/.github/workflows/lint.yml +++ b/.github/workflows/lint.yml @@ -14,7 +14,7 @@ jobs: steps: - name: Checkout repository - uses: actions/checkout@v6 + uses: actions/checkout@v7 - uses: pnpm/action-setup@v6 name: Install pnpm @@ -22,7 +22,7 @@ jobs: run_install: false - name: Setup Node - uses: actions/setup-node@v6 + uses: actions/setup-node@v7 with: node-version: "lts/krypton" check-latest: true @@ -47,7 +47,7 @@ jobs: steps: - name: Checkout repository - uses: actions/checkout@v6 + uses: actions/checkout@v7 - uses: pnpm/action-setup@v6 name: Install pnpm @@ -55,7 +55,7 @@ jobs: run_install: false - name: Setup Node - uses: actions/setup-node@v6 + uses: actions/setup-node@v7 with: node-version: "lts/krypton" check-latest: true diff --git a/.gitignore b/.gitignore index c36465bd..2d1e2d0d 100644 --- a/.gitignore +++ b/.gitignore @@ -1,3 +1,6 @@ .DS_Store *.swp -node_modules \ No newline at end of file +node_modules + +docs/site +docs/.cache \ No newline at end of file diff --git a/.vscode/settings.json b/.vscode/settings.json index f62f2c98..691bcfba 100644 --- a/.vscode/settings.json +++ b/.vscode/settings.json @@ -26,5 +26,8 @@ "i18n-ally.sortKeys": false, "i18n-ally.keepFulfilled": false, "i18n-ally.keystyle": "nested", - "editor.gotoLocation.multipleDefinitions": "goto" + "editor.gotoLocation.multipleDefinitions": "goto", + "[toml]": { + "editor.defaultFormatter": "tamasfe.even-better-toml" + } } diff --git a/CHANGELOG.md b/CHANGELOG.md index 8c55e26e..daa29f92 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -9,6 +9,26 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ### Added +- Support disabling version check (https://github.com/wg-easy/wg-easy/pull/2648) +- OAuth integration (https://github.com/wg-easy/wg-easy/pull/2659) + +### Fixed + +- Button styling (https://github.com/wg-easy/wg-easy/pull/2666) +- Escape Prometheus label values (https://github.com/wg-easy/wg-easy/pull/2702) +- Skip ip6tables for firewall when IPv6 is disabled (https://github.com/wg-easy/wg-easy/pull/2701) + +### Changed + +- Only set sysctl if needed (https://github.com/wg-easy/wg-easy/pull/2630) +- Improve security (https://github.com/wg-easy/wg-easy/pull/2661, https://github.com/wg-easy/wg-easy/pull/2668, https://github.com/wg-easy/wg-easy/pull/2669) +- Replace mkdocs with zensical (https://github.com/wg-easy/wg-easy/pull/2667) +- Migrate to Nuxt 4 (https://github.com/wg-easy/wg-easy/pull/2660) + +## [15.3.0] - 2026-05-18 + +### Added + - AWG: support for H1-H4 ranges (https://github.com/wg-easy/wg-easy/pull/2480) - Client Firewall (https://github.com/wg-easy/wg-easy/pull/2418) - CLI: Show QR code (https://github.com/wg-easy/wg-easy/pull/2518) diff --git a/contributing.md b/contributing.md index 83cb3d94..0ab39b6d 100644 --- a/contributing.md +++ b/contributing.md @@ -2,17 +2,15 @@ First and foremost, thank you! We appreciate that you want to contribute to wg-easy, your time is valuable, and your contributions mean a lot to us. - ## Important! By contributing to this project, you: -* Agree that you have authored 100% of the content -* Agree that you have the necessary rights to the content -* Agree that you have received the necessary permissions from your employer to make the contributions (if applicable) -* Agree that the content you contribute may be provided under the Project license(s) -* Agree that, if you did not author 100% of the content, the appropriate licenses and copyrights have been added along with any other necessary attribution. - +- Agree that you have authored 100% of the content +- Agree that you have the necessary rights to the content +- Agree that you have received the necessary permissions from your employer to make the contributions (if applicable) +- Agree that the content you contribute may be provided under the Project license(s) +- Agree that, if you did not author 100% of the content, the appropriate licenses and copyrights have been added along with any other necessary attribution. ## Getting started @@ -24,7 +22,6 @@ Creating an issue is the simplest form of contributing to a project. But there a - Feature requests - Bug reports - ## Showing support for wg-easy Please keep in mind that open source software is built by people like you, who spend their free time creating things the rest the community can use. @@ -34,6 +31,20 @@ Don't have time to contribute? No worries, here are some other ways to show your - star the [project](https://github.com/wg-easy/wg-easy) - tweet your support for wg-easy +## AI Contribution Policy + +Contributions made with the assistance of AI tools are welcome, but contributors must use them responsibly and disclose that use clearly. + +1. Review AI-generated code closely before marking a pull request ready for review. +2. Manually test the changes and add appropriate automated tests where feasible. +3. Only use AI to assist in contributions that you understand well enough to explain, defend, and revise yourself during review. +4. Disclose AI-assisted content clearly. +5. Do not use AI to reply to questions about your issue or pull request. The questions are for you, not an AI model. +6. AI may be used to help draft issues and pull requests, but contributors remain responsible for the accuracy, completeness, and intent of what they submit. + +Maintainers reserve the right to close pull requests and issues that do not disclose AI assistance, that appear to be low-quality AI-generated content, or where the contributor cannot explain or defend the proposed changes themselves. + +We welcome new contributors, but cannot sustain the effort of supporting contributors who primarily defer to AI rather than engaging substantively with the review process. ## Issues @@ -71,7 +82,6 @@ Please be as descriptive as possible when creating an issue. Give us the informa - **error messages**: (required) please paste any error messages into the issue, or a [gist](https://gist.github.com/) - **extensions, plugins, helpers, etc** (if applicable): please list any extensions you're using - ### Closing issues The original poster or the maintainers of wg-easy may close an issue at any time. Typically, but not exclusively, issues are closed when: @@ -81,7 +91,6 @@ The original poster or the maintainers of wg-easy may close an issue at any time - An issue is clearly a duplicate of another issue, in which case the duplicate issue will be linked. - A discussion has clearly run its course - ## Next steps **Tips for creating idiomatic issues** diff --git a/docs/content/advanced/api.md b/docs/content/advanced/api.md index 58d5df2d..e285d98a 100644 --- a/docs/content/advanced/api.md +++ b/docs/content/advanced/api.md @@ -5,6 +5,7 @@ title: API /// warning | Breaking Changes This API is not yet stable and may change in the future. The API is currently in development and is subject to change without notice. The API is not yet documented, but we will add documentation as the API stabilizes. + /// You can use the API to interact with the application programmatically. The API is available at `/api` and supports both GET and POST requests. The API is designed to be simple and easy to use, with a focus on providing a consistent interface for all endpoints. diff --git a/docs/content/advanced/config/amnezia.md b/docs/content/advanced/config/amnezia.md index 1d4f2b5b..3e8d4d0a 100644 --- a/docs/content/advanced/config/amnezia.md +++ b/docs/content/advanced/config/amnezia.md @@ -39,14 +39,14 @@ If a parameter is not set, it will not be added to the configuration. If all Amn ### Parameter Compatibility Table -| Parameter | Can differ between server and client | Configurable on server | Configurable on client | -| --------- | ------------------------------------ | ---------------------- | ----------------------- | -| Jc | ✅ Yes | ✅ | ✅ | -| Jmin | ✅ Yes | ✅ | ✅ | -| Jmax | ✅ Yes | ✅ | ✅ | -| S1-S4 | ❌ No, must match | ✅ | ❌ (copied from server) | -| H1-H4 | ❌ No, must match | ✅ | ❌ (copied from server) | -| I1-I5 | ✅ Yes | ✅ | ✅ | +| Parameter | Can differ between server and client | Configurable on server | Configurable on client | +| --------- | ------------------------------------ | ---------------------- | ------------------------ | +| Jc | :white_check_mark: Yes | :white_check_mark: | :white_check_mark: | +| Jmin | :white_check_mark: Yes | :white_check_mark: | :white_check_mark: | +| Jmax | :white_check_mark: Yes | :white_check_mark: | :white_check_mark: | +| S1-S4 | :x: No, must match | :white_check_mark: | :x: (copied from server) | +| H1-H4 | :x: No, must match | :white_check_mark: | :x: (copied from server) | +| I1-I5 | :white_check_mark: Yes | :white_check_mark: | :white_check_mark: | ## Client Applications diff --git a/docs/content/advanced/config/external-authentication.md b/docs/content/advanced/config/external-authentication.md new file mode 100644 index 00000000..aeb33e4f --- /dev/null +++ b/docs/content/advanced/config/external-authentication.md @@ -0,0 +1,182 @@ +--- +title: External Authentication +--- + +## OAuth + +### Setup + +To enable OAuth set the env var `OAUTH_PROVIDERS` to any of the following providers: + +| Provider | Value | +| ----------------------------- | -------- | +| [Google](#google) | `google` | +| [GitHub](#github) | `github` | +| [Generic OIDC](#generic-oidc) | `oidc` | + +You can enable multiple providers by separating them with a comma: + +e.g. `google,github` + +### Auto Register + +To automatically register users that log in with an OAuth provider, set the following environment variable to `true`: + +| Env | Required | Default | Description | +| --------------------- | -------- | ------- | ------------------------ | +| `OAUTH_AUTO_REGISTER` | :x: | `false` | Enable auto-registration | + +When enabled: + +- If a user logs in with an email address that is not yet registered, a new account will be created for them. + +- If a user logs in with an email address that is already registered, their account will be linked to the OAuth provider (if not already linked), regardless of the value of `OAUTH_AUTO_REGISTER`. + +/// warning | Security + +Users will be created with Admin Permissions, as the permissions system is not yet implemented. Only enable this if you trust all users that can log in with the OAuth provider. + +Use [Allowed Domains](#allowed-domains) to restrict which users can log in. + +/// + +### Allowed Domains + +To only allow users with an email address from a specific domain to log in, set the following environment variable to the allowed domain. + +| Env | Required | Default | Description | +| ----------------------- | -------- | ------- | --------------------- | +| `OAUTH_ALLOWED_DOMAINS` | :x: | - | Allowed email domains | + +You can allow multiple domains by separating them with a comma: + +e.g. `example.com,example.org` + +### Auto Launch + +To automatically launch the OAuth login flow when visiting the login page, set the following environment variable to the provider you want to launch: + +| Env | Required | Default | Description | +| ------------------- | -------- | ------- | ----------------------------- | +| `OAUTH_AUTO_LAUNCH` | :x: | - | Auto launch an OAuth provider | + +When enabled: + +- Visiting the login page will automatically redirect to the selected provider's login page +- The user can still access the normal login page by visiting `/login?auto_launch=false` +- You can auto launch any provider by visiting `/login?auto_launch=` + +### Redirect URIs + +You have to configure the following redirect URIs in your OAuth provider: + +- `https:///api/auth//callback` + Used to log in to with the provider +- `https:///api/auth//link` + Used to link an existing account to the provider + +If your provider does not support multiple redirect URIs (e.g. GitHub) but allows multiple URIs under the same base, then configure: + +- `https:///api/auth//` + +### Provider Configuration + +#### Google + +| Env | Required | Description | +| ---------------------------- | ------------------ | -------------------- | +| `OAUTH_GOOGLE_CLIENT_ID` | :white_check_mark: | Google Client ID | +| `OAUTH_GOOGLE_CLIENT_SECRET` | :white_check_mark: | Google Client Secret | + +
Setup
+ +1. Go to [Google Cloud Console](https://console.cloud.google.com/apis/credentials) +2. Create an OAuth 2.0 Client ID (Web application) +3. Add Authorized redirect URI: See [Redirect URIs](#redirect-uris) +4. Copy the Client ID and Client Secret to the environment variables + +#### GitHub + +| Env | Required | Description | +| ---------------------------- | ------------------ | -------------------- | +| `OAUTH_GITHUB_CLIENT_ID` | :white_check_mark: | GitHub Client ID | +| `OAUTH_GITHUB_CLIENT_SECRET` | :white_check_mark: | GitHub Client Secret | + +
Setup
+ +1. Go to [GitHub Developer Settings](https://github.com/settings/developers) +2. Create a new OAuth App +3. Add Authorization callback URL: See [Redirect URIs](#redirect-uris) +4. Create a new client secret +5. Copy the Client ID and Client Secret to the environment variables + +#### Generic OIDC + +This supports generic OIDC providers like Authelia, Authentik, etc. + +The provider needs to support: + +- PKCE +- default scopes: `openid email profile` +- Client Secret Authentication `client_secret_post` + +The provider needs to be available with HTTPS and have a valid certificate. + +| Env | Required | Default | Example | Description | +| -------------------------- | ------------------ | ------- | -------------------------- | ------------------ | +| `OAUTH_OIDC_SERVER` | :white_check_mark: | - | `https://auth.example.com` | OIDC Server | +| `OAUTH_OIDC_CLIENT_ID` | :white_check_mark: | - | - | OIDC Client ID | +| `OAUTH_OIDC_CLIENT_SECRET` | :white_check_mark: | - | - | OIDC Client Secret | +| `OAUTH_OIDC_NAME` | :x: | OIDC | `Authelia` | Provider Name | + +##### Authelia Setup + +Generate Client ID and Secret: + +```shell +# Client ID +docker run --rm authelia/authelia:latest authelia crypto rand --length 72 --charset rfc3986 +# Client Secret +docker run --rm authelia/authelia:latest authelia crypto hash generate pbkdf2 --variant sha512 --random --random.length 72 --random.charset rfc3986 +``` + +```yaml +- client_id: '...' + client_name: wg-easy + client_secret: '$pbkdf2-...' + redirect_uris: + - https:///api/auth/oidc/callback + - https:///api/auth/oidc/link + scopes: + - openid + - profile + - email + authorization_policy: one_factor + pre_configured_consent_duration: 1 week + require_pkce: true + token_endpoint_auth_method: client_secret_post +``` + +#### Generic OAuth + +Not currently supported + +### Disable Password Authentication + +To disable password-based authentication and only allow login via OAuth providers, set the following environment variable to `true`: + +| Env | Required | Default | Description | +| ----------------------- | -------- | ------- | ------------------------------- | +| `DISABLE_PASSWORD_AUTH` | :x: | `false` | Disable password authentication | + +When enabled: + +- Users will not be able to log in with a password + +/// warning | Access Recovery + +Before disabling password authentication, ensure that at least one OAuth provider is configured and that you have successfully linked an administrator account. + +If no login method is available, you will not be able to log in to the application and will need to reset the configuration to regain access. + +/// diff --git a/docs/content/advanced/config/unattended-setup.md b/docs/content/advanced/config/unattended-setup.md index b0444d93..5572df99 100644 --- a/docs/content/advanced/config/unattended-setup.md +++ b/docs/content/advanced/config/unattended-setup.md @@ -23,6 +23,7 @@ These will only be used during the first start of the container. After that, the If variables are in the same group, you have to set all of them. For example, if you set `INIT_IPV4_CIDR`, you also have to set `INIT_IPV6_CIDR`. If you want to skip the setup process, you have to configure group `1` + /// /// note | Security @@ -30,4 +31,5 @@ If you want to skip the setup process, you have to configure group `1` The initial username and password is not checked for complexity. Make sure to set a long enough username and password. Otherwise, the user won't be able to log in. It's recommended to remove the variables after the setup is done to prevent the password from being exposed. + /// diff --git a/docs/content/advanced/metrics/prometheus.md b/docs/content/advanced/metrics/prometheus.md index 09ad087b..1af384d2 100644 --- a/docs/content/advanced/metrics/prometheus.md +++ b/docs/content/advanced/metrics/prometheus.md @@ -39,4 +39,5 @@ You can use the following Grafana dashboard to visualize the metrics: The Grafana dashboard is not official and is not maintained by the `wg-easy` team. If you have any issues with the dashboard, please contact the author of the dashboard. See [#1299](https://github.com/wg-easy/wg-easy/pull/1299) for more information. + /// diff --git a/docs/content/contributing/issues-and-pull-requests.md b/docs/content/contributing/issues-and-pull-requests.md index 92f36016..a58a4c31 100644 --- a/docs/content/contributing/issues-and-pull-requests.md +++ b/docs/content/contributing/issues-and-pull-requests.md @@ -9,6 +9,7 @@ This project is Open Source. That means that you can contribute on enhancements, /// note | Attention **Before opening an issue**, read the [`README`][github-file-readme] carefully, study the docs for your version (maybe [latest][docs-latest]) and your search engine you trust. The issue tracker is not meant to be used for unrelated questions! + /// When opening an issue, please provide details use case to let the community reproduce your problem. @@ -16,6 +17,7 @@ When opening an issue, please provide details use case to let the community repr /// note | Attention **Use the issue templates** to provide the necessary information. Issues which do not use these templates are not worked on and closed. + /// By raising issues, I agree to these terms and I understand, that the rules set for the issue tracker will help both maintainers as well as everyone to find a solution. @@ -39,6 +41,7 @@ When an option is marked with "not officially supported" / "unsupported", then s /// question | Motivation You want to add a feature? Feel free to start creating an issue explaining what you want to do and how you're thinking doing it. Other users may have the same need and collaboration may lead to better results. + /// ### Submit a Pull-Request diff --git a/docs/content/examples/tutorials/adguard.md b/docs/content/examples/tutorials/adguard.md index 8f357b1c..e65054ae 100644 --- a/docs/content/examples/tutorials/adguard.md +++ b/docs/content/examples/tutorials/adguard.md @@ -9,9 +9,11 @@ This tutorial is a follow-up to the official [Traefik tutorial](./traefik.md). I - A working [wg-easy](./basic-installation.md) and [Traefik](./traefik.md) setup from the previous guides. /// warning | Important: Following this guide will reset your WireGuard configuration. + The process involves re-creating the `wg-easy` container and its data, which means **all existing WireGuard clients and settings will be deleted.** You will need to create your clients again after completing this guide. + /// ## Add `adguard` configuration @@ -152,13 +154,15 @@ networks: 2. Navigate to `https://adguard.$example.com$` to begin the AdGuard Home setup. /// warning | Important: Configure AdGuard Home Admin Web Interface Port + During the initial AdGuard Home setup on the `Step 2/5` page, you **must** set the **Admin Web Interface Port** to **3000**. Do not use the default port 80, as it will not work with the Traefik configuration. After completing the setup, the AdGuard UI might appear unresponsive. This is expected. **Simply reload the page**, and the panel will display correctly. -/// > If you accidentally left it default (80), you will need to manually edit the `docker-compose.yml` file for AdGuard Home (`/etc/docker/containers/adguard/docker-compose.yml`) and change the line `traefik.http.services.adguard.loadbalancer.server.port=3000` to `traefik.http.services.adguard.loadbalancer.server.port=80`. After making this change, restart AdGuard Home by navigating to `/etc/docker/containers/adguard` and running `sudo docker compose up -d`. +/// + ## Final System Checks ### Firewall diff --git a/docs/content/examples/tutorials/basic-installation.md b/docs/content/examples/tutorials/basic-installation.md index 0ef8cddb..8df9f905 100644 --- a/docs/content/examples/tutorials/basic-installation.md +++ b/docs/content/examples/tutorials/basic-installation.md @@ -2,7 +2,7 @@ title: Basic Installation --- - + ## Requirements diff --git a/docs/content/examples/tutorials/caddy.md b/docs/content/examples/tutorials/caddy.md index b3bc2d95..c9373d92 100644 --- a/docs/content/examples/tutorials/caddy.md +++ b/docs/content/examples/tutorials/caddy.md @@ -5,6 +5,7 @@ title: Caddy /// note | Opinionated This guide is opinionated. If you use other conventions or folder layouts, feel free to change the commands and paths. + /// We're using [Caddy](https://caddyserver.com/) here as reverse proxy to serve `wg-easy` on [https://wg-easy.example.com](https://wg-easy.example.com) via TLS. diff --git a/docs/content/examples/tutorials/reverse-proxyless.md b/docs/content/examples/tutorials/reverse-proxyless.md index 2dfc1191..f7c968d8 100644 --- a/docs/content/examples/tutorials/reverse-proxyless.md +++ b/docs/content/examples/tutorials/reverse-proxyless.md @@ -7,6 +7,7 @@ title: No Reverse Proxy This is insecure. You should use a reverse proxy to secure the connection. Only use this method if you know what you are doing. + /// If you only allow access to the web UI from your local network, you can skip the reverse proxy setup. This is not recommended, but it is possible. diff --git a/docs/content/examples/tutorials/routed.md b/docs/content/examples/tutorials/routed.md index 3ed4070d..2afdd9c9 100644 --- a/docs/content/examples/tutorials/routed.md +++ b/docs/content/examples/tutorials/routed.md @@ -61,6 +61,7 @@ Pick an IPv4 and IPv6 subnet for your clients and add static routes on your rout /// note | 2001:db8::/32 The _documentation prefix_ `2001:db8::/32` (RFC 3849) used in this example is not meant for production use, replace it with your own ISP-assigned IPv6 prefix (GUA) or local prefix (ULA) + /// I want my WireGuard clients in `192.168.0.0/24` and `2001:db8:abc:0::/64`. diff --git a/docs/content/examples/tutorials/traefik.md b/docs/content/examples/tutorials/traefik.md index 51b9e134..1760f4f5 100644 --- a/docs/content/examples/tutorials/traefik.md +++ b/docs/content/examples/tutorials/traefik.md @@ -5,6 +5,7 @@ title: Traefik /// note | Opinionated This guide is opinionated. If you use other conventions or folder layouts, feel free to change the commands and paths. + /// ## Create docker compose project diff --git a/docs/content/getting-started.md b/docs/content/getting-started.md index 406fbf90..a063cbb3 100644 --- a/docs/content/getting-started.md +++ b/docs/content/getting-started.md @@ -24,6 +24,7 @@ There are a few requirements for a suitable host system: On the host, you need to have a suitable container runtime (like _Docker_ or _Podman_) installed. We assume [_Docker Compose_][docker-compose] is [installed][docker-compose-installation]. We have aligned file names and configuration conventions with the latest [Docker Compose specification][docker-compose-specification]. If you're using podman, make sure to read the related [documentation][docs-podman]. + /// [docker-compose]: https://docs.docker.com/compose/ @@ -69,6 +70,7 @@ When publishing a tag we follow the [Semantic Versioning][semver] specification. /// danger | Use the Correct Commands For Stopping and Starting `wg-easy` **Use `sudo docker compose up / down`, not `sudo docker compose start / stop`**. Otherwise, the container is not properly destroyed and you may experience problems during startup because of inconsistent state. + /// **That's it! It really is that easy**. diff --git a/docs/content/guides/admin.md b/docs/content/guides/admin.md index 66c765b3..5f3d0572 100644 --- a/docs/content/guides/admin.md +++ b/docs/content/guides/admin.md @@ -23,7 +23,9 @@ This feature is currently experimental. While functional, it should be thoroughl - The feature cannot be enabled if these tools are not available /// note + Most Linux distributions include iptables by default. If you're running in a minimal container environment, you may need to install the `iptables` package on the host system. + /// **Enable this feature if you want to:** diff --git a/docs/content/guides/clients.md b/docs/content/guides/clients.md index 6314adac..edb514e1 100644 --- a/docs/content/guides/clients.md +++ b/docs/content/guides/clients.md @@ -62,7 +62,9 @@ Protocol specifiers (`/tcp` or `/udp`) require a port number. The following form - **Disable for specific client**: To disable firewall filtering for a single client while keeping it enabled for others, add `0.0.0.0/0, ::/0` to allow all traffic /// note + To allow clients to reach the VPN server itself (e.g. for DNS), include the server's VPN address in the firewall allowed IPs. + /// **Use Case Examples**: diff --git a/docs/content/index.md b/docs/content/index.md index e15fd9c0..6c6c8616 100644 --- a/docs/content/index.md +++ b/docs/content/index.md @@ -9,6 +9,7 @@ hide: /// info | This Documentation is Versioned **Make sure** to select the correct version of this documentation! It should match the version of the image you are using. The default version corresponds to [the most recent stable release][docs-tagging]. + /// This documentation provides you not only with the basic setup and configuration of `wg-easy` but also with advanced configuration, elaborate usage scenarios, detailed examples, hints and more. diff --git a/docs/mkdocs.yml b/docs/mkdocs.yml deleted file mode 100644 index 5247b1c8..00000000 --- a/docs/mkdocs.yml +++ /dev/null @@ -1,87 +0,0 @@ -site_name: 'wg-easy' -site_description: 'The easiest way to run WireGuard VPN + Web-based Admin UI.' -site_author: 'WireGuard Easy' -copyright: > -

- © Wireguard Easy
- This project is licensed under AGPL-3.0-only.
- This project is not affiliated, associated, authorized, endorsed by, or in any way officially connected with Jason A. Donenfeld, ZX2C4 or Edge Security
- "WireGuard" and the "WireGuard" logo are registered trademarks of Jason A. Donenfeld -

- -repo_url: https://github.com/wg-easy/wg-easy -repo_name: wg-easy - -edit_uri: 'edit/master/docs/content' - -docs_dir: 'content/' - -site_url: https://wg-easy.github.io/wg-easy - -theme: - name: material - favicon: assets/logo/favicon.png - logo: assets/logo/logo.png - icon: - repo: fontawesome/brands/github - features: - - navigation.tabs - - navigation.top - - navigation.expand - - navigation.instant - - content.action.edit - - content.action.view - - content.code.annotate - palette: - # Light mode - - media: '(prefers-color-scheme: light)' - scheme: default - primary: grey - accent: red - toggle: - icon: material/weather-night - name: Switch to dark mode - # Dark mode - - media: '(prefers-color-scheme: dark)' - scheme: slate - primary: grey - accent: red - toggle: - icon: material/weather-sunny - name: Switch to light mode - -extra: - version: - provider: mike - -markdown_extensions: - - toc: - anchorlink: true - - abbr - - attr_list - - pymdownx.blocks.admonition: - types: - - danger - - note - - info - - question - - warning - - pymdownx.details - - pymdownx.superfences: - custom_fences: - - name: mermaid - class: mermaid - format: !!python/name:pymdownx.superfences.fence_code_format - - pymdownx.tabbed: - alternate_style: true - slugify: !!python/object/apply:pymdownx.slugs.slugify - kwds: - case: lower - - pymdownx.tasklist: - custom_checkbox: true - - pymdownx.magiclink - - pymdownx.inlinehilite - - pymdownx.tilde - - pymdownx.emoji: - emoji_index: !!python/name:material.extensions.emoji.twemoji - emoji_generator: !!python/name:material.extensions.emoji.to_svg diff --git a/docs/requirements.txt b/docs/requirements.txt index e0aaf166..5640c9b8 100644 --- a/docs/requirements.txt +++ b/docs/requirements.txt @@ -1,4 +1,2 @@ -mkdocs-material -pillow -cairosvg -mike +zensical==0.0.45 +git+https://github.com/squidfunk/mike.git diff --git a/docs/zensical.toml b/docs/zensical.toml new file mode 100644 index 00000000..98a3a977 --- /dev/null +++ b/docs/zensical.toml @@ -0,0 +1,97 @@ +[project] +site_name = "wg-easy" +site_description = "The easiest way to run WireGuard VPN + Web-based Admin UI." +site_author = "WireGuard Easy" +copyright = """ +

Wireguard Easy
+This project is licensed under AGPL-3.0-only.
+This project is not affiliated, associated, authorized, endorsed by, or in any way officially connected with Jason A. Donenfeld, ZX2C4 or Edge Security
+"WireGuard" and the "WireGuard" logo are registered trademarks of Jason A. Donenfeld +

+""" + +repo_url = "https://github.com/wg-easy/wg-easy" +repo_name = "wg-easy" + +edit_uri = "edit/master/docs/content" + +docs_dir = "content/" + +site_url = "https://wg-easy.github.io/wg-easy" + +[project.theme] +variant = "modern" +favicon = "assets/logo/favicon.png" +logo = "assets/logo/logo.png" +features = [ + "navigation.instant", + "navigation.tabs", + "navigation.expand", + "navigation.path", + "navigation.top", + "content.action.edit", + "content.action.view", + "content.code.copy", + "content.code.annotate", +] + +[project.theme.icon] +repo = "fontawesome/brands/github" + +# Palette toggle for automatic mode +[[project.theme.palette]] +media = "(prefers-color-scheme)" +toggle.icon = "lucide/sun-moon" +toggle.name = "Switch to light mode" + +# Palette toggle for light mode +[[project.theme.palette]] +media = "(prefers-color-scheme: light)" +scheme = "default" +primary = "grey" +accent = "red" +toggle.icon = "lucide/sun" +toggle.name = "Switch to dark mode" + +# Palette toggle for dark mode +[[project.theme.palette]] +media = "(prefers-color-scheme: dark)" +scheme = "slate" +primary = "grey" +accent = "red" +toggle.icon = "lucide/moon" +toggle.name = "Switch to system preference" + +# [project.plugins.privacy] + +[project.extra.version] +provider = "mike" + +[project.markdown_extensions.pymdownx.blocks.admonition] +types = ["danger", "note", "info", "question", "warning"] + +[project.markdown_extensions.md_in_html] + +[project.markdown_extensions.toc] +permalink = true + +[project.markdown_extensions.pymdownx.details] + +[project.markdown_extensions.pymdownx.emoji] +emoji_generator = "zensical.extensions.emoji.to_svg" +emoji_index = "zensical.extensions.emoji.twemoji" + +[project.markdown_extensions.pymdownx.highlight] +anchor_linenums = true +line_spans = "__span" +pygments_lang_class = true + +[project.markdown_extensions.pymdownx.inlinehilite] + +[project.markdown_extensions.pymdownx.smartsymbols] + +[project.markdown_extensions.pymdownx.superfences] +custom_fences = [ + { name = "mermaid", class = "mermaid", format = "pymdownx.superfences.fence_code_format" }, +] diff --git a/package.json b/package.json index d95f8df9..ab92bc72 100644 --- a/package.json +++ b/package.json @@ -5,13 +5,13 @@ "dev": "docker compose -f docker-compose.dev.yml up wg-easy --build", "cli:dev": "docker compose -f docker-compose.dev.yml run --build --rm -it wg-easy cli:dev", "build": "docker build -t wg-easy .", - "docs:preview": "docker run --rm -it -p 8080:8080 -v ./docs:/docs squidfunk/mkdocs-material serve -a 0.0.0.0:8080", + "docs:preview": "docker run --rm -it -p 8080:8080 -v ./docs:/docs zensical/zensical serve -a 0.0.0.0:8080", "scripts:version": "bash scripts/version.sh", "scripts:i18n": "bash scripts/i18n.sh", "format:check:docs": "prettier --check docs" }, "devDependencies": { - "prettier": "^3.8.3" + "prettier": "^3.9.5" }, - "packageManager": "pnpm@11.5.0" + "packageManager": "pnpm@11.15.1" } diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 375957c6..101ea459 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -9,16 +9,16 @@ importers: .: devDependencies: prettier: - specifier: ^3.8.3 - version: 3.8.3 + specifier: ^3.9.5 + version: 3.9.5 packages: - prettier@3.8.3: - resolution: {integrity: sha512-7igPTM53cGHMW8xWuVTydi2KO233VFiTNyF5hLJqpilHfmn8C8gPf+PS7dUT64YcXFbiMGZxS9pCSxL/Dxm/Jw==} + prettier@3.9.5: + resolution: {integrity: sha512-/FVl766LpUfB5vXgCYOYa0MeV/441Ia99AeICQIQFTY/Nw0roZwULcXpku5i1/m5kt/baz+s4Zogspd839HSMg==} engines: {node: '>=14'} hasBin: true snapshots: - prettier@3.8.3: {} + prettier@3.9.5: {} diff --git a/src/app/components/Base/FormSecondaryButton.vue b/src/app/components/Base/FormSecondaryButton.vue new file mode 100644 index 00000000..d9c6c71a --- /dev/null +++ b/src/app/components/Base/FormSecondaryButton.vue @@ -0,0 +1,26 @@ + + + diff --git a/src/app/components/Clients/Sort.vue b/src/app/components/Clients/Sort.vue index e6db6db4..bbc8e057 100644 --- a/src/app/components/Clients/Sort.vue +++ b/src/app/components/Clients/Sort.vue @@ -1,6 +1,6 @@ diff --git a/src/app/components/Form/SecondaryActionField.vue b/src/app/components/Form/SecondaryActionField.vue index 7d8cefaf..77c80fff 100644 --- a/src/app/components/Form/SecondaryActionField.vue +++ b/src/app/components/Form/SecondaryActionField.vue @@ -1,16 +1,32 @@ diff --git a/src/app/components/Header/LangSelector.vue b/src/app/components/Header/LangSelector.vue index c0452def..1d302e9e 100644 --- a/src/app/components/Header/LangSelector.vue +++ b/src/app/components/Header/LangSelector.vue @@ -1,12 +1,14 @@ - - diff --git a/src/app/pages/login/2fa.vue b/src/app/pages/login/2fa.vue new file mode 100644 index 00000000..68e83877 --- /dev/null +++ b/src/app/pages/login/2fa.vue @@ -0,0 +1,108 @@ + + + diff --git a/src/app/pages/login/index.vue b/src/app/pages/login/index.vue new file mode 100644 index 00000000..39657322 --- /dev/null +++ b/src/app/pages/login/index.vue @@ -0,0 +1,147 @@ + + + diff --git a/src/app/pages/me.vue b/src/app/pages/me.vue index b0bb54a7..52a666e6 100644 --- a/src/app/pages/me.vue +++ b/src/app/pages/me.vue @@ -27,6 +27,7 @@ {{ $t('general.password') }} {{ $t('general.2fa') }} -
+

@@ -93,7 +95,7 @@

@@ -113,6 +115,60 @@

+ + + {{ $t('general.externalAuth') }} + + + + + @@ -123,8 +179,18 @@ import { encodeQR } from 'qr'; const authStore = useAuthStore(); +const { data: authMethods } = await useFetch('/api/auth/methods'); + const name = ref(authStore.userData?.name); const email = ref(authStore.userData?.email); +const hasPassword = computed(() => authStore.userData?.hasPassword); +const oauthProvider = computed(() => authStore.userData?.oauthProvider); +const oauthProviderInfo = computed(() => { + if (!authStore.userData?.oauthProvider) { + return null; + } + return authMethods.value?.providers?.[authStore.userData.oauthProvider]; +}); const _submit = useSubmit( (data) => @@ -158,13 +224,14 @@ const _updatePassword = useSubmit( currentPassword.value = ''; newPassword.value = ''; confirmPassword.value = ''; + return authStore.update(); }, } ); function updatePassword() { return _updatePassword({ - currentPassword: currentPassword.value, + currentPassword: hasPassword.value ? currentPassword.value : null, newPassword: newPassword.value, confirmPassword: confirmPassword.value, }); @@ -249,4 +316,21 @@ async function disable2fa() { currentPassword: disable2faPassword.value, }); } + +const _unlinkOauth = useSubmit( + (data) => + $fetch(`/api/auth/unlink`, { + method: 'post', + body: data, + }), + { + revert: async () => { + return authStore.update(); + }, + } +); + +async function unlinkOauth() { + return _unlinkOauth({}); +} diff --git a/src/app/stores/auth.ts b/src/app/stores/auth.ts index 64bac790..64aeb889 100644 --- a/src/app/stores/auth.ts +++ b/src/app/stores/auth.ts @@ -1,5 +1,4 @@ import type { H3Event } from 'h3'; -import type { SharedPublicUser } from '~~/shared/utils/permissions'; export const useAuthStore = defineStore('Auth', () => { const userData = useState('user-data', () => null); diff --git a/src/app/stores/clients.ts b/src/app/stores/clients.ts index e44e6b06..e7fc774e 100644 --- a/src/app/stores/clients.ts +++ b/src/app/stores/clients.ts @@ -31,9 +31,12 @@ export const useClientsStore = defineStore('Clients', () => { const clients = ref(null); const clientsPersist = ref>({}); - const searchParams = ref({ - filter: undefined as string | undefined, - }); + const filter = ref(undefined); + + const searchParams = computed(() => ({ + filter: filter.value, + sort: globalStore.sortClient, + })); const { data: _clients, refresh: _refresh } = useFetch('/api/client', { method: 'get', @@ -43,7 +46,7 @@ export const useClientsStore = defineStore('Clients', () => { // TODO: rewrite async function refresh({ updateCharts = false } = {}) { await _refresh(); - let transformedClients = _clients.value?.map((client) => { + const transformedClients = _clients.value?.map((client) => { let avatar = undefined; if (client.name.includes('@') && client.name.includes('.')) { avatar = `https://gravatar.com/avatar/${sha256(client.name.toLowerCase().trim())}.jpg`; @@ -126,21 +129,12 @@ export const useClientsStore = defineStore('Clients', () => { }; }); - // TODO: move sort to backend - if (transformedClients !== undefined) { - transformedClients = sortByProperty( - transformedClients, - 'name', - globalStore.sortClient - ); - } - clients.value = transformedClients ?? null; } - function setSearchQuery(filter: string) { + function setSearchQuery(query: string) { clients.value = null; - searchParams.value.filter = filter || undefined; + filter.value = query || undefined; } return { clients, clientsPersist, refresh, _clients, setSearchQuery }; diff --git a/src/app/stores/global.ts b/src/app/stores/global.ts index aa28ca13..04655d11 100644 --- a/src/app/stores/global.ts +++ b/src/app/stores/global.ts @@ -6,7 +6,7 @@ export const useGlobalStore = defineStore('Global', () => { } ); - const sortClient = ref(true); // Sort clients by name, true = asc, false = desc + const sortClient = ref<'asc' | 'desc'>('asc'); const uiShowCharts = useCookie('uiShowCharts', { default: () => false, diff --git a/src/app/utils/types.ts b/src/app/utils/types.ts index 0736ab97..b293ce98 100644 --- a/src/app/utils/types.ts +++ b/src/app/utils/types.ts @@ -4,3 +4,5 @@ export type ToastParams = { title: string; message: string; }; + +export type OAUTH_PROVIDER = 'google' | 'github' | 'oidc'; diff --git a/src/cli/admin/reset.ts b/src/cli/admin/reset.ts index 07743d2b..a9725b6b 100644 --- a/src/cli/admin/reset.ts +++ b/src/cli/admin/reset.ts @@ -2,8 +2,8 @@ import { defineCommand } from 'citty'; import { consola } from 'consola'; import { eq } from 'drizzle-orm'; -import { db, schema } from '../db'; -import { hashPassword } from '../../server/utils/password'; +import { db, schema } from '#cli/db'; +import { hashPassword } from '#server/utils/password'; export default defineCommand({ meta: { diff --git a/src/cli/build.js b/src/cli/build.js index 143a47bc..e4280258 100644 --- a/src/cli/build.js +++ b/src/cli/build.js @@ -1,25 +1,58 @@ // @ts-check +import { writeFile, mkdir } from 'node:fs/promises'; import { fileURLToPath } from 'node:url'; + import esbuild from 'esbuild'; -esbuild.build({ +const isTrace = + process.argv.slice(2).findIndex((arg) => arg === '--trace') !== -1; + +/** + * Writes files with needed imports to `../node_modules/.cache/wg-easy/trace.mjs` + * + * @param {import('esbuild').Metafile} metafile + */ +async function writeTrace(metafile) { + const paths = [ + ...new Set( + Object.values(metafile.outputs).flatMap((v) => + v.imports.map((v) => v.path) + ) + ), + ]; + const imports = paths.map((v) => `import '${v}';`).join('\n'); + + const folderUrl = new URL('../node_modules/.cache/wg-easy/', import.meta.url); + const folder = fileURLToPath(folderUrl); + const filePath = fileURLToPath(new URL('./trace.mjs', folderUrl)); + + await mkdir(folder, { recursive: true }); + await writeFile(filePath, imports); +} + +function getOverrides() { + if (isTrace) { + return { + outfile: undefined, + write: false, + }; + } + return {}; +} + +const result = await esbuild.build({ entryPoints: [fileURLToPath(new URL('./index.ts', import.meta.url))], bundle: true, outfile: fileURLToPath(new URL('../.output/server/cli.mjs', import.meta.url)), platform: 'node', format: 'esm', - plugins: [ - { - name: 'make-all-packages-external', - setup(build) { - let filter = /^[^./]|^\.[^./]|^\.\.[^/]/; // Must not start with "/" or "./" or "../" - build.onResolve({ filter }, (args) => ({ - path: args.path, - external: true, - })); - }, - }, - ], + packages: 'external', logLevel: 'info', + metafile: true, + ...getOverrides(), }); + +if (isTrace) { + await writeTrace(result.metafile); +} diff --git a/src/cli/clients/list.ts b/src/cli/clients/list.ts index 3b45958d..e060badd 100644 --- a/src/cli/clients/list.ts +++ b/src/cli/clients/list.ts @@ -1,7 +1,7 @@ import { defineCommand } from 'citty'; import { consola } from 'consola'; -import { db } from '../db'; +import { db } from '#cli/db'; export default defineCommand({ meta: { diff --git a/src/cli/clients/qr.ts b/src/cli/clients/qr.ts index 9c76d9ad..f0b7a33d 100644 --- a/src/cli/clients/qr.ts +++ b/src/cli/clients/qr.ts @@ -2,9 +2,9 @@ import { defineCommand } from 'citty'; import { consola } from 'consola'; import { eq } from 'drizzle-orm'; -import { wg } from '../../server/utils/wgHelper'; -import { encodeQRCodeTerm } from '../../server/utils/qr'; -import { db, schema } from '../db'; +import { db, schema } from '#cli/db'; +import { wg } from '#server/utils/wgHelper'; +import { encodeQRCodeTerm } from '#server/utils/qr'; export default defineCommand({ meta: { diff --git a/src/cli/db.ts b/src/cli/db.ts index 70945378..63b68555 100644 --- a/src/cli/db.ts +++ b/src/cli/db.ts @@ -1,7 +1,7 @@ import { createClient } from '@libsql/client'; import { drizzle } from 'drizzle-orm/libsql'; -import * as schema from '../server/database/schema'; +import * as schema from '#server/database/schema'; //const client = createClient({ url: 'file:../data/wg-easy.db' }); const client = createClient({ url: 'file:/etc/wireguard/wg-easy.db' }); diff --git a/src/cli/index.ts b/src/cli/index.ts index 69de8314..bbb2c353 100644 --- a/src/cli/index.ts +++ b/src/cli/index.ts @@ -6,9 +6,10 @@ import { defineCommand, runMain } from 'citty'; import packageJson from '../package.json'; // Commands -import dbAdminReset from './admin/reset'; -import clientsList from './clients/list'; -import clientsQr from './clients/qr'; +import clientsList from '#cli/clients/list'; +import clientsQr from '#cli/clients/qr'; +import dbAdminReset from '#cli/admin/reset'; + const subCommands = [dbAdminReset, clientsList, clientsQr] as const; // from citty diff --git a/src/cli/tsconfig.json b/src/cli/tsconfig.json index 6a1a3386..698f1a8f 100644 --- a/src/cli/tsconfig.json +++ b/src/cli/tsconfig.json @@ -6,7 +6,12 @@ "esModuleInterop": true, "strict": true, "skipLibCheck": true, - "moduleResolution": "bundler" + "moduleResolution": "bundler", + "paths": { + "#cli/*": ["./*"], + "#server/*": ["../server/*"], + "#db/*": ["../server/database/*"] + } }, "include": ["./**/*.ts"] } diff --git a/src/eslint.config.mjs b/src/eslint.config.mjs index a63a9f85..5b12463a 100644 --- a/src/eslint.config.mjs +++ b/src/eslint.config.mjs @@ -1,10 +1,11 @@ import eslintConfigPrettier from 'eslint-config-prettier'; + import withNuxt from './.nuxt/eslint.config.mjs'; export default withNuxt([ { rules: { - 'import/order': 'warn', + 'import/order': ['warn', { 'newlines-between': 'always' }], }, }, eslintConfigPrettier, diff --git a/src/i18n/localeDetector.ts b/src/i18n/localeDetector.ts index 88482a18..b2a7131e 100644 --- a/src/i18n/localeDetector.ts +++ b/src/i18n/localeDetector.ts @@ -1,3 +1,11 @@ +import { + tryCookieLocale, + tryHeaderLocale, + tryQueryLocale, +} from '@intlify/utils/h3'; + +import { defineI18nLocaleDetector } from '#imports'; + export default defineI18nLocaleDetector((event, config) => { const query = tryQueryLocale(event, { lang: '' }); if (query) { diff --git a/src/i18n/locales/en.json b/src/i18n/locales/en.json index 86120f19..f91768df 100644 --- a/src/i18n/locales/en.json +++ b/src/i18n/locales/en.json @@ -20,7 +20,11 @@ "2faKey": "TOTP Key", "2faCodeDesc": "Enter the code from your authenticator app.", "disable2fa": "Disable Two Factor Authentication", - "disable2faDesc": "Enter your password to disable Two Factor Authentication." + "disable2faDesc": "Enter your password to disable Two Factor Authentication.", + "linkOauth": "Link your account with an external provider", + "unlinkOauth": "Unlink", + "linkedWith": "Linked with {0}", + "providerDisabled": "Your currently linked provider is not enabled" }, "general": { "name": "Name", @@ -28,6 +32,7 @@ "password": "Password", "newPassword": "New Password", "updatePassword": "Update Password", + "addPassword": "Add Password", "mtu": "MTU", "allowedIps": "Allowed IPs", "dns": "DNS", @@ -41,7 +46,8 @@ "confirmPassword": "Confirm Password", "loading": "Loading...", "2fa": "Two Factor Authentication", - "2faCode": "TOTP Code" + "2faCode": "TOTP Code", + "externalAuth": "External Authentication" }, "setup": { "welcome": "Welcome to your first setup of wg-easy", @@ -72,11 +78,14 @@ }, "login": { "signIn": "Sign In", + "signInWith": "Sign in with {0}", + "or": "or", "rememberMe": "Remember me", "rememberMeDesc": "Stay logged after closing the browser", "insecure": "You can't log in with an insecure connection. Use HTTPS.", "2faRequired": "Two Factor Authentication is required", - "2faWrong": "Two Factor Authentication is wrong" + "2faWrong": "Two Factor Authentication is wrong", + "loginExpired": "Login expired. Try again" }, "client": { "empty": "There are no clients yet.", @@ -196,7 +205,9 @@ "validBoolean": "{0} must be a valid boolean", "validArray": "{0} must be a valid array", "stringMin": "{0} must be at least {1} Character", - "numberMin": "{0} must be at least {1}" + "stringMax": "{0} must be at most {1} Character", + "numberMin": "{0} must be at least {1}", + "numberMax": "{0} must be at most {1}" }, "client": { "id": "Client ID", diff --git a/src/i18n/locales/ko.json b/src/i18n/locales/ko.json index e712aa3c..c28d1fd5 100644 --- a/src/i18n/locales/ko.json +++ b/src/i18n/locales/ko.json @@ -20,7 +20,11 @@ "2faKey": "TOTP 키", "2faCodeDesc": "인증기 앱에서 코드를 입력하십시오.", "disable2fa": "2단계 인증 비활성화", - "disable2faDesc": "2단계 인증을 비활성화하려면 비밀번호를 입력하세요." + "disable2faDesc": "2단계 인증을 비활성화하려면 비밀번호를 입력하세요.", + "linkOauth": "외부 제공자와 계정 연결", + "unlinkOauth": "연결 해제", + "linkedWith": "{0}와(과) 연결됨", + "providerDisabled": "현재 연결된 제공자가 활성화되어 있지 않습니다" }, "general": { "name": "이름", @@ -28,6 +32,7 @@ "password": "비밀번호", "newPassword": "새 비밀번호", "updatePassword": "비밀번호 업데이트", + "addPassword": "비밀번호 추가", "mtu": "MTU", "allowedIps": "허용된 IP", "dns": "DNS", @@ -41,7 +46,8 @@ "confirmPassword": "비밀번호 확인", "loading": "로딩 중...", "2fa": "2단계 인증", - "2faCode": "TOTP 코드" + "2faCode": "TOTP 코드", + "externalAuth": "외부 인증" }, "setup": { "welcome": "wg-easy의 첫 번째 설정에 오신 것을 환영합니다.", @@ -72,6 +78,8 @@ }, "login": { "signIn": "로그인", + "signInWith": "{0}(으)로 로그인", + "or": "또는", "rememberMe": "로그인 상태 유지", "rememberMeDesc": "브라우저를 닫은 후에도 로그인 유지", "insecure": "안전하지 않은 연결로 로그인할 수 없습니다. HTTPS를 사용하세요.", @@ -88,6 +96,7 @@ "name": "이름", "expireDate": "만료 날짜", "expireDateDesc": "클라이언트가 비활성화될 날짜. 영구적으로 비워두기", + "delete": "삭제", "deleteClient": "클라이언트 삭제", "deleteDialog1": "정말로 삭제하시겠습니까", "deleteDialog2": "이 작업은 실행 취소할 수 없습니다.", @@ -116,7 +125,14 @@ "dnsDesc": "클라이언트가 사용할 DNS 서버(전역 구성 무시)", "notConnected": "클라이언트가 연결되지 않음", "endpoint": "엔드포인트", - "endpointDesc": "WireGuard에 연결된 클라이언트의 IP 주소" + "endpointDesc": "WireGuard에 연결된 클라이언트의 IP 주소", + "search": "클라이언트 검색...", + "config": "구성", + "viewConfig": "구성 보기", + "firewallIps": "방화벽 허용 IP", + "firewallIpsDesc": "이 클라이언트가 접근할 수 있는 목적지 IP/CIDR(서버 측 적용). 허용된 IP를 사용하려면 비워 두십시오. 선택적 포트 및 프로토콜 필터링을 지원합니다. 구문은 문서를 참조하십시오.", + "downloadPng": "PNG 다운로드", + "copyPng": "PNG 복사" }, "dialog": { "change": "변경", @@ -126,7 +142,8 @@ "toast": { "success": "성공", "saved": "저장됨", - "error": "오류" + "error": "오류", + "unknown": "알 수 없는 오류. 자세한 내용은 콘솔을 참조하십시오" }, "form": { "actions": "작업", @@ -171,7 +188,10 @@ "restart": "인터페이스 재시작", "restartDesc": "WireGuard 인터페이스를 재시작합니다.", "restartWarn": "인터페이스를 재시작하시겠습니까? 이 작업은 모든 클라이언트를 연결 해제합니다.", - "restartSuccess": "인터페이스가 재시작되었습니다" + "restartSuccess": "인터페이스가 재시작되었습니다", + "firewall": "트래픽 필터링", + "firewallEnabled": "클라이언트별 방화벽 활성화", + "firewallEnabledDesc": "iptables를 사용하여 클라이언트 트래픽을 특정 목적지 IP로 제한합니다. 활성화하면 각 클라이언트에 허용된 목적지를 구성할 수 있습니다." }, "introText": "관리 패널에 오신 것을 환영합니다.\n\n여기에서 일반 설정, 구성, 인터페이스 설정 및 후크를 관리할 수 있습니다.\n\n사이드바에서 섹션 중 하나를 선택하여 시작하세요." }, @@ -179,6 +199,7 @@ "generic": { "required": "{0}은(는) 필수입니다.", "validNumber": "{0}은(는) 유효한 숫자여야 합니다.", + "validNumberRange": "{0}은(는) 유효한 숫자 또는 숫자 범위여야 합니다", "validString": "{0}은 유효한 문자열이어야 합니다", "validBoolean": "{0}은(는) 유효한 불리언이어야 합니다.", "validArray": "{0}는 유효한 배열이어야 합니다", @@ -191,7 +212,9 @@ "expiresAt": "만료 시간", "address4": "IPv4 주소", "address6": "IPv6 주소", - "serverAllowedIps": "서버 허용된 IP" + "serverAllowedIps": "서버 허용된 IP", + "firewallIps": "방화벽 허용 IP", + "firewallIpsInvalid": "잘못된 방화벽 IP 항목입니다. 지원되는 구문은 문서를 참조하십시오." }, "user": { "username": "사용자 이름", @@ -236,5 +259,47 @@ "postUp": "PostUp", "preDown": "PreDown", "postDown": "PostDown" + }, + "copy": { + "notSupported": "복사가 지원되지 않습니다", + "copied": "복사됨!", + "failed": "복사 실패", + "copy": "복사" + }, + "awg": { + "jCLabel": "정크 패킷 수 (Jc)", + "jCDescription": "보낼 정크 패킷의 수 (1-128, 권장: 4-12)", + "jMinLabel": "정크 패킷 최소 크기 (Jmin)", + "jMinDescription": "정크 패킷의 최소 크기 (0-1279*, 권장: 8, Jmax보다 작아야 함)", + "jMaxLabel": "정크 패킷 최대 크기 (Jmax)", + "jMaxDescription": "정크 패킷의 최대 크기 (1-1280*, 권장: 80, Jmin보다 커야 함)", + "s1Label": "초기화 패킷 정크 크기 (S1)", + "s1Description": "초기화 패킷 정크 크기 (0-1132[1280* - 148 = 1132], 권장: 15-150, S1+56 ≠ S2)", + "s2Label": "응답 패킷 정크 크기 (S2)", + "s2Description": "응답 패킷 정크 크기 (0-1188[1280* - 92 = 1188], 권장: 15-150)", + "s3Label": "쿠키 응답 패킷 정크 크기 (S3)", + "s3Description": "쿠키 응답 패킷 정크 크기", + "s4Label": "전송 패킷 정크 크기 (S4)", + "s4Description": "전송 패킷 정크 크기", + "h1Label": "초기화 매직 헤더 (H1)", + "h1Description": "초기화 패킷 헤더 값 또는 범위 (X 또는 X-Y, X", + "i2Label": "특수 정크 패킷 2 (I2)", + "i2Description": "16진수 형식의 프로토콜 모방 패킷: ", + "i3Label": "특수 정크 패킷 3 (I3)", + "i3Description": "16진수 형식의 프로토콜 모방 패킷: ", + "i4Label": "특수 정크 패킷 4 (I4)", + "i4Description": "16진수 형식의 프로토콜 모방 패킷: ", + "i5Label": "특수 정크 패킷 5 (I5)", + "i5Description": "16진수 형식의 프로토콜 모방 패킷: ", + "mtuNote": "값은 MTU에 따라 달라집니다", + "obfuscationParameters": "AmneziaWG 난독화 매개변수" } } diff --git a/src/i18n/locales/nl.json b/src/i18n/locales/nl.json index d40654d2..9e4e9f7d 100644 --- a/src/i18n/locales/nl.json +++ b/src/i18n/locales/nl.json @@ -20,7 +20,11 @@ "2faKey": "TOTP-sleutel", "2faCodeDesc": "Voer de code in van uw authenticator-app.", "disable2fa": "Twee-factor-authenticatie uitschakelen", - "disable2faDesc": "Voer uw wachtwoord in om de twee-factor-authenticatie uit te schakelen." + "disable2faDesc": "Voer uw wachtwoord in om de twee-factor-authenticatie uit te schakelen.", + "linkOauth": "Koppel uw account met een externe provider", + "unlinkOauth": "Ontkoppelen", + "linkedWith": "Gekoppeld met {0}", + "providerDisabled": "Uw huidige gekoppelde provider is niet ingeschakeld" }, "general": { "name": "Naam", @@ -28,6 +32,7 @@ "password": "Wachtwoord", "newPassword": "Nieuw wachtwoord", "updatePassword": "Wachtwoord bijwerken", + "addPassword": "Add Password", "mtu": "MTU", "allowedIps": "Toegestane IP's", "dns": "DNS", @@ -41,7 +46,8 @@ "confirmPassword": "Wachtwoord bevestigen", "loading": "Laden...", "2fa": "Twee-factor-authenticatie uitschakelen", - "2faCode": "TOTP-code" + "2faCode": "TOTP-code", + "externalAuth": "Externe authenticatie" }, "setup": { "welcome": "Welkom bij uw eerste installatie van wg-easy", @@ -72,11 +78,14 @@ }, "login": { "signIn": "Inloggen", + "signInWith": "Sign in with {0}", + "or": "or", "rememberMe": "Onthoud mij", "rememberMeDesc": "Ingelogd blijven na het sluiten van de browser", "insecure": "U kunt niet inloggen via een onveilige verbinding. Gebruik HTTPS.", "2faRequired": "Twee-factor-authenticatie is vereist", - "2faWrong": "Twee-factor-authenticatiecode is fout" + "2faWrong": "Twee-factor-authenticatiecode is fout", + "loginExpired": "Login verlopen. Probeer het opnieuw" }, "client": { "empty": "Er zijn nog geen cliënten.", @@ -196,7 +205,9 @@ "validBoolean": "{0} moet een geldige boolean zijn", "validArray": "{0} moet een geldige array zijn", "stringMin": "{0} moet minstens {1} teken bevatten", - "numberMin": "{0} moet minstens {1} zijn" + "stringMax": "{0} mag maximaal {1} tekens bevatten", + "numberMin": "{0} moet minstens {1} zijn", + "numberMax": "{0} mag maximaal {1} zijn" }, "client": { "id": "Cliënt-ID", diff --git a/src/i18n/locales/pl.json b/src/i18n/locales/pl.json index 2d572eaa..be500131 100644 --- a/src/i18n/locales/pl.json +++ b/src/i18n/locales/pl.json @@ -72,6 +72,7 @@ }, "login": { "signIn": "Zaloguj się", + "or": "lub", "rememberMe": "Zapamiętaj mnie", "rememberMeDesc": "Pozostań zalogowany po zamknięciu przeglądarki", "insecure": "Nie możesz zalogować się przez niezabezpieczone połączenie. Użyj HTTPS.", diff --git a/src/nuxt.config.ts b/src/nuxt.config.ts index ca593b9b..423c30f6 100644 --- a/src/nuxt.config.ts +++ b/src/nuxt.config.ts @@ -2,10 +2,7 @@ import { fileURLToPath } from 'node:url'; // https://nuxt.com/docs/api/configuration/nuxt-config export default defineNuxtConfig({ - future: { - compatibilityVersion: 4, - }, - compatibilityDate: '2026-02-06', + compatibilityDate: '2026-06-19', devtools: { enabled: true }, modules: [ '@nuxtjs/i18n', @@ -160,21 +157,24 @@ export default defineNuxtConfig({ }, }, nitro: { + imports: { + autoImport: false, + }, esbuild: { options: { - // to support big int - target: 'node20', + target: 'node24', }, }, - alias: { - '#db': fileURLToPath(new URL('./server/database/', import.meta.url)), - }, externals: { - traceInclude: [fileURLToPath(new URL('./cli/index.ts', import.meta.url))], + traceInclude: [ + fileURLToPath( + new URL('./node_modules/.cache/wg-easy/trace.mjs', import.meta.url) + ), + ], }, }, alias: { - // for typecheck reasons (https://github.com/nuxt/cli/issues/323) '#db': fileURLToPath(new URL('./server/database/', import.meta.url)), + '#cli': fileURLToPath(new URL('./cli', import.meta.url)), }, }); diff --git a/src/package.json b/src/package.json index 96429ef1..350828e5 100644 --- a/src/package.json +++ b/src/package.json @@ -1,11 +1,11 @@ { "name": "wg-easy", - "version": "15.3.0", + "version": "15.4.0-beta.1", "description": "The easiest way to run WireGuard VPN + Web-based Admin UI.", "private": true, "type": "module", "scripts": { - "build": "nuxt build && pnpm cli:build", + "build": "pnpm cli:trace && nuxt build && pnpm cli:build", "dev": "nuxt dev", "generate": "nuxt generate", "preview": "nuxt preview", @@ -16,6 +16,7 @@ "typecheck": "nuxt typecheck", "check:all": "pnpm typecheck && pnpm lint && pnpm format:check && pnpm build", "db:generate": "drizzle-kit generate", + "cli:trace": "node cli/build.js --trace", "cli:build": "node cli/build.js", "cli:dev": "tsx cli/index.ts", "test:unit": "vitest run --project unit" @@ -23,32 +24,33 @@ "dependencies": { "@eschricht/nuxt-color-mode": "^1.2.0", "@heroicons/vue": "^2.2.0", - "@libsql/client": "^0.17.3", - "@nuxtjs/i18n": "^10.4.0", + "@libsql/client": "^0.17.4", + "@nuxtjs/i18n": "^10.4.1", "@nuxtjs/tailwindcss": "^6.14.0", "@phc/format": "^1.0.0", - "@pinia/nuxt": "^0.11.3", + "@pinia/nuxt": "^1.0.1", "@tailwindcss/forms": "^0.5.11", "@vueuse/core": "^14.3.0", "@vueuse/nuxt": "^14.3.0", - "apexcharts": "^5.13.0", - "argon2": "^0.44.0", - "cidr-tools": "^12.0.2", + "apexcharts": "^6.3.0", + "argon2": "^0.45.0", + "cidr-tools": "^12.1.2", "citty": "^0.2.2", "consola": "^3.4.2", "crc-32": "^1.2.2", "drizzle-orm": "^0.45.2", - "ip-bigint": "^9.0.5", + "ip-bigint": "^9.0.6", "is-cidr": "^7.0.0", "is-ip": "^5.0.1", - "js-sha256": "^0.11.1", - "nuxt": "^3.21.6", - "obug": "^2.1.1", + "js-sha256": "^0.12.0", + "nuxt": "^4.5.0", + "obug": "^2.1.4", + "openid-client": "^6.8.4", "otpauth": "^9.5.1", - "pinia": "^3.0.4", + "pinia": "^4.0.2", "qr": "^0.6.0", "radix-vue": "^1.9.17", - "semver": "^7.8.1", + "semver": "^7.8.5", "tailwindcss": "^3.4.19", "timeago.js": "^4.0.2", "vue": "latest", @@ -56,22 +58,22 @@ "zod": "^4.4.3" }, "devDependencies": { - "@nuxt/eslint": "^1.15.2", + "@nuxt/eslint": "^1.16.0", "@nuxt/test-utils": "^4.0.3", "@types/phc__format": "^1.0.1", "@types/semver": "^7.7.1", - "@vitest/coverage-v8": "^4.1.7", - "@vitest/ui": "^4.1.7", + "@vitest/coverage-v8": "^4.1.10", + "@vitest/ui": "^4.1.10", "drizzle-kit": "^0.31.10", - "esbuild": "^0.28.0", - "eslint": "^9.39.4", + "esbuild": "^0.28.1", + "eslint": "^10.7.0", "eslint-config-prettier": "^10.1.8", - "prettier": "^3.8.3", - "prettier-plugin-tailwindcss": "^0.8.0", - "tsx": "^4.22.3", + "prettier": "^3.9.5", + "prettier-plugin-tailwindcss": "^0.8.1", + "tsx": "^4.23.1", "typescript": "^6.0.3", - "vitest": "^4.1.7", - "vue-tsc": "^3.3.3" + "vitest": "^4.1.10", + "vue-tsc": "^3.3.7" }, - "packageManager": "pnpm@11.5.0" + "packageManager": "pnpm@11.15.1" } diff --git a/src/pnpm-lock.yaml b/src/pnpm-lock.yaml index fdd1ecbf..386ef336 100644 --- a/src/pnpm-lock.yaml +++ b/src/pnpm-lock.yaml @@ -10,43 +10,43 @@ importers: dependencies: '@eschricht/nuxt-color-mode': specifier: ^1.2.0 - version: 1.2.0(magicast@0.5.3) + version: 1.2.0(magic-string@1.0.0)(magicast@0.5.3)(oxc-parser@0.140.0)(rolldown@1.2.0)(unplugin@3.3.0(esbuild@0.28.1)(rolldown@1.2.0)(rollup@4.62.2)(vite@8.1.5(@types/node@26.1.1)(esbuild@0.28.1)(jiti@1.21.7)(terser@5.49.0)(tsx@4.23.1)(yaml@2.9.0))) '@heroicons/vue': specifier: ^2.2.0 - version: 2.2.0(vue@3.5.35(typescript@6.0.3)) + version: 2.2.0(vue@3.5.40(typescript@6.0.3)) '@libsql/client': - specifier: ^0.17.3 - version: 0.17.3 + specifier: ^0.17.4 + version: 0.17.4 '@nuxtjs/i18n': - specifier: ^10.4.0 - version: 10.4.0(@vue/compiler-dom@3.5.35)(db0@0.3.4(@libsql/client@0.17.3)(drizzle-orm@0.45.2(@libsql/client@0.17.3)))(eslint@9.39.4(jiti@1.21.7))(ioredis@5.11.0)(magicast@0.5.3)(pinia@3.0.4(typescript@6.0.3)(vue@3.5.35(typescript@6.0.3)))(rollup@4.60.4)(typescript@6.0.3)(vite@7.3.3(@types/node@25.9.1)(jiti@1.21.7)(terser@5.48.0)(tsx@4.22.3)(yaml@2.9.0))(vue@3.5.35(typescript@6.0.3)) + specifier: ^10.4.1 + version: 10.4.1(@vue/compiler-dom@3.5.40)(db0@0.3.4(@libsql/client@0.17.4)(drizzle-orm@0.45.2(@libsql/client@0.17.4)))(esbuild@0.28.1)(eslint@10.7.0(jiti@1.21.7)(supports-color@10.2.2))(ioredis@5.11.1(supports-color@10.2.2))(magicast@0.5.3)(pinia@4.0.2(@vue/devtools-api@8.1.5)(typescript@6.0.3)(vue@3.5.40(typescript@6.0.3)))(rolldown@1.2.0)(rollup@4.62.2)(supports-color@10.2.2)(typescript@6.0.3)(vite@8.1.5(@types/node@26.1.1)(esbuild@0.28.1)(jiti@1.21.7)(terser@5.49.0)(tsx@4.23.1)(yaml@2.9.0))(vue@3.5.40(typescript@6.0.3)) '@nuxtjs/tailwindcss': specifier: ^6.14.0 - version: 6.14.0(magicast@0.5.3)(tsx@4.22.3)(yaml@2.9.0) + version: 6.14.0(magicast@0.5.3)(supports-color@10.2.2)(tsx@4.23.1)(yaml@2.9.0) '@phc/format': specifier: ^1.0.0 version: 1.0.0 '@pinia/nuxt': - specifier: ^0.11.3 - version: 0.11.3(magicast@0.5.3)(pinia@3.0.4(typescript@6.0.3)(vue@3.5.35(typescript@6.0.3))) + specifier: ^1.0.1 + version: 1.0.1(magic-string@1.0.0)(magicast@0.5.3)(oxc-parser@0.140.0)(pinia@4.0.2(@vue/devtools-api@8.1.5)(typescript@6.0.3)(vue@3.5.40(typescript@6.0.3)))(rolldown@1.2.0)(unplugin@3.3.0(esbuild@0.28.1)(rolldown@1.2.0)(rollup@4.62.2)(vite@8.1.5(@types/node@26.1.1)(esbuild@0.28.1)(jiti@1.21.7)(terser@5.49.0)(tsx@4.23.1)(yaml@2.9.0))) '@tailwindcss/forms': specifier: ^0.5.11 - version: 0.5.11(tailwindcss@3.4.19(tsx@4.22.3)(yaml@2.9.0)) + version: 0.5.11(tailwindcss@3.4.19(tsx@4.23.1)(yaml@2.9.0)) '@vueuse/core': specifier: ^14.3.0 - version: 14.3.0(vue@3.5.35(typescript@6.0.3)) + version: 14.3.0(vue@3.5.40(typescript@6.0.3)) '@vueuse/nuxt': specifier: ^14.3.0 - version: 14.3.0(magicast@0.5.3)(nuxt@3.21.6(@libsql/client@0.17.3)(@parcel/watcher@2.5.6)(@types/node@25.9.1)(@vue/compiler-sfc@3.5.35)(cac@6.7.14)(db0@0.3.4(@libsql/client@0.17.3)(drizzle-orm@0.45.2(@libsql/client@0.17.3)))(drizzle-orm@0.45.2(@libsql/client@0.17.3))(eslint@9.39.4(jiti@1.21.7))(ioredis@5.11.0)(magicast@0.5.3)(optionator@0.9.4)(rollup-plugin-visualizer@7.0.1(rollup@4.60.4))(rollup@4.60.4)(srvx@0.11.16)(terser@5.48.0)(tsx@4.22.3)(typescript@6.0.3)(vite@7.3.3(@types/node@25.9.1)(jiti@1.21.7)(terser@5.48.0)(tsx@4.22.3)(yaml@2.9.0))(vue-tsc@3.3.3(typescript@6.0.3))(yaml@2.9.0))(vue@3.5.35(typescript@6.0.3)) + version: 14.3.0(2787507ebea9057249be34ac04e53d9b) apexcharts: - specifier: ^5.13.0 - version: 5.13.0 + specifier: ^6.3.0 + version: 6.3.0 argon2: - specifier: ^0.44.0 - version: 0.44.0 + specifier: ^0.45.0 + version: 0.45.0 cidr-tools: - specifier: ^12.0.2 - version: 12.0.2 + specifier: ^12.1.2 + version: 12.1.2 citty: specifier: ^0.2.2 version: 0.2.2 @@ -58,10 +58,10 @@ importers: version: 1.2.2 drizzle-orm: specifier: ^0.45.2 - version: 0.45.2(@libsql/client@0.17.3) + version: 0.45.2(@libsql/client@0.17.4) ip-bigint: - specifier: ^9.0.5 - version: 9.0.5 + specifier: ^9.0.6 + version: 9.0.6 is-cidr: specifier: ^7.0.0 version: 7.0.0 @@ -69,51 +69,54 @@ importers: specifier: ^5.0.1 version: 5.0.1 js-sha256: - specifier: ^0.11.1 - version: 0.11.1 + specifier: ^0.12.0 + version: 0.12.0 nuxt: - specifier: ^3.21.6 - version: 3.21.6(@libsql/client@0.17.3)(@parcel/watcher@2.5.6)(@types/node@25.9.1)(@vue/compiler-sfc@3.5.35)(cac@6.7.14)(db0@0.3.4(@libsql/client@0.17.3)(drizzle-orm@0.45.2(@libsql/client@0.17.3)))(drizzle-orm@0.45.2(@libsql/client@0.17.3))(eslint@9.39.4(jiti@1.21.7))(ioredis@5.11.0)(magicast@0.5.3)(optionator@0.9.4)(rollup-plugin-visualizer@7.0.1(rollup@4.60.4))(rollup@4.60.4)(srvx@0.11.16)(terser@5.48.0)(tsx@4.22.3)(typescript@6.0.3)(vite@7.3.3(@types/node@25.9.1)(jiti@1.21.7)(terser@5.48.0)(tsx@4.22.3)(yaml@2.9.0))(vue-tsc@3.3.3(typescript@6.0.3))(yaml@2.9.0) + specifier: ^4.5.0 + version: 4.5.0(@babel/plugin-syntax-jsx@7.29.7(@babel/core@7.29.7(supports-color@10.2.2)))(@babel/plugin-syntax-typescript@7.29.7(@babel/core@7.29.7(supports-color@10.2.2)))(@libsql/client@0.17.4)(@parcel/watcher@2.6.0)(@types/node@26.1.1)(@vue/compiler-sfc@3.5.40)(crossws@0.4.10(srvx@0.11.22))(db0@0.3.4(@libsql/client@0.17.4)(drizzle-orm@0.45.2(@libsql/client@0.17.4)))(drizzle-orm@0.45.2(@libsql/client@0.17.4))(esbuild@0.28.1)(eslint@10.7.0(jiti@1.21.7)(supports-color@10.2.2))(ioredis@5.11.1(supports-color@10.2.2))(lightningcss@1.33.0)(magicast@0.5.3)(optionator@0.9.4)(oxc-parser@0.140.0)(pinia@4.0.2(@vue/devtools-api@8.1.5)(typescript@6.0.3)(vue@3.5.40(typescript@6.0.3)))(rollup-plugin-visualizer@7.0.1(rolldown@1.2.0)(rollup@4.62.2))(rollup@4.62.2)(srvx@0.11.22)(supports-color@10.2.2)(terser@5.49.0)(tsx@4.23.1)(typescript@6.0.3)(vite@8.1.5(@types/node@26.1.1)(esbuild@0.28.1)(jiti@1.21.7)(terser@5.49.0)(tsx@4.23.1)(yaml@2.9.0))(vue-tsc@3.3.7(typescript@6.0.3))(yaml@2.9.0) obug: - specifier: ^2.1.1 - version: 2.1.1 + specifier: ^2.1.4 + version: 2.1.4 + openid-client: + specifier: ^6.8.4 + version: 6.8.4 otpauth: specifier: ^9.5.1 version: 9.5.1 pinia: - specifier: ^3.0.4 - version: 3.0.4(typescript@6.0.3)(vue@3.5.35(typescript@6.0.3)) + specifier: ^4.0.2 + version: 4.0.2(@vue/devtools-api@8.1.5)(typescript@6.0.3)(vue@3.5.40(typescript@6.0.3)) qr: specifier: ^0.6.0 version: 0.6.0 radix-vue: specifier: ^1.9.17 - version: 1.9.17(vue@3.5.35(typescript@6.0.3)) + version: 1.9.17(vue@3.5.40(typescript@6.0.3)) semver: - specifier: ^7.8.1 - version: 7.8.1 + specifier: ^7.8.5 + version: 7.8.5 tailwindcss: specifier: ^3.4.19 - version: 3.4.19(tsx@4.22.3)(yaml@2.9.0) + version: 3.4.19(tsx@4.23.1)(yaml@2.9.0) timeago.js: specifier: ^4.0.2 version: 4.0.2 vue: specifier: latest - version: 3.5.35(typescript@6.0.3) + version: 3.5.40(typescript@6.0.3) vue3-apexcharts: specifier: ^1.11.1 - version: 1.11.1(apexcharts@5.13.0)(vue@3.5.35(typescript@6.0.3)) + version: 1.11.1(apexcharts@6.3.0)(vue@3.5.40(typescript@6.0.3)) zod: specifier: ^4.4.3 version: 4.4.3 devDependencies: '@nuxt/eslint': - specifier: ^1.15.2 - version: 1.15.2(@typescript-eslint/utils@8.60.0(eslint@9.39.4(jiti@1.21.7))(typescript@6.0.3))(@vue/compiler-sfc@3.5.35)(eslint@9.39.4(jiti@1.21.7))(magicast@0.5.3)(typescript@6.0.3)(vite@7.3.3(@types/node@25.9.1)(jiti@1.21.7)(terser@5.48.0)(tsx@4.22.3)(yaml@2.9.0)) + specifier: ^1.16.0 + version: 1.16.0(@typescript-eslint/utils@8.64.0(eslint@10.7.0(jiti@1.21.7)(supports-color@10.2.2))(supports-color@10.2.2)(typescript@6.0.3))(@vue/compiler-sfc@3.5.40)(esbuild@0.28.1)(eslint@10.7.0(jiti@1.21.7)(supports-color@10.2.2))(magic-string@1.0.0)(magicast@0.5.3)(oxc-parser@0.140.0)(rolldown@1.2.0)(rollup@4.62.2)(srvx@0.11.22)(supports-color@10.2.2)(typescript@6.0.3)(unplugin@3.3.0(esbuild@0.28.1)(rolldown@1.2.0)(rollup@4.62.2)(vite@8.1.5(@types/node@26.1.1)(esbuild@0.28.1)(jiti@1.21.7)(terser@5.49.0)(tsx@4.23.1)(yaml@2.9.0)))(vite@8.1.5(@types/node@26.1.1)(esbuild@0.28.1)(jiti@1.21.7)(terser@5.49.0)(tsx@4.23.1)(yaml@2.9.0)) '@nuxt/test-utils': specifier: ^4.0.3 - version: 4.0.3(@vitest/ui@4.1.7)(crossws@0.4.5(srvx@0.11.16))(magicast@0.5.3)(typescript@6.0.3)(vite@7.3.3(@types/node@25.9.1)(jiti@1.21.7)(terser@5.48.0)(tsx@4.22.3)(yaml@2.9.0))(vitest@4.1.7) + version: 4.0.3(@vitest/ui@4.1.10)(crossws@0.4.10(srvx@0.11.22))(esbuild@0.28.1)(magicast@0.5.3)(rolldown@1.2.0)(rollup@4.62.2)(typescript@6.0.3)(vite@8.1.5(@types/node@26.1.1)(esbuild@0.28.1)(jiti@1.21.7)(terser@5.49.0)(tsx@4.23.1)(yaml@2.9.0))(vitest@4.1.10) '@types/phc__format': specifier: ^1.0.1 version: 1.0.1 @@ -121,41 +124,41 @@ importers: specifier: ^7.7.1 version: 7.7.1 '@vitest/coverage-v8': - specifier: ^4.1.7 - version: 4.1.7(vitest@4.1.7) + specifier: ^4.1.10 + version: 4.1.10(vitest@4.1.10) '@vitest/ui': - specifier: ^4.1.7 - version: 4.1.7(vitest@4.1.7) + specifier: ^4.1.10 + version: 4.1.10(vitest@4.1.10) drizzle-kit: specifier: ^0.31.10 version: 0.31.10 esbuild: - specifier: ^0.28.0 - version: 0.28.0 + specifier: ^0.28.1 + version: 0.28.1 eslint: - specifier: ^9.39.4 - version: 9.39.4(jiti@1.21.7) + specifier: ^10.7.0 + version: 10.7.0(jiti@1.21.7)(supports-color@10.2.2) eslint-config-prettier: specifier: ^10.1.8 - version: 10.1.8(eslint@9.39.4(jiti@1.21.7)) + version: 10.1.8(eslint@10.7.0(jiti@1.21.7)(supports-color@10.2.2)) prettier: - specifier: ^3.8.3 - version: 3.8.3 + specifier: ^3.9.5 + version: 3.9.5 prettier-plugin-tailwindcss: - specifier: ^0.8.0 - version: 0.8.0(prettier@3.8.3) + specifier: ^0.8.1 + version: 0.8.1(prettier@3.9.5) tsx: - specifier: ^4.22.3 - version: 4.22.3 + specifier: ^4.23.1 + version: 4.23.1 typescript: specifier: ^6.0.3 version: 6.0.3 vitest: - specifier: ^4.1.7 - version: 4.1.7(@types/node@25.9.1)(@vitest/coverage-v8@4.1.7)(@vitest/ui@4.1.7)(vite@7.3.3(@types/node@25.9.1)(jiti@1.21.7)(terser@5.48.0)(tsx@4.22.3)(yaml@2.9.0)) + specifier: ^4.1.10 + version: 4.1.10(@types/node@26.1.1)(@vitest/coverage-v8@4.1.10)(@vitest/ui@4.1.10)(vite@8.1.5(@types/node@26.1.1)(esbuild@0.28.1)(jiti@1.21.7)(terser@5.49.0)(tsx@4.23.1)(yaml@2.9.0)) vue-tsc: - specifier: ^3.3.3 - version: 3.3.3(typescript@6.0.3) + specifier: ^3.3.7 + version: 3.3.7(typescript@6.0.3) packages: @@ -188,8 +191,8 @@ packages: resolution: {integrity: sha512-DkXD5OJQaAQIdZ1bt3UZdEnHAn9Imd3IVBdX03UFe+ony9Ojw5pzr9YVKGDY1jt+Gcn/FnGkNf8r+Vj5NOJWtQ==} engines: {node: '>=6.9.0'} - '@babel/generator@8.0.0-rc.6': - resolution: {integrity: sha512-6mIzgVK8DgEzvIapoQwhXTMnnkuE4STQmVv9H03i/tZ2ml8oev3TRvZJgTenK2Bsq0YWNtzOrFdTyNzCMFtjJQ==} + '@babel/generator@8.0.0': + resolution: {integrity: sha512-NT9NrVwJsbSV6Y2FSstWa71EETOnzrjkL5/wX3D2mYHtKM+qvqB1DvR4D0Setb/gDBsHzRICifwEWMO8CnTF6g==} engines: {node: ^22.18.0 || >=24.11.0} '@babel/helper-annotate-as-pure@7.29.7': @@ -246,16 +249,16 @@ packages: resolution: {integrity: sha512-Pb5ijPrZ89GDH8223L4UP8i6QApWxs04RbPQJTeWDV0/keR2E36MeKnyr6LYmUUvqRRI+Iv87SuF1W6ErINzYw==} engines: {node: '>=6.9.0'} - '@babel/helper-string-parser@8.0.0-rc.6': - resolution: {integrity: sha512-BCkFy+zN6kXQed3YOT7aJl93NfDSzQc3pBfsvTVPs9gU9X3V0aefEF5kwBT0E+mDWH9QgKaZstYUQN9VdQZT4g==} + '@babel/helper-string-parser@8.0.0': + resolution: {integrity: sha512-6mJgmFFFIIO82vvoLt9XtRC7/TkzXfts1t/SpRX4IHSzMgqoPYCWesVu1udUPUWioAE/2fcG6WuI8zrkE1gwrg==} engines: {node: ^22.18.0 || >=24.11.0} '@babel/helper-validator-identifier@7.29.7': resolution: {integrity: sha512-qehxGkRj55h/ff8EMaJ+cYhyaKlHIxqYDn682wQD7RNp9UujOQsHog2uS0r2vzr4pW+sXf90NeeayjcNaX3fFg==} engines: {node: '>=6.9.0'} - '@babel/helper-validator-identifier@8.0.0-rc.6': - resolution: {integrity: sha512-nVJ+1JcCgntv8d78rRo++o2wuODT0Irknx2BF8Np4Ft2CRgjLqIs4qzSZ8b66yGbBdMWGmZBO9WEZv1hhNiSpg==} + '@babel/helper-validator-identifier@8.0.4': + resolution: {integrity: sha512-4wFaiLd0bVo4cIoTXI3zKI038NIWE/cr3jvBjejOVYVxV/m8Ltav1USiGzG1fmS5J2RhgEOgXNNK46cRPnRsrg==} engines: {node: ^22.18.0 || >=24.11.0} '@babel/helper-validator-option@7.29.7': @@ -271,8 +274,8 @@ packages: engines: {node: '>=6.0.0'} hasBin: true - '@babel/parser@8.0.0-rc.6': - resolution: {integrity: sha512-rOS8IpdO7mQELkTPlCsTgPejO0bFuZdEDCGQJouYbYf9e1FLTym7Fei2pEjq8q7MWbX0ravcd7QQYKs1TxOuog==} + '@babel/parser@8.0.4': + resolution: {integrity: sha512-srpptsAkEbbNIC/q8nT7o+m6CQe8CJUTV/t7MYc9NnWlgYVtHOb7JH6SorxMhN0kuRJjVqXbKClG6xSbPtzz+g==} engines: {node: ^22.18.0 || >=24.11.0} hasBin: true @@ -306,21 +309,21 @@ packages: resolution: {integrity: sha512-4zBIxpPzowiZpusoFkyGVwakdRJUyuH5PxQ/PrqghfdFWWasvnCdPfQXHrenDai+gyLARulZjZowCOj6fjT4pA==} engines: {node: '>=6.9.0'} - '@babel/types@8.0.0-rc.6': - resolution: {integrity: sha512-p7/ABylAYlexb31wtRdIfH9L9A0Z2T/9H6zAqzqndkY2PLkvNNc580wGhp/gGKN4Sp9sQvSkhc6Oga8/O+wTyw==} + '@babel/types@8.0.4': + resolution: {integrity: sha512-eY+Yn3dCqTGmyiq2QRU66lA5FL8lqqqvecHt0fF3uHONIa7ToYsaCiWV8lOKqAs0Rb2SjixiKFROngnulPtt2g==} engines: {node: ^22.18.0 || >=24.11.0} '@bcoe/v8-coverage@1.0.2': resolution: {integrity: sha512-6zABk/ECA/QYSCQ1NGiVwwbQerUCZ+TQbp64Q3AgmfNvurHH0j8TtXa1qbShXA6qqkpAj4V5W8pP6mLe1mcMqA==} engines: {node: '>=18'} - '@bomb.sh/tab@0.0.15': - resolution: {integrity: sha512-Y90ub44TAvbdO9P8mcD/XPyQjFhiR5xmd4Fk7JErmWmEWEUimNnjWiBrVZ16Tj3GA1rLZ+uvCN2V/pzLawv31g==} + '@bomb.sh/tab@0.0.19': + resolution: {integrity: sha512-dTRfo9Q9B+lbLG3JCu8a/AGQSfD2XXcFcnakQzVjSOX+VvR/s9zpsH8TlqV3iHqazniRn1Ypwd1hcRlXcu/4BA==} hasBin: true peerDependencies: cac: ^6.7.14 citty: ^0.1.6 || ^0.2.0 - commander: ^13.1.0 + commander: ^13.1.0 || ^14.0.0 || ^15.0.0 peerDependenciesMeta: cac: optional: true @@ -332,23 +335,23 @@ packages: '@clack/core@1.2.0': resolution: {integrity: sha512-qfxof/3T3t9DPU/Rj3OmcFyZInceqj/NVtO9rwIuJqCUgh32gwPjpFQQp/ben07qKlhpwq7GzfWpST4qdJ5Drg==} - '@clack/core@1.4.0': - resolution: {integrity: sha512-7Wctjq6f7c1CPz8sPpkwUnz8yRgVANkpNupb81q432FjcJg4l+Sw7XANdNSdWfAKq0IHI0JTcUeK5dxs/HrGPw==} + '@clack/core@1.4.3': + resolution: {integrity: sha512-/kr3UWNtdJfxZtPgDqUOmG2pvwlmcLGheex5yiZKdwbzZJxhV+HMNR9QNmyY5cGwTNV6LrR7Jtp+KjhUAP1qBQ==} engines: {node: '>= 20.12.0'} '@clack/prompts@1.2.0': resolution: {integrity: sha512-4jmztR9fMqPMjz6H/UZXj0zEmE43ha1euENwkckKKel4XpSfokExPo5AiVStdHSAlHekz4d0CA/r45Ok1E4D3w==} - '@clack/prompts@1.5.0': - resolution: {integrity: sha512-wKh+wTjmrUoUdkZg8KpJO5X+p9PWV+KE9mePseq9UYWkukgTKsGS47RRL2HstwVcvDQH+PenrPJWII8+MfiiyA==} + '@clack/prompts@1.7.0': + resolution: {integrity: sha512-y7/yvZ2TPAnR9+jnc00klvNNLkJiXFFrQA/hlLCcxA9a2A4zQIOimyFQ9XfwYKiGD1fb5GY8vbKIIgO8d5Tb2A==} engines: {node: '>= 20.12.0'} '@cloudflare/kv-asset-handler@0.4.2': resolution: {integrity: sha512-SIOD2DxrRRwQ+jgzlXCqoEFiKOFqaPjhnNTGKXSRLvp1HiOvapLaFG2kEr9dYQTYe8rKrd9uvDUzmAITeNyaHQ==} engines: {node: '>=18.0.0'} - '@colordx/core@5.4.3': - resolution: {integrity: sha512-kIxYSfA5T8HXjav55UaaH/o/cKivF6jCCGIb8eqtcsfI46wsvlSiT8jMDyrl779qLec3c2c2oHBZo4oAhvbjrQ==} + '@colordx/core@5.5.0': + resolution: {integrity: sha512-3PxTH8itZzltK0U9jTwVVnjLXvnDYuq3m+QXsHkENxWiPRh4WaoLcs1SQjqgZ55kS+QyirpH5BVwzP2gMVG6EQ==} '@csstools/selector-resolve-nested@3.1.0': resolution: {integrity: sha512-mf1LEW0tJLKfWyvn5KdDrhpxHyuxpbNwTIwOYLIvsTffeyOf85j5oIzfG0yosxDgx/sswlqBnESYUcQH0vgZ0g==} @@ -362,16 +365,16 @@ packages: peerDependencies: postcss-selector-parser: ^7.0.0 + '@devframes/hub@0.5.4': + resolution: {integrity: sha512-NZs5RFuNb6tjQd2JBsRYQT+OqE+z16Kg9/72HG4k+uJdzK90sAGtAjOwK8bsvav/9l85KGx4agfkgxnfbl313w==} + peerDependencies: + devframe: 0.5.4 + '@drizzle-team/brocli@0.10.2': resolution: {integrity: sha512-z33Il7l5dKjUgGULTqBsQBQwckHh5AbIuxhdsIxDDiZAzBOrZO6q9ogcWC65kU382AfynTfgNumVcNIjuIua6w==} - '@dxup/nuxt@0.4.1': - resolution: {integrity: sha512-gtYffW6OfWNvoLW+XD3Mx/K8uUq08PMGLYJoDxc92EzZAWqR0FhcR5iaLm5r/OxyGTKz+P5f5Y7Aoir9+SjYaw==} - peerDependencies: - typescript: '*' - peerDependenciesMeta: - typescript: - optional: true + '@dxup/nuxt@0.5.3': + resolution: {integrity: sha512-PRwX3kEDjZF4t+j+lWbhFSZ1WBklwFSus5byNtkCL2PgWoUMbywNtewJcUHVSOQdwEYsbD1H/md3e/CKaTvDyw==} '@dxup/unimport@0.1.2': resolution: {integrity: sha512-/B8YJGPzaYq1NbsQmwgP8EZqg40NpTw4ZB3suuI0TplbxKHeK94jeaawLmVhCv+YwUnOpiWEz9U6SeThku/8JQ==} @@ -379,17 +382,32 @@ packages: '@emnapi/core@1.10.0': resolution: {integrity: sha512-yq6OkJ4p82CAfPl0u9mQebQHKPJkY7WrIuk205cTYnYe+k2Z8YBh11FrbRG/H6ihirqcacOgl2BIO8oyMQLeXw==} + '@emnapi/core@1.11.1': + resolution: {integrity: sha512-RSvbQmHzdKzNsLYa/wHrbc3KN4sYLKAdPZxqiM2HATqv/SBk2/ENSHpvXGaLOMcsAyz0poEGqkmmKYG3OWiJEQ==} + + '@emnapi/core@1.11.2': + resolution: {integrity: sha512-TC8MkTuZUtcTSiFeuC0ksCh9QIJ5+F21MvZ4Wn4ORfYaFJ/0dsiudv5tVkejgwZlwQ39jL9WWDe2lz8x0WglOA==} + '@emnapi/runtime@1.10.0': resolution: {integrity: sha512-ewvYlk86xUoGI0zQRNq/mC+16R1QeDlKQy21Ki3oSYXNgLb45GV1P6A0M+/s6nyCuNDqe5VpaY84BzXGwVbwFA==} + '@emnapi/runtime@1.11.1': + resolution: {integrity: sha512-vgj7R3y3Wgx24IQaGPA/R6YFXLHVMOZ0uVEyIQPaWs+rd1AzfEMXlAC22FYwO1XkKR6NPsq7mUandH8oIRdZFw==} + + '@emnapi/runtime@1.11.2': + resolution: {integrity: sha512-kyOl3X0DuTiT1h2ft8r2fYO8JYtU9a9Xis/zBSiGArNaagCOWx90N1k2wxp18czFDH+OgcWGb5ZP/XMt3dcyPA==} + '@emnapi/wasi-threads@1.2.1': resolution: {integrity: sha512-uTII7OYF+/Mes/MrcIOYp5yOtSMLBWSIoLPpcgwipoiKbli6k322tcoFsxoIIxPDqW01SQGAgko4EzZi2BNv2w==} + '@emnapi/wasi-threads@1.2.2': + resolution: {integrity: sha512-c95qOXkHdydNKhscBTebqEC1CVAZpyqOfVfBzQ1qgzyl3gfeldUjIggDbIZgDKsHLgnsM+igH7TJ/eAasaVuMA==} + '@epic-web/invariant@1.0.0': resolution: {integrity: sha512-lrTPqgvfFQtR/eY/qkIzp98OGdNJu0m5ji3q/nJI8v3SXkRKEnWiOxMmbvcSoAIzv/cGiuvRy57k4suKQSAdwA==} - '@es-joy/jsdoccomment@0.86.0': - resolution: {integrity: sha512-ukZmRQ81WiTpDWO6D/cTBM7XbrNtutHKvAVnZN/8pldAwLoJArGOvkNyxPTBGsPjsoaQBJxlH+tE2TNA/92Qgw==} + '@es-joy/jsdoccomment@0.88.0': + resolution: {integrity: sha512-GK/HL/claLLNo5KG705auIlZMwEtmn88ofSGuLsmVZwKBqMPJhW9DiznYNq07QEqz9BPtA3LBfYImtZmhVvRAw==} engines: {node: ^20.19.0 || ^22.13.0 || >=24} '@es-joy/resolve.exports@1.2.0': @@ -398,11 +416,11 @@ packages: '@esbuild-kit/core-utils@3.3.2': resolution: {integrity: sha512-sPRAnw9CdSsRmEtnsl2WXWdyquogVpB3yZ3dgwJfe8zrOzTsV7cJvmwrKVa+0ma5BoiGJ+BoqkMvawbayKUsqQ==} - deprecated: 'Merged into tsx: https://tsx.is' + deprecated: 'Merged into tsx: https://tsx.hirok.io' '@esbuild-kit/esm-loader@2.6.5': resolution: {integrity: sha512-FxEMIkJKnodyA1OaCUoEvbYRkoZlLZ4d/eXFu9Fh8CbBBgP5EmZxrfTRyN0qpXZ4vOvqnE5YdRdcrmUUXuU+dA==} - deprecated: 'Merged into tsx: https://tsx.is' + deprecated: 'Merged into tsx: https://tsx.hirok.io' '@esbuild/aix-ppc64@0.25.12': resolution: {integrity: sha512-Hhmwd6CInZ3dwpuGTF8fJG6yoWmsToE+vYgD4nytZVxcu1ulHpUQRAB1UJ8+N1Am3Mz4+xOByoQoSZf4D+CpkA==} @@ -410,14 +428,8 @@ packages: cpu: [ppc64] os: [aix] - '@esbuild/aix-ppc64@0.27.7': - resolution: {integrity: sha512-EKX3Qwmhz1eMdEJokhALr0YiD0lhQNwDqkPYyPhiSwKrh7/4KRjQc04sZ8db+5DVVnZ1LmbNDI1uAMPEUBnQPg==} - engines: {node: '>=18'} - cpu: [ppc64] - os: [aix] - - '@esbuild/aix-ppc64@0.28.0': - resolution: {integrity: sha512-lhRUCeuOyJQURhTxl4WkpFTjIsbDayJHih5kZC1giwE+MhIzAb7mEsQMqMf18rHLsrb5qI1tafG20mLxEWcWlA==} + '@esbuild/aix-ppc64@0.28.1': + resolution: {integrity: sha512-Svl7tq8k/08+p6CXPpRjQ1fKX+1odH/BQbb48fV6fj3CWHhsoIOoY87w1oHXm0qEpkIK3ZfVgp0hed3XBXzXMQ==} engines: {node: '>=18'} cpu: [ppc64] os: [aix] @@ -434,14 +446,8 @@ packages: cpu: [arm64] os: [android] - '@esbuild/android-arm64@0.27.7': - resolution: {integrity: sha512-62dPZHpIXzvChfvfLJow3q5dDtiNMkwiRzPylSCfriLvZeq0a1bWChrGx/BbUbPwOrsWKMn8idSllklzBy+dgQ==} - engines: {node: '>=18'} - cpu: [arm64] - os: [android] - - '@esbuild/android-arm64@0.28.0': - resolution: {integrity: sha512-+WzIXQOSaGs33tLEgYPYe/yQHf0WTU0X42Jca3y8NWMbUVhp7rUnw+vAsRC/QiDrdD31IszMrZy+qwPOPjd+rw==} + '@esbuild/android-arm64@0.28.1': + resolution: {integrity: sha512-34EGEbCIAgosYz6goLcopX6Mo7NyGv9tfwEM2/7Ce2VcVRk568iSvniGWcUXIy7wEDR1wzolcxcriFVrWYcwBg==} engines: {node: '>=18'} cpu: [arm64] os: [android] @@ -458,14 +464,8 @@ packages: cpu: [arm] os: [android] - '@esbuild/android-arm@0.27.7': - resolution: {integrity: sha512-jbPXvB4Yj2yBV7HUfE2KHe4GJX51QplCN1pGbYjvsyCZbQmies29EoJbkEc+vYuU5o45AfQn37vZlyXy4YJ8RQ==} - engines: {node: '>=18'} - cpu: [arm] - os: [android] - - '@esbuild/android-arm@0.28.0': - resolution: {integrity: sha512-wqh0ByljabXLKHeWXYLqoJ5jKC4XBaw6Hk08OfMrCRd2nP2ZQ5eleDZC41XHyCNgktBGYMbqnrJKq/K/lzPMSQ==} + '@esbuild/android-arm@0.28.1': + resolution: {integrity: sha512-0k2F129Xdio1TdJfzJ8sy1Q47vUD2NnwdhiAf7drUN1EBTfPf4hsFCtmMgu/6m8JSzsBrlmVjudMBQqOfG8usQ==} engines: {node: '>=18'} cpu: [arm] os: [android] @@ -482,14 +482,8 @@ packages: cpu: [x64] os: [android] - '@esbuild/android-x64@0.27.7': - resolution: {integrity: sha512-x5VpMODneVDb70PYV2VQOmIUUiBtY3D3mPBG8NxVk5CogneYhkR7MmM3yR/uMdITLrC1ml/NV1rj4bMJuy9MCg==} - engines: {node: '>=18'} - cpu: [x64] - os: [android] - - '@esbuild/android-x64@0.28.0': - resolution: {integrity: sha512-+VJggoaKhk2VNNqVL7f6S189UzShHC/mR9EE8rDdSkdpN0KflSwWY/gWjDrNxxisg8Fp1ZCD9jLMo4m0OUfeUA==} + '@esbuild/android-x64@0.28.1': + resolution: {integrity: sha512-dbwY7ltSMDWsRatcRpCnES4F+im88OCUgGZjy52shC7GqHRE/cYlxNbB4Z4UpJswpcc4Qxd2oE/ufM0p61IKng==} engines: {node: '>=18'} cpu: [x64] os: [android] @@ -506,14 +500,8 @@ packages: cpu: [arm64] os: [darwin] - '@esbuild/darwin-arm64@0.27.7': - resolution: {integrity: sha512-5lckdqeuBPlKUwvoCXIgI2D9/ABmPq3Rdp7IfL70393YgaASt7tbju3Ac+ePVi3KDH6N2RqePfHnXkaDtY9fkw==} - engines: {node: '>=18'} - cpu: [arm64] - os: [darwin] - - '@esbuild/darwin-arm64@0.28.0': - resolution: {integrity: sha512-0T+A9WZm+bZ84nZBtk1ckYsOvyA3x7e2Acj1KdVfV4/2tdG4fzUp91YHx+GArWLtwqp77pBXVCPn2We7Letr0Q==} + '@esbuild/darwin-arm64@0.28.1': + resolution: {integrity: sha512-TZbWkQY7kvTAXbXUT7uVACR5cMHsDiSz9z7ZKAX/RTq/WJEk3QyRr0wZpNhBDX+/0CtdqUIJlOiodQcta6tY3Q==} engines: {node: '>=18'} cpu: [arm64] os: [darwin] @@ -530,14 +518,8 @@ packages: cpu: [x64] os: [darwin] - '@esbuild/darwin-x64@0.27.7': - resolution: {integrity: sha512-rYnXrKcXuT7Z+WL5K980jVFdvVKhCHhUwid+dDYQpH+qu+TefcomiMAJpIiC2EM3Rjtq0sO3StMV/+3w3MyyqQ==} - engines: {node: '>=18'} - cpu: [x64] - os: [darwin] - - '@esbuild/darwin-x64@0.28.0': - resolution: {integrity: sha512-fyzLm/DLDl/84OCfp2f/XQ4flmORsjU7VKt8HLjvIXChJoFFOIL6pLJPH4Yhd1n1gGFF9mPwtlN5Wf82DZs+LQ==} + '@esbuild/darwin-x64@0.28.1': + resolution: {integrity: sha512-zfdzgK9ACBNZLI/CyHTOx81SyNbM6YXn7rxSgX97VjyiPl9W1i4Ka4fgKECEoFCKGpvBj5qArWIGgQjOwkgskQ==} engines: {node: '>=18'} cpu: [x64] os: [darwin] @@ -554,14 +536,8 @@ packages: cpu: [arm64] os: [freebsd] - '@esbuild/freebsd-arm64@0.27.7': - resolution: {integrity: sha512-B48PqeCsEgOtzME2GbNM2roU29AMTuOIN91dsMO30t+Ydis3z/3Ngoj5hhnsOSSwNzS+6JppqWsuhTp6E82l2w==} - engines: {node: '>=18'} - cpu: [arm64] - os: [freebsd] - - '@esbuild/freebsd-arm64@0.28.0': - resolution: {integrity: sha512-l9GeW5UZBT9k9brBYI+0WDffcRxgHQD8ShN2Ur4xWq/NFzUKm3k5lsH4PdaRgb2w7mI9u61nr2gI2mLI27Nh3Q==} + '@esbuild/freebsd-arm64@0.28.1': + resolution: {integrity: sha512-wG2EA8ENdEI0qhkSZMjfqrdY+ziCYCPMmtZjjIwOmXFjmyzEHn+UUxk5of+SYsjtfs3VpnlC7QLzSI5hY/rOAw==} engines: {node: '>=18'} cpu: [arm64] os: [freebsd] @@ -578,14 +554,8 @@ packages: cpu: [x64] os: [freebsd] - '@esbuild/freebsd-x64@0.27.7': - resolution: {integrity: sha512-jOBDK5XEjA4m5IJK3bpAQF9/Lelu/Z9ZcdhTRLf4cajlB+8VEhFFRjWgfy3M1O4rO2GQ/b2dLwCUGpiF/eATNQ==} - engines: {node: '>=18'} - cpu: [x64] - os: [freebsd] - - '@esbuild/freebsd-x64@0.28.0': - resolution: {integrity: sha512-BXoQai/A0wPO6Es3yFJ7APCiKGc1tdAEOgeTNy3SsB491S3aHn4S4r3e976eUnPdU+NbdtmBuLncYir2tMU9Nw==} + '@esbuild/freebsd-x64@0.28.1': + resolution: {integrity: sha512-i7dZ9vQgnvSCzi/rYCXNgtF/U+eKZNJBzu3eTQbRgHnM7tNSizLOkRFAl3qzVc/Op/u5YkHHa4pf/3DOYHthLQ==} engines: {node: '>=18'} cpu: [x64] os: [freebsd] @@ -602,14 +572,8 @@ packages: cpu: [arm64] os: [linux] - '@esbuild/linux-arm64@0.27.7': - resolution: {integrity: sha512-RZPHBoxXuNnPQO9rvjh5jdkRmVizktkT7TCDkDmQ0W2SwHInKCAV95GRuvdSvA7w4VMwfCjUiPwDi0ZO6Nfe9A==} - engines: {node: '>=18'} - cpu: [arm64] - os: [linux] - - '@esbuild/linux-arm64@0.28.0': - resolution: {integrity: sha512-RVyzfb3FWsGA55n6WY0MEIEPURL1FcbhFE6BffZEMEekfCzCIMtB5yyDcFnVbTnwk+CLAgTujmV/Lgvih56W+A==} + '@esbuild/linux-arm64@0.28.1': + resolution: {integrity: sha512-yHs+0uc8+nvEAfAfxrWQKK5peSNzBc4PegcMO0EJ2hT71uA7vB8Ihg2e77R2P7SG5uYjPbHlLLmve4LLLRCf0g==} engines: {node: '>=18'} cpu: [arm64] os: [linux] @@ -626,14 +590,8 @@ packages: cpu: [arm] os: [linux] - '@esbuild/linux-arm@0.27.7': - resolution: {integrity: sha512-RkT/YXYBTSULo3+af8Ib0ykH8u2MBh57o7q/DAs3lTJlyVQkgQvlrPTnjIzzRPQyavxtPtfg0EopvDyIt0j1rA==} - engines: {node: '>=18'} - cpu: [arm] - os: [linux] - - '@esbuild/linux-arm@0.28.0': - resolution: {integrity: sha512-CjaaREJagqJp7iTaNQjjidaNbCKYcd4IDkzbwwxtSvjI7NZm79qiHc8HqciMddQ6CKvJT6aBd8lO9kN/ZudLlw==} + '@esbuild/linux-arm@0.28.1': + resolution: {integrity: sha512-qVXBOHQS+d5Y722GwJzJUtOLlX7km3CraOaGormF1pDtPd2C/l1SHRPgjLunLGe51Sh5YYWKMFDyV4SxgMQYTQ==} engines: {node: '>=18'} cpu: [arm] os: [linux] @@ -650,14 +608,8 @@ packages: cpu: [ia32] os: [linux] - '@esbuild/linux-ia32@0.27.7': - resolution: {integrity: sha512-GA48aKNkyQDbd3KtkplYWT102C5sn/EZTY4XROkxONgruHPU72l+gW+FfF8tf2cFjeHaRbWpOYa/uRBz/Xq1Pg==} - engines: {node: '>=18'} - cpu: [ia32] - os: [linux] - - '@esbuild/linux-ia32@0.28.0': - resolution: {integrity: sha512-KBnSTt1kxl9x70q+ydterVdl+Cn0H18ngRMRCEQfrbqdUuntQQ0LoMZv47uB97NljZFzY6HcfqEZ2SAyIUTQBQ==} + '@esbuild/linux-ia32@0.28.1': + resolution: {integrity: sha512-d1z4ZuP0ajrfz/FhGT4vv278rX8KnPPJx8i5+AtK7TYbx9Le9F1hyzurZpkEyjkGa9dUGhQow4C1NmeGvqxN2w==} engines: {node: '>=18'} cpu: [ia32] os: [linux] @@ -674,14 +626,8 @@ packages: cpu: [loong64] os: [linux] - '@esbuild/linux-loong64@0.27.7': - resolution: {integrity: sha512-a4POruNM2oWsD4WKvBSEKGIiWQF8fZOAsycHOt6JBpZ+JN2n2JH9WAv56SOyu9X5IqAjqSIPTaJkqN8F7XOQ5Q==} - engines: {node: '>=18'} - cpu: [loong64] - os: [linux] - - '@esbuild/linux-loong64@0.28.0': - resolution: {integrity: sha512-zpSlUce1mnxzgBADvxKXX5sl8aYQHo2ezvMNI8I0lbblJtp8V4odlm3Yzlj7gPyt3T8ReksE6bK+pT3WD+aJRg==} + '@esbuild/linux-loong64@0.28.1': + resolution: {integrity: sha512-M5sRjUVZrkm1OAPR3dlOYzNmN+loZKGVi1VUQGrwuqLcbR6qeAz+famMhjASeH3YVKvZz+zT1jlh/keC3Rj/lg==} engines: {node: '>=18'} cpu: [loong64] os: [linux] @@ -698,14 +644,8 @@ packages: cpu: [mips64el] os: [linux] - '@esbuild/linux-mips64el@0.27.7': - resolution: {integrity: sha512-KabT5I6StirGfIz0FMgl1I+R1H73Gp0ofL9A3nG3i/cYFJzKHhouBV5VWK1CSgKvVaG4q1RNpCTR2LuTVB3fIw==} - engines: {node: '>=18'} - cpu: [mips64el] - os: [linux] - - '@esbuild/linux-mips64el@0.28.0': - resolution: {integrity: sha512-2jIfP6mmjkdmeTlsX/9vmdmhBmKADrWqN7zcdtHIeNSCH1SqIoNI63cYsjQR8J+wGa4Y5izRcSHSm8K3QWmk3w==} + '@esbuild/linux-mips64el@0.28.1': + resolution: {integrity: sha512-mRObBZeHh2OxcBFPWE/FjylkRgZdYuiTR3vaTozquCGOH14iP9oN4x4Ge81CoIDYQrXmIxpFumJBu5MtZpnQJQ==} engines: {node: '>=18'} cpu: [mips64el] os: [linux] @@ -722,14 +662,8 @@ packages: cpu: [ppc64] os: [linux] - '@esbuild/linux-ppc64@0.27.7': - resolution: {integrity: sha512-gRsL4x6wsGHGRqhtI+ifpN/vpOFTQtnbsupUF5R5YTAg+y/lKelYR1hXbnBdzDjGbMYjVJLJTd2OFmMewAgwlQ==} - engines: {node: '>=18'} - cpu: [ppc64] - os: [linux] - - '@esbuild/linux-ppc64@0.28.0': - resolution: {integrity: sha512-bc0FE9wWeC0WBm49IQMPSPILRocGTQt3j5KPCA8os6VprfuJ7KD+5PzESSrJ6GmPIPJK965ZJHTUlSA6GNYEhg==} + '@esbuild/linux-ppc64@0.28.1': + resolution: {integrity: sha512-slScBsMAb3GFDcdrCgLwZtPYRoH2H/youv10QiZyRjmsP48fznoveWytSgCI/R0ZcUgpc0ZhIUEx6LHts8yrfQ==} engines: {node: '>=18'} cpu: [ppc64] os: [linux] @@ -746,14 +680,8 @@ packages: cpu: [riscv64] os: [linux] - '@esbuild/linux-riscv64@0.27.7': - resolution: {integrity: sha512-hL25LbxO1QOngGzu2U5xeXtxXcW+/GvMN3ejANqXkxZ/opySAZMrc+9LY/WyjAan41unrR3YrmtTsUpwT66InQ==} - engines: {node: '>=18'} - cpu: [riscv64] - os: [linux] - - '@esbuild/linux-riscv64@0.28.0': - resolution: {integrity: sha512-SQPZOwoTTT/HXFXQJG/vBX8sOFagGqvZyXcgLA3NhIqcBv1BJU1d46c0rGcrij2B56Z2rNiSLaZOYW5cUk7yLQ==} + '@esbuild/linux-riscv64@0.28.1': + resolution: {integrity: sha512-kw0owk1o0GFETUJyW0jc0G4Yzs0BHZn0JDZ8JRT088vjJYX777BAs1fDGxAC+q831qOs2DTC96mNsG2opdfyyQ==} engines: {node: '>=18'} cpu: [riscv64] os: [linux] @@ -770,14 +698,8 @@ packages: cpu: [s390x] os: [linux] - '@esbuild/linux-s390x@0.27.7': - resolution: {integrity: sha512-2k8go8Ycu1Kb46vEelhu1vqEP+UeRVj2zY1pSuPdgvbd5ykAw82Lrro28vXUrRmzEsUV0NzCf54yARIK8r0fdw==} - engines: {node: '>=18'} - cpu: [s390x] - os: [linux] - - '@esbuild/linux-s390x@0.28.0': - resolution: {integrity: sha512-SCfR0HN8CEEjnYnySJTd2cw0k9OHB/YFzt5zgJEwa+wL/T/raGWYMBqwDNAC6dqFKmJYZoQBRfHjgwLHGSrn3Q==} + '@esbuild/linux-s390x@0.28.1': + resolution: {integrity: sha512-/lAIjX8aYFRByhh6L5rYtPEDRqa9de/4V/juOXcta5frjvzXO4/sqEtyytse0g3zZFuWu5cDN0MkLz2qRDD2Ag==} engines: {node: '>=18'} cpu: [s390x] os: [linux] @@ -794,14 +716,8 @@ packages: cpu: [x64] os: [linux] - '@esbuild/linux-x64@0.27.7': - resolution: {integrity: sha512-hzznmADPt+OmsYzw1EE33ccA+HPdIqiCRq7cQeL1Jlq2gb1+OyWBkMCrYGBJ+sxVzve2ZJEVeePbLM2iEIZSxA==} - engines: {node: '>=18'} - cpu: [x64] - os: [linux] - - '@esbuild/linux-x64@0.28.0': - resolution: {integrity: sha512-us0dSb9iFxIi8srnpl931Nvs65it/Jd2a2K3qs7fz2WfGPHqzfzZTfec7oxZJRNPXPnNYZtanmRc4AL/JwVzHQ==} + '@esbuild/linux-x64@0.28.1': + resolution: {integrity: sha512-u/anNYF2mmVOEDwLtnQ1wOr3EZ9sTNGLWrsYGYwHWzGA3Si84IOkHXlbWTD1NB+9/1lcnweYKO54uhxZydNzfA==} engines: {node: '>=18'} cpu: [x64] os: [linux] @@ -812,14 +728,8 @@ packages: cpu: [arm64] os: [netbsd] - '@esbuild/netbsd-arm64@0.27.7': - resolution: {integrity: sha512-b6pqtrQdigZBwZxAn1UpazEisvwaIDvdbMbmrly7cDTMFnw/+3lVxxCTGOrkPVnsYIosJJXAsILG9XcQS+Yu6w==} - engines: {node: '>=18'} - cpu: [arm64] - os: [netbsd] - - '@esbuild/netbsd-arm64@0.28.0': - resolution: {integrity: sha512-CR/RYotgtCKwtftMwJlUU7xCVNg3lMYZ0RzTmAHSfLCXw3NtZtNpswLEj/Kkf6kEL3Gw+BpOekRX0BYCtklhUw==} + '@esbuild/netbsd-arm64@0.28.1': + resolution: {integrity: sha512-oks0DYbLwWMmaakTsCb+zL4E+aHRVLom9IJZOAthMQEPiQmydXHkziYEsGYRx0uNV/IjEKGAV941JzH02pflqw==} engines: {node: '>=18'} cpu: [arm64] os: [netbsd] @@ -836,14 +746,8 @@ packages: cpu: [x64] os: [netbsd] - '@esbuild/netbsd-x64@0.27.7': - resolution: {integrity: sha512-OfatkLojr6U+WN5EDYuoQhtM+1xco+/6FSzJJnuWiUw5eVcicbyK3dq5EeV/QHT1uy6GoDhGbFpprUiHUYggrw==} - engines: {node: '>=18'} - cpu: [x64] - os: [netbsd] - - '@esbuild/netbsd-x64@0.28.0': - resolution: {integrity: sha512-nU1yhmYutL+fQ71Kxnhg8uEOdC0pwEW9entHykTgEbna2pw2dkbFSMeqjjyHZoCmt8SBkOSvV+yNmm94aUrrqw==} + '@esbuild/netbsd-x64@0.28.1': + resolution: {integrity: sha512-aeL6lAnN89Hz43Mlh1G8ARasbuoYvSITDEx0tHh5b7jJnHcssqgjy9Yx430GDpmCa6OyrKoS0aNRjKundRizGg==} engines: {node: '>=18'} cpu: [x64] os: [netbsd] @@ -854,14 +758,8 @@ packages: cpu: [arm64] os: [openbsd] - '@esbuild/openbsd-arm64@0.27.7': - resolution: {integrity: sha512-AFuojMQTxAz75Fo8idVcqoQWEHIXFRbOc1TrVcFSgCZtQfSdc1RXgB3tjOn/krRHENUB4j00bfGjyl2mJrU37A==} - engines: {node: '>=18'} - cpu: [arm64] - os: [openbsd] - - '@esbuild/openbsd-arm64@0.28.0': - resolution: {integrity: sha512-cXb5vApOsRsxsEl4mcZ1XY3D4DzcoMxR/nnc4IyqYs0rTI8ZKmW6kyyg+11Z8yvgMfAEldKzP7AdP64HnSC/6g==} + '@esbuild/openbsd-arm64@0.28.1': + resolution: {integrity: sha512-MEFJe5C3R8pwXdZ5Y21oo6m7ePiS0d9pWucn99O/wvyJZChoIQKrQDxKrGeW8F5+T0okTHesAmDeiHDTIq0V/Q==} engines: {node: '>=18'} cpu: [arm64] os: [openbsd] @@ -878,14 +776,8 @@ packages: cpu: [x64] os: [openbsd] - '@esbuild/openbsd-x64@0.27.7': - resolution: {integrity: sha512-+A1NJmfM8WNDv5CLVQYJ5PshuRm/4cI6WMZRg1by1GwPIQPCTs1GLEUHwiiQGT5zDdyLiRM/l1G0Pv54gvtKIg==} - engines: {node: '>=18'} - cpu: [x64] - os: [openbsd] - - '@esbuild/openbsd-x64@0.28.0': - resolution: {integrity: sha512-8wZM2qqtv9UP3mzy7HiGYNH/zjTA355mpeuA+859TyR+e+Tc08IHYpLJuMsfpDJwoLo1ikIJI8jC3GFjnRClzA==} + '@esbuild/openbsd-x64@0.28.1': + resolution: {integrity: sha512-i/ZLIOafE0Z8cI/XANJAixoJL/uRAoS2xOA3rb0xN+KK0K177cMAsQYkzHtBrtMXAKuAc7HGgcWiZ/sRC1Nxgw==} engines: {node: '>=18'} cpu: [x64] os: [openbsd] @@ -896,14 +788,8 @@ packages: cpu: [arm64] os: [openharmony] - '@esbuild/openharmony-arm64@0.27.7': - resolution: {integrity: sha512-+KrvYb/C8zA9CU/g0sR6w2RBw7IGc5J2BPnc3dYc5VJxHCSF1yNMxTV5LQ7GuKteQXZtspjFbiuW5/dOj7H4Yw==} - engines: {node: '>=18'} - cpu: [arm64] - os: [openharmony] - - '@esbuild/openharmony-arm64@0.28.0': - resolution: {integrity: sha512-FLGfyizszcef5C3YtoyQDACyg95+dndv79i2EekILBofh5wpCa1KuBqOWKrEHZg3zrL3t5ouE5jgr94vA+Wb2w==} + '@esbuild/openharmony-arm64@0.28.1': + resolution: {integrity: sha512-ge+Z7EXFNt2BO1oAMsVpiQ8EwndV9i1xXerAeTIK7AtPs3bKFXQM7nlRxDSIUIMeueR1CNXxqztLzdNeReKBJg==} engines: {node: '>=18'} cpu: [arm64] os: [openharmony] @@ -920,14 +806,8 @@ packages: cpu: [x64] os: [sunos] - '@esbuild/sunos-x64@0.27.7': - resolution: {integrity: sha512-ikktIhFBzQNt/QDyOL580ti9+5mL/YZeUPKU2ivGtGjdTYoqz6jObj6nOMfhASpS4GU4Q/Clh1QtxWAvcYKamA==} - engines: {node: '>=18'} - cpu: [x64] - os: [sunos] - - '@esbuild/sunos-x64@0.28.0': - resolution: {integrity: sha512-1ZgjUoEdHZZl/YlV76TSCz9Hqj9h9YmMGAgAPYd+q4SicWNX3G5GCyx9uhQWSLcbvPW8Ni7lj4gDa1T40akdlw==} + '@esbuild/sunos-x64@0.28.1': + resolution: {integrity: sha512-BEjgtECkL3vY+SaSQ6nzVfiALUeFxpawyp8Jmf5PtYhf1Ug40N1h/hxlhts+f1FvSvarEigdxS3BlSMI2PJLcQ==} engines: {node: '>=18'} cpu: [x64] os: [sunos] @@ -944,14 +824,8 @@ packages: cpu: [arm64] os: [win32] - '@esbuild/win32-arm64@0.27.7': - resolution: {integrity: sha512-7yRhbHvPqSpRUV7Q20VuDwbjW5kIMwTHpptuUzV+AA46kiPze5Z7qgt6CLCK3pWFrHeNfDd1VKgyP4O+ng17CA==} - engines: {node: '>=18'} - cpu: [arm64] - os: [win32] - - '@esbuild/win32-arm64@0.28.0': - resolution: {integrity: sha512-Q9StnDmQ/enxnpxCCLSg0oo4+34B9TdXpuyPeTedN/6+iXBJ4J+zwfQI28u/Jl40nOYAxGoNi7mFP40RUtkmUA==} + '@esbuild/win32-arm64@0.28.1': + resolution: {integrity: sha512-lCv9eK/H6ZJWbE7bh2nw54CZ9M2nupBxJcTsdk/QQnWkdSjKGuxmmH8/GWrlT1eMmZfn4dGcCjRte397WqfQXA==} engines: {node: '>=18'} cpu: [arm64] os: [win32] @@ -968,14 +842,8 @@ packages: cpu: [ia32] os: [win32] - '@esbuild/win32-ia32@0.27.7': - resolution: {integrity: sha512-SmwKXe6VHIyZYbBLJrhOoCJRB/Z1tckzmgTLfFYOfpMAx63BJEaL9ExI8x7v0oAO3Zh6D/Oi1gVxEYr5oUCFhw==} - engines: {node: '>=18'} - cpu: [ia32] - os: [win32] - - '@esbuild/win32-ia32@0.28.0': - resolution: {integrity: sha512-zF3ag/gfiCe6U2iczcRzSYJKH1DCI+ByzSENHlM2FcDbEeo5Zd2C86Aq0tKUYAJJ1obRP84ymxIAksZUcdztHA==} + '@esbuild/win32-ia32@0.28.1': + resolution: {integrity: sha512-zvb/mB2bSCoJOpoCBgYKKpX6YM6mJBlBUVUtVj41DlZJVEB6/0CKlRYxP5wWl1C1ILiCoAU5wZZ4q1P3qeS6Eg==} engines: {node: '>=18'} cpu: [ia32] os: [win32] @@ -992,14 +860,8 @@ packages: cpu: [x64] os: [win32] - '@esbuild/win32-x64@0.27.7': - resolution: {integrity: sha512-56hiAJPhwQ1R4i+21FVF7V8kSD5zZTdHcVuRFMW0hn753vVfQN8xlx4uOPT4xoGH0Z/oVATuR82AiqSTDIpaHg==} - engines: {node: '>=18'} - cpu: [x64] - os: [win32] - - '@esbuild/win32-x64@0.28.0': - resolution: {integrity: sha512-pEl1bO9mfAmIC+tW5btTmrKaujg3zGtUmWNdCw/xs70FBjwAL3o9OEKNHvNmnyylD6ubxUERiEhdsL0xBQ9efw==} + '@esbuild/win32-x64@0.28.1': + resolution: {integrity: sha512-bm4Mowrv+GXMlpWX++EcXw/iLyd1o3+bJkC2DkWXYVvgZCqD/bSj9ctZeAMC3cIxgjRVR2Dufaiu4YPxr5gW1A==} engines: {node: '>=18'} cpu: [x64] os: [win32] @@ -1026,56 +888,54 @@ packages: eslint: optional: true - '@eslint/config-array@0.21.2': - resolution: {integrity: sha512-nJl2KGTlrf9GjLimgIru+V/mzgSK0ABCDQRvxw5BjURL7WfH5uoWmizbH7QB6MmnMBd8cIC9uceWnezL1VZWWw==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - - '@eslint/config-helpers@0.4.2': - resolution: {integrity: sha512-gBrxN88gOIf3R7ja5K9slwNayVcZgK6SOUORm2uBzTeIEfeVaIhOpCtTox3P6R7o2jLFwLFTLnC7kU/RGcYEgw==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + '@eslint/config-array@0.23.5': + resolution: {integrity: sha512-Y3kKLvC1dvTOT+oGlqNQ1XLqK6D1HU2YXPc52NmAlJZbMMWDzGYXMiPRJ8TYD39muD/OTjlZmNJ4ib7dvSrMBA==} + engines: {node: ^20.19.0 || ^22.13.0 || >=24} '@eslint/config-helpers@0.5.5': resolution: {integrity: sha512-eIJYKTCECbP/nsKaaruF6LW967mtbQbsw4JTtSVkUQc9MneSkbrgPJAbKl9nWr0ZeowV8BfsarBmPpBzGelA2w==} engines: {node: ^20.19.0 || ^22.13.0 || >=24} - '@eslint/config-inspector@1.5.0': - resolution: {integrity: sha512-YK/VdQ+pibx5pcCI2GPZVO6vFemf/pkB662HuFtc5AA4WLQ9upb3fAoZSjOAYoDJx58qGTDp6xq9ldd/vluNxQ==} + '@eslint/config-helpers@0.6.0': + resolution: {integrity: sha512-ii6Bw9jJ2zi2cWA2Z+9/QZ/+3DX6kwaV5Q986D/CdP3Lap3w/pgQZ373FV7byY/i7L4IRH/G43I5dz1ClsCbpA==} + engines: {node: ^20.19.0 || ^22.13.0 || >=24} + + '@eslint/config-inspector@3.1.0': + resolution: {integrity: sha512-miBAPkS/jN/c5RG/aEYhQaS64wlLXeo2EXXQ2w3SdCWux5icdrHyXnZyiF9dW8TukLURqK6xgzyIdgE1uGx5Vg==} + engines: {node: ^20.19.0 || ^22.13.0 || >=24} hasBin: true peerDependencies: eslint: ^8.50.0 || ^9.0.0 || ^10.0.0 - '@eslint/core@0.17.0': - resolution: {integrity: sha512-yL/sLrpmtDaFEiUj1osRP4TI2MDz1AddJL+jZ7KSqvBuliN4xqYY54IfdN8qD8Toa6g1iloph1fxQNkjOxrrpQ==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - '@eslint/core@1.2.1': resolution: {integrity: sha512-MwcE1P+AZ4C6DWlpin/OmOA54mmIZ/+xZuJiQd4SyB29oAJjN30UW9wkKNptW2ctp4cEsvhlLY/CsQ1uoHDloQ==} engines: {node: ^20.19.0 || ^22.13.0 || >=24} - '@eslint/eslintrc@3.3.5': - resolution: {integrity: sha512-4IlJx0X0qftVsN5E+/vGujTRIFtwuLbNsVUe7TO6zYPDR1O6nFwvwhIKEKSrl6dZchmYBITazxKoUYOjdtjlRg==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + '@eslint/js@10.0.1': + resolution: {integrity: sha512-zeR9k5pd4gxjZ0abRoIaxdc7I3nDktoXZk2qOv9gCNWx3mVwEn32VRhyLaRsDiJjTs0xq/T8mfPtyuXu7GWBcA==} + engines: {node: ^20.19.0 || ^22.13.0 || >=24} + peerDependencies: + eslint: ^10.0.0 + peerDependenciesMeta: + eslint: + optional: true - '@eslint/js@9.39.4': - resolution: {integrity: sha512-nE7DEIchvtiFTwBw4Lfbu59PG+kCofhjsKaCWzxTpt4lfRjRMqG6uMBzKXuEcyXhOHoUp9riAm7/aWYGhXZ9cw==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + '@eslint/object-schema@3.0.5': + resolution: {integrity: sha512-vqTaUEgxzm+YDSdElad6PiRoX4t8VGDjCtt05zn4nU810UIx/uNEV7/lZJ6KwFThKZOzOxzXy48da+No7HZaMw==} + engines: {node: ^20.19.0 || ^22.13.0 || >=24} - '@eslint/object-schema@2.1.7': - resolution: {integrity: sha512-VtAOaymWVfZcmZbp6E2mympDIHvyjXs/12LqWYjVw6qjrfF+VK+fyG33kChz3nnK+SU5/NeHOqrTEHS8sXO3OA==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + '@eslint/plugin-kit@0.7.2': + resolution: {integrity: sha512-+CNAzxglkrpNf/kKywqQfk74QjtceuOE7Qm+AF8miRvPF/wmmK5+OJOgVh3AVTT3RP2mH3+FOaxlE5v72owk0A==} + engines: {node: ^20.19.0 || ^22.13.0 || >=24} - '@eslint/plugin-kit@0.4.1': - resolution: {integrity: sha512-43/qtrDUokr7LJqoF2c3+RInu/t4zfrpYdoSDfYyhg52rwLV6TnOvdG4fXm7IkSB3wErkcmJS9iEhjVtOSEjjA==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + '@floating-ui/core@1.8.0': + resolution: {integrity: sha512-0CIZ5itps/8x7BG8dEIhs53BvCUH2PCoogtakwRTut+Arm58sJooJ0AuZhLw2HJYIR5cMLNPBSS728sPho2khQ==} - '@floating-ui/core@1.7.5': - resolution: {integrity: sha512-1Ih4WTWyw0+lKyFMcBHGbb5U5FtuHJuujoyyr5zTaWS5EYMeT6Jb2AuDeftsCsEuchO+mM2ij5+q9crhydzLhQ==} + '@floating-ui/dom@1.8.0': + resolution: {integrity: sha512-yXSrzeHZBTZadLOlfyhCkJHNeLJnHRnRInwdZ40L7ZiaAtrBwoYlsDrX3v5zB1Utk7CLfzcOVnVVWoXEky7Ceg==} - '@floating-ui/dom@1.7.6': - resolution: {integrity: sha512-9gZSAI5XM36880PPMm//9dfiEngYoC6Am2izES1FF406YFsjvyBMmeJ2g4SAju3xWwtuynNRFL2s9hgxpLI5SQ==} - - '@floating-ui/utils@0.2.11': - resolution: {integrity: sha512-RiB/yIh78pcIxl6lLMG0CgBXAZ2Y0eVHqMPYugu+9U0AeT6YBeiJpf7lbdJNIugFP5SIjwNRgo4DhR1Qxi26Gg==} + '@floating-ui/utils@0.2.12': + resolution: {integrity: sha512-HpCo8tmWzLVad5s2d19EhAz5zqrrQ6s69qd6moPMQvkOuSwDT1YgRfWSVuc4ennqrgv3OHppiOGMQ7oC13yIww==} '@floating-ui/vue@1.1.11': resolution: {integrity: sha512-HzHKCNVxnGS35r9fCHBc3+uCnjw9IWIlCPL683cGgM9Kgj2BiAl8x1mS7vtvP6F9S/e/q4O6MApwSHj8hNLGfw==} @@ -1111,8 +971,8 @@ packages: '@internationalized/number@3.6.7': resolution: {integrity: sha512-3ji1fcrT+FPAK86UqEhB/psHixYo6niWPJtt7+qRaYFynt/BaJG8GhAPimtWUpEiVSTq8ZM8L5psMxGquiB/Vg==} - '@intlify/bundle-utils@11.2.3': - resolution: {integrity: sha512-9mrJyUJGPFJCIFGthvIFT58CknG701z9D0VRtLBtat3teo0fisP3Q6bo/t9YHnljBTEZ42hYm1ukn16LfLkRRg==} + '@intlify/bundle-utils@11.2.4': + resolution: {integrity: sha512-eE18yR9eM9k5n8snCkHIYp2MuVTxa19aF8z9OMyxXWv0frz2HlBZDGIPFjA38pP3OJ1IlRBXC/dW5GILeLMSCQ==} engines: {node: '>= 22.13'} peerDependencies: petite-vue-i18n: '*' @@ -1123,32 +983,32 @@ packages: vue-i18n: optional: true - '@intlify/core-base@11.4.4': - resolution: {integrity: sha512-w/vItlylrAmhebkIbVl5YY8XMCtj8Mb2g70ttxktMYuf5AuRahgEHL2iLgLIsZBIbTSgs4hkUo7ucCL0uTJvOg==} + '@intlify/core-base@11.4.6': + resolution: {integrity: sha512-EOeHO95XESK9IFHgHeZXunsM/WBAoCA0DlaWODvx14vKmetAuS97t+l6Xe9hTUqntPpF93vtVSjjUDafw3wXMw==} engines: {node: '>= 22'} - '@intlify/core@11.4.4': - resolution: {integrity: sha512-ssSzH1odmyDx+n9l9e9jX1OhxSlealuIoHweHkvyMFKaYNRhzk1R/JICmsTWIIBcgoad4Sd8HrGqRmS8pU2ung==} + '@intlify/core@11.4.6': + resolution: {integrity: sha512-TqqW/Ew3w09zHjQh2A+toe766zwo/VjyAJZtmSd7lvsLurHAHofXKIkT3DCuKZ7aKlZyq4KUOidfntPnF5iNkA==} engines: {node: '>= 22'} - '@intlify/devtools-types@11.4.4': - resolution: {integrity: sha512-PcBLmGmDQsTSVV911P8upzpcLJO1CNVYi/IH6bGnLR2nA+0L963+kXN1ZrisTEnbtw2ewN6HMMSldqzjronA0Q==} + '@intlify/devtools-types@11.4.6': + resolution: {integrity: sha512-wowQPpNem56b2d43IJmqbrzG2FeBKe5f/kUGlpNuBmXs6OSqncF8m1+1lxHuW8ISZJF0ma2RkW3iLkw0g0G4VA==} engines: {node: '>= 22'} '@intlify/h3@0.7.4': resolution: {integrity: sha512-BtL5+U3Dd9Qz6so+ArOMQWZ+nV21rOqqYUXnqwvW6J3VUXr66A9+9+vUFb/NAQvOU4kdfkO3c/9LMRGU9WZ8vw==} engines: {node: '>= 20'} - '@intlify/message-compiler@11.4.4': - resolution: {integrity: sha512-vn0OAV9pYkJlPPmgnsSm5eAG3mL0+9C/oaded2JY9jmxBbhmUXT3TcAUY8WRgLY9Hte7lkUJKpXrVlYjMXBD2w==} + '@intlify/message-compiler@11.4.6': + resolution: {integrity: sha512-5nj3jULqeTAC1WovwMs1LQWgatTa2pM/rXN9T3XW8rdOtXW9ZF6/GLSNFTKDQmPLwclhPdgUWLJ/4w3fMeeC/Q==} engines: {node: '>= 22'} - '@intlify/shared@11.4.4': - resolution: {integrity: sha512-QRUCHqda1U6aR14FR0vvXD4+4gj6+fm0AhAozvSuRCw0fCvrmCugWpgiR4xH2NI6s8am6N9p5OhirplsX8ZS3g==} + '@intlify/shared@11.4.6': + resolution: {integrity: sha512-m1p1HHAMLhqSpTRH7VnXdrN0CQ4y+9vunFkpLkbD8soIuBsnQdawZXqMCgvwI2UVF9Ww7sVaw7g9tV2VO7shoA==} engines: {node: '>= 22'} - '@intlify/unplugin-vue-i18n@11.2.3': - resolution: {integrity: sha512-fbPHjOVAkxrPnbhAs6PTNJlfLOJj35ZqYh8CZ9OpeKZiZoulA9lkvrWYP3kfsZ5K/CG9jIHXxpb1/mf5n/mBYA==} + '@intlify/unplugin-vue-i18n@11.2.4': + resolution: {integrity: sha512-bY0ZOaVUvWTyvy4bRGCUKw4Brx5uH/ojjVKsZ1aWzY2drFKIJbeP8DpGMD2QZT8aLpZSUsHtiJlRGLQSZenrvw==} engines: {node: '>= 22.13'} peerDependencies: petite-vue-i18n: '*' @@ -1230,11 +1090,11 @@ packages: '@kwsites/promise-deferred@1.1.1': resolution: {integrity: sha512-GaHYm+c0O9MjZRu0ongGBRbinu8gVAMd2UZjji6jVmqKtZluZnptXGWhz1E8j8D2HJ3f/yMxKAUC0b+57wncIw==} - '@libsql/client@0.17.3': - resolution: {integrity: sha512-HXk9wiAoJbKFbyBH4O+aEhN6ir5ERXuXvwE5OD2eR4/5RUa3Pw/8L9zrnVdU+iNJitRvisPWaIwmhkO3bH7giA==} + '@libsql/client@0.17.4': + resolution: {integrity: sha512-lYayFWasDV78A+TjlEhr6ubb3odBV6OHjb+wdp8VQcyWWAEIjuwbCHaraEUS4m4yWoo0BvZo96It4VdzZRmRWw==} - '@libsql/core@0.17.3': - resolution: {integrity: sha512-2UjK1i7JBkMduJo4WdvvBxMMvVJ31pArBZNONyz/GCJJAH+1UHat2X6vn10S/WpY5fKzIT98WqYFl2vzWRLOfg==} + '@libsql/core@0.17.4': + resolution: {integrity: sha512-LqF9gIvnJ38nmAH1y/ChizHqDO/MO1wLgA96XrraulEEbqXxLjleSH92YWTolbuJKgPUmGu4aJk9W3UnAcxLOQ==} '@libsql/darwin-arm64@0.5.29': resolution: {integrity: sha512-K+2RIB1OGFPYQbfay48GakLhqf3ArcbHqPFu7EZiaUcRgFcdw8RoltsMyvbj5ix2fY0HV3Q3Ioa/ByvQdaSM0A==} @@ -1297,8 +1157,8 @@ packages: peerDependencies: rollup: ^1.20.0 || ^2.0.0 || ^3.0.0 || ^4.0.0 - '@napi-rs/wasm-runtime@1.1.4': - resolution: {integrity: sha512-3NQNNgA1YSlJb/kMH1ildASP9HW7/7kYnRI2szWJaofaS1hWmbGI4H+d3+22aGzXXN9IJ+n+GiFVcGipJP18ow==} + '@napi-rs/wasm-runtime@1.1.6': + resolution: {integrity: sha512-ZLv/JdUfkvOy9eCnnBaGfiO+XimbjebAeO+MRQqD/B+FR1tnRN0tpKSJHRbE8sFfS6aqsXZ67TQjfwfsxULVbg==} peerDependencies: '@emnapi/core': ^1.7.1 '@emnapi/runtime': ^1.7.1 @@ -1322,12 +1182,12 @@ packages: resolution: {integrity: sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==} engines: {node: '>= 8'} - '@nuxt/cli@3.35.2': - resolution: {integrity: sha512-sCxNnFuYamqippdj+Cj4Nue55yaUvasaneyf2mnowK5/F1TKln/WVqTH18McxQ4baLlIlVapIFovKjJx1L8XMQ==} + '@nuxt/cli@3.37.0': + resolution: {integrity: sha512-Zj9NwHjEBzVrgezsgMFjpMhNqwNgROk9DzNi/dyfk1mCbXIRigV11br2xOl0Satek30bmv7oZAfMtCnDe6Ip0Q==} engines: {node: ^16.14.0 || >=18.0.0} hasBin: true peerDependencies: - '@nuxt/schema': ^4.4.5 + '@nuxt/schema': ^4.4.6 peerDependenciesMeta: '@nuxt/schema': optional: true @@ -1359,8 +1219,8 @@ packages: '@vitejs/devtools': optional: true - '@nuxt/eslint-config@1.15.2': - resolution: {integrity: sha512-vS6mWB87tYjB8h3TxG/QziaZ6CGJpEOBd7N/j+64/tjNipUJzNgKwDzyGoOifNqyDDnlvgi6T3m9XpeYm4qRaA==} + '@nuxt/eslint-config@1.16.0': + resolution: {integrity: sha512-YWEqctFWoKOUTaHWXe6TaUgZ1ewN7jeKz/ni4JopxDGIQ8AIMMST6VMWryybHqbPzEfpx8sEcAAFGM4W4quYhQ==} peerDependencies: eslint: ^9.0.0 || ^10.0.0 eslint-plugin-format: '*' @@ -1368,13 +1228,13 @@ packages: eslint-plugin-format: optional: true - '@nuxt/eslint-plugin@1.15.2': - resolution: {integrity: sha512-LZ4gEcPP5GjzAkb6Kk04a4v0vvkTLOpmnEvdDatnkSlxtQLUSwX8v11vcDGXL92ZQ98dFoC1Q1IA6Tz3jdFIig==} + '@nuxt/eslint-plugin@1.16.0': + resolution: {integrity: sha512-vbX9EsJqTqIRwf3+sv9mJ/OtFKhH8o8NIbNF9Q6weQZY1MRf8jGEvLnjsyJa5VEEHl5TXSXsPcyrmIK58jsRpw==} peerDependencies: eslint: ^9.0.0 || ^10.0.0 - '@nuxt/eslint@1.15.2': - resolution: {integrity: sha512-LwDavQoLl+y0sIDqWEYbOnM6FOmXVIYSEjuvkO1hgAqhb0CvG3hgTnfE1qkf1jOAZp3CZGP+6rxRAJ0dxhueIQ==} + '@nuxt/eslint@1.16.0': + resolution: {integrity: sha512-VlZBHG86xUY72pZMcZ98cDtsUj972vZ23Pd4wqpxMLgLJ3RtHxQke0vgD/6PZ6uJsRjh7CAUGpsp2+d26ZdaSA==} peerDependencies: eslint: ^9.0.0 || ^10.0.0 eslint-webpack-plugin: ^4.1.0 @@ -1385,22 +1245,32 @@ packages: vite-plugin-eslint2: optional: true - '@nuxt/kit@3.21.6': - resolution: {integrity: sha512-5VOwxUcoM/z6w4c75hQrikHpY+TzjTLZQ+QnuO7KajyGx0IJBLVy1lw25oy79leF+GgyjJJO1cHfUfWeuEDCzA==} + '@nuxt/kit@3.21.9': + resolution: {integrity: sha512-SJ3W7INBJLwnmFQPm2BACiqS25enc6QIm87aLQCcxo/TFtRnWanYtgDdwyHqUHgOAGmq9pYjgk83B2bpBKnDTw==} engines: {node: '>=18.12.0'} - '@nuxt/kit@4.4.6': - resolution: {integrity: sha512-AzsqBJeG7b3whIciyzkz4nBossEotM314KzKAptc8kH07ORBIR8Qh3QYKepo2YZwtxiDP2Y9aqzAztwpSEDHtw==} + '@nuxt/kit@4.5.0': + resolution: {integrity: sha512-VD4GjRjbh7r7ILoXYbiKeQgZuYP/vJ7iMk6fSRak1+xEyXHpQ+OIq/EfIjfsHv7DVimddOB+I6W/wGXjRVZ+Ng==} engines: {node: '>=18.12.0'} - '@nuxt/nitro-server@3.21.6': - resolution: {integrity: sha512-tcSZauVgyUNZRCC0zYqauRJpEiHS8In3mXkupDlCYhQQmVNTxzxvBim3U4rR0Ww50ZJzOAtFOADeWTjLjYd3GQ==} - engines: {node: ^20.19.0 || >=22.12.0} + '@nuxt/nitro-server@4.5.0': + resolution: {integrity: sha512-XxLtFxBLJkXJ368mzgub7eDMc9I4pwnZhN9gX8UTzajgoEnbxPhmUl7xG8RVBMovQ2FOFjAph2kwJrnlMNX/cw==} + engines: {node: ^22.19.0 || ^24.11.0 || >=26.0.0} peerDependencies: - nuxt: ^3.21.6 + '@babel/plugin-proposal-decorators': ^7.25.0 || ^8.0.0 + '@babel/plugin-syntax-typescript': ^7.25.0 || ^8.0.0 + '@rollup/plugin-babel': ^6.0.0 || ^7.0.0 + nuxt: ^4.5.0 + peerDependenciesMeta: + '@babel/plugin-proposal-decorators': + optional: true + '@babel/plugin-syntax-typescript': + optional: true + '@rollup/plugin-babel': + optional: true - '@nuxt/schema@3.21.6': - resolution: {integrity: sha512-/1m3/q2QtLQ+c+4CDrlwGtNC5nJ3KdK+MTeaRhMN+fNavqeQFdqArfXVYdzUX+ZeqOL0Pt00vJnwKm0VM1I8mQ==} + '@nuxt/schema@4.5.0': + resolution: {integrity: sha512-RY4cH0z2JRlmcsAIrBBXlmRW8FnCBTRdHCByttog+lAxg1hrJ2W5OdnoHO0KMeZSJg67MdeYPOZu7ZszFEymgA==} engines: {node: ^14.18.0 || >=16.10.0} '@nuxt/telemetry@2.8.0': @@ -1446,162 +1316,47 @@ packages: vitest: optional: true - '@nuxt/vite-builder@3.21.6': - resolution: {integrity: sha512-JjUJzo/KXgHnpI/podDCBGn93QyfKjcxrFzZkXRXsaUSIXMncrQK4Bs9OKBIWxcpsWxs93a130w1i7qjd2qizA==} - engines: {node: ^20.19.0 || >=22.12.0} + '@nuxt/vite-builder@4.5.0': + resolution: {integrity: sha512-j57djn164gnTIFMw0ISMMesX6a98H51XKoERm90401Prb4VERq0ULNb8zOXrHgJMGFOy6An7tKo8fD/J7qCLLA==} + engines: {node: ^22.18.0 || ^24.11.0 || >=26.0.0} peerDependencies: - nuxt: 3.21.6 - rolldown: ^1.0.0-beta.38 + '@babel/plugin-proposal-decorators': ^7.25.0 || ^8.0.0 + '@babel/plugin-syntax-jsx': ^7.25.0 || ^8.0.0 + nuxt: 4.5.0 + rolldown: ^1.0.0 rollup-plugin-visualizer: ^6.0.0 || ^7.0.1 vue: ^3.3.4 peerDependenciesMeta: + '@babel/plugin-proposal-decorators': + optional: true + '@babel/plugin-syntax-jsx': + optional: true rolldown: optional: true rollup-plugin-visualizer: optional: true - '@nuxtjs/i18n@10.4.0': - resolution: {integrity: sha512-GK/3YA/CQ2eZTYopHyxYfXYi2svZALvg01VFmUNJt2l3IMk/m+dDRtI+RQtafz0be0Pq+NSgoBb/oZNcfu0CUg==} + '@nuxtjs/i18n@10.4.1': + resolution: {integrity: sha512-4fQWCNKF8+3s4+5OjBZqD20FkO2UpWhMWg43BO3d9FWlFcUKtb065lj1gPK1VjTm6omvKw+6W3d91i1OpbYrBw==} engines: {node: '>=20.11.1'} '@nuxtjs/tailwindcss@6.14.0': resolution: {integrity: sha512-30RyDK++LrUVRgc2A85MktGWIZoRQgeQKjE4CjjD64OXNozyl+4ScHnnYgqVToMM6Ch2ZG2W4wV2J0EN6F0zkQ==} - '@oxc-minify/binding-android-arm-eabi@0.131.0': - resolution: {integrity: sha512-yLa7y9jjJgUeUUMm6AtjmBIQzK1YU5sYcNJnVVtr6WtoWu5SpuNDZ8u6cl/dhn0g/oQgVlf+E+8WJfsExt8R+Q==} - engines: {node: ^20.19.0 || >=22.12.0} - cpu: [arm] - os: [android] - - '@oxc-minify/binding-android-arm64@0.131.0': - resolution: {integrity: sha512-ShZDYFEVd46qCc9L0D3ZTPLXe/DezTedEj7g6x1Bdlm1WwgQ1pQJgWkqpMGlQhUet5wq4WUpQB/P6afK470Ydg==} - engines: {node: ^20.19.0 || >=22.12.0} - cpu: [arm64] - os: [android] - - '@oxc-minify/binding-darwin-arm64@0.131.0': - resolution: {integrity: sha512-h+5iCSKxpK7SJdAHmY4I+0BBxR+pJQVNJvAIB3KcOVyz8/ybaO2r41URCwV1N3FnPYkIIiMokZ24YYMB6/GrRw==} - engines: {node: ^20.19.0 || >=22.12.0} - cpu: [arm64] - os: [darwin] - - '@oxc-minify/binding-darwin-x64@0.131.0': - resolution: {integrity: sha512-EIP8KmjqfZeDdhrbG+0GDsiw1/Bi3415uCFokhOm6b8tGG0UdiemVHAz9IQE/sIJgwguXYtg5ydz9oFYVOlOfA==} - engines: {node: ^20.19.0 || >=22.12.0} - cpu: [x64] - os: [darwin] - - '@oxc-minify/binding-freebsd-x64@0.131.0': - resolution: {integrity: sha512-2/xcCZfVm24sLFHbI5Rg/t6Ec93pth0NvTgy/J8vXjIOy8Yf5kkO/K1KVtdZBHW+cyLPe7YLLybxMF/BeqM8Kg==} - engines: {node: ^20.19.0 || >=22.12.0} - cpu: [x64] - os: [freebsd] - - '@oxc-minify/binding-linux-arm-gnueabihf@0.131.0': - resolution: {integrity: sha512-LDQ1Y+QfL5lN54ib1Je2paoh4EsQmmDRvB5Bd9AQIGCP16LI+8jZnB8cjTT3GD1acITDg1aiaBKk9JpBjBA4iw==} - engines: {node: ^20.19.0 || >=22.12.0} - cpu: [arm] - os: [linux] - - '@oxc-minify/binding-linux-arm-musleabihf@0.131.0': - resolution: {integrity: sha512-mz99O2sZoyHnMoksxlZ5Mc+USS/w/uIp1LWQAn42RHAvVdIyQsqPRmTD/pJtW/KnjgpgaB0yDCpI6Xa3ivJppQ==} - engines: {node: ^20.19.0 || >=22.12.0} - cpu: [arm] - os: [linux] - - '@oxc-minify/binding-linux-arm64-gnu@0.131.0': - resolution: {integrity: sha512-QjS1N4FwCV67ZylGyfTWoqURzar48dN5WTq/JVrGsiShFKlT9SpuyRsoUGMGJhiKNiI39MsLIHBlBWvoRQG+ng==} - engines: {node: ^20.19.0 || >=22.12.0} - cpu: [arm64] - os: [linux] - libc: [glibc] - - '@oxc-minify/binding-linux-arm64-musl@0.131.0': - resolution: {integrity: sha512-HGzqTov5sAzXyaNfRkQEpl0fRs+PrMYjT8b5jZAw8foQ/qnW+VMWgAr80Q+2j79T5nhXfboSF5SUgB8mcisgHw==} - engines: {node: ^20.19.0 || >=22.12.0} - cpu: [arm64] - os: [linux] - libc: [musl] - - '@oxc-minify/binding-linux-ppc64-gnu@0.131.0': - resolution: {integrity: sha512-zpUZ4pmbDBqaZmRYacxeLHUBxA3fs5K7hi1WSXRVMXC4OjWuVcLsNxeavenKF9i0YtP7Q5n2z12Rz7eEnNWoDA==} - engines: {node: ^20.19.0 || >=22.12.0} - cpu: [ppc64] - os: [linux] - libc: [glibc] - - '@oxc-minify/binding-linux-riscv64-gnu@0.131.0': - resolution: {integrity: sha512-CYrC4tpW1wolbw/Fox+T0hxW92s1aG/WLi+htkk02JMiCHOWqGQKxUnm37lLiODKR/OwTYht3LB4xNrsS0RtCg==} - engines: {node: ^20.19.0 || >=22.12.0} - cpu: [riscv64] - os: [linux] - libc: [glibc] - - '@oxc-minify/binding-linux-riscv64-musl@0.131.0': - resolution: {integrity: sha512-ZQNur0zujUjNYgjFF4mcNaeEKWuerY9XkaALYtBsHqNetkj55w0ZwCKYfYKLH2JAdyNF2LuS0s7VGgjXP9EvWA==} - engines: {node: ^20.19.0 || >=22.12.0} - cpu: [riscv64] - os: [linux] - libc: [musl] - - '@oxc-minify/binding-linux-s390x-gnu@0.131.0': - resolution: {integrity: sha512-tR8oiFSNpcS1mfGY1N3/Hy6TxP2wr5X9FFdn/y8GarN8ST/JMLY5SUiwPiU35NKiC69CDaAsLHXoIKUxK/r8Pw==} - engines: {node: ^20.19.0 || >=22.12.0} - cpu: [s390x] - os: [linux] - libc: [glibc] - - '@oxc-minify/binding-linux-x64-gnu@0.131.0': - resolution: {integrity: sha512-KodzbW12zmT/C/w4bGv2aWN7Q5+KVJKbNoAv5hooYeSujj8xSPGWl8pnyj7dJ9nd8j0CVjubEvHQ86rtzV99OA==} - engines: {node: ^20.19.0 || >=22.12.0} - cpu: [x64] - os: [linux] - libc: [glibc] - - '@oxc-minify/binding-linux-x64-musl@0.131.0': - resolution: {integrity: sha512-CNG3/hPE6MxdLikfLq5l0aZMvJ3W5AP1aoVjzQ1Itokv5sbfBcW0fp6Srn8mB86CyAqO9e7dbffZVOWBDVkhgw==} - engines: {node: ^20.19.0 || >=22.12.0} - cpu: [x64] - os: [linux] - libc: [musl] - - '@oxc-minify/binding-openharmony-arm64@0.131.0': - resolution: {integrity: sha512-UyfimTwMLitJ0+5i5fL9M9U4E+DcIQJpGZWbVxxD3Mp9f7CTyQBIHnS68VEGZe+KQL/Y3IIb3AJ7cZB+ICgTVQ==} - engines: {node: ^20.19.0 || >=22.12.0} - cpu: [arm64] - os: [openharmony] - - '@oxc-minify/binding-wasm32-wasi@0.131.0': - resolution: {integrity: sha512-fH7sy51iYnmGv2pEPsS9KEVExHDKI1/nfy/OqYnStW2E5di41CQ1qBjVIvxHOMHcPD8RmKEBCf0zng6d9/vGDg==} - engines: {node: ^20.19.0 || >=22.12.0} - cpu: [wasm32] - - '@oxc-minify/binding-win32-arm64-msvc@0.131.0': - resolution: {integrity: sha512-C05v+5eIdvF4YXQ4t+U0JQDl8IWoIabxsmh4inBSGOL0VziELmis3lb5X6JMj208RbQdKhZGJbUkmNWq2B5Kxw==} - engines: {node: ^20.19.0 || >=22.12.0} - cpu: [arm64] - os: [win32] - - '@oxc-minify/binding-win32-ia32-msvc@0.131.0': - resolution: {integrity: sha512-bZio0euDmT6Er00I6jng66ftGw5doP/UmCAr2XtBooZMdr7ofTJ4+Bpp+ufguVIeVk5i1vgMPsq7g6FTcxHevg==} - engines: {node: ^20.19.0 || >=22.12.0} - cpu: [ia32] - os: [win32] - - '@oxc-minify/binding-win32-x64-msvc@0.131.0': - resolution: {integrity: sha512-Lih6D0rjXStl0eUjzlcCiqr60AI/LuE+Zy29beEeXrXqTjOf8t0mcDX/MN3TZBBncxwUNi6osAEsKj4FRnItmQ==} - engines: {node: ^20.19.0 || >=22.12.0} - cpu: [x64] - os: [win32] - '@oxc-parser/binding-android-arm-eabi@0.128.0': resolution: {integrity: sha512-aca6ZvzmCBUGOANQRiRQRZuRKYI3ENhcit6GisnknOOmcezfQc7xJ4dxlPU7MV7mOvrC7RNR1u3LAD7xyaiCxA==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm] os: [android] - '@oxc-parser/binding-android-arm-eabi@0.131.0': - resolution: {integrity: sha512-t2xicr9pfzkSRYx5aPqZqlLaayIwJTqgQ81Jor31Xep2nGyL2Aq3d0K5wOfeR7VevaSdxaS9dzSQP9xDwn8fDg==} + '@oxc-parser/binding-android-arm-eabi@0.132.0': + resolution: {integrity: sha512-KrLaPWa5c9Y7LkW+rKkaUE3y7DBDrQtaf7rlsSDfv6KAHUjgzAIRA761Lrrp6//Yd/Rlie/yEOt9YENCoJnOcw==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [arm] + os: [android] + + '@oxc-parser/binding-android-arm-eabi@0.140.0': + resolution: {integrity: sha512-ZfjDZ422mo7eo3b3VltqNsV9kmv1qt/sPEAMSl64iOSwhVfd0eIZ9LB79Mbs1xYXJnk7WSROwzBCKDIiVxPTvQ==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm] os: [android] @@ -1612,8 +1367,14 @@ packages: cpu: [arm64] os: [android] - '@oxc-parser/binding-android-arm64@0.131.0': - resolution: {integrity: sha512-nlGIod6gw75x1aEDgLS+srj+JRGY0HHm9MI9YgzE/B64l6d6+H3MSP9NOgp0+HTg8tp4vV9rVfgQGgd+TfVZcA==} + '@oxc-parser/binding-android-arm64@0.132.0': + resolution: {integrity: sha512-SThDrSeamB/kG2+NxcJ5/wSLcV6dUqDknrPLqFYQ0ST/55mtBP4M7Q/f3QbubH6aAd11wpzZn/nwbVRSdobOpg==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [arm64] + os: [android] + + '@oxc-parser/binding-android-arm64@0.140.0': + resolution: {integrity: sha512-Ia8jSvikUX6Sf+Ht+KOCUF/k1HpR0VlmqIYymubmWDebOEGtsyliHDR6JxsZ4IX3/c/GbrB1uh09aVGQv/LQmQ==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm64] os: [android] @@ -1624,8 +1385,14 @@ packages: cpu: [arm64] os: [darwin] - '@oxc-parser/binding-darwin-arm64@0.131.0': - resolution: {integrity: sha512-jukuV6xe5RbQKFo7QD34NDCLDZp4PSOm8rmckhNdH/60ymG5zXbDzGBEyc+nTkuLQNama2aSGCt+CPfpjNTqyw==} + '@oxc-parser/binding-darwin-arm64@0.132.0': + resolution: {integrity: sha512-Lc0f/TYoKBghE5/2Gsv7bLXk+TJZunx2Tf61X8hG4ARXdc8UYI26dCGccFSd1AyFbK3jfaNXtMnupggDbjPXdQ==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [arm64] + os: [darwin] + + '@oxc-parser/binding-darwin-arm64@0.140.0': + resolution: {integrity: sha512-G6VK0nK61pH0d0mBjUqSZbVxGqqO5uzeginLDQj+gOO6ObfJjXRwgkD/ol0w1INcnFeAb6YGGO7qc3ueGHaycQ==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm64] os: [darwin] @@ -1636,8 +1403,14 @@ packages: cpu: [x64] os: [darwin] - '@oxc-parser/binding-darwin-x64@0.131.0': - resolution: {integrity: sha512-g3JOo4khe9rslHm5WYaVDWb0HS/M1MLR3I9S8560MkKIcC96VQY00QjOlsuRyfSj/JDXj8i9T7ryPO2RidiXVg==} + '@oxc-parser/binding-darwin-x64@0.132.0': + resolution: {integrity: sha512-RG2eJIpf7C21z9HSSXFw1bTArdpKe7Y4fwcJTwRq1yCSe1vSavaN9GA1sm9KqzemTLAGVktQ+7qBTGp0vQeUZg==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [x64] + os: [darwin] + + '@oxc-parser/binding-darwin-x64@0.140.0': + resolution: {integrity: sha512-HazBOuZzd2pO1C2uMmp8Gv7mhzMHqKSKDS1OZfcLEvpIcgA+48J92HEtNanVHDIzRD9PRPCV6aS6fkZIWOVl8Q==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [x64] os: [darwin] @@ -1648,8 +1421,14 @@ packages: cpu: [x64] os: [freebsd] - '@oxc-parser/binding-freebsd-x64@0.131.0': - resolution: {integrity: sha512-1hziITDTxjMePnX+dR9ocVT+EuZkQ8wm4FPAbmbEiKG+Phbo73J1ZnPAA6Y/aGsWF3McOFnQuZIktAFwalkfJQ==} + '@oxc-parser/binding-freebsd-x64@0.132.0': + resolution: {integrity: sha512-wQIPntPLtJ8NcBpvKPbEv3NqzV6k8eP8tP/jE9Rg8HTg/j7urZGFSsTCPCW5k77Qfw2DM4vRvc9p3I4yq/Shvw==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [x64] + os: [freebsd] + + '@oxc-parser/binding-freebsd-x64@0.140.0': + resolution: {integrity: sha512-9hSUU+HmTUyOe4JzMHxNGgLWNY7rrO+6ShicZwImNJacEAACDMIkuEQQkvXSL+WJN50jaNtLYJv8s4OcBdpyUQ==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [x64] os: [freebsd] @@ -1660,8 +1439,14 @@ packages: cpu: [arm] os: [linux] - '@oxc-parser/binding-linux-arm-gnueabihf@0.131.0': - resolution: {integrity: sha512-9uRxfXwyKG9+MwmGQBo2ncPNwZH5HTmCETFM2WiuDBNDCW4NC5ttSQkwCAMrTAWgwMzVBH1CP8pM0v7nebCWXQ==} + '@oxc-parser/binding-linux-arm-gnueabihf@0.132.0': + resolution: {integrity: sha512-PixKEpeSe3yxQWqNyOCBALRYc72+Tj7ILDofUl3iXo25cVOzLA6jHUhmOINRtWIPh7dbUie3QNeabwaQpZTw6w==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [arm] + os: [linux] + + '@oxc-parser/binding-linux-arm-gnueabihf@0.140.0': + resolution: {integrity: sha512-RAEuQsYtS0KcDFqN0ABTjyyNlokS91JeuDuoW9tEbG0JTbRNXnpQUdbYc/16JoA6Z/2ALbNrE3KmxtqDiuIjCQ==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm] os: [linux] @@ -1672,8 +1457,14 @@ packages: cpu: [arm] os: [linux] - '@oxc-parser/binding-linux-arm-musleabihf@0.131.0': - resolution: {integrity: sha512-mgbLvzRShXOLBdWGInf08Af4q+pfj1xD8hSgLClDZ9of/BXkB6+LIhTH7fihiDUipqB3yoSkKBWaZ3Ejlf5Yag==} + '@oxc-parser/binding-linux-arm-musleabihf@0.132.0': + resolution: {integrity: sha512-sCR+DzGHlyHKnbA2z9zWjTUhIo8Sy0enJl4RDsBwPmkxYynPatpwOAWe8W5127SlW0boqUWHGtr1NWn5UwIhXQ==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [arm] + os: [linux] + + '@oxc-parser/binding-linux-arm-musleabihf@0.140.0': + resolution: {integrity: sha512-c4CkHvPvqfojouredJ0w3e6+jiBq0SbFyhH61kr/zPb/7XsaYTNKQ54vmlSsopfdQbNDX40ZeK9Abs2Qet6wcw==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm] os: [linux] @@ -1685,8 +1476,15 @@ packages: os: [linux] libc: [glibc] - '@oxc-parser/binding-linux-arm64-gnu@0.131.0': - resolution: {integrity: sha512-OPT8++4aN6j2GJ8+3IZHS/byXoZP4aSBn+FoG6rgBJ2fKwPKXWF3MqrFMNW7NKHM28FLY579xYLxJSfgobEqPA==} + '@oxc-parser/binding-linux-arm64-gnu@0.132.0': + resolution: {integrity: sha512-sQBix5P2cW+IpzTcCwYxnh9yALrKSIkKJThspBvMGcygSMnbzkSvhN7SfuX1hvBk8y1XEChsdkU3ET0V5DmzUw==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [arm64] + os: [linux] + libc: [glibc] + + '@oxc-parser/binding-linux-arm64-gnu@0.140.0': + resolution: {integrity: sha512-yrjmLj8ixPB25yqvPGr28meGjb+keed7m1GqqY/0uqkhZIoT4t9zmfwUgFEtC33C7dtE+UQ7TU0IaVxf97SWJg==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm64] os: [linux] @@ -1699,8 +1497,15 @@ packages: os: [linux] libc: [musl] - '@oxc-parser/binding-linux-arm64-musl@0.131.0': - resolution: {integrity: sha512-vtPiwmfVTAXzaxDKsOXG+LwgRAA7WEnaeHzhS5z0GE89gAK18KSXnly7Z6saXXq6L3dVMyK44uoTI03zKxrpmw==} + '@oxc-parser/binding-linux-arm64-musl@0.132.0': + resolution: {integrity: sha512-WozHg3Kc//8Sk756HXXgMbEAvqtG+Lzb9JOojwQzIGDtN78Az2dLttkb71akWYUF/8IgYfDSlfKh4Uot8is5Vw==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [arm64] + os: [linux] + libc: [musl] + + '@oxc-parser/binding-linux-arm64-musl@0.140.0': + resolution: {integrity: sha512-ggGMQTN8Agwxp2WiLMpdY671dt0qTDJWiWlJeig3HnUwTnerRl0J2JdGVghWBeDcss2D9S2V2Js6dZHEiVabVA==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm64] os: [linux] @@ -1713,8 +1518,15 @@ packages: os: [linux] libc: [glibc] - '@oxc-parser/binding-linux-ppc64-gnu@0.131.0': - resolution: {integrity: sha512-8AW8L7w5cGHSdZPcyZX2yR0+GUODsT15rbRjfdD54rv6DMbtuEB19ysLOpKJlRGfH6UNYNpCHaU1uJWgTWf1/w==} + '@oxc-parser/binding-linux-ppc64-gnu@0.132.0': + resolution: {integrity: sha512-CmX/ulNBOEwWTyVRmcpYKAcAizW6+OjtLJgo7fXoL9OqQvjF4VER8tPomv44vwzfSCy1BHbsB0ZlZYzYJNj4cA==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [ppc64] + os: [linux] + libc: [glibc] + + '@oxc-parser/binding-linux-ppc64-gnu@0.140.0': + resolution: {integrity: sha512-IgTs8xYAFgAUGNmR65tIqjlJ8vKgrfXzC515e9goSdfMyKQV4aJpd2pUUudU4u51G64H0/DSEJEXKOraxm9ZCA==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [ppc64] os: [linux] @@ -1727,8 +1539,15 @@ packages: os: [linux] libc: [glibc] - '@oxc-parser/binding-linux-riscv64-gnu@0.131.0': - resolution: {integrity: sha512-vvpjkjEOUsPcsYf8evE4MO3aGx9+3wodXEBOicGNnOwTuAik8eBONNkgSdhkGsAblQmfVHJyanRnpxglddTXIA==} + '@oxc-parser/binding-linux-riscv64-gnu@0.132.0': + resolution: {integrity: sha512-j9oQS+hM90SdhviNGWbPgT4+Rlq+ac++q/zjgwPD1mVHgxHzATvoRGtDx0sXGmFOQ9J9YkwAhYGb5MAHL6TAsA==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [riscv64] + os: [linux] + libc: [glibc] + + '@oxc-parser/binding-linux-riscv64-gnu@0.140.0': + resolution: {integrity: sha512-A1x+PMWZmSGaFVOx2YeNTFau8uD+QO14/vLP4GrcuvUPs3+nBkUOjy9Lus86ftHsDojjYMbvBelmKc3F7Rv08g==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [riscv64] os: [linux] @@ -1741,8 +1560,15 @@ packages: os: [linux] libc: [musl] - '@oxc-parser/binding-linux-riscv64-musl@0.131.0': - resolution: {integrity: sha512-AqmcNC3fClXX+fxQ6VGEN1667xVFiRBkY0CZmDMSiaeFUsv1+UkBPYYi48IUKcA9/ivvoKNRzQl2I4//kT9F/w==} + '@oxc-parser/binding-linux-riscv64-musl@0.132.0': + resolution: {integrity: sha512-bLz+Xi+Agnfmd7kWPEsSVwCn2k4EyIalZkNBcQ0OGIv9rqn8VgCPLNd03tM9mKX/5TdlvDXalz0q71BIrOPNqg==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [riscv64] + os: [linux] + libc: [musl] + + '@oxc-parser/binding-linux-riscv64-musl@0.140.0': + resolution: {integrity: sha512-zBqpfRo2myWPrPo5xUjeZqlnPXPXsX8BcWtWff66/eGRQdbPjhzPgXa/F+AtxT2afUViPxbuDlwscMKzQ5tg+g==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [riscv64] os: [linux] @@ -1755,8 +1581,15 @@ packages: os: [linux] libc: [glibc] - '@oxc-parser/binding-linux-s390x-gnu@0.131.0': - resolution: {integrity: sha512-7d3jOMKy7RSQCcDLIci+ySll2FgsOMl/GiRux4q2JNv0zg4EdhFISa9idvrdN/HEUIQQJNg6dmveUeJl2YErGA==} + '@oxc-parser/binding-linux-s390x-gnu@0.132.0': + resolution: {integrity: sha512-U6t2qbJU0ypTfyj9QV3W1Y6mITDTL8ai/OR6NUn85vyHthOvobKWgXzU4tu0EskSzlpuVFz1g0jFGulDIUKHxQ==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [s390x] + os: [linux] + libc: [glibc] + + '@oxc-parser/binding-linux-s390x-gnu@0.140.0': + resolution: {integrity: sha512-2M1DPm/8w9I//YzFlFC9qXw+r2tJFh5CYwRlYTq2vUJQS7qoQftEDeCZ8EnN7KHtvSiXvYj8mZI5pR7DpXmcEw==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [s390x] os: [linux] @@ -1769,8 +1602,15 @@ packages: os: [linux] libc: [glibc] - '@oxc-parser/binding-linux-x64-gnu@0.131.0': - resolution: {integrity: sha512-JHK/h95qVqVQ+ITER837kcTdwBDFpFaNnOTYGCP0zdUSX/mLKC7tXOoyrTb6vG7iRPwGlcgBil3v2IjYw1FqJA==} + '@oxc-parser/binding-linux-x64-gnu@0.132.0': + resolution: {integrity: sha512-WcEaSNHFk8yz5YFlQQAlhq6jOFmZBB/RKE7uzhyCIf+pF1Lmv9gUH4221mle2Gd9iHyWT3ySNph8yZgb1xYdWg==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [x64] + os: [linux] + libc: [glibc] + + '@oxc-parser/binding-linux-x64-gnu@0.140.0': + resolution: {integrity: sha512-8aRDbZ/U/jO8N7go1MO72jtbpb4uswV8d7vOkMvt/BPgZiyEYvl1VIWK4ESxZZhnJ4tqwVldgX7dNiP/eB1Jdg==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [x64] os: [linux] @@ -1783,8 +1623,15 @@ packages: os: [linux] libc: [musl] - '@oxc-parser/binding-linux-x64-musl@0.131.0': - resolution: {integrity: sha512-b2BO82O8azXAyf7EUgOPKu145nWypbNyk07HbU09fkzhm9lEA5oPvaN/M8Nlo7tOErVTa2WOgS4QbOnxAPXdDQ==} + '@oxc-parser/binding-linux-x64-musl@0.132.0': + resolution: {integrity: sha512-iQrV4iJzQgRwK3BWRmQl1C3C6g3wYpXN2WLdQdyR+efoUnncdShZAVp9OgcojtlD3MDRbuOMGG3SjxF4fL4nlQ==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [x64] + os: [linux] + libc: [musl] + + '@oxc-parser/binding-linux-x64-musl@0.140.0': + resolution: {integrity: sha512-xRqpeI8U2sQQS1W5BMWRyMTxtagkuLG2dEWruet5lFsWHTvBth11/TpSaJatHdqVVwHN0q3uuoS9zRsGinq8hg==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [x64] os: [linux] @@ -1796,8 +1643,14 @@ packages: cpu: [arm64] os: [openharmony] - '@oxc-parser/binding-openharmony-arm64@0.131.0': - resolution: {integrity: sha512-GHO9glZaX7LkX/OGfluEPf1yjg+ehiFbUdowbX6uNWOQhmwKWU4m4+nZ9FJkrHNKuxyI1KKertMdGjVKCApKWA==} + '@oxc-parser/binding-openharmony-arm64@0.132.0': + resolution: {integrity: sha512-FWzmUGrZ6GUby4U7WIwcCtab6tdmlTO3xTRRKyb5kjIJVEiaUAT8animUG/nK8ZCA8gkRkPOTId4rl6uTqUmJQ==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [arm64] + os: [openharmony] + + '@oxc-parser/binding-openharmony-arm64@0.140.0': + resolution: {integrity: sha512-GbGRe26MqAKciFRvXeHNQJ6VAHYs9R4miP89sEAncysM3n+f4lnyLWgsa9kklJNpfnxdq2yRoNYHFqwBckVimw==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm64] os: [openharmony] @@ -1807,8 +1660,13 @@ packages: engines: {node: ^20.19.0 || >=22.12.0} cpu: [wasm32] - '@oxc-parser/binding-wasm32-wasi@0.131.0': - resolution: {integrity: sha512-3SkikPaEFoih1N83qLVEDLRLeY4nYsf6JT9SnWiMCQ5lGQdKup6bEuKCqkRiG9dD1IIaFeYz9RjlciPmYoFIWA==} + '@oxc-parser/binding-wasm32-wasi@0.132.0': + resolution: {integrity: sha512-TlbMppxJI5CjWDes0QaP6G3aneVg1yikBu5QYI+DUShF9WDL66ccgKFNNGmi/Wybtszw6hxwAvv76T4DaPKnHw==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [wasm32] + + '@oxc-parser/binding-wasm32-wasi@0.140.0': + resolution: {integrity: sha512-vFiC1hqys+hkX1GnQkIoiTQJNiUm43Z0lO35ETKXTw0YtpW7+cN58YRRXFAQQ+TgpkIi3lrhcxdlnqz+Oi3ptQ==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [wasm32] @@ -1818,8 +1676,14 @@ packages: cpu: [arm64] os: [win32] - '@oxc-parser/binding-win32-arm64-msvc@0.131.0': - resolution: {integrity: sha512-Os5bEhryeA2jkH+ZrnZyAC1EP5gs+X4YB1Fjqml7UPD5kU7ecsK1MPEVMfCrdt/GDNpDbavYXiOXOdyJ5b3OPw==} + '@oxc-parser/binding-win32-arm64-msvc@0.132.0': + resolution: {integrity: sha512-RH/NbFjGKqdUAUi7Oh3LQPxUk2hsWFEEQ38HSnbRQT8QjBZFKqL1fMbmsB3N4jy/KPh9iX94+9dmkEMBBbambw==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [arm64] + os: [win32] + + '@oxc-parser/binding-win32-arm64-msvc@0.140.0': + resolution: {integrity: sha512-fGSQldwEYKhM+H8uLt76Op8hh5+FYaR6lvvQ1Txw3Mhn86DyQXLcI0fi1EkFlTK7F+46OCk/j0AJMzZQm6g5Xg==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm64] os: [win32] @@ -1830,8 +1694,14 @@ packages: cpu: [ia32] os: [win32] - '@oxc-parser/binding-win32-ia32-msvc@0.131.0': - resolution: {integrity: sha512-m+jNz9EuF0NXoiptc6B9h5yompZQVW/a5MJeOu5zojfH5yWk82tvF2ccrHkfhgtrS9h9DD5l1Qv8dWlfY7Nz8g==} + '@oxc-parser/binding-win32-ia32-msvc@0.132.0': + resolution: {integrity: sha512-JUr4jQY9jxoIB/YTLXr6XofSi5xikj6p5/Ns1h0VOBDT0j1jKU+kMsv2xxv51RwnETcXpA1Yw/9oUAfcqfaqEA==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [ia32] + os: [win32] + + '@oxc-parser/binding-win32-ia32-msvc@0.140.0': + resolution: {integrity: sha512-sDS2Bai+g3ZWYwfZqmosiSuFDBcVnZ3Ta6pszzsiJoLMqsJEWKcxXXbGa7b7yXr++W2lQNPb3ZRJ8czseqL7RA==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [ia32] os: [win32] @@ -1842,8 +1712,14 @@ packages: cpu: [x64] os: [win32] - '@oxc-parser/binding-win32-x64-msvc@0.131.0': - resolution: {integrity: sha512-o14Hk8dAyiEUMFEWEgmAwFZvBt1RzAYLM3xeQ+5315JXgVYhoemivgYcbYVRbsFkS71ShMGlAFE0kPnr460rww==} + '@oxc-parser/binding-win32-x64-msvc@0.132.0': + resolution: {integrity: sha512-2dapgHpA5X8DSXF4AU36hJWYf6zP0tKjMXFRAZFBD62pkevW/uhFDXoFH9Y/3Fd2EtDrw5ByNnR1wVE9X9y0SQ==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [x64] + os: [win32] + + '@oxc-parser/binding-win32-x64-msvc@0.140.0': + resolution: {integrity: sha512-kHbE1zWyb5OQgJA6/5P4WjiuB01sYdQwtZnSSyE58FQEXDAMnyeeq4vj7KgN75i5SlBzOs8A5MrtlD3gOlDKqQ==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [x64] os: [win32] @@ -1851,8 +1727,14 @@ packages: '@oxc-project/types@0.128.0': resolution: {integrity: sha512-huv1Y/LzBJkBVHt3OlC7u0zHBW9qXf1FdD7sGmc1rXc2P1mTwHssYv7jyGx5KAACSCH+9B3Bhn6Z9luHRvf7pQ==} - '@oxc-project/types@0.131.0': - resolution: {integrity: sha512-PgnWDfV0h+b16XNKbXU7Daib/BFSt/J2mEzfYIBu6JB/wNdlU+kVYXCkGA1A9fWkTbOgbjh4e6NhPeQOYvFhEA==} + '@oxc-project/types@0.132.0': + resolution: {integrity: sha512-FESMOxil5Se014ui/Eq8fT5uHJo6nIRwH0PfJrZJXs6Gek3ZVFOrpUv3YIZT20m+extU98Hg1Ym72U58rlsxUQ==} + + '@oxc-project/types@0.139.0': + resolution: {integrity: sha512-r9gHphtCs+1M7J0pw6Sn/hh/Wpa/iQrOOkrNAlVLF/gHq+/CJmHIWKKUUhdWjcD6CIa8idarspCsASiXCXvFUw==} + + '@oxc-project/types@0.140.0': + resolution: {integrity: sha512-h5LUOzGArYemnW1NMz/DuuQhBi96J6JL2Bk8zE4kvqxB5Sg3jxmCiH4uyOWHDkiKSt5vWlG4FIwCR/DbstcNRQ==} '@oxc-transform/binding-android-arm-eabi@0.128.0': resolution: {integrity: sha512-qVO4izEs88ZSo7KOK4P+O5nAXXJmkSadInvFjGkhVnm2R2Wr8trU/GLhjAK0S0u8Qv9bkXspNhgpECk+CTQ/ew==} @@ -1860,84 +1742,42 @@ packages: cpu: [arm] os: [android] - '@oxc-transform/binding-android-arm-eabi@0.131.0': - resolution: {integrity: sha512-rcNvLlbNnxTfYVlZVF+Rev2AyCpJDpwVPphG4HOJxauaT1+w5VxL+kRdxCReof4A8ZsszbvIYlvkqvaJKO4Mog==} - engines: {node: ^20.19.0 || >=22.12.0} - cpu: [arm] - os: [android] - '@oxc-transform/binding-android-arm64@0.128.0': resolution: {integrity: sha512-F3RXlbCzIgkpRWlz1PEguDZl5NzZRmbeHKTFTQWFnK6mIdw2EkWihPVv9+CIcO80c7+sF/YRGOBaji6hwUDhtQ==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm64] os: [android] - '@oxc-transform/binding-android-arm64@0.131.0': - resolution: {integrity: sha512-/y+EH6QYQB2ZDQNvMlzItc36mw16GZwCDlvGYbQ4GCTE+7ZtSmx9E/rJOYzYyzMghz0c5dhJquRKScXdOZHpnQ==} - engines: {node: ^20.19.0 || >=22.12.0} - cpu: [arm64] - os: [android] - '@oxc-transform/binding-darwin-arm64@0.128.0': resolution: {integrity: sha512-xj63gIzQ67LDYHCOWXSHgfx4LbPVz1ck0G3y0eR6mbgYk3CwwylbhWi/CaDC6BWsHwoLQryeYjHB5XBCR0EPMQ==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm64] os: [darwin] - '@oxc-transform/binding-darwin-arm64@0.131.0': - resolution: {integrity: sha512-x1Va8zFomdYghAI0Zkt7kUmG50S65XH1u0EbIDr80M9idfXrQgd08ZGl3ejwRGLBrkbA8tkkmeOu1rWVFf7BXg==} - engines: {node: ^20.19.0 || >=22.12.0} - cpu: [arm64] - os: [darwin] - '@oxc-transform/binding-darwin-x64@0.128.0': resolution: {integrity: sha512-YQkvFqNqpwEt197RjREAOWeRANalPtCD+ayZlx4IjTQ6IOYZEP83B9/++gTQisHV3r8E7dU8UqJKeSS1cHlTQg==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [x64] os: [darwin] - '@oxc-transform/binding-darwin-x64@0.131.0': - resolution: {integrity: sha512-EwacackWpYYXGZsl0Aj4NKvDdLuxWZg7LQDneFyMwuftpAxPQLRkHFwZib7r6wpIJm4NELhHW261A4vZ8OQqXQ==} - engines: {node: ^20.19.0 || >=22.12.0} - cpu: [x64] - os: [darwin] - '@oxc-transform/binding-freebsd-x64@0.128.0': resolution: {integrity: sha512-Jvd3Ximb3x3o0+xRBB5lq63JlzxhJN787IsBjn0PEnmuocYQj+tJ5BB4n9xPIG27GXwg3ycckQPO/RsWeEcBPg==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [x64] os: [freebsd] - '@oxc-transform/binding-freebsd-x64@0.131.0': - resolution: {integrity: sha512-EhXqWOtL1PWcJ3ktdplV4Wrez2PRuTBSDdB7KF6CN4zuZhohUjxC1bxqDNRbNSX46yaZ27IzJLafah1J6mSA8Q==} - engines: {node: ^20.19.0 || >=22.12.0} - cpu: [x64] - os: [freebsd] - '@oxc-transform/binding-linux-arm-gnueabihf@0.128.0': resolution: {integrity: sha512-TaRKWeGnAJNIdCa5+m0I8/SksBgkLX94iH40qy3chvLuaIOGAmOViUStYx8geXBzO9P99V7En8nHXLoqCONBRQ==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm] os: [linux] - '@oxc-transform/binding-linux-arm-gnueabihf@0.131.0': - resolution: {integrity: sha512-NfNACr3aqBKeeUh6HCoGGPSjdMkLvyXUZQywCg/DwRkEpqZo55KX65saW1sQdgBcu0SKXrAReTjIm/HDO/OI0Q==} - engines: {node: ^20.19.0 || >=22.12.0} - cpu: [arm] - os: [linux] - '@oxc-transform/binding-linux-arm-musleabihf@0.128.0': resolution: {integrity: sha512-7TMrtA5/3SCvS+yMPrGnri5T4ZhIoCbjwKWV6Kn8d3v+vx7MpEmNkfe+CdF3rb5LlnuxeDMPwr1E2ntya0b8HQ==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm] os: [linux] - '@oxc-transform/binding-linux-arm-musleabihf@0.131.0': - resolution: {integrity: sha512-ABp6KGhbYFGDaAdB4gGZW12DYa55OF/Cu+6Rw6/Di0skuwpiDwnBOLHWz9VBq0QTcREy/qIUOnKW+vZHQLOT8A==} - engines: {node: ^20.19.0 || >=22.12.0} - cpu: [arm] - os: [linux] - '@oxc-transform/binding-linux-arm64-gnu@0.128.0': resolution: {integrity: sha512-lMQEa1jLBNm1N+5uvyj9zX9urVY4xKkLnhO8/4CtSGdXX+mExqsVawyQPAZqbtq1fLQ0yt1QYJ9YuM0+fiSJTQ==} engines: {node: ^20.19.0 || >=22.12.0} @@ -1945,13 +1785,6 @@ packages: os: [linux] libc: [glibc] - '@oxc-transform/binding-linux-arm64-gnu@0.131.0': - resolution: {integrity: sha512-4nKYkHHjRela+jpt+VO4++jxgHoJQFxAeAGtfQ4x11dQMJllzqo3Yu8gfcfLEMsAfflwN/gY+KBbMD/y0exitg==} - engines: {node: ^20.19.0 || >=22.12.0} - cpu: [arm64] - os: [linux] - libc: [glibc] - '@oxc-transform/binding-linux-arm64-musl@0.128.0': resolution: {integrity: sha512-dPSjyd0gQ9dE3mpdJi0BHNJaqQz4V7mVW6Fbs6jRSiGnrxwGfXdMJFInXoJ49B3k5Zhfa9Is9Ixp6St7c6ouCA==} engines: {node: ^20.19.0 || >=22.12.0} @@ -1959,13 +1792,6 @@ packages: os: [linux] libc: [musl] - '@oxc-transform/binding-linux-arm64-musl@0.131.0': - resolution: {integrity: sha512-cW0Ab1s0sxfiyP1+gdd94f0vUjwGzJF4F3DepF3VnR9nFTGMmFLugwtrBS3DYjTnbugiUH3Fp+16yys1FhNzIA==} - engines: {node: ^20.19.0 || >=22.12.0} - cpu: [arm64] - os: [linux] - libc: [musl] - '@oxc-transform/binding-linux-ppc64-gnu@0.128.0': resolution: {integrity: sha512-YNa9XAotPKvAXFJrHC7kBsHMVg0HOB4vRiKuYUjzFsfLkxTbuztKHTKG/gW5kjp7dBw+TNFofTaVCVZgOnHXPQ==} engines: {node: ^20.19.0 || >=22.12.0} @@ -1973,13 +1799,6 @@ packages: os: [linux] libc: [glibc] - '@oxc-transform/binding-linux-ppc64-gnu@0.131.0': - resolution: {integrity: sha512-wunAU/lzE1nPGKL47uI0g+4Nsv/12xveOXNu4M70xe85kNBm7mQdMpZIeoVYCxtXew0iHxFKJDT6qK5mYFSA3w==} - engines: {node: ^20.19.0 || >=22.12.0} - cpu: [ppc64] - os: [linux] - libc: [glibc] - '@oxc-transform/binding-linux-riscv64-gnu@0.128.0': resolution: {integrity: sha512-jjSiG9H8ya/U3igW5DdIBFIDwhffF7Vbc7th2tcHV73eg0DQz75n36a9RmQ1/0aS9vknUuNtY6SODr8/gmuzsQ==} engines: {node: ^20.19.0 || >=22.12.0} @@ -1987,13 +1806,6 @@ packages: os: [linux] libc: [glibc] - '@oxc-transform/binding-linux-riscv64-gnu@0.131.0': - resolution: {integrity: sha512-r4sMt4OB4TryDcVWW9KnsXOf/ea7tIGX2QASNrpetzPocsBZqhHIFDbZ8EkBDjmlmWGHg6BgjVx6lLcMXX4Dcw==} - engines: {node: ^20.19.0 || >=22.12.0} - cpu: [riscv64] - os: [linux] - libc: [glibc] - '@oxc-transform/binding-linux-riscv64-musl@0.128.0': resolution: {integrity: sha512-FVUr/XNT7BfQA4XVMel/HTCJi5mQyEitslgX42ztYPnCFMRFG1sQQKgnlLJdl7qifuyxpvKLR1f7h7HEuwWw1Q==} engines: {node: ^20.19.0 || >=22.12.0} @@ -2001,13 +1813,6 @@ packages: os: [linux] libc: [musl] - '@oxc-transform/binding-linux-riscv64-musl@0.131.0': - resolution: {integrity: sha512-/rLVLItsBjKrnZFLiGrwRB3fs0dAjXZLqY7F42omvacFJjZsceQ3481oQX1bBs3RwoDDyDy/9ZkIN7kYIkv5Gw==} - engines: {node: ^20.19.0 || >=22.12.0} - cpu: [riscv64] - os: [linux] - libc: [musl] - '@oxc-transform/binding-linux-s390x-gnu@0.128.0': resolution: {integrity: sha512-caJnVw5PG8v339zAyHgA7p34xXa3A4Kc9VyrDgsT1znr51qacaUv4BRlgRi0qkqxRWXYNVFfsbU2g0t1qS7E9w==} engines: {node: ^20.19.0 || >=22.12.0} @@ -2015,13 +1820,6 @@ packages: os: [linux] libc: [glibc] - '@oxc-transform/binding-linux-s390x-gnu@0.131.0': - resolution: {integrity: sha512-fUprJgJauI1A7e7cDgY/Z3mwLVtE3aswB4lvS96KpRNDHrwOh8bnCJOWf+0CYveDQzghDVFiZWVDo56pO4Wr9Q==} - engines: {node: ^20.19.0 || >=22.12.0} - cpu: [s390x] - os: [linux] - libc: [glibc] - '@oxc-transform/binding-linux-x64-gnu@0.128.0': resolution: {integrity: sha512-zkQKjsHEUX3ckQBcZTtHE/7pgFMkWQp6y/4t7N8eT3j8wnoL+vapv7l4ISjgx1/EePRJN1HErYXmriz7tPVKRg==} engines: {node: ^20.19.0 || >=22.12.0} @@ -2029,13 +1827,6 @@ packages: os: [linux] libc: [glibc] - '@oxc-transform/binding-linux-x64-gnu@0.131.0': - resolution: {integrity: sha512-XdbvDT1GPNxrTLXSRt4RU2uCH112q3nINTT05DZqTYYcAxaCPImnMoZe2TlBv5j2376Gk+2pcVnJs6xut47aSw==} - engines: {node: ^20.19.0 || >=22.12.0} - cpu: [x64] - os: [linux] - libc: [glibc] - '@oxc-transform/binding-linux-x64-musl@0.128.0': resolution: {integrity: sha512-NjYtwl9ijp34iisHxYBvE7nii1Ac0QPP3doHv8MQHhDA3zjUcDCROuBNybfaEYCxnJ1aF+cAPqsyeopnAGsyuQ==} engines: {node: ^20.19.0 || >=22.12.0} @@ -2043,176 +1834,131 @@ packages: os: [linux] libc: [musl] - '@oxc-transform/binding-linux-x64-musl@0.131.0': - resolution: {integrity: sha512-Du2CxlBfC98EV3hOAmLVSUgP0JgqM9F47lRv9v43T4sGPcQVOjs9wffUybGUUraG9unmBZ4dgpMAqlCq0k3dGw==} - engines: {node: ^20.19.0 || >=22.12.0} - cpu: [x64] - os: [linux] - libc: [musl] - '@oxc-transform/binding-openharmony-arm64@0.128.0': resolution: {integrity: sha512-itsi0tVkVdrYphSppdFChLq9tD0pvbRRS3EV8NQYKZ/NWHMoxzjlf9TFA/ZZYV113juYo1Dq3glVX48knhBeFQ==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm64] os: [openharmony] - '@oxc-transform/binding-openharmony-arm64@0.131.0': - resolution: {integrity: sha512-wTj2FkOgNhgdisnA0a15QQksyj6AH2snmpgYgAtj098i477x5LpHHdqfuk60jsA/QHSjmUc6dm4P88yI5GY4xA==} - engines: {node: ^20.19.0 || >=22.12.0} - cpu: [arm64] - os: [openharmony] - '@oxc-transform/binding-wasm32-wasi@0.128.0': resolution: {integrity: sha512-elzjX2gy1jcseeFaKtbk/6T2FPTpGNx0IpeD0iyk6cahWN7wD6eHY5u7th1X85cYbRq9rqniS+xYIxN3StthWg==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [wasm32] - '@oxc-transform/binding-wasm32-wasi@0.131.0': - resolution: {integrity: sha512-lE9UaZL0KomAlbATiB6FKoJ9no6W49yXs/MujJqY75AkHHMeOCsHSN9HvriyWz2FOIQgV7C5cmNj0jf+IaBtQg==} - engines: {node: ^20.19.0 || >=22.12.0} - cpu: [wasm32] - '@oxc-transform/binding-win32-arm64-msvc@0.128.0': resolution: {integrity: sha512-p5LmbI66dk2dziJSUzjQ24gOWeI6pJpXcOC6famloRtKCq54V5/KegsztFgZZCtYFEAEqFgcfspFHrV+CcKWcg==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm64] os: [win32] - '@oxc-transform/binding-win32-arm64-msvc@0.131.0': - resolution: {integrity: sha512-8KUfPnuxbEfa9H+OQ5XNPFq9JIEWVCg8kczJaD8PvTprr515mz1lmSLSUoOW8mrLaN0mZaGg6pemuvTawOLoPg==} - engines: {node: ^20.19.0 || >=22.12.0} - cpu: [arm64] - os: [win32] - '@oxc-transform/binding-win32-ia32-msvc@0.128.0': resolution: {integrity: sha512-CMU3Yn05rXeLw7GyVlDB3bbp2iV14yt3VWyF0pNuMK9NVgOmUkXgFLe5SOcX9rEm64TRJjOMEghtE5+r0GtqIQ==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [ia32] os: [win32] - '@oxc-transform/binding-win32-ia32-msvc@0.131.0': - resolution: {integrity: sha512-pXSu2A7L6H//1Uvsg5RJHb91BDZpCTho0r9oAwxPqKJM2LWV7Zph/ikWEIXt/YLbKF3WpkHrKQ5hbQGP9gWmHg==} - engines: {node: ^20.19.0 || >=22.12.0} - cpu: [ia32] - os: [win32] - '@oxc-transform/binding-win32-x64-msvc@0.128.0': resolution: {integrity: sha512-Vck5AdNH2JPYMQWVDxvX5PbDFfqVG+tCOgKJzAC/S9bgbD3qcMjN5Dx6FOmEbwY3hZm//fzOsY4tErofoiK/aQ==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [x64] os: [win32] - '@oxc-transform/binding-win32-x64-msvc@0.131.0': - resolution: {integrity: sha512-VXgk106WLl3NpBO/6G2gxkWBHguCJm01mGqAq2Q0l2o7hnbglsND0UWSCtM3a9MlsDimfJkLWFQveZu4UtnRvA==} - engines: {node: ^20.19.0 || >=22.12.0} - cpu: [x64] - os: [win32] - - '@package-json/types@0.0.12': - resolution: {integrity: sha512-uu43FGU34B5VM9mCNjXCwLaGHYjXdNincqKLaraaCW+7S2+SmiBg1Nv8bPnmschrIfZmfKNY9f3fC376MRrObw==} - - '@parcel/watcher-android-arm64@2.5.6': - resolution: {integrity: sha512-YQxSS34tPF/6ZG7r/Ih9xy+kP/WwediEUsqmtf0cuCV5TPPKw/PQHRhueUo6JdeFJaqV3pyjm0GdYjZotbRt/A==} + '@parcel/watcher-android-arm64@2.6.0': + resolution: {integrity: sha512-trgpLSCKRC/huFjXX/Smh+0sWe4+YtKfktIToiMl59ghz7z+qkH6kMvNnUbLyRs9N11t8l4svSCs1+5B3rOAhA==} engines: {node: '>= 10.0.0'} cpu: [arm64] os: [android] - '@parcel/watcher-darwin-arm64@2.5.6': - resolution: {integrity: sha512-Z2ZdrnwyXvvvdtRHLmM4knydIdU9adO3D4n/0cVipF3rRiwP+3/sfzpAwA/qKFL6i1ModaabkU7IbpeMBgiVEA==} + '@parcel/watcher-darwin-arm64@2.6.0': + resolution: {integrity: sha512-Y3QV0gl7Q1zbfueunkWIERICbEojQFCgpyG7YqOGNFLsckXyI1xu9mAIUpKY9QBYzBtSkN8dBPwd3yiAO9ovMw==} engines: {node: '>= 10.0.0'} cpu: [arm64] os: [darwin] - '@parcel/watcher-darwin-x64@2.5.6': - resolution: {integrity: sha512-HgvOf3W9dhithcwOWX9uDZyn1lW9R+7tPZ4sug+NGrGIo4Rk1hAXLEbcH1TQSqxts0NYXXlOWqVpvS1SFS4fRg==} + '@parcel/watcher-darwin-x64@2.6.0': + resolution: {integrity: sha512-Ohv6OpzhUfKYD7Beb8kDvG0jbIxORCYY1JRdZnaBtnjjkJxgD7ZVL0nw2sCYd0yTMKTvz3nnTnOF3cDifK+kvw==} engines: {node: '>= 10.0.0'} cpu: [x64] os: [darwin] - '@parcel/watcher-freebsd-x64@2.5.6': - resolution: {integrity: sha512-vJVi8yd/qzJxEKHkeemh7w3YAn6RJCtYlE4HPMoVnCpIXEzSrxErBW5SJBgKLbXU3WdIpkjBTeUNtyBVn8TRng==} + '@parcel/watcher-freebsd-x64@2.6.0': + resolution: {integrity: sha512-5HmXvDgs8VK+74jF9y9/2FE3/OnlcKmc56tjmSrEuZjpSZOGL+fvAu+HKJBdPs9uwoP2hE6TlSUpXZ/C5jUFmQ==} engines: {node: '>= 10.0.0'} cpu: [x64] os: [freebsd] - '@parcel/watcher-linux-arm-glibc@2.5.6': - resolution: {integrity: sha512-9JiYfB6h6BgV50CCfasfLf/uvOcJskMSwcdH1PHH9rvS1IrNy8zad6IUVPVUfmXr+u+Km9IxcfMLzgdOudz9EQ==} + '@parcel/watcher-linux-arm-glibc@2.6.0': + resolution: {integrity: sha512-Ps/hui3A+vMbjdqlqAowK2ZL8+BO8dBjxeWXj6npTBs3jx4wWmbPpaLuqwrQrSqIVMCnpWo238bJ1U37GhQOYg==} engines: {node: '>= 10.0.0'} cpu: [arm] os: [linux] libc: [glibc] - '@parcel/watcher-linux-arm-musl@2.5.6': - resolution: {integrity: sha512-Ve3gUCG57nuUUSyjBq/MAM0CzArtuIOxsBdQ+ftz6ho8n7s1i9E1Nmk/xmP323r2YL0SONs1EuwqBp2u1k5fxg==} + '@parcel/watcher-linux-arm-musl@2.6.0': + resolution: {integrity: sha512-9c6AUHgHoG+IY88MRIHupztQiQnrbqHYQjkM2btA+Bf/wQnQMuiD0Wfk1EVv3TlNT3x41uU71rn6E4xh/+zvkw==} engines: {node: '>= 10.0.0'} cpu: [arm] os: [linux] libc: [musl] - '@parcel/watcher-linux-arm64-glibc@2.5.6': - resolution: {integrity: sha512-f2g/DT3NhGPdBmMWYoxixqYr3v/UXcmLOYy16Bx0TM20Tchduwr4EaCbmxh1321TABqPGDpS8D/ggOTaljijOA==} + '@parcel/watcher-linux-arm64-glibc@2.6.0': + resolution: {integrity: sha512-yHRqS2owEXe6Hic9z6Mh1ECsCd+ODVOGvZDyciqRd21+v+o+DnXMOrw50DSpIG2sb8GPEaPPmfeCAWKPJdq46g==} engines: {node: '>= 10.0.0'} cpu: [arm64] os: [linux] libc: [glibc] - '@parcel/watcher-linux-arm64-musl@2.5.6': - resolution: {integrity: sha512-qb6naMDGlbCwdhLj6hgoVKJl2odL34z2sqkC7Z6kzir8b5W65WYDpLB6R06KabvZdgoHI/zxke4b3zR0wAbDTA==} + '@parcel/watcher-linux-arm64-musl@2.6.0': + resolution: {integrity: sha512-WhB2e/V7rqdHHWZusBSPuy5Ei8S6lSz6FE5TKKQz5h3a0O+C+mhY7vxU9b/stqvMb8beLnPY82ZrFTLKs+SrKA==} engines: {node: '>= 10.0.0'} cpu: [arm64] os: [linux] libc: [musl] - '@parcel/watcher-linux-x64-glibc@2.5.6': - resolution: {integrity: sha512-kbT5wvNQlx7NaGjzPFu8nVIW1rWqV780O7ZtkjuWaPUgpv2NMFpjYERVi0UYj1msZNyCzGlaCWEtzc+exjMGbQ==} + '@parcel/watcher-linux-x64-glibc@2.6.0': + resolution: {integrity: sha512-ulGE6x6Oz6iAwg75T8YQSoguBWasniIbX+QWpaYPcCnDOpdWX3k+4xbEYPZVLxOuoJI+svJJPD3sEj8G7lrQ3A==} engines: {node: '>= 10.0.0'} cpu: [x64] os: [linux] libc: [glibc] - '@parcel/watcher-linux-x64-musl@2.5.6': - resolution: {integrity: sha512-1JRFeC+h7RdXwldHzTsmdtYR/Ku8SylLgTU/reMuqdVD7CtLwf0VR1FqeprZ0eHQkO0vqsbvFLXUmYm/uNKJBg==} + '@parcel/watcher-linux-x64-musl@2.6.0': + resolution: {integrity: sha512-tkBYKt7YQrjIJWYDnto2YgO8MRkjlMTSNoRHzsXinBqbLdeOM3L32wPZJvIZxqaLMfSlS/4sUjH/6STVP/XDLw==} engines: {node: '>= 10.0.0'} cpu: [x64] os: [linux] libc: [musl] - '@parcel/watcher-wasm@2.5.6': - resolution: {integrity: sha512-byAiBZ1t3tXQvc8dMD/eoyE7lTXYorhn+6uVW5AC+JGI1KtJC/LvDche5cfUE+qiefH+Ybq0bUCJU0aB1cSHUA==} + '@parcel/watcher-wasm@2.6.0': + resolution: {integrity: sha512-dtjbDxKSDPQ8AmA+pS4OFaHE1FKrjtGpLGBxw85uKFkRorjNbvDM/aFPgqosu40wprbp1xw2ZSxIKqghCUHe2w==} engines: {node: '>= 10.0.0'} bundledDependencies: - napi-wasm - '@parcel/watcher-win32-arm64@2.5.6': - resolution: {integrity: sha512-3ukyebjc6eGlw9yRt678DxVF7rjXatWiHvTXqphZLvo7aC5NdEgFufVwjFfY51ijYEWpXbqF5jtrK275z52D4Q==} + '@parcel/watcher-win32-arm64@2.6.0': + resolution: {integrity: sha512-gIZAP23jaHjGWasY/TY6yL7NHFClf0Ga7FN+iINvk+KN94rhm94lYZhFsbYFNcA04/onvGD9kKmiJLJB2HbNwQ==} engines: {node: '>= 10.0.0'} cpu: [arm64] os: [win32] - '@parcel/watcher-win32-ia32@2.5.6': - resolution: {integrity: sha512-k35yLp1ZMwwee3Ez/pxBi5cf4AoBKYXj00CZ80jUz5h8prpiaQsiRPKQMxoLstNuqe2vR4RNPEAEcjEFzhEz/g==} - engines: {node: '>= 10.0.0'} - cpu: [ia32] - os: [win32] - - '@parcel/watcher-win32-x64@2.5.6': - resolution: {integrity: sha512-hbQlYcCq5dlAX9Qx+kFb0FHue6vbjlf0FrNzSKdYK2APUf7tGfGxQCk2ihEREmbR6ZMc0MVAD5RIX/41gpUzTw==} + '@parcel/watcher-win32-x64@2.6.0': + resolution: {integrity: sha512-cA+/pXV2YkfxlIcXOQ5fSWqAzzPyD78/x5qbK/I0vUkrlYHA8TIz+MXjAbGouguKVSI4bOmkTSJ1/poVSsgt+A==} engines: {node: '>= 10.0.0'} cpu: [x64] os: [win32] - '@parcel/watcher@2.5.6': - resolution: {integrity: sha512-tmmZ3lQxAe/k/+rNnXQRawJ4NjxO2hqiOLTHvWchtGZULp4RyFeh6aU4XdOYBFe2KE1oShQTv4AblOs2iOrNnQ==} + '@parcel/watcher@2.6.0': + resolution: {integrity: sha512-7FNeNl8NCE7aINx7WXiKQrPYZWC/hvrTsmk6zmxbI7LTXE7hVek/n8AfVgpe2y82zl3w0HvCHN0bVKMBoJcC0w==} engines: {node: '>= 10.0.0'} '@phc/format@1.0.0': resolution: {integrity: sha512-m7X9U6BG2+J+R1lSOdCiITLLrxm+cWlNI3HUFA92oLO77ObGNzaKdh8pMLqdZcshtkKuV84olNNXDfMc4FezBQ==} engines: {node: '>=10'} - '@pinia/nuxt@0.11.3': - resolution: {integrity: sha512-7WVNHpWx4qAEzOlnyrRC88kYrwnlR/PrThWT0XI1dSNyUAXu/KBv9oR37uCgYkZroqP5jn8DfzbkNF3BtKvE9w==} + '@pinia/nuxt@1.0.1': + resolution: {integrity: sha512-le5bc7KnlAg7W04XKhIQEGTrIgNPV2eNS5wj62OKfvUGGBAvdQLEoEbxKxuli4q0PPS888waxphNzCuz7ilvDQ==} peerDependencies: - pinia: ^3.0.4 + pinia: ^4.0.2 '@pkgjs/parseargs@0.11.0': resolution: {integrity: sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==} @@ -2230,6 +1976,196 @@ packages: '@poppinss/exception@1.2.3': resolution: {integrity: sha512-dCED+QRChTVatE9ibtoaxc+WkdzOSjYTKi/+uacHWIsfodVfpsueo3+DKpgU5Px8qXjgmXkSvhXvSCz3fnP9lw==} + '@rolldown/binding-android-arm64@1.1.5': + resolution: {integrity: sha512-lZg8fqIv2v7FF237bwMgzGZEJvGL79/s5knJ/i6FmsGF4XXlzccZ4jb+TrFIxtSSxFtIpdsgrPZeMk1I9AFcyQ==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [arm64] + os: [android] + + '@rolldown/binding-android-arm64@1.2.0': + resolution: {integrity: sha512-9yB1l95IrJuNGDFdOYe79vdApdz6WWBCObE+rQ2LUliYUlcyFwSYIb2xb5/Ifw7dAtMy2ZqNyd8QTSOc7duAKw==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [arm64] + os: [android] + + '@rolldown/binding-darwin-arm64@1.1.5': + resolution: {integrity: sha512-51Bnx9pNiMRKSUNtBfySkNJ9vMU9Hh3I1ozDd6gyPPYzaXCfnptUcEZxXGYFn+ul2dtcMUiqGR1Yai2K10uoTw==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [arm64] + os: [darwin] + + '@rolldown/binding-darwin-arm64@1.2.0': + resolution: {integrity: sha512-pexNaW9ACLUOaBITOpU6qVu4VrsOFIjTv6bzgu0YUATo4eUJx0V605PxwZfndpPOn0ilqGqvGQ0M8UW0IE24jg==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [arm64] + os: [darwin] + + '@rolldown/binding-darwin-x64@1.1.5': + resolution: {integrity: sha512-Tm+gbfC0aHu1tBA/JvKQh32S0K6YgCHkiAF4/W6xX0K0RmNuc94VeK419dJoE65R5aRxmo+noZQSWrAMF6yb6g==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [x64] + os: [darwin] + + '@rolldown/binding-darwin-x64@1.2.0': + resolution: {integrity: sha512-NqKYaq0355ZmNMG4QGpxtEDxsc7tGDhjhCm4PpE0cwnBW+5Il95LJyq414niEiaKLVjnVHBEjSo1wngKxJNiFw==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [x64] + os: [darwin] + + '@rolldown/binding-freebsd-x64@1.1.5': + resolution: {integrity: sha512-JMzDKCCXq93YccG5gz3hvOs1oXRKAf0XYpfOS88e+wZrC8Iugj6j68867vrYZkvpDDpKn/KoKORThmchMpF6TA==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [x64] + os: [freebsd] + + '@rolldown/binding-freebsd-x64@1.2.0': + resolution: {integrity: sha512-3vPoHzh6eBTz9IbB0/qZdSr0Qeks2echn+I4cHu2joV74VriPDdldswksEDzrl1mBB+oPRi+67+3Ib59paxIPQ==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [x64] + os: [freebsd] + + '@rolldown/binding-linux-arm-gnueabihf@1.1.5': + resolution: {integrity: sha512-uML21j2K5TfPGutKxub+M+nLjZIrWjXQ5Grx4lCe/nimTj9B4L63zHpjXLl4y0L3mcm2htEQIb06oCG/szerNw==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [arm] + os: [linux] + + '@rolldown/binding-linux-arm-gnueabihf@1.2.0': + resolution: {integrity: sha512-E6NNefZ1bUVmKJq2tJkf45J4Zyczj7qm9rUT7NY+Xo2474Y13qWAwc2tvBt0BAVbmtXR1llkxXg0Ou1jbDf2SQ==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [arm] + os: [linux] + + '@rolldown/binding-linux-arm64-gnu@1.1.5': + resolution: {integrity: sha512-navSiuTMogvnQoZoM/v+l3ZWo50/NTwSHSzheABx/RCnmUPaKwq9qSo4Br2OYRs21+Fz8uFqITZM3H4opOB0/Q==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [arm64] + os: [linux] + libc: [glibc] + + '@rolldown/binding-linux-arm64-gnu@1.2.0': + resolution: {integrity: sha512-D+TgkdgM1vu+7/Fpf8+v0ARW+RXEP9Ccazgm8zQ4JFFd9Q7SrYQ2TakU5S5ihazQDgpKyAgZDOcIFsvoHmTZ8w==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [arm64] + os: [linux] + libc: [glibc] + + '@rolldown/binding-linux-arm64-musl@1.1.5': + resolution: {integrity: sha512-lAryqH7IteztmCXQXk0etKj4wBQ7Gx5S6LjKhsgp9zb8I5bsuvU/2llH1hDQcjsFeqIsovMVN339/8pUDDBXxA==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [arm64] + os: [linux] + libc: [musl] + + '@rolldown/binding-linux-arm64-musl@1.2.0': + resolution: {integrity: sha512-wUqdwJBbAv0APN87GecstdMUtLjjNTs0hBALpxETD73mccFxdmt/XeizXDtN5RAlBwNKmI+Tg+blect2G+8IeQ==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [arm64] + os: [linux] + libc: [musl] + + '@rolldown/binding-linux-ppc64-gnu@1.1.5': + resolution: {integrity: sha512-fsK/sNBnxzBlL4O1JNrZakVQxPspqpED5dLtNsZS9oOKmtSpdNIzxH2kkol5HYTWJN47sE20ztMJPxfZ89qGOg==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [ppc64] + os: [linux] + libc: [glibc] + + '@rolldown/binding-linux-ppc64-gnu@1.2.0': + resolution: {integrity: sha512-9DtF35qR9/NrfhM4oxLplCzVVjE+KKm8Pjemi0i/sdhAWkUasjmSo8WTTubNJClhSHCfyk2yeyoXDQEDPtDAAw==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [ppc64] + os: [linux] + libc: [glibc] + + '@rolldown/binding-linux-s390x-gnu@1.1.5': + resolution: {integrity: sha512-gLYb4BIadlfTOYT5gO503n8zQjXflgzpD0FcyKh0Mzx3rqCZKnHoJWV9xe1KXUJ5lx2JfcSHr/mhzS0PC/McAA==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [s390x] + os: [linux] + libc: [glibc] + + '@rolldown/binding-linux-s390x-gnu@1.2.0': + resolution: {integrity: sha512-RzuHrBh8X8Hntd2N4VR02QGEciq/9JhcZoTpR/Cee6otRrlILGCf3cg2ygHuih+ZebUnWmMrDX6ITI85btO6rQ==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [s390x] + os: [linux] + libc: [glibc] + + '@rolldown/binding-linux-x64-gnu@1.1.5': + resolution: {integrity: sha512-FjcpEKUyJygHgs1o50VYNvkt5+7Le/VEdYt0AkRpkL33MnyQfwr8l5mXwMmfmTbyMPr5vJLC+8/Gd9gXnwU1QQ==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [x64] + os: [linux] + libc: [glibc] + + '@rolldown/binding-linux-x64-gnu@1.2.0': + resolution: {integrity: sha512-MK7L0018jjh1jR3mh21G2j1zAVcpscJBlPo2z19pRjv2XOYGRhaV4LyiD8HO6nCDdZln9IFgCMIV5yt4E3klGQ==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [x64] + os: [linux] + libc: [glibc] + + '@rolldown/binding-linux-x64-musl@1.1.5': + resolution: {integrity: sha512-Me+PfPI2TMeOQk0gYWfLQZtTktrmzbr8cDboqX83XKc7UrgAi55gF+2dUkWdxd19n55Essp2yeca+O9N5rBxHg==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [x64] + os: [linux] + libc: [musl] + + '@rolldown/binding-linux-x64-musl@1.2.0': + resolution: {integrity: sha512-gyrxLQ9NfGb/9LoVnC4kb9miUghw1mghnkfYvNHSnVIXriabnfgGPUP4RLcJm87q3KgYz4FYUG8IDiWUT+CpSw==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [x64] + os: [linux] + libc: [musl] + + '@rolldown/binding-openharmony-arm64@1.1.5': + resolution: {integrity: sha512-yc5WrLzXks6zCQfn9Oxr8pORKyl/pF+QjHmW/Qx3qu0oyrrNC+y2JLTU1E2rcWYAmzlnqngWXHQjy51VzW70Vw==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [arm64] + os: [openharmony] + + '@rolldown/binding-openharmony-arm64@1.2.0': + resolution: {integrity: sha512-/6VFMQGRmrhP77KXDC+StIxGzcNp5JOIyYtw0CQ8gPlzhpiIRucYfoM5FaFamHd5BJYIdH86yfP46l1p3WdrFA==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [arm64] + os: [openharmony] + + '@rolldown/binding-wasm32-wasi@1.1.5': + resolution: {integrity: sha512-VbQGPX2b4r48TAMIM2cjgluIM1HYutm4pcTEJsle7iEP7sB1dFqtPLBVbdLAZCxy1txCcPxf4QFf4v8uvltPqA==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [wasm32] + + '@rolldown/binding-wasm32-wasi@1.2.0': + resolution: {integrity: sha512-rwdbUL465kisF24WEJLvP3JrEG6E5GRuIHt5wpMwHGERtHe4Wm2CIvtf5gTBgr2tGOHKh5NdKEAFS2VkOPE91g==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [wasm32] + + '@rolldown/binding-win32-arm64-msvc@1.1.5': + resolution: {integrity: sha512-gHv82k63z4qpV5+Q1y/12KrK0ltWBukVDI8nZcbT7Tt/ZlOIVwppazneq0F93oDxTo3IgAMEDIoQh3E2n6mVsw==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [arm64] + os: [win32] + + '@rolldown/binding-win32-arm64-msvc@1.2.0': + resolution: {integrity: sha512-+5suHwRiKGmhwyUaNT8a5QbrBvLFh2DbO910TEmGRH1aSxwrCezodvGQnulv4uiWEIv1Kq4ypRsJ5+O+ry1DiA==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [arm64] + os: [win32] + + '@rolldown/binding-win32-x64-msvc@1.1.5': + resolution: {integrity: sha512-tTZuDBPw85tEN5PQi1pnEBzDy0Z49HtScLAbD5t6hyeU92A95pRWaSMw1GZZi/RwgSgUIl0xrSlXIT/9QzvYSA==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [x64] + os: [win32] + + '@rolldown/binding-win32-x64-msvc@1.2.0': + resolution: {integrity: sha512-WfFv6/qGufotqBSBzBYwgpCkJBk8Nj7697LL9vTz/XWc67e0r3oewu8iMRwQj3AUL45GVD7wVsPjCsAAtW66Wg==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [x64] + os: [win32] + '@rolldown/pluginutils@1.0.1': resolution: {integrity: sha512-2j9bGt5Jh8hj+vPtgzPtl72j0yRxHAyumoo6TNfAjsLB04UtpSvPbPcDcBMxz7n+9CYB0c1GxQFxYRg2jimqGw==} @@ -2314,141 +2250,141 @@ packages: rollup: optional: true - '@rollup/rollup-android-arm-eabi@4.60.4': - resolution: {integrity: sha512-F5QXMSiFebS9hKZj02XhWLLnRpJ3B3AROP0tWbFBSj+6kCbg5m9j5JoHKd4mmSVy5mS/IMQloYgYxCuJC0fxEQ==} + '@rollup/rollup-android-arm-eabi@4.62.2': + resolution: {integrity: sha512-6o7ZLZK+BeenkZCFNDXqpbjw9bD6nuWonvS/lwQJp7NoVVxm6p3qE7qQ5jGuBjiFsgvqjD8mZAU5oWxTmbOeOg==} cpu: [arm] os: [android] - '@rollup/rollup-android-arm64@4.60.4': - resolution: {integrity: sha512-GxxTKApUpzRhof7poWvCJHRF51C67u1R7D6DiluBE8wKU1u5GWE8t+v81JvJYtbawoBFX1hLv5Ei4eVjkWokaw==} + '@rollup/rollup-android-arm64@4.62.2': + resolution: {integrity: sha512-BaH7BllCACHoH1LguOU56UItGfUWjujlO65kS9LAodViaN4bwIKd7oeW/ZHJ/4ljr/7MIiENnNy3HJ0zXv8Zkw==} cpu: [arm64] os: [android] - '@rollup/rollup-darwin-arm64@4.60.4': - resolution: {integrity: sha512-tua0TaJxMOB1R0V0RS1jFZ/RpURFDJIOR2A6jWwQeawuFyS4gBW+rntLRaQd0EQ4bd6Vp44Z2rXW+YYDBsj6IA==} + '@rollup/rollup-darwin-arm64@4.62.2': + resolution: {integrity: sha512-v39RCCvj4He82I9sFmk+M1VZ0PLM9sfsLVikjfx2hYBNALhrrOR2D3JjQA6AhlaSOgcR+RzrKY7e1+bT6SUO/A==} cpu: [arm64] os: [darwin] - '@rollup/rollup-darwin-x64@4.60.4': - resolution: {integrity: sha512-CSKq7MsP+5PFIcydhAiR1K0UhEI1A2jWXVKHPCBZ151yOutENwvnPocgVHkivu2kviURtCEB6zUQw0vs8RrhMg==} + '@rollup/rollup-darwin-x64@4.62.2': + resolution: {integrity: sha512-yl0y2vq3S3lHeuXhEdss6TWfKW8vkujImO12tn4ZkG/4oghr09LvdYm2RElVjokTQiUvDUGXLGsYeLqUMCKpGA==} cpu: [x64] os: [darwin] - '@rollup/rollup-freebsd-arm64@4.60.4': - resolution: {integrity: sha512-+O8OkVdyvXMtJEciu2wS/pzm1IxntEEQx3z5TAVy4l32G0etZn+RsA48ARRrFm6Ri8fvqPQfgrvNxSjKAbnd3g==} + '@rollup/rollup-freebsd-arm64@4.62.2': + resolution: {integrity: sha512-tT4pvt4qXD+vEoezupCWi+a1F0vvDiksiHc+PxRlYTOH1I6/X4id9jPxTP+Fg+545euaFT1jJVs4CEdHZAU1vw==} cpu: [arm64] os: [freebsd] - '@rollup/rollup-freebsd-x64@4.60.4': - resolution: {integrity: sha512-Iw3oMskH3AfNuhU0MSN7vNbdi4me/NiYo2azqPz/Le16zHSa+3RRmliCMWWQmh4lcndccU40xcJuTYJZxNo/lw==} + '@rollup/rollup-freebsd-x64@4.62.2': + resolution: {integrity: sha512-6nU5F2wCW+qvCBhTn1pdIU3bzsIoF7EUwsCDRxilWGprQR6yd508YnH9+OKFCwpfS8pjZqDUmnCAr7exax0XCg==} cpu: [x64] os: [freebsd] - '@rollup/rollup-linux-arm-gnueabihf@4.60.4': - resolution: {integrity: sha512-EIPRXTVQpHyF8WOo219AD2yEltPehLTcTMz2fn6JsatLYSzQf00hj3rulF+yauOlF9/FtM2WpkT/hJh/KJFGhA==} + '@rollup/rollup-linux-arm-gnueabihf@4.62.2': + resolution: {integrity: sha512-n1GJHPOvpIfhi3TmrCeh6S6URt9BFCt0KQE3qvexyGCTAKpR4Lg+eWvNZEqu7epxwus/8ElT3hacYEucm49SZg==} cpu: [arm] os: [linux] libc: [glibc] - '@rollup/rollup-linux-arm-musleabihf@4.60.4': - resolution: {integrity: sha512-J3Yh9PzzF1Ovah2At+lHiGQdsYgArxBbXv/zHfSyaiFQEqvNv7DcW98pCrmdjCZBrqBiKrKKe2V+aaSGWuBe/w==} + '@rollup/rollup-linux-arm-musleabihf@4.62.2': + resolution: {integrity: sha512-JqgflS8wEB+UXV/vS1RpRbifGBeN4D5lz8D8oOFbFZw4vedvdOgCFAjfBmIMdW3yL10XpQQ0Ambepw6MXrhOnA==} cpu: [arm] os: [linux] libc: [musl] - '@rollup/rollup-linux-arm64-gnu@4.60.4': - resolution: {integrity: sha512-BFDEZMYfUvLn37ONE1yMBojPxnMlTFsdyNoqncT0qFq1mAfllL+ATMMJd8TeuVMiX84s1KbcxcZbXInmcO2mRg==} + '@rollup/rollup-linux-arm64-gnu@4.62.2': + resolution: {integrity: sha512-wnFJkogWvN4jm/hQRF2UBaeUmk20j5+DmHvoyWii2b8HJDyvz1MF2OU/6ynXt2KR63rbZLWkFpoytpdc/yBuSA==} cpu: [arm64] os: [linux] libc: [glibc] - '@rollup/rollup-linux-arm64-musl@4.60.4': - resolution: {integrity: sha512-pc9EYOSlOgdQ2uPl1o9PF6/kLSgaUosia7gOuS8mB69IxJvlclko1MECXysjs5ryez1/5zjYqx3+xYU0TU6R1A==} + '@rollup/rollup-linux-arm64-musl@4.62.2': + resolution: {integrity: sha512-HVu2bp0zhvJ8xHEV9+UUs7S90VadmBSY3LcIMvozbPo4AuMGDWlz3ymHLHZPX4hR67TKTt8Qp5PJ5RBg/i+RMQ==} cpu: [arm64] os: [linux] libc: [musl] - '@rollup/rollup-linux-loong64-gnu@4.60.4': - resolution: {integrity: sha512-NxnomyxYerDh5n4iLrNa+sH+Z+U4BMEE46V2PgQ/hoB909i8gV1M5wPojWg9fk1jWpO3IQnOs20K4wyZuFLEFQ==} + '@rollup/rollup-linux-loong64-gnu@4.62.2': + resolution: {integrity: sha512-mQqqAV8QaoSgr9I2fKDLY2BAVvmKjWoGiu/cSYQonsLvtqwEn1E4QYfnCOcp5zoEqNhsDYin1s6jx/VJmrxlZg==} cpu: [loong64] os: [linux] libc: [glibc] - '@rollup/rollup-linux-loong64-musl@4.60.4': - resolution: {integrity: sha512-nbJnQ8a3z1mtmrwImCYhc6BGpThAyYVRQxw9uKSKG4wR6aAYno9sVjJ0zaZcW9BPJX1GbrDPf+SvdWjgTuDmnw==} + '@rollup/rollup-linux-loong64-musl@4.62.2': + resolution: {integrity: sha512-IxKLoxCQ2IWi6bT2akyDUBGsOImDKB+sPp4EsTmwFQ/fMwpCKm8uLSSgP/Kx/QYUgKis6SEZ5/Nlhup0DIA0PQ==} cpu: [loong64] os: [linux] libc: [musl] - '@rollup/rollup-linux-ppc64-gnu@4.60.4': - resolution: {integrity: sha512-2EU6acNrQLd8tYvo/LXW535wupT3m6fo7HKo6lr7ktQoItxTyOL1ZCR/GfGCuXl2vR+zmfI6eRXkSemafv+iVg==} + '@rollup/rollup-linux-ppc64-gnu@4.62.2': + resolution: {integrity: sha512-Mk5ha2RQSgyFfmYYLkBpPnUk8D8FriBxesO1u9O75X0mHgXL1UQcH5Itl2lurWL2tj0RxV9b9tJgipac0hRY9A==} cpu: [ppc64] os: [linux] libc: [glibc] - '@rollup/rollup-linux-ppc64-musl@4.60.4': - resolution: {integrity: sha512-WeBtoMuaMxiiIrO2IYP3xs6GMWkJP2C0EoT8beTLkUPmzV1i/UcOSVw1d5r9KBODtHKilG5yFxsGRnBbK3wJ4A==} + '@rollup/rollup-linux-ppc64-musl@4.62.2': + resolution: {integrity: sha512-CjvEnqJL/0/TQ3TXX3OPIJ/kmBellrWd4heXUmHeJlTnmwjKpSJzoehLaL6Xk0ZnMHBu9dZuFADNOrtjF4v+2w==} cpu: [ppc64] os: [linux] libc: [musl] - '@rollup/rollup-linux-riscv64-gnu@4.60.4': - resolution: {integrity: sha512-FJHFfqpKUI3A10WrWKiFbBZ7yVbGT4q4B5o1qKFFojqpaYoh9LrQgqWCmmcxQzVSXYtyB5bzkXrYzlHTs21MYA==} + '@rollup/rollup-linux-riscv64-gnu@4.62.2': + resolution: {integrity: sha512-1SiZbzwdkaDURsew/tSOrooKiYy7EQGT6m8ufavAi9NEyQb/6VuIxFXAL1fqa4iZe3g4NbNk4P7J32z2tw5Mgg==} cpu: [riscv64] os: [linux] libc: [glibc] - '@rollup/rollup-linux-riscv64-musl@4.60.4': - resolution: {integrity: sha512-mcEl6CUT5IAUmQf1m9FYSmVqCJlpQ8r8eyftFUHG8i9OhY7BkBXSUdnLH5DOf0wCOjcP9v/QO93zpmF1SptCCw==} + '@rollup/rollup-linux-riscv64-musl@4.62.2': + resolution: {integrity: sha512-nQts12zJ3NQRoE6uYljOH89v7szzLDvG2JD/vsX+vGXU8w/At1GowTZ5/7qeFQ8m7L55rpR8Okugnuo5bgjy2Q==} cpu: [riscv64] os: [linux] libc: [musl] - '@rollup/rollup-linux-s390x-gnu@4.60.4': - resolution: {integrity: sha512-ynt3JxVd2w2buzoKDWIyiV1pJW93xlQic1THVLXilz429oijRpSHivZAgp65KBu+cMcgf1eVVjdnTLvPxgCuoQ==} + '@rollup/rollup-linux-s390x-gnu@4.62.2': + resolution: {integrity: sha512-E9/ll019jhPIJgpzfZoIkBGhcz+kKNgVWYRY0zr9srBdPPFVpvOKW8VaJKUbeK+eZXyQF9ltME+Kk6affeaPgg==} cpu: [s390x] os: [linux] libc: [glibc] - '@rollup/rollup-linux-x64-gnu@4.60.4': - resolution: {integrity: sha512-Boiz5+MsaROEWDf+GGEwF8VMHGhlUoQMtIPjOgA5fv4osupqTVnJteQNKJwUcnUog2G55jYXH7KZFFiJe0TEzQ==} + '@rollup/rollup-linux-x64-gnu@4.62.2': + resolution: {integrity: sha512-5BqxR/pshjey51iliyzTD5Xi3EN0aLmQ2lZ3lvefVV9c82BvrLo2/6OT55iifpWBufs6kdwWbuOKS841DrmK9A==} cpu: [x64] os: [linux] libc: [glibc] - '@rollup/rollup-linux-x64-musl@4.60.4': - resolution: {integrity: sha512-+qfSY27qIrFfI/Hom04KYFw3GKZSGU4lXus51wsb5EuySfFlWRwjkKWoE9emgRw/ukoT4Udsj4W/+xxG8VbPKg==} + '@rollup/rollup-linux-x64-musl@4.62.2': + resolution: {integrity: sha512-uNN83XxQrRAh/w0/pmAfibcwyb6YWt4gP+dpnQKPVJshAloQ785ii8CT8ZCIxkGg9opVsvAlGhFitSm6D1Jjpg==} cpu: [x64] os: [linux] libc: [musl] - '@rollup/rollup-openbsd-x64@4.60.4': - resolution: {integrity: sha512-VpTfOPHgVXEBeeR8hZ2O0F3aSso+JDWqTWmTmzcQKted54IAdUVbxE+j/MVxUsKa8L20HJhv3vUezVPoquqWjA==} + '@rollup/rollup-openbsd-x64@4.62.2': + resolution: {integrity: sha512-srjEIxSH3LRnJN6THczDHWQplqEMFiAJrTab0msUryh9kwNpkICf3Ea6q6MN/2cZwRFUNx5w+h6Hpi4QuHS6Zg==} cpu: [x64] os: [openbsd] - '@rollup/rollup-openharmony-arm64@4.60.4': - resolution: {integrity: sha512-IPOsh5aRYuLv/nkU51X10Bf75Bsf6+gZdx1X+QP5QM6lIJFHHqbHLG0uJn/hWthzo13UAc2umiUorqZy3axoZg==} + '@rollup/rollup-openharmony-arm64@4.62.2': + resolution: {integrity: sha512-8hOJnxgbyObnCm5AlRA3A931xX19xq80RjVTKgJOvEKWqJruP/Uf12IbAOaDjjEXYRewwHLfmF0YRIdK3OwKWA==} cpu: [arm64] os: [openharmony] - '@rollup/rollup-win32-arm64-msvc@4.60.4': - resolution: {integrity: sha512-4QzE9E81OohJ/HKzHhsqU+zcYYojVOXlFMs1DdyMT6qXl/niOH7AVElmmEdUNHHS/oRkc++d5k6Vy85zFs0DEw==} + '@rollup/rollup-win32-arm64-msvc@4.62.2': + resolution: {integrity: sha512-mmF4AY1i0hG/bLWUctUq59gtmgaSIRa3cu/A3JFRp/sCNEme2bgDEiDS22P9FbnJB8NJNF4jPJiSP5RHQpUTDg==} cpu: [arm64] os: [win32] - '@rollup/rollup-win32-ia32-msvc@4.60.4': - resolution: {integrity: sha512-zTPgT1YuHHcd+Tmx7h8aml0FWFVelV5N54oHow9SLj+GfoDy/huQ+UV396N/C7KpMDMiPspRktzM1/0r1usYEA==} + '@rollup/rollup-win32-ia32-msvc@4.62.2': + resolution: {integrity: sha512-DZgkknc6jhHrk46V25vbAM0zZkyP0nSDkJB8/dRkLTxv470dOmWDqGoEJl/9A0dFfS7yE3REOwNDxpHwSLSt0Q==} cpu: [ia32] os: [win32] - '@rollup/rollup-win32-x64-gnu@4.60.4': - resolution: {integrity: sha512-DRS4G7mi9lJxqEDezIkKCaUIKCrLUUDCUaCsTPCi/rtqaC6D/jjwslMQyiDU50Ka0JKpeXeRBFBAXwArY52vBw==} + '@rollup/rollup-win32-x64-gnu@4.62.2': + resolution: {integrity: sha512-T6xr6ucWSFto+VGajA8YH26LdpHRuP4YLHEKAtCWvJDOlnmWcDZVCI2Jmjr+IFHDlt2zRaTAKE4tfjTaWLgJBg==} cpu: [x64] os: [win32] - '@rollup/rollup-win32-x64-msvc@4.60.4': - resolution: {integrity: sha512-QVTUovf40zgTqlFVrKA1uXMVvU2QWEFWfAH8Wdc48IxLvrJMQVMBRjuQyUpzZCDkakImib9eVazbWlC6ksWtJw==} + '@rollup/rollup-win32-x64-msvc@4.62.2': + resolution: {integrity: sha512-BfzEnDJOt9T8M989/lA37EcJgat01wLRnoi5dQf3QzOH7jzpqTAzdDbVfRljVr5r+jzKqpbHeyOfAaXxAd0PAA==} cpu: [x64] os: [win32] @@ -2470,8 +2406,8 @@ packages: resolution: {integrity: sha512-tlqY9xq5ukxTUZBmoOp+m61cqwQD5pHJtFY3Mn8CA8ps6yghLH/Hw8UPdqg4OLmFW3IFlcXnQNmo/dh8HzXYIQ==} engines: {node: '>=18'} - '@speed-highlight/core@1.2.15': - resolution: {integrity: sha512-BMq1K3DsElxDWawkX6eLg9+CKJrTVGCBAWVuHXVUV2u0s2711qiChLSId6ikYPfxhdYocLNt3wWwSvDiTvFabw==} + '@speed-highlight/core@1.2.17': + resolution: {integrity: sha512-Z92FwKpCtfaW1V0jTU/fh3QzYEZN8wDwrzRIBoADCJfn4mJCNcJN/XegifX7BDrQ8/h9Xh/JnbyMchL0FqXrkg==} '@standard-schema/spec@1.1.0': resolution: {integrity: sha512-l2aFy5jALhniG5HgqrD6jXLi/rUWrKvqN/qJx6yoJsgKhblVd+iqqU4RCXavm/jPityDo5TCvKMnpjKnOriy0w==} @@ -2490,16 +2426,16 @@ packages: peerDependencies: tailwindcss: '>=3.0.0 || >= 3.0.0-alpha.1 || >= 4.0.0-alpha.20 || >= 4.0.0-beta.1' - '@tanstack/virtual-core@3.16.0': - resolution: {integrity: sha512-Er2N7q3WOiH6y2JLxsxNX+u2/sLqSsL0bxFgDjuiPiA7vKhZRm+IzcS17vRee3GNXr64UsesA5CAp9yTiIYw9A==} + '@tanstack/virtual-core@3.17.4': + resolution: {integrity: sha512-nGm5KteqxasUdThLc2izl6dHUqLv0LQj7Nuyo5gYalTPf/U8a9ermvsl7reT+6ioBW1l8WfpP/mcU338nLXpqw==} - '@tanstack/vue-virtual@3.13.26': - resolution: {integrity: sha512-4TmREKi8rKiQC8E2XVEMMgzWbrgHNYolkBgYTXVK1kqXmXRGz6xPWgBq20GUYWUDDhit94+g0ricUQKpZhWRmg==} + '@tanstack/vue-virtual@3.13.32': + resolution: {integrity: sha512-E8OCutx7QnwZdvpJijz0Q2PHsYDWBWjnGr3TvgWiqxTU35jB1kVhtkd93scRV7tTFuId2tg3x2iFiw+IE4evjQ==} peerDependencies: vue: ^2.7.0 || ^3.0.0 - '@tybys/wasm-util@0.10.2': - resolution: {integrity: sha512-RoBvJ2X0wuKlWFIjrwffGw1IqZHKQqzIchKaadZZfnNpsAYp2mM0h36JtPCjNDAHGgYez/15uMBpfGwchhiMgg==} + '@tybys/wasm-util@0.10.3': + resolution: {integrity: sha512-F3fo1MYrRJYL3zER0OUOmkutjr1Vp23m7OsSgp7nq4SP6OqX6C/56XFIPAl5bt3zaBRjmW7SGz3u/6LwFpYcOg==} '@types/chai@5.2.3': resolution: {integrity: sha512-Mw558oeA9fFbv65/y4mHtXDs9bPnFMZAL/jxdPFUpOHHIXX91mcgEHbS5Lahr+pwZFR8A7GQleRWeI6cGFC2UA==} @@ -2510,9 +2446,6 @@ packages: '@types/esrecurse@4.3.1': resolution: {integrity: sha512-xJBAbDifo5hpffDBuHl0Y8ywswbiAp/Wi7Y/GtAgSlZyIABppyurxVueOPE8LUQOxdlgi6Zqce7uoEpqNTeiUw==} - '@types/estree@1.0.8': - resolution: {integrity: sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w==} - '@types/estree@1.0.9': resolution: {integrity: sha512-GhdPgy1el4/ImP05X05Uw4cw2/M93BCUmnEvWZNStlCzEKME4Fkk+YpoA5OiHNQmoS7Cafb8Xa3Pya8m1Qrzeg==} @@ -2522,8 +2455,8 @@ packages: '@types/json-schema@7.0.15': resolution: {integrity: sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==} - '@types/node@25.9.1': - resolution: {integrity: sha512-xfrlY7UD5rMJk3ZVJP8BNzS28J36YJg+xp+LPXV1TdWxr8uMH5A860QNxYDGQe/ylDSgjxE52Q9VnO7p75tJxg==} + '@types/node@26.1.1': + resolution: {integrity: sha512-nxAkRSVkN1Y0JC1W8ky/fTfkGsMmcrRsbx+3XoZE+rMOX71kLYTV7fLXpqud1GpbpP5TuffXFqfX7fH2GgZREw==} '@types/phc__format@1.0.1': resolution: {integrity: sha512-hoAQFKcP3voXk/ZEl3jrvS63o/HYLszq4nA2mqjytaSEHEy3j3t0gSFtPLnfKtX34k/xfath7etOoGw5ukoqXQ==} @@ -2543,69 +2476,100 @@ packages: '@types/ws@8.18.1': resolution: {integrity: sha512-ThVF6DCVhA8kUGy+aazFQ4kXQ7E1Ty7A3ypFOe0IcJV8O/M511G99AW24irKrW56Wt44yG9+ij8FaqoBGkuBXg==} - '@typescript-eslint/eslint-plugin@8.60.0': - resolution: {integrity: sha512-QYb/sa74/s7OKMbACMjrYnGspj9Hs5YI5aaffSL65UfeBUzVzBJfVo3oWSpbzPurvm7yaCCo2Lk7lVj610HqKw==} + '@typescript-eslint/eslint-plugin@8.64.0': + resolution: {integrity: sha512-CGvQPBxN3wZLu6Rz2kFUpZeoCm78xUic92ck39KPePkO1NPOwjCqdQnm5Q87tpWw9vcBvW8XLrDXjH9PWYtJ3Q==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: - '@typescript-eslint/parser': ^8.60.0 + '@typescript-eslint/parser': ^8.64.0 eslint: ^8.57.0 || ^9.0.0 || ^10.0.0 typescript: '>=4.8.4 <6.1.0' - '@typescript-eslint/parser@8.60.0': - resolution: {integrity: sha512-fcqpj/MyK4sxDPcbe7STNPbpQL4RLZOPWuaTmwZYuc+hJKzRf58yRxfhqGpc6PIq9ZyfSBpfHgmUHmHs0KwHwg==} + '@typescript-eslint/parser@8.64.0': + resolution: {integrity: sha512-KA0OshtlcCCXmbfqyZkM5pV3/WNraJf7DkJRLpyrmwPtud57H5BDX7C3k0LPSPxpprfRL+cJDGabF10mvNCoCw==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: eslint: ^8.57.0 || ^9.0.0 || ^10.0.0 typescript: '>=4.8.4 <6.1.0' - '@typescript-eslint/project-service@8.60.0': - resolution: {integrity: sha512-aZu74NNKJeUWqCjDddzdiKaS82dgYgV/vmf+Ui3ZdZejmgfXR/q+pRumgobnQ2cCJTgGTWp4ypiwsuofFubavg==} + '@typescript-eslint/project-service@8.64.0': + resolution: {integrity: sha512-tk4WpOJ6IEbGrVHaNmM0YRrwAD3exZlIK3iadQNAxh4YKk6jvUQ4ecq18n+v7+meh+cJ3j+D8nbk8sRKhlwLQg==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: typescript: '>=4.8.4 <6.1.0' - '@typescript-eslint/scope-manager@8.60.0': - resolution: {integrity: sha512-pFzqhllJMs+jghLQWzV00ds39xLzuyqPSev5pd8f4Ir0rtKR3ZLUB4/4dhjOFighWb9larvtfJvqL+4yKDI3Xw==} + '@typescript-eslint/scope-manager@8.64.0': + resolution: {integrity: sha512-CXEaFdYXjSTgKhisNkwCcJwTP8Pl+fmRrEQrri4nm3vU743bALrxzLmq7fHG/7e6a5xO0lDYeURpZmBuhHk54w==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - '@typescript-eslint/tsconfig-utils@8.60.0': - resolution: {integrity: sha512-BZPR3RGYlAXnly6ymAxfkVn5rCbZzQNou0rxv3GfWZ8cTQp+hhVd73khbGLAd8k1TlAPLISH337M+tAgAnaJDQ==} + '@typescript-eslint/tsconfig-utils@8.64.0': + resolution: {integrity: sha512-2yo8rRNKuzbVWQp5kslhANqZ2uDAeROQHBRZNPu8JDsHmeFNj/XJJhX/FhNUWmkHHvoNsKa6+tHJiig87EzsQw==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: typescript: '>=4.8.4 <6.1.0' - '@typescript-eslint/type-utils@8.60.0': - resolution: {integrity: sha512-SX46wEUtitCpq7AN38HkUU/+zvUpdKf7ephtWAFgckH8O7PQIyL5gvrhQgBLuEYgLfuKWOVvWVskMbuFHAz5xg==} + '@typescript-eslint/type-utils@8.64.0': + resolution: {integrity: sha512-XWG4Fmmv/6SvyS9nH8jWrKs6terwJvE8cyRt1CzYYqzp9OrPhCT4cMc/f7C6RZCwG+qMmiffJS1/qJP8G1URtg==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: eslint: ^8.57.0 || ^9.0.0 || ^10.0.0 typescript: '>=4.8.4 <6.1.0' - '@typescript-eslint/types@8.60.0': - resolution: {integrity: sha512-AsE7x2XaAK+CVbeih0Fvbn+r1qHxtpLDJ3XUuFcIinT318T90yHMJC+Zgv+jUuDjQQd06HKwxnDu6sz1IcTilA==} + '@typescript-eslint/types@8.64.0': + resolution: {integrity: sha512-qjhfuTfLXjA4IOzXvz0rTjT01BqEiIgPoUeMwiEjnaHKJMTNo8rH5pYW1a2L/0Dnux2fPC85AeyJoWaGa8WxTA==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - '@typescript-eslint/typescript-estree@8.60.0': - resolution: {integrity: sha512-3AcZNBGMClm6CXDyo8kYvVGT/sx29sS0oBsIb9oZI2gunA4Vm2M3YHzRLPvsUBBsl+yB5FPtltq7gGH0iTlp9g==} + '@typescript-eslint/typescript-estree@8.64.0': + resolution: {integrity: sha512-Pztpsn1aCE1oWDvDEfUk31nngvvF7vUB5SwHFEaZIFpvw7WJtqUHHL4plBZDA9HfWJJjL13BdG0YrJInTUvoVA==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: typescript: '>=4.8.4 <6.1.0' - '@typescript-eslint/utils@8.60.0': - resolution: {integrity: sha512-HtXuPfrHTyBDkameWpl+vJb1Uevu2tznAyahM1Oc4AENidCLTPiZDWIo4GfcxNdC/RcfGcadzzkqbRG87dUrQA==} + '@typescript-eslint/utils@8.64.0': + resolution: {integrity: sha512-aJUGVB3+U0htrrCjoA8qukw8cm8fNCGAxK/tVoS70k8aeb7DETKeFozRiVFIwEeN9WJLsjaP3ph8I60tY2XZoQ==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: eslint: ^8.57.0 || ^9.0.0 || ^10.0.0 typescript: '>=4.8.4 <6.1.0' - '@typescript-eslint/visitor-keys@8.60.0': - resolution: {integrity: sha512-9WI52t8ZGLVGrPMBet25yAftqY/n95+zmoUUtJBBQTKDSKUu7OsPTroT2op7U9JatkoRccL0YkWDNMFfC4Sjxg==} + '@typescript-eslint/visitor-keys@8.64.0': + resolution: {integrity: sha512-mrtuL8Nsn6gi2H4mo5KMTp823M+3Q19Ew/i+Zlikq20tIMm99C3Ez0dCmkWWnxut20esQvTg8aUSEhMcAOXhEw==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - '@unhead/vue@2.1.15': - resolution: {integrity: sha512-SSByXfEjhzPn8gXdEdgpYqpLMPSkLUH2HVE0GxZfOtNsJ0GgOHQs0g9T67ZZ1z0kTELLKdtOtYrzrbv9+ffF7g==} + '@unhead/bundler@3.2.1': + resolution: {integrity: sha512-lMJGiviHfmZT1dtL+VAi4AgP0NrT1dZXDVK96lajUF4tIYxha1FEo0yQun0lp1J+RL8BE2pm3u2LZY9564dA1A==} peerDependencies: + '@unhead/cli': ^3.2.1 + esbuild: '>=0.17.0' + lightningcss: '>=1.20.0' + rolldown: '>=1.0.0-beta.0' + unhead: ^3.2.1 + vite: '>=6.4.2' + webpack: '>=5.0.0' + peerDependenciesMeta: + '@unhead/cli': + optional: true + esbuild: + optional: true + lightningcss: + optional: true + rolldown: + optional: true + vite: + optional: true + webpack: + optional: true + + '@unhead/vue@3.2.1': + resolution: {integrity: sha512-HILBUv/3QDIze3SosuL0/fkXhBsw+XfDM8Et62O1R4sAAVcjxnggc8JSYn6LrgEKht1GABnz94usRtBe3SofgA==} + peerDependencies: + vite: '>=6.4.2' vue: '>=3.5.18' + webpack: '>=5.0.0' + peerDependenciesMeta: + vite: + optional: true + webpack: + optional: true '@unrs/resolver-binding-android-arm-eabi@1.12.2': resolution: {integrity: sha512-g5T90pqg1bo/7mytQx6F4iBNC0Wsh9cu+z9veDbFjc7HjpesJFWD7QMS0NGStXM075+7dJPPVvBbpZlnrdpi/w==} @@ -2727,39 +2691,49 @@ packages: cpu: [x64] os: [win32] + '@valibot/to-json-schema@1.7.1': + resolution: {integrity: sha512-3qkmU6KXWh8GIThEAW3kuRHPQBMjWkKy+Ppz3WkUucx53DTpOa6siMn4xDGSOhlVyMrDaJTCTMLYPZVAIk1P0A==} + peerDependencies: + valibot: ^1.4.0 + '@vercel/nft@1.10.2': resolution: {integrity: sha512-w+WyX5Ulmj4dtTZrxaulqrjaLZHSbnPzx75SJsTNYmotKsqn1JlLnDJa+lz5hn90HJofhl/2MAtw0mCrgM3qYw==} engines: {node: '>=20'} hasBin: true - '@vitejs/plugin-vue-jsx@5.1.5': - resolution: {integrity: sha512-jIAsvHOEtWpslLOI2MeElGFxH7M8pM83BU/Tor4RLyiwH0FM4nUW3xdvbw20EeU9wc5IspQwMq225K3CMnJEpA==} + '@vitejs/devtools-kit@0.3.4': + resolution: {integrity: sha512-QHvb3wF0KZxvbfEplzzdGenB/dWoPBQlUnw3VVBm5qUYTdoud8rOoem9QI6h/+7a+iwy88LmLigxbSXbbv2Uyg==} + peerDependencies: + vite: '*' + + '@vitejs/plugin-vue-jsx@5.1.6': + resolution: {integrity: sha512-YXvi4as2clxt6DFw5+a0tTA97ntiQXm/raR8ofNj3aNwwdlVGTiG2gp7EvfZW17P50acL/9bP0ccF4XnqNmlgA==} engines: {node: ^20.19.0 || >=22.12.0} peerDependencies: vite: ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0 vue: ^3.0.0 - '@vitejs/plugin-vue@6.0.7': - resolution: {integrity: sha512-km+p+XdSz9Sxm5rqUbqcSfZYaAniKxWBj1KURl+Jr7UaPvvX7BmaWMdP69I5rrFDeQGyxAG7NXdc57vz+snhWg==} + '@vitejs/plugin-vue@6.0.8': + resolution: {integrity: sha512-0ZjgOg7oO6farnNGup7yvoM/YXZV84OZxHAwtflItNa/6zzQyVb5LNxyea3FEKEX2XlagIKzrlH7wwxkKgtiew==} engines: {node: ^20.19.0 || >=22.12.0} peerDependencies: vite: ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0 vue: ^3.2.25 - '@vitest/coverage-v8@4.1.7': - resolution: {integrity: sha512-qsYPeXc5Q9dFLd1i8Ap+Bx8sQgcp+rFVQo4R0dDsWNBzl26ldVF1qOO+RL24K7FDrR6pA+50XedRLSoSG24bVQ==} + '@vitest/coverage-v8@4.1.10': + resolution: {integrity: sha512-IM49HmthevbgAO4anp1hwtoT9wYe59w0LR00gr+eagHE+ZJ5lK4sLPeO0ubgoJcwLk6dehU3R24N+FbEEKDc8g==} peerDependencies: - '@vitest/browser': 4.1.7 - vitest: 4.1.7 + '@vitest/browser': 4.1.10 + vitest: 4.1.10 peerDependenciesMeta: '@vitest/browser': optional: true - '@vitest/expect@4.1.7': - resolution: {integrity: sha512-1R+tw0ortHEbZDGMymm+pN7/AFQ/RkFFdtd7EN+VBpynKmLbP8A3rpEXdshBJ7+8hQ9zBJh/i1s0yKNtxAnU7w==} + '@vitest/expect@4.1.10': + resolution: {integrity: sha512-YsCn+qAk1GWjQOWFEsEcL2gNQ0zmVmQu3T03qP6UyjhtmdtwtbuI+DASn/7iQB3HGTXkdBwGddzxPlmiql5vlA==} - '@vitest/mocker@4.1.7': - resolution: {integrity: sha512-vY7nuamKgfvpA1Koa3oYIw/k7D6kZnpGyNMZW8loow2bsBYla1TFdqTaXncWdRn4pgwNs+90RhnXhJScDwQeJA==} + '@vitest/mocker@4.1.10': + resolution: {integrity: sha512-v0xaezt+DKEmKfaxg133ldzADrwLGd7Ze1MfQQTYfvs8OqZIwbxyxaYURivwV7sWy5fqn3rH5uOrSp07bp44Ow==} peerDependencies: msw: ^2.4.9 vite: ^6.0.0 || ^7.0.0 || ^8.0.0 @@ -2769,25 +2743,25 @@ packages: vite: optional: true - '@vitest/pretty-format@4.1.7': - resolution: {integrity: sha512-umgCarTOYQWIaDMvGDRZij+6b9oVeLIyJzfN+AS88e0ZOU3QTgNNSTtjQOpcvWr3np1N0j4WgZj+sb3oYBDscw==} + '@vitest/pretty-format@4.1.10': + resolution: {integrity: sha512-W1HsjSH4MXQ9YfmmhLAoIYf1HRfekQCGngeIgcei6MP5QQGWUe0gkopdZQaVCFO+JDJMrAJGwa5pRpNpvy4P8Q==} - '@vitest/runner@4.1.7': - resolution: {integrity: sha512-BapjmAQ2aI78WdMEfeUWivnfVzB+VPGwWRQcJE0OUq7qEeEcBsCSf+0T5iREBNE5nBb4wA5Ya0W6IA+sghdEFw==} + '@vitest/runner@4.1.10': + resolution: {integrity: sha512-IKI6kpIH+LmpROplyLwBBaCfMgOZOMsygVa6BARD6ahA04VRuJSa6OaVG7kRvSEMD870Vd91rSSw0eegtWyLGg==} - '@vitest/snapshot@4.1.7': - resolution: {integrity: sha512-ZacLzja+TmJeZ1h14xW2FB/WpeimUD3haBXQPyJqxvo8jQTmfeA8zv58mtjN2C7EHXZDYVcVYdYmAxjkWVvKCw==} + '@vitest/snapshot@4.1.10': + resolution: {integrity: sha512-xRkfOT1qpTAi/Ti4Y1LtfRc3kEuqxGw59eN2jN9pRWMtS/XDevekhcFSqvQqjUNGksfjMJu3Y+oJ+4Ypn2OaJw==} - '@vitest/spy@4.1.7': - resolution: {integrity: sha512-kbkI5LMWakyuTIvs6fUJ5qdIVb1XVKsYJAT4OJ938cHMROYMSfmoQdZy0aaAnjbbc8F61vkoTqz/Az+/HiIu5Q==} + '@vitest/spy@4.1.10': + resolution: {integrity: sha512-PLf/Ugvoq5wO/b4rwYCR1h2PSIdXz7wnkQFMiUpLdtM7l6pqVFcQIBEHyT1+l+cj7mNwAfZHzqXqDyjvOuwbDw==} - '@vitest/ui@4.1.7': - resolution: {integrity: sha512-TP6utB2yX6rsJNVRo2qAlsi48i1YwFTrLV2tnTtWqJaYX7m4lRCCLirZBjU6xC5m0RsPHr+L2+N+eIPhgEzFfw==} + '@vitest/ui@4.1.10': + resolution: {integrity: sha512-EOUqfXHTXtpSHsyLHH40ts3Ue+hRhSGwzwzMlK0dTEOLSDYyOXLyr5JDGmHQWhN2DYI30gw6dVx3cdgM9FZl+Q==} peerDependencies: - vitest: 4.1.7 + vitest: 4.1.10 - '@vitest/utils@4.1.7': - resolution: {integrity: sha512-T532WBu791cBxJlCl6SO+J14l81DQx6uQHm1bQbmCDY7nqlEIgkza/UFnSBNaUtSf41unldDFjdOBYEQC4b5Hw==} + '@vitest/utils@4.1.10': + resolution: {integrity: sha512-fy9am/HWxbaGt/Sawrp90vt6Y6jQwf1RX77cz3uwoJwJVMli/e1IEwRPnMNJ7vKfPTwo0diXifkpPvwH9v7nGA==} '@volar/language-core@2.4.28': resolution: {integrity: sha512-w4qhIJ8ZSitgLAkVay6AbcnC7gP3glYM3fYwKV3srj8m494E3xtrCv6E+bWviiK/8hs6e6t1ij1s2Endql7vzQ==} @@ -2798,8 +2772,8 @@ packages: '@volar/typescript@2.4.28': resolution: {integrity: sha512-Ja6yvWrbis2QtN4ClAKreeUZPVYMARDYZl9LMEv1iQ1QdepB6wn0jTRxA9MftYmYa4DQ4k/DaSZpFPUfxl8giw==} - '@vue-macros/common@3.1.2': - resolution: {integrity: sha512-h9t4ArDdniO9ekYHAD95t9AZcAbb19lEGK+26iAjUODOIJKmObDNBSe4+6ELQAA3vtYiFPPBtHh7+cQCKi3Dng==} + '@vue-macros/common@3.1.4': + resolution: {integrity: sha512-/5Fv+6DgIcM9ajY05ZmKBv+LMX1M9A0X+IUwDRVdt67ciw8OV9bvG2r34p3RiEadlsQybjhKPRKNXDC8Bp23cw==} engines: {node: '>=20.19.0'} peerDependencies: vue: ^2.7.0 || ^3.2.25 @@ -2823,63 +2797,52 @@ packages: peerDependencies: '@babel/core': ^7.0.0-0 - '@vue/compiler-core@3.5.35': - resolution: {integrity: sha512-BUmHaR1J+O+CKZ9uJucdVTEr1LHsdyvv7vG3eNRhK3CczEHeMd/LtsHAuD7PbrxvI2envCY2v7HI1vC1aBRzKw==} + '@vue/compiler-core@3.5.40': + resolution: {integrity: sha512-39E8IgOhTbVDnoJFMKc2DvYnypcZwUqgUhQkccva/0m6FUwtIKSGV7n1hpVmYcFaoRAwf9pBcwnKlCEsN63ZEQ==} - '@vue/compiler-dom@3.5.35': - resolution: {integrity: sha512-k+bprkXxuqhVajgTx5mUHuir7TwQzUKOWR40ng1ncAqQRPnrLngGGgqVEEhOnTMlc8btHYVKmrP8s5Qyg0hvYA==} + '@vue/compiler-dom@3.5.40': + resolution: {integrity: sha512-pwkx4vqlqOspFstrcmzwkKLePVMD3PT65imRzLhanU2V1Fj4K13g6OXjanOyzw3aTAuRk84BOmY8f3rEHqPaVA==} - '@vue/compiler-sfc@3.5.35': - resolution: {integrity: sha512-G5VPMcXTSywXBgtFOZOnHKBxKSrwXUcvY1iaF5/hRcy7t0J6CH/d8ha9F4nzi00Fax1eLV0QHM7v4mQu68jydw==} + '@vue/compiler-sfc@3.5.40': + resolution: {integrity: sha512-gIf497P4kpuALcvs5n3AEg1Vdn0pSY4XbjASIfHNYF1/MP3T2Mf2STERTubysBxCRxzJGJYtF/O7vwJrxFB3Vw==} - '@vue/compiler-ssr@3.5.35': - resolution: {integrity: sha512-rGhAeXgdM7/ffTJGXT69rCCdTmjDewnFuUZfBQQHTdcEBeWdT5HCGY60y2ytLJr9/Dsu7IntUi5z/w0h6Rjnzw==} + '@vue/compiler-ssr@3.5.40': + resolution: {integrity: sha512-rrE5xiXG663+vHCHa3J9p2z5OcBRjXmoqenprJxAFQxg5pSshzeBiCE6pu46axapRJ2Adk0YDA2BRZVjiHXnhg==} '@vue/devtools-api@6.6.4': resolution: {integrity: sha512-sGhTPMuXqZ1rVOk32RylztWkfXTRhuS7vgAKv0zjqk8gbsHkJ7xfFf+jbySxt7tWObEJwyKaHMikV/WGDiQm8g==} - '@vue/devtools-api@7.7.9': - resolution: {integrity: sha512-kIE8wvwlcZ6TJTbNeU2HQNtaxLx3a84aotTITUuL/4bzfPxzajGBOoqjMhwZJ8L9qFYDU/lAYMEEm11dnZOD6g==} + '@vue/devtools-api@8.1.5': + resolution: {integrity: sha512-YJipMVAKe5wT5CWf5kTYCaNV7NMNjFVxJkIkJaJ4W/nCxEBzlZzrOsYKeCymdCrFZmBS/+wTWFoUs3Jf/Q6XSQ==} - '@vue/devtools-api@8.1.2': - resolution: {integrity: sha512-vA0O112YqyDuNA1s7Yb2gCgToQ/OxOWiFDO5ThLCcDy0ldHnSd1dUTaSYhOldbqoNgumE4dxtGAoAaSUKUD1Zg==} - - '@vue/devtools-core@8.1.2': - resolution: {integrity: sha512-ZGGyaSBP4/+bN2Nd9ZHNYAVDRIzMw1rv2RyXWtyZlo6mQal+IDmTvKY4V+DjAEBhaXt30mHmsgYp1yXJ/2tIWg==} + '@vue/devtools-core@8.1.5': + resolution: {integrity: sha512-5e5jQOEssCdZA1wlFEUkIDtb+cAOWuLNWJ52fm4PBWbF7e3oTnM2fneaL42E5lJoolAaUQ678tv/XEb3h4e86Q==} peerDependencies: vue: ^3.0.0 - '@vue/devtools-kit@7.7.9': - resolution: {integrity: sha512-PyQ6odHSgiDVd4hnTP+aDk2X4gl2HmLDfiyEnn3/oV+ckFDuswRs4IbBT7vacMuGdwY/XemxBoh302ctbsptuA==} + '@vue/devtools-kit@8.1.5': + resolution: {integrity: sha512-FcSAxsi4eWuXLCB7Rv9lj0aIVHHPNVQ2BazGf4RJTc2JCqb4BQg0hk87ZFhminCfl+mD5OUI0rX2cgyu4kJOGA==} - '@vue/devtools-kit@8.1.2': - resolution: {integrity: sha512-f75/upc+GCyjXErpgPGz4582ujS0L/adAltGy+tqXMGUJpgAcfGr6CxnnhpZY8BHuMYt6KpbF8uaFrrQG66rGQ==} + '@vue/devtools-shared@8.1.5': + resolution: {integrity: sha512-mhT4zcPFhF+Xk1O4BfhhrbXzpmfqY03fS6xGpcllbQG7lDjhQf8pQHcTIhqQIYx1hfwtHmk/6jM96ele0UxPqQ==} - '@vue/devtools-shared@7.7.9': - resolution: {integrity: sha512-iWAb0v2WYf0QWmxCGy0seZNDPdO3Sp5+u78ORnyeonS6MT4PC7VPrryX2BpMJrwlDeaZ6BD4vP4XKjK0SZqaeA==} + '@vue/language-core@3.3.7': + resolution: {integrity: sha512-LzmkKinXAMMoh8Jfi/jMUSDUjuPdv8mynH5WJGKfXyZtDw3hQ6GBaoI6Bcnl/Xqlu32q/0Z6i/trp4VXykzyLw==} - '@vue/devtools-shared@8.1.2': - resolution: {integrity: sha512-X9RyVFYAdkBe4IUf5v48TxBF/6QPmF8CmWrDAjXzfUHrgQ/HGfTC1A6TqgXqZ03ye66l3AD51BAGD69IvKM9sw==} + '@vue/reactivity@3.5.40': + resolution: {integrity: sha512-B7ot9UlUZOi1zbq61/LvE88ZLTV8IlajTdiZTAEiDQgrnIMIZoPr9kGw0Zw46ObW62O9+H/Be3kMbfb7kYPQZA==} - '@vue/language-core@3.3.3': - resolution: {integrity: sha512-X6p+7nfY7vVT6dQwUJ+v0Jfq/lwIfhL2jMi91dQ3ln4hnlGXlxsDu/FNkeyHYgvYtyQy18ZX76IZy7X4diDbiQ==} + '@vue/runtime-core@3.5.40': + resolution: {integrity: sha512-KAZLweuZ6uUJPK1PMSQPgBU5gCjgrrfjUhSglmU9NhH+Zjepa8cnwSydPWDWHDwOgY4g3VcZ+PljbiHlURNCbw==} - '@vue/reactivity@3.5.35': - resolution: {integrity: sha512-tVc+SsHConvh/Lz64qq1pP3rYArBmK42xonovEcxY74SQtvctZodG/zhq54P5dr38cVuw25d27cPNRdlMidpGQ==} + '@vue/runtime-dom@3.5.40': + resolution: {integrity: sha512-ZfrX8ssZQds900L9pr8AuK05ddnMsR4MPMZr8cPN9GoqoPWcXLhjvvbIA2SMv+7a97sJ1vv9pj/zxK0Cq/eEFQ==} - '@vue/runtime-core@3.5.35': - resolution: {integrity: sha512-A/xFNX9loIcWDygeQuNCfKuh0CoYBzxhqEMNah5TSFg9Z53DrFYEN2qi5CU9necjM1OWYegYREUTHmXTmhfXtg==} + '@vue/server-renderer@3.5.40': + resolution: {integrity: sha512-XNJym9WpevhTVt1HuwOrCRJ5Q+9z4BjTMrDtjTrvx74SmUll8spNTw6whWJa9mEkO4PKn5TihI/bm/8ds2QVJw==} - '@vue/runtime-dom@3.5.35': - resolution: {integrity: sha512-odrJ1C391dbGnyDRh8U+rnP7J2amIEzfmRk5vXy7xi3aZhEXofTvpi0T4HJb6jlNqQZTNPR5MPHSB3RHNkIORA==} - - '@vue/server-renderer@3.5.35': - resolution: {integrity: sha512-NkebSOYdB97wi8OQcO3HqzZSlymJi/aWsN/7h74OSVhRTm6qGs3Jp3e0rCXynmWwSlKeRrnlIug+ilYoHBmQDA==} - peerDependencies: - vue: 3.5.35 - - '@vue/shared@3.5.35': - resolution: {integrity: sha512-zSbjL7gRXwks2ZQLRGCajBtBXEOXW9Ddhn/HvSdrGkE2dqGnumzW8XtusRrxrE9LvqtiqDXQ+A60Hp6mvdYxfA==} + '@vue/shared@3.5.40': + resolution: {integrity: sha512-WxnBtruIqOoV3rA4jeKDWzrYI5h7Cp4+pjwDi8kWGHz+IslhiN+wguLVVhtv2l8VoU02rzDCVfDjgCl1lNpZVg==} '@vueuse/core@10.11.1': resolution: {integrity: sha512-guoy26JQktXPcz+0n3GukWIy/JDNKti9v6VEMu6kV2sYBsWuGiTU8OWdg+ADfUbHg3/3DlqySDe7JmdHrktiww==} @@ -2931,8 +2894,8 @@ packages: peerDependencies: acorn: ^6.0.0 || ^7.0.0 || ^8.0.0 - acorn@8.16.0: - resolution: {integrity: sha512-UVJyE9MttOsBQIDKw1skb9nAwQuR5wuGD3+82K6JgJlm/Y+KI92oNsMNGZCYdDsVtRHSak0pcV5Dno5+4jh9sw==} + acorn@8.17.0: + resolution: {integrity: sha512-xRQbDb9BnwDafYNn6Vwl839DYVjqXYb1XVGtWAZ1kcDc6iwAL4hg3B1dZlRiuENFeO2H53gFG3in621AdERVAg==} engines: {node: '>=0.4.0'} hasBin: true @@ -2962,8 +2925,8 @@ packages: resolution: {integrity: sha512-4Dj6M28JB+oAH8kFkTLUo+a2jwOFkuqb3yucU0CANcRRUbxS0cP0nZYCGjcc3BNXwRIsUVmDGgzawme7zvJHvg==} engines: {node: '>=12'} - ansis@4.3.0: - resolution: {integrity: sha512-44mvgtPvohuU/70DdY5Oz2AIrLJ9k6/5x4KmoSvPwO+5Moijo0+N9D0fKbbYZQWP1hNm5CpOf+E01jhxG/r8xg==} + ansis@4.3.1: + resolution: {integrity: sha512-BJ8/l4R5LRE7hW9WdSuGYrLSHi2ynxeFpDFbH0K/CgNeY/tyhk+vO6TYxXC5r5CpUhNVX310xzPsN/H9lCdfOA==} engines: {node: '>=14'} any-promise@1.3.0: @@ -2973,8 +2936,8 @@ packages: resolution: {integrity: sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==} engines: {node: '>= 8'} - apexcharts@5.13.0: - resolution: {integrity: sha512-PJuXT6zdiCbv0IkX5cqkKFVIIh+9v3kqP9zsOHEGpIWi7DfTgzvfOKc8icw6G3/ulR3V1alDDUtOVH0zWCWGEQ==} + apexcharts@6.3.0: + resolution: {integrity: sha512-EjpwMV6SDSOMCPXAEO2MyzcJF4Tjtz9ZTKZKFLv/DgVysTgA/6EE4PkMzjbyuvs41L6zo0qGBMl9+DrEjcN9ig==} archiver-utils@5.0.2: resolution: {integrity: sha512-wuLJMmIBQYCsGZgYLTy5FIB2pF6Lfb6cXMSF8Qywwk3t20zWnAi7zLcQFdKQmIB8wyZpY5ER38x08GbwtR2cLA==} @@ -2991,8 +2954,8 @@ packages: arg@5.0.2: resolution: {integrity: sha512-PYjyFOLKQ9y57JvQ6QLo8dAgNqswh8M1RMJYdQduT6xbWSgK36P/Z/v+p888pM69jMMfS8Xd8F6I1kQ/I9HUGg==} - argon2@0.44.0: - resolution: {integrity: sha512-zHPGN3S55sihSQo0dBbK0A5qpi2R31z7HZDZnry3ifOyj8bZZnpZND2gpmhnRGO1V/d555RwBqIK5W4Mrmv3ig==} + argon2@0.45.0: + resolution: {integrity: sha512-Ob6jYdMisRcYU+FUF4zEVl5nTGSTCA78dKaDyRzSkQB8iU0ZRJfpWV7XMIRj87VDmNvPdQqOjuFhGRQCvTMShA==} engines: {node: '>=16.17.0'} argparse@2.0.1: @@ -3010,12 +2973,8 @@ packages: resolution: {integrity: sha512-m1Q/RaVOnTp9JxPX+F+Zn7IcLYMzM8kZofDImfsKZd8MbR+ikdOzTeztStWqfrqIxZnYWryyI9ePm3NGjnZgGw==} engines: {node: '>=20.19.0'} - ast-v8-to-istanbul@1.0.2: - resolution: {integrity: sha512-dKmJxJsGItLmc5CYZKuEjuG6GnBs6PG4gohMhyFOWKaNQoYCuRZJDECaBlHmcG0lv2wc2E0uU8lESmBEumC3DQ==} - - ast-walker-scope@0.8.3: - resolution: {integrity: sha512-cbdCP0PGOBq0ASG+sjnKIoYkWMKhhz+F/h9pRexUdX2Hd38+WOlBkRKlqkGOSm0YQpcFMQBJeK4WspUAkwsEdg==} - engines: {node: '>=20.19.0'} + ast-v8-to-istanbul@1.0.5: + resolution: {integrity: sha512-UPAgKJFSEGMWSDr3LX4tqnAb4f7KGT8O40Tyx8wbYmmZ/yn58lNCm8h3svs3eXgiGd5AXxz8NDOvXWvicq+rJA==} ast-walker-scope@0.9.0: resolution: {integrity: sha512-IJdzo2vLiElBxKzwS36VsCue/62d6IdWjnPB2v3nuPKeWGynp6FF/CYoLa5i/3jXH/z97ZDdsXz6abpgM6w07A==} @@ -3031,8 +2990,8 @@ packages: resolution: {integrity: sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg==} engines: {node: '>= 4.0.0'} - autoprefixer@10.5.0: - resolution: {integrity: sha512-FMhOoZV4+qR6aTUALKX2rEqGG+oyATvwBt9IIzVR5rMa2HRWPkxf+P+PAJLD1I/H5/II+HuZcBJYEFBpq39ong==} + autoprefixer@10.5.4: + resolution: {integrity: sha512-MaU0U/za7N3r6brxD4YB/l4NSrFzLPlANv6wEuQVaIPlD3L4W9rFcQPbL/EilY9BHhHvhfcz3gInDLrEtWT4EA==} engines: {node: ^10 || ^12 || >=14} hasBin: true peerDependencies: @@ -3053,16 +3012,16 @@ packages: resolution: {integrity: sha512-BLrgEcRTwX2o6gGxGOCNyMvGSp35YofuYzw9h1IMTRmKqttAZZVU67bdb9Pr2vUHA8+j3i2tJfjO6C6+4myGTA==} engines: {node: 18 || 20 || >=22} - bare-events@2.8.3: - resolution: {integrity: sha512-HdUm8EMQBLaJvGUdidNNbqpA1kYkwNcb+MYxkxCLAPJGQzlv9J0C24h8V65Z4c5GLd/JEALDvpFCQgpLJqc0zw==} + bare-events@2.9.1: + resolution: {integrity: sha512-Z0oHEHAFDZkffN8Qc39zNZjQlMDkPJRyyyZieU1VH7u8c5S+qHZ2S8ixdKIAxEjfHO7FJxXmJWgteOghVanIsg==} peerDependencies: bare-abort-controller: '*' peerDependenciesMeta: bare-abort-controller: optional: true - bare-fs@4.7.1: - resolution: {integrity: sha512-WDRsyVN52eAx/lBamKD6uyw8H4228h/x0sGGGegOamM2cd7Pag88GfMQalobXI+HaEUxpCkbKQUDOQqt9wawRw==} + bare-fs@4.7.4: + resolution: {integrity: sha512-y1kC+ffIx/tPLdTE693uNjHfzTfr+ravR5tvWlMXe25nELbkqV400S71qHDwbkAQ1FVEZobB1NFRzFbCCcyBCQ==} engines: {bare: '>=1.16.0'} peerDependencies: bare-buffer: '*' @@ -3070,15 +3029,11 @@ packages: bare-buffer: optional: true - bare-os@3.9.1: - resolution: {integrity: sha512-6M5XjcnsygQNPMCMPXSK379xrJFiZ/AEMNBmFEmQW8d/789VQATvriyi5r0HYTL9TkQ26rn3kgdTG3aisbrXkQ==} - engines: {bare: '>=1.14.0'} + bare-path@3.1.1: + resolution: {integrity: sha512-JprUlveX3QjApC1cTpsUOiscADftCGVWkzitbHsRqv84hzYwYHw2mbluddsq5TvI8mH/8Ov1f4BiMAdcB0oYnQ==} - bare-path@3.0.0: - resolution: {integrity: sha512-tyfW2cQcB5NN8Saijrhqn0Zh7AnFNsnczRcuWODH0eYAXBsJ5gVxAUuNr7tsHSC6IZ77cA0SitzT+s47kot8Mw==} - - bare-stream@2.13.1: - resolution: {integrity: sha512-Vp0cnjYyrEC4whYTymQ+YZi6pBpfiICZO3cfRG8sy67ZNWe951urv1x4eW1BKNngw3U+3fPYb5JQvHbCtxH7Ow==} + bare-stream@2.13.3: + resolution: {integrity: sha512-Kc+brLqvEqGkjyfiwJmImAOqLZL7OsoLKuavx+hJjgVV3nLTOjloJyPMFxjUPerGGHrNH0fLU06jjykMLWrERQ==} peerDependencies: bare-abort-controller: '*' bare-buffer: '*' @@ -3091,14 +3046,14 @@ packages: bare-events: optional: true - bare-url@2.4.3: - resolution: {integrity: sha512-Kccpc7ACfXaxfeInfqKcZtW4pT5YBn1mesc4sCsun6sRwtbJ4h+sNOaksUpYEJUKfN65YWC6Bw2OJEFiKxq8nQ==} + bare-url@2.4.5: + resolution: {integrity: sha512-K+y9xF1tN+CdPu4qWwr0QiK1Al07eFPGYK5M2pDXcmHdMdgC/tT/bpmMe1hrmRHaidKLkXrC+cRNYf3XVDUhSQ==} base64-js@1.5.1: resolution: {integrity: sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==} - baseline-browser-mapping@2.10.33: - resolution: {integrity: sha512-bA6+tcSLpz2tIEdDXZPpPTIuxBcC4+w6SieaYyfigIa4h8GlFxbA17v22Vx3JUtuZQj9SgOsnbK+aTBzyDyEuw==} + baseline-browser-mapping@2.10.43: + resolution: {integrity: sha512-AjYpR78kDWAY3Efj+cDTFH9t9SCoL7OoTp1BOb0mQV7S+6CiLwnWM3FyxhJtdPufDFKzmCSFoUncKjWgJEZTCQ==} engines: {node: '>=6.0.0'} hasBin: true @@ -3118,22 +3073,22 @@ packages: boolbase@1.0.0: resolution: {integrity: sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==} - brace-expansion@1.1.15: - resolution: {integrity: sha512-EwOCDEex4quD37XhqM3omwtMoJjr//isUZz1JopUNWms+4Z2ViyM/k1YIRePpoVNnQhENnxtFjLaxNHrT7xIUg==} + brace-expansion@1.1.16: + resolution: {integrity: sha512-IDw48K2/2kRkg9LdJxurvq3lV3aBgq0REY89duEqFRthjlPdXHKMj7EnQOXVckxzgisinf3nHfrcE2FufFLXMw==} - brace-expansion@2.1.1: - resolution: {integrity: sha512-WR1cURNjuvBLMZBMbqM0UoE+WAfdUcEV1ccD8PVBVOI+Z3ND4+SZbN8RsfT2bMuG1qwz5RFvPukSZm5fF2D5eA==} + brace-expansion@2.1.2: + resolution: {integrity: sha512-w5JZcKgdhDOgOwm8H+KgbosopHMuGcl6qbulwjtz3SM7I7P3yW1eAjzMPLrIE+NQ9vjgANKHWeMHnrT0OXW1oA==} - brace-expansion@5.0.6: - resolution: {integrity: sha512-kLpxurY4Z4r9sgMsyG0Z9uzsBlgiU/EFKhj/h91/8yHu0edo7XuixOIH3VcJ8kkxs6/jPzoI6U9Vj3WqbMQ94g==} + brace-expansion@5.0.7: + resolution: {integrity: sha512-7oFy703dxfY3/NLxC1fh2SUCQ0H9rmAY+5EpDVfXjUTTs+HEwR2nYaqLv+GWcTsumwxPfiz6CzCNkwXwBUwqCA==} engines: {node: 18 || 20 || >=22} braces@3.0.3: resolution: {integrity: sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==} engines: {node: '>=8'} - browserslist@4.28.2: - resolution: {integrity: sha512-48xSriZYYg+8qXna9kwqjIVzuQxi+KYWp2+5nCYnYKPTr0LvD89Jqk2Or5ogxz0NUMfIjhh2lIUX/LyX9B4oIg==} + browserslist@4.28.6: + resolution: {integrity: sha512-FQBYNK15VMslhLHpA7+n+n1GOlF1kId2xcCg7/j95f24AOF6VDYMNH4mFxF7KuaTdv627faazpOAjFzMrfJOUw==} engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7} hasBin: true @@ -3147,20 +3102,14 @@ packages: buffer@6.0.3: resolution: {integrity: sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==} - builtin-modules@5.2.0: - resolution: {integrity: sha512-02yxLeyxF4dNl6SlY6/5HfRSrSdZ/sCPoxy2kZNP5dZZX8LSAD9aE2gtJIUgWrsQTiMPl3mxESyrobSwvRGisQ==} + builtin-modules@5.3.0: + resolution: {integrity: sha512-hMQUl2bUFG339QygPM97E+mc8OY1IAchORZxm4a/frcYwKzozMzRVDBwHW0NjOqGElLm2O37AVQE8ikxlZHrMQ==} engines: {node: '>=18.20'} bundle-name@4.1.0: resolution: {integrity: sha512-tjwM5exMg6BGRI+kNmTntNsvdZS1X8BFYS6tnJ2hdH0kVxM6/eVZ2xy+FqStSWvYmtfFMDLIxurorHwDKfDz5Q==} engines: {node: '>=18'} - bundle-require@5.1.0: - resolution: {integrity: sha512-3WrrOuZiyaaZPWiEt4G3+IffISVC9HYlWueJEBWED4ZH4aIAC2PnkdnuRrR94M+w6yGWn4AglWtJtBI8YqvgoA==} - engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} - peerDependencies: - esbuild: '>=0.18' - c12@3.3.4: resolution: {integrity: sha512-cM0ApFQSBXuourJejzwv/AuPRvAxordTyParRVcHjjtXirtkzM0uK2L9TTn9s0cXZbG7E55jCivRQzoxYmRAlA==} peerDependencies: @@ -3169,10 +3118,6 @@ packages: magicast: optional: true - cac@6.7.14: - resolution: {integrity: sha512-b6Ilus+c3RrdDk+JhLKUAQfzzgLEPy6wcXqS7f/xe1EETvsDP6GORG7SFuOs6cID5YkqchW/LXZbX5bc8j7ZcQ==} - engines: {node: '>=8'} - cac@7.0.0: resolution: {integrity: sha512-tixWYgm5ZoOD+3g6UTea91eow5z6AAHaho3g0V9CNSNb45gM8SmflpAc+GRd1InC4AqN/07Unrgp56Y94N9hJQ==} engines: {node: '>=20.19.0'} @@ -3189,19 +3134,15 @@ packages: resolution: {integrity: sha512-+ys997U96po4Kx/ABpBCqhA9EuxJaQWDQg7295H4hBphv3IZg0boBKuwYpt4YXp6MZ5AmZQnU/tyMTlRpaSejg==} engines: {node: '>= 0.4'} - callsites@3.1.0: - resolution: {integrity: sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==} - engines: {node: '>=6'} - camelcase-css@2.0.1: resolution: {integrity: sha512-QOSvevhslijgYwRx6Rv7zKdMF8lbRmx+uQGx2+vDc+KI/eBnsy9kit5aj23AgGu3pa4t9AgwbnXWqS+iOY+2aA==} engines: {node: '>= 6'} - caniuse-api@3.0.0: - resolution: {integrity: sha512-bsTwuIg/BZZK/vreVTYYbSWoe2F+71P7K5QGEX+pT250DZbfU1MQ5prOKpPR+LL6uWKK3KMwMCAS74QB3Um1uw==} + caniuse-api@4.0.0: + resolution: {integrity: sha512-B0hQ1OLyJuHTQSOWXvwibWqM6DCoqJdvBA6X1S/53bd4XU7LJ1yurIPlrsouol3mw1jh9pGI4ivubSpmJeIqCA==} - caniuse-lite@1.0.30001793: - resolution: {integrity: sha512-iwSsYWaCOoh26cV8NwNRViHlrfUvYsHDfRVcbtmw0Kg6PJIZZXwMkj1442FYLBGkeUf1juAsU3DTfxW579mrPA==} + caniuse-lite@1.0.30001806: + resolution: {integrity: sha512-72Cuvd95zbSYPKq6Fhg8eDJRlzgWDf7/mtoZv6Qe/DYNCEBdNxoA3+rZAU2ZhGCpZlns3EssFavaZomckT5Uuw==} chai@6.2.2: resolution: {integrity: sha512-NUPRluOfOiTKBKvWPtSD4PhFvWCqOi0BGStNWs57X9js7XGTprSmFoz5F0tWhR4WPjNeR9jXqdC7/UpSJTnlRg==} @@ -3218,10 +3159,6 @@ packages: resolution: {integrity: sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==} engines: {node: '>= 8.10.0'} - chokidar@4.0.3: - resolution: {integrity: sha512-Qgzu8kfBvo+cA4962jnP1KkS6Dop5NS6g7R5LFYJr4b8Ub94PPQXUksCw9PvXoeXPRRddRNC5C1JQUR2SMGtnA==} - engines: {node: '>= 14.16.0'} - chokidar@5.0.0: resolution: {integrity: sha512-TQMmc3w+5AxjpL8iIiwebF73dRDF4fBIieAqGn9RGCWaEVwQ6Fb2cGe31Yns0RRIzii5goJ1Y7xbMwo1TxMplw==} engines: {node: '>= 20.19.0'} @@ -3238,8 +3175,8 @@ packages: resolution: {integrity: sha512-zEbNjf8/Un85X0XYUR9e99CYxZrq6ko4F6Xd6wnrxpgVi9F0Y7096+H2T+RDxYGSYHP6DUptmQE4j6RdRe+f7w==} engines: {node: '>=22'} - cidr-tools@12.0.2: - resolution: {integrity: sha512-J5cUh8tmX51xlodw0dbHpljFHqrOVUa5oFHq/KoVvyQqgrvxWqTmUfAb7//VRrZn8Zo+fdKOowfe6TXruXqBeg==} + cidr-tools@12.1.2: + resolution: {integrity: sha512-31tot6DSnNHhgs0SPHyr9E3mneltfcj1tsePwpixFWxMgYi125nIguEFOFl8tl9gLohw628g+0Qcv11gtFeC4w==} engines: {node: '>=22'} citty@0.1.6: @@ -3248,10 +3185,6 @@ packages: citty@0.2.2: resolution: {integrity: sha512-+6vJA3L98yv+IdfKGZHBNiGW5KHn22e/JwID0Strsz8h4S/csAu/OuICwxrg44k5MRiZHWIo8XXuJgQTriRP4w==} - clean-regexp@1.0.0: - resolution: {integrity: sha512-GfisEZEJvzKrmGWkvfhgzcz/BllN1USeqD2V6tg14OAOgaCD2Z/PUEuxnAZ/nPvmaHRG7a8y77p1T/IRQ4D1Hw==} - engines: {node: '>=4'} - cliui@8.0.1: resolution: {integrity: sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==} engines: {node: '>=12'} @@ -3294,10 +3227,6 @@ packages: resolution: {integrity: sha512-U7VdrJFnJgo4xjrHpTzu0yrHPGImdsmD95ZlgYSEajAn2JKzDhDTPG9kBTefmObL2w/ngeZnilk+OV9CG3d7UA==} engines: {node: '>= 6'} - comment-parser@1.4.6: - resolution: {integrity: sha512-ObxuY6vnbWTN6Od72xfwN9DbzC7Y2vv8u1Soi9ahRKL37gb6y1qk6/dgjs+3JWuXJHWvsg3BXIwzd/rkmAwavg==} - engines: {node: '>= 12.0.0'} - comment-parser@1.4.7: resolution: {integrity: sha512-0h+uSNtQGW3D98eQt3jJ8L06Fves8hncB4V/PKdw/Qb8Hnk19VaKuTr55UNRYiSoVa7WwrFls+rh3ux9agmkeQ==} engines: {node: '>= 12.0.0'} @@ -3353,10 +3282,6 @@ packages: resolution: {integrity: sha512-TG2hpqe4ELx54QER/S3HQ9SRVnQnGBtKUz5bLQWtYAQ+o6GpgMs6sYUvaiJjVxb+UXwhRhAEP3m7LbsIZ77Hmw==} engines: {node: '>= 0.8'} - copy-anything@4.0.5: - resolution: {integrity: sha512-7Vv6asjS4gMOuILabD3l739tsaxFQmC+a7pLZm02zyvs8p977bL3zEgq3yDk5rn9B0PbYgIv++jmHcuUab4RhA==} - engines: {node: '>=18'} - core-js-compat@3.49.0: resolution: {integrity: sha512-VQXt1jr9cBz03b331DFDCCP90b3fanciLkgiOoy8SBHy06gNf+vQ1A3WFLqG7I8TipYIKeYK9wxd0tUrvHcOZA==} @@ -3388,20 +3313,14 @@ packages: crossws@0.3.5: resolution: {integrity: sha512-ojKiDvcmByhwa8YYqbQI/hg7MEU0NC03+pSdEq4ZUnZR9xXpwk7E43SMNGkn+JxJGPFtNvQ48+vV2p+P1ml5PA==} - crossws@0.4.5: - resolution: {integrity: sha512-wUR89x/Rw7/8t+vn0CmGDYM9TD6VtARGb0LD5jq2wjtMy1vCP4M+sm6N6TigWeTYvnA8MoW29NqqXD0ep0rfBA==} + crossws@0.4.10: + resolution: {integrity: sha512-pz3oubH/dt12KjqsUB0IuXW4nwRDQ583iDsP4555Cpdqx0NoU7pGlWBcayyFI8f/l/idRpgjMEfwuOxSWJYlIA==} peerDependencies: srvx: '>=0.11.5' peerDependenciesMeta: srvx: optional: true - css-declaration-sorter@7.4.0: - resolution: {integrity: sha512-LTuzjPoyA2vMGKKcaOqKSp7Ub2eGrNfKiZH4LpezxpNrsICGCSFvsQOI29psISxNZtaXibkC2CXzrQ5enMeGGw==} - engines: {node: ^14 || ^16 || >=18} - peerDependencies: - postcss: ^8.0.9 - css-select@5.2.2: resolution: {integrity: sha512-TizTzUddG/xYLA3NXodFM0fSbNizXjOKhqiQQwvhlspadZokn1KDy0NZFS0wuEubIYAV5/c1/lAr0TaaFXEXzw==} @@ -3422,23 +3341,23 @@ packages: engines: {node: '>=4'} hasBin: true - cssnano-preset-default@7.0.17: - resolution: {integrity: sha512-11qO63A+czwguQFJCaTdICvbaxn0pJzz/XghLlv+OT7WyToDxAMR0Xb3/26/l0y0hQJywwNbj/SLSQlGBHE1OA==} - engines: {node: ^18.12.0 || ^20.9.0 || >=22.0} + cssnano-preset-default@8.0.2: + resolution: {integrity: sha512-+jQAqIKCqMmBjZs7741XkilU93ITZ/EW8gjAkMmujdCzfDkfjrDBv2VqkSu29Fzeig/0rZ3S9IAwfPLlmXEUfQ==} + engines: {node: ^22.11.0 || ^24.11.0 || >=26.0} peerDependencies: - postcss: ^8.5.13 + postcss: ^8.5.15 - cssnano-utils@5.0.3: - resolution: {integrity: sha512-ynIREMICLxkxm7e9bCR9sh75s4Q5drICi0ua1yxo5jH2XPBqSKkl4dOh4EbFqtUmnTMhRffHgYL0EKKkMjtJTg==} - engines: {node: ^18.12.0 || ^20.9.0 || >=22.0} + cssnano-utils@6.0.1: + resolution: {integrity: sha512-zk65GIxA8tCjqVk7nTm1mE+ZKxtnxAvU5JSUaBLXbAr3ZF7IOvz3fbPOnEDvZKhnS7GOIitXTS5BgehLzNoc8Q==} + engines: {node: ^22.11.0 || ^24.11.0 || >=26.0} peerDependencies: - postcss: ^8.5.13 + postcss: ^8.5.15 - cssnano@7.1.9: - resolution: {integrity: sha512-uPR75+5Dk/WJ/YSPR1/YDHdwMM9c5FsaARljfKWgeCKLKOtJ0we21xy/RcCjn53fZnD/f6yYEIZ8pu18+GnbNQ==} - engines: {node: ^18.12.0 || ^20.9.0 || >=22.0} + cssnano@8.0.2: + resolution: {integrity: sha512-K+a76gA1v0/CsYgcsE95HGGyIuPKxpQSetwSwz4nHEM8fFXqSkzq2JzEXFL8v5+CCjxzVVVhPcTK3Oo8SaF/xA==} + engines: {node: ^22.11.0 || ^24.11.0 || >=26.0} peerDependencies: - postcss: ^8.5.13 + postcss: ^8.5.15 csso@5.0.5: resolution: {integrity: sha512-0LrrStPOdJj+SPCCrGhzryycLjwcgUSHBtxNA8aIDxf0GLsRh1cKYhB00Gd1lDOS4yGH69+SNn13+TWbVHETFQ==} @@ -3534,6 +3453,10 @@ packages: resolution: {integrity: sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==} engines: {node: '>= 0.8', npm: 1.2.8000 || >= 1.4.16} + detect-indent@7.0.2: + resolution: {integrity: sha512-y+8xyqdGLL+6sh0tVeHcfP/QDd8gUgbasolJJpY7NgeQGSZ739bDtSiaiDgtoicy+mtYB81dKLxO9xRhCyIB3A==} + engines: {node: '>=12.20'} + detect-libc@2.0.2: resolution: {integrity: sha512-UX6sGumvvqSaXgdKGUsgZWqcUyIXZ/vZTrlRT/iobiKhGL0zL4d3osHj3uqllWJK+i+sixDS/3COVEOFbupFyw==} engines: {node: '>=8'} @@ -3545,6 +3468,22 @@ packages: devalue@5.8.1: resolution: {integrity: sha512-4CXDYRBGqN+57wVJkuXBYmpAVUSg3L6JAQa/DFqm238G73E1wuyc/JhGQJzN7vUf/CMphYau2zXbfWzDR5aTEw==} + devframe@0.5.4: + resolution: {integrity: sha512-dbHU/LuptR1aMXcizjHUeY3gu7qVaRQoFYqbbyyGuO6Y+avFA4uQtwinHtG1qa7lRel/7b8JrBDm0nbnxU3vqg==} + peerDependencies: + '@modelcontextprotocol/sdk': ^1.0.0 + peerDependenciesMeta: + '@modelcontextprotocol/sdk': + optional: true + + devframe@0.6.2: + resolution: {integrity: sha512-/P2MPHZzCRyuzEqPOThTDbiCsvbT7OkL1lj9/p6yiUycmC5xfRx5lOhjURYggSyTzEpOSUuWtlicr53ohEFZ5Q==} + peerDependencies: + '@modelcontextprotocol/sdk': ^1.0.0 + peerDependenciesMeta: + '@modelcontextprotocol/sdk': + optional: true + didyoumean@1.2.2: resolution: {integrity: sha512-gxtyfqMg7GKyhQmb056K7M3xszy/myH8w+B4RT+QXBQsvAOdc3XymqDDPHx1BgPgsdAA5SIifona89YtRATDzw==} @@ -3685,8 +3624,8 @@ packages: ee-first@1.1.1: resolution: {integrity: sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==} - electron-to-chromium@1.5.364: - resolution: {integrity: sha512-G/dYE3+AYhyHwzTwg8UbnXf7zqMERYh7l2jJ3QujhFsH8agSYwtnGAR2aZ7f0AakIKJXd5En/Hre4igIUrdlYw==} + electron-to-chromium@1.5.393: + resolution: {integrity: sha512-kiDJdIUawuEIcp9XoICKp1iTYDEbgguIPq526N1Q7jIQDeQ3CqoMx71025PI/7E48Ddtw2HuWsVjY7afEgNxmg==} emoji-regex@10.6.0: resolution: {integrity: sha512-toUI84YS5YmxW219erniWD0CIVOo46xGKColeNQRgOzDorgBi1v4D71/OFzgD9GO2UGKIv1C3Sp8DAn0+j5w7A==} @@ -3705,10 +3644,6 @@ packages: resolution: {integrity: sha512-Q0n9HRi4m6JuGIV1eFlmvJB7ZEVxu93IrMyiMsGC0lrMJMWzRgx6WGquyfQgZVb31vhGgXnfmPNNXmxnOkRBrg==} engines: {node: '>= 0.8'} - enhanced-resolve@5.22.1: - resolution: {integrity: sha512-6QEuw3zoX1SJQc7b87aBXke/no+mG2bTBgw29gWMQonLmpEkWoCAVkl+M49e48AZlWzxiDzDZzYdp6kobcyLww==} - engines: {node: '>=10.13.0'} - entities@4.5.0: resolution: {integrity: sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==} engines: {node: '>=0.12'} @@ -3731,8 +3666,8 @@ packages: resolution: {integrity: sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==} engines: {node: '>= 0.4'} - es-module-lexer@2.1.0: - resolution: {integrity: sha512-n27zTYMjYu1aj4MjCWzSP7G9r75utsaoc8m61weK+W8JMBGGQybd43GstCXZ3WNmSFtGT9wi59qQTW6mhTR5LQ==} + es-module-lexer@2.3.1: + resolution: {integrity: sha512-shc1dbU90Yl/xq1QrC7QRtfcwURZuVRfPhZbDoldJ1cn1gzDvBaBWlv0eFolj5+0znnPJz5TXLxsN77X/12KTA==} es-object-atoms@1.1.2: resolution: {integrity: sha512-HWcBoN6NileqtSydK2FqHbS/LoDd2pqrnQHLyJzBj4kOp/ky2MWMN694xOfkK8/SnUsW2DH7EfyVlydKCsm1Zw==} @@ -3748,13 +3683,8 @@ packages: engines: {node: '>=18'} hasBin: true - esbuild@0.27.7: - resolution: {integrity: sha512-IxpibTjyVnmrIQo5aqNpCgoACA/dTKLTlhMHihVHhdkxKyPO1uBBthumT0rdHmcsk9uMonIWS0m4FljWzILh3w==} - engines: {node: '>=18'} - hasBin: true - - esbuild@0.28.0: - resolution: {integrity: sha512-sNR9MHpXSUV/XB4zmsFKN+QgVG82Cc7+/aaxJ8Adi8hyOac+EXptIp45QBPaVyX3N70664wRbTcLTOemCAnyqw==} + esbuild@0.28.1: + resolution: {integrity: sha512-HrJrvZv5ayxBzPfwphOoNzkzOIIlifzk0KJrGK2c8R4+LKpMtpYLQeUdjnwjWv/LZlkH2laZk+4w78pi99D4Vw==} engines: {node: '>=18'} hasBin: true @@ -3765,10 +3695,6 @@ packages: escape-html@1.0.3: resolution: {integrity: sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==} - escape-string-regexp@1.0.5: - resolution: {integrity: sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==} - engines: {node: '>=0.8.0'} - escape-string-regexp@4.0.0: resolution: {integrity: sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==} engines: {node: '>=10'} @@ -3810,14 +3736,14 @@ packages: peerDependencies: eslint: '*' - eslint-plugin-import-lite@0.5.2: - resolution: {integrity: sha512-XvfdWOC5dSLEI9krIPRlNmKSI2ViIE9pVylzfV9fCq0ZpDaNeUk6o0wZv0OzN83QdadgXp1NsY0qjLINxwYCsw==} + eslint-plugin-import-lite@0.6.0: + resolution: {integrity: sha512-80vevx2A7i3H7n1/6pqDO8cc5wRz6OwLDvIyVl9UflBV1N1f46e9Ihzi65IOLYoSxM6YykK2fTw1xm0Ixx6aTQ==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: - eslint: '>=9.0.0' + eslint: ^9.0.0 || ^10.0.0 - eslint-plugin-import-x@4.16.2: - resolution: {integrity: sha512-rM9K8UBHcWKpzQzStn1YRN2T5NvdeIfSVoKu/lKF41znQXHAUcBbYXe5wd6GNjZjTrP7viQ49n1D83x/2gYgIw==} + eslint-plugin-import-x@4.17.1: + resolution: {integrity: sha512-4cdstYkKCyjumM2Q9NSI03K8D2a9F4Ssz33K2lv2hQa4KmR9jPLwk3uWGtNvclfqBrPGfGuMBwsGMbe6dMRbfg==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: '@typescript-eslint/utils': ^8.56.0 @@ -3829,26 +3755,26 @@ packages: eslint-import-resolver-node: optional: true - eslint-plugin-jsdoc@62.9.0: - resolution: {integrity: sha512-PY7/X4jrVgoIDncUmITlUqK546Ltmx/Pd4Hdsu4CvSjryQZJI2mEV4vrdMufyTetMiZ5taNSqvK//BTgVUlNkA==} - engines: {node: ^20.19.0 || ^22.13.0 || >=24} + eslint-plugin-jsdoc@63.2.0: + resolution: {integrity: sha512-tccz9igEV5mTKVAwo/KwXqKP7ENqa3a+LpRFuEPAP3k/+SXG4T0sOvA+c2wwTD/TLNrH9MCW4LIu4xEExkJdzg==} + engines: {node: ^22.13.0 || >=24} peerDependencies: eslint: ^7.0.0 || ^8.0.0 || ^9.0.0 || ^10.0.0 - eslint-plugin-regexp@3.1.0: - resolution: {integrity: sha512-qGXIC3DIKZHcK1H9A9+Byz9gmndY6TTSRkSMTZpNXdyCw2ObSehRgccJv35n9AdUakEjQp5VFNLas6BMXizCZg==} + eslint-plugin-regexp@3.1.1: + resolution: {integrity: sha512-MxR5nqoQCtVWmJwia0D2+NlXX1xzdpkslsVOZLEYQ4PQWEaL65PCZXURxaBc3lPnkNFpNxzMIRmYVxdl8giXRA==} engines: {node: ^20.19.0 || ^22.13.0 || >=24} peerDependencies: eslint: '>=9.38.0' - eslint-plugin-unicorn@63.0.0: - resolution: {integrity: sha512-Iqecl9118uQEXYh7adylgEmGfkn5es3/mlQTLLkd4pXkIk9CTGrAbeUux+YljSa2ohXCBmQQ0+Ej1kZaFgcfkA==} + eslint-plugin-unicorn@65.0.1: + resolution: {integrity: sha512-daCrQrgxOoOz2uMPWB3Y3vvv/5q+ncwICI8IjoebiwtW87CaY4tAN5EEiRXTYVnf7qi1v1BGBdHOSnZLV0rx6A==} engines: {node: ^20.10.0 || >=21.0.0} peerDependencies: eslint: '>=9.38.0' - eslint-plugin-vue@10.9.1: - resolution: {integrity: sha512-cHB0Tf4Duvzwecwd/AqWzZvF/QszE13BhjVUpVXWCy9AeMR5GjkAjP3i85vqgLgOuTmkHR1OJ5oMeqLHtuw8zg==} + eslint-plugin-vue@10.9.2: + resolution: {integrity: sha512-4g7ZP3pYcuqd7Zp0pzUKcos0W+RkjBz4EGdhJ92FcYk6v03Ti/GK5NwjgsjxHK+98eXDbHeK7VtX1az7/8doZA==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: '@stylistic/eslint-plugin': ^2.0.0 || ^3.0.0 || ^4.0.0 || ^5.0.0 @@ -3867,10 +3793,6 @@ packages: '@vue/compiler-sfc': ^3.3.0 eslint: '>=9.0.0' - eslint-scope@8.4.0: - resolution: {integrity: sha512-sNXOfKCn74rt8RICKMvJS7XKV/Xk9kA7DyJr8mJik3S7Cwgy3qlkkmyS2uQB3jiJg6VNdZd/pDBJu0nvG2NlTg==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - eslint-scope@9.1.2: resolution: {integrity: sha512-xS90H51cKw0jltxmvmHy2Iai1LIqrfbw57b79w/J7MfvDfkIkFZ+kj6zC3BjtUwh150HsSSdxXZcsuv72miDFQ==} engines: {node: ^20.19.0 || ^22.13.0 || >=24} @@ -3892,9 +3814,9 @@ packages: resolution: {integrity: sha512-tD40eHxA35h0PEIZNeIjkHoDR4YjjJp34biM0mDvplBe//mB+IHCqHDGV7pxF+7MklTvighcCPPZC7ynWyjdTA==} engines: {node: ^20.19.0 || ^22.13.0 || >=24} - eslint@9.39.4: - resolution: {integrity: sha512-XoMjdBOwe/esVgEvLmNsD3IRHkm7fbKIUGvrleloJXUZgDHig2IPWNniv+GwjyJXzuNqVjlr5+4yVUZjycJwfQ==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + eslint@10.7.0: + resolution: {integrity: sha512-GVTD7s1vdIl6UYvAfriOPeY1Df8LIZjfofLvHwde+erDHGGuHyuM6xoxRxmHiebhYuD2p1vN4wWh0XzPARSGDQ==} + engines: {node: ^20.19.0 || ^22.13.0 || >=24} hasBin: true peerDependencies: jiti: '*' @@ -3960,15 +3882,12 @@ packages: resolution: {integrity: sha512-VyhnebXciFV2DESc+p6B+y0LjSm0krU4OgJN44qFAhBY0TJ+1V61tYD2+wHusZ6F9n5K+vl8k0sTy7PEfV4qpg==} engines: {node: '>=16.17'} - expect-type@1.3.0: - resolution: {integrity: sha512-knvyeauYhqjOYvQ66MznSMs83wmHrCycNEN6Ao+2AeYEfxUIkuiVxdEa1qlGEPK+We3n0THiDciYSsCcgW/DoA==} + expect-type@1.4.0: + resolution: {integrity: sha512-KfYbmpRm0VbLjEvVa9yGwCi9GI34xvi7A/HXYWQO65CSD2u3MczUJSuwXKFIxlGsgBQizV9q5J9NHj4VG0n+pA==} engines: {node: '>=12.0.0'} - exsolve@1.0.8: - resolution: {integrity: sha512-LmDxfWXwcTArk8fUEnOfSZpHOJ6zOMUJKOtFLFqJLoKJetuQG874Uc7/Kki7zFLzYybmZhp1M7+98pfMqeX8yA==} - - externality@1.0.2: - resolution: {integrity: sha512-LyExtJWKxtgVzmgtEHyQtLFpw1KFhQphF9nTG8TpAIVkiI/xQ3FJh75tRFLYl4hkn7BNIIdLJInuDAavX35pMw==} + exsolve@1.1.0: + resolution: {integrity: sha512-D+42+T12DdIlJM3uepa55qGiL3sYdLBOxIl2ifQCzCHz4c7eiolaHsi3BIqEr7JxBzxv2pYZQX9kw16ziMcEmw==} fake-indexeddb@6.2.5: resolution: {integrity: sha512-CGnyrvbhPlWYMngksqrSSUT1BAVP49dZocrHuK0SvtR0D5TMs5wP0o3j7jexDJW01KSadjBp1M/71o/KR3nD1w==} @@ -4057,6 +3976,9 @@ packages: flatted@3.4.2: resolution: {integrity: sha512-PjDse7RzhcPkIJwy5t7KPWQSZ9cAbzQXcafsetQoD7sOJRQlGikNbx7yZp2OotDnJyrDcbyRq3Ttb18iYOqkxA==} + fnv1a-64@0.1.1: + resolution: {integrity: sha512-qMpkqWyaiNxwYG7Dt40Bxtp2wV6KW/1woXVJOEvR1KA2ffsZf8pyvlNwJgFHha3teh8iC3d4arvrJ0qTcU445A==} + foreground-child@3.3.1: resolution: {integrity: sha512-gIXjKqtFuWEgzFRJA9WCQeSJLZDjgJUOMCMzxtvFq/37KojM1BFGufqsCy0r4qSQmYLsZYMeyRqzIWOMup03sw==} engines: {node: '>=14'} @@ -4091,8 +4013,8 @@ packages: resolution: {integrity: sha512-0NVVC0TaP7dSTvn1yMiy6d6Q8gifzbvQafO46RtLG/kHJUBNd+pVRGOBoK44wNBvtSPUJRfdVvkFdD3p0xvyZg==} engines: {node: '>=14.16'} - fuse.js@7.4.0: - resolution: {integrity: sha512-3UqmoSFwzX1sNB1YSk+Co0EdH29XCW2p9g48OAiy93cjKqzuABsqw2VIgSN3CmsT/wo6pIJ3F0Jxeiiby8rhIQ==} + fuse.js@7.5.0: + resolution: {integrity: sha512-sQtrEfA+ez/3G0cCZecF70oqpCRttCexYUG4mUrtWL49ULUzUyxokt5kyqwtKzj1270RaKih+hcP3qLcumccow==} engines: {node: '>=10'} fzf@0.5.2: @@ -4132,8 +4054,8 @@ packages: get-tsconfig@4.14.0: resolution: {integrity: sha512-yTb+8DXzDREzgvYmh6s9vHsSVCHeC0G3PI5bEXNBHtmshPnO+S5O7qgLEOn0I5QvMy6kpZN8K1NKGyilLb93wA==} - giget@3.2.0: - resolution: {integrity: sha512-GvHTWcykIR/fP8cj8dMpuMMkvaeJfPvYnhq0oW+chSeIr+ldX21ifU2Ms6KBoyKZQZmVaUAAhQ2EZ68KJF8a7A==} + giget@3.3.0: + resolution: {integrity: sha512-gzi2D96p+AMfDcmJHGDj3KJ9NRiwvlFAU5yfa3ROwWZmFUjX4P43x3BcyRaOMMLto1vUo7C+86+MFhYTl6Ryiw==} hasBin: true glob-parent@5.1.2: @@ -4161,20 +4083,12 @@ packages: resolution: {integrity: sha512-wHTUcDUoZ1H5/0iVqEudYW4/kAlN5cZ3j/bXn0Dpbizl9iaUVeWSHqiOjsgk6OW2bkLclbBjzewBz6weQ1zA2Q==} engines: {node: '>=18'} - globals@14.0.0: - resolution: {integrity: sha512-oahGvuMGQlPw/ivIYBjVSrWAfWLBeku5tpPE2fOPLi+WHffIWbuh2tCjhyQhTBPMf5E9jDEH4FOmTYgYwbKwtQ==} + globals@17.7.0: + resolution: {integrity: sha512-Czmyns5dUsq4seFBR/Kdydhmo8y9kC79hiSkPn0YcGtNnYWnrgt0vjrSjx9tspoDGWm2CMarffRuLjM4xUz8xg==} engines: {node: '>=18'} - globals@16.5.0: - resolution: {integrity: sha512-c/c15i26VrJ4IRt5Z89DnIzCGDn9EcebibhAOjw5ibqEHsE1wLUgkPn9RDmNcUKyU87GeaL633nyJ+pplFR2ZQ==} - engines: {node: '>=18'} - - globals@17.6.0: - resolution: {integrity: sha512-sepffkT8stwnIYbsMBpoCHJuJM5l98FUF2AnE07hfvE0m/qp3R586hw4jF4uadbhvg1ooIdzuu7CsfD2jzCaNA==} - engines: {node: '>=18'} - - globby@16.2.0: - resolution: {integrity: sha512-QrJia2qDf5BB/V6HYlDTs0I0lBahyjLzpGQg3KT7FnCdTonAyPy2RtY802m2k4ALx6Dp752f82WsOczEVr3l6Q==} + globby@16.2.2: + resolution: {integrity: sha512-NLvV9ubZ6NDsJaOpKPy3cQeJpKi9DcWiyCiFUpJPA0YihRqiE6RWaLUmgNNPr8MgPpLZjnBjSmou7uZBRJv9wA==} engines: {node: '>=20'} gopd@1.2.0: @@ -4201,6 +4115,16 @@ packages: crossws: optional: true + h3@2.0.1-rc.22: + resolution: {integrity: sha512-Esv0DMIuPkCTSWCA0vO73vcTqwzH1wjSrAO1TXNu/K3up1sZHa9EKMapbmxCDYBeymC3fVTk4qxp7ogQWQ+KgA==} + engines: {node: '>=20.11.1'} + hasBin: true + peerDependencies: + crossws: ^0.4.1 + peerDependenciesMeta: + crossws: + optional: true + has-flag@4.0.0: resolution: {integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==} engines: {node: '>=8'} @@ -4253,8 +4177,8 @@ packages: resolution: {integrity: sha512-vK9P5/iUfdl95AI+JVyUuIcVtd4ofvtrOr3HNtM2yxC9bnMbEdp3x01OhQNnjb8IJYi38VlTE3mBXwcfvywuSw==} engines: {node: '>= 14'} - httpxy@0.5.3: - resolution: {integrity: sha512-SMS9V6Sn7VWaS11lYhoAr0ceoaiolTWf4jYdJn0NJhCdKMu9R2H9Fh0LBDWBHQF6HRLI1PmaePYsjanSpE5PEw==} + httpxy@0.5.5: + resolution: {integrity: sha512-uDjmnPyp1q4Sgzf3w+J/Fc6UqcCEj0x4Wjp7OqK5dGhNeDgpyrAmnS6ey8QWrX3SWDon2DMKf9sBa5X9+CVyMA==} human-signals@5.0.0: resolution: {integrity: sha512-AXcZb6vzzrFAUE61HnN4mpLqd/cSIwNQjtNWR0euPm6y0iqx3G4gOXaIDdtdDwZmhwe82LA6+zinmW4UBWVePQ==} @@ -4267,17 +4191,13 @@ packages: resolution: {integrity: sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==} engines: {node: '>= 4'} - ignore@7.0.5: - resolution: {integrity: sha512-Hs59xBNfUIunMFgWAbGX5cq6893IbWg4KnrjbYwX3tx0ztorVgTDA6B2sxf8ejHJ4wz8BqGUMYlnzNBer5NvGg==} + ignore@7.0.6: + resolution: {integrity: sha512-BAg6QkE8W+TuQLrrw0Ugr7HegXduRuuj8/ti2kSOc+jz1dmx8/WNcjr6XGnq5YpDWxFwwaavqD0+jIUOKelTsw==} engines: {node: '>= 4'} image-meta@0.2.2: resolution: {integrity: sha512-3MOLanc3sb3LNGWQl1RlQlNWURE5g32aUphrDyFeCsxBTk08iE3VNe4CwsUZ0Qs1X+EfX0+r29Sxdpza4B+yRA==} - import-fresh@3.3.1: - resolution: {integrity: sha512-TR3KfrTZTYLPB6jUjfx6MF9WcWrHL9su5TObK4ZkYgBdWKPOFoSoQIdEuTuR82pmtxH2spWG9h6etwfr1pLBqQ==} - engines: {node: '>=6'} - impound@1.1.5: resolution: {integrity: sha512-5AUn+QE0UofqNHu5f2Skf6Svukdg4ehOIq8O0EtqIx4jta0CDZYBPqpIHt0zrlUTiFVYlLpeH39DoikXBjPKpA==} @@ -4303,12 +4223,12 @@ packages: resolution: {integrity: sha512-QQnnxNyfvmHFIsj7gkPcYymR8Jdw/o7mp5ZFihxn6h8Ci6fh3Dx4E1gPjpQEpIuPo9XVNY/ZUwh4BPMjGyL01g==} engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} - ioredis@5.11.0: - resolution: {integrity: sha512-EZBErytyVovD8f6pDfG3Kb37N6Y3lmDA9NNj+4+IP13CzzHGeX+OyeRM2Um13khRzoBSzzL+5lVnCX8V2RLeMg==} + ioredis@5.11.1: + resolution: {integrity: sha512-ehuGcf94bQXhfagULNXrJdfnWO38v070jxSx/qE87Kjzmu2fU7ro5EFAb+OPituLqgfyuQaym5DlrNydW2sJ9A==} engines: {node: '>=12.22.0'} - ip-bigint@9.0.5: - resolution: {integrity: sha512-C+wkW87nNsb6lmOG6mIuZFwosx+vRN7AMypCG3q0zDoqwQqQkhOff5/CWzwaV4o+4VsFae8S2GEf021cNIbYpQ==} + ip-bigint@9.0.6: + resolution: {integrity: sha512-dpEy7cSzYM9JsL6Ai9KGO0eCKALRtbYCb57Nfc8/kflSyBakf1Orb6/8u+NDlhS+7THbjrOfY52z9PnJXh/mWA==} engines: {node: '>=22'} ip-regex@5.0.0: @@ -4407,10 +4327,6 @@ packages: resolution: {integrity: sha512-LnQR4bZ9IADDRSkvpqMGvt/tEJWclzklNgSw48V5EAaAeDd6qGvN8ei6k5p0tvxSR171VmGyHuTiAOfxAbr8kA==} engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} - is-what@5.5.0: - resolution: {integrity: sha512-oG7cgbmg5kLYae2N5IVd3jm2s+vldjxJzK1pcu9LfpGuQ93MQSzo0okvRna+7y5ifrD+20FE8FvjusyGaz14fw==} - engines: {node: '>=18'} - is-wsl@2.2.0: resolution: {integrity: sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==} engines: {node: '>=8'} @@ -4452,11 +4368,14 @@ packages: resolution: {integrity: sha512-AC/7JofJvZGrrneWNaEnJeOLUx+JlGt7tNa0wZiRPT4MY1wmfKjt2+6O2p2uz2+skll8OZZmJMNqeke7kKbNgQ==} hasBin: true - js-base64@3.7.8: - resolution: {integrity: sha512-hNngCeKxIUQiEUN3GPJOkz4wF/YvdUdbNL9hsBcMQTkKzboD7T/q3OYOuuPZLUE6dBxSGpwhk5mwuDud7JVAow==} + jose@6.2.3: + resolution: {integrity: sha512-YYVDInQKFJfR/xa3ojUTl8c2KoTwiL1R5Wg9YCydwH0x0B9grbzlg5HC7mMjCtUJjbQ/YnGEZIhI5tCgfTb4Hw==} - js-sha256@0.11.1: - resolution: {integrity: sha512-o6WSo/LUvY2uC4j7mO50a2ms7E/EAdbP0swigLV+nzHKTTaYnaLIWJ02VdXrsJX0vGedDESQnLsOekr94ryfjg==} + js-base64@3.9.1: + resolution: {integrity: sha512-U73qptcvf/HIOauFOmqT3a0mDUp0MYlfd15oqoe9kqZt5XhiXVb+HG09sLvI9PQ9tZIBFS4nlErai8zbWazP0g==} + + js-sha256@0.12.0: + resolution: {integrity: sha512-P2IyTRMIHCkLD9clcQST8wGP/wqOXjvDD7E3onloE/5LSQGscyrmk2Loa069YsdtLfQWN1EnMDiaomAs9AfP4w==} js-tokens@10.0.0: resolution: {integrity: sha512-lM/UBzQmfJRo9ABXbPWemivdCW8V2G8FHaHdypQaIy523snUjog0W71ayWXTjiR+ixeMyVHN2XcpnTd/liPg/Q==} @@ -4467,8 +4386,8 @@ packages: js-tokens@9.0.1: resolution: {integrity: sha512-mxa9E9ITFOt0ban3j6L5MpjwegGz6lBQmM1IJkWeBZGcMxto50+eWdjC/52xDbS2vy0k7vIMK0Fe2wfL9OQSpQ==} - js-yaml@4.1.1: - resolution: {integrity: sha512-qQKT4zQxXl8lLwBtHMWwaTcGfFOZviOJet3Oy/xmGk2gZH677CJM9EvtfdSkgWcATZhj/55JZ0rmy3myCT5lsA==} + js-yaml@4.3.0: + resolution: {integrity: sha512-1td788aAnnZ5qs7V2QIRl1owjtYpbKt749Y3xauqQgwIIGF/xXWz1wMTEBx5O3LK3lXLVuqXPdPxj2BoFHaW9Q==} hasBin: true jsdoc-type-pratt-parser@7.2.0: @@ -4541,8 +4460,8 @@ packages: resolution: {integrity: sha512-3An0GCLDSR34tsCO4H8Tef8Pp2ngtaZDAZnsWJYelqXUK5wyiHvGItgK/xcSkmHLSTn1Jcho1mRQs2ehRzvKKw==} engines: {node: ^4.8.4 || ^6.10.1 || ^7.10.1 || >= 8.1.4} - launch-editor@2.14.0: - resolution: {integrity: sha512-Pj3ZOx9dD1BClS7YcSQx0An1PCF9wz4JpvbEmKvDxQtm0jxlkk5NhW8x0SBAKA/acHBKZaqdd5FFOWlXo500JA==} + launch-editor@2.14.1: + resolution: {integrity: sha512-QWBrQsMpH7gPr965dsKD/3cKWiNoTjpATQf++Xq63N6sKRGMwlVXz41O1IZTMfZQgBctD/K5Zt06+/I6pP6+HA==} lazystream@1.0.1: resolution: {integrity: sha512-b94GiNHQNy6JNTrt5w6zNyffMrNkXZb3KTkCZJb2V1xaEGCk093vkZ2jk3tpaeP33/OiXC+WvK9AxUebnf5nbw==} @@ -4557,6 +4476,80 @@ packages: cpu: [x64, arm64, wasm32, arm] os: [darwin, linux, win32] + lightningcss-android-arm64@1.33.0: + resolution: {integrity: sha512-gEpRTalKdosp4Bb8qWtc2iOgE5SeIHlpS1up9bFq2wAyYhl1UdTObYiHe98zEM9SQvSoqQZ1IQD0JNpg3Ml5pg==} + engines: {node: '>= 12.0.0'} + cpu: [arm64] + os: [android] + + lightningcss-darwin-arm64@1.33.0: + resolution: {integrity: sha512-Sciaz8eenNTKn9b3t7+xr0ipTp9YxKQY4npwQ3mrRuL0BAVHBLyZxofhaKBAVtzmtRZ/zTyo0/to4B1uWG/Djg==} + engines: {node: '>= 12.0.0'} + cpu: [arm64] + os: [darwin] + + lightningcss-darwin-x64@1.33.0: + resolution: {integrity: sha512-Z5UPAxzrjlWNNyGy6i65cJzzvgJ5D3T6wMvs+gWpY9d7qRhANrxqAp6LhxIgZhWEw18RfJTGcRxjuLIBr+m8XQ==} + engines: {node: '>= 12.0.0'} + cpu: [x64] + os: [darwin] + + lightningcss-freebsd-x64@1.33.0: + resolution: {integrity: sha512-QQM/Ti/hQajJwCY+RiWuCZ9sdtI/XQk7nDK5vC8kkdwixezOlDgvDx7+RT+QjK6FcFT4MpsuoBnHIo/O3StRRg==} + engines: {node: '>= 12.0.0'} + cpu: [x64] + os: [freebsd] + + lightningcss-linux-arm-gnueabihf@1.33.0: + resolution: {integrity: sha512-N7FVBe6iS24MlM6R/4RBTxGhQheZGs7tiQ9U32UtF75NzP5Q7xWPRqLBCKxlRQRk3rY1jCIPLzx7WzOhuUIRLQ==} + engines: {node: '>= 12.0.0'} + cpu: [arm] + os: [linux] + + lightningcss-linux-arm64-gnu@1.33.0: + resolution: {integrity: sha512-j2v/itmy4HlNxlc6voKXYgBqNi0Ng2LShg4z7GufpEgs05P+2suBVyi9I6YHq5uoVFx9ETin3eCEhLVyXGQnKg==} + engines: {node: '>= 12.0.0'} + cpu: [arm64] + os: [linux] + libc: [glibc] + + lightningcss-linux-arm64-musl@1.33.0: + resolution: {integrity: sha512-yiO5ROMuYQgXbC60yjZU5CYSFZGKXL0HFATXt9mHJn1+zW55oCtMI9NfcVhYLMFDL7gV7oBPon/EmMMGg2OvtQ==} + engines: {node: '>= 12.0.0'} + cpu: [arm64] + os: [linux] + libc: [musl] + + lightningcss-linux-x64-gnu@1.33.0: + resolution: {integrity: sha512-ar+Ju7LmcN0Jo4FpL4hpFybwNG9/3A/Br5KW2n2jyODg3MEZXaDYADdemoNS+BDNfMgKvylJLj4S5tyRActuAg==} + engines: {node: '>= 12.0.0'} + cpu: [x64] + os: [linux] + libc: [glibc] + + lightningcss-linux-x64-musl@1.33.0: + resolution: {integrity: sha512-RYiYbkokw0trfKqqzfF55lginwEPrD3OJDfTuJzFs1MK6iFnDenaz1fqLLtX4ITG3OktJQXOeTaw1awrBAlZPw==} + engines: {node: '>= 12.0.0'} + cpu: [x64] + os: [linux] + libc: [musl] + + lightningcss-win32-arm64-msvc@1.33.0: + resolution: {integrity: sha512-1K+MPfLSFVpphzpdbfkhlWk6wBrTObBzS2T6db10PNOZgR9GoVsAWzwNyuhUYYbTp23j+4RrncfujZ4uAzXvwA==} + engines: {node: '>= 12.0.0'} + cpu: [arm64] + os: [win32] + + lightningcss-win32-x64-msvc@1.33.0: + resolution: {integrity: sha512-OlEICDx/Xl0FqSp4bry8zFnCvGpig3Gl4gCquvYwHuqJKEC1+n9NgDniFvqHGmMv1ZkqDJrDqKKSykTDX+ehuA==} + engines: {node: '>= 12.0.0'} + cpu: [x64] + os: [win32] + + lightningcss@1.33.0: + resolution: {integrity: sha512-WkUDrojuJs0xkgGf2udWxa3yGBRxPtxUkB79i6aCZLRgc7PM8fZe9TosfPDcvEpQZbuFASnHYmRLBLUbmLOIIA==} + engines: {node: '>= 12.0.0'} + lilconfig@3.1.3: resolution: {integrity: sha512-/vlFKAoH5Cgt3Ie+JLhRbwOsCQePABiU3tJ1egGvyQ+33R/vcwM2Zl2QR/LzjsBeItPt3oSVXapn+m4nQDvpzw==} engines: {node: '>=14'} @@ -4568,10 +4561,6 @@ packages: resolution: {integrity: sha512-kfz4C0OrC6IpaVMtYDJtf6PFjurxe9NBBoDAh/o2p587INryFOO4DQ9OetbCdDrWFt1m1CJKvYrzkGsuPHw8nQ==} hasBin: true - load-tsconfig@0.2.5: - resolution: {integrity: sha512-IXO6OCs9yg8tMKzfPZ1YmheJbZCiEsnBdcB03l0OcfK9prKnJb96siuHCr5Fl37/yo9DnKU+TLpxzTUspw9shg==} - engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} - local-pkg@1.2.1: resolution: {integrity: sha512-++gUqRDEvcnN6Zhqrr+y/CkVEHhlrR96vZn3nZZPYzMcBUyBtTKzB9NadClFIsIVSsu+3i9tfk/erqy9kAmt7Q==} engines: {node: '>=14'} @@ -4584,23 +4573,14 @@ packages: resolution: {integrity: sha512-XT9ewWAC43tiAV7xDAPflMkG0qOPn2QjHqlgX8FOqmWa/rxnyYDulF9T0F7tRy1u+TVTmK/M//6VIOye+2zDXg==} engines: {node: '>=20'} - lodash.memoize@4.1.2: - resolution: {integrity: sha512-t7j+NzmgnQzTAYXcsHYLgimltOV1MXHtlOWf6GjL9Kj8GK5FInw5JotxvbOs+IvV1/Dzo04/fCGfLVs7aXb4Ag==} - - lodash.merge@4.6.2: - resolution: {integrity: sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==} - - lodash.uniq@4.5.0: - resolution: {integrity: sha512-xfBaXQd9ryd9dlSDvnvI0lvxfLJlYAZzXomUYzLKtUeOQvOP5piqAWuGtrhWeqaXK9hhoM/iyJc5AV+XfsX3HQ==} - lodash@4.18.1: resolution: {integrity: sha512-dMInicTPVE8d1e5otfwmmjlxkZoUpiVLwyeTdUsi/Caj/gfzzblBcCE5sRHV/AsjuCmxWrte2TNGSYuCeCq+0Q==} lru-cache@10.4.3: resolution: {integrity: sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==} - lru-cache@11.5.1: - resolution: {integrity: sha512-RPimw/7aMdv2oqRrxKwvZXcPfwBrn/JZ2xYcY9Hus/6LaS3VOAKVWKWgNLCFSiOm1ESXinjsDlidVU7JlnCN2A==} + lru-cache@11.5.2: + resolution: {integrity: sha512-4pfM1Ff0x50o0tQwb5ucw/RzNyD0/YJME6IVcStalZuMWxdt3sR3huStTtxz4PUmvZfRguvDejasvQ2kifR11g==} engines: {node: 20 || >=22} lru-cache@5.1.1: @@ -4619,6 +4599,9 @@ packages: magic-string@0.30.21: resolution: {integrity: sha512-vd2F4YUyEXKGcLHoq+TEyCjxueSeHnFxyyjNp80yg0XV4vUhnDer/lvvlqM/arB5bXQN5K2/3oinyCRyx8T2CQ==} + magic-string@1.0.0: + resolution: {integrity: sha512-CGvjzMN08iv6w1mm4/x3Gh1hLb4VnyRUA15FFpl6CsCIGGoe36k7kY5KNz9QDbSBN5I/fWHM6ZlIkUTa5xdUEA==} + magicast@0.5.3: resolution: {integrity: sha512-pVKE4UdSQ7DvHzivsCIFx2BJn1mHG6KsyrFcaxFx6tONdneEuThrDx0Cj3AMg58KyN4pzYT+LHOotxDQDjNvkw==} @@ -4707,9 +4690,6 @@ packages: resolution: {integrity: sha512-KZxYo1BUkWD2TVFLr0MQoM8vUUigWD3LlD83a/75BqC+4qE0Hb1Vo5v1FgcfaNXvfXzr+5EhQ6ing/CaBijTlw==} engines: {node: '>= 18'} - mitt@3.0.1: - resolution: {integrity: sha512-vKivATfr97l2/QBCYAkXYDbrIWPM2IIKEl7YPhjCvKlG3kE2gm+uBo6nEXK3M5/Ffh/FLpKExzOQ3JJoJGFKBw==} - mlly@1.8.2: resolution: {integrity: sha512-d+ObxMQFmbt10sretNDytwt85VrbkhhUA/JBGm1MPaWJ65Cl4wOgLaB1NYvJSZ0Ef03MMEU/0xpPMXUIQ29UfA==} @@ -4729,13 +4709,13 @@ packages: mz@2.7.0: resolution: {integrity: sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q==} - nanoid@3.3.12: - resolution: {integrity: sha512-ZB9RH/39qpq5Vu6Y+NmUaFhQR6pp+M2Xt76XBnEwDaGcVAqhlvxrl3B2bKS5D3NH3QR76v3aSrKaF/Kiy7lEtQ==} + nanoid@3.3.16: + resolution: {integrity: sha512-bzlKTyNJ7+LdGIIwy8ijFpIqEQIvafahV7eYykJ8Cvh42EdJeODoJ6gUJXpQJvej1BddH8OqTXZNE/KfbWAu8Q==} engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} hasBin: true - nanoid@5.1.11: - resolution: {integrity: sha512-v+KEsUv2ps74PaSKv0gHTxTCgMXOIfBEbaqa6w6ISIGC7ZsvHN4N9oJ8d4cmf0n5oTzQz2SLmThbQWhjd/8eKg==} + nanoid@5.1.16: + resolution: {integrity: sha512-kVrnsrJqMR8+oLJnGEmSWw9BivK5mt7H3FZatVRjrc5wGqFYuBxX1yG7+A7Gi5AefkX6t/oCkizcQgpu0cY1dQ==} engines: {node: ^18 || >=20} hasBin: true @@ -4767,8 +4747,8 @@ packages: node-addon-api@7.1.1: resolution: {integrity: sha512-5m3bsyrjFWE1xf7nz7YXdN4udnVtXK6/Yfgn5qnahL6bCkf2yKt4k3nuTKAtT4r3IG8JNR2ncsIMdZuAzJjHQQ==} - node-addon-api@8.8.0: - resolution: {integrity: sha512-c5Ko1fZJIJmzhFIkhRN76WTq+fC6tWnGy9CXA0fA+XygsWZmEwG8vmbkNqxMyoaa0Tin4djul49NzdVcJJcjeA==} + node-addon-api@8.9.0: + resolution: {integrity: sha512-ekZMeaaIzSQTSpr7X2X3iJM7lTzgnx8ahAG9pJfT/7+14mlEM8ZYQ9cgCDvSSRbReFK0oHli3WrZdCiRsgAT9Q==} engines: {node: ^18 || ^20 || >= 21} node-fetch-native@1.6.7: @@ -4794,8 +4774,8 @@ packages: node-mock-http@1.0.4: resolution: {integrity: sha512-8DY+kFsDkNXy1sJglUfuODx1/opAGJGyrTuFqEoN90oRc2Vk0ZbD4K2qmKXBBEhZQzdKHIVfEJpDU8Ak2NJEvQ==} - node-releases@2.0.46: - resolution: {integrity: sha512-GYVXHE2KnrzAfsAjl4uP++evGFCrAU1jta4ubEjIG7YWt/64Gqv66a30yKwWczVjA6j3bM4nBwH7Pk1JmDHaxQ==} + node-releases@2.0.51: + resolution: {integrity: sha512-wRNIrw4DmVLKQlbgOMdkMx27Wrpzes2hh5Jtbi2bjPd+4wJstWIqP5A+lscnqbm0xxmT5Bpg8Lec5ItEBwx6BQ==} engines: {node: '>=18'} nopt@8.1.0: @@ -4807,6 +4787,12 @@ packages: resolution: {integrity: sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==} engines: {node: '>=0.10.0'} + nostics@0.2.0: + resolution: {integrity: sha512-/WQpI46UMbqvy1okYb+V+9wW3J8/m6GJ33wm691n/tyi6YtJiZ6ssJjENAU7y4evfYrrgYN9HllKDzPvffil1w==} + + nostics@1.2.0: + resolution: {integrity: sha512-FGqEfhQjrvo1lL8KFifdTQiNwwQHJxC1jtYE1Rc54qF/jxONUNL+kC9gS1krX8Q65PgrQ5fCqH/I4NhWBvdSqg==} + npm-run-path@5.3.0: resolution: {integrity: sha512-ppwTtiJZq0O/ai0z7yfudtBpWIoxM8yE6nHi1X47eFR2EWORqfbu6CnPlNsjeN683eT0qG6H/Pyf9fCcvjnnnQ==} engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} @@ -4821,24 +4807,27 @@ packages: nuxt-define@1.0.0: resolution: {integrity: sha512-CYZ2WjU+KCyCDVzjYUM4eEpMF0rkPmkpiFrybTqqQCRpUbPt2h3snswWIpFPXTi+osRCY6Og0W/XLAQgDL4FfQ==} - nuxt@3.21.6: - resolution: {integrity: sha512-jIs488icdWIzzwTQYa4J2WmbhDlBcVDPGc7LBTxezaHwf8C5LKnWZvBkFqREQ8UjMQe5KBnA98pFRUqT6ZDPYA==} - engines: {node: ^20.19.0 || >=22.12.0} + nuxt@4.5.0: + resolution: {integrity: sha512-MbMAQFR9q8sDf80mp0v1sLtPuFDviSw7ntcBHPP0ok9phpirRy19NM9aDNRI6/12hU646BurrE0zCFJK0pq7NA==} + engines: {node: ^22.19.0 || ^24.11.0 || >=26.0.0} hasBin: true peerDependencies: '@parcel/watcher': ^2.1.0 - '@types/node': ^18.0.0 || ^20.0.0 || >=22.0.0 + '@types/node': '>=18.12.0' peerDependenciesMeta: '@parcel/watcher': optional: true '@types/node': optional: true - nypm@0.6.6: - resolution: {integrity: sha512-vRyr0r4cbBapw07Xw8xrj9Teq3o7MUD35rSaTcanDbW+aK2XHDgJFiU6ZTj2GBw7Q12ysdsyFss+Vdz4hQ0Y6Q==} + nypm@0.6.8: + resolution: {integrity: sha512-Q9K4Diu6l5u6xJQogeFSs/zKtyMSgFKFtRQV+tHP4kL7KPm2grpBU0dFIwFaXwNxN0MtfKWc43VpCugAa+LPsw==} engines: {node: '>=18'} hasBin: true + oauth4webapi@3.8.6: + resolution: {integrity: sha512-iwemM91xz8nryHti2yTmg5fhyEMVOkOXwHNqbvcATjyajb5oQxCQzrNOA6uElRHuMhQQTKUyFKV9y/CNyg25BQ==} + object-assign@4.1.1: resolution: {integrity: sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==} engines: {node: '>=0.10.0'} @@ -4850,8 +4839,12 @@ packages: resolution: {integrity: sha512-RSn9F68PjH9HqtltsSnqYC1XXoWe9Bju5+213R98cNGttag9q9yAOTzdbsqvIa7aNm5WffBZFpWYr2aWrklWAw==} engines: {node: '>= 6'} - obug@2.1.1: - resolution: {integrity: sha512-uTqF9MuPraAQ+IsnPf366RG4cP9RtUi7MLO1N3KEc+wb0a6yKpeL0lmk2IB1jY5KHPAlTc6T/JRdC/YqxHNwkQ==} + object-identity@0.2.3: + resolution: {integrity: sha512-2J8Joz2Tf7aaylhqFvIUJHNgpuGR38Hh75Voq9GzTbStBxJUaOtN0K1aOd3cV5qp+ij1pMqRbPrGCGMOyX303w==} + + obug@2.1.4: + resolution: {integrity: sha512-4a+OsYv9UktOJKE+l1A4OufDgdRF9PifWj+tJnHURo/P+WOxpG4GzUFL9qCalmWauao6ogiG+QvnCovwPoyAWA==} + engines: {node: '>=12.20.0'} ofetch@1.5.1: resolution: {integrity: sha512-2W4oUZlVaqAPAil6FUg/difl6YhqhUR7x2eZY4bQCko22UXg3hptq9KLQdqFClV+Wu85UX7hNtdGTngi/1BxcA==} @@ -4888,6 +4881,9 @@ packages: resolution: {integrity: sha512-MVHddDVweXZF3awtlAS+6pgKLlm/JgxZ90+/NBurBoQctVOOB/zDdVjcyPzQ+0laDGbsWgrRkflI65sQeOgT9Q==} engines: {node: '>=8'} + openid-client@6.8.4: + resolution: {integrity: sha512-QSw0BA08piujetEwfZsHoTrDpMEha7GDZDicQqVwX4u0ChCjefvjDB++TZ8BTg76UpwhzIQgdvvfgfl3HpCSAw==} + optionator@0.9.4: resolution: {integrity: sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==} engines: {node: '>= 0.8.0'} @@ -4895,26 +4891,22 @@ packages: otpauth@9.5.1: resolution: {integrity: sha512-fJmDAHc8wImfqqqOXIlBvT1dEKrZK0Cmb2VEgScpNTolCz0PHh6ExUZGv4sLtOsWNaHCQlD+rRqaPgnoxFoZjQ==} - oxc-minify@0.131.0: - resolution: {integrity: sha512-Ch0sBbrqZpeNZUMhVDbU2yrTWTVrUT/MkXb9E2DAc+hbhxbbO8D/XklUtfPP86/iqrkvl178+YQvh5u8Of1mUg==} - engines: {node: ^20.19.0 || >=22.12.0} - oxc-parser@0.128.0: resolution: {integrity: sha512-XkOw3eiIxAgQ19WRew/Bq9wc5Ga/guaWIzDBzq80z1PyuDNGvWBpPby9k6YGwV8A8uMw+Nlq3xqlzuDYmUFYUw==} engines: {node: ^20.19.0 || >=22.12.0} - oxc-parser@0.131.0: - resolution: {integrity: sha512-SJ3/7ZPbgie8dr5Z9BI/M51zZbpXba+hRSG0MDzVwMW5CRQg2fjYE0jHGlLX4eeiibGgC/mzoDFKSDHwVZEHRQ==} + oxc-parser@0.132.0: + resolution: {integrity: sha512-+0LAPHaqtfQlvWdpaAa09SmOaZZgP8C552xosEkGJ4+ruEwP1Vgx+sqBgcBCNfR6KDCmagGOZTde8wmAvcI/Hg==} + engines: {node: ^20.19.0 || >=22.12.0} + + oxc-parser@0.140.0: + resolution: {integrity: sha512-h6QFWd6lBMfjESqgQ27GjzrSDb0qbznp7VDQqp2zvgsrWut4vcchyMIzOVXvGQ2GMZgKw9RWrFNWv9WqGL0p7Q==} engines: {node: ^20.19.0 || >=22.12.0} oxc-transform@0.128.0: resolution: {integrity: sha512-8DfEHlmUiLOHlCK9DGX+d5tORc1xwPPvoRSHSJCYgLHyGjKp4PvfBrvgi59DkEW0SMOWfO8GL9t+R7vdKtupbg==} engines: {node: ^20.19.0 || >=22.12.0} - oxc-transform@0.131.0: - resolution: {integrity: sha512-ml0/elXPNnDnuHo3VHmEMN2fnybmKx7YL+0E+gMQ0fuHRZHXYJzF6YJ01KsCWg6FXY6pbZcjm7DC3xwGHnB/BA==} - engines: {node: ^20.19.0 || >=22.12.0} - oxc-walker@0.7.0: resolution: {integrity: sha512-54B4KUhrzbzc4sKvKwVYm7E2PgeROpGba0/2nlNZMqfDyca+yOor5IMb4WLGBatGDT0nkzYdYuzylg7n3YfB7A==} peerDependencies: @@ -4950,12 +4942,8 @@ packages: package-json-from-dist@1.0.1: resolution: {integrity: sha512-UEZIS3/by4OC8vL3P2dTXRETpebLI2NiI5vIrjaD/5UtrkFX/tNbwjTSRAGC/+7CAo2pIcBaRgWmcBBHcsaCIw==} - package-manager-detector@1.6.0: - resolution: {integrity: sha512-61A5ThoTiDG/C8s8UMZwSorAGwMJ0ERVGj2OjoW5pAalsNOg15+iQiPzrLJ4jhZ1HJzmC2PIHT2oEiH3R5fzNA==} - - parent-module@1.0.1: - resolution: {integrity: sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==} - engines: {node: '>=6'} + package-manager-detector@1.7.0: + resolution: {integrity: sha512-xg1eHpwYL/D/HEdWw2goFZP6vV0FH7W+PZ5rFkGjdIDLtxq7EkzBUeT3m+lndYCt8wKbmofUu1MUdMCXkCk9ZQ==} parse-imports-exports@0.2.4: resolution: {integrity: sha512-4s6vd6dx1AotCx/RCI2m7t7GCh5bDRUtGNvRfHSP2wbBQdMi67pPe7mtzmgwcaQ8VKK/6IB7Glfyu3qdZJPybQ==} @@ -5006,9 +4994,6 @@ packages: pathe@2.0.3: resolution: {integrity: sha512-WUjGcAqP1gQacoQe+OBJsFA7Ld4DyXuUIjZ5cc75cLHvJ7dtNsTugphxIADwspS+AraAUePCKrSVtPLFj/F88w==} - perfect-debounce@1.0.0: - resolution: {integrity: sha512-xCy9V055GLEqoFaHoC1SoLIaLmWctgCUaBaWxDZ7/Zx4CTyX7cJQLJOok/orfjZAh9kEYpjJa4d0KcJmCbctZA==} - perfect-debounce@2.1.0: resolution: {integrity: sha512-LjgdTytVFXeUgtHZr9WYViYSM/g8MkcTPYDlPa3cDqMirHjKiSZPYd6DoL7pK8AJQr+uWkQvCjHNdiMqsrJs+g==} @@ -5019,18 +5004,19 @@ packages: resolution: {integrity: sha512-V7+vQEJ06Z+c5tSye8S+nHUfI51xoXIXjHQ99cQtKUkQqqO1kO/KCJUfZXuB47h/YBlDhah2H3hdUGXn8ie0oA==} engines: {node: '>=8.6'} - picomatch@4.0.4: - resolution: {integrity: sha512-QP88BAKvMam/3NxH6vj2o21R6MjxZUAd6nlwAS/pnGvN9IVLocLHxGYIzFhg6fUQ+5th6P4dv4eW9jX3DSIj7A==} + picomatch@4.0.5: + resolution: {integrity: sha512-RvwwcruNjI1ncT5xRakeyS9Lf8lcItv34KD+aif+VH9kduAyfYBipGh12274xtenIPZ119/R9BdTBa8gAwSh0A==} engines: {node: '>=12'} pify@2.3.0: resolution: {integrity: sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==} engines: {node: '>=0.10.0'} - pinia@3.0.4: - resolution: {integrity: sha512-l7pqLUFTI/+ESXn6k3nu30ZIzW5E2WZF/LaHJEpoq6ElcLD+wduZoB2kBN19du6K/4FDpPMazY2wJr+IndBtQw==} + pinia@4.0.2: + resolution: {integrity: sha512-yKVVA7bSj5oRZFp/Ab9wLlmyb5gPUYEiIm4ryiWTe/xe7PtkRdMVOp1X1ggvq0c6Uj7Q0Du1HnV2mtAwM0Ks1g==} peerDependencies: - typescript: '>=4.5.0' + '@vue/devtools-api': ^8.1.5 + typescript: '>=5.6.0' vue: ^3.5.11 peerDependenciesMeta: typescript: @@ -5060,41 +5046,41 @@ packages: peerDependencies: postcss: ^8.4.38 - postcss-colormin@7.0.10: - resolution: {integrity: sha512-yFr6JezOolHLta/buLE71VKPh2mXursp4saVe98/ol8ZnEWhL+racShqPKlvd/DKWLre/39B6HhcMXf7RZ3hxg==} - engines: {node: ^18.12.0 || ^20.9.0 || >=22.0} + postcss-colormin@8.0.1: + resolution: {integrity: sha512-qBY4ABQ6d8/mk5RRZHwMllrZMxeMey3azVY2dZUEk+RgiUC4ARdPR3/AITzNqqKTbvW/3y/MJKinDrzwqn8RDQ==} + engines: {node: ^22.11.0 || ^24.11.0 || >=26.0} peerDependencies: - postcss: ^8.5.13 + postcss: ^8.5.15 - postcss-convert-values@7.0.12: - resolution: {integrity: sha512-xurKu5qqk4viR3Cp3p4xBR4KfnZm4w4ys6+UBwBmeuBSNkH7+DtLnYOYnOffgtE4yx8sH9S1VZ6RAAvROXzP2Q==} - engines: {node: ^18.12.0 || ^20.9.0 || >=22.0} + postcss-convert-values@8.0.1: + resolution: {integrity: sha512-IdOSIX3BzfMvCc1TAHIha2gfy17xnb5vfML8e2BIKARnFOghksESfaSAB/3CXgyLfMozZAbTRPVQF5dbuKOidw==} + engines: {node: ^22.11.0 || ^24.11.0 || >=26.0} peerDependencies: - postcss: ^8.5.13 + postcss: ^8.5.15 - postcss-discard-comments@7.0.8: - resolution: {integrity: sha512-CvvS5S9WrXblFXCEJ9nVo+4z+eA7zSC7Z88V1HEJuwlQhlFnYTIjg1xJY+BCUiG2bvICap2tXii4mP22BD108Q==} - engines: {node: ^18.12.0 || ^20.9.0 || >=22.0} + postcss-discard-comments@8.0.1: + resolution: {integrity: sha512-FDvzm3tXlEsQBO2XQgnta5ugsAqwBrgWH+j5QgXpegEIDYA0VPnZg2aP7LtmWtC49POskeIhXesFiU/k3NyFHA==} + engines: {node: ^22.11.0 || ^24.11.0 || >=26.0} peerDependencies: - postcss: ^8.5.13 + postcss: ^8.5.15 - postcss-discard-duplicates@7.0.4: - resolution: {integrity: sha512-VBNn1+EuMZkeGVVtz0gRfbNGtx9IFgAsAV+E2pHtXPrp4qfGBkhTIiAuE/wrb+Y6Pakg9NewAlfTpYIFAWODtw==} - engines: {node: ^18.12.0 || ^20.9.0 || >=22.0} + postcss-discard-duplicates@8.0.1: + resolution: {integrity: sha512-stTDXkI8YkCUfADurQhp03oq5ynsgSx6Qrw5B1swds6oTHtAeOZ9I0SHGK8cY/VpWUsIYFDWMs3IWf9jIEfFvA==} + engines: {node: ^22.11.0 || ^24.11.0 || >=26.0} peerDependencies: - postcss: ^8.5.13 + postcss: ^8.5.15 - postcss-discard-empty@7.0.3: - resolution: {integrity: sha512-M2pyjQCU+/7cMHVtL6bKTHjv0lZnPLMpicgr67Dlth7AbuV9gjVTtUqaRwn6Pp6BwSDspUzhz8SaUrRykJU5Dw==} - engines: {node: ^18.12.0 || ^20.9.0 || >=22.0} + postcss-discard-empty@8.0.1: + resolution: {integrity: sha512-Zv4fM1Yfhk71tbt6gfiptbL6jDHi+7apSnaMeaO9n1uET+1embrXQw5m93Zp5x28UyQSuv+AVkFY193jdwZ33w==} + engines: {node: ^22.11.0 || ^24.11.0 || >=26.0} peerDependencies: - postcss: ^8.5.13 + postcss: ^8.5.15 - postcss-discard-overridden@7.0.3: - resolution: {integrity: sha512-aNovXo9UsZuRNLzHJtp13lHIvinDPfiXBPePpXkSjCbgp++iU2FqE+YxvjIsg6EdyPZsASFbfu+JcBFVsErXIQ==} - engines: {node: ^18.12.0 || ^20.9.0 || >=22.0} + postcss-discard-overridden@8.0.1: + resolution: {integrity: sha512-ykt4fvrC7yYGzbxKyqBVjDCbsjF/11JgWK8enrdkobRyqqEtb/uDUCbKOGdvrK8X7BrShW8Lv5cCRNbdkNHGkQ==} + engines: {node: ^22.11.0 || ^24.11.0 || >=26.0} peerDependencies: - postcss: ^8.5.13 + postcss: ^8.5.15 postcss-import@15.1.0: resolution: {integrity: sha512-hpr+J05B2FVYUAXHeK1YyI267J/dDDhMU6B6civm8hSY1jYJnBXxzKDKDswzJmtLHryrjhnDjqqp/49t8FALew==} @@ -5126,41 +5112,41 @@ packages: yaml: optional: true - postcss-merge-longhand@7.0.7: - resolution: {integrity: sha512-b3mfYUxR388u5Pt0HPcVIUtUDn/k15UfTY9M+ORW+meCR6JLNxoZffiYvXyOYQoRYQNZyX/UFkMCM/mNHxe1qA==} - engines: {node: ^18.12.0 || ^20.9.0 || >=22.0} + postcss-merge-longhand@8.0.1: + resolution: {integrity: sha512-huTfSYgQ13O81SFvAuOi7GWnO48vvybjj3xF+X3qUoPjzvvaLpJH5DcUqqXcwOEulZUcvaV4s0V9WtWs+IAQPA==} + engines: {node: ^22.11.0 || ^24.11.0 || >=26.0} peerDependencies: - postcss: ^8.5.13 + postcss: ^8.5.15 - postcss-merge-rules@7.0.11: - resolution: {integrity: sha512-SJUPM18g2BmPhf8BVlbwqWz4aK3pLu6u6xjfwEzra7xL6IBR10sUaiB++EzqcVfadPHrKBSMlNdP+XieykhI+Q==} - engines: {node: ^18.12.0 || ^20.9.0 || >=22.0} + postcss-merge-rules@8.0.1: + resolution: {integrity: sha512-o3rk4UpnPNg469tklYwbR/NtvKc/f/wJiVDTnNQ/EFPw/LeiPOHUCvV1GIBQIZHGrBAYdPjToK6a+ojYprsrxQ==} + engines: {node: ^22.11.0 || ^24.11.0 || >=26.0} peerDependencies: - postcss: ^8.5.13 + postcss: ^8.5.15 - postcss-minify-font-values@7.0.3: - resolution: {integrity: sha512-yilG/VOaNI74IylQvAQQxm3/wZVBkXyYUqNUAdxqwtbWUXPsbK1q8Ms0mL83v+f8YicgcyfYCRZtWACUdYajpA==} - engines: {node: ^18.12.0 || ^20.9.0 || >=22.0} + postcss-minify-font-values@8.0.1: + resolution: {integrity: sha512-L8Nzs/PRlBSPrLdY/7rAiU5ZN5800+2J/4LRbfyG8SJnPljmgMaXVmQiCklvRS+yObfVRNtvmk/Ean/eoYcSeg==} + engines: {node: ^22.11.0 || ^24.11.0 || >=26.0} peerDependencies: - postcss: ^8.5.13 + postcss: ^8.5.15 - postcss-minify-gradients@7.0.5: - resolution: {integrity: sha512-YraROyQRg3BI1+Hg8E05B/JPdnTm8EDSVu4P2BxdM+CRiOyfmou809+chGIqo6fQqwjPGQ947nbGncSjmTU1WQ==} - engines: {node: ^18.12.0 || ^20.9.0 || >=22.0} + postcss-minify-gradients@8.0.1: + resolution: {integrity: sha512-qf+4s/hZMqTwpWN2teqf6+1yvR/SZK5HgHqXYuACeJXV7ABe7AXtBEomgxagUzcN4bSnmqBh5vnIml0dYqykYg==} + engines: {node: ^22.11.0 || ^24.11.0 || >=26.0} peerDependencies: - postcss: ^8.5.13 + postcss: ^8.5.15 - postcss-minify-params@7.0.9: - resolution: {integrity: sha512-R8itbB8BhlpoYyBm1ou0dD+vJnQ3F6adQipR4UnkCHUwlo+S9WXJaDRg1RHjC8YVAtIdrQzSWvJl40HnGDTKjA==} - engines: {node: ^18.12.0 || ^20.9.0 || >=22.0} + postcss-minify-params@8.0.1: + resolution: {integrity: sha512-L0h3H59deFfFg0wQN1NVaS/8E/LfGvaMuZKGO7siwlG995zo3OshtQyRkqKdVqcBwAORBvZ1nDZrKPLRapYkQw==} + engines: {node: ^22.11.0 || ^24.11.0 || >=26.0} peerDependencies: - postcss: ^8.5.13 + postcss: ^8.5.15 - postcss-minify-selectors@7.1.2: - resolution: {integrity: sha512-aQtrEWKwqafNlExcKHQvPGsXR2+vlUqqJtf5XsCQcgsSb5PL4wlujWBYDJuWsP4UnQX1YHDHU8qRlD+1PzTQ+Q==} - engines: {node: ^18.12.0 || ^20.9.0 || >=22.0} + postcss-minify-selectors@8.0.2: + resolution: {integrity: sha512-3icdxc/zght5UAizdwqZBDE2KOWHf1jMQCxET6iLACeNlRxfTPyXS0/COpGk8CQ2cECyaEKTRUd/i/k8Gxmz4g==} + engines: {node: ^22.11.0 || ^24.11.0 || >=26.0} peerDependencies: - postcss: ^8.5.13 + postcss: ^8.5.15 postcss-nested@6.2.0: resolution: {integrity: sha512-HQbt28KulC5AJzG+cZtj9kvKB93CFCdLvog1WFLf1D+xmMvPGlBstkpTEZfK5+AN9hfJocyBFCNiqyS48bpgzQ==} @@ -5174,103 +5160,103 @@ packages: peerDependencies: postcss: ^8.4 - postcss-normalize-charset@7.0.3: - resolution: {integrity: sha512-NoBfZu8PR4c2NlmjvrqQTzCzLY79hwcSRgNQ3ZiNK0ABzf9kYKloE/jNj+/8GQY1wsm8pRRgANk6ydLH8cwo0Q==} - engines: {node: ^18.12.0 || ^20.9.0 || >=22.0} + postcss-normalize-charset@8.0.1: + resolution: {integrity: sha512-xzqr36F8UeIZOvOHsf3aul+RVJCADvSwuwpMLgizqKjisHZpBfztgW0XFLBfJvz9pJgaStaOXAtGb0zLqT6B0w==} + engines: {node: ^22.11.0 || ^24.11.0 || >=26.0} peerDependencies: - postcss: ^8.5.13 + postcss: ^8.5.15 - postcss-normalize-display-values@7.0.3: - resolution: {integrity: sha512-ldsCX0QIt05pKIOobZtVQ48wXJecr+czw4+e1/YjVhLMqslShgpVxgPtI2CefURR8oyVoYaU/l829MMwExDMLw==} - engines: {node: ^18.12.0 || ^20.9.0 || >=22.0} + postcss-normalize-display-values@8.0.1: + resolution: {integrity: sha512-ZDWOijOK1FFMlpgiQCUO9fCNKd7HJ9L7z9HWEq4iyubnUFWzdTSwm/LcrMbNW6iZ1oAtqeLYA0WA3xHszOI08g==} + engines: {node: ^22.11.0 || ^24.11.0 || >=26.0} peerDependencies: - postcss: ^8.5.13 + postcss: ^8.5.15 - postcss-normalize-positions@7.0.4: - resolution: {integrity: sha512-VEvlpeGd3Ju1Hqa/oN4jaP3+ms4laYwkEL9N9u+B6k54PZjXbW1n6wI+aVprf1BQXlCYpS5+1pl/7/vHiKgARg==} - engines: {node: ^18.12.0 || ^20.9.0 || >=22.0} + postcss-normalize-positions@8.0.1: + resolution: {integrity: sha512-uuivan2poSqbE48ST4do20dGaFUeXey9/H8rhHzoyVHB2I6BmkoVLZ/C9+BRjUlpaAFYVOoDY7epkiidzaYbvA==} + engines: {node: ^22.11.0 || ^24.11.0 || >=26.0} peerDependencies: - postcss: ^8.5.13 + postcss: ^8.5.15 - postcss-normalize-repeat-style@7.0.4: - resolution: {integrity: sha512-6mPKlY/8cSaDHxX502wERADarJsccwlky6yIrOapHH2ZgfoKAV94SbiTKfKEs4EEpdazuc3J72WsqeYk7hp9+Q==} - engines: {node: ^18.12.0 || ^20.9.0 || >=22.0} + postcss-normalize-repeat-style@8.0.1: + resolution: {integrity: sha512-q2hq5fmKxk29K6DjKA3nZ17Q2dtjhLYFNmFweKALmooUqx6UWAHF1bBoWTu/EqlJ88josb82A/J0Atj9LJUmpQ==} + engines: {node: ^22.11.0 || ^24.11.0 || >=26.0} peerDependencies: - postcss: ^8.5.13 + postcss: ^8.5.15 - postcss-normalize-string@7.0.3: - resolution: {integrity: sha512-HnEQPUchi1eznmDKEYrKUTqrprEq97SrpUYClgUkv7V2zRODD9DFoUsYU+m9ZOetmD5ku7fEMZB/lwy8IT6xVQ==} - engines: {node: ^18.12.0 || ^20.9.0 || >=22.0} + postcss-normalize-string@8.0.1: + resolution: {integrity: sha512-+Wf+kQJhm1WgSGEAuUaswE9rdpR9QbrKRVemcVHs6rhOoOTVIdAbgaicftfYA6vLM346P8onRzkEVbFN29ktKQ==} + engines: {node: ^22.11.0 || ^24.11.0 || >=26.0} peerDependencies: - postcss: ^8.5.13 + postcss: ^8.5.15 - postcss-normalize-timing-functions@7.0.3: - resolution: {integrity: sha512-zmEzHdvpZBZu0OKlbJSfgASQvaayyAoVuWtvyr34IJ/LyS+DaOKvvR3EvFJ9RWWtNIx+CMvO125OVophaxNYew==} - engines: {node: ^18.12.0 || ^20.9.0 || >=22.0} + postcss-normalize-timing-functions@8.0.1: + resolution: {integrity: sha512-W8/tvwRlm3T+yjGkg0IRTF4bvHj0vILYr/LOogCrJKHz2ey2HFRwfsAA8Bk9N4BGR7z7WmmDu/KzzwhJ6FoGPQ==} + engines: {node: ^22.11.0 || ^24.11.0 || >=26.0} peerDependencies: - postcss: ^8.5.13 + postcss: ^8.5.15 - postcss-normalize-unicode@7.0.9: - resolution: {integrity: sha512-DRAdWfeh/TjmhLJsw91vdiWCnUod9iwvM7xyS02/nF/sLsCR3A8l3pztrSUrWG8DSBqfX7yEk9FM0USaVJ2mSg==} - engines: {node: ^18.12.0 || ^20.9.0 || >=22.0} + postcss-normalize-unicode@8.0.1: + resolution: {integrity: sha512-Ad0YHNRBp4WHEOYUM/4wL/8MoL2fimEF8se/0q+Rt/owMzYpbxsypC1P8fN/oluwoRmRKdNVX7X2oycEobPWcQ==} + engines: {node: ^22.11.0 || ^24.11.0 || >=26.0} peerDependencies: - postcss: ^8.5.13 + postcss: ^8.5.15 - postcss-normalize-url@7.0.3: - resolution: {integrity: sha512-CL93wmloq5qsffmFv+bw24MIRbmhHrp53qoh1LDAb/5TtjWEXI/np4xcP/Gw9oWCb2XyWnqHYLDUwiKRoJBA1Q==} - engines: {node: ^18.12.0 || ^20.9.0 || >=22.0} + postcss-normalize-url@8.0.1: + resolution: {integrity: sha512-tkYcip6pCDY806xuxpJYqMW2M3/623jzGFJmz3m5Us47q8P28+gbRZxaea3Rr/CmwwLUiVlh+BTGYwQ6gvaP8A==} + engines: {node: ^22.11.0 || ^24.11.0 || >=26.0} peerDependencies: - postcss: ^8.5.13 + postcss: ^8.5.15 - postcss-normalize-whitespace@7.0.3: - resolution: {integrity: sha512-FdHjjn+Ht5Z2ZRjNOmeCbNq6lq09sUYKpmlF/Aq0XjVNSLTL6fmHlA/3swN2wP2caY9GV/tjSDcIIyS7aN7W0A==} - engines: {node: ^18.12.0 || ^20.9.0 || >=22.0} + postcss-normalize-whitespace@8.0.1: + resolution: {integrity: sha512-XzORadNfSrKWDZZpgAEHPKINKx8r9r9RIfE9c70g/HThdpbmPHhDYCodHSVESDxmKeySAYw1p4liuBCf7j6LyA==} + engines: {node: ^22.11.0 || ^24.11.0 || >=26.0} peerDependencies: - postcss: ^8.5.13 + postcss: ^8.5.15 - postcss-ordered-values@7.0.4: - resolution: {integrity: sha512-nubSi49hDHQk4E8KIj+IbLY8Bg+8OcSUEhgyolgM+atnOvXjV7EjaR6bac4YGZoFyPa9mWoAF3EaYbWdFkKqVg==} - engines: {node: ^18.12.0 || ^20.9.0 || >=22.0} + postcss-ordered-values@8.0.1: + resolution: {integrity: sha512-OLXq5lR1yk3KWQ1FPK6aWjFFdktHE9f9kb8cnt4LmIw7w30DnzgD9+sOVYJc5HenkWCX8i1MJhhFwmqc/GYqLg==} + engines: {node: ^22.11.0 || ^24.11.0 || >=26.0} peerDependencies: - postcss: ^8.5.13 + postcss: ^8.5.15 - postcss-reduce-initial@7.0.9: - resolution: {integrity: sha512-ztTNPdIxXTxtBcG03E9u8v44M4ElXbMIRT7pf2onlquGula0Y83nKKxqM22FA/hMgkfCjN7ohevkVlaNwI8iOQ==} - engines: {node: ^18.12.0 || ^20.9.0 || >=22.0} + postcss-reduce-initial@8.0.1: + resolution: {integrity: sha512-+aQsR6+61KRoIfcFNLP3v9RM7+0iYOTtPnjl1wr6JqMW1zx6S+t2ktHRefXwacFdHIDj5+ETG0KY7K3+SGQ4Nw==} + engines: {node: ^22.11.0 || ^24.11.0 || >=26.0} peerDependencies: - postcss: ^8.5.13 + postcss: ^8.5.15 - postcss-reduce-transforms@7.0.3: - resolution: {integrity: sha512-FXsnN9ZwcZTT8Yf8cAHA8qIGUXcX6WfLd9JoYhrdDfmvsVhhfqkkv7m4AC3rwFOfz+GzkUa87OCKF9dUcicd+g==} - engines: {node: ^18.12.0 || ^20.9.0 || >=22.0} + postcss-reduce-transforms@8.0.1: + resolution: {integrity: sha512-x71slHVykiFi5RuKEXM0wgYpY2PngC78x6R8TnZhHF3lhqt+u/w3MGwYLX+2t5O87ssRiMfEAhQH+3J4QwVzCw==} + engines: {node: ^22.11.0 || ^24.11.0 || >=26.0} peerDependencies: - postcss: ^8.5.13 + postcss: ^8.5.15 - postcss-selector-parser@6.1.2: - resolution: {integrity: sha512-Q8qQfPiZ+THO/3ZrOrO0cJJKfpYCagtMUkXbnEfmgUjwXg6z/WBeOyS9APBBPCTSiDV+s4SwQGu8yFsiMRIudg==} + postcss-selector-parser@6.1.4: + resolution: {integrity: sha512-bIoJLOmjCO1S9XdY/DcnR5hJxvrDir1PbGChrzXG3vw0/FOliy/fA3dmdhQ441kah4gKv+TwckGzex6wNS5cnQ==} engines: {node: '>=4'} - postcss-selector-parser@7.1.1: - resolution: {integrity: sha512-orRsuYpJVw8LdAwqqLykBj9ecS5/cRHlI5+nvTo8LcCKmzDmqVORXtOIYEEQuL9D4BxtA1lm5isAqzQZCoQ6Eg==} + postcss-selector-parser@7.1.4: + resolution: {integrity: sha512-HeP7D2wyhkR+XaK6v4W8oRF62Dsz4flyuczALJp61GckGm42u1saSSJ/0auvcBqxs3jMRFEcPK34At/0JBKdOg==} engines: {node: '>=4'} - postcss-svgo@7.1.3: - resolution: {integrity: sha512-2QfoFOYMcj8lwcVEf9WeTlkVIAm7u2QvOEhMzkQU3KUhhGX/l8hVV9EtjMv4iq3E9iI3OeeMN0YoMLbGusuigw==} - engines: {node: ^18.12.0 || ^20.9.0 || >= 18} + postcss-svgo@8.0.1: + resolution: {integrity: sha512-HpnvWii7W0/FPrsejJa6ZTi0kNtTJP/Iba7CUMPX0xPV6QpnndOp+SDP74tFtgjA2cYKYNWJPOlmLXMsvi/9yA==} + engines: {node: ^22.11.0 || ^24.11.0 || >=26.0} peerDependencies: - postcss: ^8.5.13 + postcss: ^8.5.15 - postcss-unique-selectors@7.0.7: - resolution: {integrity: sha512-d+sCkaRnSefghOUdH8CMJZV9yUQhj2ojpe8Nw/lA+LV1UOfeleGkLTl6XdCFFSai9UJ+DJPb69FFuqthXYsY8w==} - engines: {node: ^18.12.0 || ^20.9.0 || >=22.0} + postcss-unique-selectors@8.0.1: + resolution: {integrity: sha512-+xvKI5+/Cl8yYQwxDV39Uhuc4WV951xngFvPPjiPj2NIbIfm6vbbRTXblyw0FioLkIoGlw+7qUcY1h2YhaZYgw==} + engines: {node: ^22.11.0 || ^24.11.0 || >=26.0} peerDependencies: - postcss: ^8.5.13 + postcss: ^8.5.15 postcss-value-parser@4.2.0: resolution: {integrity: sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==} - postcss@8.5.15: - resolution: {integrity: sha512-FfR8sjd4em2T6fb3I2MwAJU7HWVMr9zba+enmQeeWFfCbm+UOC/0X4DS8XtpUTMwWMGbjKYP7xjfNekzyGmB3A==} + postcss@8.5.20: + resolution: {integrity: sha512-lW616l85ucIQL+FocMmL7pQFPqBmwejrCMg+iPxyImlrANNJG9NHq/RkyCZopDhd8C3LA03PHRJDjkbGu8vvug==} engines: {node: ^10 || ^12 || >=14} powershell-utils@0.1.0: @@ -5281,8 +5267,8 @@ packages: resolution: {integrity: sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==} engines: {node: '>= 0.8.0'} - prettier-plugin-tailwindcss@0.8.0: - resolution: {integrity: sha512-V8ITGH87yuBDF6JpEZTOVlUz/saAwqb8f3HRgUj8Lh+tGCcrmorhsLpYqzygwFwK0PE2Ib6Mv3M7T/uE2tZV1g==} + prettier-plugin-tailwindcss@0.8.1: + resolution: {integrity: sha512-iaFMYqDsE4ffdDkn5qup0j5f2aCEBFZrdrZnvu9QKTlWx/iGPeQ4HHu7b7fCPMxeo9nwQBiOAh2nSypdFYWJkw==} engines: {node: '>=20.19'} peerDependencies: '@ianvs/prettier-plugin-sort-imports': '*' @@ -5336,13 +5322,13 @@ packages: prettier-plugin-svelte: optional: true - prettier@3.8.3: - resolution: {integrity: sha512-7igPTM53cGHMW8xWuVTydi2KO233VFiTNyF5hLJqpilHfmn8C8gPf+PS7dUT64YcXFbiMGZxS9pCSxL/Dxm/Jw==} + prettier@3.9.5: + resolution: {integrity: sha512-/FVl766LpUfB5vXgCYOYa0MeV/441Ia99AeICQIQFTY/Nw0roZwULcXpku5i1/m5kt/baz+s4Zogspd839HSMg==} engines: {node: '>=14'} hasBin: true - pretty-bytes@7.1.0: - resolution: {integrity: sha512-nODzvTiYVRGRqAOvE84Vk5JDPyyxsVk0/fbA/bq7RqlnhksGpset09XTxbpvLTIjoaF7K8Z8DG8yHtKGTPSYRw==} + pretty-bytes@7.1.1: + resolution: {integrity: sha512-X+vn9z8nOFZQlxOLmfJ0iKDdMD7jYTsTW12OAlCpdoE3Igik6L37pugIZi+N3usuyp5McfgKPWi12q3zvHLeGQ==} engines: {node: '>=20'} process-nextick-args@2.0.1: @@ -5380,8 +5366,8 @@ packages: radix3@1.1.2: resolution: {integrity: sha512-b484I/7b8rDEdSDKckSSBA8knMpcdsXudlE/LNL639wFoHKwLbEkQFZHWEYwDC0wa0FKUcCY+GAF73Z7wxNVFA==} - range-parser@1.2.1: - resolution: {integrity: sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==} + range-parser@1.3.0: + resolution: {integrity: sha512-hek2mFQpPuI4E1BBKrSto+BU3e3x4xuarsbiwr3+lf7p44juvFMV0XFWQAP3xUyqXA4RrXLIoaSUGbSt056ZMw==} engines: {node: '>= 0.6'} rc9@3.0.1: @@ -5404,10 +5390,6 @@ packages: resolution: {integrity: sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==} engines: {node: '>=8.10.0'} - readdirp@4.1.2: - resolution: {integrity: sha512-GDhwkLfywWL2s6vEjyhri+eXmfH6j1L7JE27WhqLeYzoh/A3DBaYGEj2H/HFZCn/kMfim73FXxEJTw06WtxQwg==} - engines: {node: '>= 14.18.0'} - readdirp@5.0.0: resolution: {integrity: sha512-9u/XQ1pvrQtYyMpZe7DXKv2p5CNvyVwzUB6uhLAnQwHMSgKMBR62lc7AHljaeteeHXn11XTAaLLUVZYVZyuRBQ==} engines: {node: '>= 20.19.0'} @@ -5432,8 +5414,8 @@ packages: resolution: {integrity: sha512-iETxpjK6YoRWJG5o6hXLwvjYAoW+FEZn9os0PD/b6AP6xQwsa/Y7lCVgIixBbUPMfhu+i2LtdeAqVTgGlQarfA==} hasBin: true - regjsparser@0.13.1: - resolution: {integrity: sha512-dLsljMd9sqwRkby8zhO1gSg3PnJIBFid8f4CQj/sXx+7cKx+E7u0PKhZ+U4wmhx7EfmtvnA318oVaIkAB1lRJw==} + regjsparser@0.13.2: + resolution: {integrity: sha512-NgRBy2Nx/bE+9F27nVHnqcN5HjyLmecqsqx2PJHu3/IEtADD4WuxuXIVExD5PoSDFVrl78dOonfcOe5O+5nbzQ==} hasBin: true replace-in-file@6.3.5: @@ -5449,10 +5431,6 @@ packages: resolution: {integrity: sha512-yE7KUfFvaBFzGPs5H3Ops1RevfUEsDc5Iz65rOwWg4lE8HJSYtle77uul3+573457oHvBKuHYDl/xqUkKpEEdw==} engines: {node: '>=18'} - resolve-from@4.0.0: - resolution: {integrity: sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==} - engines: {node: '>=4'} - resolve-from@5.0.0: resolution: {integrity: sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==} engines: {node: '>=8'} @@ -5477,8 +5455,24 @@ packages: resolution: {integrity: sha512-g6QUff04oZpHs0eG5p83rFLhHeV00ug/Yf9nZM6fLeUrPguBTkTQOdpAWWspMh55TZfVQDPaN3NQJfbVRAxdIw==} engines: {iojs: '>=1.0.0', node: '>=0.10.0'} - rfdc@1.4.1: - resolution: {integrity: sha512-q1b3N5QkRUWUl7iyylaaj3kOpIT0N2i9MqIEQXP73GVsN9cw3fdx8X63cEmWhJGi2PPCF23Ijp7ktmd39rawIA==} + rolldown-string@0.3.1: + resolution: {integrity: sha512-dv8GOXkYqUQdI0rsXB8hmzO95pKWSuX2eg5/JSJa9czfEVIFuKNR7ZJDfat8LlmD35RAhWY+evS7/wXXqFDfSg==} + engines: {node: '>=20.19.0'} + peerDependencies: + rolldown: '*' + peerDependenciesMeta: + rolldown: + optional: true + + rolldown@1.1.5: + resolution: {integrity: sha512-t9z29cJjXf/vxQ8dyhCSpt6H6aSwHTk8cT5I3iy6SMXuFpk5mB6PL6XfC8PCwrPTx93udwKUm9HRteAlTGBLiA==} + engines: {node: ^20.19.0 || >=22.12.0} + hasBin: true + + rolldown@1.2.0: + resolution: {integrity: sha512-u7tgm5l4Yw1iTqUL4EcYOAt7fFvCgQMLeidrnD4GALlC6aOznCjezYajgxeyKw27u0Q5N7fwgCzjVyPIWzwuBA==} + engines: {node: ^20.19.0 || >=22.12.0} + hasBin: true rollup-plugin-visualizer@7.0.1: resolution: {integrity: sha512-UJUT4+1Ho4OcWmPYU3sYXgUqI8B8Ayfe06MX7y0qCJ1K8aGoKtR/NDd/2nZqM7ADkrzny+I99Ul7GgyoiVNAgg==} @@ -5493,14 +5487,17 @@ packages: rollup: optional: true - rollup@4.60.4: - resolution: {integrity: sha512-WHeFSbZYsPu3+bLoNRUuAO+wavNlocOPf3wSHTP7hcFKVnJeWsYlCDbr3mTS14FCizf9ccIxXA8sGL8zKeQN3g==} + rollup@4.62.2: + resolution: {integrity: sha512-RFnrW4lhXA3s3eqHDZvN654g8OTjzRfqpIRJYczCGB6HzphckVAi/Qh4tbPUbRuDi7s1Llv8g/NspLkttY3gTA==} engines: {node: '>=18.0.0', npm: '>=8.0.0'} hasBin: true rou3@0.8.1: resolution: {integrity: sha512-ePa+XGk00/3HuCqrEnK3LxJW7I0SdNg6EFzKUJG73hMAdDcOUC/i/aSz7LSDwLrGr33kal/rqOGydzwl6U7zBA==} + rou3@0.9.1: + resolution: {integrity: sha512-z/sSmzvtwMDDnxsPVhfWMuG6F6mbmhFDXoVqLmMfbpDD9qfV3GDmSQpf0+W296/ZDIpW2wcMmBfpVFzcnOi/nA==} + run-applescript@7.1.0: resolution: {integrity: sha512-DPe5pVFaAsinSaV6QjQ6gdiedWDcRCbUuiQfQa2wmWV7+xC9bGulGI8+TdRmoFkAPaBXk8CrAbnlY2ISniJ47Q==} engines: {node: '>=18'} @@ -5533,8 +5530,8 @@ packages: resolution: {integrity: sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==} hasBin: true - semver@7.8.1: - resolution: {integrity: sha512-rkVq3IXh+4FDGch+KwzX3aV9W3kO54GyEgpvBzSyctDA6Xtd7RJQV1xmXbeQp5v7+VzLOfVqiutSE6GICgPFvg==} + semver@7.8.5: + resolution: {integrity: sha512-Y7/KDsb8LjooZpwaqGyulO6DQlksgCncchHGk+sZIY4SBvUocMBEFH5Ur1fI4dV+Jvl0w6cjvucaIi40puRioA==} engines: {node: '>=10'} hasBin: true @@ -5542,12 +5539,12 @@ packages: resolution: {integrity: sha512-1gnZf7DFcoIcajTjTwjwuDjzuz4PPcY2StKPlsGAQ1+YH20IRVrBaXSWmdjowTJ6u8Rc01PoYOGHXfP1mYcZNQ==} engines: {node: '>= 18'} - serialize-javascript@7.0.5: - resolution: {integrity: sha512-F4LcB0UqUl1zErq+1nYEEzSHJnIwb3AF2XWB94b+afhrekOUijwooAYqFyRbjYkm2PAKBabx6oYv/xDxNi8IBw==} + serialize-javascript@7.0.7: + resolution: {integrity: sha512-YAy8Od6KV+uuwUuU50np8fGB/Aues6Y0nAhA9y/hId74PlKUcme4pXcBD46NWKr1Q4osN/iseZ17YqO1XfmI8g==} engines: {node: '>=20.0.0'} - seroval@1.5.4: - resolution: {integrity: sha512-46uFvgrXTVxZcUorgSSRZ4y+ieqLLQRMlG4bnCZKW3qI6BZm7Rg4ntMW4p1mILEEBZWrFlcpp0AyIIlM6jD9iw==} + seroval@1.5.6: + resolution: {integrity: sha512-rVQVWjjSvlINzaQPZH5JFqsqEsIWdTxY3iJZCnTL/5gQbXIRooVZKI60tVCkOVfzcRPejboxO2t0P89dg5mQaA==} engines: {node: '>=10'} serve-placeholder@2.0.2: @@ -5571,8 +5568,8 @@ packages: resolution: {integrity: sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==} engines: {node: '>=8'} - shell-quote@1.8.4: - resolution: {integrity: sha512-VsC6n6vz1ihYYyZZwX7YZSF5l5x36ca17OC+a69h94YqB7X6XLwf+5MOgynYir2SLFUbl8gIYvBo8K8RoNQ6bQ==} + shell-quote@1.10.0: + resolution: {integrity: sha512-w1aiOKwKuRgtwAReIIj89puqg+I7GvX4IbLrvmhXbzQsj1+Zwi4VO3+fa6ZF91TWSjIxoEkKnMeHcLEODK5ZXA==} engines: {node: '>= 0.4'} siginfo@2.0.0: @@ -5627,12 +5624,8 @@ packages: spdx-license-ids@3.0.23: resolution: {integrity: sha512-CWLcCCH7VLu13TgOH+r8p1O/Znwhqv/dbb6lqWy67G+pT1kHmeD/+V36AVb/vq8QMIQwVShJ6Ssl5FPh0fuSdw==} - speakingurl@14.0.1: - resolution: {integrity: sha512-1POYv7uv2gXoyGFpBCmpDVSNV74IfsWlDW216UPjbWufNf+bSU6GdbDsxdcxtfwb4xlI3yxzOTKClUosxARYrQ==} - engines: {node: '>=0.10.0'} - - srvx@0.11.16: - resolution: {integrity: sha512-bp07zRuycfTY43IjAvvTFnmnJi8ikW0VFiHwOhhYcVW/L4xQ1XY4PAd4Nuum1rsA17C39zL7x+CDhrn5AL32Rw==} + srvx@0.11.22: + resolution: {integrity: sha512-LqZxxBDMKuMAZzFzJnDCkFOrs9MZQZr0LvHiO/SuSZVdQaXD7xQ5UWTUxheJrQPve1qk9MG2B/yttUvJxw8egQ==} engines: {node: '>=20.16.0'} hasBin: true @@ -5654,11 +5647,11 @@ packages: resolution: {integrity: sha512-DvEy55V3DB7uknRo+4iOGT5fP1slR8wQohVdknigZPMpMstaKJQWhwiYBACJE3Ul2pTnATihhBYnRhZQHGBiRw==} engines: {node: '>= 0.8'} - std-env@4.1.0: - resolution: {integrity: sha512-Rq7ybcX2RuC55r9oaPVEW7/xu3tj8u4GeBYHBWCychFtzMIr86A7e3PPEBPT37sHStKX3+TiX/Fr/ACmJLVlLQ==} + std-env@4.2.0: + resolution: {integrity: sha512-oCUKSupKTHX53EyjDtuZQ64pjLJ6yYCtpmEw0goYxtjG9KpbRe8KAsl2tBUGU9DyMcJ0RwJ8GqJAFzMXcXW1Rw==} - streamx@2.26.0: - resolution: {integrity: sha512-VvNG1K72Po/xwJzxZFnZ++Tbrv4lwSptsbkFuzXCJAYZvCK5nnxsvXU6ajqkv7chyiI1Y0YXq2Jh8Iy8Y7NF/A==} + streamx@2.28.0: + resolution: {integrity: sha512-1Yowhzjf0ivGMrTIkY9hav5TxobO9qIVqUE41fiCGMGgc3CLlf4MY+9AHmZqBWgDTue0fY9zWjYFVyf6Diuobw==} string-width@4.2.3: resolution: {integrity: sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==} @@ -5694,21 +5687,17 @@ packages: resolution: {integrity: sha512-SlyRoSkdh1dYP0PzclLE7r0M9sgbFKKMFXpFRUMNuKhQSbC6VQIGzq3E0qsfvGJaUFJPGv6Ws1NZ/haTAjfbMA==} engines: {node: '>=12'} - strip-json-comments@3.1.1: - resolution: {integrity: sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==} - engines: {node: '>=8'} - strip-literal@3.1.0: resolution: {integrity: sha512-8r3mkIM/2+PpjHoOtiAW8Rg3jJLHaV7xPwG+YRGrv6FP0wwk/toTpATxWYOW0BKdWwl82VT2tFYi5DlROa0Mxg==} structured-clone-es@2.0.0: resolution: {integrity: sha512-5UuAHmBLXYPCl22xWJrFuGmIhBKQzxISPVz6E7nmTmTcAOpUzlbjKJsRrCE4vADmMQ0dzeCnlWn9XufnAGf76Q==} - stylehacks@7.0.11: - resolution: {integrity: sha512-iODNfhXVLqc5LADs+Y6Oh5wJuK5ZcHbVng8aiK3y9pjMQdc5hLrBW0eFU6FtnpNrE6PoEg/MmFTU4waotj5WNg==} - engines: {node: ^18.12.0 || ^20.9.0 || >=22.0} + stylehacks@8.0.1: + resolution: {integrity: sha512-Gv095oTD0N+BdJALNFDsxZpETHZLTxbOl5RyIO7y6VAE6sR3z0MnV3Nix7N0IATNldNTrkvSASp2KR1Yt526HA==} + engines: {node: ^22.11.0 || ^24.11.0 || >=26.0} peerDependencies: - postcss: ^8.5.13 + postcss: ^8.5.15 sucrase@3.35.1: resolution: {integrity: sha512-DhuTmvZWux4H1UOnWMB3sk0sbaCVOoQZjv8u1rDoTV0HTdGem9hkAZtl4JZy8P2z4Bg0nT+YMeOFyVr4zcG5Tw==} @@ -5719,10 +5708,6 @@ packages: resolution: {integrity: sha512-WZzIx3rC1CvbMDloLsVw0lkZVKJWbrkJ0k1ghKFmcnPrW1+jWbgTkTEWVtD9lMdmI4jZEz40+naBxl1dCUhXXw==} engines: {node: '>=14.16'} - superjson@2.2.6: - resolution: {integrity: sha512-H+ue8Zo4vJmV2nRjpx86P35lzwDT3nItnIsocgumgr0hHMQ+ZGq5vrERg9kJBo5AWGmxZDhzDo+WVIJqkB0cGA==} - engines: {node: '>=16'} - supports-color@10.2.2: resolution: {integrity: sha512-SS+jx45GF1QjgEXQx4NJZV9ImqmO2NPz5FNsIHrsDjh2YsHnawpan7SNQ1o8NuhrbHZy9AZhIoCUiCeaW/C80g==} engines: {node: '>=18'} @@ -5735,8 +5720,8 @@ packages: resolution: {integrity: sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==} engines: {node: '>= 0.4'} - svgo@4.0.1: - resolution: {integrity: sha512-XDpWUOPC6FEibaLzjfe0ucaV0YrOjYotGJO1WpF0Zd+n6ZGEQUsSugaoLq9QkEZtAfQIxT42UChcssDVPP3+/w==} + svgo@4.0.2: + resolution: {integrity: sha512-ekx94z1rRc5LDi6oSUaeRnYhd0UOJxdtQCL2rF8xpWxD3TPAsISWOrxezqGovqS38GRZOdpDfvQe3ts6F7nsng==} engines: {node: '>=16'} hasBin: true @@ -5756,22 +5741,18 @@ packages: engines: {node: '>=14.0.0'} hasBin: true - tapable@2.3.3: - resolution: {integrity: sha512-uxc/zpqFg6x7C8vOE7lh6Lbda8eEL9zmVm/PLeTPBRhh1xCgdWaQ+J1CUieGpIfm2HdtsUpRv+HshiasBMcc6A==} - engines: {node: '>=6'} - tar-stream@3.2.0: resolution: {integrity: sha512-ojzvCvVaNp6aOTFmG7jaRD0meowIAuPc3cMMhSgKiVWws1GyHbGd/xvnyuRKcKlMpt3qvxx6r0hreCNITP9hIg==} - tar@7.5.15: - resolution: {integrity: sha512-dzGK0boVlC4W5QFuQN1EFSl3bIDYsk7Tj40U6eIBnK2k/8ml7TZ5agbI5j5+qnoVcAA+rNtBml8SEiLxZpNqRQ==} + tar@7.5.20: + resolution: {integrity: sha512-9FcyK4PA6+WbzlTM9WhQm6vB5W7cP7dUiPsv1g7YDwEQnQ1CGpK3MGlKk/ITVWMk05kHZuBhmVhiv8LZoy/PFQ==} engines: {node: '>=18'} teex@1.0.1: resolution: {integrity: sha512-eYE6iEI62Ni1H8oIa7KlDU6uQBtqr4Eajni3wX7rpfXD8ysFx8z0+dri+KWEPWpBsxXfxu58x/0jvTVT1ekOSg==} - terser@5.48.0: - resolution: {integrity: sha512-J/9An6vs9Us6wKRriSFXBWdRZapREHqFzdNUKk0pmu804EMR6dr6winwo7e5JDxN4xahxQsuysyYFwlwj4XN/Q==} + terser@5.49.0: + resolution: {integrity: sha512-SNiDnXyHSrxVcIOtVbULzcTmniUiwcV7Nwdyj1twVubeTmbjoa8p69KKDpfkdoOavuM4/GRm1+ykI8qqnavHoA==} engines: {node: '>=10'} hasBin: true @@ -5798,12 +5779,12 @@ packages: tinybench@2.9.0: resolution: {integrity: sha512-0+DUvqWMValLmha6lr4kD8iAMK1HzV0/aKnCtWb9v9641TnP/MFb7Pc2bxoxQjTXAErryXVgUOfv2YqNllqGeg==} - tinyclip@0.1.13: - resolution: {integrity: sha512-8OqlXQ35euK9+e7L68u8UwcODxkHoIkjbGsgXuARKNyQ5G6xt8nw1YPeMbxMLgCPFkToU+UEK5j05t2t8edKpQ==} + tinyclip@0.1.15: + resolution: {integrity: sha512-uo33abH+Ays0xYaDysoBt494Hb3hsEczMpcC0MwFl773pazORx4fmvKhclhR1wonUbB6vvpRsvVMwnhfqeMc+A==} engines: {node: ^16.14.0 || >= 17.3.0} - tinyexec@1.2.3: - resolution: {integrity: sha512-g62dB+w1/OEFnPvmX0yd/HnetYITOL+1nJW7kitOycOeAvmbWC/nu0fwmmQ/kupNojqExzyC/T++pST/jRJ2mQ==} + tinyexec@1.2.4: + resolution: {integrity: sha512-SHf/r48b7vOrjve9PxJo3MN5v5yuyjHvdUcrQffT3WXMUfnGmHDVbC4k3sHJaJTgZCwpUplIaAo5ANtMyp3YHg==} engines: {node: '>=18'} tinyglobby@0.2.17: @@ -5853,8 +5834,8 @@ packages: resolution: {integrity: sha512-LxhtAkPDTkVCMQjt2h6eBVY28KCjikZqZfMcC15YBeNjkgUpdCfBu5HoiOTDu86v6smE8yOjyEktJ8hlbANHQA==} engines: {node: '>=0.6.x'} - tsx@4.22.3: - resolution: {integrity: sha512-mdoNxBC/cSQObGGVQ5Bpn5i+yv7j68gk3Nfm3wFjcJg3Z0Mix9jzAFfP12prmm5eVGmDKtp0yyArrs0Q+8gZHg==} + tsx@4.23.1: + resolution: {integrity: sha512-GQHnkIfxyx1wYCOS/wonik5MVRZU9hi1TEZmzGZSCJB1y9YgoZ8H6itNE/u4suE+yLmOzuE4E5S4TZ/ZX2wcWQ==} engines: {node: '>=18.0.0'} hasBin: true @@ -5862,8 +5843,8 @@ packages: resolution: {integrity: sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==} engines: {node: '>= 0.8.0'} - type-fest@5.6.0: - resolution: {integrity: sha512-8ZiHFm91orbSAe2PSAiSVBVko18pbhbiB3U9GglSzF/zCGkR+rxpHx6sEMCUm4kxY4LjDIUGgCfUMtwfZfjfUA==} + type-fest@5.8.0: + resolution: {integrity: sha512-YGYEVz3Fm5iy/AybuA0oyNFq7H4CgQNfRp/qfe8nurE1kuCeNm3/vfm9X4Mtl+qLyaKJUh5xrFZwogr41SMjYA==} engines: {node: '>=20'} type-is@1.6.18: @@ -5881,8 +5862,8 @@ packages: ufo@1.6.4: resolution: {integrity: sha512-JFNbkD1Svwe0KvGi8GOeLcP4kAWQ609twvCdcHxq1oSL8svv39ZuSvajcD8B+5D0eL4+s1Is2D/O6KN3qcTeRA==} - ultrahtml@1.6.0: - resolution: {integrity: sha512-R9fBn90VTJrqqLDwyMph+HGne8eqY1iPfYhPzZrvKpIfwkWZbcYlfpsb8B9dTvBfpy1/hqAD7Wi8EKfP9e8zdw==} + ultrahtml@1.7.0: + resolution: {integrity: sha512-2xRd0VHoAQE4M+vF/DvFFB7pUV0ZxTW1TLi7lHQWnF/Sb5TPeEUV/l+hxcNnGO00ZXGnR0voCMmYRKQf+rvJ2g==} uncrypto@0.1.3: resolution: {integrity: sha512-Ql87qFHB3s/De2ClA9e0gsnS6zXG27SkTiSJwjCc9MebbfapQfuPzumMIUMi38ezPZVNFcHI9sUIepeQfw8J8Q==} @@ -5890,14 +5871,40 @@ packages: unctx@2.5.0: resolution: {integrity: sha512-p+Rz9x0R7X+CYDkT+Xg8/GhpcShTlU8n+cf9OtOEf7zEQsNcCZO1dPKNRDqvUTaq+P32PMMkxWHwfrxkqfqAYg==} - undici-types@7.24.6: - resolution: {integrity: sha512-WRNW+sJgj5OBN4/0JpHFqtqzhpbnV0GuB+OozA9gCL7a993SmU+1JBZCzLNxYsbMfIeDL+lTsphD5jN5N+n0zg==} + unctx@3.0.0: + resolution: {integrity: sha512-DoXdZVeyi2jyEsn86i8MO5RTItm1kffUkH9/+DQORn3Q688AMOy2551CIl6AdGL2UpwD675wtbNOl75wIQN/uA==} + peerDependencies: + magic-string: '>=0.30.21' + oxc-parser: '>=0.140.0' + rolldown: ^1.1.5 + unplugin: ^3.3.0 + peerDependenciesMeta: + magic-string: + optional: true + oxc-parser: + optional: true + rolldown: + optional: true + unplugin: + optional: true + + undici-types@8.3.0: + resolution: {integrity: sha512-j375ScV60dom+YkPFIfTLcOiPxkN/buHz5GobjLhixFuANaNs3C9l4GmrWqejgXWJ7BbJcFYpTEUkS1Ge8bpZQ==} + + undici@8.7.0: + resolution: {integrity: sha512-N7iQtfyLhIMOFgQubvmLV26svHpO0bqKnAiWotTQCVKCmWrcGbBotPuW1x+xwYZ2VHdSTVUfPQQnlEt1/LouTQ==} + engines: {node: '>=22.19.0'} unenv@2.0.0-rc.24: resolution: {integrity: sha512-i7qRCmY42zmCwnYlh9H2SvLEypEFGye5iRmEMKjcGi7zk9UquigRjFtTLz0TYqr0ZGLZhaMHl/foy1bZR+Cwlw==} - unhead@2.1.15: - resolution: {integrity: sha512-MCt5T90mCWyr3Z6pUCdM9lVRXoMoVBlL7z7U4CYVIiaDiuzad/UCfLuMqz5MeNmpZUgoBCQnrucJimU7EZR+XA==} + unhead@3.2.1: + resolution: {integrity: sha512-Z7VNRf0QJlRZmwA1p5gsnmKYkjnbvV/CXdJAL+VMDmMF+RS2P4FqLouEhBA6WOuKPe3ZZ8EZgX2zQm7ZkAGDPg==} + peerDependencies: + vite: '>=6.4.2' + peerDependenciesMeta: + vite: + optional: true unicorn-magic@0.3.0: resolution: {integrity: sha512-+QBBXBCvifc56fsbuxZQ6Sic3wqqc3WWaqxs58gvJrcOuN83HGTCwz3oS5phzU9LthRNE9VrJCFCLUgHeeFnfA==} @@ -5907,10 +5914,6 @@ packages: resolution: {integrity: sha512-wH590V9VNgYH9g3lH9wWjTrUoKsjLF6sGLjhR4sH1LWpLmCOH0Zf7PukhDA8BiS7KHe4oPNkcTHqYkj7SOGUOw==} engines: {node: '>=20'} - unimport@5.7.0: - resolution: {integrity: sha512-njnL6sp8lEA8QQbZrt+52p/g4X0rw3bnGGmUcJnt1jeG8+iiqO779aGz0PirCtydAIVcuTBRlJ52F0u46z309Q==} - engines: {node: '>=18.12.0'} - unimport@6.3.0: resolution: {integrity: sha512-M+Dxk5W9WRd+8j56W9tp8lGW/dmMc7g5zj7BWQnEjKQhryBstqsi1V0izb0zHwSkEN8cSYV7K75/bykairV2tA==} engines: {node: '>=18.12.0'} @@ -5927,27 +5930,46 @@ packages: resolution: {integrity: sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==} engines: {node: '>= 10.0.0'} - unplugin-utils@0.3.1: - resolution: {integrity: sha512-5lWVjgi6vuHhJ526bI4nlCOmkCIF3nnfXkCMDeMJrtdvxTs6ZFCM8oNufGTsDbKv/tJ/xj8RpvXjRuPBZJuJog==} + unplugin-utils@0.3.2: + resolution: {integrity: sha512-xVToRh2CTmLk2HnEG7ac4rl1MJTT3RFkpS8B++/SnB0kXvuaavD+n3m/vrzyWQOdJNSZQACnbz01pnppbwV5BA==} engines: {node: '>=20.19.0'} - unplugin-vue-router@0.19.2: - resolution: {integrity: sha512-u5dgLBarxE5cyDK/hzJGfpCTLIAyiTXGlo85COuD4Nssj6G7NxS+i9mhCWz/1p/ud1eMwdcUbTXehQe41jYZUA==} - deprecated: 'Merged into vuejs/router. Migrate: https://router.vuejs.org/guide/migration/v4-to-v5.html' - peerDependencies: - '@vue/compiler-sfc': ^3.5.17 - vue-router: ^4.6.0 - peerDependenciesMeta: - vue-router: - optional: true - unplugin@2.3.11: resolution: {integrity: sha512-5uKD0nqiYVzlmCRs01Fhs2BdkEgBS3SAVP6ndrBsuK42iC2+JHyxM05Rm9G8+5mkmRtzMZGY8Ct5+mliZxU/Ww==} engines: {node: '>=18.12.0'} - unplugin@3.0.0: - resolution: {integrity: sha512-0Mqk3AT2TZCXWKdcoaufeXNukv2mTrEZExeXlHIOZXdqYoHHr4n51pymnwV8x2BOVxwXbK2HLlI7usrqMpycdg==} + unplugin@3.3.0: + resolution: {integrity: sha512-qa66K+crbfyE6JK10GjvbJeRrOsuC/JpbnHctfyp/i4oBTxWOzJfRZyDiOk1PtErMFRu8JhsU/wPvOdBNWe5Rg==} engines: {node: ^20.19.0 || >=22.12.0} + peerDependencies: + '@farmfe/core': '*' + '@rspack/core': '*' + bun-types-no-globals: '*' + esbuild: '*' + rolldown: '*' + rollup: '*' + unloader: '*' + vite: '*' + webpack: '*' + peerDependenciesMeta: + '@farmfe/core': + optional: true + '@rspack/core': + optional: true + bun-types-no-globals: + optional: true + esbuild: + optional: true + rolldown: + optional: true + rollup: + optional: true + unloader: + optional: true + vite: + optional: true + webpack: + optional: true unrouting@0.1.7: resolution: {integrity: sha512-+0hfD+CVWtD636rc5Fn9VEjjTEDhdqgMpbwAuVoUmydSHDaMNiFW93SJG4LV++RoGSEAyvQN5uABAscYpDphpQ==} @@ -6043,6 +6065,14 @@ packages: util-deprecate@1.0.2: resolution: {integrity: sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==} + valibot@1.4.2: + resolution: {integrity: sha512-gjdCvJ6d3RyHAneqxMYMW9QMCwYMb3jpOO0IyHZV1bnRHFBHrX3VkIILt5XYR0WhwHiH7Mty8ovuPZ/O3gamrg==} + peerDependencies: + typescript: '>=5' + peerDependenciesMeta: + typescript: + optional: true + vary@1.1.2: resolution: {integrity: sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==} engines: {node: '>= 0.8'} @@ -6057,16 +6087,16 @@ packages: peerDependencies: vite: ^2.6.0 || ^3.0.0 || ^4.0.0 || ^5.0.0-0 || ^6.0.0-0 || ^7.0.0-0 || ^8.0.0 - vite-node@5.3.0: - resolution: {integrity: sha512-8f20COPYJujc3OKPX6OuyBy3ZIv2det4eRRU4GY1y2MjbeGSUmPjedxg1b72KnTagCofwvZ65ThzjxDW2AtQFQ==} + vite-node@6.0.0: + resolution: {integrity: sha512-oj4PVrT+pDh6GYf5wfUXkcZyekYS8kKPfLPXVl8qe324Ec6l4K2DUKNadRbZ3LQl0qGcDz+PyOo7ZAh00Y+JjQ==} engines: {node: ^20.19.0 || >=22.12.0} hasBin: true - vite-plugin-checker@0.13.0: - resolution: {integrity: sha512-14EkOZmfinVZNxRmg2uCNDwtqGc/33lU/UEJansHgu27+ad+r6mMBf1Xtnq57jGZWiO/xzwtiEKPYsganw7ZFQ==} - engines: {node: '>=16.11'} + vite-plugin-checker@0.14.4: + resolution: {integrity: sha512-Tw0U9UgHIRiZ+Yoe4Gh0RrYoBiCVmO9j4tomVdYr0KUjUsqXMPhqW8ouoSWmOzGp5Iimipbl3bNXZcK7OeP7Qg==} + engines: {node: '>=20.19.0'} peerDependencies: - '@biomejs/biome': '>=1.7' + '@biomejs/biome': '>=2.4.12' eslint: '>=9.39.4' meow: ^13.2.0 || ^14.0.0 optionator: ^0.9.4 @@ -6074,8 +6104,6 @@ packages: stylelint: '>=16.26.1' typescript: '*' vite: '>=5.4.21' - vls: '*' - vti: '*' vue-tsc: ~2.2.10 || ^3.0.0 peerDependenciesMeta: '@biomejs/biome': @@ -6092,10 +6120,6 @@ packages: optional: true typescript: optional: true - vls: - optional: true - vti: - optional: true vue-tsc: optional: true @@ -6115,15 +6139,16 @@ packages: vite: ^6.0.0 || ^7.0.0 || ^8.0.0-0 vue: ^3.5.0 - vite@7.3.3: - resolution: {integrity: sha512-/4XH147Ui7OGTjg3HbdWe5arnZQSbfuRzdr9Ec7TQi5I7R+ir0Rlc9GIvD4v0XZurELqA035KVXJXpR61xhiTA==} + vite@8.1.5: + resolution: {integrity: sha512-7ULLwsCdYx/nRyrpiEwvqb5TFHrMVZyBt+rg/OAXT7rgj/z+DtTDyKFeLAdDkubDVDKD8jOsndmy7m55XcfUsw==} engines: {node: ^20.19.0 || >=22.12.0} hasBin: true peerDependencies: '@types/node': ^20.19.0 || >=22.12.0 + '@vitejs/devtools': ^0.3.0 + esbuild: ^0.27.0 || ^0.28.0 jiti: '>=1.21.0' less: ^4.0.0 - lightningcss: ^1.21.0 sass: ^1.70.0 sass-embedded: ^1.70.0 stylus: '>=0.54.8' @@ -6134,12 +6159,14 @@ packages: peerDependenciesMeta: '@types/node': optional: true + '@vitejs/devtools': + optional: true + esbuild: + optional: true jiti: optional: true less: optional: true - lightningcss: - optional: true sass: optional: true sass-embedded: @@ -6158,20 +6185,20 @@ packages: vitest-environment-nuxt@2.0.0: resolution: {integrity: sha512-zEGFRiCAaRR3fHnqISHKMNTRvCzkQEI1XyFeqNgR2IBD0oYkfZ1rUHwi7C+h3Cns3KPykfB0av1B3MtLEbChDw==} - vitest@4.1.7: - resolution: {integrity: sha512-flYyaFd2CgoCoU+0UKt3pxksgC+S02iTDN0n3LtqaMeXsI9SBcdNujc2k0DeFLzUn/0k538yNjOSdwgCqcrwJA==} + vitest@4.1.10: + resolution: {integrity: sha512-R9jUTe5S4Qb0HCd4TNqpC7oGcrMssMRGXLW80ubjWsW9VH5GF8y1Y0SFLY9AbqSk6nt0PnOx4H4WNJYZ13GUPw==} engines: {node: ^20.0.0 || ^22.0.0 || >=24.0.0} hasBin: true peerDependencies: '@edge-runtime/vm': '*' '@opentelemetry/api': ^1.9.0 '@types/node': ^20.0.0 || ^22.0.0 || >=24.0.0 - '@vitest/browser-playwright': 4.1.7 - '@vitest/browser-preview': 4.1.7 - '@vitest/browser-webdriverio': 4.1.7 - '@vitest/coverage-istanbul': 4.1.7 - '@vitest/coverage-v8': 4.1.7 - '@vitest/ui': 4.1.7 + '@vitest/browser-playwright': 4.1.10 + '@vitest/browser-preview': 4.1.10 + '@vitest/browser-webdriverio': 4.1.10 + '@vitest/coverage-istanbul': 4.1.10 + '@vitest/coverage-v8': 4.1.10 + '@vitest/ui': 4.1.10 happy-dom: '*' jsdom: '*' vite: ^6.0.0 || ^7.0.0 || ^8.0.0 @@ -6202,8 +6229,8 @@ packages: vscode-uri@3.1.0: resolution: {integrity: sha512-/BpdSx+yCQGnCvecbyXdxHDkuk55/G3xwnC0GqY4gmQ3j+A+g8kzzgB4Nk/SINjqn6+waqw3EgbVF2QKExkRxQ==} - vue-bundle-renderer@2.2.0: - resolution: {integrity: sha512-sz/0WEdYH1KfaOm0XaBmRZOWgYTEvUDt6yPYaUzl4E52qzgWLlknaPPTTZmp6benaPTlQAI/hN1x3tAzZygycg==} + vue-bundle-renderer@2.3.1: + resolution: {integrity: sha512-7F4LNMopUw5RgYWo4zCmVUHCc6aQRC6dCKHUYkM/n+fux4AUGdL1x6m5A515WWyFysRRN7cx3hBzVqoisfRfzw==} vue-demi@0.14.10: resolution: {integrity: sha512-nMZBOwuzabUO0nLgIcc6rycZEebF6eeUfaiQx9+WSk8e29IbLvPU9feI6tqW4kTo3hvoYAJkMh8n8D0fuISphg==} @@ -6219,31 +6246,26 @@ packages: vue-devtools-stub@0.1.0: resolution: {integrity: sha512-RutnB7X8c5hjq39NceArgXg28WZtZpGc3+J16ljMiYnFhKvd8hITxSWQSQ5bvldxMDU6gG5mkxl1MTQLXckVSQ==} - vue-eslint-parser@10.4.0: - resolution: {integrity: sha512-Vxi9pJdbN3ZnVGLODVtZ7y4Y2kzAAE2Cm0CZ3ZDRvydVYxZ6VrnBhLikBsRS+dpwj4Jv4UCv21PTEwF5rQ9WXg==} + vue-eslint-parser@10.4.1: + resolution: {integrity: sha512-Gk6gRDj0n/fkRa3C3l0bBheoBckUq/Rs0F/TvMWIS6nzzx67amAViMe9CkNgsP2tXyQONvGiHQESHwFtZ3aYDA==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: eslint: ^8.57.0 || ^9.0.0 || ^10.0.0 - vue-i18n@11.4.4: - resolution: {integrity: sha512-gIbXVSFQV4jcSJxfwdZ5zSZmZ+12CnX0K3vBkRSd6Zn+HSzCp+QwUgPwpD/uN0oKNKI9RzlUXPKVedEuMgNG0A==} + vue-i18n@11.4.6: + resolution: {integrity: sha512-l0gE7Rfy0phCa5ChKYkOq543Wgd39BCK6hkktfr1Ed4D99oRkgPK9ffShASZdeC8OJxGfdWmpYoAaAH6iLEuIg==} engines: {node: '>= 22'} peerDependencies: vue: ^3.0.0 - vue-router@4.6.4: - resolution: {integrity: sha512-Hz9q5sa33Yhduglwz6g9skT8OBPii+4bFn88w6J+J4MfEo4KRRpmiNG/hHHkdbRFlLBOqxN8y8gf2Fb0MTUgVg==} - peerDependencies: - vue: ^3.5.0 - - vue-router@5.1.0: - resolution: {integrity: sha512-HAbiLzLEHQwxPgvsbOJDAwtavszEgLwri6XfyrsPECIFez8+59xc9LofWVdc/HEaSRT822lJ8H9Ns38VVond5g==} + vue-router@5.2.0: + resolution: {integrity: sha512-QAC5i0LEb1GLG0LXDQmHu8L7FX12j0KwU/JTKmLQUJMrn04gQdKP6Du+p0QwpHb3iy71vBlqnHQ8WAfOSAWhqw==} peerDependencies: '@pinia/colada': '>=0.21.2' - '@vue/compiler-sfc': ^3.5.34 - pinia: ^3.0.4 - vite: ^7.0.0 || ^8.0.0 - vue: ^3.5.34 + '@vue/compiler-sfc': ^3.5.34 || ^4.0.0 + pinia: ^3.0.4 || ^4.0.2 + vite: ^7.3.0 || ^8.0.0 + vue: ^3.5.34 || ^4.0.0 peerDependenciesMeta: '@pinia/colada': optional: true @@ -6254,8 +6276,8 @@ packages: vite: optional: true - vue-tsc@3.3.3: - resolution: {integrity: sha512-SWUEG7YRUeDJHT7Xsuhf02elYX2gxPzzAII7OxDAh4KNOr4QHQ0Lls0YfnaO5GNd560CwVa2HTfdqmA5MqvRqQ==} + vue-tsc@3.3.7: + resolution: {integrity: sha512-+C+rgD49wAQ5bUTl2sp5a8Bzg4YoldMNXM+g7CFe604MYcQ8PrZPMQhIjJSzKXtPBCa+C5ayMipqjbA7splekQ==} hasBin: true peerDependencies: typescript: '>=5.0.0' @@ -6266,8 +6288,8 @@ packages: apexcharts: '>=5.10.0' vue: '>=3.0.0' - vue@3.5.35: - resolution: {integrity: sha512-cx89fnr+0kVGHiNFG6y6s0bdjypJRFNZn6x3WPstNdQR1bi1mbB7h4v5IBGTsPJU3nK1+0Iqj3Zf+hZWMieR4Q==} + vue@3.5.40: + resolution: {integrity: sha512-+8PJ4SJXdn/cHGImF4CKdxlWHIN5Dkt7DoufRREM6h6uVCx2m7QxgcEQmmzyOK8A9mcafg7sFbJFYsdFVubTig==} peerDependencies: typescript: '*' peerDependenciesMeta: @@ -6317,8 +6339,8 @@ packages: wrappy@1.0.2: resolution: {integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==} - ws@8.21.0: - resolution: {integrity: sha512-Vsp28b7DRcimFQvrqu2Wek3z1iYxDCWqHYB8Qsnk/S4RfaCQzPGPyBNuVjJV3cd6UiKtUtp6sNM77gWvzcCH+g==} + ws@8.21.1: + resolution: {integrity: sha512-+0NTnW77fFN/DjQi6k/Sq/Yvk4Sgajw7urW8V+asjXnRgDs9gyGkdb7EzgfhA4goXsRIZKE28fzIXBHEzhuiWw==} engines: {node: '>=10.0.0'} peerDependencies: bufferutil: ^4.0.1 @@ -6365,8 +6387,8 @@ packages: resolution: {integrity: sha512-rwu/ClNdSMpkSrUb+d6BRsSkLUq1fmfsY6TOpYzTwvwkg1/NRG85KBy3kq++A8LKQwX6lsu+aWad+2khvuXrqw==} engines: {node: ^20.19.0 || ^22.12.0 || >=23} - yargs@17.7.2: - resolution: {integrity: sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==} + yargs@17.7.3: + resolution: {integrity: sha512-GZtjxm/J/4TSxuL3FNYjCmLktBTnIw/rVmKSIyKeYAZpmJB2ig9VauCC5xsa82GNKVKDAqpOn3KVzNt0zmrU0g==} engines: {node: '>=12'} yargs@18.0.0: @@ -6404,13 +6426,13 @@ snapshots: '@antfu/install-pkg@1.1.0': dependencies: - package-manager-detector: 1.6.0 - tinyexec: 1.2.3 + package-manager-detector: 1.7.0 + tinyexec: 1.2.4 '@apidevtools/json-schema-ref-parser@14.2.1(@types/json-schema@7.0.15)': dependencies: '@types/json-schema': 7.0.15 - js-yaml: 4.1.1 + js-yaml: 4.3.0 '@babel/code-frame@7.29.7': dependencies: @@ -6420,20 +6442,20 @@ snapshots: '@babel/compat-data@7.29.7': {} - '@babel/core@7.29.7': + '@babel/core@7.29.7(supports-color@10.2.2)': dependencies: '@babel/code-frame': 7.29.7 '@babel/generator': 7.29.7 '@babel/helper-compilation-targets': 7.29.7 - '@babel/helper-module-transforms': 7.29.7(@babel/core@7.29.7) + '@babel/helper-module-transforms': 7.29.7(@babel/core@7.29.7(supports-color@10.2.2))(supports-color@10.2.2) '@babel/helpers': 7.29.7 '@babel/parser': 7.29.7 '@babel/template': 7.29.7 - '@babel/traverse': 7.29.7 + '@babel/traverse': 7.29.7(supports-color@10.2.2) '@babel/types': 7.29.7 '@jridgewell/remapping': 2.3.5 convert-source-map: 2.0.0 - debug: 4.4.3 + debug: 4.4.3(supports-color@10.2.2) gensync: 1.0.0-beta.2 json5: 2.2.3 semver: 6.3.1 @@ -6448,10 +6470,10 @@ snapshots: '@jridgewell/trace-mapping': 0.3.31 jsesc: 3.1.0 - '@babel/generator@8.0.0-rc.6': + '@babel/generator@8.0.0': dependencies: - '@babel/parser': 8.0.0-rc.6 - '@babel/types': 8.0.0-rc.6 + '@babel/parser': 8.0.4 + '@babel/types': 8.0.4 '@jridgewell/gen-mapping': 0.3.13 '@jridgewell/trace-mapping': 0.3.31 '@types/jsesc': 2.5.1 @@ -6465,45 +6487,45 @@ snapshots: dependencies: '@babel/compat-data': 7.29.7 '@babel/helper-validator-option': 7.29.7 - browserslist: 4.28.2 + browserslist: 4.28.6 lru-cache: 5.1.1 semver: 6.3.1 - '@babel/helper-create-class-features-plugin@7.29.7(@babel/core@7.29.7)': + '@babel/helper-create-class-features-plugin@7.29.7(@babel/core@7.29.7(supports-color@10.2.2))(supports-color@10.2.2)': dependencies: - '@babel/core': 7.29.7 + '@babel/core': 7.29.7(supports-color@10.2.2) '@babel/helper-annotate-as-pure': 7.29.7 - '@babel/helper-member-expression-to-functions': 7.29.7 + '@babel/helper-member-expression-to-functions': 7.29.7(supports-color@10.2.2) '@babel/helper-optimise-call-expression': 7.29.7 - '@babel/helper-replace-supers': 7.29.7(@babel/core@7.29.7) - '@babel/helper-skip-transparent-expression-wrappers': 7.29.7 - '@babel/traverse': 7.29.7 + '@babel/helper-replace-supers': 7.29.7(@babel/core@7.29.7(supports-color@10.2.2))(supports-color@10.2.2) + '@babel/helper-skip-transparent-expression-wrappers': 7.29.7(supports-color@10.2.2) + '@babel/traverse': 7.29.7(supports-color@10.2.2) semver: 6.3.1 transitivePeerDependencies: - supports-color '@babel/helper-globals@7.29.7': {} - '@babel/helper-member-expression-to-functions@7.29.7': + '@babel/helper-member-expression-to-functions@7.29.7(supports-color@10.2.2)': dependencies: - '@babel/traverse': 7.29.7 + '@babel/traverse': 7.29.7(supports-color@10.2.2) '@babel/types': 7.29.7 transitivePeerDependencies: - supports-color - '@babel/helper-module-imports@7.29.7': + '@babel/helper-module-imports@7.29.7(supports-color@10.2.2)': dependencies: - '@babel/traverse': 7.29.7 + '@babel/traverse': 7.29.7(supports-color@10.2.2) '@babel/types': 7.29.7 transitivePeerDependencies: - supports-color - '@babel/helper-module-transforms@7.29.7(@babel/core@7.29.7)': + '@babel/helper-module-transforms@7.29.7(@babel/core@7.29.7(supports-color@10.2.2))(supports-color@10.2.2)': dependencies: - '@babel/core': 7.29.7 - '@babel/helper-module-imports': 7.29.7 + '@babel/core': 7.29.7(supports-color@10.2.2) + '@babel/helper-module-imports': 7.29.7(supports-color@10.2.2) '@babel/helper-validator-identifier': 7.29.7 - '@babel/traverse': 7.29.7 + '@babel/traverse': 7.29.7(supports-color@10.2.2) transitivePeerDependencies: - supports-color @@ -6513,29 +6535,29 @@ snapshots: '@babel/helper-plugin-utils@7.29.7': {} - '@babel/helper-replace-supers@7.29.7(@babel/core@7.29.7)': + '@babel/helper-replace-supers@7.29.7(@babel/core@7.29.7(supports-color@10.2.2))(supports-color@10.2.2)': dependencies: - '@babel/core': 7.29.7 - '@babel/helper-member-expression-to-functions': 7.29.7 + '@babel/core': 7.29.7(supports-color@10.2.2) + '@babel/helper-member-expression-to-functions': 7.29.7(supports-color@10.2.2) '@babel/helper-optimise-call-expression': 7.29.7 - '@babel/traverse': 7.29.7 + '@babel/traverse': 7.29.7(supports-color@10.2.2) transitivePeerDependencies: - supports-color - '@babel/helper-skip-transparent-expression-wrappers@7.29.7': + '@babel/helper-skip-transparent-expression-wrappers@7.29.7(supports-color@10.2.2)': dependencies: - '@babel/traverse': 7.29.7 + '@babel/traverse': 7.29.7(supports-color@10.2.2) '@babel/types': 7.29.7 transitivePeerDependencies: - supports-color '@babel/helper-string-parser@7.29.7': {} - '@babel/helper-string-parser@8.0.0-rc.6': {} + '@babel/helper-string-parser@8.0.0': {} '@babel/helper-validator-identifier@7.29.7': {} - '@babel/helper-validator-identifier@8.0.0-rc.6': {} + '@babel/helper-validator-identifier@8.0.4': {} '@babel/helper-validator-option@7.29.7': {} @@ -6548,28 +6570,28 @@ snapshots: dependencies: '@babel/types': 7.29.7 - '@babel/parser@8.0.0-rc.6': + '@babel/parser@8.0.4': dependencies: - '@babel/types': 8.0.0-rc.6 + '@babel/types': 8.0.4 - '@babel/plugin-syntax-jsx@7.29.7(@babel/core@7.29.7)': + '@babel/plugin-syntax-jsx@7.29.7(@babel/core@7.29.7(supports-color@10.2.2))': dependencies: - '@babel/core': 7.29.7 + '@babel/core': 7.29.7(supports-color@10.2.2) '@babel/helper-plugin-utils': 7.29.7 - '@babel/plugin-syntax-typescript@7.29.7(@babel/core@7.29.7)': + '@babel/plugin-syntax-typescript@7.29.7(@babel/core@7.29.7(supports-color@10.2.2))': dependencies: - '@babel/core': 7.29.7 + '@babel/core': 7.29.7(supports-color@10.2.2) '@babel/helper-plugin-utils': 7.29.7 - '@babel/plugin-transform-typescript@7.29.7(@babel/core@7.29.7)': + '@babel/plugin-transform-typescript@7.29.7(@babel/core@7.29.7(supports-color@10.2.2))(supports-color@10.2.2)': dependencies: - '@babel/core': 7.29.7 + '@babel/core': 7.29.7(supports-color@10.2.2) '@babel/helper-annotate-as-pure': 7.29.7 - '@babel/helper-create-class-features-plugin': 7.29.7(@babel/core@7.29.7) + '@babel/helper-create-class-features-plugin': 7.29.7(@babel/core@7.29.7(supports-color@10.2.2))(supports-color@10.2.2) '@babel/helper-plugin-utils': 7.29.7 - '@babel/helper-skip-transparent-expression-wrappers': 7.29.7 - '@babel/plugin-syntax-typescript': 7.29.7(@babel/core@7.29.7) + '@babel/helper-skip-transparent-expression-wrappers': 7.29.7(supports-color@10.2.2) + '@babel/plugin-syntax-typescript': 7.29.7(@babel/core@7.29.7(supports-color@10.2.2)) transitivePeerDependencies: - supports-color @@ -6579,7 +6601,7 @@ snapshots: '@babel/parser': 7.29.7 '@babel/types': 7.29.7 - '@babel/traverse@7.29.7': + '@babel/traverse@7.29.7(supports-color@10.2.2)': dependencies: '@babel/code-frame': 7.29.7 '@babel/generator': 7.29.7 @@ -6587,7 +6609,7 @@ snapshots: '@babel/parser': 7.29.7 '@babel/template': 7.29.7 '@babel/types': 7.29.7 - debug: 4.4.3 + debug: 4.4.3(supports-color@10.2.2) transitivePeerDependencies: - supports-color @@ -6596,16 +6618,15 @@ snapshots: '@babel/helper-string-parser': 7.29.7 '@babel/helper-validator-identifier': 7.29.7 - '@babel/types@8.0.0-rc.6': + '@babel/types@8.0.4': dependencies: - '@babel/helper-string-parser': 8.0.0-rc.6 - '@babel/helper-validator-identifier': 8.0.0-rc.6 + '@babel/helper-string-parser': 8.0.0 + '@babel/helper-validator-identifier': 8.0.4 '@bcoe/v8-coverage@1.0.2': {} - '@bomb.sh/tab@0.0.15(cac@6.7.14)(citty@0.2.2)': + '@bomb.sh/tab@0.0.19(citty@0.2.2)': optionalDependencies: - cac: 6.7.14 citty: 0.2.2 '@clack/core@1.2.0': @@ -6613,7 +6634,7 @@ snapshots: fast-wrap-ansi: 0.1.6 sisteransi: 1.0.5 - '@clack/core@1.4.0': + '@clack/core@1.4.3': dependencies: fast-wrap-ansi: 0.2.2 sisteransi: 1.0.5 @@ -6625,38 +6646,69 @@ snapshots: fast-wrap-ansi: 0.1.6 sisteransi: 1.0.5 - '@clack/prompts@1.5.0': + '@clack/prompts@1.7.0': dependencies: - '@clack/core': 1.4.0 + '@clack/core': 1.4.3 fast-string-width: 3.0.2 fast-wrap-ansi: 0.2.2 sisteransi: 1.0.5 '@cloudflare/kv-asset-handler@0.4.2': {} - '@colordx/core@5.4.3': {} + '@colordx/core@5.5.0': {} - '@csstools/selector-resolve-nested@3.1.0(postcss-selector-parser@7.1.1)': + '@csstools/selector-resolve-nested@3.1.0(postcss-selector-parser@7.1.4)': dependencies: - postcss-selector-parser: 7.1.1 + postcss-selector-parser: 7.1.4 - '@csstools/selector-specificity@5.0.0(postcss-selector-parser@7.1.1)': + '@csstools/selector-specificity@5.0.0(postcss-selector-parser@7.1.4)': dependencies: - postcss-selector-parser: 7.1.1 + postcss-selector-parser: 7.1.4 + + '@devframes/hub@0.5.4(devframe@0.5.4(crossws@0.4.10(srvx@0.11.22))(esbuild@0.28.1)(rolldown@1.2.0)(rollup@4.62.2)(typescript@6.0.3)(vite@8.1.5(@types/node@26.1.1)(esbuild@0.28.1)(jiti@1.21.7)(terser@5.49.0)(tsx@4.23.1)(yaml@2.9.0)))(esbuild@0.28.1)(rolldown@1.2.0)(rollup@4.62.2)(vite@8.1.5(@types/node@26.1.1)(esbuild@0.28.1)(jiti@1.21.7)(terser@5.49.0)(tsx@4.23.1)(yaml@2.9.0))': + dependencies: + birpc: 4.0.0 + devframe: 0.5.4(crossws@0.4.10(srvx@0.11.22))(esbuild@0.28.1)(rolldown@1.2.0)(rollup@4.62.2)(typescript@6.0.3)(vite@8.1.5(@types/node@26.1.1)(esbuild@0.28.1)(jiti@1.21.7)(terser@5.49.0)(tsx@4.23.1)(yaml@2.9.0)) + nostics: 0.2.0(esbuild@0.28.1)(rolldown@1.2.0)(rollup@4.62.2)(vite@8.1.5(@types/node@26.1.1)(esbuild@0.28.1)(jiti@1.21.7)(terser@5.49.0)(tsx@4.23.1)(yaml@2.9.0)) + pathe: 2.0.3 + perfect-debounce: 2.1.0 + tinyexec: 1.2.4 + transitivePeerDependencies: + - '@farmfe/core' + - '@rspack/core' + - bun-types-no-globals + - esbuild + - rolldown + - rollup + - unloader + - vite + - webpack '@drizzle-team/brocli@0.10.2': {} - '@dxup/nuxt@0.4.1(magicast@0.5.3)(typescript@6.0.3)': + '@dxup/nuxt@0.5.3(esbuild@0.28.1)(magicast@0.5.3)(oxc-parser@0.140.0)(rolldown@1.2.0)(rollup@4.62.2)(vite@8.1.5(@types/node@26.1.1)(esbuild@0.28.1)(jiti@1.21.7)(terser@5.49.0)(tsx@4.23.1)(yaml@2.9.0))': dependencies: '@dxup/unimport': 0.1.2 - '@nuxt/kit': 4.4.6(magicast@0.5.3) + '@nuxt/kit': 4.5.0(magic-string@0.30.21)(magicast@0.5.3)(oxc-parser@0.140.0)(rolldown@1.2.0)(unplugin@3.3.0(esbuild@0.28.1)(rolldown@1.2.0)(rollup@4.62.2)(vite@8.1.5(@types/node@26.1.1)(esbuild@0.28.1)(jiti@1.21.7)(terser@5.49.0)(tsx@4.23.1)(yaml@2.9.0))) + '@vue/compiler-dom': 3.5.40 chokidar: 5.0.0 + knitwork: 1.3.0 + magic-string: 0.30.21 pathe: 2.0.3 tinyglobby: 0.2.17 - optionalDependencies: - typescript: 6.0.3 + unplugin: 3.3.0(esbuild@0.28.1)(rolldown@1.2.0)(rollup@4.62.2)(vite@8.1.5(@types/node@26.1.1)(esbuild@0.28.1)(jiti@1.21.7)(terser@5.49.0)(tsx@4.23.1)(yaml@2.9.0)) transitivePeerDependencies: + - '@farmfe/core' + - '@rspack/core' + - bun-types-no-globals + - esbuild - magicast + - oxc-parser + - rolldown + - rollup + - unloader + - vite + - webpack '@dxup/unimport@0.1.2': {} @@ -6666,23 +6718,50 @@ snapshots: tslib: 2.8.1 optional: true + '@emnapi/core@1.11.1': + dependencies: + '@emnapi/wasi-threads': 1.2.2 + tslib: 2.8.1 + optional: true + + '@emnapi/core@1.11.2': + dependencies: + '@emnapi/wasi-threads': 1.2.2 + tslib: 2.8.1 + optional: true + '@emnapi/runtime@1.10.0': dependencies: tslib: 2.8.1 optional: true + '@emnapi/runtime@1.11.1': + dependencies: + tslib: 2.8.1 + optional: true + + '@emnapi/runtime@1.11.2': + dependencies: + tslib: 2.8.1 + optional: true + '@emnapi/wasi-threads@1.2.1': dependencies: tslib: 2.8.1 optional: true + '@emnapi/wasi-threads@1.2.2': + dependencies: + tslib: 2.8.1 + optional: true + '@epic-web/invariant@1.0.0': {} - '@es-joy/jsdoccomment@0.86.0': + '@es-joy/jsdoccomment@0.88.0': dependencies: '@types/estree': 1.0.9 - '@typescript-eslint/types': 8.60.0 - comment-parser: 1.4.6 + '@typescript-eslint/types': 8.64.0 + comment-parser: 1.4.7 esquery: 1.7.0 jsdoc-type-pratt-parser: 7.2.0 @@ -6701,10 +6780,7 @@ snapshots: '@esbuild/aix-ppc64@0.25.12': optional: true - '@esbuild/aix-ppc64@0.27.7': - optional: true - - '@esbuild/aix-ppc64@0.28.0': + '@esbuild/aix-ppc64@0.28.1': optional: true '@esbuild/android-arm64@0.18.20': @@ -6713,10 +6789,7 @@ snapshots: '@esbuild/android-arm64@0.25.12': optional: true - '@esbuild/android-arm64@0.27.7': - optional: true - - '@esbuild/android-arm64@0.28.0': + '@esbuild/android-arm64@0.28.1': optional: true '@esbuild/android-arm@0.18.20': @@ -6725,10 +6798,7 @@ snapshots: '@esbuild/android-arm@0.25.12': optional: true - '@esbuild/android-arm@0.27.7': - optional: true - - '@esbuild/android-arm@0.28.0': + '@esbuild/android-arm@0.28.1': optional: true '@esbuild/android-x64@0.18.20': @@ -6737,10 +6807,7 @@ snapshots: '@esbuild/android-x64@0.25.12': optional: true - '@esbuild/android-x64@0.27.7': - optional: true - - '@esbuild/android-x64@0.28.0': + '@esbuild/android-x64@0.28.1': optional: true '@esbuild/darwin-arm64@0.18.20': @@ -6749,10 +6816,7 @@ snapshots: '@esbuild/darwin-arm64@0.25.12': optional: true - '@esbuild/darwin-arm64@0.27.7': - optional: true - - '@esbuild/darwin-arm64@0.28.0': + '@esbuild/darwin-arm64@0.28.1': optional: true '@esbuild/darwin-x64@0.18.20': @@ -6761,10 +6825,7 @@ snapshots: '@esbuild/darwin-x64@0.25.12': optional: true - '@esbuild/darwin-x64@0.27.7': - optional: true - - '@esbuild/darwin-x64@0.28.0': + '@esbuild/darwin-x64@0.28.1': optional: true '@esbuild/freebsd-arm64@0.18.20': @@ -6773,10 +6834,7 @@ snapshots: '@esbuild/freebsd-arm64@0.25.12': optional: true - '@esbuild/freebsd-arm64@0.27.7': - optional: true - - '@esbuild/freebsd-arm64@0.28.0': + '@esbuild/freebsd-arm64@0.28.1': optional: true '@esbuild/freebsd-x64@0.18.20': @@ -6785,10 +6843,7 @@ snapshots: '@esbuild/freebsd-x64@0.25.12': optional: true - '@esbuild/freebsd-x64@0.27.7': - optional: true - - '@esbuild/freebsd-x64@0.28.0': + '@esbuild/freebsd-x64@0.28.1': optional: true '@esbuild/linux-arm64@0.18.20': @@ -6797,10 +6852,7 @@ snapshots: '@esbuild/linux-arm64@0.25.12': optional: true - '@esbuild/linux-arm64@0.27.7': - optional: true - - '@esbuild/linux-arm64@0.28.0': + '@esbuild/linux-arm64@0.28.1': optional: true '@esbuild/linux-arm@0.18.20': @@ -6809,10 +6861,7 @@ snapshots: '@esbuild/linux-arm@0.25.12': optional: true - '@esbuild/linux-arm@0.27.7': - optional: true - - '@esbuild/linux-arm@0.28.0': + '@esbuild/linux-arm@0.28.1': optional: true '@esbuild/linux-ia32@0.18.20': @@ -6821,10 +6870,7 @@ snapshots: '@esbuild/linux-ia32@0.25.12': optional: true - '@esbuild/linux-ia32@0.27.7': - optional: true - - '@esbuild/linux-ia32@0.28.0': + '@esbuild/linux-ia32@0.28.1': optional: true '@esbuild/linux-loong64@0.18.20': @@ -6833,10 +6879,7 @@ snapshots: '@esbuild/linux-loong64@0.25.12': optional: true - '@esbuild/linux-loong64@0.27.7': - optional: true - - '@esbuild/linux-loong64@0.28.0': + '@esbuild/linux-loong64@0.28.1': optional: true '@esbuild/linux-mips64el@0.18.20': @@ -6845,10 +6888,7 @@ snapshots: '@esbuild/linux-mips64el@0.25.12': optional: true - '@esbuild/linux-mips64el@0.27.7': - optional: true - - '@esbuild/linux-mips64el@0.28.0': + '@esbuild/linux-mips64el@0.28.1': optional: true '@esbuild/linux-ppc64@0.18.20': @@ -6857,10 +6897,7 @@ snapshots: '@esbuild/linux-ppc64@0.25.12': optional: true - '@esbuild/linux-ppc64@0.27.7': - optional: true - - '@esbuild/linux-ppc64@0.28.0': + '@esbuild/linux-ppc64@0.28.1': optional: true '@esbuild/linux-riscv64@0.18.20': @@ -6869,10 +6906,7 @@ snapshots: '@esbuild/linux-riscv64@0.25.12': optional: true - '@esbuild/linux-riscv64@0.27.7': - optional: true - - '@esbuild/linux-riscv64@0.28.0': + '@esbuild/linux-riscv64@0.28.1': optional: true '@esbuild/linux-s390x@0.18.20': @@ -6881,10 +6915,7 @@ snapshots: '@esbuild/linux-s390x@0.25.12': optional: true - '@esbuild/linux-s390x@0.27.7': - optional: true - - '@esbuild/linux-s390x@0.28.0': + '@esbuild/linux-s390x@0.28.1': optional: true '@esbuild/linux-x64@0.18.20': @@ -6893,19 +6924,13 @@ snapshots: '@esbuild/linux-x64@0.25.12': optional: true - '@esbuild/linux-x64@0.27.7': - optional: true - - '@esbuild/linux-x64@0.28.0': + '@esbuild/linux-x64@0.28.1': optional: true '@esbuild/netbsd-arm64@0.25.12': optional: true - '@esbuild/netbsd-arm64@0.27.7': - optional: true - - '@esbuild/netbsd-arm64@0.28.0': + '@esbuild/netbsd-arm64@0.28.1': optional: true '@esbuild/netbsd-x64@0.18.20': @@ -6914,19 +6939,13 @@ snapshots: '@esbuild/netbsd-x64@0.25.12': optional: true - '@esbuild/netbsd-x64@0.27.7': - optional: true - - '@esbuild/netbsd-x64@0.28.0': + '@esbuild/netbsd-x64@0.28.1': optional: true '@esbuild/openbsd-arm64@0.25.12': optional: true - '@esbuild/openbsd-arm64@0.27.7': - optional: true - - '@esbuild/openbsd-arm64@0.28.0': + '@esbuild/openbsd-arm64@0.28.1': optional: true '@esbuild/openbsd-x64@0.18.20': @@ -6935,19 +6954,13 @@ snapshots: '@esbuild/openbsd-x64@0.25.12': optional: true - '@esbuild/openbsd-x64@0.27.7': - optional: true - - '@esbuild/openbsd-x64@0.28.0': + '@esbuild/openbsd-x64@0.28.1': optional: true '@esbuild/openharmony-arm64@0.25.12': optional: true - '@esbuild/openharmony-arm64@0.27.7': - optional: true - - '@esbuild/openharmony-arm64@0.28.0': + '@esbuild/openharmony-arm64@0.28.1': optional: true '@esbuild/sunos-x64@0.18.20': @@ -6956,10 +6969,7 @@ snapshots: '@esbuild/sunos-x64@0.25.12': optional: true - '@esbuild/sunos-x64@0.27.7': - optional: true - - '@esbuild/sunos-x64@0.28.0': + '@esbuild/sunos-x64@0.28.1': optional: true '@esbuild/win32-arm64@0.18.20': @@ -6968,10 +6978,7 @@ snapshots: '@esbuild/win32-arm64@0.25.12': optional: true - '@esbuild/win32-arm64@0.27.7': - optional: true - - '@esbuild/win32-arm64@0.28.0': + '@esbuild/win32-arm64@0.28.1': optional: true '@esbuild/win32-ia32@0.18.20': @@ -6980,10 +6987,7 @@ snapshots: '@esbuild/win32-ia32@0.25.12': optional: true - '@esbuild/win32-ia32@0.27.7': - optional: true - - '@esbuild/win32-ia32@0.28.0': + '@esbuild/win32-ia32@0.28.1': optional: true '@esbuild/win32-x64@0.18.20': @@ -6992,116 +6996,100 @@ snapshots: '@esbuild/win32-x64@0.25.12': optional: true - '@esbuild/win32-x64@0.27.7': + '@esbuild/win32-x64@0.28.1': optional: true - '@esbuild/win32-x64@0.28.0': - optional: true - - '@eschricht/nuxt-color-mode@1.2.0(magicast@0.5.3)': + '@eschricht/nuxt-color-mode@1.2.0(magic-string@1.0.0)(magicast@0.5.3)(oxc-parser@0.140.0)(rolldown@1.2.0)(unplugin@3.3.0(esbuild@0.28.1)(rolldown@1.2.0)(rollup@4.62.2)(vite@8.1.5(@types/node@26.1.1)(esbuild@0.28.1)(jiti@1.21.7)(terser@5.49.0)(tsx@4.23.1)(yaml@2.9.0)))': dependencies: - '@nuxt/kit': 4.4.6(magicast@0.5.3) + '@nuxt/kit': 4.5.0(magic-string@1.0.0)(magicast@0.5.3)(oxc-parser@0.140.0)(rolldown@1.2.0)(unplugin@3.3.0(esbuild@0.28.1)(rolldown@1.2.0)(rollup@4.62.2)(vite@8.1.5(@types/node@26.1.1)(esbuild@0.28.1)(jiti@1.21.7)(terser@5.49.0)(tsx@4.23.1)(yaml@2.9.0))) transitivePeerDependencies: + - magic-string - magicast + - oxc-parser + - rolldown + - unplugin - '@eslint-community/eslint-utils@4.9.1(eslint@9.39.4(jiti@1.21.7))': + '@eslint-community/eslint-utils@4.9.1(eslint@10.7.0(jiti@1.21.7)(supports-color@10.2.2))': dependencies: - eslint: 9.39.4(jiti@1.21.7) + eslint: 10.7.0(jiti@1.21.7)(supports-color@10.2.2) eslint-visitor-keys: 3.4.3 '@eslint-community/regexpp@4.12.2': {} - '@eslint/compat@2.1.0(eslint@9.39.4(jiti@1.21.7))': + '@eslint/compat@2.1.0(eslint@10.7.0(jiti@1.21.7)(supports-color@10.2.2))': dependencies: '@eslint/core': 1.2.1 optionalDependencies: - eslint: 9.39.4(jiti@1.21.7) + eslint: 10.7.0(jiti@1.21.7)(supports-color@10.2.2) - '@eslint/config-array@0.21.2': + '@eslint/config-array@0.23.5(supports-color@10.2.2)': dependencies: - '@eslint/object-schema': 2.1.7 - debug: 4.4.3 - minimatch: 3.1.5 + '@eslint/object-schema': 3.0.5 + debug: 4.4.3(supports-color@10.2.2) + minimatch: 10.2.5 transitivePeerDependencies: - supports-color - '@eslint/config-helpers@0.4.2': - dependencies: - '@eslint/core': 0.17.0 - '@eslint/config-helpers@0.5.5': dependencies: '@eslint/core': 1.2.1 - '@eslint/config-inspector@1.5.0(eslint@9.39.4(jiti@1.21.7))': + '@eslint/config-helpers@0.6.0': dependencies: - ansis: 4.3.0 - bundle-require: 5.1.0(esbuild@0.27.7) + '@eslint/core': 1.2.1 + + '@eslint/config-inspector@3.1.0(eslint@10.7.0(jiti@1.21.7)(supports-color@10.2.2))(srvx@0.11.22)(typescript@6.0.3)': + dependencies: + ansis: 4.3.1 cac: 7.0.0 chokidar: 5.0.0 - esbuild: 0.27.7 - eslint: 9.39.4(jiti@1.21.7) - h3: 1.15.11 + devframe: 0.6.2(srvx@0.11.22)(typescript@6.0.3) + eslint: 10.7.0(jiti@1.21.7)(supports-color@10.2.2) + jiti: 2.7.0 tinyglobby: 0.2.17 - ws: 8.21.0 transitivePeerDependencies: - - bufferutil - - utf-8-validate - - '@eslint/core@0.17.0': - dependencies: - '@types/json-schema': 7.0.15 + - '@modelcontextprotocol/sdk' + - srvx + - typescript '@eslint/core@1.2.1': dependencies: '@types/json-schema': 7.0.15 - '@eslint/eslintrc@3.3.5': + '@eslint/js@10.0.1(eslint@10.7.0(jiti@1.21.7)(supports-color@10.2.2))': + optionalDependencies: + eslint: 10.7.0(jiti@1.21.7)(supports-color@10.2.2) + + '@eslint/object-schema@3.0.5': {} + + '@eslint/plugin-kit@0.7.2': dependencies: - ajv: 6.15.0 - debug: 4.4.3 - espree: 10.4.0 - globals: 14.0.0 - ignore: 5.3.2 - import-fresh: 3.3.1 - js-yaml: 4.1.1 - minimatch: 3.1.5 - strip-json-comments: 3.1.1 - transitivePeerDependencies: - - supports-color - - '@eslint/js@9.39.4': {} - - '@eslint/object-schema@2.1.7': {} - - '@eslint/plugin-kit@0.4.1': - dependencies: - '@eslint/core': 0.17.0 + '@eslint/core': 1.2.1 levn: 0.4.1 - '@floating-ui/core@1.7.5': + '@floating-ui/core@1.8.0': dependencies: - '@floating-ui/utils': 0.2.11 + '@floating-ui/utils': 0.2.12 - '@floating-ui/dom@1.7.6': + '@floating-ui/dom@1.8.0': dependencies: - '@floating-ui/core': 1.7.5 - '@floating-ui/utils': 0.2.11 + '@floating-ui/core': 1.8.0 + '@floating-ui/utils': 0.2.12 - '@floating-ui/utils@0.2.11': {} + '@floating-ui/utils@0.2.12': {} - '@floating-ui/vue@1.1.11(vue@3.5.35(typescript@6.0.3))': + '@floating-ui/vue@1.1.11(vue@3.5.40(typescript@6.0.3))': dependencies: - '@floating-ui/dom': 1.7.6 - '@floating-ui/utils': 0.2.11 - vue-demi: 0.14.10(vue@3.5.35(typescript@6.0.3)) + '@floating-ui/dom': 1.8.0 + '@floating-ui/utils': 0.2.12 + vue-demi: 0.14.10(vue@3.5.40(typescript@6.0.3)) transitivePeerDependencies: - '@vue/composition-api' - vue - '@heroicons/vue@2.2.0(vue@3.5.35(typescript@6.0.3))': + '@heroicons/vue@2.2.0(vue@3.5.40(typescript@6.0.3))': dependencies: - vue: 3.5.35(typescript@6.0.3) + vue: 3.5.40(typescript@6.0.3) '@humanfs/core@0.19.2': dependencies: @@ -7127,11 +7115,11 @@ snapshots: dependencies: '@swc/helpers': 0.5.23 - '@intlify/bundle-utils@11.2.3(vue-i18n@11.4.4(vue@3.5.35(typescript@6.0.3)))': + '@intlify/bundle-utils@11.2.4(vue-i18n@11.4.6(vue@3.5.40(typescript@6.0.3)))': dependencies: - '@intlify/message-compiler': 11.4.4 - '@intlify/shared': 11.4.4 - acorn: 8.16.0 + '@intlify/message-compiler': 11.4.6 + '@intlify/shared': 11.4.6 + acorn: 8.17.0 esbuild: 0.25.12 escodegen: 2.1.0 estree-walker: 2.0.2 @@ -7139,54 +7127,54 @@ snapshots: source-map-js: 1.2.1 yaml-eslint-parser: 1.3.2 optionalDependencies: - vue-i18n: 11.4.4(vue@3.5.35(typescript@6.0.3)) + vue-i18n: 11.4.6(vue@3.5.40(typescript@6.0.3)) - '@intlify/core-base@11.4.4': + '@intlify/core-base@11.4.6': dependencies: - '@intlify/devtools-types': 11.4.4 - '@intlify/message-compiler': 11.4.4 - '@intlify/shared': 11.4.4 + '@intlify/devtools-types': 11.4.6 + '@intlify/message-compiler': 11.4.6 + '@intlify/shared': 11.4.6 - '@intlify/core@11.4.4': + '@intlify/core@11.4.6': dependencies: - '@intlify/core-base': 11.4.4 - '@intlify/shared': 11.4.4 + '@intlify/core-base': 11.4.6 + '@intlify/shared': 11.4.6 - '@intlify/devtools-types@11.4.4': + '@intlify/devtools-types@11.4.6': dependencies: - '@intlify/core-base': 11.4.4 - '@intlify/shared': 11.4.4 + '@intlify/core-base': 11.4.6 + '@intlify/shared': 11.4.6 '@intlify/h3@0.7.4': dependencies: - '@intlify/core': 11.4.4 + '@intlify/core': 11.4.6 '@intlify/utils': 0.13.0 - '@intlify/message-compiler@11.4.4': + '@intlify/message-compiler@11.4.6': dependencies: - '@intlify/shared': 11.4.4 + '@intlify/shared': 11.4.6 source-map-js: 1.2.1 - '@intlify/shared@11.4.4': {} + '@intlify/shared@11.4.6': {} - '@intlify/unplugin-vue-i18n@11.2.3(@vue/compiler-dom@3.5.35)(eslint@9.39.4(jiti@1.21.7))(rollup@4.60.4)(typescript@6.0.3)(vite@7.3.3(@types/node@25.9.1)(jiti@1.21.7)(terser@5.48.0)(tsx@4.22.3)(yaml@2.9.0))(vue-i18n@11.4.4(vue@3.5.35(typescript@6.0.3)))(vue@3.5.35(typescript@6.0.3))': + '@intlify/unplugin-vue-i18n@11.2.4(@vue/compiler-dom@3.5.40)(eslint@10.7.0(jiti@1.21.7)(supports-color@10.2.2))(rollup@4.62.2)(supports-color@10.2.2)(typescript@6.0.3)(vite@8.1.5(@types/node@26.1.1)(esbuild@0.28.1)(jiti@1.21.7)(terser@5.49.0)(tsx@4.23.1)(yaml@2.9.0))(vue-i18n@11.4.6(vue@3.5.40(typescript@6.0.3)))(vue@3.5.40(typescript@6.0.3))': dependencies: - '@eslint-community/eslint-utils': 4.9.1(eslint@9.39.4(jiti@1.21.7)) - '@intlify/bundle-utils': 11.2.3(vue-i18n@11.4.4(vue@3.5.35(typescript@6.0.3))) - '@intlify/shared': 11.4.4 - '@intlify/vue-i18n-extensions': 8.0.0(@intlify/shared@11.4.4)(@vue/compiler-dom@3.5.35)(vue-i18n@11.4.4(vue@3.5.35(typescript@6.0.3)))(vue@3.5.35(typescript@6.0.3)) - '@rollup/pluginutils': 5.4.0(rollup@4.60.4) - '@typescript-eslint/scope-manager': 8.60.0 - '@typescript-eslint/typescript-estree': 8.60.0(typescript@6.0.3) - debug: 4.4.3 + '@eslint-community/eslint-utils': 4.9.1(eslint@10.7.0(jiti@1.21.7)(supports-color@10.2.2)) + '@intlify/bundle-utils': 11.2.4(vue-i18n@11.4.6(vue@3.5.40(typescript@6.0.3))) + '@intlify/shared': 11.4.6 + '@intlify/vue-i18n-extensions': 8.0.0(@intlify/shared@11.4.6)(@vue/compiler-dom@3.5.40)(vue-i18n@11.4.6(vue@3.5.40(typescript@6.0.3)))(vue@3.5.40(typescript@6.0.3)) + '@rollup/pluginutils': 5.4.0(rollup@4.62.2) + '@typescript-eslint/scope-manager': 8.64.0 + '@typescript-eslint/typescript-estree': 8.64.0(supports-color@10.2.2)(typescript@6.0.3) + debug: 4.4.3(supports-color@10.2.2) fast-glob: 3.3.3 pathe: 2.0.3 picocolors: 1.1.1 unplugin: 2.3.11 - vue: 3.5.35(typescript@6.0.3) + vue: 3.5.40(typescript@6.0.3) optionalDependencies: - vite: 7.3.3(@types/node@25.9.1)(jiti@1.21.7)(terser@5.48.0)(tsx@4.22.3)(yaml@2.9.0) - vue-i18n: 11.4.4(vue@3.5.35(typescript@6.0.3)) + vite: 8.1.5(@types/node@26.1.1)(esbuild@0.28.1)(jiti@1.21.7)(terser@5.49.0)(tsx@4.23.1)(yaml@2.9.0) + vue-i18n: 11.4.6(vue@3.5.40(typescript@6.0.3)) transitivePeerDependencies: - '@vue/compiler-dom' - eslint @@ -7198,14 +7186,14 @@ snapshots: '@intlify/utils@0.14.1': {} - '@intlify/vue-i18n-extensions@8.0.0(@intlify/shared@11.4.4)(@vue/compiler-dom@3.5.35)(vue-i18n@11.4.4(vue@3.5.35(typescript@6.0.3)))(vue@3.5.35(typescript@6.0.3))': + '@intlify/vue-i18n-extensions@8.0.0(@intlify/shared@11.4.6)(@vue/compiler-dom@3.5.40)(vue-i18n@11.4.6(vue@3.5.40(typescript@6.0.3)))(vue@3.5.40(typescript@6.0.3))': dependencies: '@babel/parser': 7.29.7 optionalDependencies: - '@intlify/shared': 11.4.4 - '@vue/compiler-dom': 3.5.35 - vue: 3.5.35(typescript@6.0.3) - vue-i18n: 11.4.4(vue@3.5.35(typescript@6.0.3)) + '@intlify/shared': 11.4.6 + '@vue/compiler-dom': 3.5.40 + vue: 3.5.40(typescript@6.0.3) + vue-i18n: 11.4.6(vue@3.5.40(typescript@6.0.3)) '@ioredis/commands@1.10.0': {} @@ -7246,9 +7234,9 @@ snapshots: '@jridgewell/resolve-uri': 3.1.2 '@jridgewell/sourcemap-codec': 1.5.5 - '@koa/router@12.0.2': + '@koa/router@12.0.2(supports-color@10.2.2)': dependencies: - debug: 4.4.3 + debug: 4.4.3(supports-color@10.2.2) http-errors: 2.0.1 koa-compose: 4.1.0 methods: 1.1.2 @@ -7256,28 +7244,28 @@ snapshots: transitivePeerDependencies: - supports-color - '@kwsites/file-exists@1.1.1': + '@kwsites/file-exists@1.1.1(supports-color@10.2.2)': dependencies: - debug: 4.4.3 + debug: 4.4.3(supports-color@10.2.2) transitivePeerDependencies: - supports-color '@kwsites/promise-deferred@1.1.1': {} - '@libsql/client@0.17.3': + '@libsql/client@0.17.4': dependencies: - '@libsql/core': 0.17.3 + '@libsql/core': 0.17.4 '@libsql/hrana-client': 0.10.0 - js-base64: 3.7.8 + js-base64: 3.9.1 libsql: 0.5.29 promise-limit: 2.7.0 transitivePeerDependencies: - bufferutil - utf-8-validate - '@libsql/core@0.17.3': + '@libsql/core@0.17.4': dependencies: - js-base64: 3.7.8 + js-base64: 3.9.1 '@libsql/darwin-arm64@0.5.29': optional: true @@ -7288,7 +7276,7 @@ snapshots: '@libsql/hrana-client@0.10.0': dependencies: '@libsql/isomorphic-ws': 0.1.5 - js-base64: 3.7.8 + js-base64: 3.9.1 transitivePeerDependencies: - bufferutil - utf-8-validate @@ -7296,7 +7284,7 @@ snapshots: '@libsql/isomorphic-ws@0.1.5': dependencies: '@types/ws': 8.18.1 - ws: 8.21.0 + ws: 8.21.1 transitivePeerDependencies: - bufferutil - utf-8-validate @@ -7322,30 +7310,44 @@ snapshots: '@libsql/win32-x64-msvc@0.5.29': optional: true - '@mapbox/node-pre-gyp@2.0.3': + '@mapbox/node-pre-gyp@2.0.3(supports-color@10.2.2)': dependencies: consola: 3.4.2 detect-libc: 2.1.2 - https-proxy-agent: 7.0.6 + https-proxy-agent: 7.0.6(supports-color@10.2.2) node-fetch: 2.7.0 nopt: 8.1.0 - semver: 7.8.1 - tar: 7.5.15 + semver: 7.8.5 + tar: 7.5.20 transitivePeerDependencies: - encoding - supports-color - '@miyaneee/rollup-plugin-json5@1.2.0(rollup@4.60.4)': + '@miyaneee/rollup-plugin-json5@1.2.0(rollup@4.62.2)': dependencies: - '@rollup/pluginutils': 5.4.0(rollup@4.60.4) + '@rollup/pluginutils': 5.4.0(rollup@4.62.2) json5: 2.2.3 - rollup: 4.60.4 + rollup: 4.62.2 - '@napi-rs/wasm-runtime@1.1.4(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0)': + '@napi-rs/wasm-runtime@1.1.6(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0)': dependencies: '@emnapi/core': 1.10.0 '@emnapi/runtime': 1.10.0 - '@tybys/wasm-util': 0.10.2 + '@tybys/wasm-util': 0.10.3 + optional: true + + '@napi-rs/wasm-runtime@1.1.6(@emnapi/core@1.11.1)(@emnapi/runtime@1.11.1)': + dependencies: + '@emnapi/core': 1.11.1 + '@emnapi/runtime': 1.11.1 + '@tybys/wasm-util': 0.10.3 + optional: true + + '@napi-rs/wasm-runtime@1.1.6(@emnapi/core@1.11.2)(@emnapi/runtime@1.11.2)': + dependencies: + '@emnapi/core': 1.11.2 + '@emnapi/runtime': 1.11.2 + '@tybys/wasm-util': 0.10.3 optional: true '@neon-rs/load@0.0.4': {} @@ -7364,38 +7366,38 @@ snapshots: '@nodelib/fs.scandir': 2.1.5 fastq: 1.20.1 - '@nuxt/cli@3.35.2(@nuxt/schema@3.21.6)(cac@6.7.14)(magicast@0.5.3)': + '@nuxt/cli@3.37.0(@nuxt/schema@4.5.0)(magicast@0.5.3)(supports-color@10.2.2)': dependencies: - '@bomb.sh/tab': 0.0.15(cac@6.7.14)(citty@0.2.2) - '@clack/prompts': 1.5.0 + '@bomb.sh/tab': 0.0.19(citty@0.2.2) + '@clack/prompts': 1.7.0 c12: 3.3.4(magicast@0.5.3) citty: 0.2.2 confbox: 0.2.4 consola: 3.4.2 - debug: 4.4.3 + debug: 4.4.3(supports-color@10.2.2) defu: 6.1.7 - exsolve: 1.0.8 - fuse.js: 7.4.0 + exsolve: 1.1.0 + fuse.js: 7.5.0 fzf: 0.5.2 - giget: 3.2.0 + giget: 3.3.0 jiti: 2.7.0 - listhen: 1.10.0(srvx@0.11.16) - nypm: 0.6.6 + listhen: 1.10.0(srvx@0.11.22) + nypm: 0.6.8 ofetch: 1.5.1 ohash: 2.0.11 pathe: 2.0.3 perfect-debounce: 2.1.0 pkg-types: 2.3.1 scule: 1.3.0 - semver: 7.8.1 - srvx: 0.11.16 - std-env: 4.1.0 - tinyclip: 0.1.13 - tinyexec: 1.2.3 + semver: 7.8.5 + srvx: 0.11.22 + std-env: 4.2.0 + tinyclip: 0.1.15 + tinyexec: 1.2.4 ufo: 1.6.4 youch: 4.1.1 optionalDependencies: - '@nuxt/schema': 3.21.6 + '@nuxt/schema': 4.5.0 transitivePeerDependencies: - cac - commander @@ -7404,40 +7406,44 @@ snapshots: '@nuxt/devalue@2.0.2': {} - '@nuxt/devtools-kit@2.7.0(magicast@0.5.3)(vite@7.3.3(@types/node@25.9.1)(jiti@1.21.7)(terser@5.48.0)(tsx@4.22.3)(yaml@2.9.0))': + '@nuxt/devtools-kit@2.7.0(magicast@0.5.3)(vite@8.1.5(@types/node@26.1.1)(esbuild@0.28.1)(jiti@1.21.7)(terser@5.49.0)(tsx@4.23.1)(yaml@2.9.0))': dependencies: - '@nuxt/kit': 3.21.6(magicast@0.5.3) + '@nuxt/kit': 3.21.9(magicast@0.5.3) execa: 8.0.1 - vite: 7.3.3(@types/node@25.9.1)(jiti@1.21.7)(terser@5.48.0)(tsx@4.22.3)(yaml@2.9.0) + vite: 8.1.5(@types/node@26.1.1)(esbuild@0.28.1)(jiti@1.21.7)(terser@5.49.0)(tsx@4.23.1)(yaml@2.9.0) transitivePeerDependencies: - magicast - '@nuxt/devtools-kit@3.2.4(magicast@0.5.3)(vite@7.3.3(@types/node@25.9.1)(jiti@1.21.7)(terser@5.48.0)(tsx@4.22.3)(yaml@2.9.0))': + '@nuxt/devtools-kit@3.2.4(magic-string@1.0.0)(magicast@0.5.3)(oxc-parser@0.140.0)(rolldown@1.2.0)(unplugin@3.3.0(esbuild@0.28.1)(rolldown@1.2.0)(rollup@4.62.2)(vite@8.1.5(@types/node@26.1.1)(esbuild@0.28.1)(jiti@1.21.7)(terser@5.49.0)(tsx@4.23.1)(yaml@2.9.0)))(vite@8.1.5(@types/node@26.1.1)(esbuild@0.28.1)(jiti@1.21.7)(terser@5.49.0)(tsx@4.23.1)(yaml@2.9.0))': dependencies: - '@nuxt/kit': 4.4.6(magicast@0.5.3) + '@nuxt/kit': 4.5.0(magic-string@1.0.0)(magicast@0.5.3)(oxc-parser@0.140.0)(rolldown@1.2.0)(unplugin@3.3.0(esbuild@0.28.1)(rolldown@1.2.0)(rollup@4.62.2)(vite@8.1.5(@types/node@26.1.1)(esbuild@0.28.1)(jiti@1.21.7)(terser@5.49.0)(tsx@4.23.1)(yaml@2.9.0))) execa: 8.0.1 - vite: 7.3.3(@types/node@25.9.1)(jiti@1.21.7)(terser@5.48.0)(tsx@4.22.3)(yaml@2.9.0) + vite: 8.1.5(@types/node@26.1.1)(esbuild@0.28.1)(jiti@1.21.7)(terser@5.49.0)(tsx@4.23.1)(yaml@2.9.0) transitivePeerDependencies: + - magic-string - magicast + - oxc-parser + - rolldown + - unplugin '@nuxt/devtools-wizard@3.2.4': dependencies: - '@clack/prompts': 1.5.0 + '@clack/prompts': 1.7.0 consola: 3.4.2 diff: 8.0.4 execa: 8.0.1 magicast: 0.5.3 pathe: 2.0.3 pkg-types: 2.3.1 - semver: 7.8.1 + semver: 7.8.5 - '@nuxt/devtools@3.2.4(vite@7.3.3(@types/node@25.9.1)(jiti@1.21.7)(terser@5.48.0)(tsx@4.22.3)(yaml@2.9.0))(vue@3.5.35(typescript@6.0.3))': + '@nuxt/devtools@3.2.4(magic-string@1.0.0)(oxc-parser@0.140.0)(rolldown@1.2.0)(supports-color@10.2.2)(unplugin@3.3.0(esbuild@0.28.1)(rolldown@1.2.0)(rollup@4.62.2)(vite@8.1.5(@types/node@26.1.1)(esbuild@0.28.1)(jiti@1.21.7)(terser@5.49.0)(tsx@4.23.1)(yaml@2.9.0)))(vite@8.1.5(@types/node@26.1.1)(esbuild@0.28.1)(jiti@1.21.7)(terser@5.49.0)(tsx@4.23.1)(yaml@2.9.0))(vue@3.5.40(typescript@6.0.3))': dependencies: - '@nuxt/devtools-kit': 3.2.4(magicast@0.5.3)(vite@7.3.3(@types/node@25.9.1)(jiti@1.21.7)(terser@5.48.0)(tsx@4.22.3)(yaml@2.9.0)) + '@nuxt/devtools-kit': 3.2.4(magic-string@1.0.0)(magicast@0.5.3)(oxc-parser@0.140.0)(rolldown@1.2.0)(unplugin@3.3.0(esbuild@0.28.1)(rolldown@1.2.0)(rollup@4.62.2)(vite@8.1.5(@types/node@26.1.1)(esbuild@0.28.1)(jiti@1.21.7)(terser@5.49.0)(tsx@4.23.1)(yaml@2.9.0)))(vite@8.1.5(@types/node@26.1.1)(esbuild@0.28.1)(jiti@1.21.7)(terser@5.49.0)(tsx@4.23.1)(yaml@2.9.0)) '@nuxt/devtools-wizard': 3.2.4 - '@nuxt/kit': 4.4.6(magicast@0.5.3) - '@vue/devtools-core': 8.1.2(vue@3.5.35(typescript@6.0.3)) - '@vue/devtools-kit': 8.1.2 + '@nuxt/kit': 4.5.0(magic-string@1.0.0)(magicast@0.5.3)(oxc-parser@0.140.0)(rolldown@1.2.0)(unplugin@3.3.0(esbuild@0.28.1)(rolldown@1.2.0)(rollup@4.62.2)(vite@8.1.5(@types/node@26.1.1)(esbuild@0.28.1)(jiti@1.21.7)(terser@5.49.0)(tsx@4.23.1)(yaml@2.9.0))) + '@vue/devtools-core': 8.1.5(vue@3.5.40(typescript@6.0.3)) + '@vue/devtools-kit': 8.1.5 birpc: 4.0.0 consola: 3.4.2 destr: 2.0.5 @@ -7448,54 +7454,58 @@ snapshots: hookable: 6.1.1 image-meta: 0.2.2 is-installed-globally: 1.0.0 - launch-editor: 2.14.0 + launch-editor: 2.14.1 local-pkg: 1.2.1 magicast: 0.5.3 - nypm: 0.6.6 + nypm: 0.6.8 ohash: 2.0.11 pathe: 2.0.3 perfect-debounce: 2.1.0 pkg-types: 2.3.1 - semver: 7.8.1 - simple-git: 3.36.0 + semver: 7.8.5 + simple-git: 3.36.0(supports-color@10.2.2) sirv: 3.0.2 structured-clone-es: 2.0.0 tinyglobby: 0.2.17 - vite: 7.3.3(@types/node@25.9.1)(jiti@1.21.7)(terser@5.48.0)(tsx@4.22.3)(yaml@2.9.0) - vite-plugin-inspect: 11.4.1(@nuxt/kit@4.4.6(magicast@0.5.3))(vite@7.3.3(@types/node@25.9.1)(jiti@1.21.7)(terser@5.48.0)(tsx@4.22.3)(yaml@2.9.0)) - vite-plugin-vue-tracer: 1.4.0(vite@7.3.3(@types/node@25.9.1)(jiti@1.21.7)(terser@5.48.0)(tsx@4.22.3)(yaml@2.9.0))(vue@3.5.35(typescript@6.0.3)) + vite: 8.1.5(@types/node@26.1.1)(esbuild@0.28.1)(jiti@1.21.7)(terser@5.49.0)(tsx@4.23.1)(yaml@2.9.0) + vite-plugin-inspect: 11.4.1(@nuxt/kit@4.5.0(magic-string@1.0.0)(magicast@0.5.3)(oxc-parser@0.140.0)(rolldown@1.2.0)(unplugin@3.3.0(esbuild@0.28.1)(rolldown@1.2.0)(rollup@4.62.2)(vite@8.1.5(@types/node@26.1.1)(esbuild@0.28.1)(jiti@1.21.7)(terser@5.49.0)(tsx@4.23.1)(yaml@2.9.0))))(vite@8.1.5(@types/node@26.1.1)(esbuild@0.28.1)(jiti@1.21.7)(terser@5.49.0)(tsx@4.23.1)(yaml@2.9.0)) + vite-plugin-vue-tracer: 1.4.0(vite@8.1.5(@types/node@26.1.1)(esbuild@0.28.1)(jiti@1.21.7)(terser@5.49.0)(tsx@4.23.1)(yaml@2.9.0))(vue@3.5.40(typescript@6.0.3)) which: 6.0.1 - ws: 8.21.0 + ws: 8.21.1 transitivePeerDependencies: - bufferutil + - magic-string + - oxc-parser + - rolldown - supports-color + - unplugin - utf-8-validate - vue - '@nuxt/eslint-config@1.15.2(@typescript-eslint/utils@8.60.0(eslint@9.39.4(jiti@1.21.7))(typescript@6.0.3))(@vue/compiler-sfc@3.5.35)(eslint@9.39.4(jiti@1.21.7))(typescript@6.0.3)': + '@nuxt/eslint-config@1.16.0(@typescript-eslint/utils@8.64.0(eslint@10.7.0(jiti@1.21.7)(supports-color@10.2.2))(supports-color@10.2.2)(typescript@6.0.3))(@vue/compiler-sfc@3.5.40)(eslint@10.7.0(jiti@1.21.7)(supports-color@10.2.2))(supports-color@10.2.2)(typescript@6.0.3)': dependencies: '@antfu/install-pkg': 1.1.0 - '@clack/prompts': 1.5.0 - '@eslint/js': 9.39.4 - '@nuxt/eslint-plugin': 1.15.2(eslint@9.39.4(jiti@1.21.7))(typescript@6.0.3) - '@stylistic/eslint-plugin': 5.10.0(eslint@9.39.4(jiti@1.21.7)) - '@typescript-eslint/eslint-plugin': 8.60.0(@typescript-eslint/parser@8.60.0(eslint@9.39.4(jiti@1.21.7))(typescript@6.0.3))(eslint@9.39.4(jiti@1.21.7))(typescript@6.0.3) - '@typescript-eslint/parser': 8.60.0(eslint@9.39.4(jiti@1.21.7))(typescript@6.0.3) - eslint: 9.39.4(jiti@1.21.7) - eslint-config-flat-gitignore: 2.3.0(eslint@9.39.4(jiti@1.21.7)) + '@clack/prompts': 1.7.0 + '@eslint/js': 10.0.1(eslint@10.7.0(jiti@1.21.7)(supports-color@10.2.2)) + '@nuxt/eslint-plugin': 1.16.0(eslint@10.7.0(jiti@1.21.7)(supports-color@10.2.2))(supports-color@10.2.2)(typescript@6.0.3) + '@stylistic/eslint-plugin': 5.10.0(eslint@10.7.0(jiti@1.21.7)(supports-color@10.2.2)) + '@typescript-eslint/eslint-plugin': 8.64.0(@typescript-eslint/parser@8.64.0(eslint@10.7.0(jiti@1.21.7)(supports-color@10.2.2))(supports-color@10.2.2)(typescript@6.0.3))(eslint@10.7.0(jiti@1.21.7)(supports-color@10.2.2))(supports-color@10.2.2)(typescript@6.0.3) + '@typescript-eslint/parser': 8.64.0(eslint@10.7.0(jiti@1.21.7)(supports-color@10.2.2))(supports-color@10.2.2)(typescript@6.0.3) + eslint: 10.7.0(jiti@1.21.7)(supports-color@10.2.2) + eslint-config-flat-gitignore: 2.3.0(eslint@10.7.0(jiti@1.21.7)(supports-color@10.2.2)) eslint-flat-config-utils: 3.2.0 - eslint-merge-processors: 2.0.0(eslint@9.39.4(jiti@1.21.7)) - eslint-plugin-import-lite: 0.5.2(eslint@9.39.4(jiti@1.21.7)) - eslint-plugin-import-x: 4.16.2(@typescript-eslint/utils@8.60.0(eslint@9.39.4(jiti@1.21.7))(typescript@6.0.3))(eslint@9.39.4(jiti@1.21.7)) - eslint-plugin-jsdoc: 62.9.0(eslint@9.39.4(jiti@1.21.7)) - eslint-plugin-regexp: 3.1.0(eslint@9.39.4(jiti@1.21.7)) - eslint-plugin-unicorn: 63.0.0(eslint@9.39.4(jiti@1.21.7)) - eslint-plugin-vue: 10.9.1(@stylistic/eslint-plugin@5.10.0(eslint@9.39.4(jiti@1.21.7)))(@typescript-eslint/parser@8.60.0(eslint@9.39.4(jiti@1.21.7))(typescript@6.0.3))(eslint@9.39.4(jiti@1.21.7))(vue-eslint-parser@10.4.0(eslint@9.39.4(jiti@1.21.7))) - eslint-processor-vue-blocks: 2.0.0(@vue/compiler-sfc@3.5.35)(eslint@9.39.4(jiti@1.21.7)) - globals: 17.6.0 + eslint-merge-processors: 2.0.0(eslint@10.7.0(jiti@1.21.7)(supports-color@10.2.2)) + eslint-plugin-import-lite: 0.6.0(eslint@10.7.0(jiti@1.21.7)(supports-color@10.2.2)) + eslint-plugin-import-x: 4.17.1(@typescript-eslint/utils@8.64.0(eslint@10.7.0(jiti@1.21.7)(supports-color@10.2.2))(supports-color@10.2.2)(typescript@6.0.3))(eslint@10.7.0(jiti@1.21.7)(supports-color@10.2.2))(supports-color@10.2.2) + eslint-plugin-jsdoc: 63.2.0(eslint@10.7.0(jiti@1.21.7)(supports-color@10.2.2))(supports-color@10.2.2) + eslint-plugin-regexp: 3.1.1(eslint@10.7.0(jiti@1.21.7)(supports-color@10.2.2)) + eslint-plugin-unicorn: 65.0.1(eslint@10.7.0(jiti@1.21.7)(supports-color@10.2.2)) + eslint-plugin-vue: 10.9.2(@stylistic/eslint-plugin@5.10.0(eslint@10.7.0(jiti@1.21.7)(supports-color@10.2.2)))(@typescript-eslint/parser@8.64.0(eslint@10.7.0(jiti@1.21.7)(supports-color@10.2.2))(supports-color@10.2.2)(typescript@6.0.3))(eslint@10.7.0(jiti@1.21.7)(supports-color@10.2.2))(vue-eslint-parser@10.4.1(eslint@10.7.0(jiti@1.21.7)(supports-color@10.2.2))(supports-color@10.2.2)) + eslint-processor-vue-blocks: 2.0.0(@vue/compiler-sfc@3.5.40)(eslint@10.7.0(jiti@1.21.7)(supports-color@10.2.2)) + globals: 17.7.0 local-pkg: 1.2.1 pathe: 2.0.3 - vue-eslint-parser: 10.4.0(eslint@9.39.4(jiti@1.21.7)) + vue-eslint-parser: 10.4.1(eslint@10.7.0(jiti@1.21.7)(supports-color@10.2.2))(supports-color@10.2.2) transitivePeerDependencies: - '@typescript-eslint/utils' - '@vue/compiler-sfc' @@ -7503,52 +7513,63 @@ snapshots: - supports-color - typescript - '@nuxt/eslint-plugin@1.15.2(eslint@9.39.4(jiti@1.21.7))(typescript@6.0.3)': + '@nuxt/eslint-plugin@1.16.0(eslint@10.7.0(jiti@1.21.7)(supports-color@10.2.2))(supports-color@10.2.2)(typescript@6.0.3)': dependencies: - '@typescript-eslint/types': 8.60.0 - '@typescript-eslint/utils': 8.60.0(eslint@9.39.4(jiti@1.21.7))(typescript@6.0.3) - eslint: 9.39.4(jiti@1.21.7) + '@typescript-eslint/types': 8.64.0 + '@typescript-eslint/utils': 8.64.0(eslint@10.7.0(jiti@1.21.7)(supports-color@10.2.2))(supports-color@10.2.2)(typescript@6.0.3) + eslint: 10.7.0(jiti@1.21.7)(supports-color@10.2.2) transitivePeerDependencies: - supports-color - typescript - '@nuxt/eslint@1.15.2(@typescript-eslint/utils@8.60.0(eslint@9.39.4(jiti@1.21.7))(typescript@6.0.3))(@vue/compiler-sfc@3.5.35)(eslint@9.39.4(jiti@1.21.7))(magicast@0.5.3)(typescript@6.0.3)(vite@7.3.3(@types/node@25.9.1)(jiti@1.21.7)(terser@5.48.0)(tsx@4.22.3)(yaml@2.9.0))': + '@nuxt/eslint@1.16.0(@typescript-eslint/utils@8.64.0(eslint@10.7.0(jiti@1.21.7)(supports-color@10.2.2))(supports-color@10.2.2)(typescript@6.0.3))(@vue/compiler-sfc@3.5.40)(esbuild@0.28.1)(eslint@10.7.0(jiti@1.21.7)(supports-color@10.2.2))(magic-string@1.0.0)(magicast@0.5.3)(oxc-parser@0.140.0)(rolldown@1.2.0)(rollup@4.62.2)(srvx@0.11.22)(supports-color@10.2.2)(typescript@6.0.3)(unplugin@3.3.0(esbuild@0.28.1)(rolldown@1.2.0)(rollup@4.62.2)(vite@8.1.5(@types/node@26.1.1)(esbuild@0.28.1)(jiti@1.21.7)(terser@5.49.0)(tsx@4.23.1)(yaml@2.9.0)))(vite@8.1.5(@types/node@26.1.1)(esbuild@0.28.1)(jiti@1.21.7)(terser@5.49.0)(tsx@4.23.1)(yaml@2.9.0))': dependencies: - '@eslint/config-inspector': 1.5.0(eslint@9.39.4(jiti@1.21.7)) - '@nuxt/devtools-kit': 3.2.4(magicast@0.5.3)(vite@7.3.3(@types/node@25.9.1)(jiti@1.21.7)(terser@5.48.0)(tsx@4.22.3)(yaml@2.9.0)) - '@nuxt/eslint-config': 1.15.2(@typescript-eslint/utils@8.60.0(eslint@9.39.4(jiti@1.21.7))(typescript@6.0.3))(@vue/compiler-sfc@3.5.35)(eslint@9.39.4(jiti@1.21.7))(typescript@6.0.3) - '@nuxt/eslint-plugin': 1.15.2(eslint@9.39.4(jiti@1.21.7))(typescript@6.0.3) - '@nuxt/kit': 4.4.6(magicast@0.5.3) + '@eslint/config-inspector': 3.1.0(eslint@10.7.0(jiti@1.21.7)(supports-color@10.2.2))(srvx@0.11.22)(typescript@6.0.3) + '@nuxt/devtools-kit': 3.2.4(magic-string@1.0.0)(magicast@0.5.3)(oxc-parser@0.140.0)(rolldown@1.2.0)(unplugin@3.3.0(esbuild@0.28.1)(rolldown@1.2.0)(rollup@4.62.2)(vite@8.1.5(@types/node@26.1.1)(esbuild@0.28.1)(jiti@1.21.7)(terser@5.49.0)(tsx@4.23.1)(yaml@2.9.0)))(vite@8.1.5(@types/node@26.1.1)(esbuild@0.28.1)(jiti@1.21.7)(terser@5.49.0)(tsx@4.23.1)(yaml@2.9.0)) + '@nuxt/eslint-config': 1.16.0(@typescript-eslint/utils@8.64.0(eslint@10.7.0(jiti@1.21.7)(supports-color@10.2.2))(supports-color@10.2.2)(typescript@6.0.3))(@vue/compiler-sfc@3.5.40)(eslint@10.7.0(jiti@1.21.7)(supports-color@10.2.2))(supports-color@10.2.2)(typescript@6.0.3) + '@nuxt/eslint-plugin': 1.16.0(eslint@10.7.0(jiti@1.21.7)(supports-color@10.2.2))(supports-color@10.2.2)(typescript@6.0.3) + '@nuxt/kit': 4.5.0(magic-string@1.0.0)(magicast@0.5.3)(oxc-parser@0.140.0)(rolldown@1.2.0)(unplugin@3.3.0(esbuild@0.28.1)(rolldown@1.2.0)(rollup@4.62.2)(vite@8.1.5(@types/node@26.1.1)(esbuild@0.28.1)(jiti@1.21.7)(terser@5.49.0)(tsx@4.23.1)(yaml@2.9.0))) chokidar: 5.0.0 - eslint: 9.39.4(jiti@1.21.7) + eslint: 10.7.0(jiti@1.21.7)(supports-color@10.2.2) eslint-flat-config-utils: 3.2.0 - eslint-typegen: 2.3.1(eslint@9.39.4(jiti@1.21.7)) + eslint-typegen: 2.3.1(eslint@10.7.0(jiti@1.21.7)(supports-color@10.2.2)) find-up: 8.0.0 get-port-please: 3.2.0 mlly: 1.8.2 pathe: 2.0.3 - unimport: 5.7.0 + unimport: 6.3.0(esbuild@0.28.1)(oxc-parser@0.140.0)(rolldown@1.2.0)(rollup@4.62.2)(vite@8.1.5(@types/node@26.1.1)(esbuild@0.28.1)(jiti@1.21.7)(terser@5.49.0)(tsx@4.23.1)(yaml@2.9.0)) transitivePeerDependencies: + - '@farmfe/core' + - '@modelcontextprotocol/sdk' + - '@rspack/core' - '@typescript-eslint/utils' - '@vue/compiler-sfc' - - bufferutil + - bun-types-no-globals + - esbuild - eslint-import-resolver-node - eslint-plugin-format + - magic-string - magicast + - oxc-parser + - rolldown + - rollup + - srvx - supports-color - typescript - - utf-8-validate + - unloader + - unplugin - vite + - webpack - '@nuxt/kit@3.21.6(magicast@0.5.3)': + '@nuxt/kit@3.21.9(magicast@0.5.3)': dependencies: c12: 3.3.4(magicast@0.5.3) consola: 3.4.2 defu: 6.1.7 destr: 2.0.5 errx: 0.1.0 - exsolve: 1.0.8 - ignore: 7.0.5 + exsolve: 1.1.0 + ignore: 7.0.6 jiti: 2.7.0 klona: 2.0.6 knitwork: 1.3.0 @@ -7558,7 +7579,7 @@ snapshots: pkg-types: 2.3.1 rc9: 3.0.1 scule: 1.3.0 - semver: 7.8.1 + semver: 7.8.5 tinyglobby: 0.2.17 ufo: 1.6.4 unctx: 2.5.0 @@ -7566,61 +7587,129 @@ snapshots: transitivePeerDependencies: - magicast - '@nuxt/kit@4.4.6(magicast@0.5.3)': + '@nuxt/kit@4.5.0(magic-string@0.30.21)(magicast@0.5.3)(oxc-parser@0.128.0)(rolldown@1.2.0)(unplugin@3.3.0(esbuild@0.28.1)(rolldown@1.2.0)(rollup@4.62.2)(vite@8.1.5(@types/node@26.1.1)(esbuild@0.28.1)(jiti@1.21.7)(terser@5.49.0)(tsx@4.23.1)(yaml@2.9.0)))': dependencies: c12: 3.3.4(magicast@0.5.3) consola: 3.4.2 defu: 6.1.7 destr: 2.0.5 errx: 0.1.0 - exsolve: 1.0.8 - ignore: 7.0.5 + exsolve: 1.1.0 + ignore: 7.0.6 jiti: 2.7.0 klona: 2.0.6 mlly: 1.8.2 + nostics: 1.2.0 ohash: 2.0.11 pathe: 2.0.3 pkg-types: 2.3.1 rc9: 3.0.1 scule: 1.3.0 - semver: 7.8.1 + semver: 7.8.5 tinyglobby: 0.2.17 ufo: 1.6.4 - unctx: 2.5.0 + unctx: 3.0.0(magic-string@0.30.21)(oxc-parser@0.128.0)(rolldown@1.2.0)(unplugin@3.3.0(esbuild@0.28.1)(rolldown@1.2.0)(rollup@4.62.2)(vite@8.1.5(@types/node@26.1.1)(esbuild@0.28.1)(jiti@1.21.7)(terser@5.49.0)(tsx@4.23.1)(yaml@2.9.0))) untyped: 2.0.0 transitivePeerDependencies: + - magic-string - magicast + - oxc-parser + - rolldown + - unplugin - '@nuxt/nitro-server@3.21.6(@libsql/client@0.17.3)(db0@0.3.4(@libsql/client@0.17.3)(drizzle-orm@0.45.2(@libsql/client@0.17.3)))(drizzle-orm@0.45.2(@libsql/client@0.17.3))(ioredis@5.11.0)(magicast@0.5.3)(nuxt@3.21.6(@libsql/client@0.17.3)(@parcel/watcher@2.5.6)(@types/node@25.9.1)(@vue/compiler-sfc@3.5.35)(cac@6.7.14)(db0@0.3.4(@libsql/client@0.17.3)(drizzle-orm@0.45.2(@libsql/client@0.17.3)))(drizzle-orm@0.45.2(@libsql/client@0.17.3))(eslint@9.39.4(jiti@1.21.7))(ioredis@5.11.0)(magicast@0.5.3)(optionator@0.9.4)(rollup-plugin-visualizer@7.0.1(rollup@4.60.4))(rollup@4.60.4)(srvx@0.11.16)(terser@5.48.0)(tsx@4.22.3)(typescript@6.0.3)(vite@7.3.3(@types/node@25.9.1)(jiti@1.21.7)(terser@5.48.0)(tsx@4.22.3)(yaml@2.9.0))(vue-tsc@3.3.3(typescript@6.0.3))(yaml@2.9.0))(oxc-parser@0.131.0)(srvx@0.11.16)(typescript@6.0.3)': + '@nuxt/kit@4.5.0(magic-string@0.30.21)(magicast@0.5.3)(oxc-parser@0.140.0)(rolldown@1.2.0)(unplugin@3.3.0(esbuild@0.28.1)(rolldown@1.2.0)(rollup@4.62.2)(vite@8.1.5(@types/node@26.1.1)(esbuild@0.28.1)(jiti@1.21.7)(terser@5.49.0)(tsx@4.23.1)(yaml@2.9.0)))': + dependencies: + c12: 3.3.4(magicast@0.5.3) + consola: 3.4.2 + defu: 6.1.7 + destr: 2.0.5 + errx: 0.1.0 + exsolve: 1.1.0 + ignore: 7.0.6 + jiti: 2.7.0 + klona: 2.0.6 + mlly: 1.8.2 + nostics: 1.2.0 + ohash: 2.0.11 + pathe: 2.0.3 + pkg-types: 2.3.1 + rc9: 3.0.1 + scule: 1.3.0 + semver: 7.8.5 + tinyglobby: 0.2.17 + ufo: 1.6.4 + unctx: 3.0.0(magic-string@0.30.21)(oxc-parser@0.140.0)(rolldown@1.2.0)(unplugin@3.3.0(esbuild@0.28.1)(rolldown@1.2.0)(rollup@4.62.2)(vite@8.1.5(@types/node@26.1.1)(esbuild@0.28.1)(jiti@1.21.7)(terser@5.49.0)(tsx@4.23.1)(yaml@2.9.0))) + untyped: 2.0.0 + transitivePeerDependencies: + - magic-string + - magicast + - oxc-parser + - rolldown + - unplugin + + '@nuxt/kit@4.5.0(magic-string@1.0.0)(magicast@0.5.3)(oxc-parser@0.140.0)(rolldown@1.2.0)(unplugin@3.3.0(esbuild@0.28.1)(rolldown@1.2.0)(rollup@4.62.2)(vite@8.1.5(@types/node@26.1.1)(esbuild@0.28.1)(jiti@1.21.7)(terser@5.49.0)(tsx@4.23.1)(yaml@2.9.0)))': + dependencies: + c12: 3.3.4(magicast@0.5.3) + consola: 3.4.2 + defu: 6.1.7 + destr: 2.0.5 + errx: 0.1.0 + exsolve: 1.1.0 + ignore: 7.0.6 + jiti: 2.7.0 + klona: 2.0.6 + mlly: 1.8.2 + nostics: 1.2.0 + ohash: 2.0.11 + pathe: 2.0.3 + pkg-types: 2.3.1 + rc9: 3.0.1 + scule: 1.3.0 + semver: 7.8.5 + tinyglobby: 0.2.17 + ufo: 1.6.4 + unctx: 3.0.0(magic-string@1.0.0)(oxc-parser@0.140.0)(rolldown@1.2.0)(unplugin@3.3.0(esbuild@0.28.1)(rolldown@1.2.0)(rollup@4.62.2)(vite@8.1.5(@types/node@26.1.1)(esbuild@0.28.1)(jiti@1.21.7)(terser@5.49.0)(tsx@4.23.1)(yaml@2.9.0))) + untyped: 2.0.0 + transitivePeerDependencies: + - magic-string + - magicast + - oxc-parser + - rolldown + - unplugin + + '@nuxt/nitro-server@4.5.0(9eae438e634a1a1b52c984bbdcb577a5)': dependencies: '@nuxt/devalue': 2.0.2 - '@nuxt/kit': 3.21.6(magicast@0.5.3) - '@unhead/vue': 2.1.15(vue@3.5.35(typescript@6.0.3)) - '@vue/shared': 3.5.35 + '@nuxt/kit': 4.5.0(magic-string@1.0.0)(magicast@0.5.3)(oxc-parser@0.140.0)(rolldown@1.2.0)(unplugin@3.3.0(esbuild@0.28.1)(rolldown@1.2.0)(rollup@4.62.2)(vite@8.1.5(@types/node@26.1.1)(esbuild@0.28.1)(jiti@1.21.7)(terser@5.49.0)(tsx@4.23.1)(yaml@2.9.0))) + '@unhead/vue': 3.2.1(crossws@0.4.10(srvx@0.11.22))(esbuild@0.28.1)(lightningcss@1.33.0)(rolldown@1.2.0)(rollup@4.62.2)(typescript@6.0.3)(vite@8.1.5(@types/node@26.1.1)(esbuild@0.28.1)(jiti@1.21.7)(terser@5.49.0)(tsx@4.23.1)(yaml@2.9.0))(vue@3.5.40(typescript@6.0.3)) + '@vue/shared': 3.5.40 consola: 3.4.2 defu: 6.1.7 destr: 2.0.5 devalue: 5.8.1 errx: 0.1.0 escape-string-regexp: 5.0.0 - exsolve: 1.0.8 + exsolve: 1.1.0 h3: 1.15.11 - impound: 1.1.5 + impound: 1.1.5(esbuild@0.28.1)(rolldown@1.2.0)(rollup@4.62.2)(vite@8.1.5(@types/node@26.1.1)(esbuild@0.28.1)(jiti@1.21.7)(terser@5.49.0)(tsx@4.23.1)(yaml@2.9.0)) klona: 2.0.6 mocked-exports: 0.1.1 - nitropack: 2.13.4(@libsql/client@0.17.3)(drizzle-orm@0.45.2(@libsql/client@0.17.3))(oxc-parser@0.131.0)(srvx@0.11.16) - nuxt: 3.21.6(@libsql/client@0.17.3)(@parcel/watcher@2.5.6)(@types/node@25.9.1)(@vue/compiler-sfc@3.5.35)(cac@6.7.14)(db0@0.3.4(@libsql/client@0.17.3)(drizzle-orm@0.45.2(@libsql/client@0.17.3)))(drizzle-orm@0.45.2(@libsql/client@0.17.3))(eslint@9.39.4(jiti@1.21.7))(ioredis@5.11.0)(magicast@0.5.3)(optionator@0.9.4)(rollup-plugin-visualizer@7.0.1(rollup@4.60.4))(rollup@4.60.4)(srvx@0.11.16)(terser@5.48.0)(tsx@4.22.3)(typescript@6.0.3)(vite@7.3.3(@types/node@25.9.1)(jiti@1.21.7)(terser@5.48.0)(tsx@4.22.3)(yaml@2.9.0))(vue-tsc@3.3.3(typescript@6.0.3))(yaml@2.9.0) + nitropack: 2.13.4(@libsql/client@0.17.4)(drizzle-orm@0.45.2(@libsql/client@0.17.4))(oxc-parser@0.140.0)(rolldown@1.2.0)(srvx@0.11.22)(supports-color@10.2.2)(vite@8.1.5(@types/node@26.1.1)(esbuild@0.28.1)(jiti@1.21.7)(terser@5.49.0)(tsx@4.23.1)(yaml@2.9.0)) + nostics: 1.2.0 + nuxt: 4.5.0(@babel/plugin-syntax-jsx@7.29.7(@babel/core@7.29.7(supports-color@10.2.2)))(@babel/plugin-syntax-typescript@7.29.7(@babel/core@7.29.7(supports-color@10.2.2)))(@libsql/client@0.17.4)(@parcel/watcher@2.6.0)(@types/node@26.1.1)(@vue/compiler-sfc@3.5.40)(crossws@0.4.10(srvx@0.11.22))(db0@0.3.4(@libsql/client@0.17.4)(drizzle-orm@0.45.2(@libsql/client@0.17.4)))(drizzle-orm@0.45.2(@libsql/client@0.17.4))(esbuild@0.28.1)(eslint@10.7.0(jiti@1.21.7)(supports-color@10.2.2))(ioredis@5.11.1(supports-color@10.2.2))(lightningcss@1.33.0)(magicast@0.5.3)(optionator@0.9.4)(oxc-parser@0.140.0)(pinia@4.0.2(@vue/devtools-api@8.1.5)(typescript@6.0.3)(vue@3.5.40(typescript@6.0.3)))(rollup-plugin-visualizer@7.0.1(rolldown@1.2.0)(rollup@4.62.2))(rollup@4.62.2)(srvx@0.11.22)(supports-color@10.2.2)(terser@5.49.0)(tsx@4.23.1)(typescript@6.0.3)(vite@8.1.5(@types/node@26.1.1)(esbuild@0.28.1)(jiti@1.21.7)(terser@5.49.0)(tsx@4.23.1)(yaml@2.9.0))(vue-tsc@3.3.7(typescript@6.0.3))(yaml@2.9.0) + nypm: 0.6.8 ohash: 2.0.11 pathe: 2.0.3 - pkg-types: 2.3.1 - rou3: 0.8.1 - std-env: 4.1.0 + rou3: 0.9.1 + std-env: 4.2.0 ufo: 1.6.4 - unctx: 2.5.0 - unstorage: 1.17.5(db0@0.3.4(@libsql/client@0.17.3)(drizzle-orm@0.45.2(@libsql/client@0.17.3)))(ioredis@5.11.0) - vue: 3.5.35(typescript@6.0.3) - vue-bundle-renderer: 2.2.0 + unctx: 3.0.0(magic-string@1.0.0)(oxc-parser@0.140.0)(rolldown@1.2.0)(unplugin@3.3.0(esbuild@0.28.1)(rolldown@1.2.0)(rollup@4.62.2)(vite@8.1.5(@types/node@26.1.1)(esbuild@0.28.1)(jiti@1.21.7)(terser@5.49.0)(tsx@4.23.1)(yaml@2.9.0))) + unstorage: 1.17.5(db0@0.3.4(@libsql/client@0.17.4)(drizzle-orm@0.45.2(@libsql/client@0.17.4)))(ioredis@5.11.1(supports-color@10.2.2)) + vue: 3.5.40(typescript@6.0.3) + vue-bundle-renderer: 2.3.1 vue-devtools-stub: 0.1.0 + optionalDependencies: + '@babel/plugin-syntax-typescript': 7.29.7(@babel/core@7.29.7(supports-color@10.2.2)) transitivePeerDependencies: - '@azure/app-configuration' - '@azure/cosmos' @@ -7631,9 +7720,13 @@ snapshots: - '@capacitor/preferences' - '@deno/kv' - '@electric-sql/pglite' + - '@farmfe/core' - '@libsql/client' + - '@modelcontextprotocol/sdk' - '@netlify/blobs' - '@planetscale/database' + - '@rspack/core' + - '@unhead/cli' - '@upstash/redis' - '@vercel/blob' - '@vercel/functions' @@ -7642,128 +7735,150 @@ snapshots: - bare-abort-controller - bare-buffer - better-sqlite3 + - bufferutil + - bun-types-no-globals + - crossws - db0 - drizzle-orm - encoding + - esbuild - idb-keyval - ioredis + - lightningcss + - magic-string - magicast - mysql2 - oxc-parser - react-native-b4a - rolldown + - rollup - sqlite3 - srvx - supports-color - typescript + - unloader + - unplugin - uploadthing + - utf-8-validate + - vite + - webpack - xml2js - '@nuxt/schema@3.21.6': + '@nuxt/schema@4.5.0': dependencies: - '@vue/shared': 3.5.35 + '@vue/shared': 3.5.40 defu: 6.1.7 + nostics: 1.2.0 pathe: 2.0.3 pkg-types: 2.3.1 - std-env: 4.1.0 + std-env: 4.2.0 - '@nuxt/telemetry@2.8.0(@nuxt/kit@3.21.6(magicast@0.5.3))': + '@nuxt/telemetry@2.8.0(@nuxt/kit@4.5.0(magic-string@1.0.0)(magicast@0.5.3)(oxc-parser@0.140.0)(rolldown@1.2.0)(unplugin@3.3.0(esbuild@0.28.1)(rolldown@1.2.0)(rollup@4.62.2)(vite@8.1.5(@types/node@26.1.1)(esbuild@0.28.1)(jiti@1.21.7)(terser@5.49.0)(tsx@4.23.1)(yaml@2.9.0))))': dependencies: - '@nuxt/kit': 3.21.6(magicast@0.5.3) + '@nuxt/kit': 4.5.0(magic-string@1.0.0)(magicast@0.5.3)(oxc-parser@0.140.0)(rolldown@1.2.0)(unplugin@3.3.0(esbuild@0.28.1)(rolldown@1.2.0)(rollup@4.62.2)(vite@8.1.5(@types/node@26.1.1)(esbuild@0.28.1)(jiti@1.21.7)(terser@5.49.0)(tsx@4.23.1)(yaml@2.9.0))) citty: 0.2.2 consola: 3.4.2 ofetch: 2.0.0-alpha.3 rc9: 3.0.1 - std-env: 4.1.0 + std-env: 4.2.0 - '@nuxt/test-utils@4.0.3(@vitest/ui@4.1.7)(crossws@0.4.5(srvx@0.11.16))(magicast@0.5.3)(typescript@6.0.3)(vite@7.3.3(@types/node@25.9.1)(jiti@1.21.7)(terser@5.48.0)(tsx@4.22.3)(yaml@2.9.0))(vitest@4.1.7)': + '@nuxt/test-utils@4.0.3(@vitest/ui@4.1.10)(crossws@0.4.10(srvx@0.11.22))(esbuild@0.28.1)(magicast@0.5.3)(rolldown@1.2.0)(rollup@4.62.2)(typescript@6.0.3)(vite@8.1.5(@types/node@26.1.1)(esbuild@0.28.1)(jiti@1.21.7)(terser@5.49.0)(tsx@4.23.1)(yaml@2.9.0))(vitest@4.1.10)': dependencies: '@clack/prompts': 1.2.0 - '@nuxt/devtools-kit': 2.7.0(magicast@0.5.3)(vite@7.3.3(@types/node@25.9.1)(jiti@1.21.7)(terser@5.48.0)(tsx@4.22.3)(yaml@2.9.0)) - '@nuxt/kit': 3.21.6(magicast@0.5.3) + '@nuxt/devtools-kit': 2.7.0(magicast@0.5.3)(vite@8.1.5(@types/node@26.1.1)(esbuild@0.28.1)(jiti@1.21.7)(terser@5.49.0)(tsx@4.23.1)(yaml@2.9.0)) + '@nuxt/kit': 3.21.9(magicast@0.5.3) c12: 3.3.4(magicast@0.5.3) consola: 3.4.2 defu: 6.1.7 destr: 2.0.5 estree-walker: 3.0.3 - exsolve: 1.0.8 + exsolve: 1.1.0 fake-indexeddb: 6.2.5 get-port-please: 3.2.0 h3: 1.15.11 - h3-next: h3@2.0.1-rc.20(crossws@0.4.5(srvx@0.11.16)) + h3-next: h3@2.0.1-rc.20(crossws@0.4.10(srvx@0.11.22)) local-pkg: 1.2.1 magic-string: 0.30.21 node-fetch-native: 1.6.7 node-mock-http: 1.0.4 - nypm: 0.6.6 + nypm: 0.6.8 ofetch: 1.5.1 pathe: 2.0.3 perfect-debounce: 2.1.0 radix3: 1.1.2 scule: 1.3.0 - std-env: 4.1.0 - tinyexec: 1.2.3 + std-env: 4.2.0 + tinyexec: 1.2.4 ufo: 1.6.4 - unplugin: 3.0.0 - vitest-environment-nuxt: 2.0.0(@vitest/ui@4.1.7)(crossws@0.4.5(srvx@0.11.16))(magicast@0.5.3)(typescript@6.0.3)(vite@7.3.3(@types/node@25.9.1)(jiti@1.21.7)(terser@5.48.0)(tsx@4.22.3)(yaml@2.9.0))(vitest@4.1.7) - vue: 3.5.35(typescript@6.0.3) + unplugin: 3.3.0(esbuild@0.28.1)(rolldown@1.2.0)(rollup@4.62.2)(vite@8.1.5(@types/node@26.1.1)(esbuild@0.28.1)(jiti@1.21.7)(terser@5.49.0)(tsx@4.23.1)(yaml@2.9.0)) + vitest-environment-nuxt: 2.0.0(@vitest/ui@4.1.10)(crossws@0.4.10(srvx@0.11.22))(esbuild@0.28.1)(magicast@0.5.3)(rolldown@1.2.0)(rollup@4.62.2)(typescript@6.0.3)(vite@8.1.5(@types/node@26.1.1)(esbuild@0.28.1)(jiti@1.21.7)(terser@5.49.0)(tsx@4.23.1)(yaml@2.9.0))(vitest@4.1.10) + vue: 3.5.40(typescript@6.0.3) optionalDependencies: - '@vitest/ui': 4.1.7(vitest@4.1.7) - vitest: 4.1.7(@types/node@25.9.1)(@vitest/coverage-v8@4.1.7)(@vitest/ui@4.1.7)(vite@7.3.3(@types/node@25.9.1)(jiti@1.21.7)(terser@5.48.0)(tsx@4.22.3)(yaml@2.9.0)) + '@vitest/ui': 4.1.10(vitest@4.1.10) + vitest: 4.1.10(@types/node@26.1.1)(@vitest/coverage-v8@4.1.10)(@vitest/ui@4.1.10)(vite@8.1.5(@types/node@26.1.1)(esbuild@0.28.1)(jiti@1.21.7)(terser@5.49.0)(tsx@4.23.1)(yaml@2.9.0)) transitivePeerDependencies: + - '@farmfe/core' + - '@rspack/core' + - bun-types-no-globals - crossws + - esbuild - magicast + - rolldown + - rollup - typescript + - unloader - vite + - webpack - '@nuxt/vite-builder@3.21.6(@types/node@25.9.1)(eslint@9.39.4(jiti@1.21.7))(magicast@0.5.3)(nuxt@3.21.6(@libsql/client@0.17.3)(@parcel/watcher@2.5.6)(@types/node@25.9.1)(@vue/compiler-sfc@3.5.35)(cac@6.7.14)(db0@0.3.4(@libsql/client@0.17.3)(drizzle-orm@0.45.2(@libsql/client@0.17.3)))(drizzle-orm@0.45.2(@libsql/client@0.17.3))(eslint@9.39.4(jiti@1.21.7))(ioredis@5.11.0)(magicast@0.5.3)(optionator@0.9.4)(rollup-plugin-visualizer@7.0.1(rollup@4.60.4))(rollup@4.60.4)(srvx@0.11.16)(terser@5.48.0)(tsx@4.22.3)(typescript@6.0.3)(vite@7.3.3(@types/node@25.9.1)(jiti@1.21.7)(terser@5.48.0)(tsx@4.22.3)(yaml@2.9.0))(vue-tsc@3.3.3(typescript@6.0.3))(yaml@2.9.0))(optionator@0.9.4)(rollup-plugin-visualizer@7.0.1(rollup@4.60.4))(rollup@4.60.4)(terser@5.48.0)(tsx@4.22.3)(typescript@6.0.3)(vue-tsc@3.3.3(typescript@6.0.3))(vue@3.5.35(typescript@6.0.3))(yaml@2.9.0)': + '@nuxt/vite-builder@4.5.0(e823a26359067b1de12663414877c848)': dependencies: - '@nuxt/kit': 3.21.6(magicast@0.5.3) - '@rollup/plugin-replace': 6.0.3(rollup@4.60.4) - '@vitejs/plugin-vue': 6.0.7(vite@7.3.3(@types/node@25.9.1)(jiti@1.21.7)(terser@5.48.0)(tsx@4.22.3)(yaml@2.9.0))(vue@3.5.35(typescript@6.0.3)) - '@vitejs/plugin-vue-jsx': 5.1.5(vite@7.3.3(@types/node@25.9.1)(jiti@1.21.7)(terser@5.48.0)(tsx@4.22.3)(yaml@2.9.0))(vue@3.5.35(typescript@6.0.3)) - autoprefixer: 10.5.0(postcss@8.5.15) + '@nuxt/kit': 4.5.0(magic-string@1.0.0)(magicast@0.5.3)(oxc-parser@0.140.0)(rolldown@1.2.0)(unplugin@3.3.0(esbuild@0.28.1)(rolldown@1.2.0)(rollup@4.62.2)(vite@8.1.5(@types/node@26.1.1)(esbuild@0.28.1)(jiti@1.21.7)(terser@5.49.0)(tsx@4.23.1)(yaml@2.9.0))) + '@vitejs/plugin-vue': 6.0.8(vite@8.1.5(@types/node@26.1.1)(esbuild@0.28.1)(jiti@1.21.7)(terser@5.49.0)(tsx@4.23.1)(yaml@2.9.0))(vue@3.5.40(typescript@6.0.3)) + '@vitejs/plugin-vue-jsx': 5.1.6(supports-color@10.2.2)(vite@8.1.5(@types/node@26.1.1)(esbuild@0.28.1)(jiti@1.21.7)(terser@5.49.0)(tsx@4.23.1)(yaml@2.9.0))(vue@3.5.40(typescript@6.0.3)) + autoprefixer: 10.5.4(postcss@8.5.20) consola: 3.4.2 - cssnano: 7.1.9(postcss@8.5.15) + cssnano: 8.0.2(postcss@8.5.20) defu: 6.1.7 escape-string-regexp: 5.0.0 - exsolve: 1.0.8 - externality: 1.0.2 + exsolve: 1.1.0 get-port-please: 3.2.0 jiti: 2.7.0 + js-tokens: 10.0.0 knitwork: 1.3.0 - magic-string: 0.30.21 mlly: 1.8.2 mocked-exports: 0.1.1 - nuxt: 3.21.6(@libsql/client@0.17.3)(@parcel/watcher@2.5.6)(@types/node@25.9.1)(@vue/compiler-sfc@3.5.35)(cac@6.7.14)(db0@0.3.4(@libsql/client@0.17.3)(drizzle-orm@0.45.2(@libsql/client@0.17.3)))(drizzle-orm@0.45.2(@libsql/client@0.17.3))(eslint@9.39.4(jiti@1.21.7))(ioredis@5.11.0)(magicast@0.5.3)(optionator@0.9.4)(rollup-plugin-visualizer@7.0.1(rollup@4.60.4))(rollup@4.60.4)(srvx@0.11.16)(terser@5.48.0)(tsx@4.22.3)(typescript@6.0.3)(vite@7.3.3(@types/node@25.9.1)(jiti@1.21.7)(terser@5.48.0)(tsx@4.22.3)(yaml@2.9.0))(vue-tsc@3.3.3(typescript@6.0.3))(yaml@2.9.0) - nypm: 0.6.6 - ohash: 2.0.11 + nuxt: 4.5.0(@babel/plugin-syntax-jsx@7.29.7(@babel/core@7.29.7(supports-color@10.2.2)))(@babel/plugin-syntax-typescript@7.29.7(@babel/core@7.29.7(supports-color@10.2.2)))(@libsql/client@0.17.4)(@parcel/watcher@2.6.0)(@types/node@26.1.1)(@vue/compiler-sfc@3.5.40)(crossws@0.4.10(srvx@0.11.22))(db0@0.3.4(@libsql/client@0.17.4)(drizzle-orm@0.45.2(@libsql/client@0.17.4)))(drizzle-orm@0.45.2(@libsql/client@0.17.4))(esbuild@0.28.1)(eslint@10.7.0(jiti@1.21.7)(supports-color@10.2.2))(ioredis@5.11.1(supports-color@10.2.2))(lightningcss@1.33.0)(magicast@0.5.3)(optionator@0.9.4)(oxc-parser@0.140.0)(pinia@4.0.2(@vue/devtools-api@8.1.5)(typescript@6.0.3)(vue@3.5.40(typescript@6.0.3)))(rollup-plugin-visualizer@7.0.1(rolldown@1.2.0)(rollup@4.62.2))(rollup@4.62.2)(srvx@0.11.22)(supports-color@10.2.2)(terser@5.49.0)(tsx@4.23.1)(typescript@6.0.3)(vite@8.1.5(@types/node@26.1.1)(esbuild@0.28.1)(jiti@1.21.7)(terser@5.49.0)(tsx@4.23.1)(yaml@2.9.0))(vue-tsc@3.3.7(typescript@6.0.3))(yaml@2.9.0) + nypm: 0.6.8 pathe: 2.0.3 - perfect-debounce: 2.1.0 pkg-types: 2.3.1 - postcss: 8.5.15 - seroval: 1.5.4 - std-env: 4.1.0 + postcss: 8.5.20 + rolldown-string: 0.3.1(rolldown@1.2.0) + seroval: 1.5.6 + std-env: 4.2.0 ufo: 1.6.4 unenv: 2.0.0-rc.24 - vite: 7.3.3(@types/node@25.9.1)(jiti@2.7.0)(terser@5.48.0)(tsx@4.22.3)(yaml@2.9.0) - vite-node: 5.3.0(@types/node@25.9.1)(jiti@2.7.0)(terser@5.48.0)(tsx@4.22.3)(yaml@2.9.0) - vite-plugin-checker: 0.13.0(eslint@9.39.4(jiti@1.21.7))(optionator@0.9.4)(typescript@6.0.3)(vite@7.3.3(@types/node@25.9.1)(jiti@1.21.7)(terser@5.48.0)(tsx@4.22.3)(yaml@2.9.0))(vue-tsc@3.3.3(typescript@6.0.3)) - vue: 3.5.35(typescript@6.0.3) - vue-bundle-renderer: 2.2.0 + vite: 8.1.5(@types/node@26.1.1)(esbuild@0.28.1)(jiti@2.7.0)(terser@5.49.0)(tsx@4.23.1)(yaml@2.9.0) + vite-node: 6.0.0(@types/node@26.1.1)(esbuild@0.28.1)(jiti@2.7.0)(terser@5.49.0)(tsx@4.23.1)(yaml@2.9.0) + vite-plugin-checker: 0.14.4(eslint@10.7.0(jiti@1.21.7)(supports-color@10.2.2))(optionator@0.9.4)(typescript@6.0.3)(vite@8.1.5(@types/node@26.1.1)(esbuild@0.28.1)(jiti@1.21.7)(terser@5.49.0)(tsx@4.23.1)(yaml@2.9.0))(vue-tsc@3.3.7(typescript@6.0.3)) + vue: 3.5.40(typescript@6.0.3) + vue-bundle-renderer: 2.3.1 optionalDependencies: - rollup-plugin-visualizer: 7.0.1(rollup@4.60.4) + '@babel/plugin-syntax-jsx': 7.29.7(@babel/core@7.29.7(supports-color@10.2.2)) + rolldown: 1.2.0 + rollup-plugin-visualizer: 7.0.1(rolldown@1.2.0)(rollup@4.62.2) transitivePeerDependencies: - '@biomejs/biome' - '@types/node' + - '@vitejs/devtools' + - esbuild - eslint - less - - lightningcss + - magic-string - magicast - meow - optionator + - oxc-parser - oxlint - - rollup - sass - sass-embedded - stylelint @@ -7773,22 +7888,21 @@ snapshots: - terser - tsx - typescript - - vls - - vti + - unplugin - vue-tsc - yaml - '@nuxtjs/i18n@10.4.0(@vue/compiler-dom@3.5.35)(db0@0.3.4(@libsql/client@0.17.3)(drizzle-orm@0.45.2(@libsql/client@0.17.3)))(eslint@9.39.4(jiti@1.21.7))(ioredis@5.11.0)(magicast@0.5.3)(pinia@3.0.4(typescript@6.0.3)(vue@3.5.35(typescript@6.0.3)))(rollup@4.60.4)(typescript@6.0.3)(vite@7.3.3(@types/node@25.9.1)(jiti@1.21.7)(terser@5.48.0)(tsx@4.22.3)(yaml@2.9.0))(vue@3.5.35(typescript@6.0.3))': + '@nuxtjs/i18n@10.4.1(@vue/compiler-dom@3.5.40)(db0@0.3.4(@libsql/client@0.17.4)(drizzle-orm@0.45.2(@libsql/client@0.17.4)))(esbuild@0.28.1)(eslint@10.7.0(jiti@1.21.7)(supports-color@10.2.2))(ioredis@5.11.1(supports-color@10.2.2))(magicast@0.5.3)(pinia@4.0.2(@vue/devtools-api@8.1.5)(typescript@6.0.3)(vue@3.5.40(typescript@6.0.3)))(rolldown@1.2.0)(rollup@4.62.2)(supports-color@10.2.2)(typescript@6.0.3)(vite@8.1.5(@types/node@26.1.1)(esbuild@0.28.1)(jiti@1.21.7)(terser@5.49.0)(tsx@4.23.1)(yaml@2.9.0))(vue@3.5.40(typescript@6.0.3))': dependencies: - '@intlify/core': 11.4.4 + '@intlify/core': 11.4.6 '@intlify/h3': 0.7.4 - '@intlify/shared': 11.4.4 - '@intlify/unplugin-vue-i18n': 11.2.3(@vue/compiler-dom@3.5.35)(eslint@9.39.4(jiti@1.21.7))(rollup@4.60.4)(typescript@6.0.3)(vite@7.3.3(@types/node@25.9.1)(jiti@1.21.7)(terser@5.48.0)(tsx@4.22.3)(yaml@2.9.0))(vue-i18n@11.4.4(vue@3.5.35(typescript@6.0.3)))(vue@3.5.35(typescript@6.0.3)) + '@intlify/shared': 11.4.6 + '@intlify/unplugin-vue-i18n': 11.2.4(@vue/compiler-dom@3.5.40)(eslint@10.7.0(jiti@1.21.7)(supports-color@10.2.2))(rollup@4.62.2)(supports-color@10.2.2)(typescript@6.0.3)(vite@8.1.5(@types/node@26.1.1)(esbuild@0.28.1)(jiti@1.21.7)(terser@5.49.0)(tsx@4.23.1)(yaml@2.9.0))(vue-i18n@11.4.6(vue@3.5.40(typescript@6.0.3)))(vue@3.5.40(typescript@6.0.3)) '@intlify/utils': 0.14.1 - '@miyaneee/rollup-plugin-json5': 1.2.0(rollup@4.60.4) - '@nuxt/kit': 4.4.6(magicast@0.5.3) - '@rollup/plugin-yaml': 4.1.2(rollup@4.60.4) - '@vue/compiler-sfc': 3.5.35 + '@miyaneee/rollup-plugin-json5': 1.2.0(rollup@4.62.2) + '@nuxt/kit': 4.5.0(magic-string@0.30.21)(magicast@0.5.3)(oxc-parser@0.128.0)(rolldown@1.2.0)(unplugin@3.3.0(esbuild@0.28.1)(rolldown@1.2.0)(rollup@4.62.2)(vite@8.1.5(@types/node@26.1.1)(esbuild@0.28.1)(jiti@1.21.7)(terser@5.49.0)(tsx@4.23.1)(yaml@2.9.0))) + '@rollup/plugin-yaml': 4.1.2(rollup@4.62.2) + '@vue/compiler-sfc': 3.5.40 defu: 6.1.7 devalue: 5.8.1 h3: 1.15.11 @@ -7801,11 +7915,11 @@ snapshots: oxc-walker: 0.7.0(oxc-parser@0.128.0) pathe: 2.0.3 ufo: 1.6.4 - unplugin: 3.0.0 + unplugin: 3.3.0(esbuild@0.28.1)(rolldown@1.2.0)(rollup@4.62.2)(vite@8.1.5(@types/node@26.1.1)(esbuild@0.28.1)(jiti@1.21.7)(terser@5.49.0)(tsx@4.23.1)(yaml@2.9.0)) unrouting: 0.1.7 - unstorage: 1.17.5(db0@0.3.4(@libsql/client@0.17.3)(drizzle-orm@0.45.2(@libsql/client@0.17.3)))(ioredis@5.11.0) - vue-i18n: 11.4.4(vue@3.5.35(typescript@6.0.3)) - vue-router: 5.1.0(@vue/compiler-sfc@3.5.35)(pinia@3.0.4(typescript@6.0.3)(vue@3.5.35(typescript@6.0.3)))(vite@7.3.3(@types/node@25.9.1)(jiti@1.21.7)(terser@5.48.0)(tsx@4.22.3)(yaml@2.9.0))(vue@3.5.35(typescript@6.0.3)) + unstorage: 1.17.5(db0@0.3.4(@libsql/client@0.17.4)(drizzle-orm@0.45.2(@libsql/client@0.17.4)))(ioredis@5.11.1(supports-color@10.2.2)) + vue-i18n: 11.4.6(vue@3.5.40(typescript@6.0.3)) + vue-router: 5.2.0(@vue/compiler-sfc@3.5.40)(esbuild@0.28.1)(pinia@4.0.2(@vue/devtools-api@8.1.5)(typescript@6.0.3)(vue@3.5.40(typescript@6.0.3)))(rolldown@1.2.0)(rollup@4.62.2)(vite@8.1.5(@types/node@26.1.1)(esbuild@0.28.1)(jiti@1.21.7)(terser@5.49.0)(tsx@4.23.1)(yaml@2.9.0))(vue@3.5.40(typescript@6.0.3)) transitivePeerDependencies: - '@azure/app-configuration' - '@azure/cosmos' @@ -7815,33 +7929,40 @@ snapshots: - '@azure/storage-blob' - '@capacitor/preferences' - '@deno/kv' + - '@farmfe/core' - '@netlify/blobs' - '@pinia/colada' - '@planetscale/database' + - '@rspack/core' - '@upstash/redis' - '@vercel/blob' - '@vercel/functions' - '@vercel/kv' - '@vue/compiler-dom' - aws4fetch + - bun-types-no-globals - db0 + - esbuild - eslint - idb-keyval - ioredis - magicast - petite-vue-i18n - pinia + - rolldown - rollup - supports-color - typescript + - unloader - uploadthing - vite - vue + - webpack - '@nuxtjs/tailwindcss@6.14.0(magicast@0.5.3)(tsx@4.22.3)(yaml@2.9.0)': + '@nuxtjs/tailwindcss@6.14.0(magicast@0.5.3)(supports-color@10.2.2)(tsx@4.23.1)(yaml@2.9.0)': dependencies: - '@nuxt/kit': 3.21.6(magicast@0.5.3) - autoprefixer: 10.5.0(postcss@8.5.15) + '@nuxt/kit': 3.21.9(magicast@0.5.3) + autoprefixer: 10.5.4(postcss@8.5.20) c12: 3.3.4(magicast@0.5.3) consola: 3.4.2 defu: 6.1.7 @@ -7850,10 +7971,10 @@ snapshots: ohash: 2.0.11 pathe: 2.0.3 pkg-types: 2.3.1 - postcss: 8.5.15 - postcss-nesting: 13.0.2(postcss@8.5.15) - tailwind-config-viewer: 2.0.4(tailwindcss@3.4.19(tsx@4.22.3)(yaml@2.9.0)) - tailwindcss: 3.4.19(tsx@4.22.3)(yaml@2.9.0) + postcss: 8.5.20 + postcss-nesting: 13.0.2(postcss@8.5.20) + tailwind-config-viewer: 2.0.4(supports-color@10.2.2)(tailwindcss@3.4.19(tsx@4.23.1)(yaml@2.9.0)) + tailwindcss: 3.4.19(tsx@4.23.1)(yaml@2.9.0) ufo: 1.6.4 unctx: 2.5.0 transitivePeerDependencies: @@ -7862,405 +7983,343 @@ snapshots: - tsx - yaml - '@oxc-minify/binding-android-arm-eabi@0.131.0': - optional: true - - '@oxc-minify/binding-android-arm64@0.131.0': - optional: true - - '@oxc-minify/binding-darwin-arm64@0.131.0': - optional: true - - '@oxc-minify/binding-darwin-x64@0.131.0': - optional: true - - '@oxc-minify/binding-freebsd-x64@0.131.0': - optional: true - - '@oxc-minify/binding-linux-arm-gnueabihf@0.131.0': - optional: true - - '@oxc-minify/binding-linux-arm-musleabihf@0.131.0': - optional: true - - '@oxc-minify/binding-linux-arm64-gnu@0.131.0': - optional: true - - '@oxc-minify/binding-linux-arm64-musl@0.131.0': - optional: true - - '@oxc-minify/binding-linux-ppc64-gnu@0.131.0': - optional: true - - '@oxc-minify/binding-linux-riscv64-gnu@0.131.0': - optional: true - - '@oxc-minify/binding-linux-riscv64-musl@0.131.0': - optional: true - - '@oxc-minify/binding-linux-s390x-gnu@0.131.0': - optional: true - - '@oxc-minify/binding-linux-x64-gnu@0.131.0': - optional: true - - '@oxc-minify/binding-linux-x64-musl@0.131.0': - optional: true - - '@oxc-minify/binding-openharmony-arm64@0.131.0': - optional: true - - '@oxc-minify/binding-wasm32-wasi@0.131.0': - dependencies: - '@emnapi/core': 1.10.0 - '@emnapi/runtime': 1.10.0 - '@napi-rs/wasm-runtime': 1.1.4(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0) - optional: true - - '@oxc-minify/binding-win32-arm64-msvc@0.131.0': - optional: true - - '@oxc-minify/binding-win32-ia32-msvc@0.131.0': - optional: true - - '@oxc-minify/binding-win32-x64-msvc@0.131.0': - optional: true - '@oxc-parser/binding-android-arm-eabi@0.128.0': optional: true - '@oxc-parser/binding-android-arm-eabi@0.131.0': + '@oxc-parser/binding-android-arm-eabi@0.132.0': + optional: true + + '@oxc-parser/binding-android-arm-eabi@0.140.0': optional: true '@oxc-parser/binding-android-arm64@0.128.0': optional: true - '@oxc-parser/binding-android-arm64@0.131.0': + '@oxc-parser/binding-android-arm64@0.132.0': + optional: true + + '@oxc-parser/binding-android-arm64@0.140.0': optional: true '@oxc-parser/binding-darwin-arm64@0.128.0': optional: true - '@oxc-parser/binding-darwin-arm64@0.131.0': + '@oxc-parser/binding-darwin-arm64@0.132.0': + optional: true + + '@oxc-parser/binding-darwin-arm64@0.140.0': optional: true '@oxc-parser/binding-darwin-x64@0.128.0': optional: true - '@oxc-parser/binding-darwin-x64@0.131.0': + '@oxc-parser/binding-darwin-x64@0.132.0': + optional: true + + '@oxc-parser/binding-darwin-x64@0.140.0': optional: true '@oxc-parser/binding-freebsd-x64@0.128.0': optional: true - '@oxc-parser/binding-freebsd-x64@0.131.0': + '@oxc-parser/binding-freebsd-x64@0.132.0': + optional: true + + '@oxc-parser/binding-freebsd-x64@0.140.0': optional: true '@oxc-parser/binding-linux-arm-gnueabihf@0.128.0': optional: true - '@oxc-parser/binding-linux-arm-gnueabihf@0.131.0': + '@oxc-parser/binding-linux-arm-gnueabihf@0.132.0': + optional: true + + '@oxc-parser/binding-linux-arm-gnueabihf@0.140.0': optional: true '@oxc-parser/binding-linux-arm-musleabihf@0.128.0': optional: true - '@oxc-parser/binding-linux-arm-musleabihf@0.131.0': + '@oxc-parser/binding-linux-arm-musleabihf@0.132.0': + optional: true + + '@oxc-parser/binding-linux-arm-musleabihf@0.140.0': optional: true '@oxc-parser/binding-linux-arm64-gnu@0.128.0': optional: true - '@oxc-parser/binding-linux-arm64-gnu@0.131.0': + '@oxc-parser/binding-linux-arm64-gnu@0.132.0': + optional: true + + '@oxc-parser/binding-linux-arm64-gnu@0.140.0': optional: true '@oxc-parser/binding-linux-arm64-musl@0.128.0': optional: true - '@oxc-parser/binding-linux-arm64-musl@0.131.0': + '@oxc-parser/binding-linux-arm64-musl@0.132.0': + optional: true + + '@oxc-parser/binding-linux-arm64-musl@0.140.0': optional: true '@oxc-parser/binding-linux-ppc64-gnu@0.128.0': optional: true - '@oxc-parser/binding-linux-ppc64-gnu@0.131.0': + '@oxc-parser/binding-linux-ppc64-gnu@0.132.0': + optional: true + + '@oxc-parser/binding-linux-ppc64-gnu@0.140.0': optional: true '@oxc-parser/binding-linux-riscv64-gnu@0.128.0': optional: true - '@oxc-parser/binding-linux-riscv64-gnu@0.131.0': + '@oxc-parser/binding-linux-riscv64-gnu@0.132.0': + optional: true + + '@oxc-parser/binding-linux-riscv64-gnu@0.140.0': optional: true '@oxc-parser/binding-linux-riscv64-musl@0.128.0': optional: true - '@oxc-parser/binding-linux-riscv64-musl@0.131.0': + '@oxc-parser/binding-linux-riscv64-musl@0.132.0': + optional: true + + '@oxc-parser/binding-linux-riscv64-musl@0.140.0': optional: true '@oxc-parser/binding-linux-s390x-gnu@0.128.0': optional: true - '@oxc-parser/binding-linux-s390x-gnu@0.131.0': + '@oxc-parser/binding-linux-s390x-gnu@0.132.0': + optional: true + + '@oxc-parser/binding-linux-s390x-gnu@0.140.0': optional: true '@oxc-parser/binding-linux-x64-gnu@0.128.0': optional: true - '@oxc-parser/binding-linux-x64-gnu@0.131.0': + '@oxc-parser/binding-linux-x64-gnu@0.132.0': + optional: true + + '@oxc-parser/binding-linux-x64-gnu@0.140.0': optional: true '@oxc-parser/binding-linux-x64-musl@0.128.0': optional: true - '@oxc-parser/binding-linux-x64-musl@0.131.0': + '@oxc-parser/binding-linux-x64-musl@0.132.0': + optional: true + + '@oxc-parser/binding-linux-x64-musl@0.140.0': optional: true '@oxc-parser/binding-openharmony-arm64@0.128.0': optional: true - '@oxc-parser/binding-openharmony-arm64@0.131.0': + '@oxc-parser/binding-openharmony-arm64@0.132.0': + optional: true + + '@oxc-parser/binding-openharmony-arm64@0.140.0': optional: true '@oxc-parser/binding-wasm32-wasi@0.128.0': dependencies: '@emnapi/core': 1.10.0 '@emnapi/runtime': 1.10.0 - '@napi-rs/wasm-runtime': 1.1.4(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0) + '@napi-rs/wasm-runtime': 1.1.6(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0) optional: true - '@oxc-parser/binding-wasm32-wasi@0.131.0': + '@oxc-parser/binding-wasm32-wasi@0.132.0': dependencies: '@emnapi/core': 1.10.0 '@emnapi/runtime': 1.10.0 - '@napi-rs/wasm-runtime': 1.1.4(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0) + '@napi-rs/wasm-runtime': 1.1.6(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0) + optional: true + + '@oxc-parser/binding-wasm32-wasi@0.140.0': + dependencies: + '@emnapi/core': 1.11.2 + '@emnapi/runtime': 1.11.2 + '@napi-rs/wasm-runtime': 1.1.6(@emnapi/core@1.11.2)(@emnapi/runtime@1.11.2) optional: true '@oxc-parser/binding-win32-arm64-msvc@0.128.0': optional: true - '@oxc-parser/binding-win32-arm64-msvc@0.131.0': + '@oxc-parser/binding-win32-arm64-msvc@0.132.0': + optional: true + + '@oxc-parser/binding-win32-arm64-msvc@0.140.0': optional: true '@oxc-parser/binding-win32-ia32-msvc@0.128.0': optional: true - '@oxc-parser/binding-win32-ia32-msvc@0.131.0': + '@oxc-parser/binding-win32-ia32-msvc@0.132.0': + optional: true + + '@oxc-parser/binding-win32-ia32-msvc@0.140.0': optional: true '@oxc-parser/binding-win32-x64-msvc@0.128.0': optional: true - '@oxc-parser/binding-win32-x64-msvc@0.131.0': + '@oxc-parser/binding-win32-x64-msvc@0.132.0': + optional: true + + '@oxc-parser/binding-win32-x64-msvc@0.140.0': optional: true '@oxc-project/types@0.128.0': {} - '@oxc-project/types@0.131.0': {} + '@oxc-project/types@0.132.0': {} + + '@oxc-project/types@0.139.0': {} + + '@oxc-project/types@0.140.0': {} '@oxc-transform/binding-android-arm-eabi@0.128.0': optional: true - '@oxc-transform/binding-android-arm-eabi@0.131.0': - optional: true - '@oxc-transform/binding-android-arm64@0.128.0': optional: true - '@oxc-transform/binding-android-arm64@0.131.0': - optional: true - '@oxc-transform/binding-darwin-arm64@0.128.0': optional: true - '@oxc-transform/binding-darwin-arm64@0.131.0': - optional: true - '@oxc-transform/binding-darwin-x64@0.128.0': optional: true - '@oxc-transform/binding-darwin-x64@0.131.0': - optional: true - '@oxc-transform/binding-freebsd-x64@0.128.0': optional: true - '@oxc-transform/binding-freebsd-x64@0.131.0': - optional: true - '@oxc-transform/binding-linux-arm-gnueabihf@0.128.0': optional: true - '@oxc-transform/binding-linux-arm-gnueabihf@0.131.0': - optional: true - '@oxc-transform/binding-linux-arm-musleabihf@0.128.0': optional: true - '@oxc-transform/binding-linux-arm-musleabihf@0.131.0': - optional: true - '@oxc-transform/binding-linux-arm64-gnu@0.128.0': optional: true - '@oxc-transform/binding-linux-arm64-gnu@0.131.0': - optional: true - '@oxc-transform/binding-linux-arm64-musl@0.128.0': optional: true - '@oxc-transform/binding-linux-arm64-musl@0.131.0': - optional: true - '@oxc-transform/binding-linux-ppc64-gnu@0.128.0': optional: true - '@oxc-transform/binding-linux-ppc64-gnu@0.131.0': - optional: true - '@oxc-transform/binding-linux-riscv64-gnu@0.128.0': optional: true - '@oxc-transform/binding-linux-riscv64-gnu@0.131.0': - optional: true - '@oxc-transform/binding-linux-riscv64-musl@0.128.0': optional: true - '@oxc-transform/binding-linux-riscv64-musl@0.131.0': - optional: true - '@oxc-transform/binding-linux-s390x-gnu@0.128.0': optional: true - '@oxc-transform/binding-linux-s390x-gnu@0.131.0': - optional: true - '@oxc-transform/binding-linux-x64-gnu@0.128.0': optional: true - '@oxc-transform/binding-linux-x64-gnu@0.131.0': - optional: true - '@oxc-transform/binding-linux-x64-musl@0.128.0': optional: true - '@oxc-transform/binding-linux-x64-musl@0.131.0': - optional: true - '@oxc-transform/binding-openharmony-arm64@0.128.0': optional: true - '@oxc-transform/binding-openharmony-arm64@0.131.0': - optional: true - '@oxc-transform/binding-wasm32-wasi@0.128.0': dependencies: '@emnapi/core': 1.10.0 '@emnapi/runtime': 1.10.0 - '@napi-rs/wasm-runtime': 1.1.4(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0) - optional: true - - '@oxc-transform/binding-wasm32-wasi@0.131.0': - dependencies: - '@emnapi/core': 1.10.0 - '@emnapi/runtime': 1.10.0 - '@napi-rs/wasm-runtime': 1.1.4(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0) + '@napi-rs/wasm-runtime': 1.1.6(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0) optional: true '@oxc-transform/binding-win32-arm64-msvc@0.128.0': optional: true - '@oxc-transform/binding-win32-arm64-msvc@0.131.0': - optional: true - '@oxc-transform/binding-win32-ia32-msvc@0.128.0': optional: true - '@oxc-transform/binding-win32-ia32-msvc@0.131.0': - optional: true - '@oxc-transform/binding-win32-x64-msvc@0.128.0': optional: true - '@oxc-transform/binding-win32-x64-msvc@0.131.0': + '@parcel/watcher-android-arm64@2.6.0': optional: true - '@package-json/types@0.0.12': {} - - '@parcel/watcher-android-arm64@2.5.6': + '@parcel/watcher-darwin-arm64@2.6.0': optional: true - '@parcel/watcher-darwin-arm64@2.5.6': + '@parcel/watcher-darwin-x64@2.6.0': optional: true - '@parcel/watcher-darwin-x64@2.5.6': + '@parcel/watcher-freebsd-x64@2.6.0': optional: true - '@parcel/watcher-freebsd-x64@2.5.6': + '@parcel/watcher-linux-arm-glibc@2.6.0': optional: true - '@parcel/watcher-linux-arm-glibc@2.5.6': + '@parcel/watcher-linux-arm-musl@2.6.0': optional: true - '@parcel/watcher-linux-arm-musl@2.5.6': + '@parcel/watcher-linux-arm64-glibc@2.6.0': optional: true - '@parcel/watcher-linux-arm64-glibc@2.5.6': + '@parcel/watcher-linux-arm64-musl@2.6.0': optional: true - '@parcel/watcher-linux-arm64-musl@2.5.6': + '@parcel/watcher-linux-x64-glibc@2.6.0': optional: true - '@parcel/watcher-linux-x64-glibc@2.5.6': + '@parcel/watcher-linux-x64-musl@2.6.0': optional: true - '@parcel/watcher-linux-x64-musl@2.5.6': - optional: true - - '@parcel/watcher-wasm@2.5.6': + '@parcel/watcher-wasm@2.6.0': dependencies: is-glob: 4.0.3 - picomatch: 4.0.4 + picomatch: 4.0.5 - '@parcel/watcher-win32-arm64@2.5.6': + '@parcel/watcher-win32-arm64@2.6.0': optional: true - '@parcel/watcher-win32-ia32@2.5.6': + '@parcel/watcher-win32-x64@2.6.0': optional: true - '@parcel/watcher-win32-x64@2.5.6': - optional: true - - '@parcel/watcher@2.5.6': + '@parcel/watcher@2.6.0': dependencies: detect-libc: 2.1.2 is-glob: 4.0.3 node-addon-api: 7.1.1 - picomatch: 4.0.4 + picomatch: 4.0.5 optionalDependencies: - '@parcel/watcher-android-arm64': 2.5.6 - '@parcel/watcher-darwin-arm64': 2.5.6 - '@parcel/watcher-darwin-x64': 2.5.6 - '@parcel/watcher-freebsd-x64': 2.5.6 - '@parcel/watcher-linux-arm-glibc': 2.5.6 - '@parcel/watcher-linux-arm-musl': 2.5.6 - '@parcel/watcher-linux-arm64-glibc': 2.5.6 - '@parcel/watcher-linux-arm64-musl': 2.5.6 - '@parcel/watcher-linux-x64-glibc': 2.5.6 - '@parcel/watcher-linux-x64-musl': 2.5.6 - '@parcel/watcher-win32-arm64': 2.5.6 - '@parcel/watcher-win32-ia32': 2.5.6 - '@parcel/watcher-win32-x64': 2.5.6 + '@parcel/watcher-android-arm64': 2.6.0 + '@parcel/watcher-darwin-arm64': 2.6.0 + '@parcel/watcher-darwin-x64': 2.6.0 + '@parcel/watcher-freebsd-x64': 2.6.0 + '@parcel/watcher-linux-arm-glibc': 2.6.0 + '@parcel/watcher-linux-arm-musl': 2.6.0 + '@parcel/watcher-linux-arm64-glibc': 2.6.0 + '@parcel/watcher-linux-arm64-musl': 2.6.0 + '@parcel/watcher-linux-x64-glibc': 2.6.0 + '@parcel/watcher-linux-x64-musl': 2.6.0 + '@parcel/watcher-win32-arm64': 2.6.0 + '@parcel/watcher-win32-x64': 2.6.0 '@phc/format@1.0.0': {} - '@pinia/nuxt@0.11.3(magicast@0.5.3)(pinia@3.0.4(typescript@6.0.3)(vue@3.5.35(typescript@6.0.3)))': + '@pinia/nuxt@1.0.1(magic-string@1.0.0)(magicast@0.5.3)(oxc-parser@0.140.0)(pinia@4.0.2(@vue/devtools-api@8.1.5)(typescript@6.0.3)(vue@3.5.40(typescript@6.0.3)))(rolldown@1.2.0)(unplugin@3.3.0(esbuild@0.28.1)(rolldown@1.2.0)(rollup@4.62.2)(vite@8.1.5(@types/node@26.1.1)(esbuild@0.28.1)(jiti@1.21.7)(terser@5.49.0)(tsx@4.23.1)(yaml@2.9.0)))': dependencies: - '@nuxt/kit': 4.4.6(magicast@0.5.3) - pinia: 3.0.4(typescript@6.0.3)(vue@3.5.35(typescript@6.0.3)) + '@nuxt/kit': 4.5.0(magic-string@1.0.0)(magicast@0.5.3)(oxc-parser@0.140.0)(rolldown@1.2.0)(unplugin@3.3.0(esbuild@0.28.1)(rolldown@1.2.0)(rollup@4.62.2)(vite@8.1.5(@types/node@26.1.1)(esbuild@0.28.1)(jiti@1.21.7)(terser@5.49.0)(tsx@4.23.1)(yaml@2.9.0))) + pinia: 4.0.2(@vue/devtools-api@8.1.5)(typescript@6.0.3)(vue@3.5.40(typescript@6.0.3)) transitivePeerDependencies: + - magic-string - magicast + - oxc-parser + - rolldown + - unplugin '@pkgjs/parseargs@0.11.0': optional: true @@ -8279,152 +8338,250 @@ snapshots: '@poppinss/exception@1.2.3': {} + '@rolldown/binding-android-arm64@1.1.5': + optional: true + + '@rolldown/binding-android-arm64@1.2.0': + optional: true + + '@rolldown/binding-darwin-arm64@1.1.5': + optional: true + + '@rolldown/binding-darwin-arm64@1.2.0': + optional: true + + '@rolldown/binding-darwin-x64@1.1.5': + optional: true + + '@rolldown/binding-darwin-x64@1.2.0': + optional: true + + '@rolldown/binding-freebsd-x64@1.1.5': + optional: true + + '@rolldown/binding-freebsd-x64@1.2.0': + optional: true + + '@rolldown/binding-linux-arm-gnueabihf@1.1.5': + optional: true + + '@rolldown/binding-linux-arm-gnueabihf@1.2.0': + optional: true + + '@rolldown/binding-linux-arm64-gnu@1.1.5': + optional: true + + '@rolldown/binding-linux-arm64-gnu@1.2.0': + optional: true + + '@rolldown/binding-linux-arm64-musl@1.1.5': + optional: true + + '@rolldown/binding-linux-arm64-musl@1.2.0': + optional: true + + '@rolldown/binding-linux-ppc64-gnu@1.1.5': + optional: true + + '@rolldown/binding-linux-ppc64-gnu@1.2.0': + optional: true + + '@rolldown/binding-linux-s390x-gnu@1.1.5': + optional: true + + '@rolldown/binding-linux-s390x-gnu@1.2.0': + optional: true + + '@rolldown/binding-linux-x64-gnu@1.1.5': + optional: true + + '@rolldown/binding-linux-x64-gnu@1.2.0': + optional: true + + '@rolldown/binding-linux-x64-musl@1.1.5': + optional: true + + '@rolldown/binding-linux-x64-musl@1.2.0': + optional: true + + '@rolldown/binding-openharmony-arm64@1.1.5': + optional: true + + '@rolldown/binding-openharmony-arm64@1.2.0': + optional: true + + '@rolldown/binding-wasm32-wasi@1.1.5': + dependencies: + '@emnapi/core': 1.11.1 + '@emnapi/runtime': 1.11.1 + '@napi-rs/wasm-runtime': 1.1.6(@emnapi/core@1.11.1)(@emnapi/runtime@1.11.1) + optional: true + + '@rolldown/binding-wasm32-wasi@1.2.0': + dependencies: + '@emnapi/core': 1.11.2 + '@emnapi/runtime': 1.11.2 + '@napi-rs/wasm-runtime': 1.1.6(@emnapi/core@1.11.2)(@emnapi/runtime@1.11.2) + optional: true + + '@rolldown/binding-win32-arm64-msvc@1.1.5': + optional: true + + '@rolldown/binding-win32-arm64-msvc@1.2.0': + optional: true + + '@rolldown/binding-win32-x64-msvc@1.1.5': + optional: true + + '@rolldown/binding-win32-x64-msvc@1.2.0': + optional: true + '@rolldown/pluginutils@1.0.1': {} - '@rollup/plugin-alias@6.0.0(rollup@4.60.4)': + '@rollup/plugin-alias@6.0.0(rollup@4.62.2)': optionalDependencies: - rollup: 4.60.4 + rollup: 4.62.2 - '@rollup/plugin-commonjs@29.0.3(rollup@4.60.4)': + '@rollup/plugin-commonjs@29.0.3(rollup@4.62.2)': dependencies: - '@rollup/pluginutils': 5.4.0(rollup@4.60.4) + '@rollup/pluginutils': 5.4.0(rollup@4.62.2) commondir: 1.0.1 estree-walker: 2.0.2 - fdir: 6.5.0(picomatch@4.0.4) + fdir: 6.5.0(picomatch@4.0.5) is-reference: 1.2.1 magic-string: 0.30.21 - picomatch: 4.0.4 + picomatch: 4.0.5 optionalDependencies: - rollup: 4.60.4 + rollup: 4.62.2 - '@rollup/plugin-inject@5.0.5(rollup@4.60.4)': + '@rollup/plugin-inject@5.0.5(rollup@4.62.2)': dependencies: - '@rollup/pluginutils': 5.4.0(rollup@4.60.4) + '@rollup/pluginutils': 5.4.0(rollup@4.62.2) estree-walker: 2.0.2 magic-string: 0.30.21 optionalDependencies: - rollup: 4.60.4 + rollup: 4.62.2 - '@rollup/plugin-json@6.1.0(rollup@4.60.4)': + '@rollup/plugin-json@6.1.0(rollup@4.62.2)': dependencies: - '@rollup/pluginutils': 5.4.0(rollup@4.60.4) + '@rollup/pluginutils': 5.4.0(rollup@4.62.2) optionalDependencies: - rollup: 4.60.4 + rollup: 4.62.2 - '@rollup/plugin-node-resolve@16.0.3(rollup@4.60.4)': + '@rollup/plugin-node-resolve@16.0.3(rollup@4.62.2)': dependencies: - '@rollup/pluginutils': 5.4.0(rollup@4.60.4) + '@rollup/pluginutils': 5.4.0(rollup@4.62.2) '@types/resolve': 1.20.2 deepmerge: 4.3.1 is-module: 1.0.0 resolve: 1.22.12 optionalDependencies: - rollup: 4.60.4 + rollup: 4.62.2 - '@rollup/plugin-replace@6.0.3(rollup@4.60.4)': + '@rollup/plugin-replace@6.0.3(rollup@4.62.2)': dependencies: - '@rollup/pluginutils': 5.4.0(rollup@4.60.4) + '@rollup/pluginutils': 5.4.0(rollup@4.62.2) magic-string: 0.30.21 optionalDependencies: - rollup: 4.60.4 + rollup: 4.62.2 - '@rollup/plugin-terser@1.0.0(rollup@4.60.4)': + '@rollup/plugin-terser@1.0.0(rollup@4.62.2)': dependencies: - serialize-javascript: 7.0.5 + serialize-javascript: 7.0.7 smob: 1.6.2 - terser: 5.48.0 + terser: 5.49.0 optionalDependencies: - rollup: 4.60.4 + rollup: 4.62.2 - '@rollup/plugin-yaml@4.1.2(rollup@4.60.4)': + '@rollup/plugin-yaml@4.1.2(rollup@4.62.2)': dependencies: - '@rollup/pluginutils': 5.4.0(rollup@4.60.4) - js-yaml: 4.1.1 + '@rollup/pluginutils': 5.4.0(rollup@4.62.2) + js-yaml: 4.3.0 tosource: 2.0.0-alpha.3 optionalDependencies: - rollup: 4.60.4 + rollup: 4.62.2 - '@rollup/pluginutils@5.4.0(rollup@4.60.4)': + '@rollup/pluginutils@5.4.0(rollup@4.62.2)': dependencies: '@types/estree': 1.0.9 estree-walker: 2.0.2 - picomatch: 4.0.4 + picomatch: 4.0.5 optionalDependencies: - rollup: 4.60.4 + rollup: 4.62.2 - '@rollup/rollup-android-arm-eabi@4.60.4': + '@rollup/rollup-android-arm-eabi@4.62.2': optional: true - '@rollup/rollup-android-arm64@4.60.4': + '@rollup/rollup-android-arm64@4.62.2': optional: true - '@rollup/rollup-darwin-arm64@4.60.4': + '@rollup/rollup-darwin-arm64@4.62.2': optional: true - '@rollup/rollup-darwin-x64@4.60.4': + '@rollup/rollup-darwin-x64@4.62.2': optional: true - '@rollup/rollup-freebsd-arm64@4.60.4': + '@rollup/rollup-freebsd-arm64@4.62.2': optional: true - '@rollup/rollup-freebsd-x64@4.60.4': + '@rollup/rollup-freebsd-x64@4.62.2': optional: true - '@rollup/rollup-linux-arm-gnueabihf@4.60.4': + '@rollup/rollup-linux-arm-gnueabihf@4.62.2': optional: true - '@rollup/rollup-linux-arm-musleabihf@4.60.4': + '@rollup/rollup-linux-arm-musleabihf@4.62.2': optional: true - '@rollup/rollup-linux-arm64-gnu@4.60.4': + '@rollup/rollup-linux-arm64-gnu@4.62.2': optional: true - '@rollup/rollup-linux-arm64-musl@4.60.4': + '@rollup/rollup-linux-arm64-musl@4.62.2': optional: true - '@rollup/rollup-linux-loong64-gnu@4.60.4': + '@rollup/rollup-linux-loong64-gnu@4.62.2': optional: true - '@rollup/rollup-linux-loong64-musl@4.60.4': + '@rollup/rollup-linux-loong64-musl@4.62.2': optional: true - '@rollup/rollup-linux-ppc64-gnu@4.60.4': + '@rollup/rollup-linux-ppc64-gnu@4.62.2': optional: true - '@rollup/rollup-linux-ppc64-musl@4.60.4': + '@rollup/rollup-linux-ppc64-musl@4.62.2': optional: true - '@rollup/rollup-linux-riscv64-gnu@4.60.4': + '@rollup/rollup-linux-riscv64-gnu@4.62.2': optional: true - '@rollup/rollup-linux-riscv64-musl@4.60.4': + '@rollup/rollup-linux-riscv64-musl@4.62.2': optional: true - '@rollup/rollup-linux-s390x-gnu@4.60.4': + '@rollup/rollup-linux-s390x-gnu@4.62.2': optional: true - '@rollup/rollup-linux-x64-gnu@4.60.4': + '@rollup/rollup-linux-x64-gnu@4.62.2': optional: true - '@rollup/rollup-linux-x64-musl@4.60.4': + '@rollup/rollup-linux-x64-musl@4.62.2': optional: true - '@rollup/rollup-openbsd-x64@4.60.4': + '@rollup/rollup-openbsd-x64@4.62.2': optional: true - '@rollup/rollup-openharmony-arm64@4.60.4': + '@rollup/rollup-openharmony-arm64@4.62.2': optional: true - '@rollup/rollup-win32-arm64-msvc@4.60.4': + '@rollup/rollup-win32-arm64-msvc@4.62.2': optional: true - '@rollup/rollup-win32-ia32-msvc@4.60.4': + '@rollup/rollup-win32-ia32-msvc@4.62.2': optional: true - '@rollup/rollup-win32-x64-gnu@4.60.4': + '@rollup/rollup-win32-x64-gnu@4.62.2': optional: true - '@rollup/rollup-win32-x64-msvc@4.60.4': + '@rollup/rollup-win32-x64-msvc@4.62.2': optional: true '@simple-git/args-pathspec@1.0.3': {} @@ -8439,37 +8596,37 @@ snapshots: '@sindresorhus/merge-streams@4.0.0': {} - '@speed-highlight/core@1.2.15': {} + '@speed-highlight/core@1.2.17': {} '@standard-schema/spec@1.1.0': {} - '@stylistic/eslint-plugin@5.10.0(eslint@9.39.4(jiti@1.21.7))': + '@stylistic/eslint-plugin@5.10.0(eslint@10.7.0(jiti@1.21.7)(supports-color@10.2.2))': dependencies: - '@eslint-community/eslint-utils': 4.9.1(eslint@9.39.4(jiti@1.21.7)) - '@typescript-eslint/types': 8.60.0 - eslint: 9.39.4(jiti@1.21.7) + '@eslint-community/eslint-utils': 4.9.1(eslint@10.7.0(jiti@1.21.7)(supports-color@10.2.2)) + '@typescript-eslint/types': 8.64.0 + eslint: 10.7.0(jiti@1.21.7)(supports-color@10.2.2) eslint-visitor-keys: 4.2.1 espree: 10.4.0 estraverse: 5.3.0 - picomatch: 4.0.4 + picomatch: 4.0.5 '@swc/helpers@0.5.23': dependencies: tslib: 2.8.1 - '@tailwindcss/forms@0.5.11(tailwindcss@3.4.19(tsx@4.22.3)(yaml@2.9.0))': + '@tailwindcss/forms@0.5.11(tailwindcss@3.4.19(tsx@4.23.1)(yaml@2.9.0))': dependencies: mini-svg-data-uri: 1.4.4 - tailwindcss: 3.4.19(tsx@4.22.3)(yaml@2.9.0) + tailwindcss: 3.4.19(tsx@4.23.1)(yaml@2.9.0) - '@tanstack/virtual-core@3.16.0': {} + '@tanstack/virtual-core@3.17.4': {} - '@tanstack/vue-virtual@3.13.26(vue@3.5.35(typescript@6.0.3))': + '@tanstack/vue-virtual@3.13.32(vue@3.5.40(typescript@6.0.3))': dependencies: - '@tanstack/virtual-core': 3.16.0 - vue: 3.5.35(typescript@6.0.3) + '@tanstack/virtual-core': 3.17.4 + vue: 3.5.40(typescript@6.0.3) - '@tybys/wasm-util@0.10.2': + '@tybys/wasm-util@0.10.3': dependencies: tslib: 2.8.1 optional: true @@ -8483,21 +8640,19 @@ snapshots: '@types/esrecurse@4.3.1': {} - '@types/estree@1.0.8': {} - '@types/estree@1.0.9': {} '@types/jsesc@2.5.1': {} '@types/json-schema@7.0.15': {} - '@types/node@25.9.1': + '@types/node@26.1.1': dependencies: - undici-types: 7.24.6 + undici-types: 8.3.0 '@types/phc__format@1.0.1': dependencies: - '@types/node': 25.9.1 + '@types/node': 26.1.1 '@types/resolve@1.20.2': {} @@ -8509,104 +8664,149 @@ snapshots: '@types/ws@8.18.1': dependencies: - '@types/node': 25.9.1 + '@types/node': 26.1.1 - '@typescript-eslint/eslint-plugin@8.60.0(@typescript-eslint/parser@8.60.0(eslint@9.39.4(jiti@1.21.7))(typescript@6.0.3))(eslint@9.39.4(jiti@1.21.7))(typescript@6.0.3)': + '@typescript-eslint/eslint-plugin@8.64.0(@typescript-eslint/parser@8.64.0(eslint@10.7.0(jiti@1.21.7)(supports-color@10.2.2))(supports-color@10.2.2)(typescript@6.0.3))(eslint@10.7.0(jiti@1.21.7)(supports-color@10.2.2))(supports-color@10.2.2)(typescript@6.0.3)': dependencies: '@eslint-community/regexpp': 4.12.2 - '@typescript-eslint/parser': 8.60.0(eslint@9.39.4(jiti@1.21.7))(typescript@6.0.3) - '@typescript-eslint/scope-manager': 8.60.0 - '@typescript-eslint/type-utils': 8.60.0(eslint@9.39.4(jiti@1.21.7))(typescript@6.0.3) - '@typescript-eslint/utils': 8.60.0(eslint@9.39.4(jiti@1.21.7))(typescript@6.0.3) - '@typescript-eslint/visitor-keys': 8.60.0 - eslint: 9.39.4(jiti@1.21.7) - ignore: 7.0.5 + '@typescript-eslint/parser': 8.64.0(eslint@10.7.0(jiti@1.21.7)(supports-color@10.2.2))(supports-color@10.2.2)(typescript@6.0.3) + '@typescript-eslint/scope-manager': 8.64.0 + '@typescript-eslint/type-utils': 8.64.0(eslint@10.7.0(jiti@1.21.7)(supports-color@10.2.2))(supports-color@10.2.2)(typescript@6.0.3) + '@typescript-eslint/utils': 8.64.0(eslint@10.7.0(jiti@1.21.7)(supports-color@10.2.2))(supports-color@10.2.2)(typescript@6.0.3) + '@typescript-eslint/visitor-keys': 8.64.0 + eslint: 10.7.0(jiti@1.21.7)(supports-color@10.2.2) + ignore: 7.0.6 natural-compare: 1.4.0 ts-api-utils: 2.5.0(typescript@6.0.3) typescript: 6.0.3 transitivePeerDependencies: - supports-color - '@typescript-eslint/parser@8.60.0(eslint@9.39.4(jiti@1.21.7))(typescript@6.0.3)': + '@typescript-eslint/parser@8.64.0(eslint@10.7.0(jiti@1.21.7)(supports-color@10.2.2))(supports-color@10.2.2)(typescript@6.0.3)': dependencies: - '@typescript-eslint/scope-manager': 8.60.0 - '@typescript-eslint/types': 8.60.0 - '@typescript-eslint/typescript-estree': 8.60.0(typescript@6.0.3) - '@typescript-eslint/visitor-keys': 8.60.0 - debug: 4.4.3 - eslint: 9.39.4(jiti@1.21.7) + '@typescript-eslint/scope-manager': 8.64.0 + '@typescript-eslint/types': 8.64.0 + '@typescript-eslint/typescript-estree': 8.64.0(supports-color@10.2.2)(typescript@6.0.3) + '@typescript-eslint/visitor-keys': 8.64.0 + debug: 4.4.3(supports-color@10.2.2) + eslint: 10.7.0(jiti@1.21.7)(supports-color@10.2.2) typescript: 6.0.3 transitivePeerDependencies: - supports-color - '@typescript-eslint/project-service@8.60.0(typescript@6.0.3)': + '@typescript-eslint/project-service@8.64.0(supports-color@10.2.2)(typescript@6.0.3)': dependencies: - '@typescript-eslint/tsconfig-utils': 8.60.0(typescript@6.0.3) - '@typescript-eslint/types': 8.60.0 - debug: 4.4.3 + '@typescript-eslint/tsconfig-utils': 8.64.0(typescript@6.0.3) + '@typescript-eslint/types': 8.64.0 + debug: 4.4.3(supports-color@10.2.2) typescript: 6.0.3 transitivePeerDependencies: - supports-color - '@typescript-eslint/scope-manager@8.60.0': + '@typescript-eslint/scope-manager@8.64.0': dependencies: - '@typescript-eslint/types': 8.60.0 - '@typescript-eslint/visitor-keys': 8.60.0 + '@typescript-eslint/types': 8.64.0 + '@typescript-eslint/visitor-keys': 8.64.0 - '@typescript-eslint/tsconfig-utils@8.60.0(typescript@6.0.3)': + '@typescript-eslint/tsconfig-utils@8.64.0(typescript@6.0.3)': dependencies: typescript: 6.0.3 - '@typescript-eslint/type-utils@8.60.0(eslint@9.39.4(jiti@1.21.7))(typescript@6.0.3)': + '@typescript-eslint/type-utils@8.64.0(eslint@10.7.0(jiti@1.21.7)(supports-color@10.2.2))(supports-color@10.2.2)(typescript@6.0.3)': dependencies: - '@typescript-eslint/types': 8.60.0 - '@typescript-eslint/typescript-estree': 8.60.0(typescript@6.0.3) - '@typescript-eslint/utils': 8.60.0(eslint@9.39.4(jiti@1.21.7))(typescript@6.0.3) - debug: 4.4.3 - eslint: 9.39.4(jiti@1.21.7) + '@typescript-eslint/types': 8.64.0 + '@typescript-eslint/typescript-estree': 8.64.0(supports-color@10.2.2)(typescript@6.0.3) + '@typescript-eslint/utils': 8.64.0(eslint@10.7.0(jiti@1.21.7)(supports-color@10.2.2))(supports-color@10.2.2)(typescript@6.0.3) + debug: 4.4.3(supports-color@10.2.2) + eslint: 10.7.0(jiti@1.21.7)(supports-color@10.2.2) ts-api-utils: 2.5.0(typescript@6.0.3) typescript: 6.0.3 transitivePeerDependencies: - supports-color - '@typescript-eslint/types@8.60.0': {} + '@typescript-eslint/types@8.64.0': {} - '@typescript-eslint/typescript-estree@8.60.0(typescript@6.0.3)': + '@typescript-eslint/typescript-estree@8.64.0(supports-color@10.2.2)(typescript@6.0.3)': dependencies: - '@typescript-eslint/project-service': 8.60.0(typescript@6.0.3) - '@typescript-eslint/tsconfig-utils': 8.60.0(typescript@6.0.3) - '@typescript-eslint/types': 8.60.0 - '@typescript-eslint/visitor-keys': 8.60.0 - debug: 4.4.3 + '@typescript-eslint/project-service': 8.64.0(supports-color@10.2.2)(typescript@6.0.3) + '@typescript-eslint/tsconfig-utils': 8.64.0(typescript@6.0.3) + '@typescript-eslint/types': 8.64.0 + '@typescript-eslint/visitor-keys': 8.64.0 + debug: 4.4.3(supports-color@10.2.2) minimatch: 10.2.5 - semver: 7.8.1 + semver: 7.8.5 tinyglobby: 0.2.17 ts-api-utils: 2.5.0(typescript@6.0.3) typescript: 6.0.3 transitivePeerDependencies: - supports-color - '@typescript-eslint/utils@8.60.0(eslint@9.39.4(jiti@1.21.7))(typescript@6.0.3)': + '@typescript-eslint/utils@8.64.0(eslint@10.7.0(jiti@1.21.7)(supports-color@10.2.2))(supports-color@10.2.2)(typescript@6.0.3)': dependencies: - '@eslint-community/eslint-utils': 4.9.1(eslint@9.39.4(jiti@1.21.7)) - '@typescript-eslint/scope-manager': 8.60.0 - '@typescript-eslint/types': 8.60.0 - '@typescript-eslint/typescript-estree': 8.60.0(typescript@6.0.3) - eslint: 9.39.4(jiti@1.21.7) + '@eslint-community/eslint-utils': 4.9.1(eslint@10.7.0(jiti@1.21.7)(supports-color@10.2.2)) + '@typescript-eslint/scope-manager': 8.64.0 + '@typescript-eslint/types': 8.64.0 + '@typescript-eslint/typescript-estree': 8.64.0(supports-color@10.2.2)(typescript@6.0.3) + eslint: 10.7.0(jiti@1.21.7)(supports-color@10.2.2) typescript: 6.0.3 transitivePeerDependencies: - supports-color - '@typescript-eslint/visitor-keys@8.60.0': + '@typescript-eslint/visitor-keys@8.64.0': dependencies: - '@typescript-eslint/types': 8.60.0 + '@typescript-eslint/types': 8.64.0 eslint-visitor-keys: 5.0.1 - '@unhead/vue@2.1.15(vue@3.5.35(typescript@6.0.3))': + '@unhead/bundler@3.2.1(crossws@0.4.10(srvx@0.11.22))(esbuild@0.28.1)(lightningcss@1.33.0)(rolldown@1.2.0)(rollup@4.62.2)(typescript@6.0.3)(unhead@3.2.1(esbuild@0.28.1)(rolldown@1.2.0)(rollup@4.62.2)(vite@8.1.5(@types/node@26.1.1)(esbuild@0.28.1)(jiti@1.21.7)(terser@5.49.0)(tsx@4.23.1)(yaml@2.9.0)))(vite@8.1.5(@types/node@26.1.1)(esbuild@0.28.1)(jiti@1.21.7)(terser@5.49.0)(tsx@4.23.1)(yaml@2.9.0))': dependencies: + '@vitejs/devtools-kit': 0.3.4(crossws@0.4.10(srvx@0.11.22))(esbuild@0.28.1)(rolldown@1.2.0)(rollup@4.62.2)(typescript@6.0.3)(vite@8.1.5(@types/node@26.1.1)(esbuild@0.28.1)(jiti@1.21.7)(terser@5.49.0)(tsx@4.23.1)(yaml@2.9.0)) + magic-string: 1.0.0 + oxc-parser: 0.140.0 + oxc-walker: 1.0.0(esbuild@0.28.1)(oxc-parser@0.140.0)(rolldown@1.2.0)(rollup@4.62.2)(vite@8.1.5(@types/node@26.1.1)(esbuild@0.28.1)(jiti@1.21.7)(terser@5.49.0)(tsx@4.23.1)(yaml@2.9.0)) + ufo: 1.6.4 + unhead: 3.2.1(esbuild@0.28.1)(rolldown@1.2.0)(rollup@4.62.2)(vite@8.1.5(@types/node@26.1.1)(esbuild@0.28.1)(jiti@1.21.7)(terser@5.49.0)(tsx@4.23.1)(yaml@2.9.0)) + unplugin: 3.3.0(esbuild@0.28.1)(rolldown@1.2.0)(rollup@4.62.2)(vite@8.1.5(@types/node@26.1.1)(esbuild@0.28.1)(jiti@1.21.7)(terser@5.49.0)(tsx@4.23.1)(yaml@2.9.0)) + optionalDependencies: + esbuild: 0.28.1 + lightningcss: 1.33.0 + rolldown: 1.2.0 + vite: 8.1.5(@types/node@26.1.1)(esbuild@0.28.1)(jiti@1.21.7)(terser@5.49.0)(tsx@4.23.1)(yaml@2.9.0) + transitivePeerDependencies: + - '@farmfe/core' + - '@modelcontextprotocol/sdk' + - '@rspack/core' + - bufferutil + - bun-types-no-globals + - crossws + - rollup + - typescript + - unloader + - utf-8-validate + + '@unhead/vue@3.2.1(crossws@0.4.10(srvx@0.11.22))(esbuild@0.28.1)(lightningcss@1.33.0)(rolldown@1.2.0)(rollup@4.62.2)(typescript@6.0.3)(vite@8.1.5(@types/node@26.1.1)(esbuild@0.28.1)(jiti@1.21.7)(terser@5.49.0)(tsx@4.23.1)(yaml@2.9.0))(vue@3.5.40(typescript@6.0.3))': + dependencies: + '@unhead/bundler': 3.2.1(crossws@0.4.10(srvx@0.11.22))(esbuild@0.28.1)(lightningcss@1.33.0)(rolldown@1.2.0)(rollup@4.62.2)(typescript@6.0.3)(unhead@3.2.1(esbuild@0.28.1)(rolldown@1.2.0)(rollup@4.62.2)(vite@8.1.5(@types/node@26.1.1)(esbuild@0.28.1)(jiti@1.21.7)(terser@5.49.0)(tsx@4.23.1)(yaml@2.9.0)))(vite@8.1.5(@types/node@26.1.1)(esbuild@0.28.1)(jiti@1.21.7)(terser@5.49.0)(tsx@4.23.1)(yaml@2.9.0)) hookable: 6.1.1 - unhead: 2.1.15 - vue: 3.5.35(typescript@6.0.3) + unhead: 3.2.1(esbuild@0.28.1)(rolldown@1.2.0)(rollup@4.62.2)(vite@8.1.5(@types/node@26.1.1)(esbuild@0.28.1)(jiti@1.21.7)(terser@5.49.0)(tsx@4.23.1)(yaml@2.9.0)) + unplugin: 3.3.0(esbuild@0.28.1)(rolldown@1.2.0)(rollup@4.62.2)(vite@8.1.5(@types/node@26.1.1)(esbuild@0.28.1)(jiti@1.21.7)(terser@5.49.0)(tsx@4.23.1)(yaml@2.9.0)) + vue: 3.5.40(typescript@6.0.3) + optionalDependencies: + vite: 8.1.5(@types/node@26.1.1)(esbuild@0.28.1)(jiti@1.21.7)(terser@5.49.0)(tsx@4.23.1)(yaml@2.9.0) + transitivePeerDependencies: + - '@farmfe/core' + - '@modelcontextprotocol/sdk' + - '@rspack/core' + - '@unhead/cli' + - bufferutil + - bun-types-no-globals + - crossws + - esbuild + - lightningcss + - rolldown + - rollup + - typescript + - unloader + - utf-8-validate '@unrs/resolver-binding-android-arm-eabi@1.12.2': optional: true @@ -8666,7 +8866,7 @@ snapshots: dependencies: '@emnapi/core': 1.10.0 '@emnapi/runtime': 1.10.0 - '@napi-rs/wasm-runtime': 1.1.4(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0) + '@napi-rs/wasm-runtime': 1.1.6(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0) optional: true '@unrs/resolver-binding-win32-arm64-msvc@1.12.2': @@ -8678,106 +8878,136 @@ snapshots: '@unrs/resolver-binding-win32-x64-msvc@1.12.2': optional: true - '@vercel/nft@1.10.2(rollup@4.60.4)': + '@valibot/to-json-schema@1.7.1(valibot@1.4.2(typescript@6.0.3))': dependencies: - '@mapbox/node-pre-gyp': 2.0.3 - '@rollup/pluginutils': 5.4.0(rollup@4.60.4) - acorn: 8.16.0 - acorn-import-attributes: 1.9.5(acorn@8.16.0) + valibot: 1.4.2(typescript@6.0.3) + + '@vercel/nft@1.10.2(rollup@4.62.2)(supports-color@10.2.2)': + dependencies: + '@mapbox/node-pre-gyp': 2.0.3(supports-color@10.2.2) + '@rollup/pluginutils': 5.4.0(rollup@4.62.2) + acorn: 8.17.0 + acorn-import-attributes: 1.9.5(acorn@8.17.0) async-sema: 3.1.1 bindings: 1.5.0 estree-walker: 2.0.2 glob: 13.0.6 graceful-fs: 4.2.11 node-gyp-build: 4.8.4 - picomatch: 4.0.4 + picomatch: 4.0.5 resolve-from: 5.0.0 transitivePeerDependencies: - encoding - rollup - supports-color - '@vitejs/plugin-vue-jsx@5.1.5(vite@7.3.3(@types/node@25.9.1)(jiti@1.21.7)(terser@5.48.0)(tsx@4.22.3)(yaml@2.9.0))(vue@3.5.35(typescript@6.0.3))': + '@vitejs/devtools-kit@0.3.4(crossws@0.4.10(srvx@0.11.22))(esbuild@0.28.1)(rolldown@1.2.0)(rollup@4.62.2)(typescript@6.0.3)(vite@8.1.5(@types/node@26.1.1)(esbuild@0.28.1)(jiti@1.21.7)(terser@5.49.0)(tsx@4.23.1)(yaml@2.9.0))': dependencies: - '@babel/core': 7.29.7 - '@babel/plugin-syntax-typescript': 7.29.7(@babel/core@7.29.7) - '@babel/plugin-transform-typescript': 7.29.7(@babel/core@7.29.7) + '@devframes/hub': 0.5.4(devframe@0.5.4(crossws@0.4.10(srvx@0.11.22))(esbuild@0.28.1)(rolldown@1.2.0)(rollup@4.62.2)(typescript@6.0.3)(vite@8.1.5(@types/node@26.1.1)(esbuild@0.28.1)(jiti@1.21.7)(terser@5.49.0)(tsx@4.23.1)(yaml@2.9.0)))(esbuild@0.28.1)(rolldown@1.2.0)(rollup@4.62.2)(vite@8.1.5(@types/node@26.1.1)(esbuild@0.28.1)(jiti@1.21.7)(terser@5.49.0)(tsx@4.23.1)(yaml@2.9.0)) + birpc: 4.0.0 + devframe: 0.5.4(crossws@0.4.10(srvx@0.11.22))(esbuild@0.28.1)(rolldown@1.2.0)(rollup@4.62.2)(typescript@6.0.3)(vite@8.1.5(@types/node@26.1.1)(esbuild@0.28.1)(jiti@1.21.7)(terser@5.49.0)(tsx@4.23.1)(yaml@2.9.0)) + mlly: 1.8.2 + nostics: 1.2.0 + pathe: 2.0.3 + perfect-debounce: 2.1.0 + tinyexec: 1.2.4 + vite: 8.1.5(@types/node@26.1.1)(esbuild@0.28.1)(jiti@1.21.7)(terser@5.49.0)(tsx@4.23.1)(yaml@2.9.0) + transitivePeerDependencies: + - '@farmfe/core' + - '@modelcontextprotocol/sdk' + - '@rspack/core' + - bufferutil + - bun-types-no-globals + - crossws + - esbuild + - rolldown + - rollup + - typescript + - unloader + - utf-8-validate + - webpack + + '@vitejs/plugin-vue-jsx@5.1.6(supports-color@10.2.2)(vite@8.1.5(@types/node@26.1.1)(esbuild@0.28.1)(jiti@1.21.7)(terser@5.49.0)(tsx@4.23.1)(yaml@2.9.0))(vue@3.5.40(typescript@6.0.3))': + dependencies: + '@babel/core': 7.29.7(supports-color@10.2.2) + '@babel/plugin-syntax-typescript': 7.29.7(@babel/core@7.29.7(supports-color@10.2.2)) + '@babel/plugin-transform-typescript': 7.29.7(@babel/core@7.29.7(supports-color@10.2.2))(supports-color@10.2.2) '@rolldown/pluginutils': 1.0.1 - '@vue/babel-plugin-jsx': 2.0.1(@babel/core@7.29.7) - vite: 7.3.3(@types/node@25.9.1)(jiti@1.21.7)(terser@5.48.0)(tsx@4.22.3)(yaml@2.9.0) - vue: 3.5.35(typescript@6.0.3) + '@vue/babel-plugin-jsx': 2.0.1(@babel/core@7.29.7(supports-color@10.2.2))(supports-color@10.2.2) + vite: 8.1.5(@types/node@26.1.1)(esbuild@0.28.1)(jiti@1.21.7)(terser@5.49.0)(tsx@4.23.1)(yaml@2.9.0) + vue: 3.5.40(typescript@6.0.3) transitivePeerDependencies: - supports-color - '@vitejs/plugin-vue@6.0.7(vite@7.3.3(@types/node@25.9.1)(jiti@1.21.7)(terser@5.48.0)(tsx@4.22.3)(yaml@2.9.0))(vue@3.5.35(typescript@6.0.3))': + '@vitejs/plugin-vue@6.0.8(vite@8.1.5(@types/node@26.1.1)(esbuild@0.28.1)(jiti@1.21.7)(terser@5.49.0)(tsx@4.23.1)(yaml@2.9.0))(vue@3.5.40(typescript@6.0.3))': dependencies: '@rolldown/pluginutils': 1.0.1 - vite: 7.3.3(@types/node@25.9.1)(jiti@1.21.7)(terser@5.48.0)(tsx@4.22.3)(yaml@2.9.0) - vue: 3.5.35(typescript@6.0.3) + vite: 8.1.5(@types/node@26.1.1)(esbuild@0.28.1)(jiti@1.21.7)(terser@5.49.0)(tsx@4.23.1)(yaml@2.9.0) + vue: 3.5.40(typescript@6.0.3) - '@vitest/coverage-v8@4.1.7(vitest@4.1.7)': + '@vitest/coverage-v8@4.1.10(vitest@4.1.10)': dependencies: '@bcoe/v8-coverage': 1.0.2 - '@vitest/utils': 4.1.7 - ast-v8-to-istanbul: 1.0.2 + '@vitest/utils': 4.1.10 + ast-v8-to-istanbul: 1.0.5 istanbul-lib-coverage: 3.2.2 istanbul-lib-report: 3.0.1 istanbul-reports: 3.2.0 magicast: 0.5.3 - obug: 2.1.1 - std-env: 4.1.0 + obug: 2.1.4 + std-env: 4.2.0 tinyrainbow: 3.1.0 - vitest: 4.1.7(@types/node@25.9.1)(@vitest/coverage-v8@4.1.7)(@vitest/ui@4.1.7)(vite@7.3.3(@types/node@25.9.1)(jiti@1.21.7)(terser@5.48.0)(tsx@4.22.3)(yaml@2.9.0)) + vitest: 4.1.10(@types/node@26.1.1)(@vitest/coverage-v8@4.1.10)(@vitest/ui@4.1.10)(vite@8.1.5(@types/node@26.1.1)(esbuild@0.28.1)(jiti@1.21.7)(terser@5.49.0)(tsx@4.23.1)(yaml@2.9.0)) - '@vitest/expect@4.1.7': + '@vitest/expect@4.1.10': dependencies: '@standard-schema/spec': 1.1.0 '@types/chai': 5.2.3 - '@vitest/spy': 4.1.7 - '@vitest/utils': 4.1.7 + '@vitest/spy': 4.1.10 + '@vitest/utils': 4.1.10 chai: 6.2.2 tinyrainbow: 3.1.0 - '@vitest/mocker@4.1.7(vite@7.3.3(@types/node@25.9.1)(jiti@1.21.7)(terser@5.48.0)(tsx@4.22.3)(yaml@2.9.0))': + '@vitest/mocker@4.1.10(vite@8.1.5(@types/node@26.1.1)(esbuild@0.28.1)(jiti@1.21.7)(terser@5.49.0)(tsx@4.23.1)(yaml@2.9.0))': dependencies: - '@vitest/spy': 4.1.7 + '@vitest/spy': 4.1.10 estree-walker: 3.0.3 magic-string: 0.30.21 optionalDependencies: - vite: 7.3.3(@types/node@25.9.1)(jiti@1.21.7)(terser@5.48.0)(tsx@4.22.3)(yaml@2.9.0) + vite: 8.1.5(@types/node@26.1.1)(esbuild@0.28.1)(jiti@1.21.7)(terser@5.49.0)(tsx@4.23.1)(yaml@2.9.0) - '@vitest/pretty-format@4.1.7': + '@vitest/pretty-format@4.1.10': dependencies: tinyrainbow: 3.1.0 - '@vitest/runner@4.1.7': + '@vitest/runner@4.1.10': dependencies: - '@vitest/utils': 4.1.7 + '@vitest/utils': 4.1.10 pathe: 2.0.3 - '@vitest/snapshot@4.1.7': + '@vitest/snapshot@4.1.10': dependencies: - '@vitest/pretty-format': 4.1.7 - '@vitest/utils': 4.1.7 + '@vitest/pretty-format': 4.1.10 + '@vitest/utils': 4.1.10 magic-string: 0.30.21 pathe: 2.0.3 - '@vitest/spy@4.1.7': {} + '@vitest/spy@4.1.10': {} - '@vitest/ui@4.1.7(vitest@4.1.7)': + '@vitest/ui@4.1.10(vitest@4.1.10)': dependencies: - '@vitest/utils': 4.1.7 + '@vitest/utils': 4.1.10 fflate: 0.8.3 flatted: 3.4.2 pathe: 2.0.3 sirv: 3.0.2 tinyglobby: 0.2.17 tinyrainbow: 3.1.0 - vitest: 4.1.7(@types/node@25.9.1)(@vitest/coverage-v8@4.1.7)(@vitest/ui@4.1.7)(vite@7.3.3(@types/node@25.9.1)(jiti@1.21.7)(terser@5.48.0)(tsx@4.22.3)(yaml@2.9.0)) + vitest: 4.1.10(@types/node@26.1.1)(@vitest/coverage-v8@4.1.10)(@vitest/ui@4.1.10)(vite@8.1.5(@types/node@26.1.1)(esbuild@0.28.1)(jiti@1.21.7)(terser@5.49.0)(tsx@4.23.1)(yaml@2.9.0)) - '@vitest/utils@4.1.7': + '@vitest/utils@4.1.10': dependencies: - '@vitest/pretty-format': 4.1.7 + '@vitest/pretty-format': 4.1.10 convert-source-map: 2.0.0 tinyrainbow: 3.1.0 @@ -8793,190 +9023,176 @@ snapshots: path-browserify: 1.0.1 vscode-uri: 3.1.0 - '@vue-macros/common@3.1.2(vue@3.5.35(typescript@6.0.3))': + '@vue-macros/common@3.1.4(vue@3.5.40(typescript@6.0.3))': dependencies: - '@vue/compiler-sfc': 3.5.35 + '@vue/compiler-sfc': 3.5.40 ast-kit: 2.2.0 local-pkg: 1.2.1 magic-string-ast: 1.0.3 - unplugin-utils: 0.3.1 + unplugin-utils: 0.3.2 optionalDependencies: - vue: 3.5.35(typescript@6.0.3) + vue: 3.5.40(typescript@6.0.3) '@vue/babel-helper-vue-transform-on@2.0.1': {} - '@vue/babel-plugin-jsx@2.0.1(@babel/core@7.29.7)': + '@vue/babel-plugin-jsx@2.0.1(@babel/core@7.29.7(supports-color@10.2.2))(supports-color@10.2.2)': dependencies: - '@babel/helper-module-imports': 7.29.7 + '@babel/helper-module-imports': 7.29.7(supports-color@10.2.2) '@babel/helper-plugin-utils': 7.29.7 - '@babel/plugin-syntax-jsx': 7.29.7(@babel/core@7.29.7) + '@babel/plugin-syntax-jsx': 7.29.7(@babel/core@7.29.7(supports-color@10.2.2)) '@babel/template': 7.29.7 - '@babel/traverse': 7.29.7 + '@babel/traverse': 7.29.7(supports-color@10.2.2) '@babel/types': 7.29.7 '@vue/babel-helper-vue-transform-on': 2.0.1 - '@vue/babel-plugin-resolve-type': 2.0.1(@babel/core@7.29.7) - '@vue/shared': 3.5.35 + '@vue/babel-plugin-resolve-type': 2.0.1(@babel/core@7.29.7(supports-color@10.2.2))(supports-color@10.2.2) + '@vue/shared': 3.5.40 optionalDependencies: - '@babel/core': 7.29.7 + '@babel/core': 7.29.7(supports-color@10.2.2) transitivePeerDependencies: - supports-color - '@vue/babel-plugin-resolve-type@2.0.1(@babel/core@7.29.7)': + '@vue/babel-plugin-resolve-type@2.0.1(@babel/core@7.29.7(supports-color@10.2.2))(supports-color@10.2.2)': dependencies: '@babel/code-frame': 7.29.7 - '@babel/core': 7.29.7 - '@babel/helper-module-imports': 7.29.7 + '@babel/core': 7.29.7(supports-color@10.2.2) + '@babel/helper-module-imports': 7.29.7(supports-color@10.2.2) '@babel/helper-plugin-utils': 7.29.7 '@babel/parser': 7.29.7 - '@vue/compiler-sfc': 3.5.35 + '@vue/compiler-sfc': 3.5.40 transitivePeerDependencies: - supports-color - '@vue/compiler-core@3.5.35': + '@vue/compiler-core@3.5.40': dependencies: '@babel/parser': 7.29.7 - '@vue/shared': 3.5.35 + '@vue/shared': 3.5.40 entities: 7.0.1 estree-walker: 2.0.2 source-map-js: 1.2.1 - '@vue/compiler-dom@3.5.35': + '@vue/compiler-dom@3.5.40': dependencies: - '@vue/compiler-core': 3.5.35 - '@vue/shared': 3.5.35 + '@vue/compiler-core': 3.5.40 + '@vue/shared': 3.5.40 - '@vue/compiler-sfc@3.5.35': + '@vue/compiler-sfc@3.5.40': dependencies: '@babel/parser': 7.29.7 - '@vue/compiler-core': 3.5.35 - '@vue/compiler-dom': 3.5.35 - '@vue/compiler-ssr': 3.5.35 - '@vue/shared': 3.5.35 + '@vue/compiler-core': 3.5.40 + '@vue/compiler-dom': 3.5.40 + '@vue/compiler-ssr': 3.5.40 + '@vue/shared': 3.5.40 estree-walker: 2.0.2 magic-string: 0.30.21 - postcss: 8.5.15 + postcss: 8.5.20 source-map-js: 1.2.1 - '@vue/compiler-ssr@3.5.35': + '@vue/compiler-ssr@3.5.40': dependencies: - '@vue/compiler-dom': 3.5.35 - '@vue/shared': 3.5.35 + '@vue/compiler-dom': 3.5.40 + '@vue/shared': 3.5.40 '@vue/devtools-api@6.6.4': {} - '@vue/devtools-api@7.7.9': + '@vue/devtools-api@8.1.5': dependencies: - '@vue/devtools-kit': 7.7.9 + '@vue/devtools-kit': 8.1.5 - '@vue/devtools-api@8.1.2': + '@vue/devtools-core@8.1.5(vue@3.5.40(typescript@6.0.3))': dependencies: - '@vue/devtools-kit': 8.1.2 + '@vue/devtools-kit': 8.1.5 + '@vue/devtools-shared': 8.1.5 + vue: 3.5.40(typescript@6.0.3) - '@vue/devtools-core@8.1.2(vue@3.5.35(typescript@6.0.3))': + '@vue/devtools-kit@8.1.5': dependencies: - '@vue/devtools-kit': 8.1.2 - '@vue/devtools-shared': 8.1.2 - vue: 3.5.35(typescript@6.0.3) - - '@vue/devtools-kit@7.7.9': - dependencies: - '@vue/devtools-shared': 7.7.9 - birpc: 2.9.0 - hookable: 5.5.3 - mitt: 3.0.1 - perfect-debounce: 1.0.0 - speakingurl: 14.0.1 - superjson: 2.2.6 - - '@vue/devtools-kit@8.1.2': - dependencies: - '@vue/devtools-shared': 8.1.2 + '@vue/devtools-shared': 8.1.5 birpc: 2.9.0 hookable: 5.5.3 perfect-debounce: 2.1.0 - '@vue/devtools-shared@7.7.9': - dependencies: - rfdc: 1.4.1 + '@vue/devtools-shared@8.1.5': {} - '@vue/devtools-shared@8.1.2': {} - - '@vue/language-core@3.3.3': + '@vue/language-core@3.3.7': dependencies: '@volar/language-core': 2.4.28 - '@vue/compiler-dom': 3.5.35 - '@vue/shared': 3.5.35 + '@vue/compiler-dom': 3.5.40 + '@vue/shared': 3.5.40 alien-signals: 3.2.1 muggle-string: 0.4.1 path-browserify: 1.0.1 - picomatch: 4.0.4 + picomatch: 4.0.5 - '@vue/reactivity@3.5.35': + '@vue/reactivity@3.5.40': dependencies: - '@vue/shared': 3.5.35 + '@vue/shared': 3.5.40 - '@vue/runtime-core@3.5.35': + '@vue/runtime-core@3.5.40': dependencies: - '@vue/reactivity': 3.5.35 - '@vue/shared': 3.5.35 + '@vue/reactivity': 3.5.40 + '@vue/shared': 3.5.40 - '@vue/runtime-dom@3.5.35': + '@vue/runtime-dom@3.5.40': dependencies: - '@vue/reactivity': 3.5.35 - '@vue/runtime-core': 3.5.35 - '@vue/shared': 3.5.35 + '@vue/reactivity': 3.5.40 + '@vue/runtime-core': 3.5.40 + '@vue/shared': 3.5.40 csstype: 3.2.3 - '@vue/server-renderer@3.5.35(vue@3.5.35(typescript@6.0.3))': + '@vue/server-renderer@3.5.40': dependencies: - '@vue/compiler-ssr': 3.5.35 - '@vue/shared': 3.5.35 - vue: 3.5.35(typescript@6.0.3) + '@vue/compiler-ssr': 3.5.40 + '@vue/runtime-dom': 3.5.40 + '@vue/shared': 3.5.40 - '@vue/shared@3.5.35': {} + '@vue/shared@3.5.40': {} - '@vueuse/core@10.11.1(vue@3.5.35(typescript@6.0.3))': + '@vueuse/core@10.11.1(vue@3.5.40(typescript@6.0.3))': dependencies: '@types/web-bluetooth': 0.0.20 '@vueuse/metadata': 10.11.1 - '@vueuse/shared': 10.11.1(vue@3.5.35(typescript@6.0.3)) - vue-demi: 0.14.10(vue@3.5.35(typescript@6.0.3)) + '@vueuse/shared': 10.11.1(vue@3.5.40(typescript@6.0.3)) + vue-demi: 0.14.10(vue@3.5.40(typescript@6.0.3)) transitivePeerDependencies: - '@vue/composition-api' - vue - '@vueuse/core@14.3.0(vue@3.5.35(typescript@6.0.3))': + '@vueuse/core@14.3.0(vue@3.5.40(typescript@6.0.3))': dependencies: '@types/web-bluetooth': 0.0.21 '@vueuse/metadata': 14.3.0 - '@vueuse/shared': 14.3.0(vue@3.5.35(typescript@6.0.3)) - vue: 3.5.35(typescript@6.0.3) + '@vueuse/shared': 14.3.0(vue@3.5.40(typescript@6.0.3)) + vue: 3.5.40(typescript@6.0.3) '@vueuse/metadata@10.11.1': {} '@vueuse/metadata@14.3.0': {} - '@vueuse/nuxt@14.3.0(magicast@0.5.3)(nuxt@3.21.6(@libsql/client@0.17.3)(@parcel/watcher@2.5.6)(@types/node@25.9.1)(@vue/compiler-sfc@3.5.35)(cac@6.7.14)(db0@0.3.4(@libsql/client@0.17.3)(drizzle-orm@0.45.2(@libsql/client@0.17.3)))(drizzle-orm@0.45.2(@libsql/client@0.17.3))(eslint@9.39.4(jiti@1.21.7))(ioredis@5.11.0)(magicast@0.5.3)(optionator@0.9.4)(rollup-plugin-visualizer@7.0.1(rollup@4.60.4))(rollup@4.60.4)(srvx@0.11.16)(terser@5.48.0)(tsx@4.22.3)(typescript@6.0.3)(vite@7.3.3(@types/node@25.9.1)(jiti@1.21.7)(terser@5.48.0)(tsx@4.22.3)(yaml@2.9.0))(vue-tsc@3.3.3(typescript@6.0.3))(yaml@2.9.0))(vue@3.5.35(typescript@6.0.3))': + '@vueuse/nuxt@14.3.0(2787507ebea9057249be34ac04e53d9b)': dependencies: - '@nuxt/kit': 4.4.6(magicast@0.5.3) - '@vueuse/core': 14.3.0(vue@3.5.35(typescript@6.0.3)) + '@nuxt/kit': 4.5.0(magic-string@1.0.0)(magicast@0.5.3)(oxc-parser@0.140.0)(rolldown@1.2.0)(unplugin@3.3.0(esbuild@0.28.1)(rolldown@1.2.0)(rollup@4.62.2)(vite@8.1.5(@types/node@26.1.1)(esbuild@0.28.1)(jiti@1.21.7)(terser@5.49.0)(tsx@4.23.1)(yaml@2.9.0))) + '@vueuse/core': 14.3.0(vue@3.5.40(typescript@6.0.3)) '@vueuse/metadata': 14.3.0 local-pkg: 1.2.1 - nuxt: 3.21.6(@libsql/client@0.17.3)(@parcel/watcher@2.5.6)(@types/node@25.9.1)(@vue/compiler-sfc@3.5.35)(cac@6.7.14)(db0@0.3.4(@libsql/client@0.17.3)(drizzle-orm@0.45.2(@libsql/client@0.17.3)))(drizzle-orm@0.45.2(@libsql/client@0.17.3))(eslint@9.39.4(jiti@1.21.7))(ioredis@5.11.0)(magicast@0.5.3)(optionator@0.9.4)(rollup-plugin-visualizer@7.0.1(rollup@4.60.4))(rollup@4.60.4)(srvx@0.11.16)(terser@5.48.0)(tsx@4.22.3)(typescript@6.0.3)(vite@7.3.3(@types/node@25.9.1)(jiti@1.21.7)(terser@5.48.0)(tsx@4.22.3)(yaml@2.9.0))(vue-tsc@3.3.3(typescript@6.0.3))(yaml@2.9.0) - vue: 3.5.35(typescript@6.0.3) + nuxt: 4.5.0(@babel/plugin-syntax-jsx@7.29.7(@babel/core@7.29.7(supports-color@10.2.2)))(@babel/plugin-syntax-typescript@7.29.7(@babel/core@7.29.7(supports-color@10.2.2)))(@libsql/client@0.17.4)(@parcel/watcher@2.6.0)(@types/node@26.1.1)(@vue/compiler-sfc@3.5.40)(crossws@0.4.10(srvx@0.11.22))(db0@0.3.4(@libsql/client@0.17.4)(drizzle-orm@0.45.2(@libsql/client@0.17.4)))(drizzle-orm@0.45.2(@libsql/client@0.17.4))(esbuild@0.28.1)(eslint@10.7.0(jiti@1.21.7)(supports-color@10.2.2))(ioredis@5.11.1(supports-color@10.2.2))(lightningcss@1.33.0)(magicast@0.5.3)(optionator@0.9.4)(oxc-parser@0.140.0)(pinia@4.0.2(@vue/devtools-api@8.1.5)(typescript@6.0.3)(vue@3.5.40(typescript@6.0.3)))(rollup-plugin-visualizer@7.0.1(rolldown@1.2.0)(rollup@4.62.2))(rollup@4.62.2)(srvx@0.11.22)(supports-color@10.2.2)(terser@5.49.0)(tsx@4.23.1)(typescript@6.0.3)(vite@8.1.5(@types/node@26.1.1)(esbuild@0.28.1)(jiti@1.21.7)(terser@5.49.0)(tsx@4.23.1)(yaml@2.9.0))(vue-tsc@3.3.7(typescript@6.0.3))(yaml@2.9.0) + vue: 3.5.40(typescript@6.0.3) transitivePeerDependencies: + - magic-string - magicast + - oxc-parser + - rolldown + - unplugin - '@vueuse/shared@10.11.1(vue@3.5.35(typescript@6.0.3))': + '@vueuse/shared@10.11.1(vue@3.5.40(typescript@6.0.3))': dependencies: - vue-demi: 0.14.10(vue@3.5.35(typescript@6.0.3)) + vue-demi: 0.14.10(vue@3.5.40(typescript@6.0.3)) transitivePeerDependencies: - '@vue/composition-api' - vue - '@vueuse/shared@14.3.0(vue@3.5.35(typescript@6.0.3))': + '@vueuse/shared@14.3.0(vue@3.5.40(typescript@6.0.3))': dependencies: - vue: 3.5.35(typescript@6.0.3) + vue: 3.5.40(typescript@6.0.3) abbrev@3.0.1: {} @@ -8989,15 +9205,15 @@ snapshots: mime-types: 2.1.35 negotiator: 0.6.3 - acorn-import-attributes@1.9.5(acorn@8.16.0): + acorn-import-attributes@1.9.5(acorn@8.17.0): dependencies: - acorn: 8.16.0 + acorn: 8.17.0 - acorn-jsx@5.3.2(acorn@8.16.0): + acorn-jsx@5.3.2(acorn@8.17.0): dependencies: - acorn: 8.16.0 + acorn: 8.17.0 - acorn@8.16.0: {} + acorn@8.17.0: {} agent-base@7.1.4: {} @@ -9020,7 +9236,7 @@ snapshots: ansi-styles@6.2.3: {} - ansis@4.3.0: {} + ansis@4.3.1: {} any-promise@1.3.0: {} @@ -9029,7 +9245,7 @@ snapshots: normalize-path: 3.0.0 picomatch: 2.3.2 - apexcharts@5.13.0: {} + apexcharts@6.3.0: {} archiver-utils@5.0.2: dependencies: @@ -9059,11 +9275,11 @@ snapshots: arg@5.0.2: {} - argon2@0.44.0: + argon2@0.45.0: dependencies: '@phc/format': 1.0.0 cross-env: 10.1.0 - node-addon-api: 8.8.0 + node-addon-api: 8.9.0 node-gyp-build: 4.8.4 argparse@2.0.1: {} @@ -9079,17 +9295,12 @@ snapshots: '@babel/parser': 7.29.7 pathe: 2.0.3 - ast-v8-to-istanbul@1.0.2: + ast-v8-to-istanbul@1.0.5: dependencies: '@jridgewell/trace-mapping': 0.3.31 estree-walker: 3.0.3 js-tokens: 10.0.0 - ast-walker-scope@0.8.3: - dependencies: - '@babel/parser': 7.29.7 - ast-kit: 2.2.0 - ast-walker-scope@0.9.0: dependencies: '@babel/parser': 7.29.7 @@ -9102,13 +9313,13 @@ snapshots: at-least-node@1.0.0: {} - autoprefixer@10.5.0(postcss@8.5.15): + autoprefixer@10.5.4(postcss@8.5.20): dependencies: - browserslist: 4.28.2 - caniuse-lite: 1.0.30001793 + browserslist: 4.28.6 + caniuse-lite: 1.0.30001806 fraction.js: 5.3.4 picocolors: 1.1.1 - postcss: 8.5.15 + postcss: 8.5.20 postcss-value-parser: 4.2.0 b4a@1.8.1: {} @@ -9117,41 +9328,38 @@ snapshots: balanced-match@4.0.4: {} - bare-events@2.8.3: {} + bare-events@2.9.1: {} - bare-fs@4.7.1: + bare-fs@4.7.4: dependencies: - bare-events: 2.8.3 - bare-path: 3.0.0 - bare-stream: 2.13.1(bare-events@2.8.3) - bare-url: 2.4.3 + bare-events: 2.9.1 + bare-path: 3.1.1 + bare-stream: 2.13.3(bare-events@2.9.1) + bare-url: 2.4.5 fast-fifo: 1.3.2 transitivePeerDependencies: - bare-abort-controller - react-native-b4a - bare-os@3.9.1: {} + bare-path@3.1.1: {} - bare-path@3.0.0: + bare-stream@2.13.3(bare-events@2.9.1): dependencies: - bare-os: 3.9.1 - - bare-stream@2.13.1(bare-events@2.8.3): - dependencies: - streamx: 2.26.0 + b4a: 1.8.1 + streamx: 2.28.0 teex: 1.0.1 optionalDependencies: - bare-events: 2.8.3 + bare-events: 2.9.1 transitivePeerDependencies: - react-native-b4a - bare-url@2.4.3: + bare-url@2.4.5: dependencies: - bare-path: 3.0.0 + bare-path: 3.1.1 base64-js@1.5.1: {} - baseline-browser-mapping@2.10.33: {} + baseline-browser-mapping@2.10.43: {} binary-extensions@2.3.0: {} @@ -9165,16 +9373,16 @@ snapshots: boolbase@1.0.0: {} - brace-expansion@1.1.15: + brace-expansion@1.1.16: dependencies: balanced-match: 1.0.2 concat-map: 0.0.1 - brace-expansion@2.1.1: + brace-expansion@2.1.2: dependencies: balanced-match: 1.0.2 - brace-expansion@5.0.6: + brace-expansion@5.0.7: dependencies: balanced-match: 4.0.4 @@ -9182,13 +9390,13 @@ snapshots: dependencies: fill-range: 7.1.1 - browserslist@4.28.2: + browserslist@4.28.6: dependencies: - baseline-browser-mapping: 2.10.33 - caniuse-lite: 1.0.30001793 - electron-to-chromium: 1.5.364 - node-releases: 2.0.46 - update-browserslist-db: 1.2.3(browserslist@4.28.2) + baseline-browser-mapping: 2.10.43 + caniuse-lite: 1.0.30001806 + electron-to-chromium: 1.5.393 + node-releases: 2.0.51 + update-browserslist-db: 1.2.3(browserslist@4.28.6) buffer-crc32@1.0.0: {} @@ -9199,25 +9407,20 @@ snapshots: base64-js: 1.5.1 ieee754: 1.2.1 - builtin-modules@5.2.0: {} + builtin-modules@5.3.0: {} bundle-name@4.1.0: dependencies: run-applescript: 7.1.0 - bundle-require@5.1.0(esbuild@0.27.7): - dependencies: - esbuild: 0.27.7 - load-tsconfig: 0.2.5 - c12@3.3.4(magicast@0.5.3): dependencies: chokidar: 5.0.0 confbox: 0.2.4 defu: 6.1.7 dotenv: 17.4.2 - exsolve: 1.0.8 - giget: 3.2.0 + exsolve: 1.1.0 + giget: 3.3.0 jiti: 2.7.0 ohash: 2.0.11 pathe: 2.0.3 @@ -9227,8 +9430,6 @@ snapshots: optionalDependencies: magicast: 0.5.3 - cac@6.7.14: {} - cac@7.0.0: {} cache-content-type@1.0.1: @@ -9246,18 +9447,14 @@ snapshots: call-bind-apply-helpers: 1.0.2 get-intrinsic: 1.3.0 - callsites@3.1.0: {} - camelcase-css@2.0.1: {} - caniuse-api@3.0.0: + caniuse-api@4.0.0: dependencies: - browserslist: 4.28.2 - caniuse-lite: 1.0.30001793 - lodash.memoize: 4.1.2 - lodash.uniq: 4.5.0 + browserslist: 4.28.6 + caniuse-lite: 1.0.30001806 - caniuse-lite@1.0.30001793: {} + caniuse-lite@1.0.30001806: {} chai@6.2.2: {} @@ -9280,10 +9477,6 @@ snapshots: optionalDependencies: fsevents: 2.3.3 - chokidar@4.0.3: - dependencies: - readdirp: 4.1.2 - chokidar@5.0.0: dependencies: readdirp: 5.0.0 @@ -9294,9 +9487,9 @@ snapshots: cidr-regex@6.0.0: {} - cidr-tools@12.0.2: + cidr-tools@12.1.2: dependencies: - ip-bigint: 9.0.5 + ip-bigint: 9.0.6 citty@0.1.6: dependencies: @@ -9304,10 +9497,6 @@ snapshots: citty@0.2.2: {} - clean-regexp@1.0.0: - dependencies: - escape-string-regexp: 1.0.5 - cliui@8.0.1: dependencies: string-width: 4.2.3 @@ -9342,8 +9531,6 @@ snapshots: commander@6.2.1: {} - comment-parser@1.4.6: {} - comment-parser@1.4.7: {} commondir@1.0.1: {} @@ -9387,13 +9574,9 @@ snapshots: depd: 2.0.0 keygrip: 1.1.0 - copy-anything@4.0.5: - dependencies: - is-what: 5.5.0 - core-js-compat@3.49.0: dependencies: - browserslist: 4.28.2 + browserslist: 4.28.6 core-util-is@1.0.3: {} @@ -9421,13 +9604,9 @@ snapshots: dependencies: uncrypto: 0.1.3 - crossws@0.4.5(srvx@0.11.16): + crossws@0.4.10(srvx@0.11.22): optionalDependencies: - srvx: 0.11.16 - - css-declaration-sorter@7.4.0(postcss@8.5.15): - dependencies: - postcss: 8.5.15 + srvx: 0.11.22 css-select@5.2.2: dependencies: @@ -9451,49 +9630,48 @@ snapshots: cssesc@3.0.0: {} - cssnano-preset-default@7.0.17(postcss@8.5.15): + cssnano-preset-default@8.0.2(postcss@8.5.20): dependencies: - browserslist: 4.28.2 - css-declaration-sorter: 7.4.0(postcss@8.5.15) - cssnano-utils: 5.0.3(postcss@8.5.15) - postcss: 8.5.15 - postcss-calc: 10.1.1(postcss@8.5.15) - postcss-colormin: 7.0.10(postcss@8.5.15) - postcss-convert-values: 7.0.12(postcss@8.5.15) - postcss-discard-comments: 7.0.8(postcss@8.5.15) - postcss-discard-duplicates: 7.0.4(postcss@8.5.15) - postcss-discard-empty: 7.0.3(postcss@8.5.15) - postcss-discard-overridden: 7.0.3(postcss@8.5.15) - postcss-merge-longhand: 7.0.7(postcss@8.5.15) - postcss-merge-rules: 7.0.11(postcss@8.5.15) - postcss-minify-font-values: 7.0.3(postcss@8.5.15) - postcss-minify-gradients: 7.0.5(postcss@8.5.15) - postcss-minify-params: 7.0.9(postcss@8.5.15) - postcss-minify-selectors: 7.1.2(postcss@8.5.15) - postcss-normalize-charset: 7.0.3(postcss@8.5.15) - postcss-normalize-display-values: 7.0.3(postcss@8.5.15) - postcss-normalize-positions: 7.0.4(postcss@8.5.15) - postcss-normalize-repeat-style: 7.0.4(postcss@8.5.15) - postcss-normalize-string: 7.0.3(postcss@8.5.15) - postcss-normalize-timing-functions: 7.0.3(postcss@8.5.15) - postcss-normalize-unicode: 7.0.9(postcss@8.5.15) - postcss-normalize-url: 7.0.3(postcss@8.5.15) - postcss-normalize-whitespace: 7.0.3(postcss@8.5.15) - postcss-ordered-values: 7.0.4(postcss@8.5.15) - postcss-reduce-initial: 7.0.9(postcss@8.5.15) - postcss-reduce-transforms: 7.0.3(postcss@8.5.15) - postcss-svgo: 7.1.3(postcss@8.5.15) - postcss-unique-selectors: 7.0.7(postcss@8.5.15) + browserslist: 4.28.6 + cssnano-utils: 6.0.1(postcss@8.5.20) + postcss: 8.5.20 + postcss-calc: 10.1.1(postcss@8.5.20) + postcss-colormin: 8.0.1(postcss@8.5.20) + postcss-convert-values: 8.0.1(postcss@8.5.20) + postcss-discard-comments: 8.0.1(postcss@8.5.20) + postcss-discard-duplicates: 8.0.1(postcss@8.5.20) + postcss-discard-empty: 8.0.1(postcss@8.5.20) + postcss-discard-overridden: 8.0.1(postcss@8.5.20) + postcss-merge-longhand: 8.0.1(postcss@8.5.20) + postcss-merge-rules: 8.0.1(postcss@8.5.20) + postcss-minify-font-values: 8.0.1(postcss@8.5.20) + postcss-minify-gradients: 8.0.1(postcss@8.5.20) + postcss-minify-params: 8.0.1(postcss@8.5.20) + postcss-minify-selectors: 8.0.2(postcss@8.5.20) + postcss-normalize-charset: 8.0.1(postcss@8.5.20) + postcss-normalize-display-values: 8.0.1(postcss@8.5.20) + postcss-normalize-positions: 8.0.1(postcss@8.5.20) + postcss-normalize-repeat-style: 8.0.1(postcss@8.5.20) + postcss-normalize-string: 8.0.1(postcss@8.5.20) + postcss-normalize-timing-functions: 8.0.1(postcss@8.5.20) + postcss-normalize-unicode: 8.0.1(postcss@8.5.20) + postcss-normalize-url: 8.0.1(postcss@8.5.20) + postcss-normalize-whitespace: 8.0.1(postcss@8.5.20) + postcss-ordered-values: 8.0.1(postcss@8.5.20) + postcss-reduce-initial: 8.0.1(postcss@8.5.20) + postcss-reduce-transforms: 8.0.1(postcss@8.5.20) + postcss-svgo: 8.0.1(postcss@8.5.20) + postcss-unique-selectors: 8.0.1(postcss@8.5.20) - cssnano-utils@5.0.3(postcss@8.5.15): + cssnano-utils@6.0.1(postcss@8.5.20): dependencies: - postcss: 8.5.15 + postcss: 8.5.20 - cssnano@7.1.9(postcss@8.5.15): + cssnano@8.0.2(postcss@8.5.20): dependencies: - cssnano-preset-default: 7.0.17(postcss@8.5.15) + cssnano-preset-default: 8.0.2(postcss@8.5.20) lilconfig: 3.1.3 - postcss: 8.5.15 + postcss: 8.5.20 csso@5.0.5: dependencies: @@ -9501,18 +9679,22 @@ snapshots: csstype@3.2.3: {} - db0@0.3.4(@libsql/client@0.17.3)(drizzle-orm@0.45.2(@libsql/client@0.17.3)): + db0@0.3.4(@libsql/client@0.17.4)(drizzle-orm@0.45.2(@libsql/client@0.17.4)): optionalDependencies: - '@libsql/client': 0.17.3 - drizzle-orm: 0.45.2(@libsql/client@0.17.3) + '@libsql/client': 0.17.4 + drizzle-orm: 0.45.2(@libsql/client@0.17.4) - debug@3.2.7: + debug@3.2.7(supports-color@10.2.2): dependencies: ms: 2.1.3 + optionalDependencies: + supports-color: 10.2.2 - debug@4.4.3: + debug@4.4.3(supports-color@10.2.2): dependencies: ms: 2.1.3 + optionalDependencies: + supports-color: 10.2.2 deep-equal@1.0.1: {} @@ -9543,12 +9725,57 @@ snapshots: destroy@1.2.0: {} + detect-indent@7.0.2: {} + detect-libc@2.0.2: {} detect-libc@2.1.2: {} devalue@5.8.1: {} + devframe@0.5.4(crossws@0.4.10(srvx@0.11.22))(esbuild@0.28.1)(rolldown@1.2.0)(rollup@4.62.2)(typescript@6.0.3)(vite@8.1.5(@types/node@26.1.1)(esbuild@0.28.1)(jiti@1.21.7)(terser@5.49.0)(tsx@4.23.1)(yaml@2.9.0)): + dependencies: + '@valibot/to-json-schema': 1.7.1(valibot@1.4.2(typescript@6.0.3)) + birpc: 4.0.0 + cac: 7.0.0 + h3: 2.0.1-rc.22(crossws@0.4.10(srvx@0.11.22)) + mrmime: 2.0.1 + nostics: 0.2.0(esbuild@0.28.1)(rolldown@1.2.0)(rollup@4.62.2)(vite@8.1.5(@types/node@26.1.1)(esbuild@0.28.1)(jiti@1.21.7)(terser@5.49.0)(tsx@4.23.1)(yaml@2.9.0)) + pathe: 2.0.3 + valibot: 1.4.2(typescript@6.0.3) + ws: 8.21.1 + transitivePeerDependencies: + - '@farmfe/core' + - '@rspack/core' + - bufferutil + - bun-types-no-globals + - crossws + - esbuild + - rolldown + - rollup + - typescript + - unloader + - utf-8-validate + - vite + - webpack + + devframe@0.6.2(srvx@0.11.22)(typescript@6.0.3): + dependencies: + '@valibot/to-json-schema': 1.7.1(valibot@1.4.2(typescript@6.0.3)) + birpc: 4.0.0 + cac: 7.0.0 + crossws: 0.4.10(srvx@0.11.22) + destr: 2.0.5 + h3: 2.0.1-rc.22(crossws@0.4.10(srvx@0.11.22)) + mrmime: 2.0.1 + nostics: 1.2.0 + pathe: 2.0.3 + ufo: 1.6.4 + valibot: 1.4.2(typescript@6.0.3) + transitivePeerDependencies: + - srvx + - typescript + didyoumean@1.2.2: {} diff@8.0.4: {} @@ -9575,7 +9802,7 @@ snapshots: dot-prop@10.1.0: dependencies: - type-fest: 5.6.0 + type-fest: 5.8.0 dotenv@17.4.2: {} @@ -9584,11 +9811,11 @@ snapshots: '@drizzle-team/brocli': 0.10.2 '@esbuild-kit/esm-loader': 2.6.5 esbuild: 0.25.12 - tsx: 4.22.3 + tsx: 4.23.1 - drizzle-orm@0.45.2(@libsql/client@0.17.3): + drizzle-orm@0.45.2(@libsql/client@0.17.4): optionalDependencies: - '@libsql/client': 0.17.3 + '@libsql/client': 0.17.4 dunder-proto@1.0.1: dependencies: @@ -9602,7 +9829,7 @@ snapshots: ee-first@1.1.1: {} - electron-to-chromium@1.5.364: {} + electron-to-chromium@1.5.393: {} emoji-regex@10.6.0: {} @@ -9614,11 +9841,6 @@ snapshots: encodeurl@2.0.0: {} - enhanced-resolve@5.22.1: - dependencies: - graceful-fs: 4.2.11 - tapable: 2.3.3 - entities@4.5.0: {} entities@7.0.1: {} @@ -9631,7 +9853,7 @@ snapshots: es-errors@1.3.0: {} - es-module-lexer@2.1.0: {} + es-module-lexer@2.3.1: {} es-object-atoms@1.1.2: dependencies: @@ -9691,70 +9913,39 @@ snapshots: '@esbuild/win32-ia32': 0.25.12 '@esbuild/win32-x64': 0.25.12 - esbuild@0.27.7: + esbuild@0.28.1: optionalDependencies: - '@esbuild/aix-ppc64': 0.27.7 - '@esbuild/android-arm': 0.27.7 - '@esbuild/android-arm64': 0.27.7 - '@esbuild/android-x64': 0.27.7 - '@esbuild/darwin-arm64': 0.27.7 - '@esbuild/darwin-x64': 0.27.7 - '@esbuild/freebsd-arm64': 0.27.7 - '@esbuild/freebsd-x64': 0.27.7 - '@esbuild/linux-arm': 0.27.7 - '@esbuild/linux-arm64': 0.27.7 - '@esbuild/linux-ia32': 0.27.7 - '@esbuild/linux-loong64': 0.27.7 - '@esbuild/linux-mips64el': 0.27.7 - '@esbuild/linux-ppc64': 0.27.7 - '@esbuild/linux-riscv64': 0.27.7 - '@esbuild/linux-s390x': 0.27.7 - '@esbuild/linux-x64': 0.27.7 - '@esbuild/netbsd-arm64': 0.27.7 - '@esbuild/netbsd-x64': 0.27.7 - '@esbuild/openbsd-arm64': 0.27.7 - '@esbuild/openbsd-x64': 0.27.7 - '@esbuild/openharmony-arm64': 0.27.7 - '@esbuild/sunos-x64': 0.27.7 - '@esbuild/win32-arm64': 0.27.7 - '@esbuild/win32-ia32': 0.27.7 - '@esbuild/win32-x64': 0.27.7 - - esbuild@0.28.0: - optionalDependencies: - '@esbuild/aix-ppc64': 0.28.0 - '@esbuild/android-arm': 0.28.0 - '@esbuild/android-arm64': 0.28.0 - '@esbuild/android-x64': 0.28.0 - '@esbuild/darwin-arm64': 0.28.0 - '@esbuild/darwin-x64': 0.28.0 - '@esbuild/freebsd-arm64': 0.28.0 - '@esbuild/freebsd-x64': 0.28.0 - '@esbuild/linux-arm': 0.28.0 - '@esbuild/linux-arm64': 0.28.0 - '@esbuild/linux-ia32': 0.28.0 - '@esbuild/linux-loong64': 0.28.0 - '@esbuild/linux-mips64el': 0.28.0 - '@esbuild/linux-ppc64': 0.28.0 - '@esbuild/linux-riscv64': 0.28.0 - '@esbuild/linux-s390x': 0.28.0 - '@esbuild/linux-x64': 0.28.0 - '@esbuild/netbsd-arm64': 0.28.0 - '@esbuild/netbsd-x64': 0.28.0 - '@esbuild/openbsd-arm64': 0.28.0 - '@esbuild/openbsd-x64': 0.28.0 - '@esbuild/openharmony-arm64': 0.28.0 - '@esbuild/sunos-x64': 0.28.0 - '@esbuild/win32-arm64': 0.28.0 - '@esbuild/win32-ia32': 0.28.0 - '@esbuild/win32-x64': 0.28.0 + '@esbuild/aix-ppc64': 0.28.1 + '@esbuild/android-arm': 0.28.1 + '@esbuild/android-arm64': 0.28.1 + '@esbuild/android-x64': 0.28.1 + '@esbuild/darwin-arm64': 0.28.1 + '@esbuild/darwin-x64': 0.28.1 + '@esbuild/freebsd-arm64': 0.28.1 + '@esbuild/freebsd-x64': 0.28.1 + '@esbuild/linux-arm': 0.28.1 + '@esbuild/linux-arm64': 0.28.1 + '@esbuild/linux-ia32': 0.28.1 + '@esbuild/linux-loong64': 0.28.1 + '@esbuild/linux-mips64el': 0.28.1 + '@esbuild/linux-ppc64': 0.28.1 + '@esbuild/linux-riscv64': 0.28.1 + '@esbuild/linux-s390x': 0.28.1 + '@esbuild/linux-x64': 0.28.1 + '@esbuild/netbsd-arm64': 0.28.1 + '@esbuild/netbsd-x64': 0.28.1 + '@esbuild/openbsd-arm64': 0.28.1 + '@esbuild/openbsd-x64': 0.28.1 + '@esbuild/openharmony-arm64': 0.28.1 + '@esbuild/sunos-x64': 0.28.1 + '@esbuild/win32-arm64': 0.28.1 + '@esbuild/win32-ia32': 0.28.1 + '@esbuild/win32-x64': 0.28.1 escalade@3.2.0: {} escape-html@1.0.3: {} - escape-string-regexp@1.0.5: {} - escape-string-regexp@4.0.0: {} escape-string-regexp@5.0.0: {} @@ -9767,14 +9958,14 @@ snapshots: optionalDependencies: source-map: 0.6.1 - eslint-config-flat-gitignore@2.3.0(eslint@9.39.4(jiti@1.21.7)): + eslint-config-flat-gitignore@2.3.0(eslint@10.7.0(jiti@1.21.7)(supports-color@10.2.2)): dependencies: - '@eslint/compat': 2.1.0(eslint@9.39.4(jiti@1.21.7)) - eslint: 9.39.4(jiti@1.21.7) + '@eslint/compat': 2.1.0(eslint@10.7.0(jiti@1.21.7)(supports-color@10.2.2)) + eslint: 10.7.0(jiti@1.21.7)(supports-color@10.2.2) - eslint-config-prettier@10.1.8(eslint@9.39.4(jiti@1.21.7)): + eslint-config-prettier@10.1.8(eslint@10.7.0(jiti@1.21.7)(supports-color@10.2.2)): dependencies: - eslint: 9.39.4(jiti@1.21.7) + eslint: 10.7.0(jiti@1.21.7)(supports-color@10.2.2) eslint-flat-config-utils@3.2.0: dependencies: @@ -9788,106 +9979,99 @@ snapshots: optionalDependencies: unrs-resolver: 1.12.2 - eslint-merge-processors@2.0.0(eslint@9.39.4(jiti@1.21.7)): + eslint-merge-processors@2.0.0(eslint@10.7.0(jiti@1.21.7)(supports-color@10.2.2)): dependencies: - eslint: 9.39.4(jiti@1.21.7) + eslint: 10.7.0(jiti@1.21.7)(supports-color@10.2.2) - eslint-plugin-import-lite@0.5.2(eslint@9.39.4(jiti@1.21.7)): + eslint-plugin-import-lite@0.6.0(eslint@10.7.0(jiti@1.21.7)(supports-color@10.2.2)): dependencies: - eslint: 9.39.4(jiti@1.21.7) + eslint: 10.7.0(jiti@1.21.7)(supports-color@10.2.2) - eslint-plugin-import-x@4.16.2(@typescript-eslint/utils@8.60.0(eslint@9.39.4(jiti@1.21.7))(typescript@6.0.3))(eslint@9.39.4(jiti@1.21.7)): + eslint-plugin-import-x@4.17.1(@typescript-eslint/utils@8.64.0(eslint@10.7.0(jiti@1.21.7)(supports-color@10.2.2))(supports-color@10.2.2)(typescript@6.0.3))(eslint@10.7.0(jiti@1.21.7)(supports-color@10.2.2))(supports-color@10.2.2): dependencies: - '@package-json/types': 0.0.12 - '@typescript-eslint/types': 8.60.0 + '@typescript-eslint/types': 8.64.0 comment-parser: 1.4.7 - debug: 4.4.3 - eslint: 9.39.4(jiti@1.21.7) + debug: 4.4.3(supports-color@10.2.2) + eslint: 10.7.0(jiti@1.21.7)(supports-color@10.2.2) eslint-import-context: 0.1.9(unrs-resolver@1.12.2) is-glob: 4.0.3 minimatch: 10.2.5 - semver: 7.8.1 + semver: 7.8.5 stable-hash-x: 0.2.0 unrs-resolver: 1.12.2 optionalDependencies: - '@typescript-eslint/utils': 8.60.0(eslint@9.39.4(jiti@1.21.7))(typescript@6.0.3) + '@typescript-eslint/utils': 8.64.0(eslint@10.7.0(jiti@1.21.7)(supports-color@10.2.2))(supports-color@10.2.2)(typescript@6.0.3) transitivePeerDependencies: - supports-color - eslint-plugin-jsdoc@62.9.0(eslint@9.39.4(jiti@1.21.7)): + eslint-plugin-jsdoc@63.2.0(eslint@10.7.0(jiti@1.21.7)(supports-color@10.2.2))(supports-color@10.2.2): dependencies: - '@es-joy/jsdoccomment': 0.86.0 + '@es-joy/jsdoccomment': 0.88.0 '@es-joy/resolve.exports': 1.2.0 are-docs-informative: 0.0.2 - comment-parser: 1.4.6 - debug: 4.4.3 + comment-parser: 1.4.7 + debug: 4.4.3(supports-color@10.2.2) escape-string-regexp: 4.0.0 - eslint: 9.39.4(jiti@1.21.7) + eslint: 10.7.0(jiti@1.21.7)(supports-color@10.2.2) espree: 11.2.0 esquery: 1.7.0 html-entities: 2.6.0 object-deep-merge: 2.0.1 parse-imports-exports: 0.2.4 - semver: 7.8.1 + semver: 7.8.5 spdx-expression-parse: 4.0.0 to-valid-identifier: 1.0.0 transitivePeerDependencies: - supports-color - eslint-plugin-regexp@3.1.0(eslint@9.39.4(jiti@1.21.7)): + eslint-plugin-regexp@3.1.1(eslint@10.7.0(jiti@1.21.7)(supports-color@10.2.2)): dependencies: - '@eslint-community/eslint-utils': 4.9.1(eslint@9.39.4(jiti@1.21.7)) + '@eslint-community/eslint-utils': 4.9.1(eslint@10.7.0(jiti@1.21.7)(supports-color@10.2.2)) '@eslint-community/regexpp': 4.12.2 comment-parser: 1.4.7 - eslint: 9.39.4(jiti@1.21.7) + eslint: 10.7.0(jiti@1.21.7)(supports-color@10.2.2) jsdoc-type-pratt-parser: 7.2.0 refa: 0.12.1 regexp-ast-analysis: 0.7.1 scslre: 0.3.0 - eslint-plugin-unicorn@63.0.0(eslint@9.39.4(jiti@1.21.7)): + eslint-plugin-unicorn@65.0.1(eslint@10.7.0(jiti@1.21.7)(supports-color@10.2.2)): dependencies: '@babel/helper-validator-identifier': 7.29.7 - '@eslint-community/eslint-utils': 4.9.1(eslint@9.39.4(jiti@1.21.7)) + '@eslint-community/eslint-utils': 4.9.1(eslint@10.7.0(jiti@1.21.7)(supports-color@10.2.2)) change-case: 5.4.4 ci-info: 4.4.0 - clean-regexp: 1.0.0 core-js-compat: 3.49.0 - eslint: 9.39.4(jiti@1.21.7) + detect-indent: 7.0.2 + eslint: 10.7.0(jiti@1.21.7)(supports-color@10.2.2) find-up-simple: 1.0.1 - globals: 16.5.0 + globals: 17.7.0 indent-string: 5.0.0 is-builtin-module: 5.0.0 jsesc: 3.1.0 pluralize: 8.0.0 - regexp-tree: 0.1.27 - regjsparser: 0.13.1 - semver: 7.8.1 + regjsparser: 0.13.2 + semver: 7.8.5 strip-indent: 4.1.1 - eslint-plugin-vue@10.9.1(@stylistic/eslint-plugin@5.10.0(eslint@9.39.4(jiti@1.21.7)))(@typescript-eslint/parser@8.60.0(eslint@9.39.4(jiti@1.21.7))(typescript@6.0.3))(eslint@9.39.4(jiti@1.21.7))(vue-eslint-parser@10.4.0(eslint@9.39.4(jiti@1.21.7))): + eslint-plugin-vue@10.9.2(@stylistic/eslint-plugin@5.10.0(eslint@10.7.0(jiti@1.21.7)(supports-color@10.2.2)))(@typescript-eslint/parser@8.64.0(eslint@10.7.0(jiti@1.21.7)(supports-color@10.2.2))(supports-color@10.2.2)(typescript@6.0.3))(eslint@10.7.0(jiti@1.21.7)(supports-color@10.2.2))(vue-eslint-parser@10.4.1(eslint@10.7.0(jiti@1.21.7)(supports-color@10.2.2))(supports-color@10.2.2)): dependencies: - '@eslint-community/eslint-utils': 4.9.1(eslint@9.39.4(jiti@1.21.7)) - eslint: 9.39.4(jiti@1.21.7) + '@eslint-community/eslint-utils': 4.9.1(eslint@10.7.0(jiti@1.21.7)(supports-color@10.2.2)) + eslint: 10.7.0(jiti@1.21.7)(supports-color@10.2.2) natural-compare: 1.4.0 nth-check: 2.1.1 - postcss-selector-parser: 7.1.1 - semver: 7.8.1 - vue-eslint-parser: 10.4.0(eslint@9.39.4(jiti@1.21.7)) + postcss-selector-parser: 7.1.4 + semver: 7.8.5 + vue-eslint-parser: 10.4.1(eslint@10.7.0(jiti@1.21.7)(supports-color@10.2.2))(supports-color@10.2.2) xml-name-validator: 4.0.0 optionalDependencies: - '@stylistic/eslint-plugin': 5.10.0(eslint@9.39.4(jiti@1.21.7)) - '@typescript-eslint/parser': 8.60.0(eslint@9.39.4(jiti@1.21.7))(typescript@6.0.3) + '@stylistic/eslint-plugin': 5.10.0(eslint@10.7.0(jiti@1.21.7)(supports-color@10.2.2)) + '@typescript-eslint/parser': 8.64.0(eslint@10.7.0(jiti@1.21.7)(supports-color@10.2.2))(supports-color@10.2.2)(typescript@6.0.3) - eslint-processor-vue-blocks@2.0.0(@vue/compiler-sfc@3.5.35)(eslint@9.39.4(jiti@1.21.7)): + eslint-processor-vue-blocks@2.0.0(@vue/compiler-sfc@3.5.40)(eslint@10.7.0(jiti@1.21.7)(supports-color@10.2.2)): dependencies: - '@vue/compiler-sfc': 3.5.35 - eslint: 9.39.4(jiti@1.21.7) - - eslint-scope@8.4.0: - dependencies: - esrecurse: 4.3.0 - estraverse: 5.3.0 + '@vue/compiler-sfc': 3.5.40 + eslint: 10.7.0(jiti@1.21.7)(supports-color@10.2.2) eslint-scope@9.1.2: dependencies: @@ -9896,9 +10080,9 @@ snapshots: esrecurse: 4.3.0 estraverse: 5.3.0 - eslint-typegen@2.3.1(eslint@9.39.4(jiti@1.21.7)): + eslint-typegen@2.3.1(eslint@10.7.0(jiti@1.21.7)(supports-color@10.2.2)): dependencies: - eslint: 9.39.4(jiti@1.21.7) + eslint: 10.7.0(jiti@1.21.7)(supports-color@10.2.2) json-schema-to-typescript-lite: 15.0.0 ohash: 2.0.11 @@ -9908,28 +10092,25 @@ snapshots: eslint-visitor-keys@5.0.1: {} - eslint@9.39.4(jiti@1.21.7): + eslint@10.7.0(jiti@1.21.7)(supports-color@10.2.2): dependencies: - '@eslint-community/eslint-utils': 4.9.1(eslint@9.39.4(jiti@1.21.7)) + '@eslint-community/eslint-utils': 4.9.1(eslint@10.7.0(jiti@1.21.7)(supports-color@10.2.2)) '@eslint-community/regexpp': 4.12.2 - '@eslint/config-array': 0.21.2 - '@eslint/config-helpers': 0.4.2 - '@eslint/core': 0.17.0 - '@eslint/eslintrc': 3.3.5 - '@eslint/js': 9.39.4 - '@eslint/plugin-kit': 0.4.1 + '@eslint/config-array': 0.23.5(supports-color@10.2.2) + '@eslint/config-helpers': 0.6.0 + '@eslint/core': 1.2.1 + '@eslint/plugin-kit': 0.7.2 '@humanfs/node': 0.16.8 '@humanwhocodes/module-importer': 1.0.1 '@humanwhocodes/retry': 0.4.3 '@types/estree': 1.0.9 ajv: 6.15.0 - chalk: 4.1.2 cross-spawn: 7.0.6 - debug: 4.4.3 + debug: 4.4.3(supports-color@10.2.2) escape-string-regexp: 4.0.0 - eslint-scope: 8.4.0 - eslint-visitor-keys: 4.2.1 - espree: 10.4.0 + eslint-scope: 9.1.2 + eslint-visitor-keys: 5.0.1 + espree: 11.2.0 esquery: 1.7.0 esutils: 2.0.3 fast-deep-equal: 3.1.3 @@ -9940,8 +10121,7 @@ snapshots: imurmurhash: 0.1.4 is-glob: 4.0.3 json-stable-stringify-without-jsonify: 1.0.1 - lodash.merge: 4.6.2 - minimatch: 3.1.5 + minimatch: 10.2.5 natural-compare: 1.4.0 optionator: 0.9.4 optionalDependencies: @@ -9951,20 +10131,20 @@ snapshots: espree@10.4.0: dependencies: - acorn: 8.16.0 - acorn-jsx: 5.3.2(acorn@8.16.0) + acorn: 8.17.0 + acorn-jsx: 5.3.2(acorn@8.17.0) eslint-visitor-keys: 4.2.1 espree@11.2.0: dependencies: - acorn: 8.16.0 - acorn-jsx: 5.3.2(acorn@8.16.0) + acorn: 8.17.0 + acorn-jsx: 5.3.2(acorn@8.17.0) eslint-visitor-keys: 5.0.1 espree@9.6.1: dependencies: - acorn: 8.16.0 - acorn-jsx: 5.3.2(acorn@8.16.0) + acorn: 8.17.0 + acorn-jsx: 5.3.2(acorn@8.17.0) eslint-visitor-keys: 3.4.3 esprima@4.0.1: {} @@ -9993,7 +10173,7 @@ snapshots: events-universal@1.0.1: dependencies: - bare-events: 2.8.3 + bare-events: 2.9.1 transitivePeerDependencies: - bare-abort-controller @@ -10011,16 +10191,9 @@ snapshots: signal-exit: 4.1.0 strip-final-newline: 3.0.0 - expect-type@1.3.0: {} + expect-type@1.4.0: {} - exsolve@1.0.8: {} - - externality@1.0.2: - dependencies: - enhanced-resolve: 5.22.1 - mlly: 1.8.2 - pathe: 1.1.2 - ufo: 1.6.4 + exsolve@1.1.0: {} fake-indexeddb@6.2.5: {} @@ -10066,9 +10239,9 @@ snapshots: dependencies: reusify: 1.1.0 - fdir@6.5.0(picomatch@4.0.4): + fdir@6.5.0(picomatch@4.0.5): optionalDependencies: - picomatch: 4.0.4 + picomatch: 4.0.5 fflate@0.8.3: {} @@ -10101,6 +10274,8 @@ snapshots: flatted@3.4.2: {} + fnv1a-64@0.1.1: {} + foreground-child@3.3.1: dependencies: cross-spawn: 7.0.6 @@ -10128,7 +10303,7 @@ snapshots: function-timeout@0.1.1: {} - fuse.js@7.4.0: {} + fuse.js@7.5.0: {} fzf@0.5.2: {} @@ -10166,7 +10341,7 @@ snapshots: dependencies: resolve-pkg-maps: 1.0.0 - giget@3.2.0: {} + giget@3.3.0: {} glob-parent@5.1.2: dependencies: @@ -10204,17 +10379,13 @@ snapshots: dependencies: ini: 4.1.1 - globals@14.0.0: {} + globals@17.7.0: {} - globals@16.5.0: {} - - globals@17.6.0: {} - - globby@16.2.0: + globby@16.2.2: dependencies: '@sindresorhus/merge-streams': 4.0.0 fast-glob: 3.3.3 - ignore: 7.0.5 + ignore: 7.0.6 is-path-inside: 4.0.0 slash: 5.1.0 unicorn-magic: 0.4.0 @@ -10239,12 +10410,19 @@ snapshots: ufo: 1.6.4 uncrypto: 0.1.3 - h3@2.0.1-rc.20(crossws@0.4.5(srvx@0.11.16)): + h3@2.0.1-rc.20(crossws@0.4.10(srvx@0.11.22)): dependencies: rou3: 0.8.1 - srvx: 0.11.16 + srvx: 0.11.22 optionalDependencies: - crossws: 0.4.5(srvx@0.11.16) + crossws: 0.4.10(srvx@0.11.22) + + h3@2.0.1-rc.22(crossws@0.4.10(srvx@0.11.22)): + dependencies: + rou3: 0.8.1 + srvx: 0.11.22 + optionalDependencies: + crossws: 0.4.10(srvx@0.11.22) has-flag@4.0.0: {} @@ -10296,14 +10474,14 @@ snapshots: http-shutdown@1.2.2: {} - https-proxy-agent@7.0.6: + https-proxy-agent@7.0.6(supports-color@10.2.2): dependencies: agent-base: 7.1.4 - debug: 4.4.3 + debug: 4.4.3(supports-color@10.2.2) transitivePeerDependencies: - supports-color - httpxy@0.5.3: {} + httpxy@0.5.5: {} human-signals@5.0.0: {} @@ -10311,22 +10489,27 @@ snapshots: ignore@5.3.2: {} - ignore@7.0.5: {} + ignore@7.0.6: {} image-meta@0.2.2: {} - import-fresh@3.3.1: - dependencies: - parent-module: 1.0.1 - resolve-from: 4.0.0 - - impound@1.1.5: + impound@1.1.5(esbuild@0.28.1)(rolldown@1.2.0)(rollup@4.62.2)(vite@8.1.5(@types/node@26.1.1)(esbuild@0.28.1)(jiti@1.21.7)(terser@5.49.0)(tsx@4.23.1)(yaml@2.9.0)): dependencies: '@jridgewell/trace-mapping': 0.3.31 - es-module-lexer: 2.1.0 + es-module-lexer: 2.3.1 pathe: 2.0.3 - unplugin: 3.0.0 - unplugin-utils: 0.3.1 + unplugin: 3.3.0(esbuild@0.28.1)(rolldown@1.2.0)(rollup@4.62.2)(vite@8.1.5(@types/node@26.1.1)(esbuild@0.28.1)(jiti@1.21.7)(terser@5.49.0)(tsx@4.23.1)(yaml@2.9.0)) + unplugin-utils: 0.3.2 + transitivePeerDependencies: + - '@farmfe/core' + - '@rspack/core' + - bun-types-no-globals + - esbuild + - rolldown + - rollup + - unloader + - vite + - webpack imurmurhash@0.1.4: {} @@ -10343,11 +10526,11 @@ snapshots: ini@4.1.1: {} - ioredis@5.11.0: + ioredis@5.11.1(supports-color@10.2.2): dependencies: '@ioredis/commands': 1.10.0 cluster-key-slot: 1.1.1 - debug: 4.4.3 + debug: 4.4.3(supports-color@10.2.2) denque: 2.1.0 redis-errors: 1.2.0 redis-parser: 3.0.0 @@ -10355,7 +10538,7 @@ snapshots: transitivePeerDependencies: - supports-color - ip-bigint@9.0.5: {} + ip-bigint@9.0.6: {} ip-regex@5.0.0: {} @@ -10367,7 +10550,7 @@ snapshots: is-builtin-module@5.0.0: dependencies: - builtin-modules: 5.2.0 + builtin-modules: 5.3.0 is-cidr@7.0.0: dependencies: @@ -10436,8 +10619,6 @@ snapshots: is-stream@3.0.0: {} - is-what@5.5.0: {} - is-wsl@2.2.0: dependencies: is-docker: 2.2.1 @@ -10475,9 +10656,11 @@ snapshots: jiti@2.7.0: {} - js-base64@3.7.8: {} + jose@6.2.3: {} - js-sha256@0.11.1: {} + js-base64@3.9.1: {} + + js-sha256@0.12.0: {} js-tokens@10.0.0: {} @@ -10485,7 +10668,7 @@ snapshots: js-tokens@9.0.1: {} - js-yaml@4.1.1: + js-yaml@4.3.0: dependencies: argparse: 2.0.1 @@ -10508,10 +10691,10 @@ snapshots: jsonc-eslint-parser@2.4.2: dependencies: - acorn: 8.16.0 + acorn: 8.17.0 eslint-visitor-keys: 3.4.3 espree: 9.6.1 - semver: 7.8.1 + semver: 7.8.5 jsonfile@6.2.1: dependencies: @@ -10540,29 +10723,29 @@ snapshots: co: 4.6.0 koa-compose: 4.1.0 - koa-send@5.0.1: + koa-send@5.0.1(supports-color@10.2.2): dependencies: - debug: 4.4.3 + debug: 4.4.3(supports-color@10.2.2) http-errors: 1.8.1 resolve-path: 1.4.0 transitivePeerDependencies: - supports-color - koa-static@5.0.0: + koa-static@5.0.0(supports-color@10.2.2): dependencies: - debug: 3.2.7 - koa-send: 5.0.1 + debug: 3.2.7(supports-color@10.2.2) + koa-send: 5.0.1(supports-color@10.2.2) transitivePeerDependencies: - supports-color - koa@2.16.4: + koa@2.16.4(supports-color@10.2.2): dependencies: accepts: 1.3.8 cache-content-type: 1.0.1 content-disposition: 0.5.4 content-type: 1.0.5 cookies: 0.9.1 - debug: 4.4.3 + debug: 4.4.3(supports-color@10.2.2) delegates: 1.0.0 depd: 2.0.0 destroy: 1.2.0 @@ -10583,10 +10766,10 @@ snapshots: transitivePeerDependencies: - supports-color - launch-editor@2.14.0: + launch-editor@2.14.1: dependencies: picocolors: 1.1.1 - shell-quote: 1.8.4 + shell-quote: 1.10.0 lazystream@1.0.1: dependencies: @@ -10612,17 +10795,66 @@ snapshots: '@libsql/linux-x64-musl': 0.5.29 '@libsql/win32-x64-msvc': 0.5.29 + lightningcss-android-arm64@1.33.0: + optional: true + + lightningcss-darwin-arm64@1.33.0: + optional: true + + lightningcss-darwin-x64@1.33.0: + optional: true + + lightningcss-freebsd-x64@1.33.0: + optional: true + + lightningcss-linux-arm-gnueabihf@1.33.0: + optional: true + + lightningcss-linux-arm64-gnu@1.33.0: + optional: true + + lightningcss-linux-arm64-musl@1.33.0: + optional: true + + lightningcss-linux-x64-gnu@1.33.0: + optional: true + + lightningcss-linux-x64-musl@1.33.0: + optional: true + + lightningcss-win32-arm64-msvc@1.33.0: + optional: true + + lightningcss-win32-x64-msvc@1.33.0: + optional: true + + lightningcss@1.33.0: + dependencies: + detect-libc: 2.1.2 + optionalDependencies: + lightningcss-android-arm64: 1.33.0 + lightningcss-darwin-arm64: 1.33.0 + lightningcss-darwin-x64: 1.33.0 + lightningcss-freebsd-x64: 1.33.0 + lightningcss-linux-arm-gnueabihf: 1.33.0 + lightningcss-linux-arm64-gnu: 1.33.0 + lightningcss-linux-arm64-musl: 1.33.0 + lightningcss-linux-x64-gnu: 1.33.0 + lightningcss-linux-x64-musl: 1.33.0 + lightningcss-win32-arm64-msvc: 1.33.0 + lightningcss-win32-x64-msvc: 1.33.0 + lilconfig@3.1.3: {} lines-and-columns@1.2.4: {} - listhen@1.10.0(srvx@0.11.16): + listhen@1.10.0(srvx@0.11.22): dependencies: - '@parcel/watcher': 2.5.6 - '@parcel/watcher-wasm': 2.5.6 + '@parcel/watcher': 2.6.0 + '@parcel/watcher-wasm': 2.6.0 citty: 0.2.2 consola: 3.4.2 - crossws: 0.4.5(srvx@0.11.16) + crossws: 0.4.10(srvx@0.11.22) defu: 6.1.7 get-port-please: 3.2.0 h3: 1.15.11 @@ -10631,16 +10863,14 @@ snapshots: mlly: 1.8.2 node-forge: 1.4.0 pathe: 2.0.3 - std-env: 4.1.0 - tinyclip: 0.1.13 + std-env: 4.2.0 + tinyclip: 0.1.15 ufo: 1.6.4 untun: 0.1.3 uqr: 0.1.3 transitivePeerDependencies: - srvx - load-tsconfig@0.2.5: {} - local-pkg@1.2.1: dependencies: mlly: 1.8.2 @@ -10655,17 +10885,11 @@ snapshots: dependencies: p-locate: 6.0.0 - lodash.memoize@4.1.2: {} - - lodash.merge@4.6.2: {} - - lodash.uniq@4.5.0: {} - lodash@4.18.1: {} lru-cache@10.4.3: {} - lru-cache@11.5.1: {} + lru-cache@11.5.2: {} lru-cache@5.1.1: dependencies: @@ -10681,12 +10905,22 @@ snapshots: ufo: 1.6.4 unplugin: 2.3.11 - magic-regexp@0.11.0: + magic-regexp@0.11.0(esbuild@0.28.1)(rolldown@1.2.0)(rollup@4.62.2)(vite@8.1.5(@types/node@26.1.1)(esbuild@0.28.1)(jiti@1.21.7)(terser@5.49.0)(tsx@4.23.1)(yaml@2.9.0)): dependencies: magic-string: 0.30.21 regexp-tree: 0.1.27 type-level-regexp: 0.1.17 - unplugin: 3.0.0 + unplugin: 3.3.0(esbuild@0.28.1)(rolldown@1.2.0)(rollup@4.62.2)(vite@8.1.5(@types/node@26.1.1)(esbuild@0.28.1)(jiti@1.21.7)(terser@5.49.0)(tsx@4.23.1)(yaml@2.9.0)) + transitivePeerDependencies: + - '@farmfe/core' + - '@rspack/core' + - bun-types-no-globals + - esbuild + - rolldown + - rollup + - unloader + - vite + - webpack magic-string-ast@1.0.3: dependencies: @@ -10696,6 +10930,10 @@ snapshots: dependencies: '@jridgewell/sourcemap-codec': 1.5.5 + magic-string@1.0.0: + dependencies: + '@jridgewell/sourcemap-codec': 1.5.5 + magicast@0.5.3: dependencies: '@babel/parser': 7.29.7 @@ -10704,7 +10942,7 @@ snapshots: make-dir@4.0.0: dependencies: - semver: 7.8.1 + semver: 7.8.5 math-intrinsics@1.1.0: {} @@ -10745,19 +10983,19 @@ snapshots: minimatch@10.2.5: dependencies: - brace-expansion: 5.0.6 + brace-expansion: 5.0.7 minimatch@3.1.5: dependencies: - brace-expansion: 1.1.15 + brace-expansion: 1.1.16 minimatch@5.1.9: dependencies: - brace-expansion: 2.1.1 + brace-expansion: 2.1.2 minimatch@9.0.9: dependencies: - brace-expansion: 2.1.1 + brace-expansion: 2.1.2 minipass@7.1.3: {} @@ -10765,11 +11003,9 @@ snapshots: dependencies: minipass: 7.1.3 - mitt@3.0.1: {} - mlly@1.8.2: dependencies: - acorn: 8.16.0 + acorn: 8.17.0 pathe: 2.0.3 pkg-types: 1.3.1 ufo: 1.6.4 @@ -10788,9 +11024,9 @@ snapshots: object-assign: 4.1.1 thenify-all: 1.6.0 - nanoid@3.3.12: {} + nanoid@3.3.16: {} - nanoid@5.1.11: {} + nanoid@5.1.16: {} nanotar@0.3.0: {} @@ -10800,17 +11036,17 @@ snapshots: negotiator@0.6.3: {} - nitropack@2.13.4(@libsql/client@0.17.3)(drizzle-orm@0.45.2(@libsql/client@0.17.3))(oxc-parser@0.131.0)(srvx@0.11.16): + nitropack@2.13.4(@libsql/client@0.17.4)(drizzle-orm@0.45.2(@libsql/client@0.17.4))(oxc-parser@0.140.0)(rolldown@1.2.0)(srvx@0.11.22)(supports-color@10.2.2)(vite@8.1.5(@types/node@26.1.1)(esbuild@0.28.1)(jiti@1.21.7)(terser@5.49.0)(tsx@4.23.1)(yaml@2.9.0)): dependencies: '@cloudflare/kv-asset-handler': 0.4.2 - '@rollup/plugin-alias': 6.0.0(rollup@4.60.4) - '@rollup/plugin-commonjs': 29.0.3(rollup@4.60.4) - '@rollup/plugin-inject': 5.0.5(rollup@4.60.4) - '@rollup/plugin-json': 6.1.0(rollup@4.60.4) - '@rollup/plugin-node-resolve': 16.0.3(rollup@4.60.4) - '@rollup/plugin-replace': 6.0.3(rollup@4.60.4) - '@rollup/plugin-terser': 1.0.0(rollup@4.60.4) - '@vercel/nft': 1.10.2(rollup@4.60.4) + '@rollup/plugin-alias': 6.0.0(rollup@4.62.2) + '@rollup/plugin-commonjs': 29.0.3(rollup@4.62.2) + '@rollup/plugin-inject': 5.0.5(rollup@4.62.2) + '@rollup/plugin-json': 6.1.0(rollup@4.62.2) + '@rollup/plugin-node-resolve': 16.0.3(rollup@4.62.2) + '@rollup/plugin-replace': 6.0.3(rollup@4.62.2) + '@rollup/plugin-terser': 1.0.0(rollup@4.62.2) + '@vercel/nft': 1.10.2(rollup@4.62.2)(supports-color@10.2.2) archiver: 7.0.1 c12: 3.3.4(magicast@0.5.3) chokidar: 5.0.0 @@ -10821,24 +11057,24 @@ snapshots: cookie-es: 2.0.1 croner: 10.0.1 crossws: 0.3.5 - db0: 0.3.4(@libsql/client@0.17.3)(drizzle-orm@0.45.2(@libsql/client@0.17.3)) + db0: 0.3.4(@libsql/client@0.17.4)(drizzle-orm@0.45.2(@libsql/client@0.17.4)) defu: 6.1.7 destr: 2.0.5 dot-prop: 10.1.0 - esbuild: 0.28.0 + esbuild: 0.28.1 escape-string-regexp: 5.0.0 etag: 1.8.1 - exsolve: 1.0.8 - globby: 16.2.0 + exsolve: 1.1.0 + globby: 16.2.2 gzip-size: 7.0.0 h3: 1.15.11 hookable: 5.5.3 - httpxy: 0.5.3 - ioredis: 5.11.0 + httpxy: 0.5.5 + ioredis: 5.11.1(supports-color@10.2.2) jiti: 2.7.0 klona: 2.0.6 knitwork: 1.3.0 - listhen: 1.10.0(srvx@0.11.16) + listhen: 1.10.0(srvx@0.11.22) magic-string: 0.30.21 magicast: 0.5.3 mime: 4.1.0 @@ -10850,24 +11086,24 @@ snapshots: pathe: 2.0.3 perfect-debounce: 2.1.0 pkg-types: 2.3.1 - pretty-bytes: 7.1.0 + pretty-bytes: 7.1.1 radix3: 1.1.2 - rollup: 4.60.4 - rollup-plugin-visualizer: 7.0.1(rollup@4.60.4) + rollup: 4.62.2 + rollup-plugin-visualizer: 7.0.1(rolldown@1.2.0)(rollup@4.62.2) scule: 1.3.0 - semver: 7.8.1 + semver: 7.8.5 serve-placeholder: 2.0.2 - serve-static: 2.2.1 + serve-static: 2.2.1(supports-color@10.2.2) source-map: 0.7.6 - std-env: 4.1.0 + std-env: 4.2.0 ufo: 1.6.4 - ultrahtml: 1.6.0 + ultrahtml: 1.7.0 uncrypto: 0.1.3 unctx: 2.5.0 unenv: 2.0.0-rc.24 - unimport: 6.3.0(oxc-parser@0.131.0) - unplugin-utils: 0.3.1 - unstorage: 1.17.5(db0@0.3.4(@libsql/client@0.17.3)(drizzle-orm@0.45.2(@libsql/client@0.17.3)))(ioredis@5.11.0) + unimport: 6.3.0(esbuild@0.28.1)(oxc-parser@0.140.0)(rolldown@1.2.0)(rollup@4.62.2)(vite@8.1.5(@types/node@26.1.1)(esbuild@0.28.1)(jiti@1.21.7)(terser@5.49.0)(tsx@4.23.1)(yaml@2.9.0)) + unplugin-utils: 0.3.2 + unstorage: 1.17.5(db0@0.3.4(@libsql/client@0.17.4)(drizzle-orm@0.45.2(@libsql/client@0.17.4)))(ioredis@5.11.1(supports-color@10.2.2)) untyped: 2.0.0 unwasm: 0.5.3 youch: 4.1.1 @@ -10882,9 +11118,11 @@ snapshots: - '@capacitor/preferences' - '@deno/kv' - '@electric-sql/pglite' + - '@farmfe/core' - '@libsql/client' - '@netlify/blobs' - '@planetscale/database' + - '@rspack/core' - '@upstash/redis' - '@vercel/blob' - '@vercel/functions' @@ -10893,6 +11131,7 @@ snapshots: - bare-abort-controller - bare-buffer - better-sqlite3 + - bun-types-no-globals - drizzle-orm - encoding - idb-keyval @@ -10903,11 +11142,14 @@ snapshots: - sqlite3 - srvx - supports-color + - unloader - uploadthing + - vite + - webpack node-addon-api@7.1.1: {} - node-addon-api@8.8.0: {} + node-addon-api@8.9.0: {} node-fetch-native@1.6.7: {} @@ -10921,7 +11163,7 @@ snapshots: node-mock-http@1.0.4: {} - node-releases@2.0.46: {} + node-releases@2.0.51: {} nopt@8.1.0: dependencies: @@ -10929,6 +11171,24 @@ snapshots: normalize-path@3.0.0: {} + nostics@0.2.0(esbuild@0.28.1)(rolldown@1.2.0)(rollup@4.62.2)(vite@8.1.5(@types/node@26.1.1)(esbuild@0.28.1)(jiti@1.21.7)(terser@5.49.0)(tsx@4.23.1)(yaml@2.9.0)): + dependencies: + magic-string: 0.30.21 + oxc-parser: 0.132.0 + unplugin: 3.3.0(esbuild@0.28.1)(rolldown@1.2.0)(rollup@4.62.2)(vite@8.1.5(@types/node@26.1.1)(esbuild@0.28.1)(jiti@1.21.7)(terser@5.49.0)(tsx@4.23.1)(yaml@2.9.0)) + transitivePeerDependencies: + - '@farmfe/core' + - '@rspack/core' + - bun-types-no-globals + - esbuild + - rolldown + - rollup + - unloader + - vite + - webpack + + nostics@1.2.0: {} + npm-run-path@5.3.0: dependencies: path-key: 4.0.0 @@ -10944,68 +11204,70 @@ snapshots: nuxt-define@1.0.0: {} - nuxt@3.21.6(@libsql/client@0.17.3)(@parcel/watcher@2.5.6)(@types/node@25.9.1)(@vue/compiler-sfc@3.5.35)(cac@6.7.14)(db0@0.3.4(@libsql/client@0.17.3)(drizzle-orm@0.45.2(@libsql/client@0.17.3)))(drizzle-orm@0.45.2(@libsql/client@0.17.3))(eslint@9.39.4(jiti@1.21.7))(ioredis@5.11.0)(magicast@0.5.3)(optionator@0.9.4)(rollup-plugin-visualizer@7.0.1(rollup@4.60.4))(rollup@4.60.4)(srvx@0.11.16)(terser@5.48.0)(tsx@4.22.3)(typescript@6.0.3)(vite@7.3.3(@types/node@25.9.1)(jiti@1.21.7)(terser@5.48.0)(tsx@4.22.3)(yaml@2.9.0))(vue-tsc@3.3.3(typescript@6.0.3))(yaml@2.9.0): + nuxt@4.5.0(@babel/plugin-syntax-jsx@7.29.7(@babel/core@7.29.7(supports-color@10.2.2)))(@babel/plugin-syntax-typescript@7.29.7(@babel/core@7.29.7(supports-color@10.2.2)))(@libsql/client@0.17.4)(@parcel/watcher@2.6.0)(@types/node@26.1.1)(@vue/compiler-sfc@3.5.40)(crossws@0.4.10(srvx@0.11.22))(db0@0.3.4(@libsql/client@0.17.4)(drizzle-orm@0.45.2(@libsql/client@0.17.4)))(drizzle-orm@0.45.2(@libsql/client@0.17.4))(esbuild@0.28.1)(eslint@10.7.0(jiti@1.21.7)(supports-color@10.2.2))(ioredis@5.11.1(supports-color@10.2.2))(lightningcss@1.33.0)(magicast@0.5.3)(optionator@0.9.4)(oxc-parser@0.140.0)(pinia@4.0.2(@vue/devtools-api@8.1.5)(typescript@6.0.3)(vue@3.5.40(typescript@6.0.3)))(rollup-plugin-visualizer@7.0.1(rolldown@1.2.0)(rollup@4.62.2))(rollup@4.62.2)(srvx@0.11.22)(supports-color@10.2.2)(terser@5.49.0)(tsx@4.23.1)(typescript@6.0.3)(vite@8.1.5(@types/node@26.1.1)(esbuild@0.28.1)(jiti@1.21.7)(terser@5.49.0)(tsx@4.23.1)(yaml@2.9.0))(vue-tsc@3.3.7(typescript@6.0.3))(yaml@2.9.0): dependencies: - '@dxup/nuxt': 0.4.1(magicast@0.5.3)(typescript@6.0.3) - '@nuxt/cli': 3.35.2(@nuxt/schema@3.21.6)(cac@6.7.14)(magicast@0.5.3) - '@nuxt/devtools': 3.2.4(vite@7.3.3(@types/node@25.9.1)(jiti@1.21.7)(terser@5.48.0)(tsx@4.22.3)(yaml@2.9.0))(vue@3.5.35(typescript@6.0.3)) - '@nuxt/kit': 3.21.6(magicast@0.5.3) - '@nuxt/nitro-server': 3.21.6(@libsql/client@0.17.3)(db0@0.3.4(@libsql/client@0.17.3)(drizzle-orm@0.45.2(@libsql/client@0.17.3)))(drizzle-orm@0.45.2(@libsql/client@0.17.3))(ioredis@5.11.0)(magicast@0.5.3)(nuxt@3.21.6(@libsql/client@0.17.3)(@parcel/watcher@2.5.6)(@types/node@25.9.1)(@vue/compiler-sfc@3.5.35)(cac@6.7.14)(db0@0.3.4(@libsql/client@0.17.3)(drizzle-orm@0.45.2(@libsql/client@0.17.3)))(drizzle-orm@0.45.2(@libsql/client@0.17.3))(eslint@9.39.4(jiti@1.21.7))(ioredis@5.11.0)(magicast@0.5.3)(optionator@0.9.4)(rollup-plugin-visualizer@7.0.1(rollup@4.60.4))(rollup@4.60.4)(srvx@0.11.16)(terser@5.48.0)(tsx@4.22.3)(typescript@6.0.3)(vite@7.3.3(@types/node@25.9.1)(jiti@1.21.7)(terser@5.48.0)(tsx@4.22.3)(yaml@2.9.0))(vue-tsc@3.3.3(typescript@6.0.3))(yaml@2.9.0))(oxc-parser@0.131.0)(srvx@0.11.16)(typescript@6.0.3) - '@nuxt/schema': 3.21.6 - '@nuxt/telemetry': 2.8.0(@nuxt/kit@3.21.6(magicast@0.5.3)) - '@nuxt/vite-builder': 3.21.6(@types/node@25.9.1)(eslint@9.39.4(jiti@1.21.7))(magicast@0.5.3)(nuxt@3.21.6(@libsql/client@0.17.3)(@parcel/watcher@2.5.6)(@types/node@25.9.1)(@vue/compiler-sfc@3.5.35)(cac@6.7.14)(db0@0.3.4(@libsql/client@0.17.3)(drizzle-orm@0.45.2(@libsql/client@0.17.3)))(drizzle-orm@0.45.2(@libsql/client@0.17.3))(eslint@9.39.4(jiti@1.21.7))(ioredis@5.11.0)(magicast@0.5.3)(optionator@0.9.4)(rollup-plugin-visualizer@7.0.1(rollup@4.60.4))(rollup@4.60.4)(srvx@0.11.16)(terser@5.48.0)(tsx@4.22.3)(typescript@6.0.3)(vite@7.3.3(@types/node@25.9.1)(jiti@1.21.7)(terser@5.48.0)(tsx@4.22.3)(yaml@2.9.0))(vue-tsc@3.3.3(typescript@6.0.3))(yaml@2.9.0))(optionator@0.9.4)(rollup-plugin-visualizer@7.0.1(rollup@4.60.4))(rollup@4.60.4)(terser@5.48.0)(tsx@4.22.3)(typescript@6.0.3)(vue-tsc@3.3.3(typescript@6.0.3))(vue@3.5.35(typescript@6.0.3))(yaml@2.9.0) - '@unhead/vue': 2.1.15(vue@3.5.35(typescript@6.0.3)) - '@vue/shared': 3.5.35 - c12: 3.3.4(magicast@0.5.3) + '@dxup/nuxt': 0.5.3(esbuild@0.28.1)(magicast@0.5.3)(oxc-parser@0.140.0)(rolldown@1.2.0)(rollup@4.62.2)(vite@8.1.5(@types/node@26.1.1)(esbuild@0.28.1)(jiti@1.21.7)(terser@5.49.0)(tsx@4.23.1)(yaml@2.9.0)) + '@nuxt/cli': 3.37.0(@nuxt/schema@4.5.0)(magicast@0.5.3)(supports-color@10.2.2) + '@nuxt/devtools': 3.2.4(magic-string@1.0.0)(oxc-parser@0.140.0)(rolldown@1.2.0)(supports-color@10.2.2)(unplugin@3.3.0(esbuild@0.28.1)(rolldown@1.2.0)(rollup@4.62.2)(vite@8.1.5(@types/node@26.1.1)(esbuild@0.28.1)(jiti@1.21.7)(terser@5.49.0)(tsx@4.23.1)(yaml@2.9.0)))(vite@8.1.5(@types/node@26.1.1)(esbuild@0.28.1)(jiti@1.21.7)(terser@5.49.0)(tsx@4.23.1)(yaml@2.9.0))(vue@3.5.40(typescript@6.0.3)) + '@nuxt/kit': 4.5.0(magic-string@1.0.0)(magicast@0.5.3)(oxc-parser@0.140.0)(rolldown@1.2.0)(unplugin@3.3.0(esbuild@0.28.1)(rolldown@1.2.0)(rollup@4.62.2)(vite@8.1.5(@types/node@26.1.1)(esbuild@0.28.1)(jiti@1.21.7)(terser@5.49.0)(tsx@4.23.1)(yaml@2.9.0))) + '@nuxt/nitro-server': 4.5.0(9eae438e634a1a1b52c984bbdcb577a5) + '@nuxt/schema': 4.5.0 + '@nuxt/telemetry': 2.8.0(@nuxt/kit@4.5.0(magic-string@1.0.0)(magicast@0.5.3)(oxc-parser@0.140.0)(rolldown@1.2.0)(unplugin@3.3.0(esbuild@0.28.1)(rolldown@1.2.0)(rollup@4.62.2)(vite@8.1.5(@types/node@26.1.1)(esbuild@0.28.1)(jiti@1.21.7)(terser@5.49.0)(tsx@4.23.1)(yaml@2.9.0)))) + '@nuxt/vite-builder': 4.5.0(e823a26359067b1de12663414877c848) + '@unhead/vue': 3.2.1(crossws@0.4.10(srvx@0.11.22))(esbuild@0.28.1)(lightningcss@1.33.0)(rolldown@1.2.0)(rollup@4.62.2)(typescript@6.0.3)(vite@8.1.5(@types/node@26.1.1)(esbuild@0.28.1)(jiti@1.21.7)(terser@5.49.0)(tsx@4.23.1)(yaml@2.9.0))(vue@3.5.40(typescript@6.0.3)) + '@vue/shared': 3.5.40 chokidar: 5.0.0 compatx: 0.2.0 consola: 3.4.2 - cookie-es: 2.0.1 + cookie-es: 3.1.1 defu: 6.1.7 - destr: 2.0.5 devalue: 5.8.1 errx: 0.1.0 escape-string-regexp: 5.0.0 - exsolve: 1.0.8 - h3: 1.15.11 - hookable: 5.5.3 - ignore: 7.0.5 - impound: 1.1.5 + exsolve: 1.1.0 + fnv1a-64: 0.1.1 + hookable: 6.1.1 + ignore: 7.0.6 + impound: 1.1.5(esbuild@0.28.1)(rolldown@1.2.0)(rollup@4.62.2)(vite@8.1.5(@types/node@26.1.1)(esbuild@0.28.1)(jiti@1.21.7)(terser@5.49.0)(tsx@4.23.1)(yaml@2.9.0)) jiti: 2.7.0 klona: 2.0.6 knitwork: 1.3.0 - magic-string: 0.30.21 + magic-string: 1.0.0 mlly: 1.8.2 nanotar: 0.3.0 - nypm: 0.6.6 + nostics: 1.2.0 + nypm: 0.6.8 + object-identity: 0.2.3 ofetch: 1.5.1 ohash: 2.0.11 on-change: 6.0.2 - oxc-minify: 0.131.0 - oxc-parser: 0.131.0 - oxc-transform: 0.131.0 - oxc-walker: 1.0.0(oxc-parser@0.131.0) + oxc-walker: 1.0.0(esbuild@0.28.1)(oxc-parser@0.140.0)(rolldown@1.2.0)(rollup@4.62.2)(vite@8.1.5(@types/node@26.1.1)(esbuild@0.28.1)(jiti@1.21.7)(terser@5.49.0)(tsx@4.23.1)(yaml@2.9.0)) pathe: 2.0.3 perfect-debounce: 2.1.0 + picomatch: 4.0.5 pkg-types: 2.3.1 - rou3: 0.8.1 + rolldown: 1.2.0 + rolldown-string: 0.3.1(rolldown@1.2.0) + rou3: 0.9.1 scule: 1.3.0 - semver: 7.8.1 - std-env: 4.1.0 + semver: 7.8.5 + std-env: 4.2.0 tinyglobby: 0.2.17 ufo: 1.6.4 - ultrahtml: 1.6.0 + ultrahtml: 1.7.0 uncrypto: 0.1.3 - unctx: 2.5.0 - unimport: 6.3.0(oxc-parser@0.131.0) - unplugin: 3.0.0 - unplugin-vue-router: 0.19.2(@vue/compiler-sfc@3.5.35)(vue-router@4.6.4(vue@3.5.35(typescript@6.0.3)))(vue@3.5.35(typescript@6.0.3)) + unctx: 3.0.0(magic-string@1.0.0)(oxc-parser@0.140.0)(rolldown@1.2.0)(unplugin@3.3.0(esbuild@0.28.1)(rolldown@1.2.0)(rollup@4.62.2)(vite@8.1.5(@types/node@26.1.1)(esbuild@0.28.1)(jiti@1.21.7)(terser@5.49.0)(tsx@4.23.1)(yaml@2.9.0))) + undici: 8.7.0 + unhead: 3.2.1(esbuild@0.28.1)(rolldown@1.2.0)(rollup@4.62.2)(vite@8.1.5(@types/node@26.1.1)(esbuild@0.28.1)(jiti@1.21.7)(terser@5.49.0)(tsx@4.23.1)(yaml@2.9.0)) + unimport: 6.3.0(esbuild@0.28.1)(oxc-parser@0.140.0)(rolldown@1.2.0)(rollup@4.62.2)(vite@8.1.5(@types/node@26.1.1)(esbuild@0.28.1)(jiti@1.21.7)(terser@5.49.0)(tsx@4.23.1)(yaml@2.9.0)) + unplugin: 3.3.0(esbuild@0.28.1)(rolldown@1.2.0)(rollup@4.62.2)(vite@8.1.5(@types/node@26.1.1)(esbuild@0.28.1)(jiti@1.21.7)(terser@5.49.0)(tsx@4.23.1)(yaml@2.9.0)) + unrouting: 0.1.7 untyped: 2.0.0 - vue: 3.5.35(typescript@6.0.3) - vue-router: 4.6.4(vue@3.5.35(typescript@6.0.3)) + vue: 3.5.40(typescript@6.0.3) + vue-router: 5.2.0(@vue/compiler-sfc@3.5.40)(esbuild@0.28.1)(pinia@4.0.2(@vue/devtools-api@8.1.5)(typescript@6.0.3)(vue@3.5.40(typescript@6.0.3)))(rolldown@1.2.0)(rollup@4.62.2)(vite@8.1.5(@types/node@26.1.1)(esbuild@0.28.1)(jiti@1.21.7)(terser@5.49.0)(tsx@4.23.1)(yaml@2.9.0))(vue@3.5.40(typescript@6.0.3)) optionalDependencies: - '@parcel/watcher': 2.5.6 - '@types/node': 25.9.1 + '@parcel/watcher': 2.6.0 + '@types/node': 26.1.1 transitivePeerDependencies: - '@azure/app-configuration' - '@azure/cosmos' @@ -11013,13 +11275,22 @@ snapshots: - '@azure/identity' - '@azure/keyvault-secrets' - '@azure/storage-blob' + - '@babel/plugin-proposal-decorators' + - '@babel/plugin-syntax-jsx' + - '@babel/plugin-syntax-typescript' - '@biomejs/biome' - '@capacitor/preferences' - '@deno/kv' - '@electric-sql/pglite' + - '@farmfe/core' - '@libsql/client' + - '@modelcontextprotocol/sdk' - '@netlify/blobs' + - '@pinia/colada' - '@planetscale/database' + - '@rollup/plugin-babel' + - '@rspack/core' + - '@unhead/cli' - '@upstash/redis' - '@vercel/blob' - '@vercel/functions' @@ -11031,11 +11302,14 @@ snapshots: - bare-buffer - better-sqlite3 - bufferutil + - bun-types-no-globals - cac - commander + - crossws - db0 - drizzle-orm - encoding + - esbuild - eslint - idb-keyval - ioredis @@ -11045,9 +11319,10 @@ snapshots: - meow - mysql2 - optionator + - oxc-parser - oxlint + - pinia - react-native-b4a - - rolldown - rollup - rollup-plugin-visualizer - sass @@ -11061,20 +11336,22 @@ snapshots: - terser - tsx - typescript + - unloader - uploadthing - utf-8-validate - vite - - vls - - vti - vue-tsc + - webpack - xml2js - yaml - nypm@0.6.6: + nypm@0.6.8: dependencies: citty: 0.2.2 pathe: 2.0.3 - tinyexec: 1.2.3 + tinyexec: 1.2.4 + + oauth4webapi@3.8.6: {} object-assign@4.1.1: {} @@ -11082,7 +11359,9 @@ snapshots: object-hash@3.0.0: {} - obug@2.1.1: {} + object-identity@0.2.3: {} + + obug@2.1.4: {} ofetch@1.5.1: dependencies: @@ -11124,6 +11403,11 @@ snapshots: is-docker: 2.2.1 is-wsl: 2.2.0 + openid-client@6.8.4: + dependencies: + jose: 6.2.3 + oauth4webapi: 3.8.6 + optionator@0.9.4: dependencies: deep-is: 0.1.4 @@ -11137,29 +11421,6 @@ snapshots: dependencies: '@noble/hashes': 2.2.0 - oxc-minify@0.131.0: - optionalDependencies: - '@oxc-minify/binding-android-arm-eabi': 0.131.0 - '@oxc-minify/binding-android-arm64': 0.131.0 - '@oxc-minify/binding-darwin-arm64': 0.131.0 - '@oxc-minify/binding-darwin-x64': 0.131.0 - '@oxc-minify/binding-freebsd-x64': 0.131.0 - '@oxc-minify/binding-linux-arm-gnueabihf': 0.131.0 - '@oxc-minify/binding-linux-arm-musleabihf': 0.131.0 - '@oxc-minify/binding-linux-arm64-gnu': 0.131.0 - '@oxc-minify/binding-linux-arm64-musl': 0.131.0 - '@oxc-minify/binding-linux-ppc64-gnu': 0.131.0 - '@oxc-minify/binding-linux-riscv64-gnu': 0.131.0 - '@oxc-minify/binding-linux-riscv64-musl': 0.131.0 - '@oxc-minify/binding-linux-s390x-gnu': 0.131.0 - '@oxc-minify/binding-linux-x64-gnu': 0.131.0 - '@oxc-minify/binding-linux-x64-musl': 0.131.0 - '@oxc-minify/binding-openharmony-arm64': 0.131.0 - '@oxc-minify/binding-wasm32-wasi': 0.131.0 - '@oxc-minify/binding-win32-arm64-msvc': 0.131.0 - '@oxc-minify/binding-win32-ia32-msvc': 0.131.0 - '@oxc-minify/binding-win32-x64-msvc': 0.131.0 - oxc-parser@0.128.0: dependencies: '@oxc-project/types': 0.128.0 @@ -11185,30 +11446,55 @@ snapshots: '@oxc-parser/binding-win32-ia32-msvc': 0.128.0 '@oxc-parser/binding-win32-x64-msvc': 0.128.0 - oxc-parser@0.131.0: + oxc-parser@0.132.0: dependencies: - '@oxc-project/types': 0.131.0 + '@oxc-project/types': 0.132.0 optionalDependencies: - '@oxc-parser/binding-android-arm-eabi': 0.131.0 - '@oxc-parser/binding-android-arm64': 0.131.0 - '@oxc-parser/binding-darwin-arm64': 0.131.0 - '@oxc-parser/binding-darwin-x64': 0.131.0 - '@oxc-parser/binding-freebsd-x64': 0.131.0 - '@oxc-parser/binding-linux-arm-gnueabihf': 0.131.0 - '@oxc-parser/binding-linux-arm-musleabihf': 0.131.0 - '@oxc-parser/binding-linux-arm64-gnu': 0.131.0 - '@oxc-parser/binding-linux-arm64-musl': 0.131.0 - '@oxc-parser/binding-linux-ppc64-gnu': 0.131.0 - '@oxc-parser/binding-linux-riscv64-gnu': 0.131.0 - '@oxc-parser/binding-linux-riscv64-musl': 0.131.0 - '@oxc-parser/binding-linux-s390x-gnu': 0.131.0 - '@oxc-parser/binding-linux-x64-gnu': 0.131.0 - '@oxc-parser/binding-linux-x64-musl': 0.131.0 - '@oxc-parser/binding-openharmony-arm64': 0.131.0 - '@oxc-parser/binding-wasm32-wasi': 0.131.0 - '@oxc-parser/binding-win32-arm64-msvc': 0.131.0 - '@oxc-parser/binding-win32-ia32-msvc': 0.131.0 - '@oxc-parser/binding-win32-x64-msvc': 0.131.0 + '@oxc-parser/binding-android-arm-eabi': 0.132.0 + '@oxc-parser/binding-android-arm64': 0.132.0 + '@oxc-parser/binding-darwin-arm64': 0.132.0 + '@oxc-parser/binding-darwin-x64': 0.132.0 + '@oxc-parser/binding-freebsd-x64': 0.132.0 + '@oxc-parser/binding-linux-arm-gnueabihf': 0.132.0 + '@oxc-parser/binding-linux-arm-musleabihf': 0.132.0 + '@oxc-parser/binding-linux-arm64-gnu': 0.132.0 + '@oxc-parser/binding-linux-arm64-musl': 0.132.0 + '@oxc-parser/binding-linux-ppc64-gnu': 0.132.0 + '@oxc-parser/binding-linux-riscv64-gnu': 0.132.0 + '@oxc-parser/binding-linux-riscv64-musl': 0.132.0 + '@oxc-parser/binding-linux-s390x-gnu': 0.132.0 + '@oxc-parser/binding-linux-x64-gnu': 0.132.0 + '@oxc-parser/binding-linux-x64-musl': 0.132.0 + '@oxc-parser/binding-openharmony-arm64': 0.132.0 + '@oxc-parser/binding-wasm32-wasi': 0.132.0 + '@oxc-parser/binding-win32-arm64-msvc': 0.132.0 + '@oxc-parser/binding-win32-ia32-msvc': 0.132.0 + '@oxc-parser/binding-win32-x64-msvc': 0.132.0 + + oxc-parser@0.140.0: + dependencies: + '@oxc-project/types': 0.140.0 + optionalDependencies: + '@oxc-parser/binding-android-arm-eabi': 0.140.0 + '@oxc-parser/binding-android-arm64': 0.140.0 + '@oxc-parser/binding-darwin-arm64': 0.140.0 + '@oxc-parser/binding-darwin-x64': 0.140.0 + '@oxc-parser/binding-freebsd-x64': 0.140.0 + '@oxc-parser/binding-linux-arm-gnueabihf': 0.140.0 + '@oxc-parser/binding-linux-arm-musleabihf': 0.140.0 + '@oxc-parser/binding-linux-arm64-gnu': 0.140.0 + '@oxc-parser/binding-linux-arm64-musl': 0.140.0 + '@oxc-parser/binding-linux-ppc64-gnu': 0.140.0 + '@oxc-parser/binding-linux-riscv64-gnu': 0.140.0 + '@oxc-parser/binding-linux-riscv64-musl': 0.140.0 + '@oxc-parser/binding-linux-s390x-gnu': 0.140.0 + '@oxc-parser/binding-linux-x64-gnu': 0.140.0 + '@oxc-parser/binding-linux-x64-musl': 0.140.0 + '@oxc-parser/binding-openharmony-arm64': 0.140.0 + '@oxc-parser/binding-wasm32-wasi': 0.140.0 + '@oxc-parser/binding-win32-arm64-msvc': 0.140.0 + '@oxc-parser/binding-win32-ia32-msvc': 0.140.0 + '@oxc-parser/binding-win32-x64-msvc': 0.140.0 oxc-transform@0.128.0: optionalDependencies: @@ -11233,39 +11519,26 @@ snapshots: '@oxc-transform/binding-win32-ia32-msvc': 0.128.0 '@oxc-transform/binding-win32-x64-msvc': 0.128.0 - oxc-transform@0.131.0: - optionalDependencies: - '@oxc-transform/binding-android-arm-eabi': 0.131.0 - '@oxc-transform/binding-android-arm64': 0.131.0 - '@oxc-transform/binding-darwin-arm64': 0.131.0 - '@oxc-transform/binding-darwin-x64': 0.131.0 - '@oxc-transform/binding-freebsd-x64': 0.131.0 - '@oxc-transform/binding-linux-arm-gnueabihf': 0.131.0 - '@oxc-transform/binding-linux-arm-musleabihf': 0.131.0 - '@oxc-transform/binding-linux-arm64-gnu': 0.131.0 - '@oxc-transform/binding-linux-arm64-musl': 0.131.0 - '@oxc-transform/binding-linux-ppc64-gnu': 0.131.0 - '@oxc-transform/binding-linux-riscv64-gnu': 0.131.0 - '@oxc-transform/binding-linux-riscv64-musl': 0.131.0 - '@oxc-transform/binding-linux-s390x-gnu': 0.131.0 - '@oxc-transform/binding-linux-x64-gnu': 0.131.0 - '@oxc-transform/binding-linux-x64-musl': 0.131.0 - '@oxc-transform/binding-openharmony-arm64': 0.131.0 - '@oxc-transform/binding-wasm32-wasi': 0.131.0 - '@oxc-transform/binding-win32-arm64-msvc': 0.131.0 - '@oxc-transform/binding-win32-ia32-msvc': 0.131.0 - '@oxc-transform/binding-win32-x64-msvc': 0.131.0 - oxc-walker@0.7.0(oxc-parser@0.128.0): dependencies: magic-regexp: 0.10.0 oxc-parser: 0.128.0 - oxc-walker@1.0.0(oxc-parser@0.131.0): + oxc-walker@1.0.0(esbuild@0.28.1)(oxc-parser@0.140.0)(rolldown@1.2.0)(rollup@4.62.2)(vite@8.1.5(@types/node@26.1.1)(esbuild@0.28.1)(jiti@1.21.7)(terser@5.49.0)(tsx@4.23.1)(yaml@2.9.0)): dependencies: - magic-regexp: 0.11.0 + magic-regexp: 0.11.0(esbuild@0.28.1)(rolldown@1.2.0)(rollup@4.62.2)(vite@8.1.5(@types/node@26.1.1)(esbuild@0.28.1)(jiti@1.21.7)(terser@5.49.0)(tsx@4.23.1)(yaml@2.9.0)) optionalDependencies: - oxc-parser: 0.131.0 + oxc-parser: 0.140.0 + rolldown: 1.2.0 + transitivePeerDependencies: + - '@farmfe/core' + - '@rspack/core' + - bun-types-no-globals + - esbuild + - rollup + - unloader + - vite + - webpack p-limit@3.1.0: dependencies: @@ -11285,11 +11558,7 @@ snapshots: package-json-from-dist@1.0.1: {} - package-manager-detector@1.6.0: {} - - parent-module@1.0.1: - dependencies: - callsites: 3.1.0 + package-manager-detector@1.7.0: {} parse-imports-exports@0.2.4: dependencies: @@ -11318,7 +11587,7 @@ snapshots: path-scurry@2.0.2: dependencies: - lru-cache: 11.5.1 + lru-cache: 11.5.2 minipass: 7.1.3 path-to-regexp@6.3.0: {} @@ -11327,22 +11596,21 @@ snapshots: pathe@2.0.3: {} - perfect-debounce@1.0.0: {} - perfect-debounce@2.1.0: {} picocolors@1.1.1: {} picomatch@2.3.2: {} - picomatch@4.0.4: {} + picomatch@4.0.5: {} pify@2.3.0: {} - pinia@3.0.4(typescript@6.0.3)(vue@3.5.35(typescript@6.0.3)): + pinia@4.0.2(@vue/devtools-api@8.1.5)(typescript@6.0.3)(vue@3.5.40(typescript@6.0.3)): dependencies: - '@vue/devtools-api': 7.7.9 - vue: 3.5.35(typescript@6.0.3) + '@vue/devtools-api': 8.1.5 + nostics: 1.2.0 + vue: 3.5.40(typescript@6.0.3) optionalDependencies: typescript: 6.0.3 @@ -11357,217 +11625,217 @@ snapshots: pkg-types@2.3.1: dependencies: confbox: 0.2.4 - exsolve: 1.0.8 + exsolve: 1.1.0 pathe: 2.0.3 pluralize@8.0.0: {} - portfinder@1.0.38: + portfinder@1.0.38(supports-color@10.2.2): dependencies: async: 3.2.6 - debug: 4.4.3 + debug: 4.4.3(supports-color@10.2.2) transitivePeerDependencies: - supports-color - postcss-calc@10.1.1(postcss@8.5.15): + postcss-calc@10.1.1(postcss@8.5.20): dependencies: - postcss: 8.5.15 - postcss-selector-parser: 7.1.1 + postcss: 8.5.20 + postcss-selector-parser: 7.1.4 postcss-value-parser: 4.2.0 - postcss-colormin@7.0.10(postcss@8.5.15): + postcss-colormin@8.0.1(postcss@8.5.20): dependencies: - '@colordx/core': 5.4.3 - browserslist: 4.28.2 - caniuse-api: 3.0.0 - postcss: 8.5.15 + '@colordx/core': 5.5.0 + browserslist: 4.28.6 + caniuse-api: 4.0.0 + postcss: 8.5.20 postcss-value-parser: 4.2.0 - postcss-convert-values@7.0.12(postcss@8.5.15): + postcss-convert-values@8.0.1(postcss@8.5.20): dependencies: - browserslist: 4.28.2 - postcss: 8.5.15 + browserslist: 4.28.6 + postcss: 8.5.20 postcss-value-parser: 4.2.0 - postcss-discard-comments@7.0.8(postcss@8.5.15): + postcss-discard-comments@8.0.1(postcss@8.5.20): dependencies: - postcss: 8.5.15 - postcss-selector-parser: 7.1.1 + postcss: 8.5.20 + postcss-selector-parser: 7.1.4 - postcss-discard-duplicates@7.0.4(postcss@8.5.15): + postcss-discard-duplicates@8.0.1(postcss@8.5.20): dependencies: - postcss: 8.5.15 + postcss: 8.5.20 - postcss-discard-empty@7.0.3(postcss@8.5.15): + postcss-discard-empty@8.0.1(postcss@8.5.20): dependencies: - postcss: 8.5.15 + postcss: 8.5.20 - postcss-discard-overridden@7.0.3(postcss@8.5.15): + postcss-discard-overridden@8.0.1(postcss@8.5.20): dependencies: - postcss: 8.5.15 + postcss: 8.5.20 - postcss-import@15.1.0(postcss@8.5.15): + postcss-import@15.1.0(postcss@8.5.20): dependencies: - postcss: 8.5.15 + postcss: 8.5.20 postcss-value-parser: 4.2.0 read-cache: 1.0.0 resolve: 1.22.12 - postcss-js@4.1.0(postcss@8.5.15): + postcss-js@4.1.0(postcss@8.5.20): dependencies: camelcase-css: 2.0.1 - postcss: 8.5.15 + postcss: 8.5.20 - postcss-load-config@6.0.1(jiti@1.21.7)(postcss@8.5.15)(tsx@4.22.3)(yaml@2.9.0): + postcss-load-config@6.0.1(jiti@1.21.7)(postcss@8.5.20)(tsx@4.23.1)(yaml@2.9.0): dependencies: lilconfig: 3.1.3 optionalDependencies: jiti: 1.21.7 - postcss: 8.5.15 - tsx: 4.22.3 + postcss: 8.5.20 + tsx: 4.23.1 yaml: 2.9.0 - postcss-merge-longhand@7.0.7(postcss@8.5.15): + postcss-merge-longhand@8.0.1(postcss@8.5.20): dependencies: - postcss: 8.5.15 + postcss: 8.5.20 postcss-value-parser: 4.2.0 - stylehacks: 7.0.11(postcss@8.5.15) + stylehacks: 8.0.1(postcss@8.5.20) - postcss-merge-rules@7.0.11(postcss@8.5.15): + postcss-merge-rules@8.0.1(postcss@8.5.20): dependencies: - browserslist: 4.28.2 - caniuse-api: 3.0.0 - cssnano-utils: 5.0.3(postcss@8.5.15) - postcss: 8.5.15 - postcss-selector-parser: 7.1.1 + browserslist: 4.28.6 + caniuse-api: 4.0.0 + cssnano-utils: 6.0.1(postcss@8.5.20) + postcss: 8.5.20 + postcss-selector-parser: 7.1.4 - postcss-minify-font-values@7.0.3(postcss@8.5.15): + postcss-minify-font-values@8.0.1(postcss@8.5.20): dependencies: - postcss: 8.5.15 + postcss: 8.5.20 postcss-value-parser: 4.2.0 - postcss-minify-gradients@7.0.5(postcss@8.5.15): + postcss-minify-gradients@8.0.1(postcss@8.5.20): dependencies: - '@colordx/core': 5.4.3 - cssnano-utils: 5.0.3(postcss@8.5.15) - postcss: 8.5.15 + '@colordx/core': 5.5.0 + cssnano-utils: 6.0.1(postcss@8.5.20) + postcss: 8.5.20 postcss-value-parser: 4.2.0 - postcss-minify-params@7.0.9(postcss@8.5.15): + postcss-minify-params@8.0.1(postcss@8.5.20): dependencies: - browserslist: 4.28.2 - cssnano-utils: 5.0.3(postcss@8.5.15) - postcss: 8.5.15 + browserslist: 4.28.6 + cssnano-utils: 6.0.1(postcss@8.5.20) + postcss: 8.5.20 postcss-value-parser: 4.2.0 - postcss-minify-selectors@7.1.2(postcss@8.5.15): + postcss-minify-selectors@8.0.2(postcss@8.5.20): dependencies: - browserslist: 4.28.2 - caniuse-api: 3.0.0 + browserslist: 4.28.6 + caniuse-api: 4.0.0 cssesc: 3.0.0 - postcss: 8.5.15 - postcss-selector-parser: 7.1.1 + postcss: 8.5.20 + postcss-selector-parser: 7.1.4 - postcss-nested@6.2.0(postcss@8.5.15): + postcss-nested@6.2.0(postcss@8.5.20): dependencies: - postcss: 8.5.15 - postcss-selector-parser: 6.1.2 + postcss: 8.5.20 + postcss-selector-parser: 6.1.4 - postcss-nesting@13.0.2(postcss@8.5.15): + postcss-nesting@13.0.2(postcss@8.5.20): dependencies: - '@csstools/selector-resolve-nested': 3.1.0(postcss-selector-parser@7.1.1) - '@csstools/selector-specificity': 5.0.0(postcss-selector-parser@7.1.1) - postcss: 8.5.15 - postcss-selector-parser: 7.1.1 + '@csstools/selector-resolve-nested': 3.1.0(postcss-selector-parser@7.1.4) + '@csstools/selector-specificity': 5.0.0(postcss-selector-parser@7.1.4) + postcss: 8.5.20 + postcss-selector-parser: 7.1.4 - postcss-normalize-charset@7.0.3(postcss@8.5.15): + postcss-normalize-charset@8.0.1(postcss@8.5.20): dependencies: - postcss: 8.5.15 + postcss: 8.5.20 - postcss-normalize-display-values@7.0.3(postcss@8.5.15): + postcss-normalize-display-values@8.0.1(postcss@8.5.20): dependencies: - postcss: 8.5.15 + postcss: 8.5.20 postcss-value-parser: 4.2.0 - postcss-normalize-positions@7.0.4(postcss@8.5.15): + postcss-normalize-positions@8.0.1(postcss@8.5.20): dependencies: - postcss: 8.5.15 + postcss: 8.5.20 postcss-value-parser: 4.2.0 - postcss-normalize-repeat-style@7.0.4(postcss@8.5.15): + postcss-normalize-repeat-style@8.0.1(postcss@8.5.20): dependencies: - postcss: 8.5.15 + postcss: 8.5.20 postcss-value-parser: 4.2.0 - postcss-normalize-string@7.0.3(postcss@8.5.15): + postcss-normalize-string@8.0.1(postcss@8.5.20): dependencies: - postcss: 8.5.15 + postcss: 8.5.20 postcss-value-parser: 4.2.0 - postcss-normalize-timing-functions@7.0.3(postcss@8.5.15): + postcss-normalize-timing-functions@8.0.1(postcss@8.5.20): dependencies: - postcss: 8.5.15 + postcss: 8.5.20 postcss-value-parser: 4.2.0 - postcss-normalize-unicode@7.0.9(postcss@8.5.15): + postcss-normalize-unicode@8.0.1(postcss@8.5.20): dependencies: - browserslist: 4.28.2 - postcss: 8.5.15 + browserslist: 4.28.6 + postcss: 8.5.20 postcss-value-parser: 4.2.0 - postcss-normalize-url@7.0.3(postcss@8.5.15): + postcss-normalize-url@8.0.1(postcss@8.5.20): dependencies: - postcss: 8.5.15 + postcss: 8.5.20 postcss-value-parser: 4.2.0 - postcss-normalize-whitespace@7.0.3(postcss@8.5.15): + postcss-normalize-whitespace@8.0.1(postcss@8.5.20): dependencies: - postcss: 8.5.15 + postcss: 8.5.20 postcss-value-parser: 4.2.0 - postcss-ordered-values@7.0.4(postcss@8.5.15): + postcss-ordered-values@8.0.1(postcss@8.5.20): dependencies: - cssnano-utils: 5.0.3(postcss@8.5.15) - postcss: 8.5.15 + cssnano-utils: 6.0.1(postcss@8.5.20) + postcss: 8.5.20 postcss-value-parser: 4.2.0 - postcss-reduce-initial@7.0.9(postcss@8.5.15): + postcss-reduce-initial@8.0.1(postcss@8.5.20): dependencies: - browserslist: 4.28.2 - caniuse-api: 3.0.0 - postcss: 8.5.15 + browserslist: 4.28.6 + caniuse-api: 4.0.0 + postcss: 8.5.20 - postcss-reduce-transforms@7.0.3(postcss@8.5.15): + postcss-reduce-transforms@8.0.1(postcss@8.5.20): dependencies: - postcss: 8.5.15 + postcss: 8.5.20 postcss-value-parser: 4.2.0 - postcss-selector-parser@6.1.2: + postcss-selector-parser@6.1.4: dependencies: cssesc: 3.0.0 util-deprecate: 1.0.2 - postcss-selector-parser@7.1.1: + postcss-selector-parser@7.1.4: dependencies: cssesc: 3.0.0 util-deprecate: 1.0.2 - postcss-svgo@7.1.3(postcss@8.5.15): + postcss-svgo@8.0.1(postcss@8.5.20): dependencies: - postcss: 8.5.15 + postcss: 8.5.20 postcss-value-parser: 4.2.0 - svgo: 4.0.1 + svgo: 4.0.2 - postcss-unique-selectors@7.0.7(postcss@8.5.15): + postcss-unique-selectors@8.0.1(postcss@8.5.20): dependencies: - postcss: 8.5.15 - postcss-selector-parser: 7.1.1 + postcss: 8.5.20 + postcss-selector-parser: 7.1.4 postcss-value-parser@4.2.0: {} - postcss@8.5.15: + postcss@8.5.20: dependencies: - nanoid: 3.3.12 + nanoid: 3.3.16 picocolors: 1.1.1 source-map-js: 1.2.1 @@ -11575,13 +11843,13 @@ snapshots: prelude-ls@1.2.1: {} - prettier-plugin-tailwindcss@0.8.0(prettier@3.8.3): + prettier-plugin-tailwindcss@0.8.1(prettier@3.9.5): dependencies: - prettier: 3.8.3 + prettier: 3.9.5 - prettier@3.8.3: {} + prettier@3.9.5: {} - pretty-bytes@7.1.0: {} + pretty-bytes@7.1.1: {} process-nextick-args@2.0.1: {} @@ -11603,26 +11871,26 @@ snapshots: queue-microtask@1.2.3: {} - radix-vue@1.9.17(vue@3.5.35(typescript@6.0.3)): + radix-vue@1.9.17(vue@3.5.40(typescript@6.0.3)): dependencies: - '@floating-ui/dom': 1.7.6 - '@floating-ui/vue': 1.1.11(vue@3.5.35(typescript@6.0.3)) + '@floating-ui/dom': 1.8.0 + '@floating-ui/vue': 1.1.11(vue@3.5.40(typescript@6.0.3)) '@internationalized/date': 3.12.2 '@internationalized/number': 3.6.7 - '@tanstack/vue-virtual': 3.13.26(vue@3.5.35(typescript@6.0.3)) - '@vueuse/core': 10.11.1(vue@3.5.35(typescript@6.0.3)) - '@vueuse/shared': 10.11.1(vue@3.5.35(typescript@6.0.3)) + '@tanstack/vue-virtual': 3.13.32(vue@3.5.40(typescript@6.0.3)) + '@vueuse/core': 10.11.1(vue@3.5.40(typescript@6.0.3)) + '@vueuse/shared': 10.11.1(vue@3.5.40(typescript@6.0.3)) aria-hidden: 1.2.6 defu: 6.1.7 fast-deep-equal: 3.1.3 - nanoid: 5.1.11 - vue: 3.5.35(typescript@6.0.3) + nanoid: 5.1.16 + vue: 3.5.40(typescript@6.0.3) transitivePeerDependencies: - '@vue/composition-api' radix3@1.1.2: {} - range-parser@1.2.1: {} + range-parser@1.3.0: {} rc9@3.0.1: dependencies: @@ -11659,8 +11927,6 @@ snapshots: dependencies: picomatch: 2.3.2 - readdirp@4.1.2: {} - readdirp@5.0.0: {} redis-errors@1.2.0: {} @@ -11680,7 +11946,7 @@ snapshots: regexp-tree@0.1.27: {} - regjsparser@0.13.1: + regjsparser@0.13.2: dependencies: jsesc: 3.1.0 @@ -11688,14 +11954,12 @@ snapshots: dependencies: chalk: 4.1.2 glob: 7.2.3 - yargs: 17.7.2 + yargs: 17.7.3 require-directory@2.1.1: {} reserved-identifiers@1.2.0: {} - resolve-from@4.0.0: {} - resolve-from@5.0.0: {} resolve-path@1.4.0: @@ -11716,50 +11980,99 @@ snapshots: reusify@1.1.0: {} - rfdc@1.4.1: {} + rolldown-string@0.3.1(rolldown@1.2.0): + dependencies: + magic-string: 1.0.0 + optionalDependencies: + rolldown: 1.2.0 - rollup-plugin-visualizer@7.0.1(rollup@4.60.4): + rolldown@1.1.5: + dependencies: + '@oxc-project/types': 0.139.0 + '@rolldown/pluginutils': 1.0.1 + optionalDependencies: + '@rolldown/binding-android-arm64': 1.1.5 + '@rolldown/binding-darwin-arm64': 1.1.5 + '@rolldown/binding-darwin-x64': 1.1.5 + '@rolldown/binding-freebsd-x64': 1.1.5 + '@rolldown/binding-linux-arm-gnueabihf': 1.1.5 + '@rolldown/binding-linux-arm64-gnu': 1.1.5 + '@rolldown/binding-linux-arm64-musl': 1.1.5 + '@rolldown/binding-linux-ppc64-gnu': 1.1.5 + '@rolldown/binding-linux-s390x-gnu': 1.1.5 + '@rolldown/binding-linux-x64-gnu': 1.1.5 + '@rolldown/binding-linux-x64-musl': 1.1.5 + '@rolldown/binding-openharmony-arm64': 1.1.5 + '@rolldown/binding-wasm32-wasi': 1.1.5 + '@rolldown/binding-win32-arm64-msvc': 1.1.5 + '@rolldown/binding-win32-x64-msvc': 1.1.5 + + rolldown@1.2.0: + dependencies: + '@oxc-project/types': 0.140.0 + '@rolldown/pluginutils': 1.0.1 + optionalDependencies: + '@rolldown/binding-android-arm64': 1.2.0 + '@rolldown/binding-darwin-arm64': 1.2.0 + '@rolldown/binding-darwin-x64': 1.2.0 + '@rolldown/binding-freebsd-x64': 1.2.0 + '@rolldown/binding-linux-arm-gnueabihf': 1.2.0 + '@rolldown/binding-linux-arm64-gnu': 1.2.0 + '@rolldown/binding-linux-arm64-musl': 1.2.0 + '@rolldown/binding-linux-ppc64-gnu': 1.2.0 + '@rolldown/binding-linux-s390x-gnu': 1.2.0 + '@rolldown/binding-linux-x64-gnu': 1.2.0 + '@rolldown/binding-linux-x64-musl': 1.2.0 + '@rolldown/binding-openharmony-arm64': 1.2.0 + '@rolldown/binding-wasm32-wasi': 1.2.0 + '@rolldown/binding-win32-arm64-msvc': 1.2.0 + '@rolldown/binding-win32-x64-msvc': 1.2.0 + + rollup-plugin-visualizer@7.0.1(rolldown@1.2.0)(rollup@4.62.2): dependencies: open: 11.0.0 - picomatch: 4.0.4 + picomatch: 4.0.5 source-map: 0.7.6 yargs: 18.0.0 optionalDependencies: - rollup: 4.60.4 + rolldown: 1.2.0 + rollup: 4.62.2 - rollup@4.60.4: + rollup@4.62.2: dependencies: - '@types/estree': 1.0.8 + '@types/estree': 1.0.9 optionalDependencies: - '@rollup/rollup-android-arm-eabi': 4.60.4 - '@rollup/rollup-android-arm64': 4.60.4 - '@rollup/rollup-darwin-arm64': 4.60.4 - '@rollup/rollup-darwin-x64': 4.60.4 - '@rollup/rollup-freebsd-arm64': 4.60.4 - '@rollup/rollup-freebsd-x64': 4.60.4 - '@rollup/rollup-linux-arm-gnueabihf': 4.60.4 - '@rollup/rollup-linux-arm-musleabihf': 4.60.4 - '@rollup/rollup-linux-arm64-gnu': 4.60.4 - '@rollup/rollup-linux-arm64-musl': 4.60.4 - '@rollup/rollup-linux-loong64-gnu': 4.60.4 - '@rollup/rollup-linux-loong64-musl': 4.60.4 - '@rollup/rollup-linux-ppc64-gnu': 4.60.4 - '@rollup/rollup-linux-ppc64-musl': 4.60.4 - '@rollup/rollup-linux-riscv64-gnu': 4.60.4 - '@rollup/rollup-linux-riscv64-musl': 4.60.4 - '@rollup/rollup-linux-s390x-gnu': 4.60.4 - '@rollup/rollup-linux-x64-gnu': 4.60.4 - '@rollup/rollup-linux-x64-musl': 4.60.4 - '@rollup/rollup-openbsd-x64': 4.60.4 - '@rollup/rollup-openharmony-arm64': 4.60.4 - '@rollup/rollup-win32-arm64-msvc': 4.60.4 - '@rollup/rollup-win32-ia32-msvc': 4.60.4 - '@rollup/rollup-win32-x64-gnu': 4.60.4 - '@rollup/rollup-win32-x64-msvc': 4.60.4 + '@rollup/rollup-android-arm-eabi': 4.62.2 + '@rollup/rollup-android-arm64': 4.62.2 + '@rollup/rollup-darwin-arm64': 4.62.2 + '@rollup/rollup-darwin-x64': 4.62.2 + '@rollup/rollup-freebsd-arm64': 4.62.2 + '@rollup/rollup-freebsd-x64': 4.62.2 + '@rollup/rollup-linux-arm-gnueabihf': 4.62.2 + '@rollup/rollup-linux-arm-musleabihf': 4.62.2 + '@rollup/rollup-linux-arm64-gnu': 4.62.2 + '@rollup/rollup-linux-arm64-musl': 4.62.2 + '@rollup/rollup-linux-loong64-gnu': 4.62.2 + '@rollup/rollup-linux-loong64-musl': 4.62.2 + '@rollup/rollup-linux-ppc64-gnu': 4.62.2 + '@rollup/rollup-linux-ppc64-musl': 4.62.2 + '@rollup/rollup-linux-riscv64-gnu': 4.62.2 + '@rollup/rollup-linux-riscv64-musl': 4.62.2 + '@rollup/rollup-linux-s390x-gnu': 4.62.2 + '@rollup/rollup-linux-x64-gnu': 4.62.2 + '@rollup/rollup-linux-x64-musl': 4.62.2 + '@rollup/rollup-openbsd-x64': 4.62.2 + '@rollup/rollup-openharmony-arm64': 4.62.2 + '@rollup/rollup-win32-arm64-msvc': 4.62.2 + '@rollup/rollup-win32-ia32-msvc': 4.62.2 + '@rollup/rollup-win32-x64-gnu': 4.62.2 + '@rollup/rollup-win32-x64-msvc': 4.62.2 fsevents: 2.3.3 rou3@0.8.1: {} + rou3@0.9.1: {} + run-applescript@7.1.0: {} run-parallel@1.2.0: @@ -11788,11 +12101,11 @@ snapshots: semver@6.3.1: {} - semver@7.8.1: {} + semver@7.8.5: {} - send@1.2.1: + send@1.2.1(supports-color@10.2.2): dependencies: - debug: 4.4.3 + debug: 4.4.3(supports-color@10.2.2) encodeurl: 2.0.0 escape-html: 1.0.3 etag: 1.8.1 @@ -11801,25 +12114,25 @@ snapshots: mime-types: 3.0.2 ms: 2.1.3 on-finished: 2.4.1 - range-parser: 1.2.1 + range-parser: 1.3.0 statuses: 2.0.2 transitivePeerDependencies: - supports-color - serialize-javascript@7.0.5: {} + serialize-javascript@7.0.7: {} - seroval@1.5.4: {} + seroval@1.5.6: {} serve-placeholder@2.0.2: dependencies: defu: 6.1.7 - serve-static@2.2.1: + serve-static@2.2.1(supports-color@10.2.2): dependencies: encodeurl: 2.0.0 escape-html: 1.0.3 parseurl: 1.3.3 - send: 1.2.1 + send: 1.2.1(supports-color@10.2.2) transitivePeerDependencies: - supports-color @@ -11833,7 +12146,7 @@ snapshots: shebang-regex@3.0.0: {} - shell-quote@1.8.4: {} + shell-quote@1.10.0: {} siginfo@2.0.0: {} @@ -11841,13 +12154,13 @@ snapshots: signal-exit@4.1.0: {} - simple-git@3.36.0: + simple-git@3.36.0(supports-color@10.2.2): dependencies: - '@kwsites/file-exists': 1.1.1 + '@kwsites/file-exists': 1.1.1(supports-color@10.2.2) '@kwsites/promise-deferred': 1.1.1 '@simple-git/args-pathspec': 1.0.3 '@simple-git/argv-parser': 1.1.1 - debug: 4.4.3 + debug: 4.4.3(supports-color@10.2.2) transitivePeerDependencies: - supports-color @@ -11883,9 +12196,7 @@ snapshots: spdx-license-ids@3.0.23: {} - speakingurl@14.0.1: {} - - srvx@0.11.16: {} + srvx@0.11.22: {} stable-hash-x@0.2.0: {} @@ -11897,9 +12208,9 @@ snapshots: statuses@2.0.2: {} - std-env@4.1.0: {} + std-env@4.2.0: {} - streamx@2.26.0: + streamx@2.28.0: dependencies: events-universal: 1.0.1 fast-fifo: 1.3.2 @@ -11946,19 +12257,17 @@ snapshots: strip-indent@4.1.1: {} - strip-json-comments@3.1.1: {} - strip-literal@3.1.0: dependencies: js-tokens: 9.0.1 structured-clone-es@2.0.0: {} - stylehacks@7.0.11(postcss@8.5.15): + stylehacks@8.0.1(postcss@8.5.20): dependencies: - browserslist: 4.28.2 - postcss: 8.5.15 - postcss-selector-parser: 7.1.1 + browserslist: 4.28.6 + postcss: 8.5.20 + postcss-selector-parser: 7.1.4 sucrase@3.35.1: dependencies: @@ -11976,10 +12285,6 @@ snapshots: function-timeout: 0.1.1 time-span: 5.1.0 - superjson@2.2.6: - dependencies: - copy-anything: 4.0.5 - supports-color@10.2.2: {} supports-color@7.2.0: @@ -11988,7 +12293,7 @@ snapshots: supports-preserve-symlinks-flag@1.0.0: {} - svgo@4.0.1: + svgo@4.0.2: dependencies: commander: 11.1.0 css-select: 5.2.2 @@ -12000,21 +12305,21 @@ snapshots: tagged-tag@1.0.0: {} - tailwind-config-viewer@2.0.4(tailwindcss@3.4.19(tsx@4.22.3)(yaml@2.9.0)): + tailwind-config-viewer@2.0.4(supports-color@10.2.2)(tailwindcss@3.4.19(tsx@4.23.1)(yaml@2.9.0)): dependencies: - '@koa/router': 12.0.2 + '@koa/router': 12.0.2(supports-color@10.2.2) commander: 6.2.1 fs-extra: 9.1.0 - koa: 2.16.4 - koa-static: 5.0.0 + koa: 2.16.4(supports-color@10.2.2) + koa-static: 5.0.0(supports-color@10.2.2) open: 7.4.2 - portfinder: 1.0.38 + portfinder: 1.0.38(supports-color@10.2.2) replace-in-file: 6.3.5 - tailwindcss: 3.4.19(tsx@4.22.3)(yaml@2.9.0) + tailwindcss: 3.4.19(tsx@4.23.1)(yaml@2.9.0) transitivePeerDependencies: - supports-color - tailwindcss@3.4.19(tsx@4.22.3)(yaml@2.9.0): + tailwindcss@3.4.19(tsx@4.23.1)(yaml@2.9.0): dependencies: '@alloc/quick-lru': 5.2.0 arg: 5.0.2 @@ -12030,32 +12335,30 @@ snapshots: normalize-path: 3.0.0 object-hash: 3.0.0 picocolors: 1.1.1 - postcss: 8.5.15 - postcss-import: 15.1.0(postcss@8.5.15) - postcss-js: 4.1.0(postcss@8.5.15) - postcss-load-config: 6.0.1(jiti@1.21.7)(postcss@8.5.15)(tsx@4.22.3)(yaml@2.9.0) - postcss-nested: 6.2.0(postcss@8.5.15) - postcss-selector-parser: 6.1.2 + postcss: 8.5.20 + postcss-import: 15.1.0(postcss@8.5.20) + postcss-js: 4.1.0(postcss@8.5.20) + postcss-load-config: 6.0.1(jiti@1.21.7)(postcss@8.5.20)(tsx@4.23.1)(yaml@2.9.0) + postcss-nested: 6.2.0(postcss@8.5.20) + postcss-selector-parser: 6.1.4 resolve: 1.22.12 sucrase: 3.35.1 transitivePeerDependencies: - tsx - yaml - tapable@2.3.3: {} - tar-stream@3.2.0: dependencies: b4a: 1.8.1 - bare-fs: 4.7.1 + bare-fs: 4.7.4 fast-fifo: 1.3.2 - streamx: 2.26.0 + streamx: 2.28.0 transitivePeerDependencies: - bare-abort-controller - bare-buffer - react-native-b4a - tar@7.5.15: + tar@7.5.20: dependencies: '@isaacs/fs-minipass': 4.0.1 chownr: 3.0.0 @@ -12065,15 +12368,15 @@ snapshots: teex@1.0.1: dependencies: - streamx: 2.26.0 + streamx: 2.28.0 transitivePeerDependencies: - bare-abort-controller - react-native-b4a - terser@5.48.0: + terser@5.49.0: dependencies: '@jridgewell/source-map': 0.3.11 - acorn: 8.16.0 + acorn: 8.17.0 commander: 2.20.3 source-map-support: 0.5.21 @@ -12101,14 +12404,14 @@ snapshots: tinybench@2.9.0: {} - tinyclip@0.1.13: {} + tinyclip@0.1.15: {} - tinyexec@1.2.3: {} + tinyexec@1.2.4: {} tinyglobby@0.2.17: dependencies: - fdir: 6.5.0(picomatch@4.0.4) - picomatch: 4.0.4 + fdir: 6.5.0(picomatch@4.0.5) + picomatch: 4.0.5 tinyrainbow@3.1.0: {} @@ -12139,9 +12442,9 @@ snapshots: tsscmp@1.0.6: {} - tsx@4.22.3: + tsx@4.23.1: dependencies: - esbuild: 0.28.0 + esbuild: 0.28.1 optionalDependencies: fsevents: 2.3.3 @@ -12149,7 +12452,7 @@ snapshots: dependencies: prelude-ls: 1.2.1 - type-fest@5.6.0: + type-fest@5.8.0: dependencies: tagged-tag: 1.0.0 @@ -12164,111 +12467,119 @@ snapshots: ufo@1.6.4: {} - ultrahtml@1.6.0: {} + ultrahtml@1.7.0: {} uncrypto@0.1.3: {} unctx@2.5.0: dependencies: - acorn: 8.16.0 + acorn: 8.17.0 estree-walker: 3.0.3 magic-string: 0.30.21 unplugin: 2.3.11 - undici-types@7.24.6: {} + unctx@3.0.0(magic-string@0.30.21)(oxc-parser@0.128.0)(rolldown@1.2.0)(unplugin@3.3.0(esbuild@0.28.1)(rolldown@1.2.0)(rollup@4.62.2)(vite@8.1.5(@types/node@26.1.1)(esbuild@0.28.1)(jiti@1.21.7)(terser@5.49.0)(tsx@4.23.1)(yaml@2.9.0))): + optionalDependencies: + magic-string: 0.30.21 + oxc-parser: 0.128.0 + rolldown: 1.2.0 + unplugin: 3.3.0(esbuild@0.28.1)(rolldown@1.2.0)(rollup@4.62.2)(vite@8.1.5(@types/node@26.1.1)(esbuild@0.28.1)(jiti@1.21.7)(terser@5.49.0)(tsx@4.23.1)(yaml@2.9.0)) + + unctx@3.0.0(magic-string@0.30.21)(oxc-parser@0.140.0)(rolldown@1.2.0)(unplugin@3.3.0(esbuild@0.28.1)(rolldown@1.2.0)(rollup@4.62.2)(vite@8.1.5(@types/node@26.1.1)(esbuild@0.28.1)(jiti@1.21.7)(terser@5.49.0)(tsx@4.23.1)(yaml@2.9.0))): + optionalDependencies: + magic-string: 0.30.21 + oxc-parser: 0.140.0 + rolldown: 1.2.0 + unplugin: 3.3.0(esbuild@0.28.1)(rolldown@1.2.0)(rollup@4.62.2)(vite@8.1.5(@types/node@26.1.1)(esbuild@0.28.1)(jiti@1.21.7)(terser@5.49.0)(tsx@4.23.1)(yaml@2.9.0)) + + unctx@3.0.0(magic-string@1.0.0)(oxc-parser@0.140.0)(rolldown@1.2.0)(unplugin@3.3.0(esbuild@0.28.1)(rolldown@1.2.0)(rollup@4.62.2)(vite@8.1.5(@types/node@26.1.1)(esbuild@0.28.1)(jiti@1.21.7)(terser@5.49.0)(tsx@4.23.1)(yaml@2.9.0))): + optionalDependencies: + magic-string: 1.0.0 + oxc-parser: 0.140.0 + rolldown: 1.2.0 + unplugin: 3.3.0(esbuild@0.28.1)(rolldown@1.2.0)(rollup@4.62.2)(vite@8.1.5(@types/node@26.1.1)(esbuild@0.28.1)(jiti@1.21.7)(terser@5.49.0)(tsx@4.23.1)(yaml@2.9.0)) + + undici-types@8.3.0: {} + + undici@8.7.0: {} unenv@2.0.0-rc.24: dependencies: pathe: 2.0.3 - unhead@2.1.15: + unhead@3.2.1(esbuild@0.28.1)(rolldown@1.2.0)(rollup@4.62.2)(vite@8.1.5(@types/node@26.1.1)(esbuild@0.28.1)(jiti@1.21.7)(terser@5.49.0)(tsx@4.23.1)(yaml@2.9.0)): dependencies: hookable: 6.1.1 + unplugin: 3.3.0(esbuild@0.28.1)(rolldown@1.2.0)(rollup@4.62.2)(vite@8.1.5(@types/node@26.1.1)(esbuild@0.28.1)(jiti@1.21.7)(terser@5.49.0)(tsx@4.23.1)(yaml@2.9.0)) + optionalDependencies: + vite: 8.1.5(@types/node@26.1.1)(esbuild@0.28.1)(jiti@1.21.7)(terser@5.49.0)(tsx@4.23.1)(yaml@2.9.0) + transitivePeerDependencies: + - '@farmfe/core' + - '@rspack/core' + - bun-types-no-globals + - esbuild + - rolldown + - rollup + - unloader + - webpack unicorn-magic@0.3.0: {} unicorn-magic@0.4.0: {} - unimport@5.7.0: + unimport@6.3.0(esbuild@0.28.1)(oxc-parser@0.140.0)(rolldown@1.2.0)(rollup@4.62.2)(vite@8.1.5(@types/node@26.1.1)(esbuild@0.28.1)(jiti@1.21.7)(terser@5.49.0)(tsx@4.23.1)(yaml@2.9.0)): dependencies: - acorn: 8.16.0 + acorn: 8.17.0 escape-string-regexp: 5.0.0 estree-walker: 3.0.3 local-pkg: 1.2.1 magic-string: 0.30.21 mlly: 1.8.2 pathe: 2.0.3 - picomatch: 4.0.4 + picomatch: 4.0.5 pkg-types: 2.3.1 scule: 1.3.0 strip-literal: 3.1.0 tinyglobby: 0.2.17 - unplugin: 2.3.11 - unplugin-utils: 0.3.1 - - unimport@6.3.0(oxc-parser@0.131.0): - dependencies: - acorn: 8.16.0 - escape-string-regexp: 5.0.0 - estree-walker: 3.0.3 - local-pkg: 1.2.1 - magic-string: 0.30.21 - mlly: 1.8.2 - pathe: 2.0.3 - picomatch: 4.0.4 - pkg-types: 2.3.1 - scule: 1.3.0 - strip-literal: 3.1.0 - tinyglobby: 0.2.17 - unplugin: 3.0.0 - unplugin-utils: 0.3.1 + unplugin: 3.3.0(esbuild@0.28.1)(rolldown@1.2.0)(rollup@4.62.2)(vite@8.1.5(@types/node@26.1.1)(esbuild@0.28.1)(jiti@1.21.7)(terser@5.49.0)(tsx@4.23.1)(yaml@2.9.0)) + unplugin-utils: 0.3.2 optionalDependencies: - oxc-parser: 0.131.0 + oxc-parser: 0.140.0 + rolldown: 1.2.0 + transitivePeerDependencies: + - '@farmfe/core' + - '@rspack/core' + - bun-types-no-globals + - esbuild + - rollup + - unloader + - vite + - webpack universalify@2.0.1: {} - unplugin-utils@0.3.1: + unplugin-utils@0.3.2: dependencies: pathe: 2.0.3 - picomatch: 4.0.4 - - unplugin-vue-router@0.19.2(@vue/compiler-sfc@3.5.35)(vue-router@4.6.4(vue@3.5.35(typescript@6.0.3)))(vue@3.5.35(typescript@6.0.3)): - dependencies: - '@babel/generator': 7.29.7 - '@vue-macros/common': 3.1.2(vue@3.5.35(typescript@6.0.3)) - '@vue/compiler-sfc': 3.5.35 - '@vue/language-core': 3.3.3 - ast-walker-scope: 0.8.3 - chokidar: 5.0.0 - json5: 2.2.3 - local-pkg: 1.2.1 - magic-string: 0.30.21 - mlly: 1.8.2 - muggle-string: 0.4.1 - pathe: 2.0.3 - picomatch: 4.0.4 - scule: 1.3.0 - tinyglobby: 0.2.17 - unplugin: 2.3.11 - unplugin-utils: 0.3.1 - yaml: 2.9.0 - optionalDependencies: - vue-router: 4.6.4(vue@3.5.35(typescript@6.0.3)) - transitivePeerDependencies: - - vue + picomatch: 4.0.5 unplugin@2.3.11: dependencies: '@jridgewell/remapping': 2.3.5 - acorn: 8.16.0 - picomatch: 4.0.4 + acorn: 8.17.0 + picomatch: 4.0.5 webpack-virtual-modules: 0.6.2 - unplugin@3.0.0: + unplugin@3.3.0(esbuild@0.28.1)(rolldown@1.2.0)(rollup@4.62.2)(vite@8.1.5(@types/node@26.1.1)(esbuild@0.28.1)(jiti@1.21.7)(terser@5.49.0)(tsx@4.23.1)(yaml@2.9.0)): dependencies: '@jridgewell/remapping': 2.3.5 - picomatch: 4.0.4 + picomatch: 4.0.5 webpack-virtual-modules: 0.6.2 + optionalDependencies: + esbuild: 0.28.1 + rolldown: 1.2.0 + rollup: 4.62.2 + vite: 8.1.5(@types/node@26.1.1)(esbuild@0.28.1)(jiti@1.21.7)(terser@5.49.0)(tsx@4.23.1)(yaml@2.9.0) unrouting@0.1.7: dependencies: @@ -12302,19 +12613,19 @@ snapshots: '@unrs/resolver-binding-win32-ia32-msvc': 1.12.2 '@unrs/resolver-binding-win32-x64-msvc': 1.12.2 - unstorage@1.17.5(db0@0.3.4(@libsql/client@0.17.3)(drizzle-orm@0.45.2(@libsql/client@0.17.3)))(ioredis@5.11.0): + unstorage@1.17.5(db0@0.3.4(@libsql/client@0.17.4)(drizzle-orm@0.45.2(@libsql/client@0.17.4)))(ioredis@5.11.1(supports-color@10.2.2)): dependencies: anymatch: 3.1.3 chokidar: 5.0.0 destr: 2.0.5 h3: 1.15.11 - lru-cache: 11.5.1 + lru-cache: 11.5.2 node-fetch-native: 1.6.7 ofetch: 1.5.1 ufo: 1.6.4 optionalDependencies: - db0: 0.3.4(@libsql/client@0.17.3)(drizzle-orm@0.45.2(@libsql/client@0.17.3)) - ioredis: 5.11.0 + db0: 0.3.4(@libsql/client@0.17.4)(drizzle-orm@0.45.2(@libsql/client@0.17.4)) + ioredis: 5.11.1(supports-color@10.2.2) untun@0.1.3: dependencies: @@ -12332,16 +12643,16 @@ snapshots: unwasm@0.5.3: dependencies: - exsolve: 1.0.8 + exsolve: 1.1.0 knitwork: 1.3.0 magic-string: 0.30.21 mlly: 1.8.2 pathe: 2.0.3 pkg-types: 2.3.1 - update-browserslist-db@1.2.3(browserslist@4.28.2): + update-browserslist-db@1.2.3(browserslist@4.28.6): dependencies: - browserslist: 4.28.2 + browserslist: 4.28.6 escalade: 3.2.0 picocolors: 1.1.1 @@ -12353,30 +12664,35 @@ snapshots: util-deprecate@1.0.2: {} + valibot@1.4.2(typescript@6.0.3): + optionalDependencies: + typescript: 6.0.3 + vary@1.1.2: {} - vite-dev-rpc@2.0.0(vite@7.3.3(@types/node@25.9.1)(jiti@1.21.7)(terser@5.48.0)(tsx@4.22.3)(yaml@2.9.0)): + vite-dev-rpc@2.0.0(vite@8.1.5(@types/node@26.1.1)(esbuild@0.28.1)(jiti@1.21.7)(terser@5.49.0)(tsx@4.23.1)(yaml@2.9.0)): dependencies: birpc: 4.0.0 - vite: 7.3.3(@types/node@25.9.1)(jiti@1.21.7)(terser@5.48.0)(tsx@4.22.3)(yaml@2.9.0) - vite-hot-client: 2.2.0(vite@7.3.3(@types/node@25.9.1)(jiti@1.21.7)(terser@5.48.0)(tsx@4.22.3)(yaml@2.9.0)) + vite: 8.1.5(@types/node@26.1.1)(esbuild@0.28.1)(jiti@1.21.7)(terser@5.49.0)(tsx@4.23.1)(yaml@2.9.0) + vite-hot-client: 2.2.0(vite@8.1.5(@types/node@26.1.1)(esbuild@0.28.1)(jiti@1.21.7)(terser@5.49.0)(tsx@4.23.1)(yaml@2.9.0)) - vite-hot-client@2.2.0(vite@7.3.3(@types/node@25.9.1)(jiti@1.21.7)(terser@5.48.0)(tsx@4.22.3)(yaml@2.9.0)): + vite-hot-client@2.2.0(vite@8.1.5(@types/node@26.1.1)(esbuild@0.28.1)(jiti@1.21.7)(terser@5.49.0)(tsx@4.23.1)(yaml@2.9.0)): dependencies: - vite: 7.3.3(@types/node@25.9.1)(jiti@1.21.7)(terser@5.48.0)(tsx@4.22.3)(yaml@2.9.0) + vite: 8.1.5(@types/node@26.1.1)(esbuild@0.28.1)(jiti@1.21.7)(terser@5.49.0)(tsx@4.23.1)(yaml@2.9.0) - vite-node@5.3.0(@types/node@25.9.1)(jiti@2.7.0)(terser@5.48.0)(tsx@4.22.3)(yaml@2.9.0): + vite-node@6.0.0(@types/node@26.1.1)(esbuild@0.28.1)(jiti@2.7.0)(terser@5.49.0)(tsx@4.23.1)(yaml@2.9.0): dependencies: - cac: 6.7.14 - es-module-lexer: 2.1.0 - obug: 2.1.1 + cac: 7.0.0 + es-module-lexer: 2.3.1 + obug: 2.1.4 pathe: 2.0.3 - vite: 7.3.3(@types/node@25.9.1)(jiti@2.7.0)(terser@5.48.0)(tsx@4.22.3)(yaml@2.9.0) + vite: 8.1.5(@types/node@26.1.1)(esbuild@0.28.1)(jiti@2.7.0)(terser@5.49.0)(tsx@4.23.1)(yaml@2.9.0) transitivePeerDependencies: - '@types/node' + - '@vitejs/devtools' + - esbuild - jiti - less - - lightningcss - sass - sass-embedded - stylus @@ -12385,171 +12701,172 @@ snapshots: - tsx - yaml - vite-plugin-checker@0.13.0(eslint@9.39.4(jiti@1.21.7))(optionator@0.9.4)(typescript@6.0.3)(vite@7.3.3(@types/node@25.9.1)(jiti@1.21.7)(terser@5.48.0)(tsx@4.22.3)(yaml@2.9.0))(vue-tsc@3.3.3(typescript@6.0.3)): + vite-plugin-checker@0.14.4(eslint@10.7.0(jiti@1.21.7)(supports-color@10.2.2))(optionator@0.9.4)(typescript@6.0.3)(vite@8.1.5(@types/node@26.1.1)(esbuild@0.28.1)(jiti@1.21.7)(terser@5.49.0)(tsx@4.23.1)(yaml@2.9.0))(vue-tsc@3.3.7(typescript@6.0.3)): dependencies: '@babel/code-frame': 7.29.7 - chokidar: 4.0.3 + chokidar: 5.0.0 npm-run-path: 6.0.0 picocolors: 1.1.1 - picomatch: 4.0.4 + picomatch: 4.0.5 proper-lockfile: 4.1.2 tiny-invariant: 1.3.3 - tinyglobby: 0.2.17 - vite: 7.3.3(@types/node@25.9.1)(jiti@1.21.7)(terser@5.48.0)(tsx@4.22.3)(yaml@2.9.0) - vscode-uri: 3.1.0 + vite: 8.1.5(@types/node@26.1.1)(esbuild@0.28.1)(jiti@1.21.7)(terser@5.49.0)(tsx@4.23.1)(yaml@2.9.0) optionalDependencies: - eslint: 9.39.4(jiti@1.21.7) + eslint: 10.7.0(jiti@1.21.7)(supports-color@10.2.2) optionator: 0.9.4 typescript: 6.0.3 - vue-tsc: 3.3.3(typescript@6.0.3) + vue-tsc: 3.3.7(typescript@6.0.3) - vite-plugin-inspect@11.4.1(@nuxt/kit@4.4.6(magicast@0.5.3))(vite@7.3.3(@types/node@25.9.1)(jiti@1.21.7)(terser@5.48.0)(tsx@4.22.3)(yaml@2.9.0)): + vite-plugin-inspect@11.4.1(@nuxt/kit@4.5.0(magic-string@1.0.0)(magicast@0.5.3)(oxc-parser@0.140.0)(rolldown@1.2.0)(unplugin@3.3.0(esbuild@0.28.1)(rolldown@1.2.0)(rollup@4.62.2)(vite@8.1.5(@types/node@26.1.1)(esbuild@0.28.1)(jiti@1.21.7)(terser@5.49.0)(tsx@4.23.1)(yaml@2.9.0))))(vite@8.1.5(@types/node@26.1.1)(esbuild@0.28.1)(jiti@1.21.7)(terser@5.49.0)(tsx@4.23.1)(yaml@2.9.0)): dependencies: - ansis: 4.3.0 + ansis: 4.3.1 error-stack-parser-es: 1.0.5 - obug: 2.1.1 + obug: 2.1.4 ohash: 2.0.11 open: 11.0.0 perfect-debounce: 2.1.0 sirv: 3.0.2 - unplugin-utils: 0.3.1 - vite: 7.3.3(@types/node@25.9.1)(jiti@1.21.7)(terser@5.48.0)(tsx@4.22.3)(yaml@2.9.0) - vite-dev-rpc: 2.0.0(vite@7.3.3(@types/node@25.9.1)(jiti@1.21.7)(terser@5.48.0)(tsx@4.22.3)(yaml@2.9.0)) + unplugin-utils: 0.3.2 + vite: 8.1.5(@types/node@26.1.1)(esbuild@0.28.1)(jiti@1.21.7)(terser@5.49.0)(tsx@4.23.1)(yaml@2.9.0) + vite-dev-rpc: 2.0.0(vite@8.1.5(@types/node@26.1.1)(esbuild@0.28.1)(jiti@1.21.7)(terser@5.49.0)(tsx@4.23.1)(yaml@2.9.0)) optionalDependencies: - '@nuxt/kit': 4.4.6(magicast@0.5.3) + '@nuxt/kit': 4.5.0(magic-string@1.0.0)(magicast@0.5.3)(oxc-parser@0.140.0)(rolldown@1.2.0)(unplugin@3.3.0(esbuild@0.28.1)(rolldown@1.2.0)(rollup@4.62.2)(vite@8.1.5(@types/node@26.1.1)(esbuild@0.28.1)(jiti@1.21.7)(terser@5.49.0)(tsx@4.23.1)(yaml@2.9.0))) - vite-plugin-vue-tracer@1.4.0(vite@7.3.3(@types/node@25.9.1)(jiti@1.21.7)(terser@5.48.0)(tsx@4.22.3)(yaml@2.9.0))(vue@3.5.35(typescript@6.0.3)): + vite-plugin-vue-tracer@1.4.0(vite@8.1.5(@types/node@26.1.1)(esbuild@0.28.1)(jiti@1.21.7)(terser@5.49.0)(tsx@4.23.1)(yaml@2.9.0))(vue@3.5.40(typescript@6.0.3)): dependencies: estree-walker: 3.0.3 - exsolve: 1.0.8 + exsolve: 1.1.0 magic-string: 0.30.21 pathe: 2.0.3 source-map-js: 1.2.1 - vite: 7.3.3(@types/node@25.9.1)(jiti@1.21.7)(terser@5.48.0)(tsx@4.22.3)(yaml@2.9.0) - vue: 3.5.35(typescript@6.0.3) + vite: 8.1.5(@types/node@26.1.1)(esbuild@0.28.1)(jiti@1.21.7)(terser@5.49.0)(tsx@4.23.1)(yaml@2.9.0) + vue: 3.5.40(typescript@6.0.3) - vite@7.3.3(@types/node@25.9.1)(jiti@1.21.7)(terser@5.48.0)(tsx@4.22.3)(yaml@2.9.0): + vite@8.1.5(@types/node@26.1.1)(esbuild@0.28.1)(jiti@1.21.7)(terser@5.49.0)(tsx@4.23.1)(yaml@2.9.0): dependencies: - esbuild: 0.27.7 - fdir: 6.5.0(picomatch@4.0.4) - picomatch: 4.0.4 - postcss: 8.5.15 - rollup: 4.60.4 + lightningcss: 1.33.0 + picomatch: 4.0.5 + postcss: 8.5.20 + rolldown: 1.1.5 tinyglobby: 0.2.17 optionalDependencies: - '@types/node': 25.9.1 + '@types/node': 26.1.1 + esbuild: 0.28.1 fsevents: 2.3.3 jiti: 1.21.7 - terser: 5.48.0 - tsx: 4.22.3 + terser: 5.49.0 + tsx: 4.23.1 yaml: 2.9.0 - vite@7.3.3(@types/node@25.9.1)(jiti@2.7.0)(terser@5.48.0)(tsx@4.22.3)(yaml@2.9.0): + vite@8.1.5(@types/node@26.1.1)(esbuild@0.28.1)(jiti@2.7.0)(terser@5.49.0)(tsx@4.23.1)(yaml@2.9.0): dependencies: - esbuild: 0.27.7 - fdir: 6.5.0(picomatch@4.0.4) - picomatch: 4.0.4 - postcss: 8.5.15 - rollup: 4.60.4 + lightningcss: 1.33.0 + picomatch: 4.0.5 + postcss: 8.5.20 + rolldown: 1.1.5 tinyglobby: 0.2.17 optionalDependencies: - '@types/node': 25.9.1 + '@types/node': 26.1.1 + esbuild: 0.28.1 fsevents: 2.3.3 jiti: 2.7.0 - terser: 5.48.0 - tsx: 4.22.3 + terser: 5.49.0 + tsx: 4.23.1 yaml: 2.9.0 - vitest-environment-nuxt@2.0.0(@vitest/ui@4.1.7)(crossws@0.4.5(srvx@0.11.16))(magicast@0.5.3)(typescript@6.0.3)(vite@7.3.3(@types/node@25.9.1)(jiti@1.21.7)(terser@5.48.0)(tsx@4.22.3)(yaml@2.9.0))(vitest@4.1.7): + vitest-environment-nuxt@2.0.0(@vitest/ui@4.1.10)(crossws@0.4.10(srvx@0.11.22))(esbuild@0.28.1)(magicast@0.5.3)(rolldown@1.2.0)(rollup@4.62.2)(typescript@6.0.3)(vite@8.1.5(@types/node@26.1.1)(esbuild@0.28.1)(jiti@1.21.7)(terser@5.49.0)(tsx@4.23.1)(yaml@2.9.0))(vitest@4.1.10): dependencies: - '@nuxt/test-utils': 4.0.3(@vitest/ui@4.1.7)(crossws@0.4.5(srvx@0.11.16))(magicast@0.5.3)(typescript@6.0.3)(vite@7.3.3(@types/node@25.9.1)(jiti@1.21.7)(terser@5.48.0)(tsx@4.22.3)(yaml@2.9.0))(vitest@4.1.7) + '@nuxt/test-utils': 4.0.3(@vitest/ui@4.1.10)(crossws@0.4.10(srvx@0.11.22))(esbuild@0.28.1)(magicast@0.5.3)(rolldown@1.2.0)(rollup@4.62.2)(typescript@6.0.3)(vite@8.1.5(@types/node@26.1.1)(esbuild@0.28.1)(jiti@1.21.7)(terser@5.49.0)(tsx@4.23.1)(yaml@2.9.0))(vitest@4.1.10) transitivePeerDependencies: - '@cucumber/cucumber' + - '@farmfe/core' - '@jest/globals' - '@playwright/test' + - '@rspack/core' - '@testing-library/vue' - '@vitest/ui' - '@vue/test-utils' + - bun-types-no-globals - crossws + - esbuild - happy-dom - jsdom - magicast - playwright-core + - rolldown + - rollup - typescript + - unloader - vite - vitest + - webpack - vitest@4.1.7(@types/node@25.9.1)(@vitest/coverage-v8@4.1.7)(@vitest/ui@4.1.7)(vite@7.3.3(@types/node@25.9.1)(jiti@1.21.7)(terser@5.48.0)(tsx@4.22.3)(yaml@2.9.0)): + vitest@4.1.10(@types/node@26.1.1)(@vitest/coverage-v8@4.1.10)(@vitest/ui@4.1.10)(vite@8.1.5(@types/node@26.1.1)(esbuild@0.28.1)(jiti@1.21.7)(terser@5.49.0)(tsx@4.23.1)(yaml@2.9.0)): dependencies: - '@vitest/expect': 4.1.7 - '@vitest/mocker': 4.1.7(vite@7.3.3(@types/node@25.9.1)(jiti@1.21.7)(terser@5.48.0)(tsx@4.22.3)(yaml@2.9.0)) - '@vitest/pretty-format': 4.1.7 - '@vitest/runner': 4.1.7 - '@vitest/snapshot': 4.1.7 - '@vitest/spy': 4.1.7 - '@vitest/utils': 4.1.7 - es-module-lexer: 2.1.0 - expect-type: 1.3.0 + '@vitest/expect': 4.1.10 + '@vitest/mocker': 4.1.10(vite@8.1.5(@types/node@26.1.1)(esbuild@0.28.1)(jiti@1.21.7)(terser@5.49.0)(tsx@4.23.1)(yaml@2.9.0)) + '@vitest/pretty-format': 4.1.10 + '@vitest/runner': 4.1.10 + '@vitest/snapshot': 4.1.10 + '@vitest/spy': 4.1.10 + '@vitest/utils': 4.1.10 + es-module-lexer: 2.3.1 + expect-type: 1.4.0 magic-string: 0.30.21 - obug: 2.1.1 + obug: 2.1.4 pathe: 2.0.3 - picomatch: 4.0.4 - std-env: 4.1.0 + picomatch: 4.0.5 + std-env: 4.2.0 tinybench: 2.9.0 - tinyexec: 1.2.3 + tinyexec: 1.2.4 tinyglobby: 0.2.17 tinyrainbow: 3.1.0 - vite: 7.3.3(@types/node@25.9.1)(jiti@1.21.7)(terser@5.48.0)(tsx@4.22.3)(yaml@2.9.0) + vite: 8.1.5(@types/node@26.1.1)(esbuild@0.28.1)(jiti@1.21.7)(terser@5.49.0)(tsx@4.23.1)(yaml@2.9.0) why-is-node-running: 2.3.0 optionalDependencies: - '@types/node': 25.9.1 - '@vitest/coverage-v8': 4.1.7(vitest@4.1.7) - '@vitest/ui': 4.1.7(vitest@4.1.7) + '@types/node': 26.1.1 + '@vitest/coverage-v8': 4.1.10(vitest@4.1.10) + '@vitest/ui': 4.1.10(vitest@4.1.10) transitivePeerDependencies: - msw vscode-uri@3.1.0: {} - vue-bundle-renderer@2.2.0: + vue-bundle-renderer@2.3.1: dependencies: ufo: 1.6.4 - vue-demi@0.14.10(vue@3.5.35(typescript@6.0.3)): + vue-demi@0.14.10(vue@3.5.40(typescript@6.0.3)): dependencies: - vue: 3.5.35(typescript@6.0.3) + vue: 3.5.40(typescript@6.0.3) vue-devtools-stub@0.1.0: {} - vue-eslint-parser@10.4.0(eslint@9.39.4(jiti@1.21.7)): + vue-eslint-parser@10.4.1(eslint@10.7.0(jiti@1.21.7)(supports-color@10.2.2))(supports-color@10.2.2): dependencies: - debug: 4.4.3 - eslint: 9.39.4(jiti@1.21.7) + debug: 4.4.3(supports-color@10.2.2) + eslint: 10.7.0(jiti@1.21.7)(supports-color@10.2.2) eslint-scope: 9.1.2 eslint-visitor-keys: 5.0.1 espree: 11.2.0 esquery: 1.7.0 - semver: 7.8.1 + semver: 7.8.5 transitivePeerDependencies: - supports-color - vue-i18n@11.4.4(vue@3.5.35(typescript@6.0.3)): + vue-i18n@11.4.6(vue@3.5.40(typescript@6.0.3)): dependencies: - '@intlify/core-base': 11.4.4 - '@intlify/devtools-types': 11.4.4 - '@intlify/shared': 11.4.4 + '@intlify/core-base': 11.4.6 + '@intlify/devtools-types': 11.4.6 + '@intlify/shared': 11.4.6 '@vue/devtools-api': 6.6.4 - vue: 3.5.35(typescript@6.0.3) + vue: 3.5.40(typescript@6.0.3) - vue-router@4.6.4(vue@3.5.35(typescript@6.0.3)): + vue-router@5.2.0(@vue/compiler-sfc@3.5.40)(esbuild@0.28.1)(pinia@4.0.2(@vue/devtools-api@8.1.5)(typescript@6.0.3)(vue@3.5.40(typescript@6.0.3)))(rolldown@1.2.0)(rollup@4.62.2)(vite@8.1.5(@types/node@26.1.1)(esbuild@0.28.1)(jiti@1.21.7)(terser@5.49.0)(tsx@4.23.1)(yaml@2.9.0))(vue@3.5.40(typescript@6.0.3)): dependencies: - '@vue/devtools-api': 6.6.4 - vue: 3.5.35(typescript@6.0.3) - - vue-router@5.1.0(@vue/compiler-sfc@3.5.35)(pinia@3.0.4(typescript@6.0.3)(vue@3.5.35(typescript@6.0.3)))(vite@7.3.3(@types/node@25.9.1)(jiti@1.21.7)(terser@5.48.0)(tsx@4.22.3)(yaml@2.9.0))(vue@3.5.35(typescript@6.0.3)): - dependencies: - '@babel/generator': 8.0.0-rc.6 - '@vue-macros/common': 3.1.2(vue@3.5.35(typescript@6.0.3)) - '@vue/devtools-api': 8.1.2 + '@babel/generator': 8.0.0 + '@vue-macros/common': 3.1.4(vue@3.5.40(typescript@6.0.3)) + '@vue/devtools-api': 8.1.5 ast-walker-scope: 0.9.0 chokidar: 5.0.0 json5: 2.2.3 @@ -12557,37 +12874,47 @@ snapshots: magic-string: 0.30.21 mlly: 1.8.2 muggle-string: 0.4.1 + nostics: 1.2.0 pathe: 2.0.3 - picomatch: 4.0.4 + picomatch: 4.0.5 scule: 1.3.0 tinyglobby: 0.2.17 - unplugin: 3.0.0 - unplugin-utils: 0.3.1 - vue: 3.5.35(typescript@6.0.3) + unplugin: 3.3.0(esbuild@0.28.1)(rolldown@1.2.0)(rollup@4.62.2)(vite@8.1.5(@types/node@26.1.1)(esbuild@0.28.1)(jiti@1.21.7)(terser@5.49.0)(tsx@4.23.1)(yaml@2.9.0)) + unplugin-utils: 0.3.2 + vue: 3.5.40(typescript@6.0.3) yaml: 2.9.0 optionalDependencies: - '@vue/compiler-sfc': 3.5.35 - pinia: 3.0.4(typescript@6.0.3)(vue@3.5.35(typescript@6.0.3)) - vite: 7.3.3(@types/node@25.9.1)(jiti@1.21.7)(terser@5.48.0)(tsx@4.22.3)(yaml@2.9.0) + '@vue/compiler-sfc': 3.5.40 + pinia: 4.0.2(@vue/devtools-api@8.1.5)(typescript@6.0.3)(vue@3.5.40(typescript@6.0.3)) + vite: 8.1.5(@types/node@26.1.1)(esbuild@0.28.1)(jiti@1.21.7)(terser@5.49.0)(tsx@4.23.1)(yaml@2.9.0) + transitivePeerDependencies: + - '@farmfe/core' + - '@rspack/core' + - bun-types-no-globals + - esbuild + - rolldown + - rollup + - unloader + - webpack - vue-tsc@3.3.3(typescript@6.0.3): + vue-tsc@3.3.7(typescript@6.0.3): dependencies: '@volar/typescript': 2.4.28 - '@vue/language-core': 3.3.3 + '@vue/language-core': 3.3.7 typescript: 6.0.3 - vue3-apexcharts@1.11.1(apexcharts@5.13.0)(vue@3.5.35(typescript@6.0.3)): + vue3-apexcharts@1.11.1(apexcharts@6.3.0)(vue@3.5.40(typescript@6.0.3)): dependencies: - apexcharts: 5.13.0 - vue: 3.5.35(typescript@6.0.3) + apexcharts: 6.3.0 + vue: 3.5.40(typescript@6.0.3) - vue@3.5.35(typescript@6.0.3): + vue@3.5.40(typescript@6.0.3): dependencies: - '@vue/compiler-dom': 3.5.35 - '@vue/compiler-sfc': 3.5.35 - '@vue/runtime-dom': 3.5.35 - '@vue/server-renderer': 3.5.35(vue@3.5.35(typescript@6.0.3)) - '@vue/shared': 3.5.35 + '@vue/compiler-dom': 3.5.40 + '@vue/compiler-sfc': 3.5.40 + '@vue/runtime-dom': 3.5.40 + '@vue/server-renderer': 3.5.40 + '@vue/shared': 3.5.40 optionalDependencies: typescript: 6.0.3 @@ -12635,7 +12962,7 @@ snapshots: wrappy@1.0.2: {} - ws@8.21.0: {} + ws@8.21.1: {} wsl-utils@0.3.1: dependencies: @@ -12661,7 +12988,7 @@ snapshots: yargs-parser@22.0.0: {} - yargs@17.7.2: + yargs@17.7.3: dependencies: cliui: 8.0.1 escalade: 3.2.0 @@ -12695,7 +13022,7 @@ snapshots: dependencies: '@poppinss/colors': 4.1.6 '@poppinss/dumper': 0.7.0 - '@speed-highlight/core': 1.2.15 + '@speed-highlight/core': 1.2.17 cookie-es: 3.1.1 youch-core: 0.3.3 diff --git a/src/pnpm-workspace.yaml b/src/pnpm-workspace.yaml index 363ea65e..7a93c23a 100644 --- a/src/pnpm-workspace.yaml +++ b/src/pnpm-workspace.yaml @@ -6,3 +6,10 @@ allowBuilds: vue-demi: false minimumReleaseAgeStrict: true + +publicHoistPattern: + - '@intlify/utils' + - '@intlify/h3' + - 'h3' + - 'nitropack' + - 'ofetch' diff --git a/src/server/api/admin/general.get.ts b/src/server/api/admin/general.get.ts index 075eefce..32dd7efa 100644 --- a/src/server/api/admin/general.get.ts +++ b/src/server/api/admin/general.get.ts @@ -1,3 +1,6 @@ +import Database from '#server/utils/Database'; +import { definePermissionEventHandler } from '#server/utils/handler'; + export default definePermissionEventHandler('admin', 'any', async () => { const generalConfig = await Database.general.getConfig(); return generalConfig; diff --git a/src/server/api/admin/general.post.ts b/src/server/api/admin/general.post.ts index 414af6d7..5c1d936b 100644 --- a/src/server/api/admin/general.post.ts +++ b/src/server/api/admin/general.post.ts @@ -1,3 +1,8 @@ +import { readValidatedBody } from 'h3'; + +import Database from '#server/utils/Database'; +import { definePermissionEventHandler } from '#server/utils/handler'; +import { validateZod } from '#server/utils/types'; import { GeneralUpdateSchema } from '#db/repositories/general/types'; export default definePermissionEventHandler( diff --git a/src/server/api/admin/hooks.get.ts b/src/server/api/admin/hooks.get.ts index 035cc252..eec83626 100644 --- a/src/server/api/admin/hooks.get.ts +++ b/src/server/api/admin/hooks.get.ts @@ -1,3 +1,6 @@ +import Database from '#server/utils/Database'; +import { definePermissionEventHandler } from '#server/utils/handler'; + export default definePermissionEventHandler('admin', 'any', async () => { const hooks = await Database.hooks.get(); return hooks; diff --git a/src/server/api/admin/hooks.post.ts b/src/server/api/admin/hooks.post.ts index 1acb94c2..6bf4959a 100644 --- a/src/server/api/admin/hooks.post.ts +++ b/src/server/api/admin/hooks.post.ts @@ -1,3 +1,9 @@ +import { readValidatedBody } from 'h3'; + +import Database from '#server/utils/Database'; +import WireGuard from '#server/utils/WireGuard'; +import { definePermissionEventHandler } from '#server/utils/handler'; +import { validateZod } from '#server/utils/types'; import { HooksUpdateSchema } from '#db/repositories/hooks/types'; export default definePermissionEventHandler( diff --git a/src/server/api/admin/interface/cidr.post.ts b/src/server/api/admin/interface/cidr.post.ts index 95e239cf..612a2d92 100644 --- a/src/server/api/admin/interface/cidr.post.ts +++ b/src/server/api/admin/interface/cidr.post.ts @@ -1,3 +1,9 @@ +import { readValidatedBody } from 'h3'; + +import Database from '#server/utils/Database'; +import WireGuard from '#server/utils/WireGuard'; +import { definePermissionEventHandler } from '#server/utils/handler'; +import { validateZod } from '#server/utils/types'; import { InterfaceCidrUpdateSchema } from '#db/repositories/interface/types'; export default definePermissionEventHandler( diff --git a/src/server/api/admin/interface/index.get.ts b/src/server/api/admin/interface/index.get.ts index 7161aecc..44a4e944 100644 --- a/src/server/api/admin/interface/index.get.ts +++ b/src/server/api/admin/interface/index.get.ts @@ -1,3 +1,6 @@ +import Database from '#server/utils/Database'; +import { definePermissionEventHandler } from '#server/utils/handler'; + export default definePermissionEventHandler('admin', 'any', async () => { const wgInterface = await Database.interfaces.get(); diff --git a/src/server/api/admin/interface/index.post.ts b/src/server/api/admin/interface/index.post.ts index 6fe10d62..8444295b 100644 --- a/src/server/api/admin/interface/index.post.ts +++ b/src/server/api/admin/interface/index.post.ts @@ -1,3 +1,11 @@ +import { createError, readValidatedBody } from 'h3'; + +import Database from '#server/utils/Database'; +import WireGuard from '#server/utils/WireGuard'; +import { WG_ENV } from '#server/utils/config'; +import { firewall } from '#server/utils/firewall'; +import { definePermissionEventHandler } from '#server/utils/handler'; +import { validateZod } from '#server/utils/types'; import { InterfaceUpdateSchema } from '#db/repositories/interface/types'; export default definePermissionEventHandler( diff --git a/src/server/api/admin/interface/restart.post.ts b/src/server/api/admin/interface/restart.post.ts index aaf7ae39..c3f95e93 100644 --- a/src/server/api/admin/interface/restart.post.ts +++ b/src/server/api/admin/interface/restart.post.ts @@ -1,3 +1,6 @@ +import WireGuard from '#server/utils/WireGuard'; +import { definePermissionEventHandler } from '#server/utils/handler'; + export default definePermissionEventHandler('admin', 'any', async () => { await WireGuard.Restart(); diff --git a/src/server/api/admin/ip-info.get.ts b/src/server/api/admin/ip-info.get.ts index 1ea6d745..b558c6f4 100644 --- a/src/server/api/admin/ip-info.get.ts +++ b/src/server/api/admin/ip-info.get.ts @@ -1,3 +1,6 @@ +import { definePermissionEventHandler } from '#server/utils/handler'; +import { cachedGetIpInformation } from '#server/utils/ip'; + export default definePermissionEventHandler('admin', 'any', async () => { const result = await cachedGetIpInformation(); return result; diff --git a/src/server/api/admin/userconfig.get.ts b/src/server/api/admin/userconfig.get.ts index b41a81bd..52a175de 100644 --- a/src/server/api/admin/userconfig.get.ts +++ b/src/server/api/admin/userconfig.get.ts @@ -1,3 +1,6 @@ +import Database from '#server/utils/Database'; +import { definePermissionEventHandler } from '#server/utils/handler'; + export default definePermissionEventHandler('admin', 'any', async () => { const userConfig = await Database.userConfigs.get(); return userConfig; diff --git a/src/server/api/admin/userconfig.post.ts b/src/server/api/admin/userconfig.post.ts index ff150b0c..3ff004be 100644 --- a/src/server/api/admin/userconfig.post.ts +++ b/src/server/api/admin/userconfig.post.ts @@ -1,3 +1,9 @@ +import { readValidatedBody } from 'h3'; + +import Database from '#server/utils/Database'; +import WireGuard from '#server/utils/WireGuard'; +import { definePermissionEventHandler } from '#server/utils/handler'; +import { validateZod } from '#server/utils/types'; import { UserConfigUpdateSchema } from '#db/repositories/userConfig/types'; export default definePermissionEventHandler( diff --git a/src/server/api/auth/[provider]/callback.get.ts b/src/server/api/auth/[provider]/callback.get.ts new file mode 100644 index 00000000..ec6f4c42 --- /dev/null +++ b/src/server/api/auth/[provider]/callback.get.ts @@ -0,0 +1,97 @@ +import { createError, defineEventHandler, sendRedirect } from 'h3'; + +import Database from '#server/utils/Database'; +import { SERVER_DEBUG } from '#server/utils/config'; +import { buildOauthConfig, getUserInfo } from '#server/utils/oauth'; +import { useWGSession } from '#server/utils/session'; +import { assertUnreachable } from '#server/utils/types'; + +export default defineEventHandler(async (event) => { + const { config, provider, providerConfig } = await buildOauthConfig(event); + + const session = await useWGSession(event); + if ( + !session.data.oauth_nonce || + !session.data.oauth_verifier || + !session.data.oauth_state + ) { + throw createError({ + statusCode: 400, + statusMessage: 'Missing OAuth State', + }); + } + + const userInfo = await getUserInfo( + event, + config, + { + oauth_nonce: session.data.oauth_nonce, + oauth_verifier: session.data.oauth_verifier, + oauth_state: session.data.oauth_state, + }, + providerConfig + ); + + const result = await Database.users.loginWithOAuth( + provider, + userInfo.sub, + userInfo.preferred_username || userInfo.email, + userInfo.email, + userInfo.name || 'User' + ); + + if (!result.success) { + switch (result.error) { + case 'TOTP_REQUIRED': + await session.update({ + pendingLogin: { + type: 'oauth', + userId: result.userId, + remember: false, + // 5min + expires_at: Date.now() + 5 * 60 * 1000, + }, + oauth_nonce: undefined, + oauth_state: undefined, + oauth_verifier: undefined, + }); + return sendRedirect(event, '/login/2fa'); + case 'USER_DISABLED': + throw createError({ + statusCode: 401, + statusMessage: 'User disabled', + }); + case 'USER_ALREADY_LINKED': + throw createError({ + statusCode: 401, + statusMessage: + 'User already linked with different account or provider', + }); + case 'AUTO_REGISTER_DISABLED': + throw createError({ + statusCode: 401, + statusMessage: 'Auto registration is disabled', + }); + case 'UNEXPECTED_ERROR': + throw createError({ + statusCode: 500, + statusMessage: 'Unexpected error', + }); + } + assertUnreachable(result); + } + + // Create session + const data = await session.update({ + userId: result.user.id, + oauth_nonce: undefined, + oauth_state: undefined, + oauth_verifier: undefined, + }); + + SERVER_DEBUG( + `New OAuth Session: ${data.id} for ${result.user.id} (${result.user.username}) with ${provider}` + ); + + return sendRedirect(event, '/'); +}); diff --git a/src/server/api/auth/[provider]/index.get.ts b/src/server/api/auth/[provider]/index.get.ts new file mode 100644 index 00000000..f3f4c64e --- /dev/null +++ b/src/server/api/auth/[provider]/index.get.ts @@ -0,0 +1,61 @@ +import { + defineEventHandler, + getRequestHost, + getValidatedQuery, + sendRedirect, +} from 'h3'; +import * as client from 'openid-client'; +import { z } from 'zod'; + +import { WG_ENV } from '#server/utils/config'; +import { buildOauthConfig } from '#server/utils/oauth'; +import { useWGSession } from '#server/utils/session'; +import { validateZod } from '#server/utils/types'; + +const OauthQuerySchema = z.object({ + link: z.coerce.boolean().optional(), +}); + +export default defineEventHandler(async (event) => { + const params = await getValidatedQuery( + event, + validateZod(OauthQuerySchema, event) + ); + + const { config, provider, providerConfig } = await buildOauthConfig(event); + + const host = getRequestHost(event); + const protocol = WG_ENV.INSECURE ? 'http' : 'https'; + const baseUri = `${protocol}://${host}/api/auth/${provider}`; + + let redirectUri = `${baseUri}/callback`; + if (params.link) { + redirectUri = `${baseUri}/link`; + } + + const codeVerifier = client.randomPKCECodeVerifier(); + const codeChallenge = await client.calculatePKCECodeChallenge(codeVerifier); + const nonce = client.randomNonce(); + const state = client.randomState(); + + const parameters: Record = { + ...providerConfig.params, + redirect_uri: redirectUri, + scope: providerConfig.scope, + code_challenge: codeChallenge, + code_challenge_method: 'S256', + nonce: nonce, + state: state, + }; + + const session = await useWGSession(event); + await session.update({ + oauth_nonce: nonce, + oauth_verifier: codeVerifier, + oauth_state: state, + }); + + const redirectTo = client.buildAuthorizationUrl(config, parameters); + + return sendRedirect(event, redirectTo.toString()); +}); diff --git a/src/server/api/auth/[provider]/link.get.ts b/src/server/api/auth/[provider]/link.get.ts new file mode 100644 index 00000000..0d7de85d --- /dev/null +++ b/src/server/api/auth/[provider]/link.get.ts @@ -0,0 +1,43 @@ +import { createError, sendRedirect } from 'h3'; + +import Database from '#server/utils/Database'; +import { definePermissionEventHandler } from '#server/utils/handler'; +import { buildOauthConfig, getUserInfo } from '#server/utils/oauth'; +import { useWGSession } from '#server/utils/session'; + +export default definePermissionEventHandler( + 'me', + 'update', + async ({ event, user, checkPermissions }) => { + checkPermissions(user); + + const { config, provider, providerConfig } = await buildOauthConfig(event); + + const session = await useWGSession(event); + if ( + !session.data.oauth_nonce || + !session.data.oauth_verifier || + !session.data.oauth_state + ) { + throw createError({ + statusCode: 400, + statusMessage: 'Missing OAuth State', + }); + } + + const userInfo = await getUserInfo( + event, + config, + { + oauth_nonce: session.data.oauth_nonce, + oauth_verifier: session.data.oauth_verifier, + oauth_state: session.data.oauth_state, + }, + providerConfig + ); + + await Database.users.linkOauth(user.id, provider, userInfo.sub); + + return sendRedirect(event, '/me'); + } +); diff --git a/src/server/api/auth/cancel.post.ts b/src/server/api/auth/cancel.post.ts new file mode 100644 index 00000000..fa54be0c --- /dev/null +++ b/src/server/api/auth/cancel.post.ts @@ -0,0 +1,16 @@ +import { defineEventHandler } from 'h3'; + +import { useWGSession } from '#server/utils/session'; + +export default defineEventHandler(async (event) => { + const session = await useWGSession(event); + + await session.update({ + pendingLogin: undefined, + oauth_nonce: undefined, + oauth_state: undefined, + oauth_verifier: undefined, + }); + + return { success: true as const }; +}); diff --git a/src/server/api/auth/methods.get.ts b/src/server/api/auth/methods.get.ts new file mode 100644 index 00000000..abae6827 --- /dev/null +++ b/src/server/api/auth/methods.get.ts @@ -0,0 +1,24 @@ +import { defineEventHandler } from 'h3'; + +import { WG_ENV } from '#server/utils/config'; +import { OAUTH_PROVIDERS } from '#server/utils/oauth'; +import type { OAUTH_PROVIDER } from '#server/utils/oauth'; + +export default defineEventHandler(() => { + return { + providers: WG_ENV.OAUTH_PROVIDERS?.reduce( + (acc, curr) => { + acc[curr] = { + enabled: true, + friendlyName: OAUTH_PROVIDERS[curr].friendlyName, + }; + return acc; + }, + {} as Record + ), + oauthEnabled: + WG_ENV.OAUTH_PROVIDERS !== undefined && WG_ENV.OAUTH_PROVIDERS.length > 0, + passwordDisabled: WG_ENV.DISABLE_PASSWORD_AUTH, + autoLaunchProvider: WG_ENV.OAUTH_AUTO_LAUNCH, + }; +}); diff --git a/src/server/api/session.post.ts b/src/server/api/auth/password.post.ts similarity index 57% rename from src/server/api/session.post.ts rename to src/server/api/auth/password.post.ts index 07a46021..90c8fddc 100644 --- a/src/server/api/session.post.ts +++ b/src/server/api/auth/password.post.ts @@ -1,12 +1,27 @@ +import { createError, defineEventHandler, readValidatedBody } from 'h3'; + +import Database from '#server/utils/Database'; +import { SERVER_DEBUG, WG_ENV } from '#server/utils/config'; +import { useWGSession } from '#server/utils/session'; +import { assertUnreachable, validateZod } from '#server/utils/types'; import { UserLoginSchema } from '#db/repositories/user/types'; export default defineEventHandler(async (event) => { - const { username, password, remember, totpCode } = await readValidatedBody( + if (WG_ENV.DISABLE_PASSWORD_AUTH) { + throw createError({ + statusCode: 403, + statusMessage: 'Password authentication is disabled', + }); + } + + const { username, password, remember } = await readValidatedBody( event, validateZod(UserLoginSchema, event) ); - const result = await Database.users.login(username, password, totpCode); + const result = await Database.users.login(username, password); + + const session = await useWGSession(event, remember); // TODO: add localization support @@ -18,6 +33,15 @@ export default defineEventHandler(async (event) => { statusMessage: 'Invalid username or password', }); case 'TOTP_REQUIRED': + await session.update({ + pendingLogin: { + type: 'password', + userId: result.userId, + remember, + // 5min + expires_at: Date.now() + 5 * 60 * 1000, + }, + }); return { status: 'TOTP_REQUIRED' as const }; case 'INVALID_TOTP_CODE': return { status: 'INVALID_TOTP_CODE' as const }; @@ -32,13 +56,11 @@ export default defineEventHandler(async (event) => { statusMessage: 'Unexpected error', }); } - assertUnreachable(result.error); + assertUnreachable(result); } const user = result.user; - const session = await useWGSession(event, remember); - const data = await session.update({ userId: user.id, }); diff --git a/src/server/api/auth/pending.get.ts b/src/server/api/auth/pending.get.ts new file mode 100644 index 00000000..9de80688 --- /dev/null +++ b/src/server/api/auth/pending.get.ts @@ -0,0 +1,28 @@ +import { createError, defineEventHandler } from 'h3'; + +import { useWGSession } from '#server/utils/session'; + +export default defineEventHandler(async (event) => { + const session = await useWGSession(event); + + if (!session.data.pendingLogin) { + throw createError({ + statusCode: 401, + statusMessage: 'No pending authentication', + }); + } + if (new Date() > new Date(session.data.pendingLogin.expires_at)) { + await session.update({ + pendingLogin: undefined, + }); + + throw createError({ + statusCode: 401, + statusMessage: 'No pending authentication', + }); + } + + return { + type: session.data.pendingLogin.type, + }; +}); diff --git a/src/server/api/auth/unlink.post.ts b/src/server/api/auth/unlink.post.ts new file mode 100644 index 00000000..b9f8373c --- /dev/null +++ b/src/server/api/auth/unlink.post.ts @@ -0,0 +1,14 @@ +import Database from '#server/utils/Database'; +import { definePermissionEventHandler } from '#server/utils/handler'; + +export default definePermissionEventHandler( + 'me', + 'update', + async ({ user, checkPermissions }) => { + checkPermissions(user); + + await Database.users.unlinkOauth(user.id); + + return { success: true }; + } +); diff --git a/src/server/api/auth/verify-2fa.post.ts b/src/server/api/auth/verify-2fa.post.ts new file mode 100644 index 00000000..c0d40532 --- /dev/null +++ b/src/server/api/auth/verify-2fa.post.ts @@ -0,0 +1,58 @@ +import { createError, defineEventHandler, readValidatedBody } from 'h3'; + +import Database from '#server/utils/Database'; +import { useWGSession } from '#server/utils/session'; +import { assertUnreachable, validateZod } from '#server/utils/types'; +import { Verify2faSchema } from '#db/repositories/user/types'; + +export default defineEventHandler(async (event) => { + const { totpCode } = await readValidatedBody( + event, + validateZod(Verify2faSchema, event) + ); + const session = await useWGSession(event); + + const pendingLogin = session.data.pendingLogin; + if (!pendingLogin) { + throw createError({ + statusCode: 401, + statusMessage: 'No pending authentication', + }); + } + if (new Date() > new Date(pendingLogin.expires_at)) { + await session.update({ + pendingLogin: undefined, + }); + + return { status: 'PENDING_LOGIN_EXPIRED' as const }; + } + + const totpStatus = await Database.users.validateTotpCode( + pendingLogin.userId, + totpCode + ); + + switch (totpStatus) { + case 'INVALID_TOTP_CODE': + return { status: 'INVALID_TOTP_CODE' as const }; + case 'USER_DISABLED': + throw createError({ + statusCode: 401, + statusMessage: 'User disabled', + }); + case 'success': + break; + default: + assertUnreachable(totpStatus); + } + + await session.update({ + userId: pendingLogin.userId, + pendingLogin: undefined, + oauth_nonce: undefined, + oauth_state: undefined, + oauth_verifier: undefined, + }); + + return { status: 'success' as const }; +}); diff --git a/src/server/api/client/[clientId]/configuration.get.ts b/src/server/api/client/[clientId]/configuration.get.ts index 847f1735..50891c63 100644 --- a/src/server/api/client/[clientId]/configuration.get.ts +++ b/src/server/api/client/[clientId]/configuration.get.ts @@ -1,3 +1,9 @@ +import { createError, getValidatedRouterParams, setHeader } from 'h3'; + +import Database from '#server/utils/Database'; +import WireGuard from '#server/utils/WireGuard'; +import { definePermissionEventHandler } from '#server/utils/handler'; +import { validateZod } from '#server/utils/types'; import { ClientGetSchema } from '#db/repositories/client/types'; export default definePermissionEventHandler( diff --git a/src/server/api/client/[clientId]/disable.post.ts b/src/server/api/client/[clientId]/disable.post.ts index 0338045f..99f722f5 100644 --- a/src/server/api/client/[clientId]/disable.post.ts +++ b/src/server/api/client/[clientId]/disable.post.ts @@ -1,3 +1,9 @@ +import { getValidatedRouterParams } from 'h3'; + +import Database from '#server/utils/Database'; +import WireGuard from '#server/utils/WireGuard'; +import { definePermissionEventHandler } from '#server/utils/handler'; +import { validateZod } from '#server/utils/types'; import { ClientGetSchema } from '#db/repositories/client/types'; export default definePermissionEventHandler( diff --git a/src/server/api/client/[clientId]/enable.post.ts b/src/server/api/client/[clientId]/enable.post.ts index 16f2fbb8..f8b71bb9 100644 --- a/src/server/api/client/[clientId]/enable.post.ts +++ b/src/server/api/client/[clientId]/enable.post.ts @@ -1,3 +1,9 @@ +import { createError, getValidatedRouterParams } from 'h3'; + +import Database from '#server/utils/Database'; +import WireGuard from '#server/utils/WireGuard'; +import { definePermissionEventHandler } from '#server/utils/handler'; +import { validateZod } from '#server/utils/types'; import { ClientGetSchema } from '#db/repositories/client/types'; export default definePermissionEventHandler( diff --git a/src/server/api/client/[clientId]/generateOneTimeLink.post.ts b/src/server/api/client/[clientId]/generateOneTimeLink.post.ts index 9363ed93..82eb97a9 100644 --- a/src/server/api/client/[clientId]/generateOneTimeLink.post.ts +++ b/src/server/api/client/[clientId]/generateOneTimeLink.post.ts @@ -1,3 +1,8 @@ +import { getValidatedRouterParams } from 'h3'; + +import Database from '#server/utils/Database'; +import { definePermissionEventHandler } from '#server/utils/handler'; +import { validateZod } from '#server/utils/types'; import { ClientGetSchema } from '#db/repositories/client/types'; export default definePermissionEventHandler( diff --git a/src/server/api/client/[clientId]/index.delete.ts b/src/server/api/client/[clientId]/index.delete.ts index 2267e89d..a4923d1f 100644 --- a/src/server/api/client/[clientId]/index.delete.ts +++ b/src/server/api/client/[clientId]/index.delete.ts @@ -1,3 +1,9 @@ +import { getValidatedRouterParams } from 'h3'; + +import Database from '#server/utils/Database'; +import WireGuard from '#server/utils/WireGuard'; +import { definePermissionEventHandler } from '#server/utils/handler'; +import { validateZod } from '#server/utils/types'; import { ClientGetSchema } from '#db/repositories/client/types'; export default definePermissionEventHandler( diff --git a/src/server/api/client/[clientId]/index.get.ts b/src/server/api/client/[clientId]/index.get.ts index eb630a16..87428de2 100644 --- a/src/server/api/client/[clientId]/index.get.ts +++ b/src/server/api/client/[clientId]/index.get.ts @@ -1,3 +1,9 @@ +import { createError, getValidatedRouterParams } from 'h3'; + +import Database from '#server/utils/Database'; +import WireGuard from '#server/utils/WireGuard'; +import { definePermissionEventHandler } from '#server/utils/handler'; +import { validateZod } from '#server/utils/types'; import { ClientGetSchema } from '#db/repositories/client/types'; export default definePermissionEventHandler( diff --git a/src/server/api/client/[clientId]/index.post.ts b/src/server/api/client/[clientId]/index.post.ts index 82f49b52..c52361eb 100644 --- a/src/server/api/client/[clientId]/index.post.ts +++ b/src/server/api/client/[clientId]/index.post.ts @@ -1,3 +1,9 @@ +import { getValidatedRouterParams, readValidatedBody } from 'h3'; + +import Database from '#server/utils/Database'; +import WireGuard from '#server/utils/WireGuard'; +import { definePermissionEventHandler } from '#server/utils/handler'; +import { validateZod } from '#server/utils/types'; import { ClientGetSchema, ClientUpdateSchema, diff --git a/src/server/api/client/[clientId]/qrcode.svg.get.ts b/src/server/api/client/[clientId]/qrcode.svg.get.ts index 6d25d577..4de6d7d0 100644 --- a/src/server/api/client/[clientId]/qrcode.svg.get.ts +++ b/src/server/api/client/[clientId]/qrcode.svg.get.ts @@ -1,3 +1,9 @@ +import { getValidatedRouterParams, setHeader } from 'h3'; + +import Database from '#server/utils/Database'; +import WireGuard from '#server/utils/WireGuard'; +import { definePermissionEventHandler } from '#server/utils/handler'; +import { validateZod } from '#server/utils/types'; import { ClientGetSchema } from '#db/repositories/client/types'; export default definePermissionEventHandler( diff --git a/src/server/api/client/index.get.ts b/src/server/api/client/index.get.ts index f962e610..e2b41d78 100644 --- a/src/server/api/client/index.get.ts +++ b/src/server/api/client/index.get.ts @@ -1,17 +1,23 @@ +import { getValidatedQuery } from 'h3'; + +import WireGuard from '#server/utils/WireGuard'; +import { definePermissionEventHandler } from '#server/utils/handler'; +import { validateZod } from '#server/utils/types'; +import { roles } from '#shared/utils/permissions'; import { ClientQuerySchema } from '#db/repositories/client/types'; export default definePermissionEventHandler( 'clients', 'custom', async ({ event, user }) => { - const { filter } = await getValidatedQuery( + const { filter, sort } = await getValidatedQuery( event, validateZod(ClientQuerySchema, event) ); if (user.role === roles.ADMIN) { - return WireGuard.getAllClients(filter); + return WireGuard.getAllClients({ filter, sort }); } - return WireGuard.getClientsForUser(user.id, filter); + return WireGuard.getClientsForUser(user.id, { filter, sort }); } ); diff --git a/src/server/api/client/index.post.ts b/src/server/api/client/index.post.ts index e8e5da37..67f320ae 100644 --- a/src/server/api/client/index.post.ts +++ b/src/server/api/client/index.post.ts @@ -1,3 +1,9 @@ +import { readValidatedBody } from 'h3'; + +import Database from '#server/utils/Database'; +import WireGuard from '#server/utils/WireGuard'; +import { definePermissionEventHandler } from '#server/utils/handler'; +import { validateZod } from '#server/utils/types'; import { ClientCreateSchema } from '#db/repositories/client/types'; export default definePermissionEventHandler( diff --git a/src/server/api/information.get.ts b/src/server/api/information.get.ts index ff9e2373..765dda7b 100644 --- a/src/server/api/information.get.ts +++ b/src/server/api/information.get.ts @@ -1,5 +1,10 @@ +import { defineEventHandler } from 'h3'; import { gt } from 'semver'; +import Database from '#server/utils/Database'; +import { RELEASE, WG_ENV } from '#server/utils/config'; +import { cachedFetchLatestRelease } from '#server/utils/release'; + export default defineEventHandler(async () => { const latestRelease = await cachedFetchLatestRelease(); const updateAvailable = gt(latestRelease.version, RELEASE); diff --git a/src/server/api/me/index.post.ts b/src/server/api/me/index.post.ts index daf19c55..99aef710 100644 --- a/src/server/api/me/index.post.ts +++ b/src/server/api/me/index.post.ts @@ -1,3 +1,8 @@ +import { readValidatedBody } from 'h3'; + +import Database from '#server/utils/Database'; +import { definePermissionEventHandler } from '#server/utils/handler'; +import { validateZod } from '#server/utils/types'; import { UserUpdateSchema } from '#db/repositories/user/types'; export default definePermissionEventHandler( diff --git a/src/server/api/me/password.post.ts b/src/server/api/me/password.post.ts index 87ace186..bfabbbbd 100644 --- a/src/server/api/me/password.post.ts +++ b/src/server/api/me/password.post.ts @@ -1,3 +1,8 @@ +import { readValidatedBody } from 'h3'; + +import Database from '#server/utils/Database'; +import { definePermissionEventHandler } from '#server/utils/handler'; +import { validateZod } from '#server/utils/types'; import { UserUpdatePasswordSchema } from '#db/repositories/user/types'; export default definePermissionEventHandler( diff --git a/src/server/api/me/totp.post.ts b/src/server/api/me/totp.post.ts index 53c87f8a..c59ba350 100644 --- a/src/server/api/me/totp.post.ts +++ b/src/server/api/me/totp.post.ts @@ -1,4 +1,9 @@ +import { createError, readValidatedBody } from 'h3'; import { Secret, TOTP } from 'otpauth'; + +import Database from '#server/utils/Database'; +import { definePermissionEventHandler } from '#server/utils/handler'; +import { validateZod } from '#server/utils/types'; import { UserUpdateTotpSchema } from '#db/repositories/user/types'; type Response = @@ -23,6 +28,13 @@ export default definePermissionEventHandler( checkPermissions(user); if (body.type === 'setup') { + if (user.totpVerified) { + throw createError({ + statusCode: 409, + statusMessage: 'TOTP is already enabled', + }); + } + const key = new Secret({ size: 20 }); const totp = new TOTP({ @@ -50,6 +62,13 @@ export default definePermissionEventHandler( type: 'created', } as Response; } else if (body.type === 'delete') { + if (!user.totpVerified) { + throw createError({ + statusCode: 409, + statusMessage: 'TOTP is not enabled', + }); + } + await Database.users.deleteTotpKey(user.id, body.currentPassword); return { diff --git a/src/server/api/session.delete.ts b/src/server/api/session.delete.ts index 1ee6ddce..9ff6e269 100644 --- a/src/server/api/session.delete.ts +++ b/src/server/api/session.delete.ts @@ -1,3 +1,8 @@ +import { createError, defineEventHandler } from 'h3'; + +import { SERVER_DEBUG } from '#server/utils/config'; +import { useWGSession } from '#server/utils/session'; + export default defineEventHandler(async (event) => { const session = await useWGSession(event); const sessionId = session.id; diff --git a/src/server/api/session.get.ts b/src/server/api/session.get.ts index 5d975ee5..8d7cb540 100644 --- a/src/server/api/session.get.ts +++ b/src/server/api/session.get.ts @@ -1,9 +1,13 @@ -import type { SharedPublicUser } from '~~/shared/utils/permissions'; +import { createError, defineEventHandler } from 'h3'; + +import Database from '#server/utils/Database'; +import { useWGSession } from '#server/utils/session'; +import type { SharedPublicUser } from '#shared/utils/permissions'; export default defineEventHandler(async (event) => { const session = await useWGSession(event); - if (!session.data.userId) { + if (!session.data.userId || session.data.pendingLogin) { // not logged in throw createError({ statusCode: 401, @@ -18,6 +22,12 @@ export default defineEventHandler(async (event) => { statusMessage: 'Not found in Database', }); } + if (!user.enabled) { + throw createError({ + statusCode: 403, + statusMessage: 'User is disabled', + }); + } return { id: user.id, @@ -26,5 +36,7 @@ export default defineEventHandler(async (event) => { name: user.name, email: user.email, totpVerified: user.totpVerified, + oauthProvider: user.oauthProvider, + hasPassword: user.password !== null, } satisfies SharedPublicUser; }); diff --git a/src/server/api/setup/2.post.ts b/src/server/api/setup/2.post.ts index 29c0c769..85dea17a 100644 --- a/src/server/api/setup/2.post.ts +++ b/src/server/api/setup/2.post.ts @@ -1,3 +1,8 @@ +import { readValidatedBody } from 'h3'; + +import Database from '#server/utils/Database'; +import { defineSetupEventHandler } from '#server/utils/handler'; +import { validateZod } from '#server/utils/types'; import { UserSetupSchema } from '#db/repositories/user/types'; export default defineSetupEventHandler(2, async ({ event }) => { diff --git a/src/server/api/setup/4.get.ts b/src/server/api/setup/4.get.ts index 4c2a5186..154c059c 100644 --- a/src/server/api/setup/4.get.ts +++ b/src/server/api/setup/4.get.ts @@ -1,3 +1,6 @@ +import { defineSetupEventHandler } from '#server/utils/handler'; +import { cachedGetIpInformation } from '#server/utils/ip'; + export default defineSetupEventHandler(4, async () => { const result = await cachedGetIpInformation(); return result; diff --git a/src/server/api/setup/4.post.ts b/src/server/api/setup/4.post.ts index 192fce38..3f872068 100644 --- a/src/server/api/setup/4.post.ts +++ b/src/server/api/setup/4.post.ts @@ -1,3 +1,8 @@ +import { readValidatedBody } from 'h3'; + +import Database from '#server/utils/Database'; +import { defineSetupEventHandler } from '#server/utils/handler'; +import { validateZod } from '#server/utils/types'; import { UserConfigSetupSchema } from '#db/repositories/userConfig/types'; export default defineSetupEventHandler(4, async ({ event }) => { diff --git a/src/server/api/setup/migrate.post.ts b/src/server/api/setup/migrate.post.ts index 9c0a549a..0edbde8c 100644 --- a/src/server/api/setup/migrate.post.ts +++ b/src/server/api/setup/migrate.post.ts @@ -1,7 +1,13 @@ +import { readValidatedBody } from 'h3'; import { parseCidr } from 'cidr-tools'; import { stringifyIp } from 'ip-bigint'; import { z } from 'zod'; +import Database from '#server/utils/Database'; +import { defineSetupEventHandler } from '#server/utils/handler'; +import { nextIPFromUsedAddresses } from '#server/utils/ip'; +import { FileSchema, validateZod } from '#server/utils/types'; + export default defineSetupEventHandler('migrate', async ({ event }) => { const { file } = await readValidatedBody( event, @@ -52,6 +58,9 @@ export default defineSetupEventHandler('migrate', async ({ event }) => { `/${ipv4Cidr.prefix}`, ipv6Cidr: ipv6Cidr.cidr, }); + const ipv6Addresses = new Set( + (await Database.clients.getAll()).map((client) => client.ipv6Address) + ); for (const clientId in oldConfig.clients) { const clientConfig = oldConfig.clients[clientId]; @@ -60,15 +69,14 @@ export default defineSetupEventHandler('migrate', async ({ event }) => { continue; } - const clients = await Database.clients.getAll(); - - const ipv6Address = nextIP(6, ipv6Cidr, clients); + const ipv6Address = nextIPFromUsedAddresses(6, ipv6Cidr, ipv6Addresses); await Database.clients.createFromExisting({ ...clientConfig, ipv4Address: clientConfig.address, ipv6Address, }); + ipv6Addresses.add(ipv6Address); } await Database.general.setSetupStep(0); diff --git a/src/server/database/migrations/0005_clumsy_korg.sql b/src/server/database/migrations/0005_clumsy_korg.sql new file mode 100644 index 00000000..315ed5ed --- /dev/null +++ b/src/server/database/migrations/0005_clumsy_korg.sql @@ -0,0 +1,23 @@ +PRAGMA foreign_keys=OFF;--> statement-breakpoint +CREATE TABLE `__new_users_table` ( + `id` integer PRIMARY KEY AUTOINCREMENT NOT NULL, + `username` text NOT NULL, + `password` text, + `email` text, + `name` text NOT NULL, + `role` integer NOT NULL, + `totp_key` text, + `totp_verified` integer NOT NULL, + `enabled` integer NOT NULL, + `oauth_provider` text, + `oauth_id` text, + `created_at` text DEFAULT (CURRENT_TIMESTAMP) NOT NULL, + `updated_at` text DEFAULT (CURRENT_TIMESTAMP) NOT NULL +); +--> statement-breakpoint +INSERT INTO `__new_users_table`("id", "username", "password", "email", "name", "role", "totp_key", "totp_verified", "enabled", "created_at", "updated_at") SELECT "id", "username", "password", "email", "name", "role", "totp_key", "totp_verified", "enabled", "created_at", "updated_at" FROM `users_table`;--> statement-breakpoint +DROP TABLE `users_table`;--> statement-breakpoint +ALTER TABLE `__new_users_table` RENAME TO `users_table`;--> statement-breakpoint +PRAGMA foreign_keys=ON;--> statement-breakpoint +CREATE UNIQUE INDEX `users_table_username_unique` ON `users_table` (`username`);--> statement-breakpoint +CREATE UNIQUE INDEX `oauth_provider_id_unique` ON `users_table` (`oauth_provider`,`oauth_id`); \ No newline at end of file diff --git a/src/server/database/migrations/0006_clear_leech.sql b/src/server/database/migrations/0006_clear_leech.sql new file mode 100644 index 00000000..f31d4882 --- /dev/null +++ b/src/server/database/migrations/0006_clear_leech.sql @@ -0,0 +1,2 @@ +CREATE UNIQUE INDEX `public_key_interface_unique` ON `clients_table` (`public_key`,`interface_id`);--> statement-breakpoint +CREATE UNIQUE INDEX `users_table_email_unique` ON `users_table` (`email`); \ No newline at end of file diff --git a/src/server/database/migrations/meta/0005_snapshot.json b/src/server/database/migrations/meta/0005_snapshot.json new file mode 100644 index 00000000..acb5a605 --- /dev/null +++ b/src/server/database/migrations/meta/0005_snapshot.json @@ -0,0 +1,1009 @@ +{ + "version": "6", + "dialect": "sqlite", + "id": "d41b21e2-3977-4e94-8250-d26a26678703", + "prevId": "0f072f91-cd10-4702-ae7b-245255d69d1e", + "tables": { + "clients_table": { + "name": "clients_table", + "columns": { + "id": { + "name": "id", + "type": "integer", + "primaryKey": true, + "notNull": true, + "autoincrement": true + }, + "user_id": { + "name": "user_id", + "type": "integer", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "interface_id": { + "name": "interface_id", + "type": "text", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "name": { + "name": "name", + "type": "text", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "ipv4_address": { + "name": "ipv4_address", + "type": "text", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "ipv6_address": { + "name": "ipv6_address", + "type": "text", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "pre_up": { + "name": "pre_up", + "type": "text", + "primaryKey": false, + "notNull": true, + "autoincrement": false, + "default": "''" + }, + "post_up": { + "name": "post_up", + "type": "text", + "primaryKey": false, + "notNull": true, + "autoincrement": false, + "default": "''" + }, + "pre_down": { + "name": "pre_down", + "type": "text", + "primaryKey": false, + "notNull": true, + "autoincrement": false, + "default": "''" + }, + "post_down": { + "name": "post_down", + "type": "text", + "primaryKey": false, + "notNull": true, + "autoincrement": false, + "default": "''" + }, + "private_key": { + "name": "private_key", + "type": "text", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "public_key": { + "name": "public_key", + "type": "text", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "pre_shared_key": { + "name": "pre_shared_key", + "type": "text", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "expires_at": { + "name": "expires_at", + "type": "text", + "primaryKey": false, + "notNull": false, + "autoincrement": false + }, + "allowed_ips": { + "name": "allowed_ips", + "type": "text", + "primaryKey": false, + "notNull": false, + "autoincrement": false + }, + "server_allowed_ips": { + "name": "server_allowed_ips", + "type": "text", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "firewall_ips": { + "name": "firewall_ips", + "type": "text", + "primaryKey": false, + "notNull": false, + "autoincrement": false + }, + "persistent_keepalive": { + "name": "persistent_keepalive", + "type": "integer", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "mtu": { + "name": "mtu", + "type": "integer", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "j_c": { + "name": "j_c", + "type": "integer", + "primaryKey": false, + "notNull": false, + "autoincrement": false + }, + "j_min": { + "name": "j_min", + "type": "integer", + "primaryKey": false, + "notNull": false, + "autoincrement": false + }, + "j_max": { + "name": "j_max", + "type": "integer", + "primaryKey": false, + "notNull": false, + "autoincrement": false + }, + "i1": { + "name": "i1", + "type": "text", + "primaryKey": false, + "notNull": false, + "autoincrement": false + }, + "i2": { + "name": "i2", + "type": "text", + "primaryKey": false, + "notNull": false, + "autoincrement": false + }, + "i3": { + "name": "i3", + "type": "text", + "primaryKey": false, + "notNull": false, + "autoincrement": false + }, + "i4": { + "name": "i4", + "type": "text", + "primaryKey": false, + "notNull": false, + "autoincrement": false + }, + "i5": { + "name": "i5", + "type": "text", + "primaryKey": false, + "notNull": false, + "autoincrement": false + }, + "dns": { + "name": "dns", + "type": "text", + "primaryKey": false, + "notNull": false, + "autoincrement": false + }, + "server_endpoint": { + "name": "server_endpoint", + "type": "text", + "primaryKey": false, + "notNull": false, + "autoincrement": false + }, + "enabled": { + "name": "enabled", + "type": "integer", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "created_at": { + "name": "created_at", + "type": "text", + "primaryKey": false, + "notNull": true, + "autoincrement": false, + "default": "(CURRENT_TIMESTAMP)" + }, + "updated_at": { + "name": "updated_at", + "type": "text", + "primaryKey": false, + "notNull": true, + "autoincrement": false, + "default": "(CURRENT_TIMESTAMP)" + } + }, + "indexes": { + "clients_table_ipv4_address_unique": { + "name": "clients_table_ipv4_address_unique", + "columns": [ + "ipv4_address" + ], + "isUnique": true + }, + "clients_table_ipv6_address_unique": { + "name": "clients_table_ipv6_address_unique", + "columns": [ + "ipv6_address" + ], + "isUnique": true + } + }, + "foreignKeys": { + "clients_table_user_id_users_table_id_fk": { + "name": "clients_table_user_id_users_table_id_fk", + "tableFrom": "clients_table", + "tableTo": "users_table", + "columnsFrom": [ + "user_id" + ], + "columnsTo": [ + "id" + ], + "onDelete": "restrict", + "onUpdate": "cascade" + }, + "clients_table_interface_id_interfaces_table_name_fk": { + "name": "clients_table_interface_id_interfaces_table_name_fk", + "tableFrom": "clients_table", + "tableTo": "interfaces_table", + "columnsFrom": [ + "interface_id" + ], + "columnsTo": [ + "name" + ], + "onDelete": "cascade", + "onUpdate": "cascade" + } + }, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "checkConstraints": {} + }, + "general_table": { + "name": "general_table", + "columns": { + "id": { + "name": "id", + "type": "integer", + "primaryKey": true, + "notNull": true, + "autoincrement": false, + "default": 1 + }, + "setup_step": { + "name": "setup_step", + "type": "integer", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "session_password": { + "name": "session_password", + "type": "text", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "session_timeout": { + "name": "session_timeout", + "type": "integer", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "metrics_prometheus": { + "name": "metrics_prometheus", + "type": "integer", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "metrics_json": { + "name": "metrics_json", + "type": "integer", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "metrics_password": { + "name": "metrics_password", + "type": "text", + "primaryKey": false, + "notNull": false, + "autoincrement": false + }, + "created_at": { + "name": "created_at", + "type": "text", + "primaryKey": false, + "notNull": true, + "autoincrement": false, + "default": "(CURRENT_TIMESTAMP)" + }, + "updated_at": { + "name": "updated_at", + "type": "text", + "primaryKey": false, + "notNull": true, + "autoincrement": false, + "default": "(CURRENT_TIMESTAMP)" + } + }, + "indexes": {}, + "foreignKeys": {}, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "checkConstraints": {} + }, + "hooks_table": { + "name": "hooks_table", + "columns": { + "id": { + "name": "id", + "type": "text", + "primaryKey": true, + "notNull": true, + "autoincrement": false + }, + "pre_up": { + "name": "pre_up", + "type": "text", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "post_up": { + "name": "post_up", + "type": "text", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "pre_down": { + "name": "pre_down", + "type": "text", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "post_down": { + "name": "post_down", + "type": "text", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "created_at": { + "name": "created_at", + "type": "text", + "primaryKey": false, + "notNull": true, + "autoincrement": false, + "default": "(CURRENT_TIMESTAMP)" + }, + "updated_at": { + "name": "updated_at", + "type": "text", + "primaryKey": false, + "notNull": true, + "autoincrement": false, + "default": "(CURRENT_TIMESTAMP)" + } + }, + "indexes": {}, + "foreignKeys": { + "hooks_table_id_interfaces_table_name_fk": { + "name": "hooks_table_id_interfaces_table_name_fk", + "tableFrom": "hooks_table", + "tableTo": "interfaces_table", + "columnsFrom": [ + "id" + ], + "columnsTo": [ + "name" + ], + "onDelete": "cascade", + "onUpdate": "cascade" + } + }, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "checkConstraints": {} + }, + "interfaces_table": { + "name": "interfaces_table", + "columns": { + "name": { + "name": "name", + "type": "text", + "primaryKey": true, + "notNull": true, + "autoincrement": false + }, + "device": { + "name": "device", + "type": "text", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "port": { + "name": "port", + "type": "integer", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "private_key": { + "name": "private_key", + "type": "text", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "public_key": { + "name": "public_key", + "type": "text", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "ipv4_cidr": { + "name": "ipv4_cidr", + "type": "text", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "ipv6_cidr": { + "name": "ipv6_cidr", + "type": "text", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "mtu": { + "name": "mtu", + "type": "integer", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "j_c": { + "name": "j_c", + "type": "integer", + "primaryKey": false, + "notNull": false, + "autoincrement": false, + "default": 7 + }, + "j_min": { + "name": "j_min", + "type": "integer", + "primaryKey": false, + "notNull": false, + "autoincrement": false, + "default": 10 + }, + "j_max": { + "name": "j_max", + "type": "integer", + "primaryKey": false, + "notNull": false, + "autoincrement": false, + "default": 1000 + }, + "s1": { + "name": "s1", + "type": "integer", + "primaryKey": false, + "notNull": false, + "autoincrement": false, + "default": 128 + }, + "s2": { + "name": "s2", + "type": "integer", + "primaryKey": false, + "notNull": false, + "autoincrement": false, + "default": 56 + }, + "s3": { + "name": "s3", + "type": "integer", + "primaryKey": false, + "notNull": false, + "autoincrement": false + }, + "s4": { + "name": "s4", + "type": "integer", + "primaryKey": false, + "notNull": false, + "autoincrement": false + }, + "h1": { + "name": "h1", + "type": "text", + "primaryKey": false, + "notNull": false, + "autoincrement": false + }, + "h2": { + "name": "h2", + "type": "text", + "primaryKey": false, + "notNull": false, + "autoincrement": false + }, + "h3": { + "name": "h3", + "type": "text", + "primaryKey": false, + "notNull": false, + "autoincrement": false + }, + "h4": { + "name": "h4", + "type": "text", + "primaryKey": false, + "notNull": false, + "autoincrement": false + }, + "i1": { + "name": "i1", + "type": "text", + "primaryKey": false, + "notNull": false, + "autoincrement": false + }, + "i2": { + "name": "i2", + "type": "text", + "primaryKey": false, + "notNull": false, + "autoincrement": false + }, + "i3": { + "name": "i3", + "type": "text", + "primaryKey": false, + "notNull": false, + "autoincrement": false + }, + "i4": { + "name": "i4", + "type": "text", + "primaryKey": false, + "notNull": false, + "autoincrement": false + }, + "i5": { + "name": "i5", + "type": "text", + "primaryKey": false, + "notNull": false, + "autoincrement": false + }, + "enabled": { + "name": "enabled", + "type": "integer", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "firewall_enabled": { + "name": "firewall_enabled", + "type": "integer", + "primaryKey": false, + "notNull": true, + "autoincrement": false, + "default": false + }, + "created_at": { + "name": "created_at", + "type": "text", + "primaryKey": false, + "notNull": true, + "autoincrement": false, + "default": "(CURRENT_TIMESTAMP)" + }, + "updated_at": { + "name": "updated_at", + "type": "text", + "primaryKey": false, + "notNull": true, + "autoincrement": false, + "default": "(CURRENT_TIMESTAMP)" + } + }, + "indexes": { + "interfaces_table_port_unique": { + "name": "interfaces_table_port_unique", + "columns": [ + "port" + ], + "isUnique": true + } + }, + "foreignKeys": {}, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "checkConstraints": {} + }, + "one_time_links_table": { + "name": "one_time_links_table", + "columns": { + "id": { + "name": "id", + "type": "integer", + "primaryKey": true, + "notNull": true, + "autoincrement": false + }, + "one_time_link": { + "name": "one_time_link", + "type": "text", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "expires_at": { + "name": "expires_at", + "type": "text", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "created_at": { + "name": "created_at", + "type": "text", + "primaryKey": false, + "notNull": true, + "autoincrement": false, + "default": "(CURRENT_TIMESTAMP)" + }, + "updated_at": { + "name": "updated_at", + "type": "text", + "primaryKey": false, + "notNull": true, + "autoincrement": false, + "default": "(CURRENT_TIMESTAMP)" + } + }, + "indexes": { + "one_time_links_table_one_time_link_unique": { + "name": "one_time_links_table_one_time_link_unique", + "columns": [ + "one_time_link" + ], + "isUnique": true + } + }, + "foreignKeys": { + "one_time_links_table_id_clients_table_id_fk": { + "name": "one_time_links_table_id_clients_table_id_fk", + "tableFrom": "one_time_links_table", + "tableTo": "clients_table", + "columnsFrom": [ + "id" + ], + "columnsTo": [ + "id" + ], + "onDelete": "cascade", + "onUpdate": "cascade" + } + }, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "checkConstraints": {} + }, + "users_table": { + "name": "users_table", + "columns": { + "id": { + "name": "id", + "type": "integer", + "primaryKey": true, + "notNull": true, + "autoincrement": true + }, + "username": { + "name": "username", + "type": "text", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "password": { + "name": "password", + "type": "text", + "primaryKey": false, + "notNull": false, + "autoincrement": false + }, + "email": { + "name": "email", + "type": "text", + "primaryKey": false, + "notNull": false, + "autoincrement": false + }, + "name": { + "name": "name", + "type": "text", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "role": { + "name": "role", + "type": "integer", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "totp_key": { + "name": "totp_key", + "type": "text", + "primaryKey": false, + "notNull": false, + "autoincrement": false + }, + "totp_verified": { + "name": "totp_verified", + "type": "integer", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "enabled": { + "name": "enabled", + "type": "integer", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "oauth_provider": { + "name": "oauth_provider", + "type": "text", + "primaryKey": false, + "notNull": false, + "autoincrement": false + }, + "oauth_id": { + "name": "oauth_id", + "type": "text", + "primaryKey": false, + "notNull": false, + "autoincrement": false + }, + "created_at": { + "name": "created_at", + "type": "text", + "primaryKey": false, + "notNull": true, + "autoincrement": false, + "default": "(CURRENT_TIMESTAMP)" + }, + "updated_at": { + "name": "updated_at", + "type": "text", + "primaryKey": false, + "notNull": true, + "autoincrement": false, + "default": "(CURRENT_TIMESTAMP)" + } + }, + "indexes": { + "users_table_username_unique": { + "name": "users_table_username_unique", + "columns": [ + "username" + ], + "isUnique": true + }, + "oauth_provider_id_unique": { + "name": "oauth_provider_id_unique", + "columns": [ + "oauth_provider", + "oauth_id" + ], + "isUnique": true + } + }, + "foreignKeys": {}, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "checkConstraints": {} + }, + "user_configs_table": { + "name": "user_configs_table", + "columns": { + "id": { + "name": "id", + "type": "text", + "primaryKey": true, + "notNull": true, + "autoincrement": false + }, + "default_mtu": { + "name": "default_mtu", + "type": "integer", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "default_persistent_keepalive": { + "name": "default_persistent_keepalive", + "type": "integer", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "default_dns": { + "name": "default_dns", + "type": "text", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "default_allowed_ips": { + "name": "default_allowed_ips", + "type": "text", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "default_j_c": { + "name": "default_j_c", + "type": "integer", + "primaryKey": false, + "notNull": false, + "autoincrement": false, + "default": 7 + }, + "default_j_min": { + "name": "default_j_min", + "type": "integer", + "primaryKey": false, + "notNull": false, + "autoincrement": false, + "default": 10 + }, + "default_j_max": { + "name": "default_j_max", + "type": "integer", + "primaryKey": false, + "notNull": false, + "autoincrement": false, + "default": 1000 + }, + "default_i1": { + "name": "default_i1", + "type": "text", + "primaryKey": false, + "notNull": false, + "autoincrement": false + }, + "default_i2": { + "name": "default_i2", + "type": "text", + "primaryKey": false, + "notNull": false, + "autoincrement": false + }, + "default_i3": { + "name": "default_i3", + "type": "text", + "primaryKey": false, + "notNull": false, + "autoincrement": false + }, + "default_i4": { + "name": "default_i4", + "type": "text", + "primaryKey": false, + "notNull": false, + "autoincrement": false + }, + "default_i5": { + "name": "default_i5", + "type": "text", + "primaryKey": false, + "notNull": false, + "autoincrement": false + }, + "host": { + "name": "host", + "type": "text", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "port": { + "name": "port", + "type": "integer", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "created_at": { + "name": "created_at", + "type": "text", + "primaryKey": false, + "notNull": true, + "autoincrement": false, + "default": "(CURRENT_TIMESTAMP)" + }, + "updated_at": { + "name": "updated_at", + "type": "text", + "primaryKey": false, + "notNull": true, + "autoincrement": false, + "default": "(CURRENT_TIMESTAMP)" + } + }, + "indexes": {}, + "foreignKeys": { + "user_configs_table_id_interfaces_table_name_fk": { + "name": "user_configs_table_id_interfaces_table_name_fk", + "tableFrom": "user_configs_table", + "tableTo": "interfaces_table", + "columnsFrom": [ + "id" + ], + "columnsTo": [ + "name" + ], + "onDelete": "cascade", + "onUpdate": "cascade" + } + }, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "checkConstraints": {} + } + }, + "views": {}, + "enums": {}, + "_meta": { + "schemas": {}, + "tables": {}, + "columns": {} + }, + "internal": { + "indexes": {} + } +} \ No newline at end of file diff --git a/src/server/database/migrations/meta/0006_snapshot.json b/src/server/database/migrations/meta/0006_snapshot.json new file mode 100644 index 00000000..391b660a --- /dev/null +++ b/src/server/database/migrations/meta/0006_snapshot.json @@ -0,0 +1,1024 @@ +{ + "version": "6", + "dialect": "sqlite", + "id": "8a38844d-02cb-4fce-8692-db05920c91a5", + "prevId": "d41b21e2-3977-4e94-8250-d26a26678703", + "tables": { + "clients_table": { + "name": "clients_table", + "columns": { + "id": { + "name": "id", + "type": "integer", + "primaryKey": true, + "notNull": true, + "autoincrement": true + }, + "user_id": { + "name": "user_id", + "type": "integer", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "interface_id": { + "name": "interface_id", + "type": "text", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "name": { + "name": "name", + "type": "text", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "ipv4_address": { + "name": "ipv4_address", + "type": "text", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "ipv6_address": { + "name": "ipv6_address", + "type": "text", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "pre_up": { + "name": "pre_up", + "type": "text", + "primaryKey": false, + "notNull": true, + "autoincrement": false, + "default": "''" + }, + "post_up": { + "name": "post_up", + "type": "text", + "primaryKey": false, + "notNull": true, + "autoincrement": false, + "default": "''" + }, + "pre_down": { + "name": "pre_down", + "type": "text", + "primaryKey": false, + "notNull": true, + "autoincrement": false, + "default": "''" + }, + "post_down": { + "name": "post_down", + "type": "text", + "primaryKey": false, + "notNull": true, + "autoincrement": false, + "default": "''" + }, + "private_key": { + "name": "private_key", + "type": "text", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "public_key": { + "name": "public_key", + "type": "text", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "pre_shared_key": { + "name": "pre_shared_key", + "type": "text", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "expires_at": { + "name": "expires_at", + "type": "text", + "primaryKey": false, + "notNull": false, + "autoincrement": false + }, + "allowed_ips": { + "name": "allowed_ips", + "type": "text", + "primaryKey": false, + "notNull": false, + "autoincrement": false + }, + "server_allowed_ips": { + "name": "server_allowed_ips", + "type": "text", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "firewall_ips": { + "name": "firewall_ips", + "type": "text", + "primaryKey": false, + "notNull": false, + "autoincrement": false + }, + "persistent_keepalive": { + "name": "persistent_keepalive", + "type": "integer", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "mtu": { + "name": "mtu", + "type": "integer", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "j_c": { + "name": "j_c", + "type": "integer", + "primaryKey": false, + "notNull": false, + "autoincrement": false + }, + "j_min": { + "name": "j_min", + "type": "integer", + "primaryKey": false, + "notNull": false, + "autoincrement": false + }, + "j_max": { + "name": "j_max", + "type": "integer", + "primaryKey": false, + "notNull": false, + "autoincrement": false + }, + "i1": { + "name": "i1", + "type": "text", + "primaryKey": false, + "notNull": false, + "autoincrement": false + }, + "i2": { + "name": "i2", + "type": "text", + "primaryKey": false, + "notNull": false, + "autoincrement": false + }, + "i3": { + "name": "i3", + "type": "text", + "primaryKey": false, + "notNull": false, + "autoincrement": false + }, + "i4": { + "name": "i4", + "type": "text", + "primaryKey": false, + "notNull": false, + "autoincrement": false + }, + "i5": { + "name": "i5", + "type": "text", + "primaryKey": false, + "notNull": false, + "autoincrement": false + }, + "dns": { + "name": "dns", + "type": "text", + "primaryKey": false, + "notNull": false, + "autoincrement": false + }, + "server_endpoint": { + "name": "server_endpoint", + "type": "text", + "primaryKey": false, + "notNull": false, + "autoincrement": false + }, + "enabled": { + "name": "enabled", + "type": "integer", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "created_at": { + "name": "created_at", + "type": "text", + "primaryKey": false, + "notNull": true, + "autoincrement": false, + "default": "(CURRENT_TIMESTAMP)" + }, + "updated_at": { + "name": "updated_at", + "type": "text", + "primaryKey": false, + "notNull": true, + "autoincrement": false, + "default": "(CURRENT_TIMESTAMP)" + } + }, + "indexes": { + "clients_table_ipv4_address_unique": { + "name": "clients_table_ipv4_address_unique", + "columns": [ + "ipv4_address" + ], + "isUnique": true + }, + "clients_table_ipv6_address_unique": { + "name": "clients_table_ipv6_address_unique", + "columns": [ + "ipv6_address" + ], + "isUnique": true + }, + "public_key_interface_unique": { + "name": "public_key_interface_unique", + "columns": [ + "public_key", + "interface_id" + ], + "isUnique": true + } + }, + "foreignKeys": { + "clients_table_user_id_users_table_id_fk": { + "name": "clients_table_user_id_users_table_id_fk", + "tableFrom": "clients_table", + "tableTo": "users_table", + "columnsFrom": [ + "user_id" + ], + "columnsTo": [ + "id" + ], + "onDelete": "restrict", + "onUpdate": "cascade" + }, + "clients_table_interface_id_interfaces_table_name_fk": { + "name": "clients_table_interface_id_interfaces_table_name_fk", + "tableFrom": "clients_table", + "tableTo": "interfaces_table", + "columnsFrom": [ + "interface_id" + ], + "columnsTo": [ + "name" + ], + "onDelete": "cascade", + "onUpdate": "cascade" + } + }, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "checkConstraints": {} + }, + "general_table": { + "name": "general_table", + "columns": { + "id": { + "name": "id", + "type": "integer", + "primaryKey": true, + "notNull": true, + "autoincrement": false, + "default": 1 + }, + "setup_step": { + "name": "setup_step", + "type": "integer", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "session_password": { + "name": "session_password", + "type": "text", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "session_timeout": { + "name": "session_timeout", + "type": "integer", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "metrics_prometheus": { + "name": "metrics_prometheus", + "type": "integer", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "metrics_json": { + "name": "metrics_json", + "type": "integer", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "metrics_password": { + "name": "metrics_password", + "type": "text", + "primaryKey": false, + "notNull": false, + "autoincrement": false + }, + "created_at": { + "name": "created_at", + "type": "text", + "primaryKey": false, + "notNull": true, + "autoincrement": false, + "default": "(CURRENT_TIMESTAMP)" + }, + "updated_at": { + "name": "updated_at", + "type": "text", + "primaryKey": false, + "notNull": true, + "autoincrement": false, + "default": "(CURRENT_TIMESTAMP)" + } + }, + "indexes": {}, + "foreignKeys": {}, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "checkConstraints": {} + }, + "hooks_table": { + "name": "hooks_table", + "columns": { + "id": { + "name": "id", + "type": "text", + "primaryKey": true, + "notNull": true, + "autoincrement": false + }, + "pre_up": { + "name": "pre_up", + "type": "text", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "post_up": { + "name": "post_up", + "type": "text", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "pre_down": { + "name": "pre_down", + "type": "text", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "post_down": { + "name": "post_down", + "type": "text", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "created_at": { + "name": "created_at", + "type": "text", + "primaryKey": false, + "notNull": true, + "autoincrement": false, + "default": "(CURRENT_TIMESTAMP)" + }, + "updated_at": { + "name": "updated_at", + "type": "text", + "primaryKey": false, + "notNull": true, + "autoincrement": false, + "default": "(CURRENT_TIMESTAMP)" + } + }, + "indexes": {}, + "foreignKeys": { + "hooks_table_id_interfaces_table_name_fk": { + "name": "hooks_table_id_interfaces_table_name_fk", + "tableFrom": "hooks_table", + "tableTo": "interfaces_table", + "columnsFrom": [ + "id" + ], + "columnsTo": [ + "name" + ], + "onDelete": "cascade", + "onUpdate": "cascade" + } + }, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "checkConstraints": {} + }, + "interfaces_table": { + "name": "interfaces_table", + "columns": { + "name": { + "name": "name", + "type": "text", + "primaryKey": true, + "notNull": true, + "autoincrement": false + }, + "device": { + "name": "device", + "type": "text", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "port": { + "name": "port", + "type": "integer", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "private_key": { + "name": "private_key", + "type": "text", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "public_key": { + "name": "public_key", + "type": "text", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "ipv4_cidr": { + "name": "ipv4_cidr", + "type": "text", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "ipv6_cidr": { + "name": "ipv6_cidr", + "type": "text", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "mtu": { + "name": "mtu", + "type": "integer", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "j_c": { + "name": "j_c", + "type": "integer", + "primaryKey": false, + "notNull": false, + "autoincrement": false, + "default": 7 + }, + "j_min": { + "name": "j_min", + "type": "integer", + "primaryKey": false, + "notNull": false, + "autoincrement": false, + "default": 10 + }, + "j_max": { + "name": "j_max", + "type": "integer", + "primaryKey": false, + "notNull": false, + "autoincrement": false, + "default": 1000 + }, + "s1": { + "name": "s1", + "type": "integer", + "primaryKey": false, + "notNull": false, + "autoincrement": false, + "default": 128 + }, + "s2": { + "name": "s2", + "type": "integer", + "primaryKey": false, + "notNull": false, + "autoincrement": false, + "default": 56 + }, + "s3": { + "name": "s3", + "type": "integer", + "primaryKey": false, + "notNull": false, + "autoincrement": false + }, + "s4": { + "name": "s4", + "type": "integer", + "primaryKey": false, + "notNull": false, + "autoincrement": false + }, + "h1": { + "name": "h1", + "type": "text", + "primaryKey": false, + "notNull": false, + "autoincrement": false + }, + "h2": { + "name": "h2", + "type": "text", + "primaryKey": false, + "notNull": false, + "autoincrement": false + }, + "h3": { + "name": "h3", + "type": "text", + "primaryKey": false, + "notNull": false, + "autoincrement": false + }, + "h4": { + "name": "h4", + "type": "text", + "primaryKey": false, + "notNull": false, + "autoincrement": false + }, + "i1": { + "name": "i1", + "type": "text", + "primaryKey": false, + "notNull": false, + "autoincrement": false + }, + "i2": { + "name": "i2", + "type": "text", + "primaryKey": false, + "notNull": false, + "autoincrement": false + }, + "i3": { + "name": "i3", + "type": "text", + "primaryKey": false, + "notNull": false, + "autoincrement": false + }, + "i4": { + "name": "i4", + "type": "text", + "primaryKey": false, + "notNull": false, + "autoincrement": false + }, + "i5": { + "name": "i5", + "type": "text", + "primaryKey": false, + "notNull": false, + "autoincrement": false + }, + "enabled": { + "name": "enabled", + "type": "integer", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "firewall_enabled": { + "name": "firewall_enabled", + "type": "integer", + "primaryKey": false, + "notNull": true, + "autoincrement": false, + "default": false + }, + "created_at": { + "name": "created_at", + "type": "text", + "primaryKey": false, + "notNull": true, + "autoincrement": false, + "default": "(CURRENT_TIMESTAMP)" + }, + "updated_at": { + "name": "updated_at", + "type": "text", + "primaryKey": false, + "notNull": true, + "autoincrement": false, + "default": "(CURRENT_TIMESTAMP)" + } + }, + "indexes": { + "interfaces_table_port_unique": { + "name": "interfaces_table_port_unique", + "columns": [ + "port" + ], + "isUnique": true + } + }, + "foreignKeys": {}, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "checkConstraints": {} + }, + "one_time_links_table": { + "name": "one_time_links_table", + "columns": { + "id": { + "name": "id", + "type": "integer", + "primaryKey": true, + "notNull": true, + "autoincrement": false + }, + "one_time_link": { + "name": "one_time_link", + "type": "text", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "expires_at": { + "name": "expires_at", + "type": "text", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "created_at": { + "name": "created_at", + "type": "text", + "primaryKey": false, + "notNull": true, + "autoincrement": false, + "default": "(CURRENT_TIMESTAMP)" + }, + "updated_at": { + "name": "updated_at", + "type": "text", + "primaryKey": false, + "notNull": true, + "autoincrement": false, + "default": "(CURRENT_TIMESTAMP)" + } + }, + "indexes": { + "one_time_links_table_one_time_link_unique": { + "name": "one_time_links_table_one_time_link_unique", + "columns": [ + "one_time_link" + ], + "isUnique": true + } + }, + "foreignKeys": { + "one_time_links_table_id_clients_table_id_fk": { + "name": "one_time_links_table_id_clients_table_id_fk", + "tableFrom": "one_time_links_table", + "tableTo": "clients_table", + "columnsFrom": [ + "id" + ], + "columnsTo": [ + "id" + ], + "onDelete": "cascade", + "onUpdate": "cascade" + } + }, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "checkConstraints": {} + }, + "users_table": { + "name": "users_table", + "columns": { + "id": { + "name": "id", + "type": "integer", + "primaryKey": true, + "notNull": true, + "autoincrement": true + }, + "username": { + "name": "username", + "type": "text", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "password": { + "name": "password", + "type": "text", + "primaryKey": false, + "notNull": false, + "autoincrement": false + }, + "email": { + "name": "email", + "type": "text", + "primaryKey": false, + "notNull": false, + "autoincrement": false + }, + "name": { + "name": "name", + "type": "text", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "role": { + "name": "role", + "type": "integer", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "totp_key": { + "name": "totp_key", + "type": "text", + "primaryKey": false, + "notNull": false, + "autoincrement": false + }, + "totp_verified": { + "name": "totp_verified", + "type": "integer", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "enabled": { + "name": "enabled", + "type": "integer", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "oauth_provider": { + "name": "oauth_provider", + "type": "text", + "primaryKey": false, + "notNull": false, + "autoincrement": false + }, + "oauth_id": { + "name": "oauth_id", + "type": "text", + "primaryKey": false, + "notNull": false, + "autoincrement": false + }, + "created_at": { + "name": "created_at", + "type": "text", + "primaryKey": false, + "notNull": true, + "autoincrement": false, + "default": "(CURRENT_TIMESTAMP)" + }, + "updated_at": { + "name": "updated_at", + "type": "text", + "primaryKey": false, + "notNull": true, + "autoincrement": false, + "default": "(CURRENT_TIMESTAMP)" + } + }, + "indexes": { + "users_table_username_unique": { + "name": "users_table_username_unique", + "columns": [ + "username" + ], + "isUnique": true + }, + "users_table_email_unique": { + "name": "users_table_email_unique", + "columns": [ + "email" + ], + "isUnique": true + }, + "oauth_provider_id_unique": { + "name": "oauth_provider_id_unique", + "columns": [ + "oauth_provider", + "oauth_id" + ], + "isUnique": true + } + }, + "foreignKeys": {}, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "checkConstraints": {} + }, + "user_configs_table": { + "name": "user_configs_table", + "columns": { + "id": { + "name": "id", + "type": "text", + "primaryKey": true, + "notNull": true, + "autoincrement": false + }, + "default_mtu": { + "name": "default_mtu", + "type": "integer", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "default_persistent_keepalive": { + "name": "default_persistent_keepalive", + "type": "integer", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "default_dns": { + "name": "default_dns", + "type": "text", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "default_allowed_ips": { + "name": "default_allowed_ips", + "type": "text", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "default_j_c": { + "name": "default_j_c", + "type": "integer", + "primaryKey": false, + "notNull": false, + "autoincrement": false, + "default": 7 + }, + "default_j_min": { + "name": "default_j_min", + "type": "integer", + "primaryKey": false, + "notNull": false, + "autoincrement": false, + "default": 10 + }, + "default_j_max": { + "name": "default_j_max", + "type": "integer", + "primaryKey": false, + "notNull": false, + "autoincrement": false, + "default": 1000 + }, + "default_i1": { + "name": "default_i1", + "type": "text", + "primaryKey": false, + "notNull": false, + "autoincrement": false + }, + "default_i2": { + "name": "default_i2", + "type": "text", + "primaryKey": false, + "notNull": false, + "autoincrement": false + }, + "default_i3": { + "name": "default_i3", + "type": "text", + "primaryKey": false, + "notNull": false, + "autoincrement": false + }, + "default_i4": { + "name": "default_i4", + "type": "text", + "primaryKey": false, + "notNull": false, + "autoincrement": false + }, + "default_i5": { + "name": "default_i5", + "type": "text", + "primaryKey": false, + "notNull": false, + "autoincrement": false + }, + "host": { + "name": "host", + "type": "text", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "port": { + "name": "port", + "type": "integer", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "created_at": { + "name": "created_at", + "type": "text", + "primaryKey": false, + "notNull": true, + "autoincrement": false, + "default": "(CURRENT_TIMESTAMP)" + }, + "updated_at": { + "name": "updated_at", + "type": "text", + "primaryKey": false, + "notNull": true, + "autoincrement": false, + "default": "(CURRENT_TIMESTAMP)" + } + }, + "indexes": {}, + "foreignKeys": { + "user_configs_table_id_interfaces_table_name_fk": { + "name": "user_configs_table_id_interfaces_table_name_fk", + "tableFrom": "user_configs_table", + "tableTo": "interfaces_table", + "columnsFrom": [ + "id" + ], + "columnsTo": [ + "name" + ], + "onDelete": "cascade", + "onUpdate": "cascade" + } + }, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "checkConstraints": {} + } + }, + "views": {}, + "enums": {}, + "_meta": { + "schemas": {}, + "tables": {}, + "columns": {} + }, + "internal": { + "indexes": {} + } +} \ No newline at end of file diff --git a/src/server/database/migrations/meta/_journal.json b/src/server/database/migrations/meta/_journal.json index fefdc1c9..0ae8c800 100644 --- a/src/server/database/migrations/meta/_journal.json +++ b/src/server/database/migrations/meta/_journal.json @@ -36,6 +36,20 @@ "when": 1771352889394, "tag": "0004_optimal_mandrill", "breakpoints": true + }, + { + "idx": 5, + "version": "6", + "when": 1780035570366, + "tag": "0005_clumsy_korg", + "breakpoints": true + }, + { + "idx": 6, + "version": "6", + "when": 1782122902196, + "tag": "0006_clear_leech", + "breakpoints": true } ] } \ No newline at end of file diff --git a/src/server/database/repositories/client/schema.ts b/src/server/database/repositories/client/schema.ts index f60e0547..eb3a707e 100644 --- a/src/server/database/repositories/client/schema.ts +++ b/src/server/database/repositories/client/schema.ts @@ -1,62 +1,75 @@ import { sql, relations } from 'drizzle-orm'; -import { int, sqliteTable, text } from 'drizzle-orm/sqlite-core'; +import { int, sqliteTable, text, uniqueIndex } from 'drizzle-orm/sqlite-core'; -import { oneTimeLink, user, wgInterface } from '../../schema'; +import { wgInterface } from '../interface/schema'; +import { oneTimeLink } from '../oneTimeLink/schema'; +import { user } from '../user/schema'; /** null means use value from userConfig */ -export const client = sqliteTable('clients_table', { - id: int().primaryKey({ autoIncrement: true }), - userId: int('user_id') - .notNull() - .references(() => user.id, { - onDelete: 'restrict', - onUpdate: 'cascade', - }), - interfaceId: text('interface_id') - .notNull() - .references(() => wgInterface.name, { - onDelete: 'cascade', - onUpdate: 'cascade', - }), - name: text().notNull(), - ipv4Address: text('ipv4_address').notNull().unique(), - ipv6Address: text('ipv6_address').notNull().unique(), - preUp: text('pre_up').default('').notNull(), - postUp: text('post_up').default('').notNull(), - preDown: text('pre_down').default('').notNull(), - postDown: text('post_down').default('').notNull(), - privateKey: text('private_key').notNull(), - publicKey: text('public_key').notNull(), - preSharedKey: text('pre_shared_key').notNull(), - expiresAt: text('expires_at'), - allowedIps: text('allowed_ips', { mode: 'json' }).$type(), - serverAllowedIps: text('server_allowed_ips', { mode: 'json' }) - .$type() - .notNull(), - // Firewall-enforced allowed IPs (null = use allowedIps) - firewallIps: text('firewall_ips', { mode: 'json' }).$type(), - persistentKeepalive: int('persistent_keepalive').notNull(), - mtu: int().notNull(), - jC: int('j_c'), - jMin: int('j_min'), - jMax: int('j_max'), - i1: text(), - i2: text(), - i3: text(), - i4: text(), - i5: text(), - dns: text({ mode: 'json' }).$type(), - serverEndpoint: text('server_endpoint'), - enabled: int({ mode: 'boolean' }).notNull(), - createdAt: text('created_at') - .notNull() - .default(sql`(CURRENT_TIMESTAMP)`), - updatedAt: text('updated_at') - .notNull() - .default(sql`(CURRENT_TIMESTAMP)`) - .$onUpdate(() => sql`(CURRENT_TIMESTAMP)`), -}); +export const client = sqliteTable( + 'clients_table', + { + id: int().primaryKey({ autoIncrement: true }), + userId: int('user_id') + .notNull() + .references(() => user.id, { + onDelete: 'restrict', + onUpdate: 'cascade', + }), + interfaceId: text('interface_id') + .notNull() + .references(() => wgInterface.name, { + onDelete: 'cascade', + onUpdate: 'cascade', + }), + name: text().notNull(), + ipv4Address: text('ipv4_address').notNull().unique(), + ipv6Address: text('ipv6_address').notNull().unique(), + preUp: text('pre_up').default('').notNull(), + postUp: text('post_up').default('').notNull(), + preDown: text('pre_down').default('').notNull(), + postDown: text('post_down').default('').notNull(), + privateKey: text('private_key').notNull(), + publicKey: text('public_key').notNull(), + preSharedKey: text('pre_shared_key').notNull(), + expiresAt: text('expires_at'), + allowedIps: text('allowed_ips', { mode: 'json' }).$type(), + serverAllowedIps: text('server_allowed_ips', { mode: 'json' }) + .$type() + .notNull(), + // Firewall-enforced allowed IPs (null = use allowedIps) + firewallIps: text('firewall_ips', { mode: 'json' }).$type< + string[] | null + >(), + persistentKeepalive: int('persistent_keepalive').notNull(), + mtu: int().notNull(), + jC: int('j_c'), + jMin: int('j_min'), + jMax: int('j_max'), + i1: text(), + i2: text(), + i3: text(), + i4: text(), + i5: text(), + dns: text({ mode: 'json' }).$type(), + serverEndpoint: text('server_endpoint'), + enabled: int({ mode: 'boolean' }).notNull(), + createdAt: text('created_at') + .notNull() + .default(sql`(CURRENT_TIMESTAMP)`), + updatedAt: text('updated_at') + .notNull() + .default(sql`(CURRENT_TIMESTAMP)`) + .$onUpdate(() => sql`(CURRENT_TIMESTAMP)`), + }, + (table) => [ + uniqueIndex('public_key_interface_unique').on( + table.publicKey, + table.interfaceId + ), + ] +); export const clientsRelations = relations(client, ({ one }) => ({ oneTimeLink: one(oneTimeLink, { diff --git a/src/server/database/repositories/client/service.ts b/src/server/database/repositories/client/service.ts index 97953cda..14b664b1 100644 --- a/src/server/database/repositories/client/service.ts +++ b/src/server/database/repositories/client/service.ts @@ -1,11 +1,18 @@ import { eq, sql, or, like, and } from 'drizzle-orm'; import { containsCidr, parseCidr } from 'cidr-tools'; + import { client } from './schema'; import type { ClientCreateFromExistingType, ClientCreateType, + ClientQueryType, UpdateClientType, } from './types'; + +import Database from '#server/utils/Database'; +import { nextIP } from '#server/utils/ip'; +import type { ID } from '#server/utils/types'; +import { wg } from '#server/utils/wgHelper'; import type { DBType } from '#db/sqlite'; import { wgInterface, userConfig } from '#db/schema'; @@ -18,63 +25,9 @@ function createPreparedStatement(db: DBType) { }, }) .prepare(), - findAllPublic: db.query.client - .findMany({ - with: { - oneTimeLink: true, - }, - columns: { - privateKey: false, - preSharedKey: false, - }, - }) - .prepare(), findById: db.query.client .findFirst({ where: eq(client.id, sql.placeholder('id')) }) .prepare(), - findByUserId: db.query.client - .findMany({ - where: eq(client.userId, sql.placeholder('userId')), - with: { oneTimeLink: true }, - columns: { - privateKey: false, - preSharedKey: false, - }, - }) - .prepare(), - findAllPublicFiltered: db.query.client - .findMany({ - where: or( - like(client.name, sql.placeholder('filter')), - like(client.ipv4Address, sql.placeholder('filter')), - like(client.ipv6Address, sql.placeholder('filter')) - ), - with: { - oneTimeLink: true, - }, - columns: { - privateKey: false, - preSharedKey: false, - }, - }) - .prepare(), - findByUserIdFiltered: db.query.client - .findMany({ - where: and( - eq(client.userId, sql.placeholder('userId')), - or( - like(client.name, sql.placeholder('filter')), - like(client.ipv4Address, sql.placeholder('filter')), - like(client.ipv6Address, sql.placeholder('filter')) - ) - ), - with: { oneTimeLink: true }, - columns: { - privateKey: false, - preSharedKey: false, - }, - }) - .prepare(), toggle: db .update(client) .set({ enabled: sql.placeholder('enabled') as never as boolean }) @@ -96,15 +49,6 @@ export class ClientService { this.#statements = createPreparedStatement(db); } - async getForUser(userId: ID) { - const result = await this.#statements.findByUserId.execute({ userId }); - return result.map((row) => ({ - ...row, - createdAt: new Date(row.createdAt), - updatedAt: new Date(row.updatedAt), - })); - } - /** * Never return values directly from this function. Use {@link getAllPublic} instead. */ @@ -120,25 +64,40 @@ export class ClientService { /** * Returns all clients without sensitive data */ - async getAllPublic() { - const result = await this.#statements.findAllPublic.execute(); - return result.map((row) => ({ - ...row, - createdAt: new Date(row.createdAt), - updatedAt: new Date(row.updatedAt), - })); - } + async getAllPublic({ filter, sort }: ClientQueryType) { + const filters = []; - /** - * Get clients based on user ID and filter conditions - */ - async getForUserFiltered(userId: ID, filter: string) { - const filterPattern = `%${filter.toLowerCase()}%`; + if (filter?.trim()) { + const filterPattern = `%${filter?.toLowerCase()}%`; + filters.push( + or( + like(client.name, filterPattern), + like(client.ipv4Address, filterPattern), + like(client.ipv6Address, filterPattern) + ) + ); + } - const result = await this.#statements.findByUserIdFiltered.execute({ - userId, - filter: filterPattern, - }); + const result = await this.#db.query.client + .findMany({ + with: { + oneTimeLink: true, + }, + where: and(...filters), + columns: { + privateKey: false, + preSharedKey: false, + }, + orderBy: (t, { asc, desc }) => { + if (sort === 'desc') { + return desc(t.name); + } else { + // default to asc + return asc(t.name); + } + }, + }) + .execute(); return result.map((row) => ({ ...row, @@ -148,14 +107,40 @@ export class ClientService { } /** - * Get all clients based on filter conditions without sensitive data + * Returns all clients without sensitive data belonging to user */ - async getAllPublicFiltered(filter: string) { - const filterPattern = `%${filter.toLowerCase()}%`; + async getAllForUser(userId: ID, { filter, sort }: ClientQueryType) { + const filters = []; - const result = await this.#statements.findAllPublicFiltered.execute({ - filter: filterPattern, - }); + if (filter?.trim()) { + const filterPattern = `%${filter?.toLowerCase()}%`; + filters.push( + or( + like(client.name, filterPattern), + like(client.ipv4Address, filterPattern), + like(client.ipv6Address, filterPattern) + ) + ); + } + + const result = await this.#db.query.client + .findMany({ + where: and(eq(client.userId, userId), ...filters), + with: { oneTimeLink: true }, + columns: { + privateKey: false, + preSharedKey: false, + }, + orderBy: (t, { asc, desc }) => { + if (sort === 'desc') { + return desc(t.name); + } else { + // default to asc + return asc(t.name); + } + }, + }) + .execute(); return result.map((row) => ({ ...row, diff --git a/src/server/database/repositories/client/types.ts b/src/server/database/repositories/client/types.ts index b0aa7fa3..f7497e31 100644 --- a/src/server/database/repositories/client/types.ts +++ b/src/server/database/repositories/client/types.ts @@ -1,8 +1,28 @@ import type { InferSelectModel } from 'drizzle-orm'; import z from 'zod'; +import { isIPv4, isIPv6 } from 'is-ip'; import type { client } from './schema'; +import { + AddressSchema, + AllowedIpsSchema, + DnsSchema, + EnabledSchema, + FirewallIpsSchema, + HookSchema, + ISchema, + JcSchema, + JmaxSchema, + JminSchema, + MtuSchema, + PersistentKeepaliveSchema, + controlStringRefine, + safeStringRefine, + schemaForType, + t, +} from '#server/utils/types'; + export type ClientType = InferSelectModel; export type ClientNextIpType = Pick; @@ -20,7 +40,8 @@ export type UpdateClientType = Omit< const name = z .string({ message: t('zod.client.name') }) .min(1, t('zod.client.name')) - .pipe(safeStringRefine); + .pipe(safeStringRefine) + .pipe(controlStringRefine); // TODO?: validate iso string const expiresAt = z @@ -32,14 +53,16 @@ const expiresAt = z const address4 = z .string({ message: t('zod.client.address4') }) .min(1, { message: t('zod.client.address4') }) - .pipe(safeStringRefine); + .pipe(safeStringRefine) + .pipe(controlStringRefine) + .refine((v) => isIPv4(v)); const address6 = z .string({ message: t('zod.client.address6') }) .min(1, { message: t('zod.client.address6') }) - .pipe(safeStringRefine); - -const filter = z.string().optional(); + .pipe(safeStringRefine) + .pipe(controlStringRefine) + .refine((v) => isIPv6(v)); const serverAllowedIps = z.array(AddressSchema, { message: t('zod.client.serverAllowedIps'), @@ -52,8 +75,13 @@ export const ClientCreateSchema = z.object({ export type ClientCreateType = z.infer; +const filter = z.string().pipe(safeStringRefine); + +const sort = z.enum(['asc', 'desc']); + export const ClientQuerySchema = z.object({ - filter: filter, + filter: filter.optional(), + sort: sort.optional(), }); export type ClientQueryType = z.infer; @@ -87,7 +115,6 @@ export const ClientUpdateSchema = schemaForType()( }) ); -// TODO: investigate if coerce is bad const clientId = z.coerce.number({ message: t('zod.client.id') }); export const ClientGetSchema = z.object({ diff --git a/src/server/database/repositories/general/service.ts b/src/server/database/repositories/general/service.ts index ef629fd8..cc477a48 100644 --- a/src/server/database/repositories/general/service.ts +++ b/src/server/database/repositories/general/service.ts @@ -1,6 +1,9 @@ import { sql } from 'drizzle-orm'; + import { general } from './schema'; import type { GeneralUpdateType } from './types'; + +import { hashPassword, isValidPasswordHash } from '#server/utils/password'; import type { DBType } from '#db/sqlite'; function createPreparedStatement(db: DBType) { diff --git a/src/server/database/repositories/general/types.ts b/src/server/database/repositories/general/types.ts index e16bc4c6..55e3ce6b 100644 --- a/src/server/database/repositories/general/types.ts +++ b/src/server/database/repositories/general/types.ts @@ -1,7 +1,10 @@ import type { InferSelectModel } from 'drizzle-orm'; import z from 'zod'; + import type { general } from './schema'; +import { safeStringRefine, t } from '#server/utils/types'; + export type GeneralType = InferSelectModel; const sessionTimeout = z.number({ message: t('zod.general.sessionTimeout') }); @@ -11,6 +14,7 @@ const metricsEnabled = z.boolean({ message: t('zod.general.metricsEnabled') }); const metricsPassword = z .string({ message: t('zod.general.metricsPassword') }) .min(1, { message: t('zod.general.metricsPassword') }) + .pipe(safeStringRefine) .nullable(); export const GeneralUpdateSchema = z.object({ diff --git a/src/server/database/repositories/hooks/schema.ts b/src/server/database/repositories/hooks/schema.ts index 001eecf0..99883bc8 100644 --- a/src/server/database/repositories/hooks/schema.ts +++ b/src/server/database/repositories/hooks/schema.ts @@ -1,7 +1,7 @@ import { sql } from 'drizzle-orm'; import { sqliteTable, text } from 'drizzle-orm/sqlite-core'; -import { wgInterface } from '../../schema'; +import { wgInterface } from '../interface/schema'; export const hooks = sqliteTable('hooks_table', { /** same as `wgInterface.name` */ diff --git a/src/server/database/repositories/hooks/service.ts b/src/server/database/repositories/hooks/service.ts index b3ea4073..41af78b8 100644 --- a/src/server/database/repositories/hooks/service.ts +++ b/src/server/database/repositories/hooks/service.ts @@ -1,6 +1,8 @@ import { eq, sql } from 'drizzle-orm'; + import { hooks } from './schema'; import type { HooksUpdateType } from './types'; + import type { DBType } from '#db/sqlite'; function createPreparedStatement(db: DBType) { diff --git a/src/server/database/repositories/hooks/types.ts b/src/server/database/repositories/hooks/types.ts index f9bba9a4..e5368cc7 100644 --- a/src/server/database/repositories/hooks/types.ts +++ b/src/server/database/repositories/hooks/types.ts @@ -1,7 +1,10 @@ import type { InferSelectModel } from 'drizzle-orm'; import z from 'zod'; + import type { hooks } from './schema'; +import { HookSchema, schemaForType } from '#server/utils/types'; + export type HooksType = InferSelectModel; export type HooksUpdateType = Omit; diff --git a/src/server/database/repositories/interface/schema.ts b/src/server/database/repositories/interface/schema.ts index bf1bd315..d4c21264 100644 --- a/src/server/database/repositories/interface/schema.ts +++ b/src/server/database/repositories/interface/schema.ts @@ -1,7 +1,8 @@ import { sql, relations } from 'drizzle-orm'; import { int, sqliteTable, text } from 'drizzle-orm/sqlite-core'; -import { userConfig, hooks } from '../../schema'; +import { hooks } from '../hooks/schema'; +import { userConfig } from '../userConfig/schema'; // maybe support multiple interfaces in the future export const wgInterface = sqliteTable('interfaces_table', { diff --git a/src/server/database/repositories/interface/service.ts b/src/server/database/repositories/interface/service.ts index 4c0d0b42..7100835d 100644 --- a/src/server/database/repositories/interface/service.ts +++ b/src/server/database/repositories/interface/service.ts @@ -1,7 +1,10 @@ import { eq, sql } from 'drizzle-orm'; import { parseCidr } from 'cidr-tools'; + import { wgInterface } from './schema'; import type { InterfaceCidrUpdateType, InterfaceUpdateType } from './types'; + +import { nextIPFromUsedAddresses } from '#server/utils/ip'; import { client as clientSchema } from '#db/schema'; import type { DBType } from '#db/sqlite'; @@ -90,21 +93,36 @@ export class InterfaceService { .execute(); const clients = await tx.query.client.findMany().execute(); + const ipv4Addresses = new Set( + clients.map((client) => client.ipv4Address) + ); + const ipv6Addresses = new Set( + clients.map((client) => client.ipv6Address) + ); for (const client of clients) { - // TODO: optimize - const clients = await tx.query.client.findMany().execute(); - // only calculate ip if cidr has changed let nextIpv4 = client.ipv4Address; if (data.ipv4Cidr !== oldCidr.ipv4Cidr) { - nextIpv4 = nextIP(4, parseCidr(data.ipv4Cidr), clients); + nextIpv4 = nextIPFromUsedAddresses( + 4, + parseCidr(data.ipv4Cidr), + ipv4Addresses + ); + ipv4Addresses.add(nextIpv4); + ipv4Addresses.delete(client.ipv4Address); } let nextIpv6 = client.ipv6Address; if (data.ipv6Cidr !== oldCidr.ipv6Cidr) { - nextIpv6 = nextIP(6, parseCidr(data.ipv6Cidr), clients); + nextIpv6 = nextIPFromUsedAddresses( + 6, + parseCidr(data.ipv6Cidr), + ipv6Addresses + ); + ipv6Addresses.add(nextIpv6); + ipv6Addresses.delete(client.ipv6Address); } await tx diff --git a/src/server/database/repositories/interface/types.ts b/src/server/database/repositories/interface/types.ts index 5e46cfc6..501a6add 100644 --- a/src/server/database/repositories/interface/types.ts +++ b/src/server/database/repositories/interface/types.ts @@ -1,8 +1,24 @@ import type { InferSelectModel } from 'drizzle-orm'; import z from 'zod'; import isCidr from 'is-cidr'; + import type { wgInterface } from './schema'; +import { + EnabledSchema, + HSchema, + ISchema, + JcSchema, + JmaxSchema, + JminSchema, + MtuSchema, + PortSchema, + SSchema, + safeStringRefine, + schemaForType, + t, +} from '#server/utils/types'; + export type InterfaceType = InferSelectModel; export type InterfaceCreateType = Omit< diff --git a/src/server/database/repositories/oneTimeLink/schema.ts b/src/server/database/repositories/oneTimeLink/schema.ts index 3d0f4caf..83a0eef1 100644 --- a/src/server/database/repositories/oneTimeLink/schema.ts +++ b/src/server/database/repositories/oneTimeLink/schema.ts @@ -1,7 +1,7 @@ import { sql, relations } from 'drizzle-orm'; import { int, sqliteTable, text } from 'drizzle-orm/sqlite-core'; -import { client } from '../../schema'; +import { client } from '../client/schema'; export const oneTimeLink = sqliteTable('one_time_links_table', { /** same as `client.id` */ diff --git a/src/server/database/repositories/oneTimeLink/service.ts b/src/server/database/repositories/oneTimeLink/service.ts index 49162ac0..c2e8dbee 100644 --- a/src/server/database/repositories/oneTimeLink/service.ts +++ b/src/server/database/repositories/oneTimeLink/service.ts @@ -1,6 +1,9 @@ import { eq, sql } from 'drizzle-orm'; import CRC32 from 'crc-32'; + import { oneTimeLink } from './schema'; + +import type { ID } from '#server/utils/types'; import type { DBType } from '#db/sqlite'; function createPreparedStatement(db: DBType) { @@ -52,6 +55,10 @@ export class OneTimeLinkService { } generate(id: ID) { + // SECURITY + // This is known to be vulnerable to brute force attacks + // Mitigations: Small Window, One Time Use + // Making it longer defeats the whole purpose const key = `${id}-${Math.floor(Math.random() * 1000)}`; const oneTimeLink = Math.abs(CRC32.str(key)).toString(16); const expiresAt = new Date(Date.now() + 5 * 60 * 1000).toISOString(); @@ -60,6 +67,11 @@ export class OneTimeLinkService { } erase(id: ID) { + // SECURITY + // This is known the extend the Window for brute force attacks + // Reason: Set the expiresAt to 10 seconds in the future to allow a second request to get the otl + // some browser apparently make two requests when downloading a file + // cant find the bug report anymore, maybe this can be removed? const expiresAt = new Date(Date.now() + 10 * 1000).toISOString(); return this.#statements.erase.execute({ id, expiresAt }); } diff --git a/src/server/database/repositories/oneTimeLink/types.ts b/src/server/database/repositories/oneTimeLink/types.ts index f05270df..d022c298 100644 --- a/src/server/database/repositories/oneTimeLink/types.ts +++ b/src/server/database/repositories/oneTimeLink/types.ts @@ -1,7 +1,10 @@ import type { InferSelectModel } from 'drizzle-orm'; import { z } from 'zod'; + import type { oneTimeLink } from './schema'; +import { safeStringRefine, t } from '#server/utils/types'; + export type OneTimeLinkType = InferSelectModel; const oneTimeLinkType = z diff --git a/src/server/database/repositories/user/schema.ts b/src/server/database/repositories/user/schema.ts index 77eb13e2..e1d70679 100644 --- a/src/server/database/repositories/user/schema.ts +++ b/src/server/database/repositories/user/schema.ts @@ -1,26 +1,41 @@ import { sql, relations } from 'drizzle-orm'; -import { int, sqliteTable, text } from 'drizzle-orm/sqlite-core'; +import { int, sqliteTable, text, uniqueIndex } from 'drizzle-orm/sqlite-core'; -import { client } from '../../schema'; +import { client } from '../client/schema'; -export const user = sqliteTable('users_table', { - id: int().primaryKey({ autoIncrement: true }), - username: text().notNull().unique(), - password: text().notNull(), - email: text(), - name: text().notNull(), - role: int().$type().notNull(), - totpKey: text('totp_key'), - totpVerified: int('totp_verified', { mode: 'boolean' }).notNull(), - enabled: int({ mode: 'boolean' }).notNull(), - createdAt: text('created_at') - .notNull() - .default(sql`(CURRENT_TIMESTAMP)`), - updatedAt: text('updated_at') - .notNull() - .default(sql`(CURRENT_TIMESTAMP)`) - .$onUpdate(() => sql`(CURRENT_TIMESTAMP)`), -}); +import type { Role } from '#shared/utils/permissions'; +import type { OAUTH_PROVIDER } from '#server/utils/oauth'; + +export const user = sqliteTable( + 'users_table', + { + id: int().primaryKey({ autoIncrement: true }), + username: text().notNull().unique(), + /** `password == null` means password login disabled */ + password: text(), + email: text().unique(), + name: text().notNull(), + role: int().$type().notNull(), + totpKey: text('totp_key'), + totpVerified: int('totp_verified', { mode: 'boolean' }).notNull(), + enabled: int({ mode: 'boolean' }).notNull(), + oauthProvider: text('oauth_provider').$type(), + oauthId: text('oauth_id'), + createdAt: text('created_at') + .notNull() + .default(sql`(CURRENT_TIMESTAMP)`), + updatedAt: text('updated_at') + .notNull() + .default(sql`(CURRENT_TIMESTAMP)`) + .$onUpdate(() => sql`(CURRENT_TIMESTAMP)`), + }, + (table) => [ + uniqueIndex('oauth_provider_id_unique').on( + table.oauthProvider, + table.oauthId + ), + ] +); export const usersRelations = relations(user, ({ many }) => ({ clients: many(client), diff --git a/src/server/database/repositories/user/service.ts b/src/server/database/repositories/user/service.ts index cecf0df8..ed88f2d0 100644 --- a/src/server/database/repositories/user/service.ts +++ b/src/server/database/repositories/user/service.ts @@ -1,7 +1,14 @@ -import { eq, sql } from 'drizzle-orm'; +import { eq, sql, and } from 'drizzle-orm'; import { TOTP } from 'otpauth'; + import { user } from './schema'; import type { UserType } from './types'; + +import { WG_ENV } from '#server/utils/config'; +import type { OAUTH_PROVIDER } from '#server/utils/oauth'; +import { hashPassword, isPasswordValid } from '#server/utils/password'; +import type { ID } from '#server/utils/types'; +import { roles } from '#shared/utils/permissions'; import type { DBType } from '#db/sqlite'; type LoginResult = @@ -13,10 +20,33 @@ type LoginResult = success: false; error: | 'INCORRECT_CREDENTIALS' - | 'TOTP_REQUIRED' | 'USER_DISABLED' | 'INVALID_TOTP_CODE' | 'UNEXPECTED_ERROR'; + } + | { + success: false; + error: 'TOTP_REQUIRED'; + userId: ID; + }; + +type LoginWithOAuthResult = + | { + success: true; + user: UserType; + } + | { + success: false; + error: + | 'USER_DISABLED' + | 'USER_ALREADY_LINKED' + | 'UNEXPECTED_ERROR' + | 'AUTO_REGISTER_DISABLED'; + } + | { + success: false; + error: 'TOTP_REQUIRED'; + userId: ID; }; function createPreparedStatement(db: DBType) { @@ -113,7 +143,11 @@ export class UserService { return this.#statements.update.execute({ id, name, email }); } - async updatePassword(id: ID, currentPassword: string, newPassword: string) { + async updatePassword( + id: ID, + currentPassword: string | null, + newPassword: string + ) { const hash = await hashPassword(newPassword); return this.#db.transaction(async (tx) => { @@ -126,13 +160,20 @@ export class UserService { throw new Error('User not found'); } - const passwordValid = await isPasswordValid( - currentPassword, - txUser.password - ); + // only check password if already set + if (txUser.password !== null) { + if (!currentPassword) { + throw new Error('Invalid password'); + } - if (!passwordValid) { - throw new Error('Invalid password'); + const passwordValid = await isPasswordValid( + currentPassword, + txUser.password + ); + + if (!passwordValid) { + throw new Error('Invalid password'); + } } await tx @@ -147,42 +188,32 @@ export class UserService { return this.#statements.updateKey.execute({ id, key }); } - login(username: string, password: string, code: string | undefined) { + login(username: string, password: string) { return this.#db.transaction(async (tx): Promise => { const txUser = await tx.query.user .findFirst({ where: eq(user.username, username) }) .execute(); - if (!txUser) { + // always check to avoid timing attack + const userHashPassword = txUser?.password ?? null; + const passwordValid = await isPasswordValid(password, userHashPassword); + + if (!txUser || !passwordValid) { return { success: false, error: 'INCORRECT_CREDENTIALS' }; } - const passwordValid = await isPasswordValid(password, txUser.password); - - if (!passwordValid) { - return { success: false, error: 'INCORRECT_CREDENTIALS' }; - } - - if (txUser.totpVerified) { - if (!code) { - return { success: false, error: 'TOTP_REQUIRED' }; - } else { - const totpKey = txUser.totpKey; - if (!totpKey) { - return { success: false, error: 'UNEXPECTED_ERROR' }; - } - - const totp = this.#createTotp({ username: txUser.username, totpKey }); - if (totp.validate({ token: code, window: 1 }) === null) { - return { success: false, error: 'INVALID_TOTP_CODE' }; - } - } - } - if (!txUser.enabled) { return { success: false, error: 'USER_DISABLED' }; } + if (txUser.totpVerified) { + return { + success: false, + error: 'TOTP_REQUIRED', + userId: txUser.id, + }; + } + return { success: true, user: txUser }; }); } @@ -197,6 +228,10 @@ export class UserService { throw new Error('User not found'); } + if (txUser.totpVerified) { + throw new Error('TOTP is already verified'); + } + const totpKey = txUser.totpKey; if (!totpKey) { throw new Error('TOTP key is not set'); @@ -241,4 +276,187 @@ export class UserService { .execute(); }); } + + async validateTotpCode(id: ID, code: string) { + const txUser = await this.#db.query.user + .findFirst({ where: eq(user.id, id) }) + .execute(); + + if (!txUser || !txUser.totpVerified || !txUser.totpKey) { + return 'INVALID_TOTP_CODE' as const; + } + + const totp = this.#createTotp({ + username: txUser.username, + totpKey: txUser.totpKey, + }); + const isValid = totp.validate({ token: code, window: 1 }) !== null; + + if (!isValid) { + return 'INVALID_TOTP_CODE' as const; + } + + if (!txUser.enabled) { + return 'USER_DISABLED' as const; + } + + return 'success' as const; + } + + /** + * Login or register user with OAuth provider. + * If user with the same email already exists, link account with OAuth provider. + * Otherwise, create new user. + */ + async loginWithOAuth( + provider: OAUTH_PROVIDER, + oauthId: string, + username: string, + email: string, + name: string + ): Promise { + return this.#db.transaction(async (tx) => { + const userById = await tx.query.user + .findFirst({ + where: and( + eq(user.oauthProvider, provider), + eq(user.oauthId, oauthId) + ), + }) + .execute(); + + if (userById) { + if (!userById.enabled) { + return { success: false, error: 'USER_DISABLED' }; + } + if (userById.totpVerified) { + return { + success: false, + error: 'TOTP_REQUIRED', + userId: userById.id, + }; + } + return { success: true, user: userById }; + } + + const userByEmail = await tx.query.user + .findFirst({ + where: eq(user.email, email), + }) + .execute(); + + if (userByEmail) { + if (!userByEmail.enabled) { + return { success: false, error: 'USER_DISABLED' }; + } + if (userByEmail.oauthProvider && userByEmail.oauthId) { + return { + success: false, + error: 'USER_ALREADY_LINKED', + }; + } + + await tx + .update(user) + .set({ oauthProvider: provider, oauthId: oauthId }) + .where(eq(user.id, userByEmail.id)) + .execute(); + + if (userByEmail.totpVerified) { + return { + success: false, + error: 'TOTP_REQUIRED', + userId: userByEmail.id, + }; + } + + // TODO: return updated user + return { success: true, user: userByEmail }; + } + + if (!WG_ENV.OAUTH_AUTO_REGISTER) { + return { success: false, error: 'AUTO_REGISTER_DISABLED' }; + } + + // Create new user + const newUsers = await tx + .insert(user) + .values({ + username, + password: null, + email, + name, + role: roles.ADMIN, + totpVerified: false, + enabled: true, + oauthProvider: provider, + oauthId, + }) + .returning(); + const newUser = newUsers[0]; + + if (!newUser) { + return { success: false as const, error: 'UNEXPECTED_ERROR' as const }; + } + return { success: true as const, user: newUser }; + }); + } + + unlinkOauth(id: ID) { + return this.#db.transaction(async (tx) => { + const txUser = await tx.query.user + .findFirst({ where: eq(user.id, id) }) + .execute(); + + if (!txUser) { + throw new Error('User not found'); + } + + // can't unlink if no way to log back in + if (!txUser.password) { + throw new Error('Password login not enabled'); + } + + await tx + .update(user) + .set({ oauthProvider: null, oauthId: null }) + .where(eq(user.id, id)) + .execute(); + }); + } + + async linkOauth(id: ID, provider: OAUTH_PROVIDER, oauthId: string) { + return this.#db.transaction(async (tx) => { + const txUser = await tx.query.user + .findFirst({ where: eq(user.id, id) }) + .execute(); + + if (!txUser) { + throw new Error('User not found'); + } + + if (txUser.oauthProvider || txUser.oauthId) { + throw new Error('User already linked with an OAuth provider'); + } + + const existingUser = await tx.query.user + .findFirst({ + where: and( + eq(user.oauthProvider, provider), + eq(user.oauthId, oauthId) + ), + }) + .execute(); + + if (existingUser) { + throw new Error('OAuth account already linked with another user'); + } + + await tx + .update(user) + .set({ oauthProvider: provider, oauthId: oauthId }) + .where(eq(user.id, id)) + .execute(); + }); + } } diff --git a/src/server/database/repositories/user/types.ts b/src/server/database/repositories/user/types.ts index 4743be73..925483c7 100644 --- a/src/server/database/repositories/user/types.ts +++ b/src/server/database/repositories/user/types.ts @@ -1,7 +1,10 @@ import type { InferSelectModel } from 'drizzle-orm'; import z from 'zod'; + import type { user } from './schema'; +import { safeStringRefine, t } from '#server/utils/types'; + export type UserType = InferSelectModel; const username = z @@ -18,14 +21,16 @@ const remember = z.boolean({ message: t('zod.user.remember') }); const totpCode = z .string({ message: t('zod.user.totpCode') }) + // min and max to improve error messages .min(6, t('zod.user.totpCode')) + .max(6, t('zod.user.totpCode')) + .regex(/^\d{6}$/, t('zod.user.totpCode')) .pipe(safeStringRefine); export const UserLoginSchema = z.object({ username: username, password: password, remember: remember, - totpCode: totpCode.optional(), }); export const UserSetupSchema = z @@ -44,9 +49,8 @@ const name = z .pipe(safeStringRefine); const email = z - .string({ message: t('zod.user.email') }) - .min(5, t('zod.user.email')) .email({ message: t('zod.user.emailInvalid') }) + .min(5, t('zod.user.email')) .pipe(safeStringRefine) .nullable(); @@ -57,7 +61,7 @@ export const UserUpdateSchema = z.object({ export const UserUpdatePasswordSchema = z .object({ - currentPassword: password, + currentPassword: password.nullable(), newPassword: password, confirmPassword: password, }) @@ -78,3 +82,7 @@ export const UserUpdateTotpSchema = z.union([ currentPassword: password, }), ]); + +export const Verify2faSchema = z.object({ + totpCode: totpCode, +}); diff --git a/src/server/database/repositories/userConfig/schema.ts b/src/server/database/repositories/userConfig/schema.ts index 3e8497a1..01dd6baf 100644 --- a/src/server/database/repositories/userConfig/schema.ts +++ b/src/server/database/repositories/userConfig/schema.ts @@ -1,7 +1,7 @@ import { sql } from 'drizzle-orm'; import { int, sqliteTable, text } from 'drizzle-orm/sqlite-core'; -import { wgInterface } from '../../schema'; +import { wgInterface } from '../interface/schema'; // default* means clients store it themselves export const userConfig = sqliteTable('user_configs_table', { diff --git a/src/server/database/repositories/userConfig/service.ts b/src/server/database/repositories/userConfig/service.ts index ecc3c4cc..db18c8d0 100644 --- a/src/server/database/repositories/userConfig/service.ts +++ b/src/server/database/repositories/userConfig/service.ts @@ -1,6 +1,8 @@ import { eq, sql } from 'drizzle-orm'; + import { userConfig } from './schema'; import type { UserConfigUpdateType } from './types'; + import { wgInterface } from '#db/schema'; import type { DBType } from '#db/sqlite'; diff --git a/src/server/database/repositories/userConfig/types.ts b/src/server/database/repositories/userConfig/types.ts index 3043ea14..48183044 100644 --- a/src/server/database/repositories/userConfig/types.ts +++ b/src/server/database/repositories/userConfig/types.ts @@ -1,7 +1,23 @@ import type { InferSelectModel } from 'drizzle-orm'; import z from 'zod'; + import type { userConfig } from './schema'; +import { + AllowedIpsSchema, + DnsSchema, + ISchema, + JcSchema, + JmaxSchema, + JminSchema, + MtuSchema, + PersistentKeepaliveSchema, + PortSchema, + safeStringRefine, + schemaForType, + t, +} from '#server/utils/types'; + export type UserConfigType = InferSelectModel; const host = z diff --git a/src/server/database/schema.ts b/src/server/database/schema.ts index ae12a76c..8527bcfa 100644 --- a/src/server/database/schema.ts +++ b/src/server/database/schema.ts @@ -1,4 +1,4 @@ -// Make sure to not use any Path Aliases in these files +// ! Do not use Path Aliases in this or any of these files export * from './repositories/client/schema'; export * from './repositories/general/schema'; export * from './repositories/hooks/schema'; diff --git a/src/server/database/sqlite.ts b/src/server/database/sqlite.ts index 4b0f6723..59469ccc 100644 --- a/src/server/database/sqlite.ts +++ b/src/server/database/sqlite.ts @@ -4,14 +4,15 @@ import { createClient } from '@libsql/client'; import { createDebug } from 'obug'; import { eq } from 'drizzle-orm'; -import * as schema from './schema'; -import { ClientService } from './repositories/client/service'; -import { GeneralService } from './repositories/general/service'; -import { UserService } from './repositories/user/service'; -import { UserConfigService } from './repositories/userConfig/service'; -import { InterfaceService } from './repositories/interface/service'; -import { HooksService } from './repositories/hooks/service'; -import { OneTimeLinkService } from './repositories/oneTimeLink/service'; +import { GeneralService } from '#db/repositories/general/service'; +import { UserService } from '#db/repositories/user/service'; +import { UserConfigService } from '#db/repositories/userConfig/service'; +import { InterfaceService } from '#db/repositories/interface/service'; +import { HooksService } from '#db/repositories/hooks/service'; +import { OneTimeLinkService } from '#db/repositories/oneTimeLink/service'; +import { ClientService } from '#db/repositories/client/service'; +import * as schema from '#db/schema'; +import { WG_ENV, WG_INITIAL_ENV } from '#server/utils/config'; const DB_DEBUG = createDebug('Database'); @@ -68,6 +69,7 @@ async function migrate() { if (e instanceof Error) { DB_DEBUG('Failed to migrate database:', e.message); } + throw e; } } diff --git a/src/server/middleware/setup.ts b/src/server/middleware/setup.ts index 374cad7b..bbeaac9e 100644 --- a/src/server/middleware/setup.ts +++ b/src/server/middleware/setup.ts @@ -1,3 +1,7 @@ +import { defineEventHandler, getRequestURL, sendRedirect } from 'h3'; + +import Database from '#server/utils/Database'; + /* First setup of wg-easy */ export default defineEventHandler(async (event) => { const url = getRequestURL(event); diff --git a/src/server/plugins/manager.ts b/src/server/plugins/manager.ts index 701e052e..67d894cd 100644 --- a/src/server/plugins/manager.ts +++ b/src/server/plugins/manager.ts @@ -1,12 +1,19 @@ +import { defineNitroPlugin } from 'nitropack/runtime'; + +import WireGuard from '#server/utils/WireGuard'; +import { RELEASE } from '#server/utils/config'; + export default defineNitroPlugin((nitroApp) => { - console.log(`====================================================`); - console.log(` wg-easy - https://github.com/wg-easy/wg-easy `); - console.log(`====================================================`); - console.log(`| wg-easy: ${RELEASE.padEnd(38)} |`); - console.log(`| Node: ${process.version.padEnd(38)} |`); - console.log(`| Platform: ${process.platform.padEnd(38)} |`); - console.log(`| Arch: ${process.arch.padEnd(38)} |`); - console.log(`====================================================`); + console.log(` +┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓ +┃ wg-easy - https://github.com/wg-easy/wg-easy ┃ +┣━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┫ +┃ wg-easy: ${RELEASE.padEnd(38)} ┃ +┃ Node: ${process.version.padEnd(38)} ┃ +┃ Platform: ${process.platform.padEnd(38)} ┃ +┃ Arch: ${process.arch.padEnd(38)} ┃ +┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛ +`); nitroApp.hooks.hook('close', async () => { console.log('Shutting down'); await WireGuard.Shutdown(); diff --git a/src/server/routes/cnf/[oneTimeLink].ts b/src/server/routes/cnf/[oneTimeLink].ts index bc38d9ea..a75b691d 100644 --- a/src/server/routes/cnf/[oneTimeLink].ts +++ b/src/server/routes/cnf/[oneTimeLink].ts @@ -1,3 +1,13 @@ +import { + createError, + defineEventHandler, + getValidatedRouterParams, + setHeader, +} from 'h3'; + +import Database from '#server/utils/Database'; +import WireGuard from '#server/utils/WireGuard'; +import { validateZod } from '#server/utils/types'; import { OneTimeLinkGetSchema } from '#db/repositories/oneTimeLink/types'; export default defineEventHandler(async (event) => { @@ -14,6 +24,13 @@ export default defineEventHandler(async (event) => { }); } + if (new Date() > new Date(otl.expiresAt)) { + throw createError({ + statusCode: 410, + statusMessage: 'One Time Link has expired', + }); + } + const client = await Database.clients.get(otl.id); if (!client) { throw createError({ diff --git a/src/server/routes/metrics/json.get.ts b/src/server/routes/metrics/json.get.ts index ae9b2879..cd4f3dad 100644 --- a/src/server/routes/metrics/json.get.ts +++ b/src/server/routes/metrics/json.get.ts @@ -1,3 +1,7 @@ +import WireGuard from '#server/utils/WireGuard'; +import { defineMetricsHandler } from '#server/utils/handler'; +import { isPeerConnected } from '#shared/utils/time'; + export default defineMetricsHandler('json', async () => { return getMetricsJSON(); }); diff --git a/src/server/routes/metrics/prometheus.get.ts b/src/server/routes/metrics/prometheus.get.ts index 23a1b638..9da7bee1 100644 --- a/src/server/routes/metrics/prometheus.get.ts +++ b/src/server/routes/metrics/prometheus.get.ts @@ -1,3 +1,11 @@ +import { setHeader } from 'h3'; + +import Database from '#server/utils/Database'; +import WireGuard from '#server/utils/WireGuard'; +import { defineMetricsHandler } from '#server/utils/handler'; +import { formatPrometheusLabels } from '#server/utils/prometheus'; +import { isPeerConnected } from '#shared/utils/time'; + export default defineMetricsHandler('prometheus', async ({ event }) => { setHeader(event, 'Content-Type', 'text/plain'); return getPrometheusResponse(); @@ -20,7 +28,13 @@ async function getPrometheusResponse() { wireguardConnectedPeersCount++; } - const id = `interface="${wgInterface.name}",enabled="${client.enabled}",ipv4Address="${client.ipv4Address}",ipv6Address="${client.ipv6Address}",name="${client.name}"`; + const id = formatPrometheusLabels({ + interface: wgInterface.name, + enabled: client.enabled, + ipv4Address: client.ipv4Address, + ipv6Address: client.ipv6Address, + name: client.name, + }); wireguardSentBytes.push( `wireguard_sent_bytes{${id}} ${client.transferTx ?? 0}` @@ -34,7 +48,7 @@ async function getPrometheusResponse() { ); } - const id = `interface="${wgInterface.name}"`; + const id = formatPrometheusLabels({ interface: wgInterface.name }); const returnText = [ '# HELP wireguard_configured_peers', diff --git a/src/server/utils/Database.ts b/src/server/utils/Database.ts index 76ae6797..7231d1c0 100644 --- a/src/server/utils/Database.ts +++ b/src/server/utils/Database.ts @@ -1,3 +1,4 @@ +import WireGuard from '#server/utils/WireGuard'; /** * Changing the Database Provider * This design allows for easy swapping of different database implementations. @@ -16,9 +17,14 @@ const nullObject = new Proxy( // eslint-disable-next-line import/no-mutable-exports let provider = nullObject as never as DBServiceType; -connect().then((db) => { - provider = db; - WireGuard.Startup(); -}); +connect() + .then((db) => { + provider = db; + WireGuard.Startup(); + }) + .catch((err) => { + console.log('Failed to connect to Database:', err); + process.exit(1); + }); export default provider; diff --git a/src/server/utils/WireGuard.ts b/src/server/utils/WireGuard.ts index 9ffc8ccb..d99149dc 100644 --- a/src/server/utils/WireGuard.ts +++ b/src/server/utils/WireGuard.ts @@ -1,6 +1,17 @@ import fs from 'node:fs/promises'; + import { createDebug } from 'obug'; + +import Database from '#server/utils/Database'; +import { mergeClientStatuses } from '#server/utils/clientStatus'; +import { OLD_ENV, WG_ENV } from '#server/utils/config'; +import { firewall } from '#server/utils/firewall'; +import { encodeQRCode } from '#server/utils/qr'; +import type { ID } from '#server/utils/types'; +import { wg } from '#server/utils/wgHelper'; +import { setIntervalImmediately } from '#shared/utils/time'; import type { InterfaceType } from '#db/repositories/interface/types'; +import type { ClientQueryType } from '#db/repositories/client/types'; const WG_DEBUG = createDebug('WireGuard'); @@ -78,15 +89,10 @@ class WireGuard { WG_DEBUG('Config synced successfully.'); } - async getClientsForUser(userId: ID, filter?: string) { + async getClientsForUser(userId: ID, query: ClientQueryType) { const wgInterface = await Database.interfaces.get(); - let dbClients; - if (filter?.trim()) { - dbClients = await Database.clients.getForUserFiltered(userId, filter); - } else { - dbClients = await Database.clients.getForUser(userId); - } + const dbClients = await Database.clients.getAllForUser(userId, query); const clients = dbClients.map((client) => ({ ...client, @@ -98,21 +104,7 @@ class WireGuard { // Loop WireGuard status const dump = await wg.dump(wgInterface.name); - dump.forEach( - ({ publicKey, latestHandshakeAt, endpoint, transferRx, transferTx }) => { - const client = clients.find((client) => client.publicKey === publicKey); - if (!client) { - return; - } - - client.latestHandshakeAt = latestHandshakeAt; - client.endpoint = endpoint; - client.transferRx = transferRx; - client.transferTx = transferTx; - } - ); - - return clients; + return mergeClientStatuses(clients, dump); } async dumpByPublicKey(publicKey: string) { @@ -126,15 +118,10 @@ class WireGuard { return clientDump; } - async getAllClients(filter?: string) { + async getAllClients(query: ClientQueryType = {}) { const wgInterface = await Database.interfaces.get(); - let dbClients; - if (filter?.trim()) { - dbClients = await Database.clients.getAllPublicFiltered(filter); - } else { - dbClients = await Database.clients.getAllPublic(); - } + const dbClients = await Database.clients.getAllPublic(query); const clients = dbClients.map((client) => ({ ...client, @@ -146,21 +133,7 @@ class WireGuard { // Loop WireGuard status const dump = await wg.dump(wgInterface.name); - dump.forEach( - ({ publicKey, latestHandshakeAt, endpoint, transferRx, transferTx }) => { - const client = clients.find((client) => client.publicKey === publicKey); - if (!client) { - return; - } - - client.latestHandshakeAt = latestHandshakeAt; - client.endpoint = endpoint; - client.transferRx = transferRx; - client.transferTx = transferTx; - } - ); - - return clients; + return mergeClientStatuses(clients, dump); } async getClientConfiguration({ clientId }: { clientId: ID }) { diff --git a/src/server/utils/clientStatus.ts b/src/server/utils/clientStatus.ts new file mode 100644 index 00000000..1c44f0a0 --- /dev/null +++ b/src/server/utils/clientStatus.ts @@ -0,0 +1,30 @@ +type StatusFields = { + publicKey: string; + latestHandshakeAt: Date | null; + endpoint: string | null; + transferRx: number | null; + transferTx: number | null; +}; + +export function mergeClientStatuses( + clients: T[], + statuses: readonly StatusFields[] +): T[] { + const clientsByPublicKey = new Map( + clients.map((client) => [client.publicKey, client]) + ); + + for (const status of statuses) { + const client = clientsByPublicKey.get(status.publicKey); + if (!client) { + continue; + } + + client.latestHandshakeAt = status.latestHandshakeAt; + client.endpoint = status.endpoint; + client.transferRx = status.transferRx; + client.transferTx = status.transferTx; + } + + return clients; +} diff --git a/src/server/utils/cmd.ts b/src/server/utils/cmd.ts index 70c979c9..9a0b41c2 100644 --- a/src/server/utils/cmd.ts +++ b/src/server/utils/cmd.ts @@ -1,4 +1,5 @@ import childProcess from 'child_process'; + import { createDebug } from 'obug'; const CMD_DEBUG = createDebug('CMD'); diff --git a/src/server/utils/config.ts b/src/server/utils/config.ts index 4498442a..3aa1fb8d 100644 --- a/src/server/utils/config.ts +++ b/src/server/utils/config.ts @@ -1,6 +1,13 @@ import { createDebug } from 'obug'; import packageJson from '@@/package.json'; +import { exec } from '#server/utils/cmd'; +import { + OAUTH_PROVIDERS, + isConfiguredOauthProvider, + isValidOauthProvider, +} from '#server/utils/oauth'; + export const RELEASE = 'v' + packageJson.version; export const SERVER_DEBUG = createDebug('Server'); @@ -30,6 +37,11 @@ const detectAwg = async (): Promise<'awg' | 'wg'> => { } else return 'wg'; }; +const oauthProviders = process.env.OAUTH_PROVIDERS?.split(',') + .map((v) => v.trim()) + .filter((v) => isValidOauthProvider(v)) + .filter((v) => isConfiguredOauthProvider(OAUTH_PROVIDERS[v])); + export const WG_ENV = { /** UI is hosted on HTTP instead of HTTPS */ INSECURE: process.env.INSECURE === 'true', @@ -39,8 +51,31 @@ export const WG_ENV = { DISABLE_IPV6: process.env.DISABLE_IPV6 === 'true', WG_EXECUTABLE: await detectAwg(), DISABLE_VERSION_CHECK: process.env.DISABLE_VERSION_CHECK === 'true', + /** List of enabled and configured OAuth providers */ + OAUTH_PROVIDERS: oauthProviders, + /** List of allowed OAuth domains */ + OAUTH_ALLOWED_DOMAINS: process.env.OAUTH_ALLOWED_DOMAINS?.split(',').map( + (v) => v.trim() + ), + /** Automatically register users that log in with an OAuth provider */ + OAUTH_AUTO_REGISTER: process.env.OAUTH_AUTO_REGISTER === 'true', + /** Which OAuth provider to automatically launch */ + OAUTH_AUTO_LAUNCH: + oauthProviders?.find((p) => p === process.env.OAUTH_AUTO_LAUNCH) ?? null, + /** Disable password authentication */ + DISABLE_PASSWORD_AUTH: process.env.DISABLE_PASSWORD_AUTH === 'true', }; +if (WG_ENV.OAUTH_PROVIDERS && WG_ENV.OAUTH_PROVIDERS.length > 0) { + SERVER_DEBUG(` +Enabled OAuth providers: ${WG_ENV.OAUTH_PROVIDERS.join(', ')} +Allowed OAuth domains: ${WG_ENV.OAUTH_ALLOWED_DOMAINS?.join(', ') ?? 'All'} +OAuth auto register: ${WG_ENV.OAUTH_AUTO_REGISTER ? 'Enabled' : 'Disabled'} +Password authentication: ${WG_ENV.DISABLE_PASSWORD_AUTH ? 'Disabled' : 'Enabled'} +Auto launch OAuth provider: ${WG_ENV.OAUTH_AUTO_LAUNCH ?? 'None'} +`); +} + export const WG_INITIAL_ENV = { ENABLED: process.env.INIT_ENABLED === 'true', USERNAME: process.env.INIT_USERNAME, diff --git a/src/server/utils/firewall.ts b/src/server/utils/firewall.ts index 76ad1c64..ef7998c6 100644 --- a/src/server/utils/firewall.ts +++ b/src/server/utils/firewall.ts @@ -1,6 +1,7 @@ import { createDebug } from 'obug'; import { isIPv6 } from 'is-ip'; +import { exec } from '#server/utils/cmd'; import type { ClientType } from '#db/repositories/client/types'; import type { InterfaceType } from '#db/repositories/interface/types'; import type { UserConfigType } from '#db/repositories/userConfig/types'; @@ -163,32 +164,38 @@ export const firewall = { /** * Initialize the custom chain if it doesn't exist */ - async initChain(interfaceName: string): Promise { + async initChain(interfaceName: string, enableIpv6: boolean): Promise { FW_DEBUG( `Initializing firewall chain ${CHAIN_NAME} for interface ${interfaceName}` ); // Create chain if not exists (iptables returns error if exists, so we ignore) await exec(`iptables -N ${CHAIN_NAME} 2>/dev/null || true`); - await exec(`ip6tables -N ${CHAIN_NAME} 2>/dev/null || true`); + if (enableIpv6) { + await exec(`ip6tables -N ${CHAIN_NAME} 2>/dev/null || true`); + } // Ensure chain is referenced from FORWARD (if not already) // Insert at position 1 to process before generic ACCEPT rules await exec( `iptables -C FORWARD -i ${interfaceName} -j ${CHAIN_NAME} 2>/dev/null || iptables -I FORWARD 1 -i ${interfaceName} -j ${CHAIN_NAME}` ); - await exec( - `ip6tables -C FORWARD -i ${interfaceName} -j ${CHAIN_NAME} 2>/dev/null || ip6tables -I FORWARD 1 -i ${interfaceName} -j ${CHAIN_NAME}` - ); + if (enableIpv6) { + await exec( + `ip6tables -C FORWARD -i ${interfaceName} -j ${CHAIN_NAME} 2>/dev/null || ip6tables -I FORWARD 1 -i ${interfaceName} -j ${CHAIN_NAME}` + ); + } }, /** * Flush all rules in the custom chain */ - async flushChain(): Promise { + async flushChain(enableIpv6: boolean): Promise { FW_DEBUG(`Flushing firewall chain ${CHAIN_NAME}`); await exec(`iptables -F ${CHAIN_NAME} 2>/dev/null || true`); - await exec(`ip6tables -F ${CHAIN_NAME} 2>/dev/null || true`); + if (enableIpv6) { + await exec(`ip6tables -F ${CHAIN_NAME} 2>/dev/null || true`); + } }, /** @@ -244,7 +251,7 @@ export const firewall = { ): Promise { if (!wgInterface.firewallEnabled) { FW_DEBUG('Firewall filtering disabled, removing any existing rules'); - await this.removeFiltering(wgInterface.name); + await this.removeFiltering(wgInterface.name, enableIpv6); return; } @@ -261,10 +268,10 @@ export const firewall = { FW_DEBUG('Rebuilding firewall rules...'); // Initialize chain structure - await this.initChain(wgInterface.name); + await this.initChain(wgInterface.name, enableIpv6); // Flush existing rules - await this.flushChain(); + await this.flushChain(enableIpv6); // Apply rules for each enabled client for (const client of clients) { @@ -298,22 +305,29 @@ export const firewall = { /** * Remove all firewall filtering (when feature is disabled) */ - async removeFiltering(interfaceName: string): Promise { + async removeFiltering( + interfaceName: string, + enableIpv6: boolean + ): Promise { FW_DEBUG(`Removing firewall filtering for interface ${interfaceName}`); // Remove jump rules from FORWARD chain await exec( `iptables -D FORWARD -i ${interfaceName} -j ${CHAIN_NAME} 2>/dev/null || true` ); - await exec( - `ip6tables -D FORWARD -i ${interfaceName} -j ${CHAIN_NAME} 2>/dev/null || true` - ); + if (enableIpv6) { + await exec( + `ip6tables -D FORWARD -i ${interfaceName} -j ${CHAIN_NAME} 2>/dev/null || true` + ); + } // Flush and delete the chain await exec(`iptables -F ${CHAIN_NAME} 2>/dev/null || true`); - await exec(`ip6tables -F ${CHAIN_NAME} 2>/dev/null || true`); await exec(`iptables -X ${CHAIN_NAME} 2>/dev/null || true`); - await exec(`ip6tables -X ${CHAIN_NAME} 2>/dev/null || true`); + if (enableIpv6) { + await exec(`ip6tables -F ${CHAIN_NAME} 2>/dev/null || true`); + await exec(`ip6tables -X ${CHAIN_NAME} 2>/dev/null || true`); + } }, /** diff --git a/src/server/utils/handler.ts b/src/server/utils/handler.ts index 5f0baa08..0be82757 100644 --- a/src/server/utils/handler.ts +++ b/src/server/utils/handler.ts @@ -1,4 +1,9 @@ +import { createError, defineEventHandler, getHeader } from 'h3'; import type { EventHandlerRequest, EventHandlerResponse, H3Event } from 'h3'; + +import Database from '#server/utils/Database'; +import { isPasswordValid } from '#server/utils/password'; +import { getCurrentUser } from '#server/utils/session'; import type { UserType } from '#db/repositories/user/types'; import type { SetupStepType } from '#db/repositories/general/types'; import { diff --git a/src/server/utils/ip.ts b/src/server/utils/ip.ts index c3c097e1..480519a8 100644 --- a/src/server/utils/ip.ts +++ b/src/server/utils/ip.ts @@ -1,8 +1,10 @@ import { Resolver } from 'node:dns/promises'; import { networkInterfaces } from 'node:os'; + import { stringifyIp } from 'ip-bigint'; import type { parseCidr } from 'cidr-tools'; +import { cacheFunction } from '#server/utils/cache'; import type { ClientNextIpType } from '#db/repositories/client/types'; type ParsedCidr = ReturnType; @@ -11,15 +13,24 @@ export function nextIP( version: 4 | 6, cidr: ParsedCidr, clients: ClientNextIpType[] +) { + const usedAddresses = new Set( + clients.map((client) => client[`ipv${version}Address`]) + ); + + return nextIPFromUsedAddresses(version, cidr, usedAddresses); +} + +export function nextIPFromUsedAddresses( + version: 4 | 6, + cidr: ParsedCidr, + usedAddresses: Set ) { let address; for (let i = cidr.start + 2n; i <= cidr.end - 1n; i++) { const currentIp = stringifyIp({ number: i, version: version }); - const client = clients.find((client) => { - return client[`ipv${version}Address`] === currentIp; - }); - if (!client) { + if (!usedAddresses.has(currentIp)) { address = currentIp; break; } diff --git a/src/server/utils/oauth.ts b/src/server/utils/oauth.ts new file mode 100644 index 00000000..30fa62d4 --- /dev/null +++ b/src/server/utils/oauth.ts @@ -0,0 +1,259 @@ +import { createError, getRequestURL, getRouterParam } from 'h3'; +import type { H3Event } from 'h3'; +import * as client from 'openid-client'; + +import { WG_ENV } from '#server/utils/config'; + +type OAuthConfig = { + friendlyName: string; + server: string; + scope: string; + clientId: string | undefined; + clientSecret: string | undefined; + params: Record; + isOIDC?: false; + userInfoFlow?: 'github'; +}; + +type ConfiguredOAuthConfig = OAuthConfig & { + clientId: string; + clientSecret: string; +}; + +const GoogleConfig: OAuthConfig = { + friendlyName: 'Google', + server: 'https://accounts.google.com', + scope: 'openid email profile', + clientId: process.env.OAUTH_GOOGLE_CLIENT_ID, + clientSecret: process.env.OAUTH_GOOGLE_CLIENT_SECRET, + params: { + access_type: 'online', + prompt: 'select_account', + }, +}; +const GithubConfig: OAuthConfig = { + friendlyName: 'GitHub', + server: 'https://github.com/login/oauth', + scope: 'read:user user:email', + clientId: process.env.OAUTH_GITHUB_CLIENT_ID, + clientSecret: process.env.OAUTH_GITHUB_CLIENT_SECRET, + params: { + allow_signup: 'false', + prompt: 'select_account', + }, + isOIDC: false, + userInfoFlow: 'github', +}; +const OidcConfig: OAuthConfig = { + friendlyName: process.env.OAUTH_OIDC_NAME ?? 'OIDC', + server: process.env.OAUTH_OIDC_SERVER ?? '', + scope: 'openid email profile', + clientId: process.env.OAUTH_OIDC_CLIENT_ID, + clientSecret: process.env.OAUTH_OIDC_CLIENT_SECRET, + params: {}, +}; + +export const OAUTH_PROVIDERS = { + google: GoogleConfig, + github: GithubConfig, + oidc: OidcConfig, +}; + +export type OAUTH_PROVIDER = keyof typeof OAUTH_PROVIDERS; + +export function isValidOauthProvider( + provider: string +): provider is OAUTH_PROVIDER { + if (provider in OAUTH_PROVIDERS) { + return true; + } + return false; +} + +export function isConfiguredOauthProvider( + oauthProvider: OAuthConfig +): oauthProvider is ConfiguredOAuthConfig { + if (!oauthProvider.clientId || !oauthProvider.clientSecret) { + return false; + } + return true; +} + +function getEnabledOauthProvider(provider: OAUTH_PROVIDER) { + if (!WG_ENV.OAUTH_PROVIDERS?.includes(provider)) { + return; + } + + // WG_ENV.OAUTH_PROVIDERS is filtered to configured providers during startup. + return OAUTH_PROVIDERS[provider] as ConfiguredOAuthConfig; +} + +export async function buildOauthConfig(event: H3Event) { + const provider = getRouterParam(event, 'provider'); + if (!provider || !isValidOauthProvider(provider)) { + throw createError({ + statusCode: 400, + statusMessage: 'Invalid provider', + }); + } + + const oauthProvider = getEnabledOauthProvider(provider); + if (!oauthProvider) { + throw createError({ + statusCode: 403, + statusMessage: 'Provider is not enabled', + }); + } + + const config = await client.discovery( + new URL(oauthProvider.server), + oauthProvider.clientId, + { + client_secret: oauthProvider.clientSecret, + } + ); + + return { config, providerConfig: oauthProvider, provider }; +} + +export async function githubUserInfoFlow(accessToken: string) { + const OAUTH_GITHUB_FLOW = { + userinfo_endpoint: 'https://api.github.com/user', + email_endpoint: 'https://api.github.com/user/emails', + }; + type OAUTH_GITHUB_USERINFO = { + id: number; + login: string; + avatar_url: string; + email: string | null; + name: string | null; + }; + type OAUTH_GITHUB_EMAIL = { + email: string; + primary: boolean; + verified: boolean; + visibility: string | null; + }[]; + + const response = await $fetch( + OAUTH_GITHUB_FLOW.userinfo_endpoint, + { + headers: { + 'User-Agent': 'wg-easy', + Authorization: `Bearer ${accessToken}`, + }, + } + ); + if (!response.email) { + const emailResponse = await $fetch( + OAUTH_GITHUB_FLOW.email_endpoint, + { + headers: { + 'User-Agent': 'wg-easy', + Authorization: `Bearer ${accessToken}`, + }, + } + ); + const primaryEmail = emailResponse.find((v) => v.primary && v.verified); + response.email = primaryEmail?.email || null; + } + return { + sub: response.id.toString(), + email: response.email ?? undefined, + email_verified: true, + preferred_username: response.login, + name: response.name || response.login, + }; +} + +type OauthState = { + oauth_nonce: string; + oauth_verifier: string; + oauth_state: string; +}; + +export async function getUserInfo( + event: H3Event, + config: client.Configuration, + state: OauthState, + providerConfig: OAuthConfig +) { + const currentUrl = getRequestURL(event); + + const tokens = await client.authorizationCodeGrant(config, currentUrl, { + pkceCodeVerifier: state.oauth_verifier, + expectedNonce: + providerConfig.isOIDC === false ? undefined : state.oauth_nonce, + expectedState: state.oauth_state, + idTokenExpected: providerConfig.isOIDC ?? true, + }); + + type SubjectType = string | undefined | typeof client.skipSubjectCheck; + let subject: SubjectType = tokens.claims()?.sub; + if (providerConfig.isOIDC === false) { + subject = client.skipSubjectCheck; + } + + if (!subject) { + throw createError({ + statusCode: 400, + statusMessage: "Can't get subject", + }); + } + + let userInfo: client.UserInfoResponse; + if (providerConfig.userInfoFlow === 'github') { + userInfo = await githubUserInfoFlow(tokens.access_token); + } else { + userInfo = await client.fetchUserInfo(config, tokens.access_token, subject); + } + + assertHasOauthProps(userInfo); + + if (!isAllowedDomain(userInfo.email)) { + throw createError({ + statusCode: 401, + statusMessage: 'Email domain not allowed', + }); + } + + return userInfo; +} + +type RequireKeys = Required>; + +function assertHasOauthProps( + userInfo: T +): asserts userInfo is T & RequireKeys { + if (!userInfo.sub) { + throw createError({ + statusCode: 400, + statusMessage: 'No sub set', + }); + } + + if (!userInfo.email) { + throw createError({ + statusCode: 400, + statusMessage: 'No email set', + }); + } + + if (!userInfo.email_verified) { + throw createError({ + statusCode: 401, + statusMessage: 'Email is not verified', + }); + } +} + +function isAllowedDomain(email: string) { + const emailDomain = email.slice(email.lastIndexOf('@') + 1); + if ( + WG_ENV.OAUTH_ALLOWED_DOMAINS && + !WG_ENV.OAUTH_ALLOWED_DOMAINS.includes(emailDomain) + ) { + return false; + } + return true; +} diff --git a/src/server/utils/password.ts b/src/server/utils/password.ts index 915795c7..edc48fd1 100644 --- a/src/server/utils/password.ts +++ b/src/server/utils/password.ts @@ -1,15 +1,22 @@ -// ! Auto Imports are not supported in this file - import argon2 from 'argon2'; import { deserialize } from '@phc/format'; +const DUMMY_HASH = + '$argon2id$v=19$m=65536,t=3,p=4$jsh6z1/SbZHYAiO/Ww9HZw$ikzkoXWqc2b0Pc4O8ZNJjp1xKZSb7SNM/3dPMNUPk9Y'; + /** - * Checks if `password` matches the hash. + * Checks if `password` matches the `hash`. + * + * Checks against `DUMMY_HASH` and returns false if `hash` is null */ -export function isPasswordValid( +export async function isPasswordValid( password: string, - hash: string + hash: string | null ): Promise { + if (hash === null) { + await argon2.verify(DUMMY_HASH, password); + return false; + } return argon2.verify(hash, password); } diff --git a/src/server/utils/prometheus.ts b/src/server/utils/prometheus.ts new file mode 100644 index 00000000..ca903f07 --- /dev/null +++ b/src/server/utils/prometheus.ts @@ -0,0 +1,17 @@ +export function escapePrometheusLabelValue(value: string): string { + return value + .replaceAll('\\', '\\\\') + .replaceAll('\n', '\\n') + .replaceAll('"', '\\"'); +} + +export function formatPrometheusLabels( + labels: Record +): string { + return Object.entries(labels) + .map( + ([name, value]) => + `${name}="${escapePrometheusLabelValue(String(value))}"` + ) + .join(','); +} diff --git a/src/server/utils/qr.ts b/src/server/utils/qr.ts index a597be7a..8378a35a 100644 --- a/src/server/utils/qr.ts +++ b/src/server/utils/qr.ts @@ -1,5 +1,3 @@ -// ! Auto Imports are not supported in this file - import type { ErrorCorrection } from 'qr'; import { encodeQR } from 'qr'; diff --git a/src/server/utils/release.ts b/src/server/utils/release.ts index 93d6d786..d53a3c24 100644 --- a/src/server/utils/release.ts +++ b/src/server/utils/release.ts @@ -1,3 +1,9 @@ +import { createError } from 'h3'; +import { $fetch } from 'ofetch'; + +import { cacheFunction } from '#server/utils/cache'; +import { RELEASE, SERVER_DEBUG, WG_ENV } from '#server/utils/config'; + type GithubRelease = { tag_name: string; body: string; diff --git a/src/server/utils/session.ts b/src/server/utils/session.ts index 1a144cea..a9a12275 100644 --- a/src/server/utils/session.ts +++ b/src/server/utils/session.ts @@ -1,8 +1,24 @@ +import { createError, getHeader, getSession, useSession } from 'h3'; import type { H3Event } from 'h3'; + +import Database from '#server/utils/Database'; +import { WG_ENV } from '#server/utils/config'; +import { isPasswordValid } from '#server/utils/password'; +import type { ID } from '#server/utils/types'; import type { UserType } from '#db/repositories/user/types'; export type WGSession = Partial<{ userId: ID; + pendingLogin: { + type: 'password' | 'oauth'; + userId: ID; + remember: boolean; + /** in milliseconds */ + expires_at: number; + }; + oauth_verifier: string; + oauth_nonce: string; + oauth_state: string; }>; const name = 'wg-easy'; @@ -40,11 +56,18 @@ export async function getCurrentUser(event: H3Event) { const authorization = getHeader(event, 'Authorization'); - let user: UserType | undefined = undefined; + let user: UserType | undefined; if (session.data.userId) { // Handle if authenticating using Session user = await Database.users.get(session.data.userId); } else if (authorization) { + if (WG_ENV.DISABLE_PASSWORD_AUTH) { + throw createError({ + statusCode: 403, + statusMessage: 'Password authentication is disabled', + }); + } + // Handle if authenticating using Header const [method, value] = authorization.split(' '); // Support Basic Authentication @@ -70,21 +93,14 @@ export async function getCurrentUser(event: H3Event) { }); } - // TODO: timing can be used to enumerate usernames - const foundUser = await Database.users.getByUsername(username); - if (!foundUser) { - throw createError({ - statusCode: 401, - statusMessage: 'Session failed', - }); - } - - const userHashPassword = foundUser.password; + // always check to avoid timing attack + const userHashPassword = foundUser?.password ?? null; const passwordValid = await isPasswordValid(password, userHashPassword); - if (!passwordValid) { + // can't login through basic auth if 2fa enabled + if (!foundUser || !passwordValid || foundUser.totpVerified) { throw createError({ statusCode: 401, statusMessage: 'Session failed', diff --git a/src/server/utils/template.ts b/src/server/utils/template.ts index 504a15dc..c3f1b0d9 100644 --- a/src/server/utils/template.ts +++ b/src/server/utils/template.ts @@ -1,5 +1,4 @@ -// ! Auto Imports are not supported in this file - +import { WG_ENV } from '#server/utils/config'; import type { InterfaceType } from '#db/repositories/interface/types'; /** diff --git a/src/server/utils/types.ts b/src/server/utils/types.ts index a0e9694e..be707967 100644 --- a/src/server/utils/types.ts +++ b/src/server/utils/types.ts @@ -1,4 +1,5 @@ -import type { ZodSchema } from 'zod'; +import { useTranslation } from '@intlify/h3'; +import type { ZodType } from 'zod'; import z from 'zod'; import type { H3Event, EventHandlerRequest } from 'h3'; import { isIP } from 'is-ip'; @@ -20,6 +21,15 @@ export const safeStringRefine = z { message: t('zod.stringMalformed') } ); +function hasControlChars(str: string) { + // eslint-disable-next-line no-control-regex + return /[\x00-\x1F\x7F]/.test(str); +} + +export const controlStringRefine = z + .string() + .refine((v) => !hasControlChars(v), { message: t('zod.stringMalformed') }); + export const EnabledSchema = z.boolean({ message: t('zod.enabled') }); export const MtuSchema = z @@ -70,7 +80,11 @@ export const HSchema = z }) .nullable(); -export const ISchema = z.string().nullable(); +export const ISchema = z + .string() + .pipe(safeStringRefine) + .pipe(controlStringRefine) + .nullable(); export const PortSchema = z .number({ message: t('zod.port') }) @@ -85,7 +99,8 @@ export const PersistentKeepaliveSchema = z export const AddressSchema = z .string({ message: t('zod.address') }) .min(1, { message: t('zod.address') }) - .pipe(safeStringRefine); + .pipe(safeStringRefine) + .pipe(controlStringRefine); export const DnsSchema = z.array(AddressSchema, { message: t('zod.dns') }); @@ -168,7 +183,7 @@ export const schemaForType = }; export function validateZod( - schema: ZodSchema, + schema: ZodType, event: H3Event ) { return async (data: unknown) => { @@ -203,6 +218,22 @@ export function validateZod( break; } break; + case 'too_big': + switch (v.origin) { + case 'string': + newMessage = t('zod.generic.stringMax', [ + t(v.message), + v.maximum, + ]); + break; + case 'number': + newMessage = t('zod.generic.numberMax', [ + t(v.message), + v.maximum, + ]); + break; + } + break; case 'invalid_type': { if (v.input === null || v.input === undefined) { newMessage = t('zod.generic.required', [ @@ -247,6 +278,7 @@ export function validateZod( }) .join('; '); } + // eslint-disable-next-line preserve-caught-error throw new Error(message); } }; diff --git a/src/server/utils/wgHelper.ts b/src/server/utils/wgHelper.ts index 0ad7ceff..1d312b66 100644 --- a/src/server/utils/wgHelper.ts +++ b/src/server/utils/wgHelper.ts @@ -1,9 +1,9 @@ -// ! Auto Imports are not supported in this file - import { parseCidr } from 'cidr-tools'; import { stringifyIp } from 'ip-bigint'; -import { removeNewlines } from './template'; +import { removeNewlines, iptablesTemplate } from '#server/utils/template'; +import { exec } from '#server/utils/cmd'; +import { WG_ENV } from '#server/utils/config'; import type { ClientType } from '#db/repositories/client/types'; import type { InterfaceType } from '#db/repositories/interface/types'; import type { UserConfigType } from '#db/repositories/userConfig/types'; diff --git a/src/shared/utils/permissions.ts b/src/shared/utils/permissions.ts index 12fd5570..d4c7c768 100644 --- a/src/shared/utils/permissions.ts +++ b/src/shared/utils/permissions.ts @@ -1,3 +1,5 @@ +import { createError } from 'h3'; + import type { ClientType } from '#db/repositories/client/types'; import type { UserType } from '#db/repositories/user/types'; @@ -47,8 +49,8 @@ type SharedUserType = export type SharedPublicUser = Pick< UserType, - 'id' | 'username' | 'name' | 'email' | 'totpVerified' -> & { role: BrandedNumber }; + 'id' | 'username' | 'name' | 'email' | 'totpVerified' | 'oauthProvider' +> & { role: BrandedNumber; hasPassword: boolean }; type PermissionCheck = | boolean @@ -144,7 +146,10 @@ export function hasPermissionsWithData( const isAllowed = hasPermissions(user, resource, action, data); if (!isAllowed) { - throw new Error('Permission denied'); + throw createError({ + statusCode: 403, + statusMessage: 'Permission denied', + }); } return isAllowed; diff --git a/src/test/tsconfig.json b/src/test/tsconfig.json new file mode 100644 index 00000000..d4dfeecb --- /dev/null +++ b/src/test/tsconfig.json @@ -0,0 +1,5 @@ +{ + "extends": "../.nuxt/tsconfig.server.json", + "compilerOptions": {}, + "include": ["./**/*.ts"] +} diff --git a/src/test/unit/clientStatus.spec.ts b/src/test/unit/clientStatus.spec.ts new file mode 100644 index 00000000..aecaacaa --- /dev/null +++ b/src/test/unit/clientStatus.spec.ts @@ -0,0 +1,53 @@ +import { describe, expect, test } from 'vitest'; + +import { mergeClientStatuses } from '#server/utils/clientStatus'; + +describe('mergeClientStatuses', () => { + test('merges matching status records by public key', () => { + const clients = [ + { + id: 1, + publicKey: 'first', + latestHandshakeAt: null, + endpoint: null, + transferRx: null, + transferTx: null, + }, + { + id: 2, + publicKey: 'second', + latestHandshakeAt: null, + endpoint: null, + transferRx: null, + transferTx: null, + }, + ]; + const handshake = new Date('2026-07-20T00:00:00Z'); + + const result = mergeClientStatuses(clients, [ + { + publicKey: 'second', + latestHandshakeAt: handshake, + endpoint: '192.0.2.1:51820', + transferRx: 100, + transferTx: 200, + }, + { + publicKey: 'unknown', + latestHandshakeAt: null, + endpoint: null, + transferRx: 0, + transferTx: 0, + }, + ]); + + expect(result).toBe(clients); + expect(result[0]?.endpoint).toBeNull(); + expect(result[1]).toMatchObject({ + latestHandshakeAt: handshake, + endpoint: '192.0.2.1:51820', + transferRx: 100, + transferTx: 200, + }); + }); +}); diff --git a/src/test/unit/firewall.spec.ts b/src/test/unit/firewall.spec.ts index 2b95ca21..53710112 100644 --- a/src/test/unit/firewall.spec.ts +++ b/src/test/unit/firewall.spec.ts @@ -1,8 +1,45 @@ -import { describe, expect, test } from 'vitest'; -import { firewallTestExports } from '../../server/utils/firewall'; -import { typesTestExports } from '../../server/utils/types'; +import { beforeEach, describe, expect, test, vi } from 'vitest'; + +import { exec } from '#server/utils/cmd'; +import { firewall, firewallTestExports } from '#server/utils/firewall'; +import { typesTestExports } from '#server/utils/types'; + +vi.mock('#server/utils/cmd', () => ({ + exec: vi.fn().mockResolvedValue(''), +})); + +const execMock = vi.mocked(exec); describe('firewall', () => { + beforeEach(() => { + execMock.mockClear(); + }); + + describe('IPv4-only chain management', () => { + test('does not invoke ip6tables when initializing and flushing', async () => { + await firewall.initChain('wg0', false); + await firewall.flushChain(false); + + expect(execMock).toHaveBeenCalledWith( + expect.stringContaining('iptables -C FORWARD -i wg0') + ); + expect(execMock).not.toHaveBeenCalledWith( + expect.stringContaining('ip6tables') + ); + }); + + test('does not invoke ip6tables when removing filtering', async () => { + await firewall.removeFiltering('wg0', false); + + expect(execMock).toHaveBeenCalledWith( + expect.stringContaining('iptables -D FORWARD -i wg0') + ); + expect(execMock).not.toHaveBeenCalledWith( + expect.stringContaining('ip6tables') + ); + }); + }); + describe('isValidFirewallEntry', () => { test('invalid ips', () => { expect(() => typesTestExports.FirewallIpEntrySchema.parse('')).toThrow(); diff --git a/src/test/unit/ip.spec.ts b/src/test/unit/ip.spec.ts new file mode 100644 index 00000000..99bdafd9 --- /dev/null +++ b/src/test/unit/ip.spec.ts @@ -0,0 +1,40 @@ +import { parseCidr } from 'cidr-tools'; +import { describe, expect, test } from 'vitest'; + +import { nextIPFromUsedAddresses } from '#server/utils/ip'; + +describe('nextIPFromUsedAddresses', () => { + test('returns the first available address without scanning client records', () => { + const usedAddresses = new Set(['10.0.0.2', '10.0.0.3']); + + expect( + nextIPFromUsedAddresses(4, parseCidr('10.0.0.0/29'), usedAddresses) + ).toBe('10.0.0.4'); + }); + + test('throws when every usable address is allocated', () => { + const usedAddresses = new Set([ + '10.0.0.2', + '10.0.0.3', + '10.0.0.4', + '10.0.0.5', + '10.0.0.6', + ]); + + expect(() => + nextIPFromUsedAddresses(4, parseCidr('10.0.0.0/29'), usedAddresses) + ).toThrow('Maximum number of clients reached'); + }); + + test('supports replacing addresses while retaining the current allocation state', () => { + const cidr = parseCidr('10.0.0.0/29'); + const usedAddresses = new Set(['10.0.0.2', '10.0.0.3']); + + const firstReplacement = nextIPFromUsedAddresses(4, cidr, usedAddresses); + usedAddresses.add(firstReplacement); + usedAddresses.delete('10.0.0.2'); + + expect(firstReplacement).toBe('10.0.0.4'); + expect(nextIPFromUsedAddresses(4, cidr, usedAddresses)).toBe('10.0.0.2'); + }); +}); diff --git a/src/test/unit/password.spec.ts b/src/test/unit/password.spec.ts index 855c5f24..f8a37458 100644 --- a/src/test/unit/password.spec.ts +++ b/src/test/unit/password.spec.ts @@ -1,9 +1,10 @@ import { expect, test, describe } from 'vitest'; + import { hashPassword, isPasswordValid, isValidPasswordHash, -} from '../../server/utils/password'; +} from '#server/utils/password'; describe('password', () => { test('password', async () => { @@ -17,4 +18,8 @@ describe('password', () => { expect(isValidPasswordHash(hash.replace('argon2', 'argon3'))).toBe(false); }); + + test('missing password hash is never valid', async () => { + await expect(isPasswordValid('password', null)).resolves.toBe(false); + }); }); diff --git a/src/test/unit/prometheus.spec.ts b/src/test/unit/prometheus.spec.ts new file mode 100644 index 00000000..09b930b8 --- /dev/null +++ b/src/test/unit/prometheus.spec.ts @@ -0,0 +1,26 @@ +import { describe, expect, test } from 'vitest'; + +import { + escapePrometheusLabelValue, + formatPrometheusLabels, +} from '#server/utils/prometheus'; + +describe('Prometheus label formatting', () => { + test('escapes quotes, backslashes, and newlines in label values', () => { + expect(escapePrometheusLabelValue('vpn"client')).toBe('vpn\\"client'); + expect(escapePrometheusLabelValue('path\\client')).toBe('path\\\\client'); + expect(escapePrometheusLabelValue('line one\nline two')).toBe( + 'line one\\nline two' + ); + }); + + test('formats escaped values without changing scalar values', () => { + expect( + formatPrometheusLabels({ + interface: 'wg"0', + enabled: true, + name: 'home\\office\npeer', + }) + ).toBe('interface="wg\\"0",enabled="true",name="home\\\\office\\npeer"'); + }); +}); diff --git a/src/tsconfig.json b/src/tsconfig.json index a746f2a7..103ec507 100644 --- a/src/tsconfig.json +++ b/src/tsconfig.json @@ -1,4 +1,10 @@ { // https://nuxt.com/docs/guide/concepts/typescript - "extends": "./.nuxt/tsconfig.json" + "files": [], + "references": [ + { "path": "./.nuxt/tsconfig.app.json" }, + { "path": "./.nuxt/tsconfig.server.json" }, + { "path": "./.nuxt/tsconfig.shared.json" }, + { "path": "./.nuxt/tsconfig.node.json" } + ] } diff --git a/src/vitest.config.ts b/src/vitest.config.ts index a59685a7..3a37baa0 100644 --- a/src/vitest.config.ts +++ b/src/vitest.config.ts @@ -1,9 +1,16 @@ +import { fileURLToPath } from 'node:url'; + import { defineConfig } from 'vitest/config'; export default defineConfig({ test: { projects: [ { + resolve: { + alias: { + '#server': fileURLToPath(new URL('./server', import.meta.url)), + }, + }, test: { name: 'unit', include: ['test/unit/*.{test,spec}.ts'],