diff --git a/.devcontainer/Dockerfile b/.devcontainer/Dockerfile index 411c41292b..3bbbe17f89 100644 --- a/.devcontainer/Dockerfile +++ b/.devcontainer/Dockerfile @@ -1,4 +1,4 @@ -FROM node:lts@sha256:48db4f6ea21d134be744207225753a1730c4bc1b4cdf836d44511c36bf0e34d7 +FROM node:lts@sha256:fffa89e023a3351904c04284029105d9e2ac7020886d683775a298569591e5bb RUN apt-get update && \ apt-get install -fy libnss3 libnspr4 libatk1.0-0 libatk-bridge2.0-0 libcups2 libdbus-1-3 libdrm2 libxkbcommon0 libatspi2.0-0 libxcomposite1 libxdamage1 libxfixes3 libxrandr2 libgbm1 libasound2 && \ diff --git a/.github/workflows/autofix-docs.yml b/.github/workflows/autofix-docs.yml index 177fcd67a5..c4350a2356 100644 --- a/.github/workflows/autofix-docs.yml +++ b/.github/workflows/autofix-docs.yml @@ -17,9 +17,9 @@ jobs: runs-on: ubuntu-latest steps: - - uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 # v4.1.7 + - uses: actions/checkout@eef61447b9ff4aafe5dcd4e0bbf5d482be7e7871 # v4.2.1 - run: corepack enable - - uses: actions/setup-node@1e60f620b9541d16bece96c5465dc8ee9832be0b # v4.0.3 + - uses: actions/setup-node@0a44ba7841725637a19e28fa30b79a866c81b0a6 # v4.0.4 with: node-version: 20 cache: "pnpm" diff --git a/.github/workflows/autofix.yml b/.github/workflows/autofix.yml index c354778edf..610d3ac48e 100644 --- a/.github/workflows/autofix.yml +++ b/.github/workflows/autofix.yml @@ -13,9 +13,9 @@ jobs: runs-on: ubuntu-latest steps: - - uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 # v4.1.7 + - uses: actions/checkout@eef61447b9ff4aafe5dcd4e0bbf5d482be7e7871 # v4.2.1 - run: corepack enable - - uses: actions/setup-node@1e60f620b9541d16bece96c5465dc8ee9832be0b # v4.0.3 + - uses: actions/setup-node@0a44ba7841725637a19e28fa30b79a866c81b0a6 # v4.0.4 with: node-version: 20 cache: "pnpm" diff --git a/.github/workflows/benchmark.yml b/.github/workflows/benchmark.yml index 7a4afb38bb..e7e84f981a 100644 --- a/.github/workflows/benchmark.yml +++ b/.github/workflows/benchmark.yml @@ -29,9 +29,9 @@ jobs: runs-on: ubuntu-latest steps: - - uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 # v4.1.7 + - uses: actions/checkout@eef61447b9ff4aafe5dcd4e0bbf5d482be7e7871 # v4.2.1 - run: corepack enable - - uses: actions/setup-node@1e60f620b9541d16bece96c5465dc8ee9832be0b # v4.0.3 + - uses: actions/setup-node@0a44ba7841725637a19e28fa30b79a866c81b0a6 # v4.0.4 with: node-version: 20 cache: "pnpm" diff --git a/.github/workflows/changelog.yml b/.github/workflows/changelog.yml index 5a3063f197..1b7e9b7ed9 100644 --- a/.github/workflows/changelog.yml +++ b/.github/workflows/changelog.yml @@ -22,11 +22,11 @@ jobs: contents: write steps: - - uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 # v4.1.7 + - uses: actions/checkout@eef61447b9ff4aafe5dcd4e0bbf5d482be7e7871 # v4.2.1 with: fetch-depth: 0 - run: corepack enable - - uses: actions/setup-node@1e60f620b9541d16bece96c5465dc8ee9832be0b # v4.0.3 + - uses: actions/setup-node@0a44ba7841725637a19e28fa30b79a866c81b0a6 # v4.0.4 with: node-version: 20 cache: "pnpm" diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index a2170138ba..0ba6897c9a 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -37,9 +37,9 @@ jobs: timeout-minutes: 10 steps: - - uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 # v4.1.7 + - uses: actions/checkout@eef61447b9ff4aafe5dcd4e0bbf5d482be7e7871 # v4.2.1 - run: corepack enable - - uses: actions/setup-node@1e60f620b9541d16bece96c5465dc8ee9832be0b # v4.0.3 + - uses: actions/setup-node@0a44ba7841725637a19e28fa30b79a866c81b0a6 # v4.0.4 with: node-version: 20 cache: "pnpm" @@ -57,7 +57,7 @@ jobs: run: pnpm build - name: Cache dist - uses: actions/upload-artifact@50769540e7f4bd5e21e526ee35c689e35e0d6874 # v4.4.0 + uses: actions/upload-artifact@84480863f228bb9747b473957fcc9e309aa96097 # v4.4.2 with: retention-days: 3 name: dist @@ -72,10 +72,10 @@ jobs: security-events: write steps: - - uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 # v4.1.7 + - uses: actions/checkout@eef61447b9ff4aafe5dcd4e0bbf5d482be7e7871 # v4.2.1 - name: Initialize CodeQL - uses: github/codeql-action/init@8214744c546c1e5c8f03dde8fab3a7353211988d # v3.26.7 + uses: github/codeql-action/init@c36620d31ac7c881962c3d9dd939c40ec9434f2b # v3.26.12 with: config: | paths: @@ -91,7 +91,7 @@ jobs: queries: +security-and-quality - name: Perform CodeQL Analysis - uses: github/codeql-action/analyze@8214744c546c1e5c8f03dde8fab3a7353211988d # v3.26.7 + uses: github/codeql-action/analyze@c36620d31ac7c881962c3d9dd939c40ec9434f2b # v3.26.12 with: category: "/language:javascript-typescript" @@ -107,9 +107,9 @@ jobs: module: ["bundler", "node"] steps: - - uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 # v4.1.7 + - uses: actions/checkout@eef61447b9ff4aafe5dcd4e0bbf5d482be7e7871 # v4.2.1 - run: corepack enable - - uses: actions/setup-node@1e60f620b9541d16bece96c5465dc8ee9832be0b # v4.0.3 + - uses: actions/setup-node@0a44ba7841725637a19e28fa30b79a866c81b0a6 # v4.0.4 with: node-version: 20 cache: "pnpm" @@ -138,9 +138,9 @@ jobs: timeout-minutes: 10 steps: - - uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 # v4.1.7 + - uses: actions/checkout@eef61447b9ff4aafe5dcd4e0bbf5d482be7e7871 # v4.2.1 - run: corepack enable - - uses: actions/setup-node@1e60f620b9541d16bece96c5465dc8ee9832be0b # v4.0.3 + - uses: actions/setup-node@0a44ba7841725637a19e28fa30b79a866c81b0a6 # v4.0.4 with: node-version: 20 cache: "pnpm" @@ -162,9 +162,9 @@ jobs: needs: - build steps: - - uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 # v4.1.7 + - uses: actions/checkout@eef61447b9ff4aafe5dcd4e0bbf5d482be7e7871 # v4.2.1 - run: corepack enable - - uses: actions/setup-node@1e60f620b9541d16bece96c5465dc8ee9832be0b # v4.0.3 + - uses: actions/setup-node@0a44ba7841725637a19e28fa30b79a866c81b0a6 # v4.0.4 with: node-version: 20 cache: "pnpm" @@ -191,7 +191,7 @@ jobs: matrix: os: [ubuntu-latest, windows-latest] env: ["dev", "built"] - builder: ["vite", "webpack"] + builder: ["vite", "rspack", "webpack"] context: ["async", "default"] manifest: ["manifest-on", "manifest-off"] payload: ["json", "js"] @@ -199,12 +199,18 @@ jobs: exclude: - builder: "webpack" payload: "js" + - builder: "rspack" + payload: "js" - manifest: "manifest-off" payload: "js" - context: "default" payload: "js" - os: windows-latest payload: "js" + - env: "dev" + builder: "rspack" + - manifest: "manifest-off" + builder: "rspack" - env: "dev" builder: "webpack" - manifest: "manifest-off" @@ -213,9 +219,9 @@ jobs: timeout-minutes: 15 steps: - - uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 # v4.1.7 + - uses: actions/checkout@eef61447b9ff4aafe5dcd4e0bbf5d482be7e7871 # v4.2.1 - run: corepack enable - - uses: actions/setup-node@1e60f620b9541d16bece96c5465dc8ee9832be0b # v4.0.3 + - uses: actions/setup-node@0a44ba7841725637a19e28fa30b79a866c81b0a6 # v4.0.4 with: node-version: ${{ matrix.node }} cache: "pnpm" @@ -242,7 +248,7 @@ jobs: TEST_PAYLOAD: ${{ matrix.payload }} SKIP_BUNDLE_SIZE: ${{ github.event_name != 'push' || matrix.env == 'dev' || matrix.builder == 'webpack' || matrix.context == 'default' || matrix.payload == 'js' || runner.os == 'Windows' }} - - uses: codecov/codecov-action@e28ff129e5465c2c0dcc6f003fc735cb6ae0c673 # v4.5.0 + - uses: codecov/codecov-action@b9fd7d16f6d7d1b5d2bec1a2887e65ceed900238 # v4.6.0 if: github.event_name != 'push' && matrix.env == 'built' && matrix.builder == 'vite' && matrix.context == 'default' && matrix.os == 'ubuntu-latest' && matrix.manifest == 'manifest-on' with: token: ${{ secrets.CODECOV_TOKEN }} @@ -256,7 +262,6 @@ jobs: github.event_name == 'push' && github.repository == 'nuxt/nuxt' && !contains(github.event.head_commit.message, '[skip-release]') && - !startsWith(github.event.head_commit.message, 'chore') && !startsWith(github.event.head_commit.message, 'docs') needs: - lint @@ -266,11 +271,11 @@ jobs: timeout-minutes: 20 steps: - - uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 # v4.1.7 + - uses: actions/checkout@eef61447b9ff4aafe5dcd4e0bbf5d482be7e7871 # v4.2.1 with: fetch-depth: 0 - run: corepack enable - - uses: actions/setup-node@1e60f620b9541d16bece96c5465dc8ee9832be0b # v4.0.3 + - uses: actions/setup-node@0a44ba7841725637a19e28fa30b79a866c81b0a6 # v4.0.4 with: node-version: 20 cache: "pnpm" @@ -307,11 +312,11 @@ jobs: timeout-minutes: 20 steps: - - uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 # v4.1.7 + - uses: actions/checkout@eef61447b9ff4aafe5dcd4e0bbf5d482be7e7871 # v4.2.1 with: fetch-depth: 0 - run: corepack enable - - uses: actions/setup-node@1e60f620b9541d16bece96c5465dc8ee9832be0b # v4.0.3 + - uses: actions/setup-node@0a44ba7841725637a19e28fa30b79a866c81b0a6 # v4.0.4 with: node-version: 20 cache: "pnpm" diff --git a/.github/workflows/dependency-review.yml b/.github/workflows/dependency-review.yml index 2aae50705f..705f8d5c2d 100644 --- a/.github/workflows/dependency-review.yml +++ b/.github/workflows/dependency-review.yml @@ -17,6 +17,6 @@ jobs: runs-on: ubuntu-latest steps: - name: 'Checkout Repository' - uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 # v4.1.7 + uses: actions/checkout@eef61447b9ff4aafe5dcd4e0bbf5d482be7e7871 # v4.2.1 - name: 'Dependency Review' uses: actions/dependency-review-action@5a2ce3f5b92ee19cbb1541a4984c76d921601d7c # v4.3.4 diff --git a/.github/workflows/docs-check-links.yml b/.github/workflows/docs-check-links.yml index cc4260e8b9..81a8f72d81 100644 --- a/.github/workflows/docs-check-links.yml +++ b/.github/workflows/docs-check-links.yml @@ -19,17 +19,17 @@ jobs: steps: # Cache lychee results (e.g. to avoid hitting rate limits) - name: Restore lychee cache - uses: actions/cache@0c45773b623bea8c8e75f6c82b208c3cf94ea4f9 # v4.0.2 + uses: actions/cache@3624ceb22c1c5a301c8db4169662070a689d9ea8 # v4.1.1 with: path: .lycheecache key: cache-lychee-${{ github.sha }} restore-keys: cache-lychee- # check links with Lychee - - uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 # v4.1.7 + - uses: actions/checkout@eef61447b9ff4aafe5dcd4e0bbf5d482be7e7871 # v4.2.1 - name: Lychee link checker - uses: lycheeverse/lychee-action@c38ba4f281730ee0d64e6963f49b708e01567b86 # for v1.8.0 + uses: lycheeverse/lychee-action@731bf1a2affebd80fab6515ba61d2648a76929a4 # for v1.8.0 with: # arguments with file types to check args: >- diff --git a/.github/workflows/docs.yml b/.github/workflows/docs.yml index bd12e4f3e7..1948fd8ab5 100644 --- a/.github/workflows/docs.yml +++ b/.github/workflows/docs.yml @@ -21,9 +21,9 @@ jobs: runs-on: ubuntu-latest steps: - - uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 # v4.1.7 + - uses: actions/checkout@eef61447b9ff4aafe5dcd4e0bbf5d482be7e7871 # v4.2.1 - run: corepack enable - - uses: actions/setup-node@1e60f620b9541d16bece96c5465dc8ee9832be0b # v4.0.3 + - uses: actions/setup-node@0a44ba7841725637a19e28fa30b79a866c81b0a6 # v4.0.4 with: node-version: 20 cache: "pnpm" diff --git a/.github/workflows/lint-sherif.yml b/.github/workflows/lint-sherif.yml index 7774d89097..00d7bf5a68 100644 --- a/.github/workflows/lint-sherif.yml +++ b/.github/workflows/lint-sherif.yml @@ -23,9 +23,9 @@ jobs: runs-on: ubuntu-latest steps: - - uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 # v4.1.7 + - uses: actions/checkout@eef61447b9ff4aafe5dcd4e0bbf5d482be7e7871 # v4.2.1 - run: corepack enable - - uses: actions/setup-node@1e60f620b9541d16bece96c5465dc8ee9832be0b # v4.0.3 + - uses: actions/setup-node@0a44ba7841725637a19e28fa30b79a866c81b0a6 # v4.0.4 with: node-version: 20 cache: "pnpm" diff --git a/.github/workflows/lint-workflows.yml b/.github/workflows/lint-workflows.yml index 219ef19670..a3d7781132 100644 --- a/.github/workflows/lint-workflows.yml +++ b/.github/workflows/lint-workflows.yml @@ -23,9 +23,9 @@ jobs: runs-on: ubuntu-latest steps: - - uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 # v4.1.7 + - uses: actions/checkout@eef61447b9ff4aafe5dcd4e0bbf5d482be7e7871 # v4.2.1 # From https://github.com/rhysd/actionlint/blob/main/docs/usage.md#use-actionlint-on-github-actions - name: Check workflow files - uses: docker://rhysd/actionlint:1.7.1@sha256:435ecdb63b1169e80ca3e136290072548c07fc4d76a044cf5541021712f8f344 + uses: docker://rhysd/actionlint:1.7.3@sha256:7617f05bd698cd2f1c3aedc05bc733ccec92cca0738f3e8722c32c5b42c70ae6 with: args: -color diff --git a/.github/workflows/release-pr.yml b/.github/workflows/release-pr.yml index 9f38c8c9dc..403ab99d59 100644 --- a/.github/workflows/release-pr.yml +++ b/.github/workflows/release-pr.yml @@ -24,7 +24,7 @@ jobs: steps: - name: Ensure action is by maintainer - uses: octokit/request-action@872c5c97b3c85c23516a572f02b31401ef82415d # v2.3.1 + uses: octokit/request-action@dad4362715b7fb2ddedf9772c8670824af564f0d # v2.4.0 id: check_role with: route: GET /repos/nuxt/nuxt/collaborators/${{ github.event.comment.user.login }} @@ -48,13 +48,13 @@ jobs: fi echo "head_sha=$head_sha" >> "$GITHUB_OUTPUT" - - uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 # v4.1.7 + - uses: actions/checkout@eef61447b9ff4aafe5dcd4e0bbf5d482be7e7871 # v4.2.1 with: ref: ${{ steps.pr.outputs.head_sha }} fetch-depth: 1 - run: corepack enable - - uses: actions/setup-node@1e60f620b9541d16bece96c5465dc8ee9832be0b # v4.0.3 + - uses: actions/setup-node@0a44ba7841725637a19e28fa30b79a866c81b0a6 # v4.0.4 with: node-version: 20 cache: "pnpm" diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index c597702bfd..1eda613a60 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -19,11 +19,11 @@ jobs: runs-on: ubuntu-latest timeout-minutes: 20 steps: - - uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 # v4.1.7 + - uses: actions/checkout@eef61447b9ff4aafe5dcd4e0bbf5d482be7e7871 # v4.2.1 with: fetch-depth: 0 - run: corepack enable - - uses: actions/setup-node@1e60f620b9541d16bece96c5465dc8ee9832be0b # v4.0.3 + - uses: actions/setup-node@0a44ba7841725637a19e28fa30b79a866c81b0a6 # v4.0.4 with: node-version: 20 registry-url: "https://registry.npmjs.org/" diff --git a/.github/workflows/reproduire.yml b/.github/workflows/reproduire.yml index 4f02b2ce3a..d995f6d302 100644 --- a/.github/workflows/reproduire.yml +++ b/.github/workflows/reproduire.yml @@ -10,7 +10,7 @@ jobs: reproduire: runs-on: ubuntu-latest steps: - - uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 # v4.1.7 + - uses: actions/checkout@eef61447b9ff4aafe5dcd4e0bbf5d482be7e7871 # v4.2.1 - uses: Hebilicious/reproduire@4b686ae9cbb72dad60f001d278b6e3b2ce40a9ac # v0.0.9-mp with: label: needs reproduction diff --git a/.github/workflows/scorecards.yml b/.github/workflows/scorecards.yml index e7392ea0ca..0ad5cf877f 100644 --- a/.github/workflows/scorecards.yml +++ b/.github/workflows/scorecards.yml @@ -32,7 +32,7 @@ jobs: steps: - name: "Checkout code" - uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 # v4.1.7 + uses: actions/checkout@eef61447b9ff4aafe5dcd4e0bbf5d482be7e7871 # v4.2.1 with: persist-credentials: false @@ -59,7 +59,7 @@ jobs: # Upload the results as artifacts (optional). Commenting out will disable uploads of run results in SARIF # format to the repository Actions tab. - name: "Upload artifact" - uses: actions/upload-artifact@50769540e7f4bd5e21e526ee35c689e35e0d6874 # v4.4.0 + uses: actions/upload-artifact@84480863f228bb9747b473957fcc9e309aa96097 # v4.4.2 if: github.repository == 'nuxt/nuxt' && success() with: name: SARIF file @@ -68,7 +68,7 @@ jobs: # Upload the results to GitHub's code scanning dashboard. - name: "Upload to code-scanning" - uses: github/codeql-action/upload-sarif@8214744c546c1e5c8f03dde8fab3a7353211988d # v3.26.7 + uses: github/codeql-action/upload-sarif@c36620d31ac7c881962c3d9dd939c40ec9434f2b # v3.26.12 if: github.repository == 'nuxt/nuxt' && success() with: sarif_file: results.sarif diff --git a/.github/workflows/semantic-pull-requests.yml b/.github/workflows/semantic-pull-requests.yml index e569c4acc3..d563f5045f 100644 --- a/.github/workflows/semantic-pull-requests.yml +++ b/.github/workflows/semantic-pull-requests.yml @@ -26,6 +26,7 @@ jobs: kit nuxi nuxt + rspack schema test-utils ui-templates diff --git a/.github/workflows/stackblitz-link.yml b/.github/workflows/stackblitz-link.yml index 997a48e846..7da7c03a24 100644 --- a/.github/workflows/stackblitz-link.yml +++ b/.github/workflows/stackblitz-link.yml @@ -11,7 +11,7 @@ jobs: stackblitz: runs-on: ubuntu-latest steps: - - uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 # v4.1.7 + - uses: actions/checkout@eef61447b9ff4aafe5dcd4e0bbf5d482be7e7871 # v4.2.1 - uses: huang-julien/reproduire-sur-stackblitz@9ceccbfbb0f2f9a9a8db2d1f0dd909cf5cfe67aa # v1.0.2 with: reproduction-heading: '### Reproduction' diff --git a/docs/1.getting-started/1.introduction.md b/docs/1.getting-started/1.introduction.md index 2860e5bde3..90f7e84da0 100644 --- a/docs/1.getting-started/1.introduction.md +++ b/docs/1.getting-started/1.introduction.md @@ -2,7 +2,7 @@ title: Introduction description: Nuxt's goal is to make web development intuitive and performant with a great Developer Experience in mind. navigation: - icon: i-ph-info-duotone + icon: i-ph-info --- Nuxt is a free and [open-source framework](https://github.com/nuxt/nuxt) with an intuitive and extendable way to create type-safe, performant and production-grade full-stack web applications and websites with [Vue.js](https://vuejs.org). diff --git a/docs/1.getting-started/10.deployment.md b/docs/1.getting-started/10.deployment.md index 9043f0035c..4b341e6a7d 100644 --- a/docs/1.getting-started/10.deployment.md +++ b/docs/1.getting-started/10.deployment.md @@ -1,7 +1,7 @@ --- title: 'Deployment' description: Learn how to deploy your Nuxt application to any hosting provider. -navigation.icon: i-ph-cloud-duotone +navigation.icon: i-ph-cloud --- A Nuxt application can be deployed on a Node.js server, pre-rendered for static hosting, or deployed to serverless or edge (CDN) environments. @@ -64,6 +64,10 @@ By default, the workload gets distributed to the workers with the round robin st :read-more{to="https://nitro.unjs.io/deploy/node" title="the Nitro documentation for node-server preset"} +::tip{icon="i-ph-video" to="https://www.youtube.com/watch?v=0x1H6K5yOfs" target="\_blank"} +Watch Daniel Roe's short video on the topic. +:: + ## Static Hosting There are two ways to deploy a Nuxt application to any static hosting services: diff --git a/docs/1.getting-started/11.testing.md b/docs/1.getting-started/11.testing.md index aa5df5c718..dce433a768 100644 --- a/docs/1.getting-started/11.testing.md +++ b/docs/1.getting-started/11.testing.md @@ -1,7 +1,7 @@ --- title: Testing description: How to test your Nuxt application. -navigation.icon: i-ph-check-circle-duotone +navigation.icon: i-ph-check-circle --- ::tip @@ -10,7 +10,7 @@ If you are a module author, you can find more specific information in the [Modul Nuxt offers first-class support for end-to-end and unit testing of your Nuxt application via `@nuxt/test-utils`, a library of test utilities and configuration that currently powers the [tests we use on Nuxt itself](https://github.com/nuxt/nuxt/tree/main/test) and tests throughout the module ecosystem. -::tip{icon="i-ph-video-duotone" to="https://www.youtube.com/watch?v=yGzwk9xi9gU" target="_blank"} +::tip{icon="i-ph-video" to="https://www.youtube.com/watch?v=yGzwk9xi9gU" target="_blank"} Watch a video from Alexander Lichter about getting started with the `@nuxt/test-utils`. :: diff --git a/docs/1.getting-started/12.upgrade.md b/docs/1.getting-started/12.upgrade.md index 096aa164a6..68cb635dc9 100644 --- a/docs/1.getting-started/12.upgrade.md +++ b/docs/1.getting-started/12.upgrade.md @@ -1,10 +1,9 @@ --- title: Upgrade Guide description: 'Learn how to upgrade to the latest Nuxt version.' -navigation.icon: i-ph-arrow-circle-up-duotone +navigation.icon: i-ph-arrow-circle-up --- - ## Upgrading Nuxt ### Latest release @@ -43,11 +42,11 @@ You can opt in to the 3.x branch nightly releases with `"nuxt": "npm:nuxt-nightl ## Testing Nuxt 4 -Nuxt 4 is planned to be released **on or before June 14** (though obviously this is dependent on having enough time after Nitro's major release to be properly tested in the community, so be aware that this is not an exact date). +The release date of Nuxt 4 is **to be announced**. It is dependent on having enough time after Nitro's major release to be properly tested in the community. You can follow progress towards Nitro's release in [this PR](https://github.com/unjs/nitro/pull/2521). -Until then, it is possible to test many of Nuxt 4's breaking changes from Nuxt version 3.12+. +Until the release, it is possible to test many of Nuxt 4's breaking changes from Nuxt version 3.12+. -::tip{icon="i-ph-video-duotone" to="https://www.youtube.com/watch?v=r4wFKlcJK6c" target="_blank"} +::tip{icon="i-ph-video" to="https://www.youtube.com/watch?v=r4wFKlcJK6c" target="_blank"} Watch a video from Alexander Lichter showing how to opt in to Nuxt 4's breaking changes already. :: @@ -73,6 +72,7 @@ export default defineNuxtConfig({ // resetAsyncDataToUndefined: true, // templateUtils: true, // relativeWatchPaths: true, + // normalizeComponentNames: false // defaults: { // useAsyncData: { // deep: true @@ -178,6 +178,7 @@ nuxt.config.ts 1. Create a new directory called `app/`. 1. Move your `assets/`, `components/`, `composables/`, `layouts/`, `middleware/`, `pages/`, `plugins/` and `utils/` folders under it, as well as `app.vue`, `error.vue`, `app.config.ts`. If you have an `app/router-options.ts` or `app/spa-loading-template.html`, these paths remain the same. 1. Make sure your `nuxt.config.ts`, `content/`, `layers/`, `modules/`, `public/` and `server/` folders remain outside the `app/` folder, in the root of your project. +1. Remember to update any third-party configuration files to work with the new directory structure, such as your `tailwindcss` or `eslint` configuration (if required - `@nuxtjs/tailwindcss` should automatically configure `tailwindcss` correctly). ::tip You can automate this migration by running `npx codemod@latest nuxt/4/file-structure` @@ -198,6 +199,43 @@ export default defineNuxtConfig({ }) ``` +#### Normalized Component Names + +๐Ÿšฆ **Impact Level**: Moderate + +Vue will now generate component names that match the Nuxt pattern for component naming. + +##### What Changed + +By default, if you haven't set it manually, Vue will assign a component name that matches +the filename of the component. + +```bash [Directory structure] +โ”œโ”€ components/ +โ”œโ”€โ”€โ”€ SomeFolder/ +โ”œโ”€โ”€โ”€โ”€โ”€ MyComponent.vue +``` + +In this case, the component name would be `MyComponent`, as far as Vue is concerned. If you wanted to use `` with it, or identify it in the Vue DevTools, you would need to use this name. + +But in order to auto-import it, you would need to use `SomeFolderMyComponent`. + +With this change, these two values will match, and Vue will generate a component name that matches the Nuxt pattern for component naming. + +##### Migration Steps + +Ensure that you use the updated name in any tests which use `findComponent` from `@vue/test-utils` and in any `` which depends on the name of your component. + +Alternatively, for now, you can disable this behaviour with: + +```ts twoslash [nuxt.config.ts] +export default defineNuxtConfig({ + experimental: { + normalizeComponentNames: false + } +}) +``` + #### Shared Prerender Data ๐Ÿšฆ **Impact Level**: Medium @@ -407,7 +445,7 @@ We have already proactively migrated the public Nuxt modules which we are aware However, if you are a module author using the `builder:watch` hook and wishing to remain backwards/forwards compatible, you can use the following code to ensure that your code works the same in both Nuxt v3 and Nuxt v4: - ```diff +```diff + import { relative, resolve } from 'node:fs' // ... nuxt.hook('builder:watch', async (event, path) => { diff --git a/docs/1.getting-started/2.installation.md b/docs/1.getting-started/2.installation.md index 42bba1705b..128a135f57 100644 --- a/docs/1.getting-started/2.installation.md +++ b/docs/1.getting-started/2.installation.md @@ -1,7 +1,7 @@ --- title: 'Installation' description: 'Get started with Nuxt quickly with our online starters or start locally with your terminal.' -navigation.icon: i-ph-play-duotone +navigation.icon: i-ph-play --- ## Play Online @@ -94,7 +94,7 @@ bun run dev -o ``` :: -::tip{icon="i-ph-check-circle-duotone"} +::tip{icon="i-ph-check-circle"} Well done! A browser window should automatically open for . :: diff --git a/docs/1.getting-started/3.configuration.md b/docs/1.getting-started/3.configuration.md index f3805f283f..4cf9310b81 100644 --- a/docs/1.getting-started/3.configuration.md +++ b/docs/1.getting-started/3.configuration.md @@ -1,10 +1,9 @@ --- title: Configuration description: Nuxt is configured with sensible defaults to make you productive. -navigation.icon: i-ph-gear-duotone +navigation.icon: i-ph-gear --- - By default, Nuxt is configured to cover most use cases. The [`nuxt.config.ts`](/docs/guide/directory-structure/nuxt-config) file can override or extend this default configuration. ## Nuxt Configuration @@ -46,7 +45,7 @@ export default defineNuxtConfig({ }) ``` -::tip{icon="i-ph-video-duotone" to="https://www.youtube.com/watch?v=DFZI2iVCrNc" target="_blank"} +::tip{icon="i-ph-video" to="https://www.youtube.com/watch?v=DFZI2iVCrNc" target="_blank"} Watch a video from Alexander Lichter about the env-aware `nuxt.config.ts`. :: diff --git a/docs/1.getting-started/3.views.md b/docs/1.getting-started/3.views.md index a3275b05c2..e169bdfa66 100644 --- a/docs/1.getting-started/3.views.md +++ b/docs/1.getting-started/3.views.md @@ -1,7 +1,7 @@ --- title: 'Views' description: 'Nuxt provides several component layers to implement the user interface of your application.' -navigation.icon: i-ph-layout-duotone +navigation.icon: i-ph-layout --- ## `app.vue` diff --git a/docs/1.getting-started/4.assets.md b/docs/1.getting-started/4.assets.md index ac0b964a2e..a46f973deb 100644 --- a/docs/1.getting-started/4.assets.md +++ b/docs/1.getting-started/4.assets.md @@ -1,7 +1,7 @@ --- title: 'Assets' description: 'Nuxt offers two options for your assets.' -navigation.icon: i-ph-image-duotone +navigation.icon: i-ph-image --- Nuxt uses two directories to handle assets like stylesheets, fonts or images. diff --git a/docs/1.getting-started/4.styling.md b/docs/1.getting-started/4.styling.md index 61ae9da785..d780ad3449 100644 --- a/docs/1.getting-started/4.styling.md +++ b/docs/1.getting-started/4.styling.md @@ -1,7 +1,7 @@ --- title: 'Styling' description: 'Learn how to style your Nuxt application.' -navigation.icon: i-ph-palette-duotone +navigation.icon: i-ph-palette --- Nuxt is highly flexible when it comes to styling. Write your own styles, or reference local and external stylesheets. @@ -530,7 +530,7 @@ export default defineNuxtConfig({ hooks: { 'build:manifest': (manifest) => { // find the app entry, css list - const css = manifest['node_modules/nuxt/dist/app/entry.js']?.css + const css = Object.values(manifest).find(options => options.isEntry)?.css if (css) { // start from the end of the array and go to the beginning for (let i = css.length - 1; i >= 0; i--) { diff --git a/docs/1.getting-started/5.routing.md b/docs/1.getting-started/5.routing.md index e39d5d446b..e88d9e8c24 100644 --- a/docs/1.getting-started/5.routing.md +++ b/docs/1.getting-started/5.routing.md @@ -1,7 +1,7 @@ --- title: 'Routing' description: Nuxt file-system routing creates a route for every file in the pages/ directory. -navigation.icon: i-ph-signpost-duotone +navigation.icon: i-ph-signpost --- One core feature of Nuxt is the file system router. Every Vue file inside the [`pages/`](/docs/guide/directory-structure/pages) directory creates a corresponding URL (or route) that displays the contents of the file. By using dynamic imports for each page, Nuxt leverages code-splitting to ship the minimum amount of JavaScript for the requested route. @@ -15,7 +15,7 @@ This file system routing uses naming conventions to create dynamic and nested ro ::code-group ```bash [Directory Structure] -| pages/ +-| pages/ ---| about.vue ---| index.vue ---| posts/ diff --git a/docs/1.getting-started/5.seo-meta.md b/docs/1.getting-started/5.seo-meta.md index 91b8fed31f..46a3f2298d 100644 --- a/docs/1.getting-started/5.seo-meta.md +++ b/docs/1.getting-started/5.seo-meta.md @@ -1,7 +1,7 @@ --- title: SEO and Meta description: Improve your Nuxt app's SEO with powerful head config, composables and components. -navigation.icon: i-ph-file-search-duotone +navigation.icon: i-ph-file-search --- ## Defaults diff --git a/docs/1.getting-started/5.transitions.md b/docs/1.getting-started/5.transitions.md index ccabe0ed6d..dcef4b284e 100644 --- a/docs/1.getting-started/5.transitions.md +++ b/docs/1.getting-started/5.transitions.md @@ -1,7 +1,7 @@ --- title: 'Transitions' description: Apply transitions between pages and layouts with Vue or native browser View Transitions. -navigation.icon: i-ph-exclude-square-duotone +navigation.icon: i-ph-exclude-square --- ::note diff --git a/docs/1.getting-started/6.data-fetching.md b/docs/1.getting-started/6.data-fetching.md index 39d82835c2..9e4e0a47ae 100644 --- a/docs/1.getting-started/6.data-fetching.md +++ b/docs/1.getting-started/6.data-fetching.md @@ -1,28 +1,24 @@ --- title: 'Data fetching' description: Nuxt provides composables to handle data fetching within your application. -navigation.icon: i-ph-plugs-connected-duotone +navigation.icon: i-ph-plugs-connected --- Nuxt comes with two composables and a built-in library to perform data-fetching in browser or server environments: `useFetch`, [`useAsyncData`](/docs/api/composables/use-async-data) and `$fetch`. In a nutshell: -- [`useFetch`](/docs/api/composables/use-fetch) is the most straightforward way to handle data fetching in a component setup function. -- [`$fetch`](/docs/api/utils/dollarfetch) is great to make network requests based on user interaction. -- [`useAsyncData`](/docs/api/composables/use-async-data), combined with `$fetch`, offers more fine-grained control. +- [`$fetch`](/docs/api/utils/dollarfetch) is the simplest way to make a network request. +- [`useFetch`](/docs/api/composables/use-fetch) is wrapper around `$fetch` that fetches data only once in [universal rendering](/docs/guide/concepts/rendering#universal-rendering). +- [`useAsyncData`](/docs/api/composables/use-async-data) is similar to `useFetch` but offers more fine-grained control. Both `useFetch` and `useAsyncData` share a common set of options and patterns that we will detail in the last sections. -Before that, it's imperative to know why these composables exist in the first place. +## The need for `useFetch` and `useAsyncData` -## Why use specific composables for data fetching? +Nuxt is a framework which can run isomorphic (or universal) code in both server and client environments. If the [`$fetch` function](/docs/api/utils/dollarfetch) is used to perform data fetching in the setup function of a Vue component, this may cause data to be fetched twice, once on the server (to render the HTML) and once again on the client (when the HTML is hydrated). This can cause hydration issues, increase the time to interactivity and cause unpredictable behavior. -Nuxt is a framework which can run isomorphic (or universal) code in both server and client environments. If the [`$fetch` function](/docs/api/utils/dollarfetch) is used to perform data fetching in the setup function of a Vue component, this may cause data to be fetched twice, once on the server (to render the HTML) and once again on the client (when the HTML is hydrated). This is why Nuxt offers specific data fetching composables so data is fetched only once. - -### Network calls duplication - -The [`useFetch`](/docs/api/composables/use-fetch) and [`useAsyncData`](/docs/api/composables/use-async-data) composables ensure that once an API call is made on the server, the data is properly forwarded to the client in the payload. +The [`useFetch`](/docs/api/composables/use-fetch) and [`useAsyncData`](/docs/api/composables/use-async-data) composables solve this problem by ensuring that if an API call is made on the server, the data is forwarded to the client in the payload. The payload is a JavaScript object accessible through [`useNuxtApp().payload`](/docs/api/composables/use-nuxt-app#payload). It is used on the client to avoid refetching the same data when the code is executed in the browser [during hydration](/docs/guide/concepts/rendering#universal-rendering). @@ -30,41 +26,45 @@ The payload is a JavaScript object accessible through [`useNuxtApp().payload`](/ Use the [Nuxt DevTools](https://devtools.nuxt.com) to inspect this data in the **Payload tab**. :: +```vue [app.vue] + + + +``` + +In the example above, `useFetch` would make sure that the request would occur in the server and is properly forwarded to the browser. `$fetch` has no such mechanism and is a better option to use when the request is solely made from the browser. + ### Suspense -Nuxt uses Vueโ€™s [``](https://vuejs.org/guide/built-ins/suspense) component under the hood to prevent navigation before every async data is available to the view. The data fetching composables can help you leverage this feature and use what suits best on a per-calls basis. +Nuxt uses Vueโ€™s [``](https://vuejs.org/guide/built-ins/suspense) component under the hood to prevent navigation before every async data is available to the view. The data fetching composables can help you leverage this feature and use what suits best on a per-call basis. ::note You can add the [``](/docs/api/components/nuxt-loading-indicator) to add a progress bar between page navigations. :: -## `useFetch` - -The [`useFetch`](/docs/api/composables/use-fetch) composable is the most straightforward way to perform data fetching. - -```vue twoslash [app.vue] - - - -``` - -This composable is a wrapper around the [`useAsyncData`](/docs/api/composables/use-async-data) composable and `$fetch` utility. - -::tip{icon="i-ph-video-duotone" to="https://www.youtube.com/watch?v=njsGVmcWviY" target="_blank"} -Watch the video from Alexander Lichter to avoid using `useFetch` the wrong way! -:: - -:read-more{to="/docs/api/composables/use-fetch"} - -:link-example{to="/docs/examples/features/data-fetching"} - ## `$fetch` -Nuxt includes the [ofetch](https://github.com/unjs/ofetch) library, and is auto-imported as the `$fetch` alias globally across your application. It's what `useFetch` uses behind the scenes. +Nuxt includes the [ofetch](https://github.com/unjs/ofetch) library, and is auto-imported as the `$fetch` alias globally across your application. ```vue twoslash [pages/todos.vue] + + +``` + +This composable is a wrapper around the [`useAsyncData`](/docs/api/composables/use-async-data) composable and `$fetch` utility. + +::tip{icon="i-ph-video" to="https://www.youtube.com/watch?v=njsGVmcWviY" target="_blank"} +Watch the video from Alexander Lichter to avoid using `useFetch` the wrong way! +:: + +:read-more{to="/docs/api/composables/use-fetch"} + +:link-example{to="/docs/examples/features/data-fetching"} + ## `useAsyncData` The `useAsyncData` composable is responsible for wrapping async logic and returning the result once it is resolved. @@ -97,7 +121,7 @@ The `useAsyncData` composable is responsible for wrapping async logic and return It's developer experience sugar for the most common use case. :: -::tip{icon="i-ph-video-duotone" to="https://www.youtube.com/watch?v=0X-aOpSGabA" target="_blank"} +::tip{icon="i-ph-video" to="https://www.youtube.com/watch?v=0X-aOpSGabA" target="_blank"} Watch a video from Alexander Lichter to dig deeper into the difference between `useFetch` and `useAsyncData`. :: diff --git a/docs/1.getting-started/7.state-management.md b/docs/1.getting-started/7.state-management.md index 46e7b08ba2..94bf67f6b9 100644 --- a/docs/1.getting-started/7.state-management.md +++ b/docs/1.getting-started/7.state-management.md @@ -1,14 +1,14 @@ --- title: 'State Management' description: Nuxt provides powerful state management libraries and the useState composable to create a reactive and SSR-friendly shared state. -navigation.icon: i-ph-database-duotone +navigation.icon: i-ph-database --- Nuxt provides the [`useState`](/docs/api/composables/use-state) composable to create a reactive and SSR-friendly shared state across components. [`useState`](/docs/api/composables/use-state) is an SSR-friendly [`ref`](https://vuejs.org/api/reactivity-core.html#ref) replacement. Its value will be preserved after server-side rendering (during client-side hydration) and shared across all components using a unique key. -::tip{icon="i-ph-video-duotone" to="https://www.youtube.com/watch?v=mv0WcBABcIk" target="_blank"} +::tip{icon="i-ph-video" to="https://www.youtube.com/watch?v=mv0WcBABcIk" target="_blank"} Watch a video from Alexander Lichter about why and when to use `useState()`. :: @@ -27,7 +27,7 @@ Never define `const state = ref()` outside of ` ``` @@ -60,7 +60,7 @@ That means that (with very few exceptions) you cannot use them outside a Nuxt pl If you get an error message like `Nuxt instance is unavailable` then it probably means you are calling a Nuxt composable in the wrong place in the Vue or Nuxt lifecycle. -::tip{icon="i-ph-video-duotone" to="https://www.youtube.com/watch?v=ofuKRZLtOdY" target="_blank"} +::tip{icon="i-ph-video" to="https://www.youtube.com/watch?v=ofuKRZLtOdY" target="_blank"} Watch a video from Alexander Lichter about handling async code in composables and fixing `Nuxt instance is unavailable` in your app. :: @@ -68,7 +68,7 @@ Watch a video from Alexander Lichter about handling async code in composables an When using a composable that requires the Nuxt context inside a non-SFC component, you need to wrap your component with `defineNuxtComponent` instead of `defineComponent` :: -::read-more{to="/docs/guide/going-further/experimental-features#asynccontext" icon="i-ph-star-duotone"} +::read-more{to="/docs/guide/going-further/experimental-features#asynccontext" icon="i-ph-star"} Checkout the `asyncContext` experimental feature to use Nuxt composables in async functions. :: @@ -182,6 +182,6 @@ export default defineNuxtConfig({ }) ``` -::tip{icon="i-ph-video-duotone" to="https://www.youtube.com/watch?v=FT2LQJ2NvVI" target="_blank"} +::tip{icon="i-ph-video" to="https://www.youtube.com/watch?v=FT2LQJ2NvVI" target="_blank"} Watch a video from Alexander Lichter on how to easily set up custom auto imports. :: diff --git a/docs/2.guide/1.concepts/3.rendering.md b/docs/2.guide/1.concepts/3.rendering.md index 96fc08f10f..535b8bf57a 100644 --- a/docs/2.guide/1.concepts/3.rendering.md +++ b/docs/2.guide/1.concepts/3.rendering.md @@ -11,18 +11,41 @@ By default, Nuxt uses **universal rendering** to provide better user experience, ## Universal Rendering -When the browser requests a URL with universal (server-side + client-side) rendering enabled, the server returns a fully rendered HTML page to the browser. Whether the page has been generated in advance and cached or is rendered on the fly, at some point, Nuxt has run the JavaScript (Vue.js) code in a server environment, producing an HTML document. Users immediately get the content of our application, contrary to client-side rendering. This step is similar to traditional **server-side rendering** performed by PHP or Ruby applications. +This step is similar to traditional **server-side rendering** performed by PHP or Ruby applications. When the browser requests a URL with universal rendering enabled, Nuxt runs the JavaScript (Vue.js) code in a server environment and returns a fully rendered HTML page to the browser. Nuxt may also return a fully rendered HTML page from a cache if the page was generated in advance. Users immediately get the entirety of the initial content of the application, contrary to client-side rendering. -To not lose the benefits of the client-side rendering method, such as dynamic interfaces and pages transitions, the Client (browser) loads the JavaScript code that runs on the Server in the background once the HTML document has been downloaded. The browser interprets it again (hence **Universal rendering**) and Vue.js takes control of the document and enables interactivity. - -Making a static page interactive in the browser is called "Hydration". +Once the HTML document has been downloaded, the browser interprets this and Vue.js takes control of the document. The same JavaScript code that once ran on the server runs on the client (browser) **again** in the background now enabling interactivity (hence **Universal rendering**) by binding its listeners to the HTML. This is called **Hydration**. When hydration is complete, the page can enjoy benefits such as dynamic interfaces and page transitions. Universal rendering allows a Nuxt application to provide quick page load times while preserving the benefits of client-side rendering. Furthermore, as the content is already present in the HTML document, crawlers can index it without overhead. ![Users can access the static content when the HTML document is loaded. Hydration then allows page's interactivity](/assets/docs/concepts/rendering/ssr.svg) +**What's server-rendered and what's client-rendered?** + +It is normal to ask which parts of a Vue file runs on the server and/or the client in universal rendering mode. + +```vue [app.vue] + + + +``` + +On the initial request, the `counter` ref is initialized in the server since it is rendered inside the `

` tag. The contents of `handleClick` is never executed here. During hydration in the browser, the `counter` ref is re-initialized. The `handleClick` finally binds itself to the button; Therefore it is reasonable to deduce that the body of `handleClick` will always run in a browser environment. + +[Middlewares](/docs/guide/directory-structure/middleware) and [pages](/docs/guide/directory-structure/pages) run in the server and on the client during hydration. [Plugins](/docs/guide/directory-structure/plugins) can be rendered on the server or client or both. [Components](/docs/guide/directory-structure/components) can be forced to run on the client only as well. [Composables](/docs/guide/directory-structure/composables) and [utilities](/docs/guide/directory-structure/utils) are rendered based on the context of their usage. + **Benefits of server-side rendering:** -- **Performance**: Users can get immediate access to the page's content because browsers can display static content much faster than JavaScript-generated content. At the same time, Nuxt preserves the interactivity of a web application when the hydration process happens. +- **Performance**: Users can get immediate access to the page's content because browsers can display static content much faster than JavaScript-generated content. At the same time, Nuxt preserves the interactivity of a web application during the hydration process. - **Search Engine Optimization**: Universal rendering delivers the entire HTML content of the page to the browser as a classic server application. Web crawlers can directly index the page's content, which makes Universal rendering a great choice for any content that you want to index quickly. **Downsides of server-side rendering:** @@ -116,7 +139,7 @@ export default defineNuxtConfig({ '/': { prerender: true }, // Products page generated on demand, revalidates in background, cached until API response changes '/products': { swr: true }, - // Product page generated on demand, revalidates in background, cached for 1 hour (3600 seconds) + // Product pages generated on demand, revalidates in background, cached for 1 hour (3600 seconds) '/products/**': { swr: 3600 }, // Blog posts page generated on demand, revalidates in background, cached on CDN for 1 hour (3600 seconds) '/blog': { isr: 3600 }, diff --git a/docs/2.guide/1.concepts/8.typescript.md b/docs/2.guide/1.concepts/8.typescript.md index 31d247b7e8..a06015dc98 100644 --- a/docs/2.guide/1.concepts/8.typescript.md +++ b/docs/2.guide/1.concepts/8.typescript.md @@ -61,7 +61,7 @@ This file contains the recommended basic TypeScript configuration for your proje [Read more about how to extend this configuration](/docs/guide/directory-structure/tsconfig). -::tip{icon="i-ph-video-duotone" to="https://youtu.be/umLI7SlPygY" target="_blank"} +::tip{icon="i-ph-video" to="https://youtu.be/umLI7SlPygY" target="_blank"} Watch a video from Daniel Roe explaining built-in Nuxt aliases. :: diff --git a/docs/2.guide/1.concepts/9.code-style.md b/docs/2.guide/1.concepts/9.code-style.md index 2a6a32afb3..edbfa3c490 100644 --- a/docs/2.guide/1.concepts/9.code-style.md +++ b/docs/2.guide/1.concepts/9.code-style.md @@ -7,7 +7,7 @@ description: "Nuxt supports ESLint out of the box" The recommended approach for Nuxt is to enable ESLint support using the [`@nuxt/eslint`](https://eslint.nuxt.com/packages/module) module, that will setup project-aware ESLint configuration for you. -:::callout{icon="i-ph-lightbulb-duotone"} +:::callout{icon="i-ph-lightbulb"} The module is designed for the [new ESLint flat config format](https://eslint.org/docs/latest/use/configure/configuration-files-new) with is the [default format since ESLint v9](https://eslint.org/blog/2024/04/eslint-v9.0.0-released/). If you are using the legacy `.eslintrc` config, you will need to [configure manually with `@nuxt/eslint-config`](https://eslint.nuxt.com/packages/config#legacy-config-format). We highly recommend you to migrate over the flat config to be future-proof. diff --git a/docs/2.guide/1.concepts/_dir.yml b/docs/2.guide/1.concepts/_dir.yml index 5ba97e4962..83d82a0dee 100644 --- a/docs/2.guide/1.concepts/_dir.yml +++ b/docs/2.guide/1.concepts/_dir.yml @@ -1,3 +1,3 @@ title: Key Concepts titleTemplate: '%s ยท Nuxt Concepts' -icon: i-ph-medal-duotone +icon: i-ph-medal diff --git a/docs/2.guide/2.directory-structure/0.nuxt.md b/docs/2.guide/2.directory-structure/0.nuxt.md index c60627ca9b..603b9108ee 100644 --- a/docs/2.guide/2.directory-structure/0.nuxt.md +++ b/docs/2.guide/2.directory-structure/0.nuxt.md @@ -2,7 +2,7 @@ title: ".nuxt" description: "Nuxt uses the .nuxt/ directory in development to generate your Vue application." head.title: ".nuxt/" -navigation.icon: i-ph-folder-duotone +navigation.icon: i-ph-folder --- ::important diff --git a/docs/2.guide/2.directory-structure/0.output.md b/docs/2.guide/2.directory-structure/0.output.md index 2db69102fe..dc0f868d65 100644 --- a/docs/2.guide/2.directory-structure/0.output.md +++ b/docs/2.guide/2.directory-structure/0.output.md @@ -2,7 +2,7 @@ title: ".output" description: "Nuxt creates the .output/ directory when building your application for production." head.title: ".output/" -navigation.icon: i-ph-folder-duotone +navigation.icon: i-ph-folder --- ::important diff --git a/docs/2.guide/2.directory-structure/1.assets.md b/docs/2.guide/2.directory-structure/1.assets.md index b274baef9e..edf9c52bd6 100644 --- a/docs/2.guide/2.directory-structure/1.assets.md +++ b/docs/2.guide/2.directory-structure/1.assets.md @@ -2,7 +2,7 @@ title: "assets" description: "The assets/ directory is used to add all the website's assets that the build tool will process." head.title: "assets/" -navigation.icon: i-ph-folder-duotone +navigation.icon: i-ph-folder --- The directory usually contains the following types of files: diff --git a/docs/2.guide/2.directory-structure/1.components.md b/docs/2.guide/2.directory-structure/1.components.md index 04dad5527b..0656b96e75 100644 --- a/docs/2.guide/2.directory-structure/1.components.md +++ b/docs/2.guide/2.directory-structure/1.components.md @@ -2,15 +2,15 @@ title: "components" head.title: "components/" description: "The components/ directory is where you put all your Vue components." -navigation.icon: i-ph-folder-duotone +navigation.icon: i-ph-folder --- Nuxt automatically imports any components in this directory (along with components that are registered by any modules you may be using). ```bash [Directory Structure] -| components/ ---| AppHeader.vue ---| AppFooter.vue +-| components/ +---| AppHeader.vue +---| AppFooter.vue ``` ```html [app.vue] @@ -28,10 +28,10 @@ Nuxt automatically imports any components in this directory (along with componen If you have a component in nested directories such as: ```bash [Directory Structure] -| components/ ---| base/ -----| foo/ -------| Button.vue +-| components/ +---| base/ +-----| foo/ +-------| Button.vue ``` ... then the component's name will be based on its own path directory and filename, with duplicate segments being removed. Therefore, the component's name will be: @@ -82,6 +82,10 @@ const MyButton = resolveComponent('MyButton') If you are using `resolveComponent` to handle dynamic components, make sure not to insert anything but the name of the component, which must be a string and not a variable. :: +::tip{icon="i-ph-video" to="https://www.youtube.com/watch?v=4kq8E5IUM2U" target="\_blank"} +Watch Daniel Roe's short video about `resolveComponent`. +:: + Alternatively, though not recommended, you can register all your components globally, which will create async chunks for all your components and make them available throughout your application. ```diff @@ -166,6 +170,10 @@ export default defineNuxtConfig({ }) ``` +::note +Any nested directories need to be added first as they are scanned in order. +:: + ## npm Packages If you want to auto-import components from an npm package, you can use [`addComponent`](/docs/api/kit/components#addcomponent) in a [local module](/docs/guide/directory-structure/modules) to register them. @@ -198,10 +206,6 @@ export default defineNuxtModule({ :: -::note -Any nested directories need to be added first as they are scanned in order. -:: - ## Component Extensions By default, any file with an extension specified in the [extensions key of `nuxt.config.ts`](/docs/api/nuxt-config#extensions) is treated as a component. @@ -254,11 +258,11 @@ Server components allow server-rendering individual components within your clien Server components can either be used on their own or paired with a [client component](#paired-with-a-client-component). -::tip{icon="i-ph-video-duotone" to="https://www.youtube.com/watch?v=u1yyXe86xJM" target="_blank"} +::tip{icon="i-ph-video" to="https://www.youtube.com/watch?v=u1yyXe86xJM" target="_blank"} Watch Learn Vue video about Nuxt Server Components. :: -::tip{icon="i-ph-article-duotone" to="https://roe.dev/blog/nuxt-server-components" target="_blank"} +::tip{icon="i-ph-article" to="https://roe.dev/blog/nuxt-server-components" target="_blank"} Read Daniel Roe's guide to Nuxt Server Components. :: @@ -281,8 +285,8 @@ export default defineNuxtConfig({ Now you can register server-only components with the `.server` suffix and use them anywhere in your application automatically. ```bash [Directory Structure] -| components/ ---| HighlightedMarkdown.server.vue +-| components/ +---| HighlightedMarkdown.server.vue ``` ```vue [pages/example.vue] @@ -355,9 +359,9 @@ Slots can be interactive and are wrapped within a `

` with `display: content In this case, the `.server` + `.client` components are two 'halves' of a component and can be used in advanced use cases for separate implementations of a component on server and client side. ```bash [Directory Structure] -| components/ ---| Comments.client.vue ---| Comments.server.vue +-| components/ +---| Comments.client.vue +---| Comments.server.vue ``` ```vue [pages/example.vue] @@ -385,15 +389,15 @@ You can use the `components:dirs` hook to extend the directory list without requ Imagine a directory structure like this: ```bash [Directory Structure] -| node_modules/ +-| node_modules/ ---| awesome-ui/ -------| components/ ----------| Alert.vue ----------| Button.vue -------| nuxt.js -| pages/ +-----| components/ +-------| Alert.vue +-------| Button.vue +-----| nuxt.js +-| pages/ ---| index.vue -| nuxt.config.js +-| nuxt.config.js ``` Then in `awesome-ui/nuxt.js` you can use the `components:dirs` hook: diff --git a/docs/2.guide/2.directory-structure/1.composables.md b/docs/2.guide/2.directory-structure/1.composables.md index 5adae8bd29..ed96746656 100644 --- a/docs/2.guide/2.directory-structure/1.composables.md +++ b/docs/2.guide/2.directory-structure/1.composables.md @@ -2,7 +2,7 @@ title: 'composables' head.title: 'composables/' description: Use the composables/ directory to auto-import your Vue composables into your application. -navigation.icon: i-ph-folder-duotone +navigation.icon: i-ph-folder --- ## Usage @@ -85,11 +85,11 @@ export const useHello = () => { Nuxt only scans files at the top level of the [`composables/` directory](/docs/guide/directory-structure/composables), e.g.: ```bash [Directory Structure] -| composables/ +-| composables/ ---| index.ts // scanned ---| useFoo.ts // scanned ------| nested/ --------| utils.ts // not scanned +---| nested/ +-----| utils.ts // not scanned ``` Only `composables/index.ts` and `composables/useFoo.ts` would be searched for imports. diff --git a/docs/2.guide/2.directory-structure/1.content.md b/docs/2.guide/2.directory-structure/1.content.md index 361a5971c8..5800a362a0 100644 --- a/docs/2.guide/2.directory-structure/1.content.md +++ b/docs/2.guide/2.directory-structure/1.content.md @@ -2,7 +2,7 @@ title: 'content' head.title: 'content/' description: Use the content/ directory to create a file-based CMS for your application. -navigation.icon: i-ph-folder-duotone +navigation.icon: i-ph-folder --- [Nuxt Content](https://content.nuxt.com) reads the [`content/` directory](/docs/guide/directory-structure/content) in your project and parses `.md`, `.yml`, `.csv` and `.json` files to create a file-based CMS for your application. diff --git a/docs/2.guide/2.directory-structure/1.layouts.md b/docs/2.guide/2.directory-structure/1.layouts.md index ee95033f8e..4aa9fc98f8 100644 --- a/docs/2.guide/2.directory-structure/1.layouts.md +++ b/docs/2.guide/2.directory-structure/1.layouts.md @@ -2,10 +2,10 @@ title: "layouts" head.title: "layouts/" description: "Nuxt provides a layouts framework to extract common UI patterns into reusable layouts." -navigation.icon: i-ph-folder-duotone +navigation.icon: i-ph-folder --- -::tip{icon="i-ph-rocket-launch-duotone" color="gray" } +::tip{icon="i-ph-rocket-launch" color="gray" } For best performance, components placed in this directory will be automatically loaded via asynchronous import when used. :: diff --git a/docs/2.guide/2.directory-structure/1.middleware.md b/docs/2.guide/2.directory-structure/1.middleware.md index 64e66ecf6d..d17c6ceb7c 100644 --- a/docs/2.guide/2.directory-structure/1.middleware.md +++ b/docs/2.guide/2.directory-structure/1.middleware.md @@ -2,7 +2,7 @@ title: "middleware" description: "Nuxt provides middleware to run code before navigating to a particular route." head.title: "middleware/" -navigation.icon: i-ph-folder-duotone +navigation.icon: i-ph-folder --- Nuxt provides a customizable **route middleware** framework you can use throughout your application, ideal for extracting code that you want to run before navigating to a particular route. @@ -72,11 +72,11 @@ Middleware runs in the following order: For example, assuming you have the following middleware and component: -```text [middleware/ directory] -middleware/ ---| analytics.global.ts ---| setup.global.ts ---| auth.ts +```bash [middleware/ directory] +-| middleware/ +---| analytics.global.ts +---| setup.global.ts +---| auth.ts ``` ```vue twoslash [pages/profile.vue] @@ -105,11 +105,11 @@ By default, global middleware is executed alphabetically based on the filename. However, there may be times you want to define a specific order. For example, in the last scenario, `setup.global.ts` may need to run before `analytics.global.ts`. In that case, we recommend prefixing global middleware with 'alphabetical' numbering. -```text [Directory structure] -middleware/ ---| 01.setup.global.ts ---| 02.analytics.global.ts ---| auth.ts +```bash [Directory structure] +-| middleware/ +---| 01.setup.global.ts +---| 02.analytics.global.ts +---| auth.ts ``` ::note diff --git a/docs/2.guide/2.directory-structure/1.modules.md b/docs/2.guide/2.directory-structure/1.modules.md index f544e815bc..0321c56f69 100644 --- a/docs/2.guide/2.directory-structure/1.modules.md +++ b/docs/2.guide/2.directory-structure/1.modules.md @@ -2,7 +2,7 @@ title: 'modules' head.title: 'modules/' description: Use the modules/ directory to automatically register local modules within your application. -navigation.icon: i-ph-folder-duotone +navigation.icon: i-ph-folder --- It is a good place to place any local modules you develop while building your application. @@ -61,6 +61,6 @@ modules/ :read-more{to="/docs/guide/going-further/modules"} -::tip{icon="i-ph-video-duotone" to="https://vueschool.io/lessons/creating-your-first-module-from-scratch?friend=nuxt" target="_blank"} +::tip{icon="i-ph-video" to="https://vueschool.io/lessons/creating-your-first-module-from-scratch?friend=nuxt" target="_blank"} Watch Vue School video about Nuxt private modules. :: diff --git a/docs/2.guide/2.directory-structure/1.node_modules.md b/docs/2.guide/2.directory-structure/1.node_modules.md index 13c7780e6a..afdb2d753a 100644 --- a/docs/2.guide/2.directory-structure/1.node_modules.md +++ b/docs/2.guide/2.directory-structure/1.node_modules.md @@ -2,7 +2,7 @@ title: "node_modules" description: "The package manager stores the dependencies of your project in the node_modules/ directory." head.title: "node_modules/" -navigation.icon: i-ph-folder-duotone +navigation.icon: i-ph-folder --- The package manager ([`npm`](https://docs.npmjs.com/cli/commands/npm) or [`yarn`](https://yarnpkg.com) or [`pnpm`](https://pnpm.io/cli/install) or [`bun`](https://bun.sh/package-manager)) creates this directory to store the dependencies of your project. diff --git a/docs/2.guide/2.directory-structure/1.pages.md b/docs/2.guide/2.directory-structure/1.pages.md index 1367f6f871..0efb13daac 100644 --- a/docs/2.guide/2.directory-structure/1.pages.md +++ b/docs/2.guide/2.directory-structure/1.pages.md @@ -2,7 +2,7 @@ title: "pages" description: "Nuxt provides file-based routing to create routes within your web application." head.title: "pages/" -navigation.icon: i-ph-folder-duotone +navigation.icon: i-ph-folder --- ::note @@ -159,7 +159,7 @@ Example: ```bash [Directory Structure] -| pages/ ---| parent/ -------| child.vue +-----| child.vue ---| parent.vue ``` @@ -408,7 +408,7 @@ However, you can use [Nuxt Layers](/docs/getting-started/layers) to create group ```bash [Directory Structure] -| some-app/ ---| nuxt.config.ts ----| pages +---| pages/ -----| app-page.vue -| nuxt.config.ts ``` diff --git a/docs/2.guide/2.directory-structure/1.plugins.md b/docs/2.guide/2.directory-structure/1.plugins.md index d76acdade7..572675300c 100644 --- a/docs/2.guide/2.directory-structure/1.plugins.md +++ b/docs/2.guide/2.directory-structure/1.plugins.md @@ -2,7 +2,7 @@ title: "plugins" description: "Nuxt has a plugins system to use Vue plugins and more at the creation of your Vue application." head.title: "plugins/" -navigation.icon: i-ph-folder-duotone +navigation.icon: i-ph-folder --- Nuxt automatically reads the files in the `plugins/` directory and loads them at the creation of the Vue application. @@ -76,7 +76,7 @@ export default defineNuxtPlugin({ }) ``` -::tip{icon="i-ph-video-duotone" to="https://www.youtube.com/watch?v=2aXZyXB1QGQ" target="_blank"} +::tip{icon="i-ph-video" to="https://www.youtube.com/watch?v=2aXZyXB1QGQ" target="_blank"} Watch a video from Alexander Lichter about the Object Syntax for Nuxt plugins. :: @@ -108,7 +108,7 @@ In case you're new to 'alphabetical' numbering, remember that filenames are sort ### Parallel Plugins -By default, Nuxt loads plugins sequentially. You can define a plugin as `parallel` so Nuxt won't wait the end of the plugin's execution before loading the next plugin. +By default, Nuxt loads plugins sequentially. You can define a plugin as `parallel` so Nuxt won't wait until the end of the plugin's execution before loading the next plugin. ```ts twoslash [plugins/my-plugin.ts] export default defineNuxtPlugin({ diff --git a/docs/2.guide/2.directory-structure/1.public.md b/docs/2.guide/2.directory-structure/1.public.md index da5daa87bf..894654a962 100644 --- a/docs/2.guide/2.directory-structure/1.public.md +++ b/docs/2.guide/2.directory-structure/1.public.md @@ -2,7 +2,7 @@ title: "public" description: "The public/ directory is used to serve your website's static assets." head.title: "public/" -navigation.icon: i-ph-folder-duotone +navigation.icon: i-ph-folder --- Files contained within the `public/` directory are served at the root and are not modified by the build process. This is suitable for files that have to keep their names (e.g. `robots.txt`) _or_ likely won't change (e.g. `favicon.ico`). diff --git a/docs/2.guide/2.directory-structure/1.server.md b/docs/2.guide/2.directory-structure/1.server.md index 37e9cfe1f6..cbf68709d9 100644 --- a/docs/2.guide/2.directory-structure/1.server.md +++ b/docs/2.guide/2.directory-structure/1.server.md @@ -2,7 +2,7 @@ title: server head.title: 'server/' description: The server/ directory is used to register API and server handlers to your application. -navigation.icon: i-ph-folder-duotone +navigation.icon: i-ph-folder --- Nuxt automatically scans files inside these directories to register API and server handlers with Hot Module Replacement (HMR) support. @@ -347,6 +347,22 @@ export default defineEventHandler((event) => { }) ``` +### Forwarding Context & Headers + +By default, neither the headers from the incoming request nor the request context are forwarded when +making fetch requests in server routes. You can use `event.$fetch` to forward the request context and headers when making fetch requests in server routes. + +```ts [server/api/forward.ts] +export default defineEventHandler((event) => { + return event.$fetch('/api/forwarded') +}) +``` + +::note +Headers that are **not meant to be forwarded** will **not be included** in the request. These headers include, for example: +`transfer-encoding`, `connection`, `keep-alive`, `upgrade`, `expect`, `host`, `accept` +:: + ## Advanced Usage ### Nitro Config diff --git a/docs/2.guide/2.directory-structure/1.utils.md b/docs/2.guide/2.directory-structure/1.utils.md index 74d847d675..f7148c93fb 100644 --- a/docs/2.guide/2.directory-structure/1.utils.md +++ b/docs/2.guide/2.directory-structure/1.utils.md @@ -2,7 +2,7 @@ title: 'utils' head.title: 'utils/' description: Use the utils/ directory to auto-import your utility functions throughout your application. -navigation.icon: i-ph-folder-duotone +navigation.icon: i-ph-folder --- The main purpose of the [`utils/` directory](/docs/guide/directory-structure/utils) is to allow a semantic distinction between your Vue composables and other auto-imported utility functions. diff --git a/docs/2.guide/2.directory-structure/2.env.md b/docs/2.guide/2.directory-structure/2.env.md index b0d4a82e6e..422dde9f90 100644 --- a/docs/2.guide/2.directory-structure/2.env.md +++ b/docs/2.guide/2.directory-structure/2.env.md @@ -2,7 +2,7 @@ title: ".env" description: "A .env file specifies your build/dev-time environment variables." head.title: ".env" -navigation.icon: i-ph-file-duotone +navigation.icon: i-ph-file --- ::important diff --git a/docs/2.guide/2.directory-structure/2.gitignore.md b/docs/2.guide/2.directory-structure/2.gitignore.md index a4d69321ee..9247e32dbd 100644 --- a/docs/2.guide/2.directory-structure/2.gitignore.md +++ b/docs/2.guide/2.directory-structure/2.gitignore.md @@ -2,7 +2,7 @@ title: ".gitignore" description: "A .gitignore file specifies intentionally untracked files that git should ignore." head.title: ".gitignore" -navigation.icon: i-ph-file-duotone +navigation.icon: i-ph-file --- A `.gitignore` file specifies intentionally untracked files that git should ignore. diff --git a/docs/2.guide/2.directory-structure/2.nuxtignore.md b/docs/2.guide/2.directory-structure/2.nuxtignore.md index 6c34c0be42..93a1139b14 100644 --- a/docs/2.guide/2.directory-structure/2.nuxtignore.md +++ b/docs/2.guide/2.directory-structure/2.nuxtignore.md @@ -2,7 +2,7 @@ title: .nuxtignore head.title: '.nuxtignore' description: The .nuxtignore file lets Nuxt ignore files in your projectโ€™s root directory during the build phase. -navigation.icon: i-ph-file-duotone +navigation.icon: i-ph-file --- The `.nuxtignore` file tells Nuxt to ignore files in your projectโ€™s root directory ([`rootDir`](/docs/api/nuxt-config#rootdir)) during the build phase. diff --git a/docs/2.guide/2.directory-structure/3.app-config.md b/docs/2.guide/2.directory-structure/3.app-config.md index 3e97d0e88b..656d5c16a1 100644 --- a/docs/2.guide/2.directory-structure/3.app-config.md +++ b/docs/2.guide/2.directory-structure/3.app-config.md @@ -2,7 +2,7 @@ title: app.config.ts head.title: 'app.config.ts' description: Expose reactive configuration within your application with the App Config file. -navigation.icon: i-ph-file-duotone +navigation.icon: i-ph-file --- Nuxt provides an `app.config` config file to expose reactive configuration within your application with the ability to update it at runtime within lifecycle or using a nuxt plugin and editing it with HMR (hot-module-replacement). diff --git a/docs/2.guide/2.directory-structure/3.app.md b/docs/2.guide/2.directory-structure/3.app.md index 2716e38581..8158891ada 100644 --- a/docs/2.guide/2.directory-structure/3.app.md +++ b/docs/2.guide/2.directory-structure/3.app.md @@ -2,7 +2,7 @@ title: "app.vue" description: "The app.vue file is the main component of your Nuxt application." head.title: "app.vue" -navigation.icon: i-ph-file-duotone +navigation.icon: i-ph-file --- ## Minimal Usage diff --git a/docs/2.guide/2.directory-structure/3.error.md b/docs/2.guide/2.directory-structure/3.error.md index ffdd6eac0e..13dd45bf7a 100644 --- a/docs/2.guide/2.directory-structure/3.error.md +++ b/docs/2.guide/2.directory-structure/3.error.md @@ -2,7 +2,7 @@ title: "error.vue" description: "The error.vue file is the error page in your Nuxt application." head.title: "error.vue" -navigation.icon: i-ph-file-duotone +navigation.icon: i-ph-file --- During the lifespan of your application, some errors may appear unexpectedly at runtime. In such case, we can use the `error.vue` file to override the default error files and display the error nicely. diff --git a/docs/2.guide/2.directory-structure/3.nuxt-config.md b/docs/2.guide/2.directory-structure/3.nuxt-config.md index 1174095d2b..997f8999bc 100644 --- a/docs/2.guide/2.directory-structure/3.nuxt-config.md +++ b/docs/2.guide/2.directory-structure/3.nuxt-config.md @@ -2,7 +2,7 @@ title: "nuxt.config.ts" description: "Nuxt can be easily configured with a single nuxt.config file." head.title: "nuxt.config.ts" -navigation.icon: i-ph-file-duotone +navigation.icon: i-ph-file --- The `nuxt.config` file extension can either be `.js`, `.ts` or `.mjs`. diff --git a/docs/2.guide/2.directory-structure/3.package.md b/docs/2.guide/2.directory-structure/3.package.md index ad5757fbf0..c2e6e56607 100644 --- a/docs/2.guide/2.directory-structure/3.package.md +++ b/docs/2.guide/2.directory-structure/3.package.md @@ -2,7 +2,7 @@ title: package.json head.title: package.json description: The package.json file contains all the dependencies and scripts for your application. -navigation.icon: i-ph-file-duotone +navigation.icon: i-ph-file --- The minimal `package.json` of your Nuxt application should looks like: diff --git a/docs/2.guide/2.directory-structure/3.tsconfig.md b/docs/2.guide/2.directory-structure/3.tsconfig.md index eca36286d1..5ed9df4449 100644 --- a/docs/2.guide/2.directory-structure/3.tsconfig.md +++ b/docs/2.guide/2.directory-structure/3.tsconfig.md @@ -2,7 +2,7 @@ title: "tsconfig.json" description: "Nuxt generates a .nuxt/tsconfig.json file with sensible defaults and your aliases." head.title: "tsconfig.json" -navigation.icon: i-ph-file-duotone +navigation.icon: i-ph-file --- Nuxt [automatically generates](/docs/guide/concepts/typescript) a `.nuxt/tsconfig.json` file with the resolved aliases you are using in your Nuxt project, as well as with other sensible defaults. diff --git a/docs/2.guide/2.directory-structure/_dir.yml b/docs/2.guide/2.directory-structure/_dir.yml index 4d663658ad..4f0a802ac3 100644 --- a/docs/2.guide/2.directory-structure/_dir.yml +++ b/docs/2.guide/2.directory-structure/_dir.yml @@ -1,3 +1,3 @@ title: Directory Structure titleTemplate: '%s ยท Nuxt Directory Structure' -icon: i-ph-folders-duotone +icon: i-ph-folders diff --git a/docs/2.guide/3.going-further/1.experimental-features.md b/docs/2.guide/3.going-further/1.experimental-features.md index 136cadf805..31bed1a8ae 100644 --- a/docs/2.guide/3.going-further/1.experimental-features.md +++ b/docs/2.guide/3.going-further/1.experimental-features.md @@ -104,11 +104,11 @@ export default defineNuxtConfig({ Matching route rules will be created, based on the page's `path`. -::read-more{to="/docs/api/utils/define-route-rules" icon="i-ph-function-duotone"} +::read-more{to="/docs/api/utils/define-route-rules" icon="i-ph-function"} Read more in `defineRouteRules` utility. :: -:read-more{to="/docs/guide/concepts/rendering#hybrid-rendering" icon="i-ph-medal-duotone"} +:read-more{to="/docs/guide/concepts/rendering#hybrid-rendering" icon="i-ph-medal"} ## renderJsonPayloads @@ -254,7 +254,7 @@ Out of the box, this will enable typed usage of [`navigateTo`](/docs/api/utils/n You can even get typed params within a page by using `const route = useRoute('route-name')`. -::tip{icon="i-ph-video-duotone" to="https://www.youtube.com/watch?v=SXk-L19gTZk" target="_blank"} +::tip{icon="i-ph-video" to="https://www.youtube.com/watch?v=SXk-L19gTZk" target="_blank"} Watch a video from Daniel Roe explaining type-safe routing in Nuxt. :: @@ -292,7 +292,7 @@ export default defineNuxtConfig({ }) ``` -::tip{icon="i-ph-video-duotone" to="https://www.youtube.com/watch?v=1jUupYHVvrU" target="_blank"} +::tip{icon="i-ph-video" to="https://www.youtube.com/watch?v=1jUupYHVvrU" target="_blank"} Watch a video from Alexander Lichter about the experimental `sharedPrerenderData` setting. :: @@ -390,3 +390,31 @@ In addition, any changes to files within `srcDir` will trigger a rebuild of the ::note A maximum of 10 cache tarballs are kept. :: + +## normalizeComponentNames + +Ensure that auto-generated Vue component names match the full component name +you would use to auto-import the component. + +```ts twoslash [nuxt.config.ts] +export default defineNuxtConfig({ + experimental: { + normalizeComponentNames: true + } +}) +``` + +By default, if you haven't set it manually, Vue will assign a component name that matches +the filename of the component. + +```bash [Directory structure] +โ”œโ”€ components/ +โ”œโ”€โ”€โ”€ SomeFolder/ +โ”œโ”€โ”€โ”€โ”€โ”€ MyComponent.vue +``` + +In this case, the component name would be `MyComponent`, as far as Vue is concerned. If you wanted to use `` with it, or identify it in the Vue DevTools, you would need to use this component. + +But in order to auto-import it, you would need to use `SomeFolderMyComponent`. + +By setting `experimental.normalizeComponentNames`, these two values match, and Vue will generate a component name that matches the Nuxt pattern for component naming. diff --git a/docs/2.guide/3.going-further/1.features.md b/docs/2.guide/3.going-further/1.features.md index 02056f1e12..247df516e2 100644 --- a/docs/2.guide/3.going-further/1.features.md +++ b/docs/2.guide/3.going-further/1.features.md @@ -61,9 +61,12 @@ export default defineNuxtConfig({ app: 'app' }, experimental: { + sharedPrerenderData: false, compileTemplate: true, + resetAsyncDataToUndefined: true, templateUtils: true, relativeWatchPaths: true, + normalizeComponentNames: false defaults: { useAsyncData: { deep: true diff --git a/docs/2.guide/3.going-further/10.runtime-config.md b/docs/2.guide/3.going-further/10.runtime-config.md index d43b794bf1..69f9fb9876 100644 --- a/docs/2.guide/3.going-further/10.runtime-config.md +++ b/docs/2.guide/3.going-further/10.runtime-config.md @@ -61,7 +61,7 @@ Setting the default of `runtimeConfig` values to *differently named environment It is advised to use environment variables that match the structure of your `runtimeConfig` object. :: -::tip{icon="i-ph-video-duotone" to="https://youtu.be/_FYV5WfiWvs" target="_blank"} +::tip{icon="i-ph-video" to="https://youtu.be/_FYV5WfiWvs" target="_blank"} Watch a video from Alexander Lichter showcasing the top mistake developers make using runtimeConfig. :: diff --git a/docs/2.guide/3.going-further/3.modules.md b/docs/2.guide/3.going-further/3.modules.md index eb418d0f72..b12d886821 100644 --- a/docs/2.guide/3.going-further/3.modules.md +++ b/docs/2.guide/3.going-further/3.modules.md @@ -45,7 +45,7 @@ This will create a `my-module` project with all the boilerplate necessary to dev Learn how to perform basic tasks with the module starter. -::tip{icon="i-ph-video-duotone" to="https://vueschool.io/lessons/navigating-the-official-starter-template?friend=nuxt" target="_blank"} +::tip{icon="i-ph-video" to="https://vueschool.io/lessons/navigating-the-official-starter-template?friend=nuxt" target="_blank"} Watch Vue School video about Nuxt module starter template. :: @@ -274,7 +274,7 @@ export default defineNuxtModule({ When you need to handle more complex configuration alterations, you should consider using [defu](https://github.com/unjs/defu). -::tip{icon="i-ph-video-duotone" to="https://vueschool.io/lessons/extending-and-altering-nuxt-configuration-and-options?friend=nuxt" target="_blank"} +::tip{icon="i-ph-video" to="https://vueschool.io/lessons/extending-and-altering-nuxt-configuration-and-options?friend=nuxt" target="_blank"} Watch Vue School video about altering Nuxt configuration. :: @@ -311,7 +311,7 @@ Be careful not to expose any sensitive module configuration on the public runtim :read-more{to="/docs/guide/going-further/runtime-config"} -::tip{icon="i-ph-video-duotone" to="https://vueschool.io/lessons/passing-and-exposing-module-options?friend=nuxt" target="_blank"} +::tip{icon="i-ph-video" to="https://vueschool.io/lessons/passing-and-exposing-module-options?friend=nuxt" target="_blank"} Watch Vue School video about passing and exposing Nuxt module options. :: @@ -538,7 +538,7 @@ export default defineNuxtModule({ :read-more{to="/docs/api/advanced/hooks"} -::tip{icon="i-ph-video-duotone" to="https://vueschool.io/lessons/nuxt-lifecycle-hooks?friend=nuxt" target="_blank"} +::tip{icon="i-ph-video" to="https://vueschool.io/lessons/nuxt-lifecycle-hooks?friend=nuxt" target="_blank"} Watch Vue School video about using Nuxt lifecycle hooks in modules. :: @@ -764,7 +764,7 @@ The module starter comes with a default set of tools and configurations (e.g. ES [Nuxt Module ecosystem](/modules) represents more than 15 million monthly NPM downloads and provides extended functionalities and integrations with all sort of tools. You can be part of this ecosystem! -::tip{icon="i-ph-video-duotone" to="https://vueschool.io/lessons/exploring-nuxt-modules-ecosystem-and-module-types?friend=nuxt" target="_blank"} +::tip{icon="i-ph-video" to="https://vueschool.io/lessons/exploring-nuxt-modules-ecosystem-and-module-types?friend=nuxt" target="_blank"} Watch Vue School video about Nuxt module types. :: diff --git a/docs/2.guide/3.going-further/_dir.yml b/docs/2.guide/3.going-further/_dir.yml index 20cbae3d01..80b2c5b728 100644 --- a/docs/2.guide/3.going-further/_dir.yml +++ b/docs/2.guide/3.going-further/_dir.yml @@ -1,3 +1,3 @@ title: Going Further titleTemplate: '%s ยท Nuxt Advanced' -icon: i-ph-star-duotone +icon: i-ph-star diff --git a/docs/2.guide/4.recipes/3.custom-usefetch.md b/docs/2.guide/4.recipes/3.custom-usefetch.md index e8f25f6a2b..a0ac6d7e29 100644 --- a/docs/2.guide/4.recipes/3.custom-usefetch.md +++ b/docs/2.guide/4.recipes/3.custom-usefetch.md @@ -31,14 +31,8 @@ export default defineNuxtPlugin((nuxtApp) => { baseURL: 'https://api.nuxt.com', onRequest({ request, options, error }) { if (session.value?.token) { - const headers = options.headers ||= {} - if (Array.isArray(headers)) { - headers.push(['Authorization', `Bearer ${session.value?.token}`]) - } else if (headers instanceof Headers) { - headers.set('Authorization', `Bearer ${session.value?.token}`) - } else { - headers.Authorization = `Bearer ${session.value?.token}` - } + // note that this relies on ofetch >= 1.4.0 - you may need to refresh your lockfile + options.headers.set('Authorization', `Bearer ${session.value?.token}`) } }, async onResponseError({ response }) { @@ -96,6 +90,28 @@ const { data: modules } = await useAPI('/modules') ``` +If you want to customize the type of any error returned, you can also do so: + +```ts +import type { FetchError } from 'ofetch' +import type { UseFetchOptions } from 'nuxt/app' + +interface CustomError { + message: string + statusCode: number +} + +export function useAPI( + url: string | (() => string), + options?: UseFetchOptions, +) { + return useFetch>(url, { + ...options, + $fetch: useNuxtApp().$api + }) +} +``` + ::note This example demonstrates how to use a custom `useFetch`, but the same structure is identical for a custom `useAsyncData`. :: diff --git a/docs/2.guide/4.recipes/_dir.yml b/docs/2.guide/4.recipes/_dir.yml index b63c755e5f..5030f4b88d 100644 --- a/docs/2.guide/4.recipes/_dir.yml +++ b/docs/2.guide/4.recipes/_dir.yml @@ -1,3 +1,3 @@ title: Recipes titleTemplate: '%s ยท Recipes' -icon: i-ph-cooking-pot-duotone +icon: i-ph-cooking-pot diff --git a/docs/2.guide/_dir.yml b/docs/2.guide/_dir.yml index 39506eabf0..9fb4817fc8 100644 --- a/docs/2.guide/_dir.yml +++ b/docs/2.guide/_dir.yml @@ -1,2 +1,2 @@ title: 'Guide' -icon: i-ph-book-open-duotone +icon: i-ph-book-open diff --git a/docs/3.api/1.components/_dir.yml b/docs/3.api/1.components/_dir.yml index d78fe4060a..33401303cf 100644 --- a/docs/3.api/1.components/_dir.yml +++ b/docs/3.api/1.components/_dir.yml @@ -1,3 +1,3 @@ title: 'Components' titleTemplate: '%s ยท Nuxt Components' -icon: i-ph-cube-duotone +icon: i-ph-cube diff --git a/docs/3.api/2.composables/_dir.yml b/docs/3.api/2.composables/_dir.yml index 35d41bbd10..e33d9ed036 100644 --- a/docs/3.api/2.composables/_dir.yml +++ b/docs/3.api/2.composables/_dir.yml @@ -1,3 +1,3 @@ title: 'Composables' titleTemplate: '%s ยท Nuxt Composables' -icon: i-ph-arrows-left-right-duotone +icon: i-ph-arrows-left-right diff --git a/docs/3.api/2.composables/use-fetch.md b/docs/3.api/2.composables/use-fetch.md index e759d165f1..56effdc62c 100644 --- a/docs/3.api/2.composables/use-fetch.md +++ b/docs/3.api/2.composables/use-fetch.md @@ -50,8 +50,8 @@ You can also use [interceptors](https://github.com/unjs/ofetch#%EF%B8%8F-interce const { data, status, error, refresh, clear } = await useFetch('/api/auth/login', { onRequest({ request, options }) { // Set the request headers - options.headers = options.headers || {} - options.headers.authorization = '...' + // note that this relies on ofetch >= 1.4.0 - you may need to refresh your lockfile + options.headers.set('Authorization', '...') }, onRequestError({ request, options, error }) { // Handle the request errors @@ -74,7 +74,7 @@ const { data, status, error, refresh, clear } = await useFetch('/api/auth/login' If you encounter the `data` variable destructured from a `useFetch` returns a string and not a JSON parsed object then make sure your component doesn't include an import statement like `import { useFetch } from '@vueuse/core`. :: -::tip{icon="i-ph-video-duotone" to="https://www.youtube.com/watch?v=njsGVmcWviY" target="_blank"} +::tip{icon="i-ph-video" to="https://www.youtube.com/watch?v=njsGVmcWviY" target="_blank"} Watch the video from Alexander Lichter to avoid using `useFetch` the wrong way! :: diff --git a/docs/3.api/2.composables/use-nuxt-app.md b/docs/3.api/2.composables/use-nuxt-app.md index 5ab9289638..6b915edf00 100644 --- a/docs/3.api/2.composables/use-nuxt-app.md +++ b/docs/3.api/2.composables/use-nuxt-app.md @@ -138,7 +138,7 @@ Nuxt exposes the following properties through `ssrContext`: Since [Nuxt v3.4](https://nuxt.com/blog/v3-4#payload-enhancements), it is possible to define your own reducer/reviver for types that are not supported by Nuxt. - ::tip{icon="i-ph-video-duotone" to="https://www.youtube.com/watch?v=8w6ffRBs8a4" target="_blank"} + ::tip{icon="i-ph-video" to="https://www.youtube.com/watch?v=8w6ffRBs8a4" target="_blank"} Watch a video from Alexander Lichter about serializing payloads, especially with regards to classes. :: diff --git a/docs/3.api/2.composables/use-request-fetch.md b/docs/3.api/2.composables/use-request-fetch.md new file mode 100644 index 0000000000..dac922e393 --- /dev/null +++ b/docs/3.api/2.composables/use-request-fetch.md @@ -0,0 +1,52 @@ +--- +title: 'useRequestFetch' +description: 'Forward the request context and headers for server-side fetch requests with the useRequestFetch composable.' +links: + - label: Source + icon: i-simple-icons-github + to: https://github.com/nuxt/nuxt/blob/main/packages/nuxt/src/app/composables/ssr.ts + size: xs +--- + +You can use `useRequestFetch` to forward the request context and headers when making server-side fetch requests. + +When making a client-side fetch request, the browser automatically sends the necessary headers. +However, when making a request during server-side rendering, because the request is made on the server, we need to forward the headers manually. + +::note +Headers that are **not meant to be forwarded** will **not be included** in the request. These headers include, for example: +`transfer-encoding`, `connection`, `keep-alive`, `upgrade`, `expect`, `host`, `accept` +:: + +::tip +The [`useFetch`](/docs/api/composables/use-fetch) composable uses `useRequestFetch` under the hood to automatically forward the request context and headers. +:: + +::code-group + +```vue [pages/index.vue] + +``` + +```ts [server/api/cookies.ts] +export default defineEventHandler((event) => { + const cookies = parseCookies(event) + + return { cookies } +}) +``` + +:: + +::tip +In the browser during client-side navigation, `useRequestFetch` will behave just like regular [`$fetch`](/docs/api/utils/dollarfetch). +:: diff --git a/docs/3.api/2.composables/use-response-header.md b/docs/3.api/2.composables/use-response-header.md new file mode 100644 index 0000000000..d78fd89a4a --- /dev/null +++ b/docs/3.api/2.composables/use-response-header.md @@ -0,0 +1,48 @@ +--- +title: "useResponseHeader" +description: "Use useResponseHeader to set a server response header." +links: + - label: Source + icon: i-simple-icons-github + to: https://github.com/nuxt/nuxt/blob/main/packages/nuxt/src/app/composables/ssr.ts + size: xs +--- + +::important +This composable is available in Nuxt v3.14+. +:: + +You can use the built-in [`useResponseHeader`](/docs/api/composables/use-response-header) composable to set any server response header within your pages, components, and plugins. + +```ts +// Set the a custom response header +const header = useResponseHeader('X-My-Header'); +header.value = 'my-value'; +``` + +## Example + +We can use `useResponseHeader` to easily set a response header on a per-page basis. + +```vue [pages/test.vue] + + + +``` + +We can use `useResponseHeader` for example in Nuxt [middleware](/docs/guide/directory-structure/middleware) to set a response header for all pages. + +```ts [middleware/my-header-middleware.ts] +export default defineNuxtRouteMiddleware((to, from) => { + const header = useResponseHeader('X-My-Always-Header'); + header.value = `I'm Always here!`; +}); + +``` diff --git a/docs/3.api/2.composables/use-state.md b/docs/3.api/2.composables/use-state.md index 513bd407c6..c8194dc9ed 100644 --- a/docs/3.api/2.composables/use-state.md +++ b/docs/3.api/2.composables/use-state.md @@ -25,7 +25,7 @@ Because the data inside `useState` will be serialized to JSON, it is important t `useState` is a reserved function name transformed by the compiler, so you should not name your own function `useState`. :: -::tip{icon="i-ph-video-duotone" to="https://www.youtube.com/watch?v=mv0WcBABcIk" target="_blank"} +::tip{icon="i-ph-video" to="https://www.youtube.com/watch?v=mv0WcBABcIk" target="_blank"} Watch a video from Alexander Lichter about why and when to use `useState()`. :: diff --git a/docs/3.api/3.utils/$fetch.md b/docs/3.api/3.utils/$fetch.md index ff0ed5cf05..ab8a947aad 100644 --- a/docs/3.api/3.utils/$fetch.md +++ b/docs/3.api/3.utils/$fetch.md @@ -10,11 +10,11 @@ links: Nuxt uses [ofetch](https://github.com/unjs/ofetch) to expose globally the `$fetch` helper for making HTTP requests within your Vue app or API routes. -::tip{icon="i-ph-rocket-launch-duotone" color="gray"} +::tip{icon="i-ph-rocket-launch" color="gray"} During server-side rendering, calling `$fetch` to fetch your internal [API routes](/docs/guide/directory-structure/server) will directly call the relevant function (emulating the request), **saving an additional API call**. :: -::note{color="blue" icon="i-ph-info-duotone"} +::note{color="blue" icon="i-ph-info"} Using `$fetch` in components without wrapping it with [`useAsyncData`](/docs/api/composables/use-async-data) causes fetching the data twice: initially on the server, then again on the client-side during hydration, because `$fetch` does not transfer state from the server to the client. Thus, the fetch will be executed on both sides because the client has to get the data again. :: diff --git a/docs/3.api/3.utils/_dir.yml b/docs/3.api/3.utils/_dir.yml index 50d20caf25..c3ef54ea5c 100644 --- a/docs/3.api/3.utils/_dir.yml +++ b/docs/3.api/3.utils/_dir.yml @@ -1,3 +1,3 @@ title: 'Utils' titleTemplate: '%s ยท Nuxt Utils' -navigation.icon: i-ph-function-duotone +navigation.icon: i-ph-function diff --git a/docs/3.api/3.utils/define-route-rules.md b/docs/3.api/3.utils/define-route-rules.md index 309a64fd21..50557cea88 100644 --- a/docs/3.api/3.utils/define-route-rules.md +++ b/docs/3.api/3.utils/define-route-rules.md @@ -8,7 +8,7 @@ links: size: xs --- -::read-more{to="/docs/guide/going-further/experimental-features#inlinerouterules" icon="i-ph-star-duotone"} +::read-more{to="/docs/guide/going-further/experimental-features#inlinerouterules" icon="i-ph-star"} This feature is experimental and in order to use it you must enable the `experimental.inlineRouteRules` option in your `nuxt.config`. :: @@ -47,6 +47,6 @@ When running [`nuxt build`](/docs/api/commands/build), the home page will be pre For more control, such as if you are using a custom `path` or `alias` set in the page's [`definePageMeta`](/docs/api/utils/define-page-meta), you should set `routeRules` directly within your `nuxt.config`. -::read-more{to="/docs/guide/concepts/rendering#hybrid-rendering" icon="i-ph-medal-duotone"} +::read-more{to="/docs/guide/concepts/rendering#hybrid-rendering" icon="i-ph-medal"} Read more about the `routeRules`. :: diff --git a/docs/3.api/3.utils/preload-route-components.md b/docs/3.api/3.utils/preload-route-components.md index a0bf7c1932..d888bb75d4 100644 --- a/docs/3.api/3.utils/preload-route-components.md +++ b/docs/3.api/3.utils/preload-route-components.md @@ -10,7 +10,7 @@ links: Preloading routes loads the components of a given route that the user might navigate to in future. This ensures that the components are available earlier and less likely to block the navigation, improving performance. -::tip{icon="i-ph-rocket-launch-duotone" color="gray"} +::tip{icon="i-ph-rocket-launch" color="gray"} Nuxt already automatically preloads the necessary routes if you're using the `NuxtLink` component. :: diff --git a/docs/3.api/3.utils/reload-nuxt-app.md b/docs/3.api/3.utils/reload-nuxt-app.md index 3b25a95905..0244c78b9c 100644 --- a/docs/3.api/3.utils/reload-nuxt-app.md +++ b/docs/3.api/3.utils/reload-nuxt-app.md @@ -14,7 +14,7 @@ links: By default, it will also save the current `state` of your app (that is, any state you could access with `useState`). -::read-more{to="/docs/guide/going-further/experimental-features#restorestate" icon="i-ph-star-duotone"} +::read-more{to="/docs/guide/going-further/experimental-features#restorestate" icon="i-ph-star"} You can enable experimental restoration of this state by enabling the `experimental.restoreState` option in your `nuxt.config` file. :: diff --git a/docs/3.api/4.commands/_dir.yml b/docs/3.api/4.commands/_dir.yml index b1123168e0..00af2f6eb1 100644 --- a/docs/3.api/4.commands/_dir.yml +++ b/docs/3.api/4.commands/_dir.yml @@ -1,3 +1,3 @@ title: 'Commands' -icon: i-ph-terminal-window-duotone +icon: i-ph-terminal-window titleTemplate: '%s ยท Nuxt Commands' diff --git a/docs/3.api/5.kit/12.resolving.md b/docs/3.api/5.kit/12.resolving.md index eac13cab4f..8218ecfb0d 100644 --- a/docs/3.api/5.kit/12.resolving.md +++ b/docs/3.api/5.kit/12.resolving.md @@ -211,7 +211,7 @@ Type of path to resolve. If set to `'file'`, the function will try to resolve a Creates resolver relative to base path. -::tip{icon="i-ph-video-duotone" to="https://vueschool.io/lessons/resolving-paths-and-injecting-assets-to-the-app?friend=nuxt" target="_blank"} +::tip{icon="i-ph-video" to="https://vueschool.io/lessons/resolving-paths-and-injecting-assets-to-the-app?friend=nuxt" target="_blank"} Watch Vue School video about createResolver. :: diff --git a/docs/3.api/5.kit/4.autoimports.md b/docs/3.api/5.kit/4.autoimports.md index 6a0b0a08a5..4aa9aac211 100644 --- a/docs/3.api/5.kit/4.autoimports.md +++ b/docs/3.api/5.kit/4.autoimports.md @@ -18,7 +18,7 @@ These functions are designed for registering your own utils, composables and Vue Nuxt auto-imports helper functions, composables and Vue APIs to use across your application without explicitly importing them. Based on the directory structure, every Nuxt application can also use auto-imports for its own composables and plugins. Composables or plugins can use these functions. -::tip{icon="i-ph-video-duotone" to="https://vueschool.io/lessons/expanding-nuxt-s-auto-imports?friend=nuxt" target="_blank"} +::tip{icon="i-ph-video" to="https://vueschool.io/lessons/expanding-nuxt-s-auto-imports?friend=nuxt" target="_blank"} Watch Vue School video about Auto-imports Nuxt Kit utilities. :: diff --git a/docs/3.api/5.kit/5.components.md b/docs/3.api/5.kit/5.components.md index b112c84962..3d41667d31 100644 --- a/docs/3.api/5.kit/5.components.md +++ b/docs/3.api/5.kit/5.components.md @@ -10,7 +10,7 @@ links: Components are the building blocks of your Nuxt application. They are reusable Vue instances that can be used to create a user interface. In Nuxt, components from the components directory are automatically imported by default. However, if you need to import components from an alternative directory or wish to selectively import them as needed, `@nuxt/kit` provides the `addComponentsDir` and `addComponent` methods. These utils allow you to customize the component configuration to better suit your needs. -::tip{icon="i-ph-video-duotone" to="https://vueschool.io/lessons/injecting-components-and-component-directories?friend=nuxt" target="_blank"} +::tip{icon="i-ph-video" to="https://vueschool.io/lessons/injecting-components-and-component-directories?friend=nuxt" target="_blank"} Watch Vue School video about injecting components. :: diff --git a/docs/3.api/5.kit/7.pages.md b/docs/3.api/5.kit/7.pages.md index 7e7dd6e8d3..8c1d91a685 100644 --- a/docs/3.api/5.kit/7.pages.md +++ b/docs/3.api/5.kit/7.pages.md @@ -12,7 +12,7 @@ links: In Nuxt 3, routes are automatically generated based on the structure of the files in the `pages` directory. However, there may be scenarios where you'd want to customize these routes. For instance, you might need to add a route for a dynamic page not generated by Nuxt, remove an existing route, or modify the configuration of a route. For such customizations, Nuxt offers the `extendPages` feature, which allows you to extend and alter the pages configuration. -::tip{icon="i-ph-video-duotone" to="https://vueschool.io/lessons/extend-and-alter-nuxt-pages?friend=nuxt" target="_blank"} +::tip{icon="i-ph-video" to="https://vueschool.io/lessons/extend-and-alter-nuxt-pages?friend=nuxt" target="_blank"} Watch Vue School video about extendPages. :: @@ -71,7 +71,7 @@ Nuxt is powered by the [Nitro](https://nitro.unjs.io) server engine. With Nitro, You can read more about Nitro route rules in the [Nitro documentation](https://nitro.unjs.io/guide/routing#route-rules). :: -::tip{icon="i-ph-video-duotone" to="https://vueschool.io/lessons/adding-route-rules-and-route-middlewares?friend=nuxt" target="_blank"} +::tip{icon="i-ph-video" to="https://vueschool.io/lessons/adding-route-rules-and-route-middlewares?friend=nuxt" target="_blank"} Watch Vue School video about adding route rules and route middelwares. :: @@ -192,7 +192,7 @@ Route middlewares can be also defined in plugins via [`addRouteMiddleware`](/doc Read more about route middlewares in the [Route middleware documentation](/docs/getting-started/routing#route-middleware). :: -::tip{icon="i-ph-video-duotone" to="https://vueschool.io/lessons/adding-route-rules-and-route-middlewares?friend=nuxt" target="_blank"} +::tip{icon="i-ph-video" to="https://vueschool.io/lessons/adding-route-rules-and-route-middlewares?friend=nuxt" target="_blank"} Watch Vue School video about adding route rules and route middelwares. :: diff --git a/docs/3.api/5.kit/9.plugins.md b/docs/3.api/5.kit/9.plugins.md index 4ee2eda5af..e2f09cfc76 100644 --- a/docs/3.api/5.kit/9.plugins.md +++ b/docs/3.api/5.kit/9.plugins.md @@ -14,7 +14,7 @@ Plugins are self-contained code that usually add app-level functionality to Vue. Registers a Nuxt plugin and to the plugins array. -::tip{icon="i-ph-video-duotone" to="https://vueschool.io/lessons/injecting-plugins?friend=nuxt" target="_blank"} +::tip{icon="i-ph-video" to="https://vueschool.io/lessons/injecting-plugins?friend=nuxt" target="_blank"} Watch Vue School video about addPlugin. :: @@ -114,7 +114,7 @@ export default defineNuxtPlugin((nuxtApp) => { Adds a template and registers as a nuxt plugin. This is useful for plugins that need to generate code at build time. -::tip{icon="i-ph-video-duotone" to="https://vueschool.io/lessons/injecting-plugin-templates?friend=nuxt" target="_blank"} +::tip{icon="i-ph-video" to="https://vueschool.io/lessons/injecting-plugin-templates?friend=nuxt" target="_blank"} Watch Vue School video about addPluginTemplate. :: diff --git a/docs/3.api/5.kit/_dir.yml b/docs/3.api/5.kit/_dir.yml index dda66db56e..86a5d387a4 100644 --- a/docs/3.api/5.kit/_dir.yml +++ b/docs/3.api/5.kit/_dir.yml @@ -1,3 +1,3 @@ title: Nuxt Kit -navigation.icon: i-ph-toolbox-duotone +navigation.icon: i-ph-toolbox titleTemplate: '%s ยท Nuxt Kit' diff --git a/docs/3.api/6.advanced/_dir.yml b/docs/3.api/6.advanced/_dir.yml index b8a90804b7..e0a580e33c 100644 --- a/docs/3.api/6.advanced/_dir.yml +++ b/docs/3.api/6.advanced/_dir.yml @@ -1 +1 @@ -icon: i-ph-brain-duotone +icon: i-ph-brain diff --git a/docs/3.api/6.nuxt-config.md b/docs/3.api/6.nuxt-config.md index 7f915757f6..cad9250920 100644 --- a/docs/3.api/6.nuxt-config.md +++ b/docs/3.api/6.nuxt-config.md @@ -2,7 +2,7 @@ title: Nuxt Configuration titleTemplate: '%s' description: Discover all the options you can use in your nuxt.config.ts file. -navigation.icon: i-ph-gear-duotone +navigation.icon: i-ph-gear --- ::note{icon="i-simple-icons-github" color="gray" to="https://github.com/nuxt/nuxt/tree/main/packages/schema/src/config" target="_blank"} diff --git a/docs/3.api/index.md b/docs/3.api/index.md index f0b12b7425..7e4970a2ae 100644 --- a/docs/3.api/index.md +++ b/docs/3.api/index.md @@ -7,25 +7,25 @@ surround: false --- ::card-group - ::card{icon="i-ph-cube-duotone" title="Components" to="/docs/api/components/client-only"} + ::card{icon="i-ph-cube" title="Components" to="/docs/api/components/client-only"} Explore Nuxt built-in components for pages, layouts, head, and more. :: - ::card{icon="i-ph-arrows-left-right-duotone" title="Composables" to="/docs/api/composables/use-app-config"} + ::card{icon="i-ph-arrows-left-right" title="Composables" to="/docs/api/composables/use-app-config"} Discover Nuxt composable functions for data-fetching, head management and more. :: - ::card{icon="i-ph-function-duotone" title="Utils" to="/docs/api/utils/dollarfetch"} + ::card{icon="i-ph-function" title="Utils" to="/docs/api/utils/dollarfetch"} Learn about Nuxt utility functions for navigation, error handling and more. :: - ::card{icon="i-ph-terminal-window-duotone" title="Commands" to="/docs/api/commands/add"} + ::card{icon="i-ph-terminal-window" title="Commands" to="/docs/api/commands/add"} List of Nuxt CLI commands to init, analyze, build, and preview your application. :: - ::card{icon="i-ph-toolbox-duotone" title="Nuxt Kit" to="/docs/api/kit/modules"} + ::card{icon="i-ph-toolbox" title="Nuxt Kit" to="/docs/api/kit/modules"} Understand Nuxt Kit utilities to create modules and control Nuxt. :: - ::card{icon="i-ph-brain-duotone" title="Advanced" to="/docs/api/advanced/hooks"} + ::card{icon="i-ph-brain" title="Advanced" to="/docs/api/advanced/hooks"} Go deep in Nuxt internals with Nuxt lifecycle hooks. :: - ::card{icon="i-ph-gear-duotone" title="Nuxt Configuration" to="/docs/api/nuxt-config"} + ::card{icon="i-ph-gear" title="Nuxt Configuration" to="/docs/api/nuxt-config"} Explore all Nuxt configuration options to customize your application. :: :: diff --git a/docs/5.community/2.getting-help.md b/docs/5.community/2.getting-help.md index 4100c849d6..ded7e1292a 100644 --- a/docs/5.community/2.getting-help.md +++ b/docs/5.community/2.getting-help.md @@ -2,7 +2,7 @@ title: Getting Help description: We're a friendly community of developers and we'd love to help. navigation: - icon: i-ph-lifebuoy-duotone + icon: i-ph-lifebuoy --- At some point, you may find that there's an issue you need some help with. diff --git a/docs/5.community/3.reporting-bugs.md b/docs/5.community/3.reporting-bugs.md index c82a6d8ba6..30b60f3386 100644 --- a/docs/5.community/3.reporting-bugs.md +++ b/docs/5.community/3.reporting-bugs.md @@ -1,7 +1,7 @@ --- title: 'Reporting Bugs' description: 'One of the most valuable roles in open source is taking the time to report bugs helpfully.' -navigation.icon: i-ph-bug-duotone +navigation.icon: i-ph-bug --- Try as we might, we will never completely eliminate bugs. diff --git a/docs/5.community/4.contribution.md b/docs/5.community/4.contribution.md index 3702d845a8..d8e58c24dc 100644 --- a/docs/5.community/4.contribution.md +++ b/docs/5.community/4.contribution.md @@ -1,7 +1,7 @@ --- title: 'Contribution' description: 'Nuxt is a community project - and so we love contributions of all kinds! โค๏ธ' -navigation.icon: i-ph-git-pull-request-duotone +navigation.icon: i-ph-git-pull-request --- There is a range of different ways you might be able to contribute to the Nuxt ecosystem. @@ -184,21 +184,21 @@ Here are some tips that may help improve your documentation: Keep in mind your readers can have different backgrounds and experiences. Therefore, these words don't convey meaning and can be harmful. - ::caution{ icon="i-ph-x-circle-duotone"} + ::caution{ icon="i-ph-x-circle"} Simply make sure the function returns a promise. :: - ::tip{icon="i-ph-check-circle-duotone"} + ::tip{icon="i-ph-check-circle"} Make sure the function returns a [promise](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Promise). :: * Prefer [active voice](https://developers.google.com/tech-writing/one/active-voice). - ::caution{icon="i-ph-x-circle-duotone"} + ::caution{icon="i-ph-x-circle"} An error will be thrown by Nuxt. :: - ::tip{icon="i-ph-check-circle-duotone"} + ::tip{icon="i-ph-check-circle"} Nuxt will throw an error. :: diff --git a/docs/5.community/5.framework-contribution.md b/docs/5.community/5.framework-contribution.md index a96de2e749..7c9315fa3a 100644 --- a/docs/5.community/5.framework-contribution.md +++ b/docs/5.community/5.framework-contribution.md @@ -1,6 +1,6 @@ --- title: 'Framework' -navigation.icon: i-ph-github-logo-duotone +navigation.icon: i-ph-github-logo description: Some specific points about contributions to the framework repository. --- diff --git a/docs/5.community/6.roadmap.md b/docs/5.community/6.roadmap.md index 4230570244..df987f8bfb 100644 --- a/docs/5.community/6.roadmap.md +++ b/docs/5.community/6.roadmap.md @@ -1,7 +1,7 @@ --- title: 'Roadmap' description: 'Nuxt is constantly evolving, with new features and modules being added all the time.' -navigation.icon: i-ph-map-trifold-duotone +navigation.icon: i-ph-map-trifold --- ::read-more{to="/blog"} diff --git a/docs/5.community/7.changelog.md b/docs/5.community/7.changelog.md index bc1d34cb72..942ec3e32b 100644 --- a/docs/5.community/7.changelog.md +++ b/docs/5.community/7.changelog.md @@ -1,7 +1,7 @@ --- title: 'Releases' description: Discover the latest releases of Nuxt & Nuxt official modules. -navigation.icon: i-ph-notification-duotone +navigation.icon: i-ph-notification --- ::card-group diff --git a/docs/5.community/_dir.yml b/docs/5.community/_dir.yml index 1330352c11..de92f13d6f 100644 --- a/docs/5.community/_dir.yml +++ b/docs/5.community/_dir.yml @@ -1,3 +1,3 @@ title: 'Community' titleTemplate: '%s ยท Nuxt Community' -icon: i-ph-chats-teardrop-duotone +icon: i-ph-chats-teardrop diff --git a/docs/6.bridge/_dir.yml b/docs/6.bridge/_dir.yml index f2a37c2daa..f7db65f48d 100644 --- a/docs/6.bridge/_dir.yml +++ b/docs/6.bridge/_dir.yml @@ -1,3 +1,3 @@ titleTemplate: 'Migrate to Nuxt Bridge: %s' title: 'Migrate to Nuxt Bridge' -icon: i-ph-bridge-duotone +icon: i-ph-bridge diff --git a/docs/7.migration/20.module-authors.md b/docs/7.migration/20.module-authors.md index ff42347c12..abe8fc67c1 100644 --- a/docs/7.migration/20.module-authors.md +++ b/docs/7.migration/20.module-authors.md @@ -9,7 +9,7 @@ Nuxt 3 has a basic backward compatibility layer for Nuxt 2 modules using `@nuxt/ We have prepared a [Dedicated Guide](/docs/guide/going-further/modules) for authoring Nuxt 3 ready modules using `@nuxt/kit`. Currently best migration path is to follow it and rewrite your modules. Rest of this guide includes preparation steps if you prefer to avoid a full rewrite yet making modules compatible with Nuxt 3. -::tip{icon="i-ph-puzzle-piece-duotone" to="/modules"} +::tip{icon="i-ph-puzzle-piece" to="/modules"} Explore Nuxt 3 compatible modules. :: diff --git a/docs/7.migration/_dir.yml b/docs/7.migration/_dir.yml index 54585df393..a880111684 100644 --- a/docs/7.migration/_dir.yml +++ b/docs/7.migration/_dir.yml @@ -1,3 +1,3 @@ titleTemplate: 'Migrate to Nuxt 3: %s' title: 'Migrate to Nuxt 3' -icon: i-ph-arrow-circle-up-duotone +icon: i-ph-arrow-circle-up diff --git a/docs/_dir.yml b/docs/_dir.yml index 6639eb3a35..18fdf7dc26 100644 --- a/docs/_dir.yml +++ b/docs/_dir.yml @@ -1,2 +1,2 @@ title: Docs -icon: i-ph-book-bookmark-duotone +icon: i-ph-book-bookmark diff --git a/lychee.toml b/lychee.toml index b7cdde5945..b00e5bee37 100644 --- a/lychee.toml +++ b/lychee.toml @@ -14,5 +14,7 @@ exclude = [ # TODO: remove when their SSL certificate is valid again "https://www.conventionalcommits.org", # single-quotes are required for regexp - '(https?:\/\/github\.com\/)(.*\/)(generate)', + '(https?:\/\/github\.com\/)(.*\/)(generate)', + "https://localhost:3000", + "https://github.com/nuxt-contrib/vue3-ssr-starter/generate", ] diff --git a/package.json b/package.json index 98fe674f57..9a0bc90c73 100644 --- a/package.json +++ b/package.json @@ -35,85 +35,86 @@ }, "resolutions": { "@nuxt/kit": "workspace:*", + "@nuxt/rspack-builder": "workspace:*", "@nuxt/schema": "workspace:*", "@nuxt/ui-templates": "workspace:*", "@nuxt/vite-builder": "workspace:*", "@nuxt/webpack-builder": "workspace:*", - "@types/node": "20.16.5", - "c12": "2.0.0-beta.2", + "@types/node": "20.16.11", + "@vue/compiler-core": "3.5.11", + "@vue/compiler-dom": "3.5.11", + "@vue/shared": "3.5.11", + "c12": "2.0.1", "h3": "npm:h3-nightly@2.0.0-1718872656.6765a6e", - "jiti": "2.0.0-beta.3", + "jiti": "2.3.3", "magic-string": "^0.30.11", "nitro": "npm:nitro-nightly@3.0.0-beta-28665895.e727afda", "nuxt": "workspace:*", + "ohash": "1.1.4", "postcss": "8.4.47", - "rollup": "4.21.3", + "rollup": "4.24.0", "send": ">=0.19.0", - "typescript": "5.6.2", + "typescript": "5.6.3", "ufo": "1.5.4", - "unbuild": "3.0.0-rc.7", - "vite": "5.4.5", - "vue": "3.5.5" + "unbuild": "3.0.0-rc.11", + "vite": "5.4.8", + "vue": "3.5.11" }, "devDependencies": { - "@eslint/js": "9.10.0", + "@eslint/js": "9.12.0", "@nuxt/eslint-config": "0.5.7", "@nuxt/kit": "workspace:*", - "@nuxt/test-utils": "3.14.2", + "@nuxt/rspack-builder": "workspace:*", + "@nuxt/test-utils": "3.14.3", "@nuxt/webpack-builder": "workspace:*", "@testing-library/vue": "8.1.0", "@types/eslint__js": "8.42.3", - "@types/node": "20.16.5", + "@types/node": "20.16.11", "@types/semver": "7.5.8", - "@unhead/schema": "1.11.6", - "@unhead/vue": "1.11.6", - "@vitejs/plugin-vue": "5.1.3", - "@vitest/coverage-v8": "2.1.1", + "@unhead/schema": "1.11.7", + "@unhead/vue": "1.11.7", + "@vitejs/plugin-vue": "5.1.4", + "@vitest/coverage-v8": "2.1.2", "@vue/test-utils": "2.4.6", "autoprefixer": "10.4.20", "case-police": "0.7.0", - "changelogen": "0.5.5", + "changelogen": "0.5.7", "consola": "3.2.3", "cssnano": "7.0.6", "destr": "2.0.3", - "devalue": "5.0.0", - "eslint": "9.10.0", + "devalue": "5.1.1", + "eslint": "9.12.0", "eslint-plugin-no-only-tests": "3.3.0", - "eslint-plugin-perfectionist": "3.6.0", + "eslint-plugin-perfectionist": "3.8.0", "eslint-typegen": "0.3.2", "h3": "npm:h3-nightly@2.0.0-1718872656.6765a6e", "happy-dom": "15.7.4", - "jiti": "2.0.0-beta.3", - "markdownlint-cli": "0.41.0", + "jiti": "2.3.3", + "markdownlint-cli": "0.42.0", "nitro": "npm:nitro-nightly@3.0.0-beta-28665895.e727afda", - "nuxi": "3.13.2", + "nuxi": "3.14.0", "nuxt": "workspace:*", "nuxt-content-twoslash": "0.1.1", - "ofetch": "1.3.4", + "ofetch": "1.4.1", "pathe": "1.1.2", - "playwright-core": "1.47.1", + "playwright-core": "1.48.0", "rimraf": "6.0.1", "semver": "7.6.3", "sherif": "1.0.0", "std-env": "3.7.0", "tinyexec": "0.3.0", - "tinyglobby": "0.2.6", - "typescript": "5.6.2", + "tinyglobby": "0.2.9", + "typescript": "5.6.3", "ufo": "1.5.4", - "vitest": "2.1.1", + "vitest": "2.1.2", "vitest-environment-nuxt": "1.0.1", - "vue": "3.5.5", + "vue": "3.5.11", "vue-router": "4.4.5", "vue-tsc": "2.1.6" }, - "packageManager": "pnpm@9.10.0", + "packageManager": "pnpm@9.12.1", "engines": { "node": "^16.10.0 || >=18.0.0" }, - "version": "", - "pnpm": { - "patchedDependencies": { - "ofetch@1.3.4": "patches/ofetch@1.3.4.patch" - } - } + "version": "" } diff --git a/packages/kit/build.config.ts b/packages/kit/build.config.ts index 87a8ccb072..d2a1f7fa7d 100644 --- a/packages/kit/build.config.ts +++ b/packages/kit/build.config.ts @@ -6,6 +6,7 @@ export default defineBuildConfig({ 'src/index', ], externals: [ + '@rspack/core', '@nuxt/schema', 'nitropack', 'nitro', diff --git a/packages/kit/package.json b/packages/kit/package.json index bce2132d52..651056b852 100644 --- a/packages/kit/package.json +++ b/packages/kit/package.json @@ -27,34 +27,35 @@ }, "dependencies": { "@nuxt/schema": "workspace:*", - "c12": "^2.0.0-beta.2", + "c12": "^2.0.1", "consola": "^3.2.3", "defu": "^6.1.4", "destr": "^2.0.3", "errx": "^0.1.0", "globby": "^14.0.2", "hash-sum": "^2.0.0", - "ignore": "^5.3.2", - "jiti": "^2.0.0-beta.3", + "ignore": "^6.0.2", + "jiti": "^2.3.3", "klona": "^2.0.6", - "mlly": "^1.7.1", + "mlly": "^1.7.2", "pathe": "^1.1.2", - "pkg-types": "^1.2.0", + "pkg-types": "^1.2.1", "scule": "^1.3.0", "semver": "^7.6.3", "ufo": "^1.5.4", "unctx": "^2.3.1", - "unimport": "^3.12.0", - "untyped": "^1.4.2" + "unimport": "^3.13.1", + "untyped": "^1.5.1" }, "devDependencies": { + "@rspack/core": "1.0.8", "@types/hash-sum": "1.0.2", "@types/semver": "7.5.8", "nitro": "npm:nitro-nightly@3.0.0-beta-28665895.e727afda", - "unbuild": "3.0.0-rc.7", - "vite": "5.4.5", - "vitest": "2.1.1", - "webpack": "5.94.0" + "unbuild": "3.0.0-rc.11", + "vite": "5.4.8", + "vitest": "2.1.2", + "webpack": "5.95.0" }, "engines": { "node": "^14.18.0 || >=16.10.0" diff --git a/packages/kit/src/build.ts b/packages/kit/src/build.ts index fab8c45228..ba4a1d17ba 100644 --- a/packages/kit/src/build.ts +++ b/packages/kit/src/build.ts @@ -1,4 +1,5 @@ import type { Configuration as WebpackConfig, WebpackPluginInstance } from 'webpack' +import type { RspackPluginInstance } from '@rspack/core' import type { UserConfig as ViteConfig, Plugin as VitePlugin } from 'vite' import { useNuxt } from './context' import { toArray } from './utils' @@ -36,16 +37,7 @@ export interface ExtendWebpackConfigOptions extends ExtendConfigOptions {} // eslint-disable-next-line @typescript-eslint/no-empty-object-type export interface ExtendViteConfigOptions extends ExtendConfigOptions {} -/** - * Extend webpack config - * - * The fallback function might be called multiple times - * when applying to both client and server builds. - */ -export function extendWebpackConfig ( - fn: ((config: WebpackConfig) => void), - options: ExtendWebpackConfigOptions = {}, -) { +const extendWebpackCompatibleConfig = (builder: 'rspack' | 'webpack') => (fn: ((config: WebpackConfig) => void), options: ExtendWebpackConfigOptions = {}) => { const nuxt = useNuxt() if (options.dev === false && nuxt.options.dev) { @@ -55,7 +47,7 @@ export function extendWebpackConfig ( return } - nuxt.hook('webpack:config', (configs: WebpackConfig[]) => { + nuxt.hook(`${builder}:config`, (configs) => { if (options.server !== false) { const config = configs.find(i => i.name === 'server') if (config) { @@ -71,13 +63,25 @@ export function extendWebpackConfig ( }) } +/** + * Extend webpack config + * + * The fallback function might be called multiple times + * when applying to both client and server builds. + */ +export const extendWebpackConfig = extendWebpackCompatibleConfig('webpack') +/** + * Extend rspack config + * + * The fallback function might be called multiple times + * when applying to both client and server builds. + */ +export const extendRspackConfig = extendWebpackCompatibleConfig('rspack') + /** * Extend Vite config */ -export function extendViteConfig ( - fn: ((config: ViteConfig) => void), - options: ExtendViteConfigOptions = {}, -) { +export function extendViteConfig (fn: ((config: ViteConfig) => void), options: ExtendViteConfigOptions = {}) { const nuxt = useNuxt() if (options.dev === false && nuxt.options.dev) { @@ -114,6 +118,18 @@ export function addWebpackPlugin (pluginOrGetter: WebpackPluginInstance | Webpac config.plugins[method](...toArray(plugin)) }, options) } +/** + * Append rspack plugin to the config. + */ +export function addRspackPlugin (pluginOrGetter: RspackPluginInstance | RspackPluginInstance[] | (() => RspackPluginInstance | RspackPluginInstance[]), options?: ExtendWebpackConfigOptions) { + extendRspackConfig((config) => { + const method: 'push' | 'unshift' = options?.prepend ? 'unshift' : 'push' + const plugin = typeof pluginOrGetter === 'function' ? pluginOrGetter() : pluginOrGetter + + config.plugins = config.plugins || [] + config.plugins[method](...toArray(plugin)) + }, options) +} /** * Append Vite plugin to the config. @@ -131,6 +147,7 @@ export function addVitePlugin (pluginOrGetter: VitePlugin | VitePlugin[] | (() = interface AddBuildPluginFactory { vite?: () => VitePlugin | VitePlugin[] webpack?: () => WebpackPluginInstance | WebpackPluginInstance[] + rspack?: () => RspackPluginInstance | RspackPluginInstance[] } export function addBuildPlugin (pluginFactory: AddBuildPluginFactory, options?: ExtendConfigOptions) { @@ -141,4 +158,8 @@ export function addBuildPlugin (pluginFactory: AddBuildPluginFactory, options?: if (pluginFactory.webpack) { addWebpackPlugin(pluginFactory.webpack, options) } + + if (pluginFactory.rspack) { + addRspackPlugin(pluginFactory.rspack, options) + } } diff --git a/packages/kit/src/compatibility.ts b/packages/kit/src/compatibility.ts index 00ad74b67c..e2859e1812 100644 --- a/packages/kit/src/compatibility.ts +++ b/packages/kit/src/compatibility.ts @@ -8,6 +8,7 @@ export function normalizeSemanticVersion (version: string) { } const builderMap = { + '@nuxt/rspack-builder': 'rspack', '@nuxt/vite-builder': 'vite', '@nuxt/webpack-builder': 'webpack', } diff --git a/packages/kit/src/index.ts b/packages/kit/src/index.ts index bde038e6fb..c9b94204b0 100644 --- a/packages/kit/src/index.ts +++ b/packages/kit/src/index.ts @@ -13,7 +13,7 @@ export type { LoadNuxtOptions } from './loader/nuxt' // Utils export { addImports, addImportsDir, addImportsSources } from './imports' export { updateRuntimeConfig, useRuntimeConfig } from './runtime-config' -export { addBuildPlugin, addVitePlugin, addWebpackPlugin, extendViteConfig, extendWebpackConfig } from './build' +export { addBuildPlugin, addVitePlugin, addRspackPlugin, addWebpackPlugin, extendViteConfig, extendRspackConfig, extendWebpackConfig } from './build' export type { ExtendConfigOptions, ExtendViteConfigOptions, ExtendWebpackConfigOptions } from './build' export { assertNuxtCompatibility, checkNuxtCompatibility, getNuxtVersion, hasNuxtCompatibility, isNuxtMajorVersion, normalizeSemanticVersion, isNuxt2, isNuxt3 } from './compatibility' export { addComponent, addComponentsDir } from './components' diff --git a/packages/kit/src/module/install.ts b/packages/kit/src/module/install.ts index 07a5cda317..39a460cbed 100644 --- a/packages/kit/src/module/install.ts +++ b/packages/kit/src/module/install.ts @@ -72,34 +72,34 @@ export const normalizeModuleTranspilePath = (p: string) => { export async function loadNuxtModuleInstance (nuxtModule: string | NuxtModule, nuxt: Nuxt = useNuxt()) { let buildTimeModuleMeta: ModuleMeta = {} - const jiti = createJiti(nuxt.options.rootDir, { - interopDefault: true, - alias: nuxt.options.alias, - }) + const jiti = createJiti(nuxt.options.rootDir, { alias: nuxt.options.alias }) // Import if input is string if (typeof nuxtModule === 'string') { - const paths = [join(nuxtModule, 'nuxt'), join(nuxtModule, 'module'), nuxtModule] - let error: unknown - for (const path of paths) { - try { - const src = jiti.esmResolve(path) - nuxtModule = await jiti.import(src) as NuxtModule + const paths = [join(nuxtModule, 'nuxt'), join(nuxtModule, 'module'), nuxtModule, join(nuxt.options.rootDir, nuxtModule)] - // nuxt-module-builder generates a module.json with metadata including the version - const moduleMetadataPath = join(dirname(src), 'module.json') - if (existsSync(moduleMetadataPath)) { - buildTimeModuleMeta = JSON.parse(await fsp.readFile(moduleMetadataPath, 'utf-8')) + for (const parentURL of nuxt.options.modulesDir) { + for (const path of paths) { + try { + const src = jiti.esmResolve(path, { parentURL: parentURL.replace(/\/node_modules\/?$/, '') }) + nuxtModule = await jiti.import(src, { default: true }) as NuxtModule + + // nuxt-module-builder generates a module.json with metadata including the version + const moduleMetadataPath = join(dirname(src), 'module.json') + if (existsSync(moduleMetadataPath)) { + buildTimeModuleMeta = JSON.parse(await fsp.readFile(moduleMetadataPath, 'utf-8')) + } + break + } catch (error: unknown) { + const code = (error as Error & { code?: string }).code + if (code === 'MODULE_NOT_FOUND' || code === 'ERR_PACKAGE_PATH_NOT_EXPORTED' || code === 'ERR_MODULE_NOT_FOUND' || code === 'ERR_UNSUPPORTED_DIR_IMPORT') { + continue + } + logger.error(`Error while importing module \`${nuxtModule}\`: ${error}`) + throw error } - break - } catch (_err: unknown) { - error = _err - continue } - } - if (typeof nuxtModule !== 'function' && error) { - logger.error(`Error while importing module \`${nuxtModule}\`: ${error}`) - throw error + if (typeof nuxtModule !== 'string') { break } } } diff --git a/packages/kit/src/template.ts b/packages/kit/src/template.ts index 903308497f..8c40713e76 100644 --- a/packages/kit/src/template.ts +++ b/packages/kit/src/template.ts @@ -1,7 +1,7 @@ import { existsSync, promises as fsp } from 'node:fs' import { basename, isAbsolute, join, parse, relative, resolve } from 'pathe' import hash from 'hash-sum' -import type { Nuxt, NuxtTemplate, NuxtTypeTemplate, ResolvedNuxtTemplate, TSReference } from '@nuxt/schema' +import type { Nuxt, NuxtServerTemplate, NuxtTemplate, NuxtTypeTemplate, ResolvedNuxtTemplate, TSReference } from '@nuxt/schema' import { withTrailingSlash } from 'ufo' import { defu } from 'defu' import type { TSConfig } from 'pkg-types' @@ -32,6 +32,18 @@ export function addTemplate (_template: NuxtTemplate | string) { return template } +/** + * Adds a virtual file that can be used within the Nuxt Nitro server build. + */ +export function addServerTemplate (template: NuxtServerTemplate) { + const nuxt = useNuxt() + + nuxt.options.nitro.virtual ||= {} + nuxt.options.nitro.virtual[template.filename] = template.getContents + + return template +} + /** * Renders given types using lodash template during build into the project buildDir * and register them as types. @@ -211,13 +223,10 @@ export async function _generateTypes (nuxt: Nuxt) { exclude: [...exclude], } satisfies TSConfig) - const aliases: Record = { - ...nuxt.options.alias, - '#build': nuxt.options.buildDir, - } + const aliases: Record = nuxt.options.alias // Exclude bridge alias types to support Volar - const excludedAlias = [/^@vue\/.*$/] + const excludedAlias = [/^@vue\/.*$/, /^#internal\/nuxt/] const basePath = tsConfig.compilerOptions!.baseUrl ? resolve(nuxt.options.buildDir, tsConfig.compilerOptions!.baseUrl) diff --git a/packages/kit/test/generate-types.spec.ts b/packages/kit/test/generate-types.spec.ts index b5bcc9a6bb..d65d6809bd 100644 --- a/packages/kit/test/generate-types.spec.ts +++ b/packages/kit/test/generate-types.spec.ts @@ -34,9 +34,6 @@ describe('tsConfig generation', () => { const { tsConfig } = await _generateTypes(mockNuxt) expect(tsConfig.compilerOptions?.paths).toMatchInlineSnapshot(` { - "#build": [ - ".", - ], "some-custom-alias": [ "../some-alias", ], diff --git a/packages/nuxt/package.json b/packages/nuxt/package.json index f166ef10bd..206cba390a 100644 --- a/packages/nuxt/package.json +++ b/packages/nuxt/package.json @@ -60,80 +60,80 @@ }, "dependencies": { "@nuxt/devalue": "^2.0.2", - "@nuxt/devtools": "^1.4.2", + "@nuxt/devtools": "^1.5.2", "@nuxt/kit": "workspace:*", "@nuxt/schema": "workspace:*", "@nuxt/telemetry": "^2.6.0", "@nuxt/vite-builder": "workspace:*", - "@unhead/dom": "^1.11.6", - "@unhead/shared": "^1.11.6", - "@unhead/ssr": "^1.11.6", - "@unhead/vue": "^1.11.6", - "@vue/shared": "^3.5.5", + "@unhead/dom": "^1.11.7", + "@unhead/shared": "^1.11.7", + "@unhead/ssr": "^1.11.7", + "@unhead/vue": "^1.11.7", + "@vue/shared": "^3.5.11", "acorn": "8.12.1", - "c12": "^2.0.0-beta.2", - "chokidar": "^3.6.0", + "c12": "^2.0.1", + "chokidar": "^4.0.1", "compatx": "^0.1.8", "consola": "^3.2.3", "cookie-es": "^1.2.2", "defu": "^6.1.4", "destr": "^2.0.3", - "devalue": "^5.0.0", + "devalue": "^5.1.1", "errx": "^0.1.0", - "esbuild": "^0.23.1", + "esbuild": "^0.24.0", "escape-string-regexp": "^5.0.0", "estree-walker": "^3.0.3", "globby": "^14.0.2", "h3": "npm:h3-nightly@2.0.0-1718872656.6765a6e", "hookable": "^5.5.3", - "ignore": "^5.3.2", + "ignore": "^6.0.2", "impound": "^0.1.0", - "jiti": "^2.0.0-beta.3", + "jiti": "^2.3.3", "klona": "^2.0.6", "knitwork": "^1.1.0", "magic-string": "^0.30.11", - "mlly": "^1.7.1", + "mlly": "^1.7.2", "nanotar": "^0.1.1", "nitro": "npm:nitro-nightly@3.0.0-beta-28665895.e727afda", - "nuxi": "^3.13.2", - "nypm": "^0.3.11", - "ofetch": "^1.3.4", + "nuxi": "^3.14.0", + "nypm": "^0.3.12", + "ofetch": "^1.4.1", "ohash": "^1.1.4", "pathe": "^1.1.2", "perfect-debounce": "^1.0.0", - "pkg-types": "^1.2.0", + "pkg-types": "^1.2.1", "radix3": "^1.1.2", "scule": "^1.3.0", "semver": "^7.6.3", "std-env": "^3.7.0", "strip-literal": "^2.1.0", - "tinyglobby": "0.2.6", + "tinyglobby": "0.2.9", "ufo": "^1.5.4", "ultrahtml": "^1.5.3", "uncrypto": "^0.1.3", "unctx": "^2.3.1", "unenv": "^1.10.0", - "unhead": "^1.11.6", - "unimport": "^3.12.0", + "unhead": "^1.11.7", + "unimport": "^3.13.1", "unplugin": "^1.14.1", "unplugin-vue-router": "^0.10.8", "unstorage": "^1.12.0", - "untyped": "^1.4.2", - "vue": "^3.5.5", - "vue-bundle-renderer": "^2.1.0", + "untyped": "^1.5.1", + "vue": "^3.5.11", + "vue-bundle-renderer": "^2.1.1", "vue-devtools-stub": "^0.1.0", "vue-router": "^4.4.5" }, "devDependencies": { - "@nuxt/scripts": "0.9.2", + "@nuxt/scripts": "0.9.4", "@nuxt/ui-templates": "1.3.4", "@parcel/watcher": "2.4.1", - "@types/estree": "1.0.5", - "@vitejs/plugin-vue": "5.1.3", - "@vue/compiler-sfc": "3.5.5", - "unbuild": "3.0.0-rc.7", - "vite": "5.4.5", - "vitest": "2.1.1" + "@types/estree": "1.0.6", + "@vitejs/plugin-vue": "5.1.4", + "@vue/compiler-sfc": "3.5.11", + "unbuild": "3.0.0-rc.11", + "vite": "5.4.8", + "vitest": "2.1.2" }, "peerDependencies": { "@parcel/watcher": "^2.1.0", diff --git a/packages/nuxt/src/app/components/client-fallback.server.ts b/packages/nuxt/src/app/components/client-fallback.server.ts index c1bc3c3e02..dd4e0cdb28 100644 --- a/packages/nuxt/src/app/components/client-fallback.server.ts +++ b/packages/nuxt/src/app/components/client-fallback.server.ts @@ -54,8 +54,10 @@ const NuxtClientFallbackServer = defineComponent({ const defaultSlot = ctx.slots.default?.() const ssrVNodes = createBuffer() - for (let i = 0; i < (defaultSlot?.length || 0); i++) { - ssrRenderVNode(ssrVNodes.push, defaultSlot![i], vm!) + if (defaultSlot) { + for (let i = 0; i < defaultSlot.length; i++) { + ssrRenderVNode(ssrVNodes.push, defaultSlot[i]!, vm!) + } } const buffer = ssrVNodes.getBuffer() diff --git a/packages/nuxt/src/app/components/nuxt-island.ts b/packages/nuxt/src/app/components/nuxt-island.ts index 937f9d3136..c6bb6d8657 100644 --- a/packages/nuxt/src/app/components/nuxt-island.ts +++ b/packages/nuxt/src/app/components/nuxt-island.ts @@ -29,17 +29,20 @@ const getId = import.meta.client ? () => (id++).toString() : randomUUID const components = import.meta.client ? new Map() : undefined async function loadComponents (source = appBaseURL, paths: NuxtIslandResponse['components']) { + if (!paths) { return } + const promises: Array> = [] - for (const component in paths) { + for (const [component, item] of Object.entries(paths)) { if (!(components!.has(component))) { promises.push((async () => { - const chunkSource = join(source, paths[component].chunk) + const chunkSource = join(source, item.chunk) const c = await import(/* @vite-ignore */ chunkSource).then(m => m.default || m) components!.set(component, c) })()) } } + await Promise.all(promises) } @@ -276,7 +279,7 @@ export default defineComponent({ teleports.push(createVNode(Teleport, // use different selectors for even and odd teleportKey to force trigger the teleport { to: import.meta.client ? `${isKeyOdd ? 'div' : ''}[data-island-uid="${uid.value}"][data-island-slot="${slot}"]` : `uid=${uid.value};slot=${slot}` }, - { default: () => (payloads.slots?.[slot].props?.length ? payloads.slots[slot].props : [{}]).map((data: any) => slots[slot]?.(data)) }), + { default: () => (payloads.slots?.[slot]?.props?.length ? payloads.slots[slot].props : [{}]).map((data: any) => slots[slot]?.(data)) }), ) } } diff --git a/packages/nuxt/src/app/components/nuxt-link.ts b/packages/nuxt/src/app/components/nuxt-link.ts index f38ddbd777..77006518a2 100644 --- a/packages/nuxt/src/app/components/nuxt-link.ts +++ b/packages/nuxt/src/app/components/nuxt-link.ts @@ -328,8 +328,9 @@ export function defineNuxtLink (options: NuxtLinkOptions) { const path = typeof to.value === 'string' ? to.value : isExternal.value ? resolveRouteObject(to.value) : router.resolve(to.value).fullPath + const normalizedPath = isExternal.value ? new URL(path, window.location.href).href : path await Promise.all([ - nuxtApp.hooks.callHook('link:prefetch', path).catch(() => {}), + nuxtApp.hooks.callHook('link:prefetch', normalizedPath).catch(() => {}), !isExternal.value && !hasTarget.value && preloadRouteComponents(to.value as string, router).catch(() => {}), ]) } diff --git a/packages/nuxt/src/app/components/nuxt-teleport-island-component.ts b/packages/nuxt/src/app/components/nuxt-teleport-island-component.ts index 875204ccf4..b8ef06f9c4 100644 --- a/packages/nuxt/src/app/components/nuxt-teleport-island-component.ts +++ b/packages/nuxt/src/app/components/nuxt-teleport-island-component.ts @@ -39,7 +39,7 @@ export default defineComponent({ const islandContext = nuxtApp.ssrContext!.islandContext! return () => { - const slot = slots.default!()[0] + const slot = slots.default!()[0]! const slotType = slot.type as ExtendedComponent const name = (slotType.__name || slotType.name) as string diff --git a/packages/nuxt/src/app/components/utils.ts b/packages/nuxt/src/app/components/utils.ts index bb16708588..0bde127ec5 100644 --- a/packages/nuxt/src/app/components/utils.ts +++ b/packages/nuxt/src/app/components/utils.ts @@ -100,7 +100,7 @@ export function vforToArray (source: any): any[] { const keys = Object.keys(source) const array = new Array(keys.length) for (let i = 0, l = keys.length; i < l; i++) { - const key = keys[i] + const key = keys[i]! array[i] = source[key] } return array diff --git a/packages/nuxt/src/app/composables/fetch.ts b/packages/nuxt/src/app/composables/fetch.ts index 093554f82b..5ce5a87d1f 100644 --- a/packages/nuxt/src/app/composables/fetch.ts +++ b/packages/nuxt/src/app/composables/fetch.ts @@ -152,7 +152,7 @@ export function useFetch< let controller: AbortController const asyncData = useAsyncData<_ResT, ErrorT, DataT, PickKeys, DefaultT>(key, () => { - controller?.abort?.('Request aborted as another request to the same endpoint was initiated.') + controller?.abort?.(new DOMException('Request aborted as another request to the same endpoint was initiated.', 'AbortError')) controller = typeof AbortController !== 'undefined' ? new AbortController() : {} as AbortController /** @@ -164,7 +164,7 @@ export function useFetch< const timeoutLength = toValue(opts.timeout) let timeoutId: NodeJS.Timeout if (timeoutLength) { - timeoutId = setTimeout(() => controller.abort('Request aborted due to timeout.'), timeoutLength) + timeoutId = setTimeout(() => controller.abort(new DOMException('Request aborted due to timeout.', 'AbortError')), timeoutLength) controller.signal.onabort = () => clearTimeout(timeoutId) } diff --git a/packages/nuxt/src/app/composables/index.ts b/packages/nuxt/src/app/composables/index.ts index c0abdec2e4..05ba560d09 100644 --- a/packages/nuxt/src/app/composables/index.ts +++ b/packages/nuxt/src/app/composables/index.ts @@ -24,7 +24,7 @@ export { useFetch, useLazyFetch } from './fetch' export type { FetchResult, UseFetchOptions } from './fetch' export { useCookie, refreshCookie } from './cookie' export type { CookieOptions, CookieRef } from './cookie' -export { onPrehydrate, prerenderRoutes, useRequestHeaders, useRequestEvent, useRequestFetch, setResponseStatus } from './ssr' +export { onPrehydrate, prerenderRoutes, useRequestHeaders, useRequestEvent, useRequestFetch, setResponseStatus, useResponseHeader } from './ssr' export { onNuxtReady } from './ready' export { abortNavigation, addRouteMiddleware, defineNuxtRouteMiddleware, onBeforeRouteLeave, onBeforeRouteUpdate, setPageLayout, navigateTo, useRoute, useRouter } from './router' export type { AddRouteMiddlewareOptions, RouteMiddleware } from './router' diff --git a/packages/nuxt/src/app/composables/payload.ts b/packages/nuxt/src/app/composables/payload.ts index 1708bbad99..e24d34feab 100644 --- a/packages/nuxt/src/app/composables/payload.ts +++ b/packages/nuxt/src/app/composables/payload.ts @@ -23,7 +23,7 @@ export async function loadPayload (url: string, opts: LoadPayloadOptions = {}): const nuxtApp = useNuxtApp() const cache = nuxtApp._payloadCache = nuxtApp._payloadCache || {} if (payloadURL in cache) { - return cache[payloadURL] + return cache[payloadURL] || null } cache[payloadURL] = isPrerendered(url).then((prerendered) => { if (!prerendered) { diff --git a/packages/nuxt/src/app/composables/preload.ts b/packages/nuxt/src/app/composables/preload.ts index 1358273b8a..cac6f5c85a 100644 --- a/packages/nuxt/src/app/composables/preload.ts +++ b/packages/nuxt/src/app/composables/preload.ts @@ -14,7 +14,12 @@ export const preloadComponents = async (components: string | string[]) => { const nuxtApp = useNuxtApp() components = toArray(components) - await Promise.all(components.map(name => _loadAsyncComponent(nuxtApp.vueApp._context.components[name]))) + await Promise.all(components.map((name) => { + const component = nuxtApp.vueApp._context.components[name] + if (component) { + return _loadAsyncComponent(component) + } + })) } /** diff --git a/packages/nuxt/src/app/composables/ssr.ts b/packages/nuxt/src/app/composables/ssr.ts index 56f3383109..59db9bd327 100644 --- a/packages/nuxt/src/app/composables/ssr.ts +++ b/packages/nuxt/src/app/composables/ssr.ts @@ -1,6 +1,6 @@ import type { H3Event } from 'h3' -import { setResponseStatus as _setResponseStatus, appendHeader, getRequestHeader, getRequestHeaders } from 'h3' -import { getCurrentInstance } from 'vue' +import { setResponseStatus as _setResponseStatus, appendHeader, getRequestHeader, getRequestHeaders, getResponseHeader, removeResponseHeader, setResponseHeader } from 'h3' +import { computed, getCurrentInstance, ref } from 'vue' import { useServerHead } from '@unhead/vue' import type { NuxtApp } from '../nuxt' @@ -61,6 +61,34 @@ export function setResponseStatus (arg1: H3Event | number | undefined, arg2?: nu } } +/** @since 3.14.0 */ +export function useResponseHeader (header: string) { + if (import.meta.client) { + if (import.meta.dev) { + return computed({ + get: () => undefined, + set: () => console.warn('[nuxt] Setting response headers is not supported in the browser.'), + }) + } + return ref() + } + + const event = useRequestEvent()! + + return computed({ + get () { + return getResponseHeader(event, header) + }, + set (newValue) { + if (!newValue) { + return removeResponseHeader(event, header) + } + + return setResponseHeader(event, header, newValue) + }, + }) +} + /** @since 3.8.0 */ export function prerenderRoutes (path: string | string[]) { if (!import.meta.server || !import.meta.prerender) { return } diff --git a/packages/nuxt/src/app/entry.ts b/packages/nuxt/src/app/entry.ts index 7f29843c8c..dac40f4b97 100644 --- a/packages/nuxt/src/app/entry.ts +++ b/packages/nuxt/src/app/entry.ts @@ -67,6 +67,10 @@ if (import.meta.client) { } vueApp.config.errorHandler = handleVueError + // If the errorHandler is not overridden by the user, we unset it after the app is hydrated + nuxt.hook('app:suspense:resolve', () => { + if (vueApp.config.errorHandler === handleVueError) { vueApp.config.errorHandler = undefined } + }) try { await applyPlugins(nuxt, plugins) @@ -84,9 +88,6 @@ if (import.meta.client) { handleVueError(err) } - // If the errorHandler is not overridden by the user, we unset it - if (vueApp.config.errorHandler === handleVueError) { vueApp.config.errorHandler = undefined } - return vueApp } diff --git a/packages/nuxt/src/app/index.ts b/packages/nuxt/src/app/index.ts index 363c72d1bf..43fcc404e1 100644 --- a/packages/nuxt/src/app/index.ts +++ b/packages/nuxt/src/app/index.ts @@ -1,7 +1,7 @@ export { applyPlugin, applyPlugins, callWithNuxt, createNuxtApp, defineAppConfig, defineNuxtPlugin, definePayloadPlugin, isNuxtPlugin, registerPluginHooks, tryUseNuxtApp, useNuxtApp, useRuntimeConfig } from './nuxt' export type { CreateOptions, NuxtApp, NuxtPayload, NuxtPluginIndicator, NuxtSSRContext, ObjectPlugin, Plugin, PluginEnvContext, PluginMeta, ResolvedPluginMeta, RuntimeNuxtHooks } from './nuxt' -export { defineNuxtComponent, useAsyncData, useLazyAsyncData, useNuxtData, refreshNuxtData, clearNuxtData, useHydration, callOnce, useState, clearNuxtState, clearError, createError, isNuxtError, showError, useError, useFetch, useLazyFetch, useCookie, refreshCookie, onPrehydrate, prerenderRoutes, useRequestHeaders, useRequestEvent, useRequestFetch, setResponseStatus, onNuxtReady, abortNavigation, addRouteMiddleware, defineNuxtRouteMiddleware, onBeforeRouteLeave, onBeforeRouteUpdate, setPageLayout, navigateTo, useRoute, useRouter, preloadComponents, prefetchComponents, preloadRouteComponents, isPrerendered, loadPayload, preloadPayload, definePayloadReducer, definePayloadReviver, getAppManifest, getRouteRules, reloadNuxtApp, useRequestURL, usePreviewMode, useId, useRouteAnnouncer, useHead, useSeoMeta, useServerSeoMeta } from './composables/index' +export { defineNuxtComponent, useAsyncData, useLazyAsyncData, useNuxtData, refreshNuxtData, clearNuxtData, useHydration, callOnce, useState, clearNuxtState, clearError, createError, isNuxtError, showError, useError, useFetch, useLazyFetch, useCookie, refreshCookie, onPrehydrate, prerenderRoutes, useRequestHeaders, useRequestEvent, useRequestFetch, setResponseStatus, useResponseHeader, onNuxtReady, abortNavigation, addRouteMiddleware, defineNuxtRouteMiddleware, onBeforeRouteLeave, onBeforeRouteUpdate, setPageLayout, navigateTo, useRoute, useRouter, preloadComponents, prefetchComponents, preloadRouteComponents, isPrerendered, loadPayload, preloadPayload, definePayloadReducer, definePayloadReviver, getAppManifest, getRouteRules, reloadNuxtApp, useRequestURL, usePreviewMode, useId, useRouteAnnouncer, useHead, useSeoMeta, useServerSeoMeta } from './composables/index' export type { AddRouteMiddlewareOptions, AsyncData, AsyncDataOptions, AsyncDataRequestStatus, CookieOptions, CookieRef, FetchResult, NuxtAppManifest, NuxtAppManifestMeta, NuxtError, ReloadNuxtAppOptions, RouteMiddleware, UseFetchOptions } from './composables/index' export { defineNuxtLink } from './components/index' diff --git a/packages/nuxt/src/app/plugins/revive-payload.client.ts b/packages/nuxt/src/app/plugins/revive-payload.client.ts index 3ab2f211df..2d2c2e8bbd 100644 --- a/packages/nuxt/src/app/plugins/revive-payload.client.ts +++ b/packages/nuxt/src/app/plugins/revive-payload.client.ts @@ -7,18 +7,18 @@ import { defineNuxtPlugin, useNuxtApp } from '../nuxt' // @ts-expect-error Virtual file. import { componentIslands } from '#build/nuxt.config.mjs' -const revivers: Record any> = { - NuxtError: data => createError(data), - EmptyShallowRef: data => shallowRef(data === '_' ? undefined : data === '0n' ? BigInt(0) : destr(data)), - EmptyRef: data => ref(data === '_' ? undefined : data === '0n' ? BigInt(0) : destr(data)), - ShallowRef: data => shallowRef(data), - ShallowReactive: data => shallowReactive(data), - Ref: data => ref(data), - Reactive: data => reactive(data), -} +const revivers: [string, (data: any) => any][] = [ + ['NuxtError', data => createError(data)], + ['EmptyShallowRef', data => shallowRef(data === '_' ? undefined : data === '0n' ? BigInt(0) : destr(data))], + ['EmptyRef', data => ref(data === '_' ? undefined : data === '0n' ? BigInt(0) : destr(data))], + ['ShallowRef', data => shallowRef(data)], + ['ShallowReactive', data => shallowReactive(data)], + ['Ref', data => ref(data)], + ['Reactive', data => reactive(data)], +] if (componentIslands) { - revivers.Island = ({ key, params, result }: any) => { + revivers.push(['Island', ({ key, params, result }: any) => { const nuxtApp = useNuxtApp() if (!nuxtApp.isHydrating) { nuxtApp.payload.data[key] = nuxtApp.payload.data[key] || $fetch(`/__nuxt_island/${key}.json`, { @@ -33,15 +33,15 @@ if (componentIslands) { html: '', ...result, } - } + }]) } export default defineNuxtPlugin({ name: 'nuxt:revive-payload:client', order: -30, async setup (nuxtApp) { - for (const reviver in revivers) { - definePayloadReviver(reviver, revivers[reviver as keyof typeof revivers]) + for (const [reviver, fn] of revivers) { + definePayloadReviver(reviver, fn) } Object.assign(nuxtApp.payload, await nuxtApp.runWithContext(getNuxtClientPayload)) delete window.__NUXT__ diff --git a/packages/nuxt/src/components/module.ts b/packages/nuxt/src/components/module.ts index 9fa26f4ed4..8f1589bb08 100644 --- a/packages/nuxt/src/components/module.ts +++ b/packages/nuxt/src/components/module.ts @@ -1,16 +1,18 @@ import { existsSync, statSync, writeFileSync } from 'node:fs' -import { join, normalize, relative, resolve } from 'pathe' -import { addPluginTemplate, addTemplate, addTypeTemplate, addVitePlugin, addWebpackPlugin, defineNuxtModule, logger, resolveAlias, resolvePath, updateTemplates } from '@nuxt/kit' +import { isAbsolute, join, normalize, relative, resolve } from 'pathe' +import { addBuildPlugin, addPluginTemplate, addTemplate, addTypeTemplate, addVitePlugin, defineNuxtModule, findPath, logger, resolveAlias, resolvePath, updateTemplates } from '@nuxt/kit' import type { Component, ComponentsDir, ComponentsOptions } from 'nuxt/schema' import { distDir } from '../dirs' -import { clientFallbackAutoIdPlugin } from './client-fallback-auto-id' import { componentNamesTemplate, componentsIslandsTemplate, componentsMetadataTemplate, componentsPluginTemplate, componentsTypeTemplate } from './templates' import { scanComponents } from './scan' -import { loaderPlugin } from './loader' -import { TreeShakeTemplatePlugin } from './tree-shake' -import { componentsChunkPlugin, islandsTransform } from './islandsTransform' -import { createTransformPlugin } from './transform' + +import { ClientFallbackAutoIdPlugin } from './plugins/client-fallback-auto-id' +import { LoaderPlugin } from './plugins/loader' +import { ComponentsChunkPlugin, IslandsTransformPlugin } from './plugins/islands-transform' +import { TransformPlugin } from './plugins/transform' +import { TreeShakeTemplatePlugin } from './plugins/tree-shake' +import { ComponentNamePlugin } from './plugins/component-names' const isPureObjectOrString = (val: any) => (!Array.isArray(val) && typeof val === 'object') || typeof val === 'string' const isDirectory = (p: string) => { try { return statSync(p).isDirectory() } catch { return false } } @@ -30,7 +32,7 @@ export default defineNuxtModule({ defaults: { dirs: [], }, - setup (componentOptions, nuxt) { + async setup (componentOptions, nuxt) { let componentDirs: ComponentsDir[] = [] const context = { components: [] as Component[], @@ -42,6 +44,11 @@ export default defineNuxtModule({ : context.components } + if (nuxt.options.experimental.normalizeComponentNames) { + addBuildPlugin(ComponentNamePlugin({ sourcemap: !!nuxt.options.sourcemap.client, getComponents }), { server: false }) + addBuildPlugin(ComponentNamePlugin({ sourcemap: !!nuxt.options.sourcemap.server, getComponents }), { client: false }) + } + const normalizeDirs = (dir: any, cwd: string, options?: { priority?: number }): ComponentsDir[] => { if (Array.isArray(dir)) { return dir.map(dir => normalizeDirs(dir, cwd, options)).flat().sort(compareDirByPathLength) @@ -127,23 +134,18 @@ export default defineNuxtModule({ addTemplate(componentsMetadataTemplate) } - const unpluginServer = createTransformPlugin(nuxt, getComponents, 'server') - const unpluginClient = createTransformPlugin(nuxt, getComponents, 'client') - - addVitePlugin(() => unpluginServer.vite(), { server: true, client: false }) - addVitePlugin(() => unpluginClient.vite(), { server: false, client: true }) - - addWebpackPlugin(() => unpluginServer.webpack(), { server: true, client: false }) - addWebpackPlugin(() => unpluginClient.webpack(), { server: false, client: true }) + const serverComponentRuntime = await findPath(join(distDir, 'components/runtime/server-component')) ?? join(distDir, 'components/runtime/server-component') + addBuildPlugin(TransformPlugin(nuxt, { getComponents, serverComponentRuntime, mode: 'server' }), { server: true, client: false }) + addBuildPlugin(TransformPlugin(nuxt, { getComponents, serverComponentRuntime, mode: 'client' }), { server: false, client: true }) // Do not prefetch global components chunks nuxt.hook('build:manifest', (manifest) => { const sourceFiles = getComponents().filter(c => c.global).map(c => relative(nuxt.options.srcDir, c.filePath)) - for (const key in manifest) { - if (manifest[key].isEntry) { - manifest[key].dynamicImports = - manifest[key].dynamicImports?.filter(i => !sourceFiles.includes(i)) + for (const chunk of Object.values(manifest)) { + if (chunk.isEntry) { + chunk.dynamicImports = + chunk.dynamicImports?.filter(i => !sourceFiles.includes(i)) } } }) @@ -161,7 +163,7 @@ export default defineNuxtModule({ } }) - const serverPlaceholderPath = resolve(distDir, 'app/components/server-placeholder') + const serverPlaceholderPath = await findPath(join(distDir, 'app/components/server-placeholder')) ?? join(distDir, 'app/components/server-placeholder') // Scan components and add to plugin nuxt.hook('app:templates', async (app) => { @@ -169,7 +171,7 @@ export default defineNuxtModule({ await nuxt.callHook('components:extend', newComponents) // add server placeholder for .client components server side. issue: #7085 for (const component of newComponents) { - if (!(component as any /* untyped internal property */)._scanned && !(component.filePath in nuxt.vfs) && !existsSync(component.filePath)) { + if (!(component as any /* untyped internal property */)._scanned && !(component.filePath in nuxt.vfs) && isAbsolute(component.filePath) && !existsSync(component.filePath)) { // attempt to resolve component path component.filePath = await resolvePath(component.filePath, { fallbackToOriginal: true }) } @@ -212,37 +214,51 @@ export default defineNuxtModule({ } }) - nuxt.hook('vite:extendConfig', (config, { isClient, isServer }) => { - const mode = isClient ? 'client' : 'server' + addBuildPlugin(TreeShakeTemplatePlugin({ sourcemap: !!nuxt.options.sourcemap.server, getComponents }), { client: false }) - config.plugins = config.plugins || [] - if (isServer) { - config.plugins.push(TreeShakeTemplatePlugin.vite({ - sourcemap: !!nuxt.options.sourcemap[mode], - getComponents, - })) - } - if (nuxt.options.experimental.clientFallback) { - config.plugins.push(clientFallbackAutoIdPlugin.vite({ - sourcemap: !!nuxt.options.sourcemap[mode], - rootDir: nuxt.options.rootDir, - })) - } - config.plugins.push(loaderPlugin.vite({ - sourcemap: !!nuxt.options.sourcemap[mode], - getComponents, - mode, - transform: typeof nuxt.options.components === 'object' && !Array.isArray(nuxt.options.components) ? nuxt.options.components.transform : undefined, - experimentalComponentIslands: !!nuxt.options.experimental.componentIslands, - })) + if (nuxt.options.experimental.clientFallback) { + addBuildPlugin(ClientFallbackAutoIdPlugin({ sourcemap: !!nuxt.options.sourcemap.client, rootDir: nuxt.options.rootDir }), { server: false }) + addBuildPlugin(ClientFallbackAutoIdPlugin({ sourcemap: !!nuxt.options.sourcemap.server, rootDir: nuxt.options.rootDir }), { client: false }) + } - if (nuxt.options.experimental.componentIslands) { - const selectiveClient = typeof nuxt.options.experimental.componentIslands === 'object' && nuxt.options.experimental.componentIslands.selectiveClient + const sharedLoaderOptions = { + getComponents, + serverComponentRuntime, + transform: typeof nuxt.options.components === 'object' && !Array.isArray(nuxt.options.components) ? nuxt.options.components.transform : undefined, + experimentalComponentIslands: !!nuxt.options.experimental.componentIslands, + } + + addBuildPlugin(LoaderPlugin({ ...sharedLoaderOptions, sourcemap: !!nuxt.options.sourcemap.client, mode: 'client' }), { server: false }) + addBuildPlugin(LoaderPlugin({ ...sharedLoaderOptions, sourcemap: !!nuxt.options.sourcemap.server, mode: 'server' }), { client: false }) + + if (nuxt.options.experimental.componentIslands) { + const selectiveClient = typeof nuxt.options.experimental.componentIslands === 'object' && nuxt.options.experimental.componentIslands.selectiveClient + + addVitePlugin({ + name: 'nuxt-server-component-hmr', + handleHotUpdate (ctx) { + const components = getComponents() + const filePath = normalize(ctx.file) + const comp = components.find(c => c.filePath === filePath) + if (comp?.mode === 'server') { + ctx.server.ws.send({ + event: `nuxt-server-component:${comp.pascalName}`, + type: 'custom', + }) + } + }, + }, { server: false }) + + addBuildPlugin(IslandsTransformPlugin({ getComponents, selectiveClient }), { client: false }) + + // TODO: refactor this + nuxt.hook('vite:extendConfig', (config, { isClient }) => { + config.plugins = config.plugins || [] if (isClient && selectiveClient) { writeFileSync(join(nuxt.options.buildDir, 'components-chunk.mjs'), 'export const paths = {}') if (!nuxt.options.dev) { - config.plugins.push(componentsChunkPlugin.vite({ + config.plugins.push(ComponentsChunkPlugin.vite({ getComponents, buildDir: nuxt.options.buildDir, })) @@ -256,65 +272,20 @@ export default defineNuxtModule({ )}`) } } + }) - if (isServer) { - config.plugins.push(islandsTransform.vite({ - getComponents, - selectiveClient, - })) - } - } - if (!isServer && nuxt.options.experimental.componentIslands) { - config.plugins.push({ - name: 'nuxt-server-component-hmr', - handleHotUpdate (ctx) { - const components = getComponents() - const filePath = normalize(ctx.file) - const comp = components.find(c => c.filePath === filePath) - if (comp?.mode === 'server') { - ctx.server.ws.send({ - event: `nuxt-server-component:${comp.pascalName}`, - type: 'custom', - }) + for (const key of ['rspack:config', 'webpack:config'] as const) { + nuxt.hook(key, (configs) => { + configs.forEach((config) => { + const mode = config.name === 'client' ? 'client' : 'server' + config.plugins = config.plugins || [] + + if (mode !== 'server') { + writeFileSync(join(nuxt.options.buildDir, 'components-chunk.mjs'), 'export const paths = {}') } - }, + }) }) } - }) - nuxt.hook('webpack:config', (configs) => { - configs.forEach((config) => { - const mode = config.name === 'client' ? 'client' : 'server' - config.plugins = config.plugins || [] - if (mode === 'server') { - config.plugins.push(TreeShakeTemplatePlugin.webpack({ - sourcemap: !!nuxt.options.sourcemap[mode], - getComponents, - })) - } - if (nuxt.options.experimental.clientFallback) { - config.plugins.push(clientFallbackAutoIdPlugin.webpack({ - sourcemap: !!nuxt.options.sourcemap[mode], - rootDir: nuxt.options.rootDir, - })) - } - config.plugins.push(loaderPlugin.webpack({ - sourcemap: !!nuxt.options.sourcemap[mode], - getComponents, - mode, - transform: typeof nuxt.options.components === 'object' && !Array.isArray(nuxt.options.components) ? nuxt.options.components.transform : undefined, - experimentalComponentIslands: !!nuxt.options.experimental.componentIslands, - })) - - if (nuxt.options.experimental.componentIslands) { - if (mode === 'server') { - config.plugins.push(islandsTransform.webpack({ - getComponents, - })) - } else { - writeFileSync(join(nuxt.options.buildDir, 'components-chunk.mjs'), 'export const paths = {}') - } - } - }) - }) + } }, }) diff --git a/packages/nuxt/src/components/client-fallback-auto-id.ts b/packages/nuxt/src/components/plugins/client-fallback-auto-id.ts similarity index 92% rename from packages/nuxt/src/components/client-fallback-auto-id.ts rename to packages/nuxt/src/components/plugins/client-fallback-auto-id.ts index 7aa42f1d0a..9f3e1b119c 100644 --- a/packages/nuxt/src/components/client-fallback-auto-id.ts +++ b/packages/nuxt/src/components/plugins/client-fallback-auto-id.ts @@ -3,7 +3,7 @@ import type { ComponentsOptions } from '@nuxt/schema' import MagicString from 'magic-string' import { isAbsolute, relative } from 'pathe' import { hash } from 'ohash' -import { isVue } from '../core/utils' +import { isVue } from '../../core/utils' interface LoaderOptions { sourcemap?: boolean @@ -12,7 +12,7 @@ interface LoaderOptions { } const CLIENT_FALLBACK_RE = /<(?:NuxtClientFallback|nuxt-client-fallback)(?: [^>]*)?>/ const CLIENT_FALLBACK_GLOBAL_RE = /<(NuxtClientFallback|nuxt-client-fallback)( [^>]*)?>/g -export const clientFallbackAutoIdPlugin = createUnplugin((options: LoaderOptions) => { +export const ClientFallbackAutoIdPlugin = (options: LoaderOptions) => createUnplugin(() => { const exclude = options.transform?.exclude || [] const include = options.transform?.include || [] diff --git a/packages/nuxt/src/components/plugins/component-names.ts b/packages/nuxt/src/components/plugins/component-names.ts new file mode 100644 index 0000000000..4a24ebe96b --- /dev/null +++ b/packages/nuxt/src/components/plugins/component-names.ts @@ -0,0 +1,46 @@ +import { createUnplugin } from 'unplugin' +import MagicString from 'magic-string' +import type { Component } from 'nuxt/schema' +import { isVue } from '../../core/utils' + +interface NameDevPluginOptions { + sourcemap: boolean + getComponents: () => Component[] +} +/** + * Set the default name of components to their PascalCase name + */ +export const ComponentNamePlugin = (options: NameDevPluginOptions) => createUnplugin(() => { + return { + name: 'nuxt:component-name-plugin', + enforce: 'post', + transformInclude (id) { + return isVue(id) || !!id.match(/\.[tj]sx$/) + }, + transform (code, id) { + const filename = id.match(/([^/\\]+)\.\w+$/)?.[1] + if (!filename) { + return + } + + const component = options.getComponents().find(c => c.filePath === id) + + if (!component) { + return + } + + const NAME_RE = new RegExp(`__name:\\s*['"]${filename}['"]`) + const s = new MagicString(code) + s.replace(NAME_RE, `__name: ${JSON.stringify(component.pascalName)}`) + + if (s.hasChanged()) { + return { + code: s.toString(), + map: options.sourcemap + ? s.generateMap({ hires: true }) + : undefined, + } + } + }, + } +}) diff --git a/packages/nuxt/src/components/islandsTransform.ts b/packages/nuxt/src/components/plugins/islands-transform.ts similarity index 63% rename from packages/nuxt/src/components/islandsTransform.ts rename to packages/nuxt/src/components/plugins/islands-transform.ts index d583e3425d..70ad9fb895 100644 --- a/packages/nuxt/src/components/islandsTransform.ts +++ b/packages/nuxt/src/components/plugins/islands-transform.ts @@ -9,7 +9,7 @@ import { ELEMENT_NODE, parse, walk } from 'ultrahtml' import { hash } from 'ohash' import { resolvePath } from '@nuxt/kit' import defu from 'defu' -import { isVue } from '../core/utils' +import { isVue } from '../../core/utils' interface ServerOnlyComponentTransformPluginOptions { getComponents: () => Component[] @@ -35,14 +35,14 @@ function wrapWithVForDiv (code: string, vfor: string): string { return `
${code}
` } -export const islandsTransform = createUnplugin((options: ServerOnlyComponentTransformPluginOptions, meta) => { +export const IslandsTransformPlugin = (options: ServerOnlyComponentTransformPluginOptions) => createUnplugin((_options, meta) => { const isVite = meta.framework === 'vite' return { - name: 'server-only-component-transform', + name: 'nuxt:server-only-component-transform', enforce: 'pre', transformInclude (id) { if (!isVue(id)) { return false } - if (options.selectiveClient === 'deep') { return true } + if (isVite && options.selectiveClient === 'deep') { return true } const components = options.getComponents() const islands = components.filter(component => @@ -70,54 +70,68 @@ export const islandsTransform = createUnplugin((options: ServerOnlyComponentTran const ast = parse(template[0]) await walk(ast, (node) => { - if (node.type === ELEMENT_NODE) { - if (node.name === 'slot') { - const { attributes, children, loc } = node - - const slotName = attributes.name ?? 'default' - - if (attributes.name) { delete attributes.name } - if (attributes['v-bind']) { - attributes._bind = extractAttributes(attributes, ['v-bind'])['v-bind'] - } - const teleportAttributes = extractAttributes(attributes, ['v-if', 'v-else-if', 'v-else']) - const bindings = getPropsToString(attributes) - // add the wrapper - s.appendLeft(startingIndex + loc[0].start, ``) - - if (children.length) { - // pass slot fallback to NuxtTeleportSsrSlot fallback - const attrString = attributeToString(attributes) - const slice = code.slice(startingIndex + loc[0].end, startingIndex + loc[1].start).replaceAll(/:?key="[^"]"/g, '') - s.overwrite(startingIndex + loc[0].start, startingIndex + loc[1].end, ``) - } else { - s.overwrite(startingIndex + loc[0].start, startingIndex + loc[0].end, code.slice(startingIndex + loc[0].start, startingIndex + loc[0].end).replaceAll(EXTRACTED_ATTRS_RE, '')) - } - - s.appendRight(startingIndex + loc[1].end, '') - } else if (options.selectiveClient && ('nuxt-client' in node.attributes || ':nuxt-client' in node.attributes)) { - hasNuxtClient = true - const { loc, attributes } = node - const attributeValue = attributes[':nuxt-client'] || attributes['nuxt-client'] || 'true' - if (isVite) { - const uid = hash(id + node.loc[0].start + node.loc[0].end) - const wrapperAttributes = extractAttributes(attributes, ['v-if', 'v-else-if', 'v-else']) - - let startTag = code.slice(startingIndex + loc[0].start, startingIndex + loc[0].end).replace(NUXTCLIENT_ATTR_RE, '') - if (wrapperAttributes) { - startTag = startTag.replaceAll(EXTRACTED_ATTRS_RE, '') - } - - s.appendLeft(startingIndex + loc[0].start, ``) - s.overwrite(startingIndex + loc[0].start, startingIndex + loc[0].end, startTag) - s.appendRight(startingIndex + loc[1].end, '') - } - } + if (node.type !== ELEMENT_NODE) { + return } + if (node.name === 'slot') { + const { attributes, children, loc } = node + + const slotName = attributes.name ?? 'default' + + if (attributes.name) { delete attributes.name } + if (attributes['v-bind']) { + attributes._bind = extractAttributes(attributes, ['v-bind'])['v-bind']! + } + const teleportAttributes = extractAttributes(attributes, ['v-if', 'v-else-if', 'v-else']) + const bindings = getPropsToString(attributes) + // add the wrapper + s.appendLeft(startingIndex + loc[0].start, ``) + + if (children.length) { + // pass slot fallback to NuxtTeleportSsrSlot fallback + const attrString = attributeToString(attributes) + const slice = code.slice(startingIndex + loc[0].end, startingIndex + loc[1].start).replaceAll(/:?key="[^"]"/g, '') + s.overwrite(startingIndex + loc[0].start, startingIndex + loc[1].end, ``) + } else { + s.overwrite(startingIndex + loc[0].start, startingIndex + loc[0].end, code.slice(startingIndex + loc[0].start, startingIndex + loc[0].end).replaceAll(EXTRACTED_ATTRS_RE, '')) + } + + s.appendRight(startingIndex + loc[1].end, '') + return + } + + if (!('nuxt-client' in node.attributes) && !(':nuxt-client' in node.attributes)) { + return + } + + hasNuxtClient = true + + if (!isVite || !options.selectiveClient) { + return + } + + const { loc, attributes } = node + const attributeValue = attributes[':nuxt-client'] || attributes['nuxt-client'] || 'true' + + const uid = hash(id + node.loc[0].start + node.loc[0].end) + const wrapperAttributes = extractAttributes(attributes, ['v-if', 'v-else-if', 'v-else']) + + let startTag = code.slice(startingIndex + loc[0].start, startingIndex + loc[0].end).replace(NUXTCLIENT_ATTR_RE, '') + if (wrapperAttributes) { + startTag = startTag.replaceAll(EXTRACTED_ATTRS_RE, '') + } + + s.appendLeft(startingIndex + loc[0].start, ``) + s.overwrite(startingIndex + loc[0].start, startingIndex + loc[0].end, startTag) + s.appendRight(startingIndex + loc[1].end, '') }) - if (!isVite && hasNuxtClient) { - console.warn(`nuxt-client attribute and client components within islands is only supported with Vite. file: ${id}`) + if (hasNuxtClient) { + if (!options.selectiveClient) { + console.warn(`The \`nuxt-client\` attribute and client components within islands are only supported when \`experimental.componentIslands.selectiveClient\` is enabled. file: ${id}`) + } else if (!isVite) { + console.warn(`The \`nuxt-client\` attribute and client components within islands are only supported with Vite. file: ${id}`) + } } if (s.hasChanged()) { @@ -137,7 +151,7 @@ function extractAttributes (attributes: Record, names: string[]) const extracted: Record = {} for (const name of names) { if (name in attributes) { - extracted[name] = attributes[name] + extracted[name] = attributes[name]! delete attributes[name] } } @@ -164,10 +178,10 @@ function getPropsToString (bindings: Record): string { } } -export const componentsChunkPlugin = createUnplugin((options: ComponentChunkOptions) => { +export const ComponentsChunkPlugin = createUnplugin((options: ComponentChunkOptions) => { const { buildDir } = options return { - name: 'componentsChunkPlugin', + name: 'nuxt:components-chunk', vite: { async config (config) { const components = options.getComponents() diff --git a/packages/nuxt/src/components/loader.ts b/packages/nuxt/src/components/plugins/loader.ts similarity index 82% rename from packages/nuxt/src/components/loader.ts rename to packages/nuxt/src/components/plugins/loader.ts index b8e5d38b62..6c3a9e91c7 100644 --- a/packages/nuxt/src/components/loader.ts +++ b/packages/nuxt/src/components/plugins/loader.ts @@ -2,25 +2,25 @@ import { createUnplugin } from 'unplugin' import { genDynamicImport, genImport } from 'knitwork' import MagicString from 'magic-string' import { pascalCase } from 'scule' -import { resolve } from 'pathe' +import { relative } from 'pathe' import type { Component, ComponentsOptions } from 'nuxt/schema' import { logger, tryUseNuxt } from '@nuxt/kit' -import { distDir } from '../dirs' -import { isVue } from '../core/utils' +import { isVue } from '../../core/utils' interface LoaderOptions { getComponents (): Component[] mode: 'server' | 'client' + serverComponentRuntime: string sourcemap?: boolean transform?: ComponentsOptions['transform'] experimentalComponentIslands?: boolean } -export const loaderPlugin = createUnplugin((options: LoaderOptions) => { +export const LoaderPlugin = (options: LoaderOptions) => createUnplugin(() => { const exclude = options.transform?.exclude || [] const include = options.transform?.include || [] - const serverComponentRuntime = resolve(distDir, 'components/runtime/server-component') + const nuxt = tryUseNuxt() return { name: 'nuxt:components-loader', @@ -34,7 +34,7 @@ export const loaderPlugin = createUnplugin((options: LoaderOptions) => { } return isVue(id, { type: ['template', 'script'] }) || !!id.match(/\.[tj]sx$/) }, - transform (code) { + transform (code, id) { const components = options.getComponents() let num = 0 @@ -46,10 +46,14 @@ export const loaderPlugin = createUnplugin((options: LoaderOptions) => { s.replace(/(?<=[ (])_?resolveComponent\(\s*["'](lazy-|Lazy(?=[A-Z]))?([^'"]*)["'][^)]*\)/g, (full: string, lazy: string, name: string) => { const component = findComponent(components, name, options.mode) if (component) { - // @ts-expect-error TODO: refactor to nuxi - if (component._internal_install && tryUseNuxt()?.options.test === false) { - // @ts-expect-error TODO: refactor to nuxi - import('../core/features').then(({ installNuxtModule }) => installNuxtModule(component._internal_install)) + // TODO: refactor to nuxi + const internalInstall = ((component as any)._internal_install) as string + if (internalInstall && nuxt?.options.test === false) { + if (!nuxt.options.dev) { + const relativePath = relative(nuxt.options.rootDir, id) + throw new Error(`[nuxt] \`~/${relativePath}\` is using \`${component.pascalName}\` which requires \`${internalInstall}\``) + } + import('../../core/features').then(({ installNuxtModule }) => installNuxtModule(internalInstall)) } let identifier = map.get(component) || `__nuxt_component_${num++}` map.set(component, identifier) @@ -57,7 +61,7 @@ export const loaderPlugin = createUnplugin((options: LoaderOptions) => { const isServerOnly = !component._raw && component.mode === 'server' && !components.some(c => c.pascalName === component.pascalName && c.mode === 'client') if (isServerOnly) { - imports.add(genImport(serverComponentRuntime, [{ name: 'createServerComponent' }])) + imports.add(genImport(options.serverComponentRuntime, [{ name: 'createServerComponent' }])) imports.add(`const ${identifier} = createServerComponent(${JSON.stringify(component.pascalName)})`) if (!options.experimentalComponentIslands) { logger.warn(`Standalone server components (\`${name}\`) are not yet supported without enabling \`experimental.componentIslands\`.`) diff --git a/packages/nuxt/src/components/transform.ts b/packages/nuxt/src/components/plugins/transform.ts similarity index 91% rename from packages/nuxt/src/components/transform.ts rename to packages/nuxt/src/components/plugins/transform.ts index 16f1f38052..ba819bbfa3 100644 --- a/packages/nuxt/src/components/transform.ts +++ b/packages/nuxt/src/components/plugins/transform.ts @@ -5,15 +5,19 @@ import { createUnimport } from 'unimport' import { createUnplugin } from 'unplugin' import { parseURL } from 'ufo' import { parseQuery } from 'vue-router' -import { normalize, resolve } from 'pathe' +import { normalize } from 'pathe' import { genImport } from 'knitwork' -import { distDir } from '../dirs' -import type { getComponentsT } from './module' +import type { getComponentsT } from '../module' const COMPONENT_QUERY_RE = /[?&]nuxt_component=/ -export function createTransformPlugin (nuxt: Nuxt, getComponents: getComponentsT, mode: 'client' | 'server' | 'all') { - const serverComponentRuntime = resolve(distDir, 'components/runtime/server-component') +interface TransformPluginOptions { + getComponents: getComponentsT + mode: 'client' | 'server' | 'all' + serverComponentRuntime: string +} + +export function TransformPlugin (nuxt: Nuxt, options: TransformPluginOptions) { const componentUnimport = createUnimport({ imports: [ { @@ -26,7 +30,7 @@ export function createTransformPlugin (nuxt: Nuxt, getComponents: getComponentsT }) function getComponentsImports (): Import[] { - const components = getComponents(mode) + const components = options.getComponents(options.mode) return components.flatMap((c): Import[] => { const withMode = (mode: string | undefined) => mode ? `${c.filePath}${c.filePath.includes('?') ? '&' : '?'}nuxt_component=${mode}&nuxt_component_name=${c.pascalName}&nuxt_component_export=${c.export || 'default'}` @@ -95,7 +99,7 @@ export function createTransformPlugin (nuxt: Nuxt, getComponents: getComponentsT const name = query.nuxt_component_name return { code: [ - `import { createServerComponent } from ${JSON.stringify(serverComponentRuntime)}`, + `import { createServerComponent } from ${JSON.stringify(options.serverComponentRuntime)}`, `${exportWording} createServerComponent(${JSON.stringify(name)})`, ].join('\n'), map: null, diff --git a/packages/nuxt/src/components/tree-shake.ts b/packages/nuxt/src/components/plugins/tree-shake.ts similarity index 96% rename from packages/nuxt/src/components/tree-shake.ts rename to packages/nuxt/src/components/plugins/tree-shake.ts index 56ea65cd3b..2ebb669a03 100644 --- a/packages/nuxt/src/components/tree-shake.ts +++ b/packages/nuxt/src/components/plugins/tree-shake.ts @@ -6,7 +6,7 @@ import type { AssignmentProperty, CallExpression, Identifier, Literal, MemberExp import { createUnplugin } from 'unplugin' import type { Component } from '@nuxt/schema' import { resolve } from 'pathe' -import { distDir } from '../dirs' +import { distDir } from '../../dirs' interface TreeShakeTemplatePluginOptions { sourcemap?: boolean @@ -20,7 +20,7 @@ const PLACEHOLDER_EXACT_RE = /^(?:fallback|placeholder)$/ const CLIENT_ONLY_NAME_RE = /^(?:_unref\()?(?:_component_)?(?:Lazy|lazy_)?(?:client_only|ClientOnly\)?)$/ const PARSER_OPTIONS = { sourceType: 'module', ecmaVersion: 'latest' } -export const TreeShakeTemplatePlugin = createUnplugin((options: TreeShakeTemplatePluginOptions) => { +export const TreeShakeTemplatePlugin = (options: TreeShakeTemplatePluginOptions) => createUnplugin(() => { const regexpMap = new WeakMap() return { name: 'nuxt:tree-shake-template', @@ -33,8 +33,9 @@ export const TreeShakeTemplatePlugin = createUnplugin((options: TreeShakeTemplat const components = options.getComponents() if (!regexpMap.has(components)) { + const serverPlaceholderPath = resolve(distDir, 'app/components/server-placeholder') const clientOnlyComponents = components - .filter(c => c.mode === 'client' && !components.some(other => other.mode !== 'client' && other.pascalName === c.pascalName && other.filePath !== resolve(distDir, 'app/components/server-placeholder'))) + .filter(c => c.mode === 'client' && !components.some(other => other.mode !== 'client' && other.pascalName === c.pascalName && !other.filePath.startsWith(serverPlaceholderPath))) .flatMap(c => [c.pascalName, c.kebabName.replaceAll('-', '_')]) .concat(['ClientOnly', 'client_only']) @@ -56,6 +57,8 @@ export const TreeShakeTemplatePlugin = createUnplugin((options: TreeShakeTemplat const node = _node as AcornNode if (isSsrRender(node)) { const [componentCall, _, children] = node.arguments + if (!componentCall) { return } + if (componentCall.type === 'Identifier' || componentCall.type === 'MemberExpression' || componentCall.type === 'CallExpression') { const componentName = getComponentName(node) const isClientComponent = COMPONENTS_IDENTIFIERS_RE.test(componentName) @@ -137,8 +140,10 @@ function removeFromSetupReturn (codeAst: Program, name: string, magicString: Mag const variableList = node.value.body.body.filter((statement): statement is VariableDeclaration => statement.type === 'VariableDeclaration') const returnedVariableDeclaration = variableList.find(declaration => declaration.declarations[0]?.id.type === 'Identifier' && declaration.declarations[0]?.id.name === '__returned__' && declaration.declarations[0]?.init?.type === 'ObjectExpression') if (returnedVariableDeclaration) { - const init = returnedVariableDeclaration.declarations[0].init as ObjectExpression - removePropertyFromObject(init, name, magicString) + const init = returnedVariableDeclaration.declarations[0]?.init as ObjectExpression | undefined + if (init) { + removePropertyFromObject(init, name, magicString) + } } } } diff --git a/packages/nuxt/src/core/app.ts b/packages/nuxt/src/core/app.ts index 494b30b798..f0426b62a3 100644 --- a/packages/nuxt/src/core/app.ts +++ b/packages/nuxt/src/core/app.ts @@ -72,7 +72,7 @@ export async function generateApp (nuxt: Nuxt, app: NuxtApp, options: { filter?: if (template.modified) { nuxt.vfs[fullPath] = contents - const aliasPath = '#build/' + template.filename!.replace(/\.\w+$/, '') + const aliasPath = '#build/' + template.filename nuxt.vfs[aliasPath] = contents // In case a non-normalized absolute path is called for on Windows @@ -254,7 +254,7 @@ export async function annotatePlugins (nuxt: Nuxt, plugins: NuxtPlugin[]) { const _plugins: Array> = [] for (const plugin of plugins) { try { - const code = plugin.src in nuxt.vfs ? nuxt.vfs[plugin.src] : await fsp.readFile(plugin.src!, 'utf-8') + const code = plugin.src in nuxt.vfs ? nuxt.vfs[plugin.src]! : await fsp.readFile(plugin.src!, 'utf-8') _plugins.push({ ...await extractMetadata(code, IS_TSX.test(plugin.src) ? 'tsx' : 'ts'), ...plugin, diff --git a/packages/nuxt/src/core/builder.ts b/packages/nuxt/src/core/builder.ts index b414cbf081..1e8d7eb0e1 100644 --- a/packages/nuxt/src/core/builder.ts +++ b/packages/nuxt/src/core/builder.ts @@ -138,9 +138,9 @@ function createGranularWatcher () { delete watchers[path] } if (event === 'addDir' && path !== dir && !ignoredDirs.has(path) && !pathsToWatch.includes(path) && !(path in watchers) && !isIgnored(path)) { - watchers[path] = chokidarWatch(path, { ...nuxt.options.watchers.chokidar, ignored: [isIgnored] }) - watchers[path].on('all', (event, p) => nuxt.callHook('builder:watch', event, normalize(p))) - nuxt.hook('close', () => watchers[path]?.close()) + const pathWatcher = watchers[path] = chokidarWatch(path, { ...nuxt.options.watchers.chokidar, ignored: [isIgnored] }) + pathWatcher.on('all', (event, p) => nuxt.callHook('builder:watch', event, normalize(p))) + nuxt.hook('close', () => pathWatcher?.close()) } }) watcher.on('ready', () => { diff --git a/packages/nuxt/src/core/nitro.ts b/packages/nuxt/src/core/nitro.ts index d3f5394d05..34f23fb75d 100644 --- a/packages/nuxt/src/core/nitro.ts +++ b/packages/nuxt/src/core/nitro.ts @@ -101,8 +101,8 @@ export async function initNitro (nuxt: Nuxt & { _nitro?: Nitro }) { devHandlers: [], baseURL: nuxt.options.app.baseURL, virtual: { - '#internal/nuxt.config.mjs': () => nuxt.vfs['#build/nuxt.config'], - '#internal/nuxt/app-config': () => nuxt.vfs['#build/app.config'].replace(/\/\*\* client \*\*\/[\s\S]*\/\*\* client-end \*\*\//, ''), + '#internal/nuxt.config.mjs': () => nuxt.vfs['#build/nuxt.config.mjs'], + '#internal/nuxt/app-config': () => nuxt.vfs['#build/app.config.mjs']?.replace(/\/\*\* client \*\*\/[\s\S]*\/\*\* client-end \*\*\//, ''), '#spa-template': async () => `export const template = ${JSON.stringify(await spaLoadingTemplate(nuxt))}`, }, routeRules: { @@ -189,11 +189,11 @@ export async function initNitro (nuxt: Nuxt & { _nitro?: Nitro }) { }, '@vue/devtools-api': 'vue-devtools-stub', - // Paths - '#internal/nuxt/paths': resolve(distDir, 'core/runtime/nitro/paths'), - // Nuxt aliases ...nuxt.options.alias, + + // Paths + '#internal/nuxt/paths': resolve(distDir, 'core/runtime/nitro/paths'), }, replace: { 'process.env.NUXT_NO_SSR': nuxt.options.ssr === false, @@ -347,7 +347,7 @@ export async function initNitro (nuxt: Nuxt & { _nitro?: Nitro }) { } } - if (nuxt.options.builder === '@nuxt/webpack-builder' || nuxt.options.dev) { + if (nuxt.options.dev || nuxt.options.builder === '@nuxt/webpack-builder' || nuxt.options.builder === '@nuxt/rspack-builder') { nitroConfig.virtual!['#build/dist/server/styles.mjs'] = 'export default {}' // In case a non-normalized absolute path is called for on Windows if (process.platform === 'win32') { @@ -448,18 +448,20 @@ export async function initNitro (nuxt: Nuxt & { _nitro?: Nitro }) { } } }) - nuxt.hook('webpack:config', (configuration) => { - const clientConfig = configuration.find(config => config.name === 'client') - if (!clientConfig!.resolve) { clientConfig!.resolve!.alias = {} } - if (Array.isArray(clientConfig!.resolve!.alias)) { - clientConfig!.resolve!.alias.push({ - name: 'vue', - alias: 'vue/dist/vue.esm-bundler', - }) - } else { - clientConfig!.resolve!.alias!.vue = 'vue/dist/vue.esm-bundler' - } - }) + for (const hook of ['webpack:config', 'rspack:config'] as const) { + nuxt.hook(hook, (configuration) => { + const clientConfig = configuration.find(config => config.name === 'client') + if (!clientConfig!.resolve) { clientConfig!.resolve!.alias = {} } + if (Array.isArray(clientConfig!.resolve!.alias)) { + clientConfig!.resolve!.alias.push({ + name: 'vue', + alias: 'vue/dist/vue.esm-bundler', + }) + } else { + clientConfig!.resolve!.alias!.vue = 'vue/dist/vue.esm-bundler' + } + }) + } } // Setup handlers @@ -529,11 +531,11 @@ export async function initNitro (nuxt: Nuxt & { _nitro?: Nitro }) { // nuxt build/dev nuxt.hook('build:done', async () => { await nuxt.callHook('nitro:build:before', nitro) + await prepare(nitro) if (nuxt.options.dev) { return build(nitro) } - await prepare(nitro) await prerender(nitro) logger.restoreAll() @@ -545,7 +547,15 @@ export async function initNitro (nuxt: Nuxt & { _nitro?: Nitro }) { // nuxt dev if (nuxt.options.dev) { - nuxt.hook('webpack:compiled', () => { nuxt.server.reload() }) + for (const builder of ['webpack', 'rspack'] as const) { + nuxt.hook(`${builder}:compile`, ({ name, compiler }) => { + if (name === 'server') { + const memfs = compiler.outputFileSystem as typeof import('node:fs') + nitro.options.virtual['#build/dist/server/server.mjs'] = () => memfs.readFileSync(join(nuxt.options.buildDir, 'dist/server/server.mjs'), 'utf-8') + } + }) + nuxt.hook(`${builder}:compiled`, () => { nuxt.server.reload() }) + } nuxt.hook('vite:compiled', () => { nuxt.server.reload() }) nuxt.hook('server:devHandler', (h) => { devMiddlewareHandler.set(h) }) diff --git a/packages/nuxt/src/core/nuxt.ts b/packages/nuxt/src/core/nuxt.ts index 3549e0858f..56ecd6f7c8 100644 --- a/packages/nuxt/src/core/nuxt.ts +++ b/packages/nuxt/src/core/nuxt.ts @@ -4,7 +4,7 @@ import { join, normalize, relative, resolve } from 'pathe' import { createDebugger, createHooks } from 'hookable' import ignore from 'ignore' import type { LoadNuxtOptions } from '@nuxt/kit' -import { addBuildPlugin, addComponent, addPlugin, addRouteMiddleware, addServerPlugin, addVitePlugin, addWebpackPlugin, installModule, loadNuxtConfig, logger, nuxtCtx, resolveAlias, resolveFiles, resolveIgnorePatterns, resolvePath, tryResolveModule, useNitro } from '@nuxt/kit' +import { addBuildPlugin, addComponent, addPlugin, addPluginTemplate, addRouteMiddleware, addServerPlugin, addVitePlugin, addWebpackPlugin, installModule, loadNuxtConfig, logger, nuxtCtx, resolveAlias, resolveFiles, resolveIgnorePatterns, resolvePath, tryResolveModule, useNitro } from '@nuxt/kit' import { resolvePath as _resolvePath } from 'mlly' import type { Nuxt, NuxtHooks, NuxtModule, NuxtOptions } from 'nuxt/schema' import type { PackageJson } from 'pkg-types' @@ -33,9 +33,7 @@ import { version } from '../../package.json' import { scriptsStubsPreset } from '../imports/presets' import { resolveTypePath } from './utils/types' import { nuxtImportProtections } from './plugins/import-protection' -import type { UnctxTransformPluginOptions } from './plugins/unctx' import { UnctxTransformPlugin } from './plugins/unctx' -import type { TreeShakeComposablesPluginOptions } from './plugins/tree-shake' import { TreeShakeComposablesPlugin } from './plugins/tree-shake' import { DevOnlyPlugin } from './plugins/dev-only' import { LayerAliasingPlugin } from './plugins/layer-aliasing' @@ -46,6 +44,7 @@ import { RemovePluginMetadataPlugin } from './plugins/plugin-metadata' import { AsyncContextInjectionPlugin } from './plugins/async-context' import { resolveDeepImportsPlugin } from './plugins/resolve-deep-imports' import { prehydrateTransformPlugin } from './plugins/prehydrate' +import { VirtualFSPlugin } from './plugins/virtual' export function createNuxt (options: NuxtOptions): Nuxt { const hooks = createHooks() @@ -179,13 +178,13 @@ async function initNuxt (nuxt: Nuxt) { const coreTypePackages = nuxt.options.typescript.hoist || [] const packageJSON = await readPackageJSON(nuxt.options.rootDir).catch(() => ({}) as PackageJson) - const dependencies = new Set([...Object.keys(packageJSON.dependencies || {}), ...Object.keys(packageJSON.devDependencies || {})]) + nuxt._dependencies = new Set([...Object.keys(packageJSON.dependencies || {}), ...Object.keys(packageJSON.devDependencies || {})]) const paths = Object.fromEntries(await Promise.all(coreTypePackages.map(async (pkg) => { const [_pkg = pkg, _subpath] = /^[^@]+\//.test(pkg) ? pkg.split('/') : [pkg] const subpath = _subpath ? '/' + _subpath : '' // ignore packages that exist in `package.json` as these can be resolved by TypeScript - if (dependencies.has(_pkg) && !(_pkg in nightlies)) { return [] } + if (nuxt._dependencies?.has(_pkg) && !(_pkg in nightlies)) { return [] } // deduplicate types for nightly releases if (_pkg in nightlies) { @@ -242,6 +241,10 @@ async function initNuxt (nuxt: Nuxt) { } } + // Support Nuxt VFS + addBuildPlugin(VirtualFSPlugin(nuxt, { mode: 'server' }), { client: false }) + addBuildPlugin(VirtualFSPlugin(nuxt, { mode: 'client', alias: { 'nitro/runtime': join(nuxt.options.buildDir, 'nitro.client.mjs') } }), { server: false }) + // Add plugin normalization plugin addBuildPlugin(RemovePluginMetadataPlugin(nuxt)) @@ -265,58 +268,45 @@ async function initNuxt (nuxt: Nuxt) { if (nuxt.options.experimental.localLayerAliases) { // Add layer aliasing support for ~, ~~, @ and @@ aliases - addVitePlugin(() => LayerAliasingPlugin.vite({ + addBuildPlugin(LayerAliasingPlugin({ sourcemap: !!nuxt.options.sourcemap.server || !!nuxt.options.sourcemap.client, dev: nuxt.options.dev, root: nuxt.options.srcDir, // skip top-level layer (user's project) as the aliases will already be correctly resolved layers: nuxt.options._layers.slice(1), })) - addWebpackPlugin(() => LayerAliasingPlugin.webpack({ - sourcemap: !!nuxt.options.sourcemap.server || !!nuxt.options.sourcemap.client, - dev: nuxt.options.dev, - root: nuxt.options.srcDir, - // skip top-level layer (user's project) as the aliases will already be correctly resolved - layers: nuxt.options._layers.slice(1), - transform: true, - })) } nuxt.hook('modules:done', async () => { // Add unctx transform - const options = { + addBuildPlugin(UnctxTransformPlugin({ sourcemap: !!nuxt.options.sourcemap.server || !!nuxt.options.sourcemap.client, transformerOptions: { ...nuxt.options.optimization.asyncTransforms, helperModule: await tryResolveModule('unctx', nuxt.options.modulesDir) ?? 'unctx', }, - } satisfies UnctxTransformPluginOptions - addVitePlugin(() => UnctxTransformPlugin.vite(options)) - addWebpackPlugin(() => UnctxTransformPlugin.webpack(options)) + })) // Add composable tree-shaking optimisations - const serverTreeShakeOptions: TreeShakeComposablesPluginOptions = { - sourcemap: !!nuxt.options.sourcemap.server, - composables: nuxt.options.optimization.treeShake.composables.server, + if (Object.keys(nuxt.options.optimization.treeShake.composables.server).length) { + addBuildPlugin(TreeShakeComposablesPlugin({ + sourcemap: !!nuxt.options.sourcemap.server, + composables: nuxt.options.optimization.treeShake.composables.server, + }), { client: false }) } - if (Object.keys(serverTreeShakeOptions.composables).length) { - addVitePlugin(() => TreeShakeComposablesPlugin.vite(serverTreeShakeOptions), { client: false }) - addWebpackPlugin(() => TreeShakeComposablesPlugin.webpack(serverTreeShakeOptions), { client: false }) - } - const clientTreeShakeOptions: TreeShakeComposablesPluginOptions = { - sourcemap: !!nuxt.options.sourcemap.client, - composables: nuxt.options.optimization.treeShake.composables.client, - } - if (Object.keys(clientTreeShakeOptions.composables).length) { - addVitePlugin(() => TreeShakeComposablesPlugin.vite(clientTreeShakeOptions), { server: false }) - addWebpackPlugin(() => TreeShakeComposablesPlugin.webpack(clientTreeShakeOptions), { server: false }) + if (Object.keys(nuxt.options.optimization.treeShake.composables.client).length) { + addBuildPlugin(TreeShakeComposablesPlugin({ + sourcemap: !!nuxt.options.sourcemap.client, + composables: nuxt.options.optimization.treeShake.composables.client, + }), { server: false }) } }) if (!nuxt.options.dev) { // DevOnly component tree-shaking - build time only - addVitePlugin(() => DevOnlyPlugin.vite({ sourcemap: !!nuxt.options.sourcemap.server || !!nuxt.options.sourcemap.client })) - addWebpackPlugin(() => DevOnlyPlugin.webpack({ sourcemap: !!nuxt.options.sourcemap.server || !!nuxt.options.sourcemap.client })) + addBuildPlugin(DevOnlyPlugin({ + sourcemap: !!nuxt.options.sourcemap.server || !!nuxt.options.sourcemap.client, + })) } if (nuxt.options.dev) { @@ -345,10 +335,10 @@ async function initNuxt (nuxt: Nuxt) { // TODO: [Experimental] Avoid emitting assets when flag is enabled if (nuxt.options.features.noScripts && !nuxt.options.dev) { nuxt.hook('build:manifest', async (manifest) => { - for (const file in manifest) { - if (manifest[file].resourceType === 'script') { - await rm(resolve(nuxt.options.buildDir, 'dist/client', withoutLeadingSlash(nuxt.options.app.buildAssetsDir), manifest[file].file), { force: true }) - manifest[file].file = '' + for (const chunk of Object.values(manifest)) { + if (chunk.resourceType === 'script') { + await rm(resolve(nuxt.options.buildDir, 'dist/client', withoutLeadingSlash(nuxt.options.app.buildAssetsDir), chunk.file), { force: true }) + chunk.file = '' } } }) @@ -507,9 +497,11 @@ async function initNuxt (nuxt: Nuxt) { const envMap = { // defaults from `builder` based on package name + '@nuxt/rspack-builder': '@rspack/core/module', '@nuxt/vite-builder': 'vite/client', '@nuxt/webpack-builder': 'webpack/module', // simpler overrides from `typescript.builder` for better DX + 'rspack': '@rspack/core/module', 'vite': 'vite/client', 'webpack': 'webpack/module', // default 'merged' builder environment for module authors @@ -606,6 +598,21 @@ async function initNuxt (nuxt: Nuxt) { }) } + if (nuxt.options.vue.config && Object.values(nuxt.options.vue.config).some(v => v !== null && v !== undefined)) { + addPluginTemplate({ + filename: 'vue-app-config.mjs', + getContents: () => ` +import { defineNuxtPlugin } from '#app/nuxt' +export default defineNuxtPlugin({ + name: 'nuxt:vue-app-config', + enforce: 'pre', + setup (nuxtApp) { + ${Object.keys(nuxt.options.vue.config!).map(k => ` nuxtApp.vueApp.config[${JSON.stringify(k)}] = ${JSON.stringify(nuxt.options.vue.config![k as 'idPrefix'])}`).join('\n')} + } +})`, + }) + } + nuxt.hooks.hook('builder:watch', (event, relativePath) => { const path = resolve(nuxt.options.srcDir, relativePath) // Local module patterns diff --git a/packages/nuxt/src/core/plugins/dev-only.ts b/packages/nuxt/src/core/plugins/dev-only.ts index 35437ad777..17992aa3d1 100644 --- a/packages/nuxt/src/core/plugins/dev-only.ts +++ b/packages/nuxt/src/core/plugins/dev-only.ts @@ -10,7 +10,7 @@ interface DevOnlyPluginOptions { const DEVONLY_COMP_SINGLE_RE = /<(?:dev-only|DevOnly|lazy-dev-only|LazyDevOnly)>[\s\S]*?<\/(?:dev-only|DevOnly|lazy-dev-only|LazyDevOnly)>/ const DEVONLY_COMP_RE = /<(?:dev-only|DevOnly|lazy-dev-only|LazyDevOnly)>[\s\S]*?<\/(?:dev-only|DevOnly|lazy-dev-only|LazyDevOnly)>/g -export const DevOnlyPlugin = createUnplugin((options: DevOnlyPluginOptions) => { +export const DevOnlyPlugin = (options: DevOnlyPluginOptions) => createUnplugin(() => { return { name: 'nuxt:server-devonly:transform', enforce: 'pre', diff --git a/packages/nuxt/src/core/plugins/layer-aliasing.ts b/packages/nuxt/src/core/plugins/layer-aliasing.ts index 852cb0f281..9f12c72988 100644 --- a/packages/nuxt/src/core/plugins/layer-aliasing.ts +++ b/packages/nuxt/src/core/plugins/layer-aliasing.ts @@ -6,7 +6,6 @@ import MagicString from 'magic-string' interface LayerAliasingOptions { sourcemap?: boolean - transform?: boolean root: string dev: boolean layers: NuxtConfigLayer[] @@ -15,7 +14,7 @@ interface LayerAliasingOptions { const ALIAS_RE = /(?<=['"])[~@]{1,2}(?=\/)/g const ALIAS_RE_SINGLE = /(?<=['"])[~@]{1,2}(?=\/)/ -export const LayerAliasingPlugin = createUnplugin((options: LayerAliasingOptions) => { +export const LayerAliasingPlugin = (options: LayerAliasingOptions) => createUnplugin((_options, meta) => { const aliases: Record> = {} for (const layer of options.layers) { const srcDir = layer.config.srcDir || layer.cwd @@ -52,19 +51,20 @@ export const LayerAliasingPlugin = createUnplugin((options: LayerAliasingOptions // webpack-only transform transformInclude: (id) => { - if (!options.transform) { return false } + if (meta.framework === 'vite') { return false } + const _id = normalize(id) return layers.some(dir => _id.startsWith(dir)) }, transform (code, id) { - if (!options.transform) { return } + if (meta.framework === 'vite') { return } const _id = normalize(id) const layer = layers.find(l => _id.startsWith(l)) if (!layer || !ALIAS_RE_SINGLE.test(code)) { return } const s = new MagicString(code) - s.replace(ALIAS_RE, r => aliases[layer][r as '~'] || r) + s.replace(ALIAS_RE, r => aliases[layer]?.[r as '~'] || r) if (s.hasChanged()) { return { diff --git a/packages/nuxt/src/core/plugins/plugin-metadata.ts b/packages/nuxt/src/core/plugins/plugin-metadata.ts index b59e2fa36d..db6fad7b54 100644 --- a/packages/nuxt/src/core/plugins/plugin-metadata.ts +++ b/packages/nuxt/src/core/plugins/plugin-metadata.ts @@ -70,7 +70,7 @@ export async function extractMetadata (code: string, loader = 'ts' as 'ts' | 'ts } const plugin = node.arguments[0] - if (plugin.type === 'ObjectExpression') { + if (plugin?.type === 'ObjectExpression') { meta = defu(extractMetaFromObject(plugin.properties), meta) } @@ -122,7 +122,7 @@ export const RemovePluginMetadataPlugin = (nuxt: Nuxt) => createUnplugin(() => { name: 'nuxt:remove-plugin-metadata', transform (code, id) { id = normalize(id) - const plugin = nuxt.apps.default.plugins.find(p => p.src === id) + const plugin = nuxt.apps.default?.plugins.find(p => p.src === id) if (!plugin) { return } const s = new MagicString(code) @@ -146,7 +146,7 @@ export const RemovePluginMetadataPlugin = (nuxt: Nuxt) => createUnplugin(() => { ecmaVersion: 'latest', }) as Node, { enter (_node) { - if (_node.type === 'ImportSpecifier' && (_node.imported.name === 'defineNuxtPlugin' || _node.imported.name === 'definePayloadPlugin')) { + if (_node.type === 'ImportSpecifier' && _node.imported.type === 'Identifier' && (_node.imported.name === 'defineNuxtPlugin' || _node.imported.name === 'definePayloadPlugin')) { wrapperNames.add(_node.local.name) } if (_node.type !== 'CallExpression' || (_node as CallExpression).callee.type !== 'Identifier') { return } diff --git a/packages/nuxt/src/core/plugins/prehydrate.ts b/packages/nuxt/src/core/plugins/prehydrate.ts index e47fa3883e..c91e3cb5f7 100644 --- a/packages/nuxt/src/core/plugins/prehydrate.ts +++ b/packages/nuxt/src/core/plugins/prehydrate.ts @@ -32,6 +32,7 @@ export function prehydrateTransformPlugin (nuxt: Nuxt) { const node = _node as SimpleCallExpression & { start: number, end: number } const name = 'name' in node.callee && node.callee.name if (name === 'onPrehydrate') { + if (!node.arguments[0]) { return } if (node.arguments[0].type !== 'ArrowFunctionExpression' && node.arguments[0].type !== 'FunctionExpression') { return } const needsAttr = node.arguments[0].params.length > 0 diff --git a/packages/nuxt/src/core/plugins/resolve-deep-imports.ts b/packages/nuxt/src/core/plugins/resolve-deep-imports.ts index fee568d654..75d67c3784 100644 --- a/packages/nuxt/src/core/plugins/resolve-deep-imports.ts +++ b/packages/nuxt/src/core/plugins/resolve-deep-imports.ts @@ -16,7 +16,7 @@ export function resolveDeepImportsPlugin (nuxt: Nuxt): Plugin { conditions = config.mode === 'test' ? [...config.resolve.conditions, 'import', 'require'] : config.resolve.conditions }, async resolveId (id, importer) { - if (!importer || isAbsolute(id) || (!isAbsolute(importer) && !importer.startsWith('virtual:')) || exclude.some(e => id.startsWith(e))) { + if (!importer || isAbsolute(id) || (!isAbsolute(importer) && !importer.startsWith('virtual:') && !importer.startsWith('\0virtual:')) || exclude.some(e => id.startsWith(e))) { return } diff --git a/packages/nuxt/src/core/plugins/tree-shake.ts b/packages/nuxt/src/core/plugins/tree-shake.ts index 950ec8edbc..aed3fad9e2 100644 --- a/packages/nuxt/src/core/plugins/tree-shake.ts +++ b/packages/nuxt/src/core/plugins/tree-shake.ts @@ -5,12 +5,12 @@ import { isJS, isVue } from '../utils' type ImportPath = string -export interface TreeShakeComposablesPluginOptions { +interface TreeShakeComposablesPluginOptions { sourcemap?: boolean composables: Record } -export const TreeShakeComposablesPlugin = createUnplugin((options: TreeShakeComposablesPluginOptions) => { +export const TreeShakeComposablesPlugin = (options: TreeShakeComposablesPluginOptions) => createUnplugin(() => { /** * @todo Use the options import-path to tree-shake composables in a safer way. */ diff --git a/packages/nuxt/src/core/plugins/unctx.ts b/packages/nuxt/src/core/plugins/unctx.ts index f935adc112..efaf9fde5a 100644 --- a/packages/nuxt/src/core/plugins/unctx.ts +++ b/packages/nuxt/src/core/plugins/unctx.ts @@ -6,12 +6,12 @@ import { isJS, isVue } from '../utils' const TRANSFORM_MARKER = '/* _processed_nuxt_unctx_transform */\n' -export interface UnctxTransformPluginOptions { +interface UnctxTransformPluginOptions { sourcemap?: boolean transformerOptions: TransformerOptions } -export const UnctxTransformPlugin = createUnplugin((options: UnctxTransformPluginOptions) => { +export const UnctxTransformPlugin = (options: UnctxTransformPluginOptions) => createUnplugin(() => { const transformer = createTransformer(options.transformerOptions) return { name: 'unctx:transform', diff --git a/packages/nuxt/src/core/plugins/virtual.ts b/packages/nuxt/src/core/plugins/virtual.ts new file mode 100644 index 0000000000..a0c6f58d1f --- /dev/null +++ b/packages/nuxt/src/core/plugins/virtual.ts @@ -0,0 +1,67 @@ +import { resolveAlias } from '@nuxt/kit' +import type { Nuxt } from '@nuxt/schema' +import { dirname, isAbsolute, resolve } from 'pathe' +import { createUnplugin } from 'unplugin' + +const PREFIX = '\0virtual:nuxt:' + +interface VirtualFSPluginOptions { + mode: 'client' | 'server' + alias?: Record +} + +export const VirtualFSPlugin = (nuxt: Nuxt, options: VirtualFSPluginOptions) => createUnplugin(() => { + const extensions = ['', ...nuxt.options.extensions] + const alias = { ...nuxt.options.alias, ...options.alias } + + const resolveWithExt = (id: string) => { + for (const suffix of ['', '.' + options.mode]) { + for (const ext of extensions) { + const rId = id + suffix + ext + if (rId in nuxt.vfs) { + return rId + } + } + } + } + + return { + name: 'nuxt:virtual', + resolveId (id, importer) { + id = resolveAlias(id, alias) + + if (process.platform === 'win32' && isAbsolute(id)) { + // Add back C: prefix on Windows + id = resolve(id) + } + + const resolvedId = resolveWithExt(id) + if (resolvedId) { + return PREFIX + resolvedId + } + + if (importer && /^\.{1,2}[\\/]/.test(id)) { + const path = resolve(dirname(withoutPrefix(importer)), id) + const resolved = resolveWithExt(path) + if (resolved) { + return PREFIX + resolved + } + } + }, + + loadInclude (id) { + return id.startsWith(PREFIX) && withoutPrefix(id) in nuxt.vfs + }, + + load (id) { + return { + code: nuxt.vfs[withoutPrefix(id)] || '', + map: null, + } + }, + } +}) + +function withoutPrefix (id: string) { + return id.startsWith(PREFIX) ? id.slice(PREFIX.length) : id +} diff --git a/packages/nuxt/src/core/runtime/nitro/renderer.ts b/packages/nuxt/src/core/runtime/nitro/renderer.ts index 000e2facc4..4a7037ae44 100644 --- a/packages/nuxt/src/core/runtime/nitro/renderer.ts +++ b/packages/nuxt/src/core/runtime/nitro/renderer.ts @@ -325,7 +325,9 @@ export default defineRenderHandler(async (event): Promise | string[]): Promise const styleMap = await getSSRStyles() const inlinedStyles = new Set() for (const mod of usedModules) { - if (mod in styleMap) { + if (mod in styleMap && styleMap[mod]) { for (const style of await styleMap[mod]()) { inlinedStyles.add(style) } @@ -650,7 +651,7 @@ function splitPayload (ssrContext: NuxtSSRContext) { */ function getServerComponentHTML (body: string): string { const match = body.match(ROOT_NODE_REGEX) - return match ? match[1] : body[0] + return match?.[1] || body } const SSR_SLOT_TELEPORT_MARKER = /^uid=([^;]*);slot=(.*)$/ @@ -660,10 +661,10 @@ const SSR_CLIENT_SLOT_MARKER = /^island-slot=[^;]*;(.*)$/ function getSlotIslandResponse (ssrContext: NuxtSSRContext): NuxtIslandResponse['slots'] { if (!ssrContext.islandContext || !Object.keys(ssrContext.islandContext.slots).length) { return undefined } const response: NuxtIslandResponse['slots'] = {} - for (const slot in ssrContext.islandContext.slots) { - response[slot] = { - ...ssrContext.islandContext.slots[slot], - fallback: ssrContext.teleports?.[`island-fallback=${slot}`], + for (const [name, slot] of Object.entries(ssrContext.islandContext.slots)) { + response[name] = { + ...slot, + fallback: ssrContext.teleports?.[`island-fallback=${name}`], } } return response @@ -673,11 +674,11 @@ function getClientIslandResponse (ssrContext: NuxtSSRContext): NuxtIslandRespons if (!ssrContext.islandContext || !Object.keys(ssrContext.islandContext.components).length) { return undefined } const response: NuxtIslandResponse['components'] = {} - for (const clientUid in ssrContext.islandContext.components) { + for (const [clientUid, component] of Object.entries(ssrContext.islandContext.components)) { // remove teleport anchor to avoid hydration issues - const html = ssrContext.teleports?.[clientUid].replaceAll('', '') || '' + const html = ssrContext.teleports?.[clientUid]?.replaceAll('', '') || '' response[clientUid] = { - ...ssrContext.islandContext.components[clientUid], + ...component, html, slots: getComponentSlotTeleport(ssrContext.teleports ?? {}), } diff --git a/packages/nuxt/src/core/schema.ts b/packages/nuxt/src/core/schema.ts index f93030f9d0..a2bf41d7dd 100644 --- a/packages/nuxt/src/core/schema.ts +++ b/packages/nuxt/src/core/schema.ts @@ -23,7 +23,6 @@ export default defineNuxtModule({ // Initialize untyped/jiti loader const _resolveSchema = createJiti(fileURLToPath(import.meta.url), { - interopDefault: true, cache: false, transformOptions: { babel: { @@ -97,7 +96,7 @@ export default defineNuxtModule({ let loadedConfig: SchemaDefinition try { // TODO: fix type for second argument of `import` - loadedConfig = await _resolveSchema.import(filePath, {}) as SchemaDefinition + loadedConfig = await _resolveSchema.import(filePath, { default: true }) as SchemaDefinition } catch (err) { logger.warn( 'Unable to load schema from', diff --git a/packages/nuxt/src/core/templates.ts b/packages/nuxt/src/core/templates.ts index 8aef343fe9..9e9566c41d 100644 --- a/packages/nuxt/src/core/templates.ts +++ b/packages/nuxt/src/core/templates.ts @@ -8,6 +8,7 @@ import { hash } from 'ohash' import { camelCase } from 'scule' import { filename } from 'pathe/utils' import type { NuxtTemplate } from 'nuxt/schema' +import type { Nitro } from 'nitro/types' import { annotatePlugins, checkForCircularDependencies } from './app' @@ -57,7 +58,7 @@ export const cssTemplate: NuxtTemplate = { } export const clientPluginTemplate: NuxtTemplate = { - filename: 'plugins/client.mjs', + filename: 'plugins.client.mjs', async getContents (ctx) { const clientPlugins = await annotatePlugins(ctx.nuxt, ctx.app.plugins.filter(p => !p.mode || p.mode !== 'server')) checkForCircularDependencies(clientPlugins) @@ -77,7 +78,7 @@ export const clientPluginTemplate: NuxtTemplate = { } export const serverPluginTemplate: NuxtTemplate = { - filename: 'plugins/server.mjs', + filename: 'plugins.server.mjs', async getContents (ctx) { const serverPlugins = await annotatePlugins(ctx.nuxt, ctx.app.plugins.filter(p => !p.mode || p.mode !== 'client')) checkForCircularDependencies(serverPlugins) @@ -516,6 +517,7 @@ export const nuxtConfigTemplate: NuxtTemplate = { `export const outdatedBuildInterval = ${ctx.nuxt.options.experimental.checkOutdatedBuildInterval}`, `export const multiApp = ${!!ctx.nuxt.options.future.multiApp}`, `export const chunkErrorEvent = ${ctx.nuxt.options.experimental.emitRouteChunkError ? ctx.nuxt.options.builder === '@nuxt/vite-builder' ? '"vite:preloadError"' : '"nuxt:preloadError"' : 'false'}`, + `export const crawlLinks = ${!!((ctx.nuxt as any)._nitro as Nitro).options.prerender.crawlLinks}`, ].join('\n\n') }, } diff --git a/packages/nuxt/src/core/utils/names.ts b/packages/nuxt/src/core/utils/names.ts index 3397cc99e7..df6732c96f 100644 --- a/packages/nuxt/src/core/utils/names.ts +++ b/packages/nuxt/src/core/utils/names.ts @@ -28,11 +28,12 @@ export function resolveComponentNameSegments (fileName: string, prefixParts: str let index = prefixParts.length - 1 const matchedSuffix: string[] = [] while (index >= 0) { - matchedSuffix.unshift(...splitByCase(prefixParts[index]).map(p => p.toLowerCase())) + const prefixPart = prefixParts[index]! + matchedSuffix.unshift(...splitByCase(prefixPart).map(p => p.toLowerCase())) const matchedSuffixContent = matchedSuffix.join('/') if ((fileNamePartsContent === matchedSuffixContent || fileNamePartsContent.startsWith(matchedSuffixContent + '/')) || // e.g Item/Item/Item.vue -> Item - (prefixParts[index].toLowerCase() === fileNamePartsContent && + (prefixPart.toLowerCase() === fileNamePartsContent && prefixParts[index + 1] && prefixParts[index] === prefixParts[index + 1])) { componentNameParts.length = index diff --git a/packages/nuxt/src/head/module.ts b/packages/nuxt/src/head/module.ts index 520091428b..d8b4d74a01 100644 --- a/packages/nuxt/src/head/module.ts +++ b/packages/nuxt/src/head/module.ts @@ -76,8 +76,8 @@ export default import.meta.server ? [CapoPlugin({ track: true })] : [];` // template is only exposed in nuxt context, expose in nitro context as well nuxt.hooks.hook('nitro:config', (config) => { - config.virtual!['#internal/unhead-plugins.mjs'] = () => nuxt.vfs['#build/unhead-plugins'] - config.virtual!['#internal/unhead.config.mjs'] = () => nuxt.vfs['#build/unhead.config'] + config.virtual!['#internal/unhead-plugins.mjs'] = () => nuxt.vfs['#build/unhead-plugins.mjs'] + config.virtual!['#internal/unhead.config.mjs'] = () => nuxt.vfs['#build/unhead.config.mjs'] }) // Add library-specific plugin diff --git a/packages/nuxt/src/head/runtime/components.ts b/packages/nuxt/src/head/runtime/components.ts index 7c3f4b8140..5913471dde 100644 --- a/packages/nuxt/src/head/runtime/components.ts +++ b/packages/nuxt/src/head/runtime/components.ts @@ -160,7 +160,7 @@ export const Title = defineComponent({ if (import.meta.dev) { const defaultSlot = slots.default?.() - if (defaultSlot && (defaultSlot.length > 1 || typeof defaultSlot[0].children !== 'string')) { + if (defaultSlot && (defaultSlot.length > 1 || (defaultSlot[0] && typeof defaultSlot[0].children !== 'string'))) { console.error(' can take only one string in its default slot.') } diff --git a/packages/nuxt/src/imports/module.ts b/packages/nuxt/src/imports/module.ts index acf7d5f87e..af728fb6db 100644 --- a/packages/nuxt/src/imports/module.ts +++ b/packages/nuxt/src/imports/module.ts @@ -166,8 +166,9 @@ function addDeclarationTemplates (ctx: Unimport, options: Partial<ImportsOptions async function cacheImportPaths (imports: Import[]) { const importSource = Array.from(new Set(imports.map(i => i.from))) + // skip relative import paths for node_modules that are explicitly installed await Promise.all(importSource.map(async (from) => { - if (resolvedImportPathMap.has(from)) { + if (resolvedImportPathMap.has(from) || nuxt._dependencies?.has(from)) { return } let path = resolveAlias(from) @@ -176,6 +177,8 @@ function addDeclarationTemplates (ctx: Unimport, options: Partial<ImportsOptions if (!r) { return r } const { dir, name } = parseNodeModulePath(r) + if (name && nuxt._dependencies?.has(name)) { return from } + if (!dir || !name) { return r } const subpath = await lookupNodeModuleSubpath(r) return join(dir, name, subpath || '') diff --git a/packages/nuxt/src/imports/presets.ts b/packages/nuxt/src/imports/presets.ts index 913448cc86..7934aa2ee2 100644 --- a/packages/nuxt/src/imports/presets.ts +++ b/packages/nuxt/src/imports/presets.ts @@ -66,7 +66,7 @@ const granularAppPresets: InlinePreset[] = [ from: '#app/composables/cookie', }, { - imports: ['onPrehydrate', 'prerenderRoutes', 'useRequestHeader', 'useRequestHeaders', 'useRequestEvent', 'useRequestFetch', 'setResponseStatus'], + imports: ['onPrehydrate', 'prerenderRoutes', 'useRequestHeader', 'useRequestHeaders', 'useResponseHeader', 'useRequestEvent', 'useRequestFetch', 'setResponseStatus'], from: '#app/composables/ssr', }, { diff --git a/packages/nuxt/src/pages/module.ts b/packages/nuxt/src/pages/module.ts index 5e79e31746..cce4c8681f 100644 --- a/packages/nuxt/src/pages/module.ts +++ b/packages/nuxt/src/pages/module.ts @@ -1,6 +1,6 @@ import { existsSync, readdirSync } from 'node:fs' import { mkdir, readFile } from 'node:fs/promises' -import { addBuildPlugin, addComponent, addPlugin, addTemplate, addTypeTemplate, addVitePlugin, addWebpackPlugin, defineNuxtModule, findPath, logger, resolvePath, updateTemplates, useNitro } from '@nuxt/kit' +import { addBuildPlugin, addComponent, addPlugin, addTemplate, addTypeTemplate, defineNuxtModule, findPath, logger, resolvePath, updateTemplates, useNitro } from '@nuxt/kit' import { dirname, join, relative, resolve } from 'pathe' import { genImport, genObjectFromRawEntries, genString } from 'knitwork' import { joinURL } from 'ufo' @@ -8,6 +8,7 @@ import type { Nuxt, NuxtApp, NuxtPage } from 'nuxt/schema' import { createRoutesContext } from 'unplugin-vue-router' import { resolveOptions } from 'unplugin-vue-router/options' import type { EditableTreeNode, Options as TypedRouterOptions } from 'unplugin-vue-router' +import { createRouter as createRadixRouter, toRouteMatcher } from 'radix3' import type { NitroRouteConfig } from 'nitro/types' import { defu } from 'defu' @@ -15,7 +16,6 @@ import { distDir } from '../dirs' import { resolveTypePath } from '../core/utils/types' import { normalizeRoutes, resolvePagesRoutes, resolveRoutePaths } from './utils' import { extractRouteRules, getMappedPages } from './route-rules' -import type { PageMetaPluginOptions } from './plugins/page-meta' import { PageMetaPlugin } from './plugins/page-meta' import { RouteInjectionPlugin } from './plugins/route-injection' @@ -52,7 +52,7 @@ export default defineNuxtModule({ } // Add default options at beginning - context.files.unshift({ path: resolve(runtimeDir, 'router.options'), optional: true }) + context.files.unshift({ path: await findPath(resolve(runtimeDir, 'router.options')) || resolve(runtimeDir, 'router.options'), optional: true }) await nuxt.callHook('pages:routerOptions', context) return context.files @@ -247,7 +247,7 @@ export default defineNuxtModule({ ] }) - function isPage (file: string, pages = nuxt.apps.default.pages): boolean { + function isPage (file: string, pages = nuxt.apps.default?.pages): boolean { if (!pages) { return false } return pages.some(page => page.file === file) || pages.some(page => page.children && isPage(file, page.children)) } @@ -278,7 +278,7 @@ export default defineNuxtModule({ nuxt.hook('app:resolve', (app) => { const nitro = useNitro() - if (nitro.options.prerender.crawlLinks) { + if (nitro.options.prerender.crawlLinks || Object.values(nitro.options.routeRules).some(rule => rule.prerender)) { app.plugins.push({ src: resolve(runtimeDir, 'plugins/prerender.server'), mode: 'server', @@ -316,7 +316,20 @@ export default defineNuxtModule({ }) nuxt.hook('nitro:build:before', (nitro) => { - if (nuxt.options.dev || !nitro.options.static || nuxt.options.router.options.hashMode || !nitro.options.prerender.crawlLinks) { return } + if (nuxt.options.dev || nuxt.options.router.options.hashMode) { return } + + // Inject page patterns that explicitly match `prerender: true` route rule + if (!nitro.options.static && !nitro.options.prerender.crawlLinks) { + const routeRulesMatcher = toRouteMatcher(createRadixRouter({ routes: nitro.options.routeRules })) + for (const route of prerenderRoutes) { + const rules = defu({} as Record<string, any>, ...routeRulesMatcher.matchAll(route).reverse()) + if (rules.prerender) { + nitro.options.prerender.routes.push(route) + } + } + } + + if (!nitro.options.static || !nitro.options.prerender.crawlLinks) { return } // Only hint the first route when `ssr: true` and no routes are provided // as the rest will be injected at runtime when this is prerendered @@ -359,7 +372,7 @@ export default defineNuxtModule({ const updatePage = async function updatePage (path: string) { const glob = pageToGlobMap[path] - const code = path in nuxt.vfs ? nuxt.vfs[path] : await readFile(path!, 'utf-8') + const code = path in nuxt.vfs ? nuxt.vfs[path]! : await readFile(path!, 'utf-8') try { const extractedRule = await extractRouteRules(code) if (extractedRule) { @@ -401,15 +414,24 @@ export default defineNuxtModule({ }) } + const componentStubPath = await resolvePath(resolve(runtimeDir, 'component-stub')) + if (nuxt.options.test && nuxt.options.dev) { + // add component testing route so 404 won't be triggered + nuxt.hook('pages:extend', (routes) => { + routes.push({ + _sync: true, + path: '/__nuxt_component_test__/:pathMatch(.*)', + file: componentStubPath, + }) + }) + } if (nuxt.options.experimental.appManifest) { - const componentStubPath = await resolvePath(resolve(runtimeDir, 'component-stub')) // Add all redirect paths as valid routes to router; we will handle these in a client-side middleware // when the app manifest is enabled. nuxt.hook('pages:extend', (routes) => { const nitro = useNitro() let resolvedRoutes: string[] - for (const path in nitro.options.routeRules) { - const rule = nitro.options.routeRules[path] + for (const [path, rule] of Object.entries(nitro.options.routeRules)) { if (!rule.redirect) { continue } resolvedRoutes ||= routes.flatMap(route => resolveRoutePaths(route)) // skip if there's already a route matching this path @@ -424,13 +446,11 @@ export default defineNuxtModule({ } // Extract macros from pages - const pageMetaOptions: PageMetaPluginOptions = { - dev: nuxt.options.dev, - sourcemap: !!nuxt.options.sourcemap.server || !!nuxt.options.sourcemap.client, - } nuxt.hook('modules:done', () => { - addVitePlugin(() => PageMetaPlugin.vite(pageMetaOptions)) - addWebpackPlugin(() => PageMetaPlugin.webpack(pageMetaOptions)) + addBuildPlugin(PageMetaPlugin({ + dev: nuxt.options.dev, + sourcemap: !!nuxt.options.sourcemap.server || !!nuxt.options.sourcemap.client, + })) }) // Add prefetching support for middleware & layouts @@ -455,24 +475,31 @@ export default defineNuxtModule({ if (nuxt.options.dev) { return } const sourceFiles = nuxt.apps.default?.pages?.length ? getSources(nuxt.apps.default.pages) : [] - for (const key in manifest) { - if (manifest[key].src && Object.values(nuxt.apps).some(app => app.pages?.some(page => page.mode === 'server' && page.file === join(nuxt.options.srcDir, manifest[key].src!)))) { + for (const [key, chunk] of Object.entries(manifest)) { + if (chunk.src && Object.values(nuxt.apps).some(app => app.pages?.some(page => page.mode === 'server' && page.file === join(nuxt.options.srcDir, chunk.src!)))) { delete manifest[key] continue } - if (manifest[key].isEntry) { - manifest[key].dynamicImports = - manifest[key].dynamicImports?.filter(i => !sourceFiles.includes(i)) + if (chunk.isEntry) { + chunk.dynamicImports = + chunk.dynamicImports?.filter(i => !sourceFiles.includes(i)) } } }) + const serverComponentRuntime = await findPath(join(distDir, 'components/runtime/server-component')) ?? join(distDir, 'components/runtime/server-component') + const clientComponentRuntime = await findPath(join(distDir, 'components/runtime/client-component')) ?? join(distDir, 'components/runtime/client-component') + // Add routes template addTemplate({ filename: 'routes.mjs', getContents ({ app }) { if (!app.pages) { return 'export default []' } - const { routes, imports } = normalizeRoutes(app.pages, new Set(), nuxt.options.experimental.scanPageMeta) + const { routes, imports } = normalizeRoutes(app.pages, new Set(), { + serverComponentRuntime, + clientComponentRuntime, + overrideMeta: nuxt.options.experimental.scanPageMeta, + }) return [...imports, `export default ${routes}`].join('\n') }, }) diff --git a/packages/nuxt/src/pages/plugins/page-meta.ts b/packages/nuxt/src/pages/plugins/page-meta.ts index 7597aef8cd..f6645a5653 100644 --- a/packages/nuxt/src/pages/plugins/page-meta.ts +++ b/packages/nuxt/src/pages/plugins/page-meta.ts @@ -10,7 +10,7 @@ import MagicString from 'magic-string' import { isAbsolute } from 'pathe' import { logger } from '@nuxt/kit' -export interface PageMetaPluginOptions { +interface PageMetaPluginOptions { dev?: boolean sourcemap?: boolean } @@ -36,7 +36,7 @@ if (import.meta.webpackHot) { }) }` -export const PageMetaPlugin = createUnplugin((options: PageMetaPluginOptions) => { +export const PageMetaPlugin = (options: PageMetaPluginOptions) => createUnplugin(() => { return { name: 'nuxt:pages-macros-transform', enforce: 'post', diff --git a/packages/nuxt/src/pages/route-rules.ts b/packages/nuxt/src/pages/route-rules.ts index 6f025f678e..1b76a75b52 100644 --- a/packages/nuxt/src/pages/route-rules.ts +++ b/packages/nuxt/src/pages/route-rules.ts @@ -14,7 +14,7 @@ const ruleCache: Record<string, NitroRouteConfig | null> = {} export async function extractRouteRules (code: string): Promise<NitroRouteConfig | null> { if (code in ruleCache) { - return ruleCache[code] + return ruleCache[code] || null } if (!ROUTE_RULE_RE.test(code)) { return null } diff --git a/packages/nuxt/src/pages/runtime/plugins/prerender.server.ts b/packages/nuxt/src/pages/runtime/plugins/prerender.server.ts index 9a191f9dce..3b880b1223 100644 --- a/packages/nuxt/src/pages/runtime/plugins/prerender.server.ts +++ b/packages/nuxt/src/pages/runtime/plugins/prerender.server.ts @@ -1,20 +1,31 @@ import type { RouteRecordRaw } from 'vue-router' import { joinURL } from 'ufo' +import { createRouter as createRadixRouter, toRouteMatcher } from 'radix3' +import defu from 'defu' -import { defineNuxtPlugin } from '#app/nuxt' +import { defineNuxtPlugin, useRuntimeConfig } from '#app/nuxt' import { prerenderRoutes } from '#app/composables/ssr' // @ts-expect-error virtual file import _routes from '#build/routes' import routerOptions from '#build/router.options' +// @ts-expect-error virtual file +import { crawlLinks } from '#build/nuxt.config.mjs' let routes: string[] +let _routeRulesMatcher: undefined | ReturnType<typeof toRouteMatcher> = undefined + export default defineNuxtPlugin(async () => { if (!import.meta.server || !import.meta.prerender || routerOptions.hashMode) { return } if (routes && !routes.length) { return } + const routeRules = useRuntimeConfig().nitro!.routeRules + if (!crawlLinks && routeRules && Object.values(routeRules).some(r => r.prerender)) { + _routeRulesMatcher = toRouteMatcher(createRadixRouter({ routes: routeRules })) + } + routes ||= Array.from(processRoutes(await routerOptions.routes?.(_routes) ?? _routes)) const batch = routes.splice(0, 10) prerenderRoutes(batch) @@ -24,10 +35,14 @@ export default defineNuxtPlugin(async () => { const OPTIONAL_PARAM_RE = /^\/?:.*(?:\?|\(\.\*\)\*)$/ +function shouldPrerender (path: string) { + return !_routeRulesMatcher || defu({} as Record<string, any>, ..._routeRulesMatcher.matchAll(path).reverse()).prerender +} + function processRoutes (routes: RouteRecordRaw[], currentPath = '/', routesToPrerender = new Set<string>()) { for (const route of routes) { // Add root of optional dynamic paths and catchalls - if (OPTIONAL_PARAM_RE.test(route.path) && !route.children?.length) { + if (OPTIONAL_PARAM_RE.test(route.path) && !route.children?.length && shouldPrerender(currentPath)) { routesToPrerender.add(currentPath) } // Skip dynamic paths @@ -35,7 +50,9 @@ function processRoutes (routes: RouteRecordRaw[], currentPath = '/', routesToPre continue } const fullPath = joinURL(currentPath, route.path) - routesToPrerender.add(fullPath) + if (shouldPrerender(fullPath)) { + routesToPrerender.add(fullPath) + } if (route.children) { processRoutes(route.children, fullPath, routesToPrerender) } diff --git a/packages/nuxt/src/pages/runtime/plugins/router.ts b/packages/nuxt/src/pages/runtime/plugins/router.ts index 7f2e5faca6..bb41746480 100644 --- a/packages/nuxt/src/pages/runtime/plugins/router.ts +++ b/packages/nuxt/src/pages/runtime/plugins/router.ts @@ -148,16 +148,8 @@ const plugin: Plugin<{ router: Router }> = defineNuxtPlugin({ if (import.meta.server && failure?.type === 4 /* ErrorTypes.NAVIGATION_ABORTED */) { return } - if (to.matched.length === 0) { - await nuxtApp.runWithContext(() => showError(createError({ - statusCode: 404, - fatal: false, - statusMessage: `Page not found: ${to.fullPath}`, - data: { - path: to.fullPath, - }, - }))) - } else if (import.meta.server && to.redirectedFrom && to.fullPath !== initialURL) { + + if (import.meta.server && to.redirectedFrom && to.fullPath !== initialURL) { await nuxtApp.runWithContext(() => navigateTo(to.fullPath || '/')) } }) @@ -252,6 +244,19 @@ const plugin: Plugin<{ router: Router }> = defineNuxtPlugin({ await nuxtApp.callHook('page:loading:end') }) + router.afterEach(async (to, _from) => { + if (to.matched.length === 0) { + await nuxtApp.runWithContext(() => showError(createError({ + statusCode: 404, + fatal: false, + statusMessage: `Page not found: ${to.fullPath}`, + data: { + path: to.fullPath, + }, + }))) + } + }) + nuxtApp.hooks.hookOnce('app:created', async () => { try { // #4920, #4982 diff --git a/packages/nuxt/src/pages/utils.ts b/packages/nuxt/src/pages/utils.ts index b45395bde6..4ccb9540ec 100644 --- a/packages/nuxt/src/pages/utils.ts +++ b/packages/nuxt/src/pages/utils.ts @@ -15,7 +15,6 @@ import type { NuxtPage } from 'nuxt/schema' import { getLoader, uniqueBy } from '../core/utils' import { toArray } from '../utils' -import { distDir } from '../dirs' enum SegmentParserState { initial, @@ -102,7 +101,7 @@ export function generateRoutesFromFiles (files: ScannedFile[], options: Generate // Array where routes should be added, useful when adding child routes let parent = routes - const lastSegment = segments[segments.length - 1] + const lastSegment = segments[segments.length - 1]! if (lastSegment.endsWith('.server')) { segments[segments.length - 1] = lastSegment.replace('.server', '') if (options.shouldUseServerComponents) { @@ -116,7 +115,7 @@ export function generateRoutesFromFiles (files: ScannedFile[], options: Generate for (let i = 0; i < segments.length; i++) { const segment = segments[i] - const tokens = parseSegment(segment) + const tokens = parseSegment(segment!) // Skip group segments if (tokens.every(token => token.type === SegmentTokenType.group)) { @@ -151,7 +150,7 @@ export function generateRoutesFromFiles (files: ScannedFile[], options: Generate export async function augmentPages (routes: NuxtPage[], vfs: Record<string, string>, augmentedPages = new Set<string>()) { for (const route of routes) { if (route.file && !augmentedPages.has(route.file)) { - const fileContent = route.file in vfs ? vfs[route.file] : fs.readFileSync(await resolvePath(route.file), 'utf-8') + const fileContent = route.file in vfs ? vfs[route.file]! : fs.readFileSync(await resolvePath(route.file), 'utf-8') const routeMeta = await getRouteMeta(fileContent, route.file) if (route.meta) { routeMeta.meta = { ...routeMeta.meta, ...route.meta } @@ -174,7 +173,7 @@ export function extractScriptContent (html: string) { for (const match of html.matchAll(SFC_SCRIPT_RE)) { if (match?.groups?.content) { contents.push({ - loader: match.groups.attrs.includes('tsx') ? 'tsx' : 'ts', + loader: match.groups.attrs?.includes('tsx') ? 'tsx' : 'ts', code: match.groups.content.trim(), }) } @@ -196,7 +195,9 @@ export async function getRouteMeta (contents: string, absolutePath: string): Pro delete metaCache[absolutePath] } - if (absolutePath in metaCache) { return metaCache[absolutePath] } + if (absolutePath in metaCache && metaCache[absolutePath]) { + return metaCache[absolutePath] + } const loader = getLoader(absolutePath) const scriptBlocks = !loader ? null : loader === 'vue' ? extractScriptContent(contents) : [{ code: contents, loader }] @@ -403,7 +404,7 @@ function parseSegment (segment: string) { consumeBuffer() } state = SegmentParserState.initial - } else if (PARAM_CHAR_RE.test(c)) { + } else if (c && PARAM_CHAR_RE.test(c)) { buffer += c } else { // console.debug(`[pages]Ignored character "${c}" while building param "${buffer}" from "segment"`) @@ -474,7 +475,12 @@ function serializeRouteValue (value: any, skipSerialisation = false) { type NormalizedRoute = Partial<Record<Exclude<keyof NuxtPage, 'file'>, string>> & { component?: string } type NormalizedRouteKeys = (keyof NormalizedRoute)[] -export function normalizeRoutes (routes: NuxtPage[], metaImports: Set<string> = new Set(), overrideMeta = false): { imports: Set<string>, routes: string } { +interface NormalizeRoutesOptions { + overrideMeta?: boolean + serverComponentRuntime: string + clientComponentRuntime: string +} +export function normalizeRoutes (routes: NuxtPage[], metaImports: Set<string> = new Set(), options: NormalizeRoutesOptions): { imports: Set<string>, routes: string } { return { imports: metaImports, routes: genArrayFromRaw(routes.map((page) => { @@ -504,7 +510,7 @@ export function normalizeRoutes (routes: NuxtPage[], metaImports: Set<string> = } if (page.children?.length) { - route.children = normalizeRoutes(page.children, metaImports, overrideMeta).routes + route.children = normalizeRoutes(page.children, metaImports, options).routes } // Without a file, we can't use `definePageMeta` to extract route-level meta from the file @@ -540,14 +546,14 @@ export function normalizeRoutes (routes: NuxtPage[], metaImports: Set<string> = metaImports.add(` let _createIslandPage async function createIslandPage (name) { - _createIslandPage ||= await import(${JSON.stringify(resolve(distDir, 'components/runtime/server-component'))}).then(r => r.createIslandPage) + _createIslandPage ||= await import(${JSON.stringify(options?.serverComponentRuntime)}).then(r => r.createIslandPage) return _createIslandPage(name) };`) } else if (page.mode === 'client') { metaImports.add(` let _createClientPage async function createClientPage(loader) { - _createClientPage ||= await import(${JSON.stringify(resolve(distDir, 'components/runtime/client-component'))}).then(r => r.createClientPage) + _createClientPage ||= await import(${JSON.stringify(options?.clientComponentRuntime)}).then(r => r.createClientPage) return _createClientPage(loader); }`) } @@ -560,7 +566,7 @@ async function createClientPage(loader) { metaRoute.meta = `{ ...(${metaImportName} || {}), ...${route.meta} }` } - if (overrideMeta) { + if (options?.overrideMeta) { // skip and retain fallback if marked dynamic // set to extracted value or fallback if none extracted for (const key of ['name', 'path'] satisfies NormalizedRouteKeys) { diff --git a/packages/nuxt/test/app.test.ts b/packages/nuxt/test/app.test.ts index faf40e71be..1bdcb5f8aa 100644 --- a/packages/nuxt/test/app.test.ts +++ b/packages/nuxt/test/app.test.ts @@ -297,8 +297,8 @@ async function getResolvedApp (files: Array<string | { name: string, contents: s mw.path = normaliseToRepo(mw.path)! } - for (const layout in app.layouts) { - app.layouts[layout].file = normaliseToRepo(app.layouts[layout].file)! + for (const layout of Object.values(app.layouts)) { + layout.file = normaliseToRepo(layout.file)! } await nuxt.close() diff --git a/packages/nuxt/test/components-transform.test.ts b/packages/nuxt/test/components-transform.test.ts index d61f0bb55c..0792f7902e 100644 --- a/packages/nuxt/test/components-transform.test.ts +++ b/packages/nuxt/test/components-transform.test.ts @@ -4,7 +4,7 @@ import type { Component, Nuxt } from '@nuxt/schema' import { kebabCase } from 'scule' import { normalize } from 'pathe' -import { createTransformPlugin } from '../src/components/transform' +import { TransformPlugin } from '../src/components/plugins/transform' describe('components:transform', () => { it('should transform #components imports', async () => { @@ -92,7 +92,11 @@ function createTransformer (components: Component[], mode: 'client' | 'server' | }, }, } as Nuxt - const plugin = createTransformPlugin(stubNuxt, () => components, mode).vite() + const plugin = TransformPlugin(stubNuxt, { + mode, + getComponents: () => components, + serverComponentRuntime: '<repo>/nuxt/src/components/runtime/server-component', + }).vite() return async (code: string, id: string) => { const result = await (plugin as any).transform!(code, id) diff --git a/packages/nuxt/test/devonly.test.ts b/packages/nuxt/test/devonly.test.ts index cf0b734f92..31a876e84c 100644 --- a/packages/nuxt/test/devonly.test.ts +++ b/packages/nuxt/test/devonly.test.ts @@ -3,7 +3,7 @@ import type { Plugin } from 'vite' import { DevOnlyPlugin } from '../src/core/plugins/dev-only' import { normalizeLineEndings } from './utils' -const pluginVite = DevOnlyPlugin.raw({}, { framework: 'vite' }) as Plugin +const pluginVite = DevOnlyPlugin({}).raw({}, { framework: 'vite' }) as Plugin const viteTransform = async (source: string, id: string) => { // eslint-disable-next-line @typescript-eslint/no-unsafe-function-type diff --git a/packages/nuxt/test/islandTransform.test.ts b/packages/nuxt/test/island-transform.test.ts similarity index 97% rename from packages/nuxt/test/islandTransform.test.ts rename to packages/nuxt/test/island-transform.test.ts index dcf99e663c..3743987565 100644 --- a/packages/nuxt/test/islandTransform.test.ts +++ b/packages/nuxt/test/island-transform.test.ts @@ -2,7 +2,7 @@ import { describe, expect, it, vi } from 'vitest' import type { Plugin } from 'vite' import type { Component } from '@nuxt/schema' import type { UnpluginOptions } from 'unplugin' -import { islandsTransform } from '../src/components/islandsTransform' +import { IslandsTransformPlugin } from '../src/components/plugins/islands-transform' import { normalizeLineEndings } from './utils' const getComponents = () => [{ @@ -18,16 +18,16 @@ const getComponents = () => [{ preload: false, }] as Component[] -const pluginWebpack = islandsTransform.raw({ +const pluginWebpack = IslandsTransformPlugin({ getComponents, selectiveClient: true, -}, { framework: 'webpack', webpack: { compiler: {} as any } }) +}).raw({}, { framework: 'webpack', webpack: { compiler: {} as any } }) const viteTransform = async (source: string, id: string, selectiveClient = false) => { - const vitePlugin = islandsTransform.raw({ + const vitePlugin = IslandsTransformPlugin({ getComponents, selectiveClient, - }, { framework: 'vite' }) as Plugin + }).raw({}, { framework: 'vite' }) as Plugin // eslint-disable-next-line @typescript-eslint/no-unsafe-function-type const result = await (vitePlugin.transform! as Function)(source, id) @@ -454,7 +454,7 @@ withDefaults(defineProps<{ things?: any[]; somethingElse?: string }>(), { " `) - expect(spyOnWarn).toHaveBeenCalledWith('nuxt-client attribute and client components within islands is only supported with Vite. file: hello.server.vue') + expect(spyOnWarn).toHaveBeenCalledWith('The `nuxt-client` attribute and client components within islands are only supported with Vite. file: hello.server.vue') }) }) }) diff --git a/packages/nuxt/test/page-metadata.test.ts b/packages/nuxt/test/page-metadata.test.ts index 9e57ab407f..ed24e11e7c 100644 --- a/packages/nuxt/test/page-metadata.test.ts +++ b/packages/nuxt/test/page-metadata.test.ts @@ -168,7 +168,11 @@ describe('normalizeRoutes', () => { page.meta.layout = 'test' page.meta.foo = 'bar' - const { routes, imports } = normalizeRoutes([page], new Set(), true) + const { routes, imports } = normalizeRoutes([page], new Set(), { + clientComponentRuntime: '<client-component-runtime>', + serverComponentRuntime: '<server-component-runtime>', + overrideMeta: true, + }) expect({ routes, imports }).toMatchInlineSnapshot(` { "imports": Set { @@ -193,7 +197,11 @@ describe('normalizeRoutes', () => { page.meta.layout = 'test' page.meta.foo = 'bar' - const { routes, imports } = normalizeRoutes([page], new Set()) + const { routes, imports } = normalizeRoutes([page], new Set(), { + clientComponentRuntime: '<client-component-runtime>', + serverComponentRuntime: '<server-component-runtime>', + overrideMeta: false, + }) expect({ routes, imports }).toMatchInlineSnapshot(` { "imports": Set { diff --git a/packages/nuxt/test/pages.test.ts b/packages/nuxt/test/pages.test.ts index 3b307387be..a7fe4b2751 100644 --- a/packages/nuxt/test/pages.test.ts +++ b/packages/nuxt/test/pages.test.ts @@ -653,7 +653,7 @@ describe('pages:generateRoutesFromFiles', () => { }))).map((route, index) => { return { ...route, - meta: test.files![index].meta, + meta: test.files![index]!.meta, } }) @@ -667,8 +667,18 @@ describe('pages:generateRoutesFromFiles', () => { if (result) { expect(result).toEqual(test.output) - normalizedResults[test.description] = normalizeRoutes(result, new Set()).routes - normalizedOverrideMetaResults[test.description] = normalizeRoutes(result, new Set(), true).routes + + normalizedResults[test.description] = normalizeRoutes(result, new Set(), { + clientComponentRuntime: '<client-component-runtime>', + serverComponentRuntime: '<server-component-runtime>', + overrideMeta: false, + }).routes + + normalizedOverrideMetaResults[test.description] = normalizeRoutes(result, new Set(), { + clientComponentRuntime: '<client-component-runtime>', + serverComponentRuntime: '<server-component-runtime>', + overrideMeta: true, + }).routes } }) } diff --git a/packages/nuxt/test/treeshake-client.test.ts b/packages/nuxt/test/treeshake-client.test.ts index 375ceff182..b0afa0cb19 100644 --- a/packages/nuxt/test/treeshake-client.test.ts +++ b/packages/nuxt/test/treeshake-client.test.ts @@ -6,7 +6,7 @@ import type { Plugin } from 'vite' import { Parser } from 'acorn' import type { Options } from '@vitejs/plugin-vue' import _vuePlugin from '@vitejs/plugin-vue' -import { TreeShakeTemplatePlugin } from '../src/components/tree-shake' +import { TreeShakeTemplatePlugin } from '../src/components/plugins/tree-shake' import { fixtureDir, normalizeLineEndings } from './utils' // mock due to differences of results between windows and linux @@ -27,7 +27,7 @@ function vuePlugin (options: Options) { const WithClientOnly = normalizeLineEndings(readFileSync(path.resolve(fixtureDir, './components/client/WithClientOnlySetup.vue')).toString()) -const treeshakeTemplatePlugin = TreeShakeTemplatePlugin.raw({ +const treeshakeTemplatePlugin = TreeShakeTemplatePlugin({ sourcemap: false, getComponents () { return [{ @@ -52,7 +52,7 @@ const treeshakeTemplatePlugin = TreeShakeTemplatePlugin.raw({ mode: 'client', }] }, -}, { framework: 'rollup' }) as Plugin +}).raw({}, { framework: 'rollup' }) as Plugin const treeshake = async (source: string): Promise<string> => { // eslint-disable-next-line @typescript-eslint/no-unsafe-function-type diff --git a/packages/nuxt/test/unctx-transform.test.ts b/packages/nuxt/test/unctx-transform.test.ts index df7c76ec96..42dff085dc 100644 --- a/packages/nuxt/test/unctx-transform.test.ts +++ b/packages/nuxt/test/unctx-transform.test.ts @@ -62,6 +62,6 @@ function transform (code: string, id = 'app.vue') { definePageMeta: ['middleware', 'validate'], }, } - const plugin = UnctxTransformPlugin.raw({ sourcemap: false, transformerOptions }, {} as any) as any + const plugin = UnctxTransformPlugin({ sourcemap: false, transformerOptions }).raw({}, {} as any) as any return plugin.transformInclude(id) ? Promise.resolve(plugin.transform(code)).then((r: any) => r?.code.replace(/^ {6}/gm, '').trim()) : null } diff --git a/packages/rspack/build.config.ts b/packages/rspack/build.config.ts new file mode 100644 index 0000000000..c11f11a10c --- /dev/null +++ b/packages/rspack/build.config.ts @@ -0,0 +1,18 @@ +import { defineBuildConfig } from 'unbuild' +import config from '../webpack/build.config' + +export default defineBuildConfig({ + ...config[0], + externals: [ + '@rspack/core', + '#builder', + '@nuxt/schema', + ], + entries: [ + { + input: '../webpack/src/index', + name: 'index', + declaration: true, + }, + ], +}) diff --git a/packages/rspack/builder.mjs b/packages/rspack/builder.mjs new file mode 100644 index 0000000000..14b2475188 --- /dev/null +++ b/packages/rspack/builder.mjs @@ -0,0 +1,5 @@ +import webpack from '@rspack/core' + +export const builder = 'rspack' +export { webpack } +export const MiniCssExtractPlugin = webpack.CssExtractRspackPlugin diff --git a/packages/rspack/package.json b/packages/rspack/package.json new file mode 100644 index 0000000000..f689e1bbaa --- /dev/null +++ b/packages/rspack/package.json @@ -0,0 +1,94 @@ +{ + "name": "@nuxt/rspack-builder", + "version": "3.12.2", + "repository": { + "type": "git", + "url": "git+https://github.com/nuxt/nuxt.git", + "directory": "packages/rspack" + }, + "description": "rspack bundler for Nuxt", + "homepage": "https://nuxt.com", + "license": "MIT", + "type": "module", + "types": "./dist/index.d.ts", + "imports": { + "#builder": "./builder.mjs" + }, + "exports": { + ".": { + "types": "./dist/index.d.ts", + "import": "./dist/index.mjs" + }, + "./dist/*": "./dist/*" + }, + "files": [ + "dist", + "builder.mjs" + ], + "scripts": { + "prepack": "unbuild" + }, + "dependencies": { + "@nuxt/friendly-errors-webpack-plugin": "^2.6.0", + "@nuxt/kit": "workspace:*", + "@rspack/core": "^1.0.8", + "autoprefixer": "^10.4.20", + "css-loader": "^7.1.2", + "css-minimizer-webpack-plugin": "^7.0.0", + "cssnano": "^7.0.6", + "defu": "^6.1.4", + "esbuild-loader": "^4.2.2", + "escape-string-regexp": "^5.0.0", + "estree-walker": "^3.0.3", + "file-loader": "^6.2.0", + "fork-ts-checker-webpack-plugin": "^9.0.2", + "globby": "^14.0.2", + "h3": "npm:h3-nightly@2.0.0-1718872656.6765a6e", + "hash-sum": "^2.0.0", + "jiti": "^2.3.3", + "knitwork": "^1.1.0", + "lodash-es": "4.17.21", + "magic-string": "^0.30.11", + "memfs": "^4.13.0", + "mlly": "^1.7.2", + "ohash": "^1.1.4", + "pathe": "^1.1.2", + "pify": "^6.1.0", + "postcss": "^8.4.47", + "postcss-import": "^16.1.0", + "postcss-import-resolver": "^2.0.0", + "postcss-loader": "^8.1.1", + "postcss-url": "^10.1.3", + "pug-plain-loader": "^1.1.0", + "std-env": "^3.7.0", + "time-fix-plugin": "^2.0.7", + "ufo": "^1.5.4", + "unenv": "^1.10.0", + "unplugin": "^1.14.1", + "url-loader": "^4.1.1", + "vue-bundle-renderer": "^2.1.1", + "vue-loader": "^17.4.2", + "webpack-bundle-analyzer": "^4.10.2", + "webpack-dev-middleware": "^7.4.2", + "webpack-hot-middleware": "^2.26.1", + "webpack-virtual-modules": "^0.6.2", + "webpackbar": "^6.0.1" + }, + "devDependencies": { + "@nuxt/schema": "workspace:*", + "@types/hash-sum": "1.0.2", + "@types/lodash-es": "4.17.12", + "@types/pify": "5.0.4", + "@types/webpack-bundle-analyzer": "4.7.0", + "@types/webpack-hot-middleware": "2.25.9", + "rollup": "4.24.0", + "unbuild": "3.0.0-rc.11", + "vue": "3.5.11" + }, + "peerDependencies": { + "vue": "^3.3.4" + }, + "engines": { + "node": "^14.18.0 || >=16.10.0" + } +} diff --git a/packages/schema/package.json b/packages/schema/package.json index d0eb0388c3..5da549c4d9 100644 --- a/packages/schema/package.json +++ b/packages/schema/package.json @@ -39,27 +39,27 @@ "@types/file-loader": "5.0.4", "@types/pug": "2.0.10", "@types/sass-loader": "8.0.9", - "@unhead/schema": "1.11.6", - "@vitejs/plugin-vue": "5.1.3", + "@unhead/schema": "1.11.7", + "@vitejs/plugin-vue": "5.1.4", "@vitejs/plugin-vue-jsx": "4.0.1", - "@vue/compiler-core": "3.5.5", - "@vue/compiler-sfc": "3.5.5", + "@vue/compiler-core": "3.5.11", + "@vue/compiler-sfc": "3.5.11", "@vue/language-core": "2.1.6", - "c12": "2.0.0-beta.2", + "c12": "2.0.1", "esbuild-loader": "4.2.2", "h3": "npm:h3-nightly@2.0.0-1718872656.6765a6e", - "ignore": "5.3.2", + "ignore": "6.0.2", "nitro": "npm:nitro-nightly@3.0.0-beta-28665895.e727afda", - "ofetch": "1.3.4", - "unbuild": "3.0.0-rc.7", + "ofetch": "1.4.1", + "unbuild": "3.0.0-rc.11", "unctx": "2.3.1", "unenv": "1.10.0", - "vite": "5.4.5", - "vue": "3.5.5", - "vue-bundle-renderer": "2.1.0", + "vite": "5.4.8", + "vue": "3.5.11", + "vue-bundle-renderer": "2.1.1", "vue-loader": "17.4.2", "vue-router": "4.4.5", - "webpack": "5.94.0", + "webpack": "5.95.0", "webpack-dev-middleware": "7.4.2" }, "dependencies": { @@ -68,13 +68,13 @@ "defu": "^6.1.4", "hookable": "^5.5.3", "pathe": "^1.1.2", - "pkg-types": "^1.2.0", + "pkg-types": "^1.2.1", "scule": "^1.3.0", "std-env": "^3.7.0", "ufo": "^1.5.4", "uncrypto": "^0.1.3", - "unimport": "^3.12.0", - "untyped": "^1.4.2" + "unimport": "^3.13.1", + "untyped": "^1.5.1" }, "engines": { "node": "^14.18.0 || >=16.10.0" diff --git a/packages/schema/src/config/app.ts b/packages/schema/src/config/app.ts index 5b890528b4..9f5d8aa0b5 100644 --- a/packages/schema/src/config/app.ts +++ b/packages/schema/src/config/app.ts @@ -35,6 +35,13 @@ export default defineUntypedSchema({ * @type {boolean} */ propsDestructure: true, + + /** + * It is possible to pass configure the Vue app globally. Only serializable options + * may be set in your `nuxt.config`. All other options should be set at runtime in a Nuxt plugin.. + * @see [Vue app config documentation](https://vuejs.org/api/application.html#app-config) + */ + config: undefined, }, /** diff --git a/packages/schema/src/config/build.ts b/packages/schema/src/config/build.ts index 6527a2aaa3..fbacf2dd79 100644 --- a/packages/schema/src/config/build.ts +++ b/packages/schema/src/config/build.ts @@ -7,14 +7,15 @@ import { consola } from 'consola' export default defineUntypedSchema({ /** * The builder to use for bundling the Vue part of your application. - * @type {'vite' | 'webpack' | { bundle: (nuxt: typeof import('../src/types/nuxt').Nuxt) => Promise<void> }} + * @type {'vite' | 'webpack' | 'rspack' | { bundle: (nuxt: typeof import('../src/types/nuxt').Nuxt) => Promise<void> }} */ builder: { - $resolve: async (val: 'vite' | 'webpack' | { bundle: (nuxt: unknown) => Promise<void> } | undefined = 'vite', get) => { + $resolve: async (val: 'vite' | 'webpack' | 'rspack' | { bundle: (nuxt: unknown) => Promise<void> } | undefined = 'vite', get) => { if (typeof val === 'object') { return val } const map: Record<string, string> = { + rspack: '@nuxt/rspack-builder', vite: '@nuxt/vite-builder', webpack: '@nuxt/webpack-builder', } diff --git a/packages/schema/src/config/common.ts b/packages/schema/src/config/common.ts index 61fcd1f2a5..d77d4e8f59 100644 --- a/packages/schema/src/config/common.ts +++ b/packages/schema/src/config/common.ts @@ -424,7 +424,7 @@ export default defineUntypedSchema({ */ alias: { $resolve: async (val: Record<string, string>, get): Promise<Record<string, string>> => { - const [srcDir, rootDir, assetsDir, publicDir] = await Promise.all([get('srcDir'), get('rootDir'), get('dir.assets'), get('dir.public')]) as [string, string, string, string] + const [srcDir, rootDir, assetsDir, publicDir, buildDir] = await Promise.all([get('srcDir'), get('rootDir'), get('dir.assets'), get('dir.public'), get('buildDir')]) as [string, string, string, string, string] return { '~': srcDir, '@': srcDir, @@ -432,6 +432,8 @@ export default defineUntypedSchema({ '@@': rootDir, [basename(assetsDir)]: resolve(srcDir, assetsDir), [basename(publicDir)]: resolve(srcDir, publicDir), + '#build': buildDir, + '#internal/nuxt/paths': resolve(buildDir, 'paths.mjs'), ...val, } }, diff --git a/packages/schema/src/config/experimental.ts b/packages/schema/src/config/experimental.ts index 8f0249cc3d..711a20b776 100644 --- a/packages/schema/src/config/experimental.ts +++ b/packages/schema/src/config/experimental.ts @@ -389,5 +389,15 @@ export default defineUntypedSchema({ * This only works for source files within `srcDir` and `serverDir` for the Vue/Nitro parts of your app. */ buildCache: false, + + /** + * Ensure that auto-generated Vue component names match the full component name + * you would use to auto-import the component. + */ + normalizeComponentNames: { + $resolve: async (val, get) => { + return val ?? ((await get('future') as Record<string, unknown>).compatibilityVersion === 4) + }, + }, }, }) diff --git a/packages/schema/src/config/typescript.ts b/packages/schema/src/config/typescript.ts index 402cd007fd..742f5a20f9 100644 --- a/packages/schema/src/config/typescript.ts +++ b/packages/schema/src/config/typescript.ts @@ -20,7 +20,7 @@ export default defineUntypedSchema({ * builder environment types (with `false`) to handle this fully yourself, or opt for a 'shared' option. * * The 'shared' option is advised for module authors, who will want to support multiple possible builders. - * @type {'vite' | 'webpack' | 'shared' | false | undefined} + * @type {'vite' | 'webpack' | 'rspack' | 'shared' | false | undefined} */ builder: { $resolve: val => val ?? null, diff --git a/packages/schema/src/index.ts b/packages/schema/src/index.ts index 0eb5c1588f..a682bb2f61 100644 --- a/packages/schema/src/index.ts +++ b/packages/schema/src/index.ts @@ -6,7 +6,7 @@ export type { GenerateAppOptions, HookResult, ImportPresetWithDeprecation, NuxtA export type { ImportsOptions } from './types/imports' export type { AppHeadMetaObject, MetaObject, MetaObjectRaw, HeadAugmentations } from './types/head' export type { ModuleDefinition, ModuleMeta, ModuleOptions, ModuleSetupInstallResult, ModuleSetupReturn, NuxtModule, ResolvedModuleOptions } from './types/module' -export type { Nuxt, NuxtApp, NuxtPlugin, NuxtPluginTemplate, NuxtTemplate, NuxtTypeTemplate, ResolvedNuxtTemplate } from './types/nuxt' +export type { Nuxt, NuxtApp, NuxtPlugin, NuxtPluginTemplate, NuxtTemplate, NuxtTypeTemplate, NuxtServerTemplate, ResolvedNuxtTemplate } from './types/nuxt' export type { RouterConfig, RouterConfigSerializable, RouterOptions } from './types/router' // Schema diff --git a/packages/schema/src/types/compatibility.ts b/packages/schema/src/types/compatibility.ts index 562b187cb0..209b373072 100644 --- a/packages/schema/src/types/compatibility.ts +++ b/packages/schema/src/types/compatibility.ts @@ -26,7 +26,7 @@ export interface NuxtCompatibility { * }) * ``` */ - builder?: Partial<Record<'vite' | 'webpack' | (string & {}), false | string>> + builder?: Partial<Record<'vite' | 'webpack' | 'rspack' | (string & {}), false | string>> } export interface NuxtCompatibilityIssue { diff --git a/packages/schema/src/types/config.ts b/packages/schema/src/types/config.ts index 2e95263395..805564bad6 100644 --- a/packages/schema/src/types/config.ts +++ b/packages/schema/src/types/config.ts @@ -1,4 +1,4 @@ -import type { KeepAliveProps, TransitionProps } from 'vue' +import type { KeepAliveProps, TransitionProps, AppConfig as VueAppConfig } from 'vue' import type { ServerOptions as ViteServerOptions, UserConfig as ViteUserConfig } from 'vite' import type { Options as VuePluginOptions } from '@vitejs/plugin-vue' import type { Options as VueJsxPluginOptions } from '@vitejs/plugin-vue-jsx' @@ -45,7 +45,8 @@ export interface RuntimeConfig extends RuntimeConfigNamespace { } // User configuration in `nuxt.config` file -export interface NuxtConfig extends DeepPartial<Omit<ConfigSchema, 'vite' | 'runtimeConfig'>> { +export interface NuxtConfig extends DeepPartial<Omit<ConfigSchema, 'vue' | 'vite' | 'runtimeConfig' | 'webpack'>> { + vue?: Omit<DeepPartial<ConfigSchema['vue']>, 'config'> & { config?: Partial<Filter<VueAppConfig, string | boolean>> } // Avoid DeepPartial for vite config interface (#4772) vite?: ConfigSchema['vite'] runtimeConfig?: Overrideable<RuntimeConfig> @@ -77,9 +78,10 @@ export interface NuxtBuilder { } // Normalized Nuxt options available as `nuxt.options.*` -export interface NuxtOptions extends Omit<ConfigSchema, 'builder' | 'webpack' | 'postcss'> { +export interface NuxtOptions extends Omit<ConfigSchema, 'vue' | 'sourcemap' | 'builder' | 'postcss' | 'webpack'> { + vue: Omit<ConfigSchema['vue'], 'config'> & { config?: Partial<Filter<VueAppConfig, string | boolean>> } sourcemap: Required<Exclude<ConfigSchema['sourcemap'], boolean>> - builder: '@nuxt/vite-builder' | '@nuxt/webpack-builder' | NuxtBuilder + builder: '@nuxt/vite-builder' | '@nuxt/webpack-builder' | '@nuxt/rspack-builder' | NuxtBuilder postcss: Omit<ConfigSchema['postcss'], 'order'> & { order: Exclude<ConfigSchema['postcss']['order'], string> } webpack: ConfigSchema['webpack'] & { $client: ConfigSchema['webpack'] @@ -141,6 +143,9 @@ export interface AppConfigInput extends CustomAppConfig { // eslint-disable-next-line @typescript-eslint/no-unsafe-function-type type Serializable<T> = T extends Function ? never : T extends Promise<infer U> ? Serializable<U> : T extends string & {} ? T : T extends Record<string, any> ? { [K in keyof T]: Serializable<T[K]> } : T +type ValueOf<T> = T[keyof T] +type Filter<T extends Record<string, any>, V> = Pick<T, ValueOf<{ [K in keyof T]: NonNullable<T[K]> extends V ? K : never }>> + export interface NuxtAppConfig { head: Serializable<AppHeadMetaObject> layoutTransition: boolean | Serializable<TransitionProps> diff --git a/packages/schema/src/types/hooks.ts b/packages/schema/src/types/hooks.ts index 780b8b0614..7fd4b2aa5d 100644 --- a/packages/schema/src/types/hooks.ts +++ b/packages/schema/src/types/hooks.ts @@ -408,6 +408,55 @@ export interface NuxtHooks { * @returns void */ 'webpack:progress': (statesArray: any[]) => void + + // rspack + /** + * Called before configuring the webpack compiler. + * @param webpackConfigs Configs objects to be pushed to the compiler + * @returns Promise + */ + 'rspack:config': (webpackConfigs: Configuration[]) => HookResult + /** + * Allows to read the resolved webpack config + * @param webpackConfigs Configs objects to be pushed to the compiler + * @returns Promise + */ + 'rspack:configResolved': (webpackConfigs: Readonly<Configuration>[]) => HookResult + /** + * Called right before compilation. + * @param options The options to be added + * @returns Promise + */ + 'rspack:compile': (options: { name: string, compiler: Compiler }) => HookResult + /** + * Called after resources are loaded. + * @param options The compiler options + * @returns Promise + */ + 'rspack:compiled': (options: { name: string, compiler: Compiler, stats: Stats }) => HookResult + + /** + * Called on `change` on WebpackBar. + * @param shortPath the short path + * @returns void + */ + 'rspack:change': (shortPath: string) => void + /** + * Called on `done` if has errors on WebpackBar. + * @returns void + */ + 'rspack:error': () => void + /** + * Called on `allDone` on WebpackBar. + * @returns void + */ + 'rspack:done': () => void + /** + * Called on `progress` on WebpackBar. + * @param statesArray The array containing the states on progress + * @returns void + */ + 'rspack:progress': (statesArray: any[]) => void } export type NuxtHookName = keyof NuxtHooks diff --git a/packages/schema/src/types/nuxt.ts b/packages/schema/src/types/nuxt.ts index a87ce9e25f..ab9d1a2eeb 100644 --- a/packages/schema/src/types/nuxt.ts +++ b/packages/schema/src/types/nuxt.ts @@ -42,6 +42,12 @@ export interface NuxtTemplate<Options = TemplateDefaultOptions> { write?: boolean } +export interface NuxtServerTemplate { + /** The target filename once the template is copied into the Nuxt buildDir */ + filename: string + getContents: () => string | Promise<string> +} + export interface ResolvedNuxtTemplate<Options = TemplateDefaultOptions> extends NuxtTemplate<Options> { filename: string dst: string @@ -76,6 +82,7 @@ export interface Nuxt { // Private fields. _version: string _ignore?: Ignore + _dependencies?: Set<string> /** The resolved Nuxt configuration. */ options: NuxtOptions diff --git a/packages/ui-templates/lib/dev.ts b/packages/ui-templates/lib/dev.ts index 8c2624dbfe..3469dd6257 100644 --- a/packages/ui-templates/lib/dev.ts +++ b/packages/ui-templates/lib/dev.ts @@ -31,7 +31,7 @@ export const DevRenderingPlugin = () => { const chunks = contents.split(/\{{2,3}[^{}]+\}{2,3}/g) let templateString = chunks.shift() for (const expression of contents.matchAll(/\{{2,3}([^{}]+)\}{2,3}/g)) { - const value = runInNewContext(expression[1].trim(), { + const value = runInNewContext(expression[1]!.trim(), { version, messages: { ...genericMessages, ...messages }, }) diff --git a/packages/ui-templates/package.json b/packages/ui-templates/package.json index 2da9f2e2af..1b26037c63 100644 --- a/packages/ui-templates/package.json +++ b/packages/ui-templates/package.json @@ -18,18 +18,18 @@ "test": "pnpm lint && pnpm build" }, "devDependencies": { - "@unocss/reset": "0.62.3", + "@unocss/reset": "0.63.4", "critters": "0.0.24", - "html-validate": "8.22.0", + "html-validate": "8.24.1", "htmlnano": "2.1.1", - "jiti": "2.0.0-beta.3", + "jiti": "2.3.3", "knitwork": "1.1.0", "pathe": "1.1.2", "prettier": "3.3.3", "scule": "1.3.0", "tinyexec": "0.3.0", - "tinyglobby": "0.2.6", - "unocss": "0.62.3", - "vite": "5.4.5" + "tinyglobby": "0.2.9", + "unocss": "0.63.4", + "vite": "5.4.8" } } diff --git a/packages/vite/package.json b/packages/vite/package.json index 5882f53cb4..f5bc8b3a51 100644 --- a/packages/vite/package.json +++ b/packages/vite/package.json @@ -26,35 +26,35 @@ "devDependencies": { "@nuxt/schema": "workspace:*", "@types/clear": "0.1.4", - "@types/estree": "1.0.5", - "rollup": "4.21.3", - "unbuild": "3.0.0-rc.7", - "vue": "3.5.5" + "@types/estree": "1.0.6", + "rollup": "4.24.0", + "unbuild": "3.0.0-rc.11", + "vue": "3.5.11" }, "dependencies": { "@nuxt/kit": "workspace:*", - "@rollup/plugin-replace": "^5.0.7", - "@vitejs/plugin-vue": "^5.1.3", + "@rollup/plugin-replace": "^6.0.1", + "@vitejs/plugin-vue": "^5.1.4", "@vitejs/plugin-vue-jsx": "^4.0.1", "autoprefixer": "^10.4.20", "clear": "^0.1.0", "consola": "^3.2.3", "cssnano": "^7.0.6", "defu": "^6.1.4", - "esbuild": "^0.23.1", + "esbuild": "^0.24.0", "escape-string-regexp": "^5.0.0", "estree-walker": "^3.0.3", "externality": "^1.0.2", "get-port-please": "^3.1.2", "h3": "npm:h3-nightly@2.0.0-1718872656.6765a6e", - "jiti": "^2.0.0-beta.3", + "jiti": "^2.3.3", "knitwork": "^1.1.0", "magic-string": "^0.30.11", - "mlly": "^1.7.1", + "mlly": "^1.7.2", "ohash": "^1.1.4", "pathe": "^1.1.2", "perfect-debounce": "^1.0.0", - "pkg-types": "^1.2.0", + "pkg-types": "^1.2.1", "postcss": "^8.4.47", "rollup-plugin-visualizer": "^5.12.0", "std-env": "^3.7.0", @@ -62,10 +62,10 @@ "ufo": "^1.5.4", "unenv": "^1.10.0", "unplugin": "^1.14.1", - "vite": "^5.4.5", - "vite-node": "^2.1.1", + "vite": "^5.4.8", + "vite-node": "^2.1.2", "vite-plugin-checker": "^0.8.0", - "vue-bundle-renderer": "^2.1.0" + "vue-bundle-renderer": "^2.1.1" }, "peerDependencies": { "vue": "^3.3.4" diff --git a/packages/vite/src/client.ts b/packages/vite/src/client.ts index 1821e21d38..f26303b2ee 100644 --- a/packages/vite/src/client.ts +++ b/packages/vite/src/client.ts @@ -109,9 +109,7 @@ export async function buildClient (ctx: ViteBuildContext) { alias: { ...nodeCompat.alias, ...ctx.config.resolve?.alias, - '#internal/nuxt/paths': resolve(ctx.nuxt.options.buildDir, 'paths.mjs'), - '#build/plugins': resolve(ctx.nuxt.options.buildDir, 'plugins/client'), - 'nitro/runtime': resolve(ctx.nuxt.options.buildDir, 'nitro.client.mjs'), + 'nitro/runtime': join(ctx.nuxt.options.buildDir, 'nitro.client.mjs'), }, dedupe: [ 'vue', @@ -184,7 +182,7 @@ export async function buildClient (ctx: ViteBuildContext) { if (clientConfig.server && clientConfig.server.hmr !== false) { const serverDefaults: Omit<ServerOptions, 'hmr'> & { hmr: Exclude<ServerOptions['hmr'], boolean> } = { hmr: { - protocol: ctx.nuxt.options.devServer.https ? 'wss' : 'ws', + protocol: ctx.nuxt.options.devServer.https ? 'wss' : undefined, }, } if (typeof clientConfig.server.hmr !== 'object' || !clientConfig.server.hmr.server) { diff --git a/packages/vite/src/css.ts b/packages/vite/src/css.ts index 6457c78e43..5a8b82f3fa 100644 --- a/packages/vite/src/css.ts +++ b/packages/vite/src/css.ts @@ -18,20 +18,22 @@ export async function resolveCSSOptions (nuxt: Nuxt): Promise<ViteConfig['css']> css.postcss.plugins = [] const postcssOptions = nuxt.options.postcss - const jiti = createJiti(nuxt.options.rootDir, { - interopDefault: true, - alias: nuxt.options.alias, - }) + const jiti = createJiti(nuxt.options.rootDir, { alias: nuxt.options.alias }) for (const pluginName of sortPlugins(postcssOptions)) { const pluginOptions = postcssOptions.plugins[pluginName] if (!pluginOptions) { continue } - const path = jiti.esmResolve(pluginName) - const pluginFn = (await jiti.import(path)) as (opts: Record<string, any>) => Plugin - if (typeof pluginFn === 'function') { - css.postcss.plugins.push(pluginFn(pluginOptions)) - } else { + let pluginFn: ((opts: Record<string, any>) => Plugin) | undefined + for (const parentURL of nuxt.options.modulesDir) { + pluginFn = await jiti.import(pluginName, { parentURL: parentURL.replace(/\/node_modules\/?$/, ''), try: true, default: true }) as (opts: Record<string, any>) => Plugin + if (typeof pluginFn === 'function') { + css.postcss.plugins.push(pluginFn(pluginOptions)) + break + } + } + + if (typeof pluginFn !== 'function') { console.warn(`[nuxt] could not import postcss plugin \`${pluginName}\`. Please report this as a bug.`) } } diff --git a/packages/vite/src/manifest.ts b/packages/vite/src/manifest.ts index 15172431fd..994f1d3f41 100644 --- a/packages/vite/src/manifest.ts +++ b/packages/vite/src/manifest.ts @@ -5,11 +5,13 @@ import { relative, resolve } from 'pathe' import { withTrailingSlash, withoutLeadingSlash } from 'ufo' import escapeRE from 'escape-string-regexp' import { normalizeViteManifest } from 'vue-bundle-renderer' +import type { Manifest as RendererManifest } from 'vue-bundle-renderer' +import type { Manifest as ViteClientManifest } from 'vite' import type { ViteBuildContext } from './vite' export async function writeManifest (ctx: ViteBuildContext) { // This is only used for ssr: false - when ssr is enabled we use vite-node runtime manifest - const devClientManifest = { + const devClientManifest: RendererManifest = { '@vite/client': { isEntry: true, file: '@vite/client', @@ -30,17 +32,17 @@ export async function writeManifest (ctx: ViteBuildContext) { const serverDist = resolve(ctx.nuxt.options.buildDir, 'dist/server') const manifestFile = resolve(clientDist, 'manifest.json') - const clientManifest = ctx.nuxt.options.dev ? devClientManifest : JSON.parse(readFileSync(manifestFile, 'utf-8')) + const clientManifest = ctx.nuxt.options.dev ? devClientManifest : JSON.parse(readFileSync(manifestFile, 'utf-8')) as ViteClientManifest + const manifestEntries = Object.values(clientManifest) const buildAssetsDir = withTrailingSlash(withoutLeadingSlash(ctx.nuxt.options.app.buildAssetsDir)) const BASE_RE = new RegExp(`^${escapeRE(buildAssetsDir)}`) - for (const key in clientManifest) { - const entry = clientManifest[key] + for (const entry of manifestEntries) { if (entry.file) { entry.file = entry.file.replace(BASE_RE, '') } - for (const item of ['css', 'assets']) { + for (const item of ['css', 'assets'] as const) { if (entry[item]) { entry[item] = entry[item].map((i: string) => i.replace(BASE_RE, '')) } @@ -50,12 +52,11 @@ export async function writeManifest (ctx: ViteBuildContext) { await mkdir(serverDist, { recursive: true }) if (ctx.config.build?.cssCodeSplit === false) { - for (const key in clientManifest as Record<string, { file?: string }>) { - const val = clientManifest[key] - if (val.file?.endsWith('.css')) { + for (const entry of manifestEntries) { + if (entry.file?.endsWith('.css')) { const key = relative(ctx.config.root!, ctx.entry) - clientManifest[key].css ||= [] - clientManifest[key].css!.push(val.file) + clientManifest[key]!.css ||= [] + ;(clientManifest[key]!.css as string[]).push(entry.file) break } } diff --git a/packages/vite/src/plugins/analyze.ts b/packages/vite/src/plugins/analyze.ts index edecf536c7..d5e8e4432e 100644 --- a/packages/vite/src/plugins/analyze.ts +++ b/packages/vite/src/plugins/analyze.ts @@ -18,8 +18,7 @@ export function analyzePlugin (ctx: ViteBuildContext): Plugin[] { const bundle = outputBundle[_bundleId] if (!bundle || bundle.type !== 'chunk') { continue } const minifiedModuleEntryPromises: Array<Promise<[string, RenderedModule]>> = [] - for (const moduleId in bundle.modules) { - const module = bundle.modules[moduleId]! + for (const [moduleId, module] of Object.entries(bundle.modules)) { minifiedModuleEntryPromises.push( transform(module.code || '', { minify: true }) .then(result => [moduleId, { ...module, code: result.code }]), diff --git a/packages/vite/src/plugins/public-dirs.ts b/packages/vite/src/plugins/public-dirs.ts index e2765510f5..a1fb15ee24 100644 --- a/packages/vite/src/plugins/public-dirs.ts +++ b/packages/vite/src/plugins/public-dirs.ts @@ -86,8 +86,7 @@ export const VitePublicDirsPlugin = createUnplugin((options: VitePublicDirsPlugi } }, generateBundle (_outputOptions, bundle) { - for (const file in bundle) { - const chunk = bundle[file]! + for (const [file, chunk] of Object.entries(bundle)) { if (!file.endsWith('.css') || chunk.type !== 'asset') { continue } let css = chunk.source.toString() diff --git a/packages/vite/src/plugins/ssr-styles.ts b/packages/vite/src/plugins/ssr-styles.ts index c7c83a3439..ce9936699f 100644 --- a/packages/vite/src/plugins/ssr-styles.ts +++ b/packages/vite/src/plugins/ssr-styles.ts @@ -62,8 +62,7 @@ export function ssrStylesPlugin (options: SSRStylePluginOptions): Plugin { if (options.mode === 'client') { return } const emitted: Record<string, string> = {} - for (const file in cssMap) { - const { files, inBundle } = cssMap[file]! + for (const [file, { files, inBundle }] of Object.entries(cssMap)) { // File has been tree-shaken out of build (or there are no styles to inline) if (!files.length || !inBundle) { continue } const fileName = filename(file) @@ -72,7 +71,9 @@ export function ssrStylesPlugin (options: SSRStylePluginOptions): Plugin { : outputOptions.assetFileNames({ type: 'asset', name: `${fileName}-styles.mjs`, + names: [`${fileName}-styles.mjs`], originalFileName: `${fileName}-styles.mjs`, + originalFileNames: [`${fileName}-styles.mjs`], source: '', }) diff --git a/packages/vite/src/plugins/virtual.ts b/packages/vite/src/plugins/virtual.ts deleted file mode 100644 index 723958a6e7..0000000000 --- a/packages/vite/src/plugins/virtual.ts +++ /dev/null @@ -1,48 +0,0 @@ -import { dirname, isAbsolute, join, resolve } from 'pathe' -import type { Plugin } from 'vite' - -const PREFIX = 'virtual:nuxt:' - -export default function virtual (vfs: Record<string, string>): Plugin { - const extensions = ['', '.ts', '.vue', '.mjs', '.cjs', '.js', '.json'] - const resolveWithExt = (id: string) => { - for (const ext of extensions) { - const rId = id + ext - if (rId in vfs) { - return rId - } - } - return null - } - - return { - name: 'virtual', - - resolveId (id, importer) { - if (process.platform === 'win32' && isAbsolute(id)) { - // Add back C: prefix on Windows - id = resolve(id) - } - const resolvedId = resolveWithExt(id) - if (resolvedId) { return PREFIX + resolvedId } - if (importer && !isAbsolute(id)) { - const importerNoPrefix = importer.startsWith(PREFIX) ? importer.slice(PREFIX.length) : importer - const importedDir = dirname(importerNoPrefix) - const resolved = resolveWithExt(join(importedDir, id)) - if (resolved) { return PREFIX + resolved } - } - return null - }, - - load (id) { - if (!id.startsWith(PREFIX)) { return null } - const idNoPrefix = id.slice(PREFIX.length) - if (idNoPrefix in vfs) { - return { - code: vfs[idNoPrefix] || '', - map: null, - } - } - }, - } -} diff --git a/packages/vite/src/runtime/vite-node-shared.mjs b/packages/vite/src/runtime/vite-node-shared.mjs index a9615ac483..3a6109f6ba 100644 --- a/packages/vite/src/runtime/vite-node-shared.mjs +++ b/packages/vite/src/runtime/vite-node-shared.mjs @@ -7,7 +7,6 @@ export const viteNodeOptions = JSON.parse(process.env.NUXT_VITE_NODE_OPTIONS || export const viteNodeFetch = $fetch.create({ baseURL: viteNodeOptions.baseURL, - // @ts-expect-error https://github.com/node-fetch/node-fetch#custom-agent agent: viteNodeOptions.baseURL.startsWith('https://') ? new HTTPSAgent({ rejectUnauthorized: false }) : null, diff --git a/packages/vite/src/server.ts b/packages/vite/src/server.ts index db2b2d265f..a71976c344 100644 --- a/packages/vite/src/server.ts +++ b/packages/vite/src/server.ts @@ -58,10 +58,6 @@ export async function buildServer (ctx: ViteBuildContext) { }, resolve: { conditions: ((ctx.nuxt as any)._nitro as Nitro)?.options.exportConditions, - alias: { - '#internal/nuxt/paths': resolve(ctx.nuxt.options.buildDir, 'paths.mjs'), - '#build/plugins': resolve(ctx.nuxt.options.buildDir, 'plugins/server'), - }, }, ssr: { external: [ diff --git a/packages/vite/src/vite-node.ts b/packages/vite/src/vite-node.ts index 8001c389cd..46d7c66ec0 100644 --- a/packages/vite/src/vite-node.ts +++ b/packages/vite/src/vite-node.ts @@ -41,7 +41,7 @@ export function viteNodePlugin (ctx: ViteBuildContext): VitePlugin { configureServer (server) { function invalidateVirtualModules () { for (const [id, mod] of server.moduleGraph.idToModuleMap) { - if (id.startsWith('virtual:')) { + if (id.startsWith('virtual:') || id.startsWith('\0virtual:')) { markInvalidate(mod) } } diff --git a/packages/vite/src/vite.ts b/packages/vite/src/vite.ts index 7b51573d10..5500f4bed0 100644 --- a/packages/vite/src/vite.ts +++ b/packages/vite/src/vite.ts @@ -12,7 +12,6 @@ import { resolveTSConfig } from 'pkg-types' import { buildClient } from './client' import { buildServer } from './server' -import virtual from './plugins/virtual' import { warmupViteServer } from './utils/warmup' import { resolveCSSOptions } from './css' import { composableKeysPlugin } from './plugins/composable-keys' @@ -65,10 +64,6 @@ export const bundle: NuxtBuilder['bundle'] = async (nuxt) => { alias: { ...nuxt.options.alias, '#app': nuxt.options.appDir, - // We need this resolution to be present before the following entry, but it - // will be filled in client/server configs - '#build/plugins': '', - '#build': nuxt.options.buildDir, 'web-streams-polyfill/ponyfill/es2018': 'unenv/runtime/mock/empty', // Cannot destructure property 'AbortController' of .. 'abort-controller': 'unenv/runtime/mock/empty', @@ -110,7 +105,6 @@ export const bundle: NuxtBuilder['bundle'] = async (nuxt) => { composables: nuxt.options.optimization.keyedComposables, }), replace({ preventAssignment: true, ...globalThisReplacements }), - virtual(nuxt.vfs), ], server: { watch: { ignored: isIgnored }, @@ -207,8 +201,7 @@ export const bundle: NuxtBuilder['bundle'] = async (nuxt) => { // Remove CSS entries for files that will have inlined styles ctx.nuxt.hook('build:manifest', (manifest) => { - for (const key in manifest) { - const entry = manifest[key]! + for (const [key, entry] of Object.entries(manifest)) { const shouldRemoveCSS = chunksWithInlinedCSS.has(key) && !entry.isEntry if (entry.isEntry && chunksWithInlinedCSS.has(key)) { // @ts-expect-error internal key @@ -225,7 +218,7 @@ export const bundle: NuxtBuilder['bundle'] = async (nuxt) => { // Invalidate virtual modules when templates are re-generated ctx.nuxt.hook('app:templatesGenerated', () => { for (const [id, mod] of server.moduleGraph.idToModuleMap) { - if (id.startsWith('virtual:')) { + if (id.startsWith('virtual:') || id.startsWith('\0virtual:')) { server.moduleGraph.invalidateModule(mod) } } diff --git a/packages/webpack/build.config.ts b/packages/webpack/build.config.ts index 95278b7548..e1567f1bb6 100644 --- a/packages/webpack/build.config.ts +++ b/packages/webpack/build.config.ts @@ -8,7 +8,6 @@ export default defineBuildConfig({ dependencies: [ '@nuxt/kit', 'unplugin', - 'webpack-virtual-modules', 'postcss', 'postcss-loader', 'vue-loader', @@ -18,6 +17,7 @@ export default defineBuildConfig({ 'vue', ], externals: [ + '#builder', '@nuxt/schema', ], }) diff --git a/packages/webpack/builder.d.ts b/packages/webpack/builder.d.ts new file mode 100644 index 0000000000..a7924b945d --- /dev/null +++ b/packages/webpack/builder.d.ts @@ -0,0 +1,8 @@ +declare module '#builder' { + import type Webpack from 'webpack' + import type MiniCssExtractPlugin from 'mini-css-extract-plugin' + + export const webpack: typeof Webpack + export const MiniCssExtractPlugin: typeof MiniCssExtractPlugin + export const builder: 'webpack' | 'rspack' +} diff --git a/packages/webpack/builder.mjs b/packages/webpack/builder.mjs new file mode 100644 index 0000000000..4de1c41293 --- /dev/null +++ b/packages/webpack/builder.mjs @@ -0,0 +1,3 @@ +export const builder = 'webpack' +export { default as webpack } from 'webpack' +export { default as MiniCssExtractPlugin } from 'mini-css-extract-plugin' diff --git a/packages/webpack/package.json b/packages/webpack/package.json index b0b07bcf87..3c99590c9f 100644 --- a/packages/webpack/package.json +++ b/packages/webpack/package.json @@ -11,6 +11,9 @@ "license": "MIT", "type": "module", "types": "./dist/index.d.ts", + "imports": { + "#builder": "./builder.mjs" + }, "exports": { ".": { "types": "./dist/index.d.ts", @@ -19,7 +22,8 @@ "./dist/*": "./dist/*" }, "files": [ - "dist" + "dist", + "builder.mjs" ], "scripts": { "prepack": "unbuild" @@ -40,13 +44,13 @@ "globby": "^14.0.2", "h3": "npm:h3-nightly@2.0.0-1718872656.6765a6e", "hash-sum": "^2.0.0", - "jiti": "^2.0.0-beta.3", + "jiti": "^2.3.3", "knitwork": "^1.1.0", "lodash-es": "4.17.21", "magic-string": "^0.30.11", - "memfs": "^4.11.1", + "memfs": "^4.13.0", "mini-css-extract-plugin": "^2.9.1", - "mlly": "^1.7.1", + "mlly": "^1.7.2", "ohash": "^1.1.4", "pathe": "^1.1.2", "pify": "^6.1.0", @@ -62,25 +66,25 @@ "unenv": "^1.10.0", "unplugin": "^1.14.1", "url-loader": "^4.1.1", - "vue-bundle-renderer": "^2.1.0", + "vue-bundle-renderer": "^2.1.1", "vue-loader": "^17.4.2", - "webpack": "^5.94.0", + "webpack": "^5.95.0", "webpack-bundle-analyzer": "^4.10.2", "webpack-dev-middleware": "^7.4.2", "webpack-hot-middleware": "^2.26.1", - "webpack-virtual-modules": "^0.6.2", "webpackbar": "^6.0.1" }, "devDependencies": { "@nuxt/schema": "workspace:*", + "@rspack/core": "1.0.8", "@types/hash-sum": "1.0.2", "@types/lodash-es": "4.17.12", "@types/pify": "5.0.4", "@types/webpack-bundle-analyzer": "4.7.0", "@types/webpack-hot-middleware": "2.25.9", - "rollup": "4.21.3", - "unbuild": "3.0.0-rc.7", - "vue": "3.5.5" + "rollup": "4.24.0", + "unbuild": "3.0.0-rc.11", + "vue": "3.5.11" }, "peerDependencies": { "vue": "^3.3.4" diff --git a/packages/webpack/src/configs/client.ts b/packages/webpack/src/configs/client.ts index e1bf00a5fd..f147745939 100644 --- a/packages/webpack/src/configs/client.ts +++ b/packages/webpack/src/configs/client.ts @@ -1,6 +1,5 @@ import querystring from 'node:querystring' import { resolve } from 'pathe' -import webpack from 'webpack' import { BundleAnalyzerPlugin } from 'webpack-bundle-analyzer' import { logger } from '@nuxt/kit' import { joinURL } from 'ufo' @@ -10,6 +9,7 @@ import { env, nodeless } from 'unenv' import type { WebpackConfigContext } from '../utils/config' import { applyPresets } from '../utils/config' import { nuxt } from '../presets/nuxt' +import { webpack } from '#builder' export async function client (ctx: WebpackConfigContext) { ctx.name = 'client' diff --git a/packages/webpack/src/configs/server.ts b/packages/webpack/src/configs/server.ts index e9a1738153..53370bef88 100644 --- a/packages/webpack/src/configs/server.ts +++ b/packages/webpack/src/configs/server.ts @@ -1,11 +1,11 @@ import { isAbsolute } from 'pathe' -import webpack from 'webpack' import ForkTSCheckerWebpackPlugin from 'fork-ts-checker-webpack-plugin' import { logger } from '@nuxt/kit' import type { WebpackConfigContext } from '../utils/config' import { applyPresets } from '../utils/config' import { nuxt } from '../presets/nuxt' import { node } from '../presets/node' +import { webpack } from '#builder' const assetPattern = /\.(?:css|s[ca]ss|png|jpe?g|gif|svg|woff2?|eot|ttf|otf|webp|webm|mp4|ogv)(?:\?.*)?$/i diff --git a/packages/webpack/src/plugins/chunk.ts b/packages/webpack/src/plugins/chunk.ts index 56edb4c2fc..999b83cbc7 100644 --- a/packages/webpack/src/plugins/chunk.ts +++ b/packages/webpack/src/plugins/chunk.ts @@ -1,9 +1,10 @@ import type { Compiler } from 'webpack' -import webpack from 'webpack' +import { webpack } from '#builder' const pluginName = 'ChunkErrorPlugin' -const script = ` +export class ChunkErrorPlugin { + script = ` if (typeof ${webpack.RuntimeGlobals.require} !== "undefined") { var _ensureChunk = ${webpack.RuntimeGlobals.ensureChunk}; ${webpack.RuntimeGlobals.ensureChunk} = function (chunkId) { @@ -16,12 +17,11 @@ if (typeof ${webpack.RuntimeGlobals.require} !== "undefined") { }; };` -export class ChunkErrorPlugin { apply (compiler: Compiler) { compiler.hooks.thisCompilation.tap(pluginName, compilation => compilation.mainTemplate.hooks.localVars.tap( { name: pluginName, stage: 1 }, - source => source + script, + source => source + this.script, ), ) } diff --git a/packages/webpack/src/plugins/vue/client.ts b/packages/webpack/src/plugins/vue/client.ts index 23259c6cba..3f217f3e1d 100644 --- a/packages/webpack/src/plugins/vue/client.ts +++ b/packages/webpack/src/plugins/vue/client.ts @@ -7,7 +7,7 @@ import { mkdir, writeFile } from 'node:fs/promises' import { normalizeWebpackManifest } from 'vue-bundle-renderer' import { dirname } from 'pathe' -import hash from 'hash-sum' +import { hash } from 'ohash' import type { Nuxt } from '@nuxt/schema' import type { Compilation, Compiler } from 'webpack' @@ -33,9 +33,10 @@ export default class VueSSRClientPlugin { const stats = compilation.getStats().toJson() const initialFiles = new Set<string>() - for (const name in stats.entrypoints!) { - const entryAssets = stats.entrypoints![name]!.assets! - for (const asset of entryAssets) { + for (const { assets } of Object.values(stats.entrypoints!)) { + if (!assets) { continue } + + for (const asset of assets) { const file = asset.name if ((isJS(file) || isCSS(file)) && !isHotUpdate(file)) { initialFiles.add(file) @@ -71,52 +72,53 @@ export default class VueSSRClientPlugin { } const { entrypoints = {}, namedChunkGroups = {} } = stats - const assetModules = stats.modules!.filter(m => m.assets!.length) - const fileToIndex = (file: string) => webpackManifest.all.indexOf(file) - stats.modules!.forEach((m) => { + const fileToIndex = (file: string | number) => webpackManifest.all.indexOf(String(file)) + for (const m of stats.modules!) { // Ignore modules duplicated in multiple chunks - if (m.chunks!.length === 1) { - const [cid] = m.chunks! - const chunk = stats.chunks!.find(c => c.id === cid) - if (!chunk || !chunk.files || !cid) { - return - } - const id = m.identifier!.replace(/\s\w+$/, '') // remove appended hash - const filesSet = new Set(chunk.files.map(fileToIndex).filter(i => i !== -1)) + if (m.chunks?.length !== 1) { continue } - for (const chunkName of chunk.names!) { - if (!entrypoints[chunkName]) { - const chunkGroup = namedChunkGroups[chunkName] - if (chunkGroup) { - for (const asset of chunkGroup.assets!) { - filesSet.add(fileToIndex(asset.name)) - } - } - } - } - - const files = Array.from(filesSet) - webpackManifest.modules[hash(id)] = files - - // In production mode, modules may be concatenated by scope hoisting - // Include ConcatenatedModule for not losing module-component mapping - if (Array.isArray(m.modules)) { - for (const concatenatedModule of m.modules) { - const id = hash(concatenatedModule.identifier!.replace(/\s\w+$/, '')) - if (!webpackManifest.modules[id]) { - webpackManifest.modules[id] = files - } - } - } - - // Find all asset modules associated with the same chunk - assetModules.forEach((m) => { - if (m.chunks!.includes(cid)) { - files.push(...(m.assets as string[]).map(fileToIndex)) - } - }) + const [cid] = m.chunks + const chunk = stats.chunks!.find(c => c.id === cid) + if (!chunk || !chunk.files || !cid) { + continue } - }) + const id = m.identifier!.replace(/\s\w+$/, '') // remove appended hash + const filesSet = new Set(chunk.files.map(fileToIndex).filter(i => i !== -1)) + + for (const chunkName of chunk.names!) { + if (!entrypoints[chunkName]) { + const chunkGroup = namedChunkGroups[chunkName] + if (chunkGroup) { + for (const asset of chunkGroup.assets!) { + filesSet.add(fileToIndex(asset.name)) + } + } + } + } + + const files = Array.from(filesSet) + webpackManifest.modules[hash(id)] = files + + // In production mode, modules may be concatenated by scope hoisting + // Include ConcatenatedModule for not losing module-component mapping + if (Array.isArray(m.modules)) { + for (const concatenatedModule of m.modules) { + const id = hash(concatenatedModule.identifier!.replace(/\s\w+$/, '')) + if (!webpackManifest.modules[id]) { + webpackManifest.modules[id] = files + } + } + } + + // Find all asset modules associated with the same chunk + if (stats.modules) { + for (const m of stats.modules) { + if (m.assets?.length && m.chunks?.includes(cid)) { + files.push(...m.assets.map(fileToIndex)) + } + } + } + } const manifest = normalizeWebpackManifest(webpackManifest as any) await this.options.nuxt.callHook('build:manifest', manifest) diff --git a/packages/webpack/src/plugins/vue/server.ts b/packages/webpack/src/plugins/vue/server.ts index 646589c601..29f3a1b74c 100644 --- a/packages/webpack/src/plugins/vue/server.ts +++ b/packages/webpack/src/plugins/vue/server.ts @@ -1,6 +1,6 @@ import type { Compilation, Compiler } from 'webpack' -import webpack from 'webpack' import { extractQueryPartJS, isJS, validate } from './util' +import { webpack } from '#builder' interface VueSSRServerPluginOptions { filename: string diff --git a/packages/webpack/src/presets/base.ts b/packages/webpack/src/presets/base.ts index 34337bb216..48ae42c14c 100644 --- a/packages/webpack/src/presets/base.ts +++ b/packages/webpack/src/presets/base.ts @@ -3,7 +3,6 @@ import { normalize, resolve } from 'pathe' import TimeFixPlugin from 'time-fix-plugin' import WebpackBar from 'webpackbar' import type { Configuration } from 'webpack' -import webpack from 'webpack' import { logger } from '@nuxt/kit' // @ts-expect-error missing types import FriendlyErrorsWebpackPlugin from '@nuxt/friendly-errors-webpack-plugin' @@ -16,6 +15,8 @@ import WarningIgnorePlugin from '../plugins/warning-ignore' import type { WebpackConfigContext } from '../utils/config' import { applyPresets, fileName } from '../utils/config' +import { builder, webpack } from '#builder' + export async function base (ctx: WebpackConfigContext) { await applyPresets(ctx, [ baseAlias, @@ -53,14 +54,18 @@ function basePlugins (ctx: WebpackConfigContext) { // Add timefix-plugin before other plugins if (ctx.options.dev) { - ctx.config.plugins.push(new TimeFixPlugin()) + if (ctx.nuxt.options.builder !== '@nuxt/rspack-builder') { + ctx.config.plugins.push(new TimeFixPlugin()) + } } // User plugins ctx.config.plugins.push(...(ctx.userConfig.plugins || [])) // Ignore empty warnings - ctx.config.plugins.push(new WarningIgnorePlugin(getWarningIgnoreFilter(ctx))) + if (ctx.nuxt.options.builder !== '@nuxt/rspack-builder') { + ctx.config.plugins.push(new WarningIgnorePlugin(getWarningIgnoreFilter(ctx))) + } // Provide env via DefinePlugin ctx.config.plugins.push(new webpack.DefinePlugin(getEnv(ctx))) @@ -93,21 +98,21 @@ function basePlugins (ctx: WebpackConfigContext) { reporter: { change: (_, { shortPath }) => { if (!ctx.isServer) { - ctx.nuxt.callHook('webpack:change', shortPath) + ctx.nuxt.callHook(`${builder}:change`, shortPath) } }, done: ({ state }) => { if (state.hasErrors) { - ctx.nuxt.callHook('webpack:error') + ctx.nuxt.callHook(`${builder}:error`) } else { logger.success(`${state.name} ${state.message}`) } }, allDone: () => { - ctx.nuxt.callHook('webpack:done') + ctx.nuxt.callHook(`${builder}:done`) }, progress ({ statesArray }) { - ctx.nuxt.callHook('webpack:progress', statesArray) + ctx.nuxt.callHook(`${builder}:progress`, statesArray) }, }, }, @@ -118,9 +123,6 @@ function basePlugins (ctx: WebpackConfigContext) { function baseAlias (ctx: WebpackConfigContext) { ctx.alias = { '#app': ctx.options.appDir, - '#build/plugins': resolve(ctx.options.buildDir, 'plugins', ctx.isClient ? 'client' : 'server'), - '#build': ctx.options.buildDir, - '#internal/nuxt/paths': resolve(ctx.nuxt.options.buildDir, 'paths.mjs'), ...ctx.options.alias, ...ctx.alias, } @@ -153,7 +155,7 @@ function baseTranspile (ctx: WebpackConfigContext) { /\.vue\.js/i, // include SFCs in node_modules /consola\/src/, /vue-demi/, - /(^|\/)nuxt\/(dist\/)?(app|[^/]+\/runtime)($|\/)/, + /(^|\/)nuxt\/(src\/|dist\/)?(app|[^/]+\/runtime)($|\/)/, ] for (let pattern of ctx.options.build.transpile) { diff --git a/packages/webpack/src/presets/style.ts b/packages/webpack/src/presets/style.ts index 90d1031885..fc44bd6157 100644 --- a/packages/webpack/src/presets/style.ts +++ b/packages/webpack/src/presets/style.ts @@ -1,9 +1,10 @@ -import MiniCssExtractPlugin from 'mini-css-extract-plugin' import CssMinimizerPlugin from 'css-minimizer-webpack-plugin' import type { WebpackConfigContext } from '../utils/config' import { applyPresets, fileName } from '../utils/config' import { getPostcssConfig } from '../utils/postcss' +import { MiniCssExtractPlugin } from '#builder' + export async function style (ctx: WebpackConfigContext) { await applyPresets(ctx, [ loaders, diff --git a/packages/webpack/src/presets/vue.ts b/packages/webpack/src/presets/vue.ts index 16acd3ca07..e14632a4fd 100644 --- a/packages/webpack/src/presets/vue.ts +++ b/packages/webpack/src/presets/vue.ts @@ -1,10 +1,11 @@ import { resolve } from 'pathe' import VueLoaderPlugin from 'vue-loader/dist/pluginWebpack5.js' -import webpack from 'webpack' import VueSSRClientPlugin from '../plugins/vue/client' import VueSSRServerPlugin from '../plugins/vue/server' import type { WebpackConfigContext } from '../utils/config' +import { webpack } from '#builder' + export function vue (ctx: WebpackConfigContext) { // @ts-expect-error de-default vue-loader ctx.config.plugins!.push(new (VueLoaderPlugin.default || VueLoaderPlugin)()) @@ -30,7 +31,8 @@ export function vue (ctx: WebpackConfigContext) { // https://github.com/vuejs/vue-next/tree/master/packages/vue#bundler-build-feature-flags // TODO: Provide options to toggle ctx.config.plugins!.push(new webpack.DefinePlugin({ - __VUE_OPTIONS_API__: 'true', - __VUE_PROD_DEVTOOLS__: 'false', + '__VUE_OPTIONS_API__': 'true', + '__VUE_PROD_DEVTOOLS__': 'false', + '__VUE_PROD_HYDRATION_MISMATCH_DETAILS__': ctx.nuxt.options.debug, })) } diff --git a/packages/webpack/src/utils/postcss.ts b/packages/webpack/src/utils/postcss.ts index 0d48972bb6..ff7ec76018 100644 --- a/packages/webpack/src/utils/postcss.ts +++ b/packages/webpack/src/utils/postcss.ts @@ -36,10 +36,7 @@ export async function getPostcssConfig (nuxt: Nuxt) { sourceMap: nuxt.options.webpack.cssSourceMap, }) - const jiti = createJiti(nuxt.options.rootDir, { - interopDefault: true, - alias: nuxt.options.alias, - }) + const jiti = createJiti(nuxt.options.rootDir, { alias: nuxt.options.alias }) // Keep the order of default plugins if (!Array.isArray(postcssOptions.plugins) && isPureObject(postcssOptions.plugins)) { @@ -49,11 +46,16 @@ export async function getPostcssConfig (nuxt: Nuxt) { const pluginOptions = postcssOptions.plugins[pluginName] if (!pluginOptions) { continue } - const path = jiti.esmResolve(pluginName) - const pluginFn = (await jiti.import(path)) as (opts: Record<string, any>) => Plugin - if (typeof pluginFn === 'function') { - plugins.push(pluginFn(pluginOptions)) - } else { + let pluginFn: ((opts: Record<string, any>) => Plugin) | undefined + for (const parentURL of nuxt.options.modulesDir) { + pluginFn = await jiti.import(pluginName, { parentURL: parentURL.replace(/\/node_modules\/?$/, ''), try: true, default: true }) as (opts: Record<string, any>) => Plugin + if (typeof pluginFn === 'function') { + plugins.push(pluginFn(pluginOptions)) + break + } + } + + if (typeof pluginFn !== 'function') { console.warn(`[nuxt] could not import postcss plugin \`${pluginName}\`. Please report this as a bug.`) } } diff --git a/packages/webpack/src/virtual-modules.ts b/packages/webpack/src/virtual-modules.ts deleted file mode 100644 index 8c117756db..0000000000 --- a/packages/webpack/src/virtual-modules.ts +++ /dev/null @@ -1,26 +0,0 @@ -import { useNuxt } from '@nuxt/kit' -import VirtualModulesPlugin from 'webpack-virtual-modules' - -export function registerVirtualModules () { - const nuxt = useNuxt() - - // Initialize virtual modules instance - const virtualModules = new VirtualModulesPlugin(nuxt.vfs) - const writeFiles = () => { - for (const filePath in nuxt.vfs) { - virtualModules.writeModule(filePath, nuxt.vfs[filePath] || '') - } - } - - // Workaround to initialize virtual modules - nuxt.hook('webpack:compile', ({ compiler }) => { - if (compiler.name === 'server') { writeFiles() } - }) - // Update virtual modules when templates are updated - nuxt.hook('app:templatesGenerated', writeFiles) - - nuxt.hook('webpack:config', configs => configs.forEach((config) => { - // Support virtual modules (input) - config.plugins!.push(virtualModules) - })) -} diff --git a/packages/webpack/src/webpack.ts b/packages/webpack/src/webpack.ts index 3f97820b13..f1b178af54 100644 --- a/packages/webpack/src/webpack.ts +++ b/packages/webpack/src/webpack.ts @@ -1,5 +1,4 @@ import pify from 'pify' -import webpack from 'webpack' import type { NodeMiddleware } from 'h3' import { resolve } from 'pathe' import { defineEventHandler, fromNodeMiddleware } from 'h3' @@ -17,17 +16,16 @@ import { composableKeysPlugin } from '../../vite/src/plugins/composable-keys' import { DynamicBasePlugin } from './plugins/dynamic-base' import { ChunkErrorPlugin } from './plugins/chunk' import { createMFS } from './utils/mfs' -import { registerVirtualModules } from './virtual-modules' import { client, server } from './configs' import { applyPresets, createWebpackConfigContext, getWebpackConfig } from './utils/config' import { dynamicRequire } from './nitro/plugins/dynamic-require' +import { builder, webpack } from '#builder' + // TODO: Support plugins // const plugins: string[] = [] export const bundle: NuxtBuilder['bundle'] = async (nuxt) => { - registerVirtualModules() - const webpackConfigs = await Promise.all([client, ...nuxt.options.ssr ? [server] : []].map(async (preset) => { const ctx = createWebpackConfigContext(nuxt) ctx.userConfig = defu(nuxt.options.webpack[`$${preset.name as 'client' | 'server'}`], ctx.userConfig) @@ -55,7 +53,7 @@ export const bundle: NuxtBuilder['bundle'] = async (nuxt) => { prerenderRollupPlugins.push(dynamicRequirePlugin) rollupPlugins.push(dynamicRequirePlugin) - await nuxt.callHook('webpack:config', webpackConfigs) + await nuxt.callHook(`${builder}:config`, webpackConfigs) // Initialize shared MFS for dev const mfs = nuxt.options.dev ? createMFS() : null @@ -65,7 +63,7 @@ export const bundle: NuxtBuilder['bundle'] = async (nuxt) => { sourcemap: !!nuxt.options.sourcemap[config.name as 'client' | 'server'], })) // Emit chunk errors if the user has opted in to `experimental.emitRouteChunkError` - if (config.name === 'client' && nuxt.options.experimental.emitRouteChunkError) { + if (config.name === 'client' && nuxt.options.experimental.emitRouteChunkError && nuxt.options.builder !== '@nuxt/rspack-builder') { config.plugins!.push(new ChunkErrorPlugin()) } config.plugins!.push(composableKeysPlugin.webpack({ @@ -75,7 +73,7 @@ export const bundle: NuxtBuilder['bundle'] = async (nuxt) => { })) } - await nuxt.callHook('webpack:configResolved', webpackConfigs) + await nuxt.callHook(`${builder}:configResolved`, webpackConfigs) // Configure compilers const compilers = webpackConfigs.map((config) => { @@ -145,11 +143,11 @@ async function createDevMiddleware (compiler: Compiler) { async function compile (compiler: Compiler) { const nuxt = useNuxt() - await nuxt.callHook('webpack:compile', { name: compiler.options.name!, compiler }) + await nuxt.callHook(`${builder}:compile`, { name: compiler.options.name!, compiler }) // Load renderer resources after build compiler.hooks.done.tap('load-resources', async (stats) => { - await nuxt.callHook('webpack:compiled', { name: compiler.options.name!, compiler, stats }) + await nuxt.callHook(`${builder}:compiled`, { name: compiler.options.name!, compiler, stats }) }) // --- Dev Build --- diff --git a/patches/ofetch@1.3.4.patch b/patches/ofetch@1.3.4.patch deleted file mode 100644 index 6492d6c218..0000000000 --- a/patches/ofetch@1.3.4.patch +++ /dev/null @@ -1,33 +0,0 @@ -diff --git a/dist/node.d.cts b/dist/node.d.cts -index d3a39ff53717d267ff4581af714533ff7229799c..4e3db1f3d6defb7b0c40d11589c0ff6cb8391ad5 100644 ---- a/dist/node.d.cts -+++ b/dist/node.d.cts -@@ -1,5 +1,5 @@ - import { $ as $Fetch } from './shared/ofetch.8459ad38.cjs'; --export { F as FetchError, c as createFetch, a as createFetchError } from './shared/ofetch.8459ad38.cjs'; -+export { C as CreateFetchOptions, g as Fetch, b as FetchContext, F as FetchError, d as FetchOptions, h as FetchRequest, f as FetchResponse, G as GlobalOptions, I as IFetchError, M as MappedResponseType, R as ResponseMap, e as ResponseType, S as SearchParameters, c as createFetch, a as createFetchError } from './shared/ofetch.8459ad38.mjs'; - - declare function createNodeFetch(): (input: RequestInfo, init?: RequestInit) => any; - declare const fetch: typeof globalThis.fetch; -diff --git a/dist/node.d.mts b/dist/node.d.mts -index 3d8b330375ce60178c05292179ec8bac764ae516..bdcc322bd8554fc7e61d5d9760cb9991560560eb 100644 ---- a/dist/node.d.mts -+++ b/dist/node.d.mts -@@ -1,5 +1,5 @@ - import { $ as $Fetch } from './shared/ofetch.8459ad38.mjs'; --export { F as FetchError, c as createFetch, a as createFetchError } from './shared/ofetch.8459ad38.mjs'; -+export { C as CreateFetchOptions, g as Fetch, b as FetchContext, F as FetchError, d as FetchOptions, h as FetchRequest, f as FetchResponse, G as GlobalOptions, I as IFetchError, M as MappedResponseType, R as ResponseMap, e as ResponseType, S as SearchParameters, c as createFetch, a as createFetchError } from './shared/ofetch.8459ad38.mjs'; - - declare function createNodeFetch(): (input: RequestInfo, init?: RequestInit) => any; - declare const fetch: typeof globalThis.fetch; -diff --git a/dist/node.d.ts b/dist/node.d.ts -index 6a5419d1939000a15958b362f44bf49fb1800207..4b319d2c3051e966274268670e243c5f99e2904d 100644 ---- a/dist/node.d.ts -+++ b/dist/node.d.ts -@@ -1,5 +1,5 @@ - import { $ as $Fetch } from './shared/ofetch.8459ad38.js'; --export { F as FetchError, c as createFetch, a as createFetchError } from './shared/ofetch.8459ad38.js'; -+export { C as CreateFetchOptions, g as Fetch, b as FetchContext, F as FetchError, d as FetchOptions, h as FetchRequest, f as FetchResponse, G as GlobalOptions, I as IFetchError, M as MappedResponseType, R as ResponseMap, e as ResponseType, S as SearchParameters, c as createFetch, a as createFetchError } from './shared/ofetch.8459ad38.mjs'; - - declare function createNodeFetch(): (input: RequestInfo, init?: RequestInit) => any; - declare const fetch: typeof globalThis.fetch; diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 336a7e68f9..15b62e69e0 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -10,70 +10,73 @@ overrides: '@nuxt/ui-templates': workspace:* '@nuxt/vite-builder': workspace:* '@nuxt/webpack-builder': workspace:* - '@types/node': 20.16.5 - c12: 2.0.0-beta.2 + '@nuxt/rspack-builder': workspace:* + '@types/node': 20.16.11 + '@vue/compiler-core': 3.5.11 + '@vue/compiler-dom': 3.5.11 + '@vue/shared': 3.5.11 + c12: 2.0.1 h3: npm:h3-nightly@2.0.0-1718872656.6765a6e - jiti: 2.0.0-beta.3 + jiti: 2.3.3 magic-string: ^0.30.11 nitro: npm:nitro-nightly@3.0.0-beta-28665895.e727afda nuxt: workspace:* + ohash: 1.1.4 postcss: 8.4.47 - rollup: 4.21.3 + rollup: 4.24.0 send: '>=0.19.0' - typescript: 5.6.2 + typescript: 5.6.3 ufo: 1.5.4 - unbuild: 3.0.0-rc.7 - vite: 5.4.5 - vue: 3.5.5 - -patchedDependencies: - ofetch@1.3.4: - hash: nxc3eojzwynarpj453xzxqr2f4 - path: patches/ofetch@1.3.4.patch + unbuild: 3.0.0-rc.11 + vite: 5.4.8 + vue: 3.5.11 importers: .: devDependencies: '@eslint/js': - specifier: 9.10.0 - version: 9.10.0 + specifier: 9.12.0 + version: 9.12.0 '@nuxt/eslint-config': specifier: 0.5.7 - version: 0.5.7(eslint@9.10.0(jiti@2.0.0-beta.3))(typescript@5.6.2) + version: 0.5.7(eslint@9.12.0(jiti@2.3.3))(typescript@5.6.3) '@nuxt/kit': specifier: workspace:* version: link:packages/kit + '@nuxt/rspack-builder': + specifier: workspace:* + version: link:packages/rspack '@nuxt/test-utils': - specifier: 3.14.2 - version: 3.14.2(@testing-library/vue@8.1.0(@vue/compiler-sfc@3.5.5)(vue@3.5.5(typescript@5.6.2)))(@vue/test-utils@2.4.6)(h3-nightly@2.0.0-1718872656.6765a6e)(happy-dom@15.7.4)(magicast@0.3.5)(nitropack@2.9.7(magicast@0.3.5)(webpack-sources@3.2.3))(playwright-core@1.47.1)(vite@5.4.5(@types/node@20.16.5)(sass@1.78.0)(terser@5.32.0))(vitest@2.1.1(@types/node@20.16.5)(happy-dom@15.7.4)(sass@1.78.0)(terser@5.32.0))(vue-router@4.4.5(vue@3.5.5(typescript@5.6.2)))(vue@3.5.5(typescript@5.6.2))(webpack-sources@3.2.3) + specifier: 3.14.3 + version: 3.14.3(@testing-library/vue@8.1.0(@vue/compiler-sfc@3.5.11)(vue@3.5.11(typescript@5.6.3)))(@vue/test-utils@2.4.6)(h3-nightly@2.0.0-1718872656.6765a6e)(happy-dom@15.7.4)(magicast@0.3.5)(nitropack@2.9.7(magicast@0.3.5)(webpack-sources@3.2.3))(playwright-core@1.48.0)(vite@5.4.8(@types/node@20.16.11)(sass@1.78.0)(terser@5.32.0))(vitest@2.1.2(@types/node@20.16.11)(happy-dom@15.7.4)(sass@1.78.0)(terser@5.32.0))(vue-router@4.4.5(vue@3.5.11(typescript@5.6.3)))(vue@3.5.11(typescript@5.6.3))(webpack-sources@3.2.3) '@nuxt/webpack-builder': specifier: workspace:* version: link:packages/webpack '@testing-library/vue': specifier: 8.1.0 - version: 8.1.0(@vue/compiler-sfc@3.5.5)(vue@3.5.5(typescript@5.6.2)) + version: 8.1.0(@vue/compiler-sfc@3.5.11)(vue@3.5.11(typescript@5.6.3)) '@types/eslint__js': specifier: 8.42.3 version: 8.42.3 '@types/node': - specifier: 20.16.5 - version: 20.16.5 + specifier: 20.16.11 + version: 20.16.11 '@types/semver': specifier: 7.5.8 version: 7.5.8 '@unhead/schema': - specifier: 1.11.6 - version: 1.11.6 + specifier: 1.11.7 + version: 1.11.7 '@unhead/vue': - specifier: 1.11.6 - version: 1.11.6(vue@3.5.5(typescript@5.6.2)) + specifier: 1.11.7 + version: 1.11.7(vue@3.5.11(typescript@5.6.3)) '@vitejs/plugin-vue': - specifier: 5.1.3 - version: 5.1.3(vite@5.4.5(@types/node@20.16.5)(sass@1.78.0)(terser@5.32.0))(vue@3.5.5(typescript@5.6.2)) + specifier: 5.1.4 + version: 5.1.4(vite@5.4.8(@types/node@20.16.11)(sass@1.78.0)(terser@5.32.0))(vue@3.5.11(typescript@5.6.3)) '@vitest/coverage-v8': - specifier: 2.1.1 - version: 2.1.1(vitest@2.1.1(@types/node@20.16.5)(happy-dom@15.7.4)(sass@1.78.0)(terser@5.32.0)) + specifier: 2.1.2 + version: 2.1.2(vitest@2.1.2(@types/node@20.16.11)(happy-dom@15.7.4)(sass@1.78.0)(terser@5.32.0)) '@vue/test-utils': specifier: 2.4.6 version: 2.4.6 @@ -84,8 +87,8 @@ importers: specifier: 0.7.0 version: 0.7.0 changelogen: - specifier: 0.5.5 - version: 0.5.5(magicast@0.3.5) + specifier: 0.5.7 + version: 0.5.7(magicast@0.3.5) consola: specifier: 3.2.3 version: 3.2.3 @@ -96,20 +99,20 @@ importers: specifier: 2.0.3 version: 2.0.3 devalue: - specifier: 5.0.0 - version: 5.0.0 + specifier: 5.1.1 + version: 5.1.1 eslint: - specifier: 9.10.0 - version: 9.10.0(jiti@2.0.0-beta.3) + specifier: 9.12.0 + version: 9.12.0(jiti@2.3.3) eslint-plugin-no-only-tests: specifier: 3.3.0 version: 3.3.0 eslint-plugin-perfectionist: - specifier: 3.6.0 - version: 3.6.0(eslint@9.10.0(jiti@2.0.0-beta.3))(typescript@5.6.2)(vue-eslint-parser@9.4.3(eslint@9.10.0(jiti@2.0.0-beta.3))) + specifier: 3.8.0 + version: 3.8.0(eslint@9.12.0(jiti@2.3.3))(typescript@5.6.3)(vue-eslint-parser@9.4.3(eslint@9.12.0(jiti@2.3.3))) eslint-typegen: specifier: 0.3.2 - version: 0.3.2(eslint@9.10.0(jiti@2.0.0-beta.3)) + version: 0.3.2(eslint@9.12.0(jiti@2.3.3)) h3: specifier: npm:h3-nightly@2.0.0-1718872656.6765a6e version: h3-nightly@2.0.0-1718872656.6765a6e @@ -117,17 +120,17 @@ importers: specifier: 15.7.4 version: 15.7.4 jiti: - specifier: 2.0.0-beta.3 - version: 2.0.0-beta.3 + specifier: 2.3.3 + version: 2.3.3 markdownlint-cli: - specifier: 0.41.0 - version: 0.41.0 + specifier: 0.42.0 + version: 0.42.0 nitro: specifier: npm:nitro-nightly@3.0.0-beta-28665895.e727afda - version: nitro-nightly@3.0.0-beta-28665895.e727afda(typescript@5.6.2)(webpack-sources@3.2.3) + version: nitro-nightly@3.0.0-beta-28665895.e727afda(typescript@5.6.3)(webpack-sources@3.2.3) nuxi: - specifier: 3.13.2 - version: 3.13.2 + specifier: 3.14.0 + version: 3.14.0 nuxt: specifier: workspace:* version: link:packages/nuxt @@ -135,14 +138,14 @@ importers: specifier: 0.1.1 version: 0.1.1(@nuxtjs/mdc@0.8.3(webpack-sources@3.2.3)) ofetch: - specifier: 1.3.4 - version: 1.3.4(patch_hash=nxc3eojzwynarpj453xzxqr2f4) + specifier: 1.4.1 + version: 1.4.1 pathe: specifier: 1.1.2 version: 1.1.2 playwright-core: - specifier: 1.47.1 - version: 1.47.1 + specifier: 1.48.0 + version: 1.48.0 rimraf: specifier: 6.0.1 version: 6.0.1 @@ -159,29 +162,29 @@ importers: specifier: 0.3.0 version: 0.3.0 tinyglobby: - specifier: 0.2.6 - version: 0.2.6 + specifier: 0.2.9 + version: 0.2.9 typescript: - specifier: 5.6.2 - version: 5.6.2 + specifier: 5.6.3 + version: 5.6.3 ufo: specifier: 1.5.4 version: 1.5.4 vitest: - specifier: 2.1.1 - version: 2.1.1(@types/node@20.16.5)(happy-dom@15.7.4)(sass@1.78.0)(terser@5.32.0) + specifier: 2.1.2 + version: 2.1.2(@types/node@20.16.11)(happy-dom@15.7.4)(sass@1.78.0)(terser@5.32.0) vitest-environment-nuxt: specifier: 1.0.1 - version: 1.0.1(@testing-library/vue@8.1.0(@vue/compiler-sfc@3.5.5)(vue@3.5.5(typescript@5.6.2)))(@vue/test-utils@2.4.6)(h3-nightly@2.0.0-1718872656.6765a6e)(happy-dom@15.7.4)(magicast@0.3.5)(nitropack@2.9.7(magicast@0.3.5)(webpack-sources@3.2.3))(playwright-core@1.47.1)(vite@5.4.5(@types/node@20.16.5)(sass@1.78.0)(terser@5.32.0))(vitest@2.1.1(@types/node@20.16.5)(happy-dom@15.7.4)(sass@1.78.0)(terser@5.32.0))(vue-router@4.4.5(vue@3.5.5(typescript@5.6.2)))(vue@3.5.5(typescript@5.6.2))(webpack-sources@3.2.3) + version: 1.0.1(@testing-library/vue@8.1.0(@vue/compiler-sfc@3.5.11)(vue@3.5.11(typescript@5.6.3)))(@vue/test-utils@2.4.6)(h3-nightly@2.0.0-1718872656.6765a6e)(happy-dom@15.7.4)(magicast@0.3.5)(nitropack@2.9.7(magicast@0.3.5)(webpack-sources@3.2.3))(playwright-core@1.48.0)(vite@5.4.8(@types/node@20.16.11)(sass@1.78.0)(terser@5.32.0))(vitest@2.1.2(@types/node@20.16.11)(happy-dom@15.7.4)(sass@1.78.0)(terser@5.32.0))(vue-router@4.4.5(vue@3.5.11(typescript@5.6.3)))(vue@3.5.11(typescript@5.6.3))(webpack-sources@3.2.3) vue: - specifier: 3.5.5 - version: 3.5.5(typescript@5.6.2) + specifier: 3.5.11 + version: 3.5.11(typescript@5.6.3) vue-router: specifier: 4.4.5 - version: 4.4.5(vue@3.5.5(typescript@5.6.2)) + version: 4.4.5(vue@3.5.11(typescript@5.6.3)) vue-tsc: specifier: 2.1.6 - version: 2.1.6(typescript@5.6.2) + version: 2.1.6(typescript@5.6.3) packages/kit: dependencies: @@ -189,8 +192,8 @@ importers: specifier: workspace:* version: link:../schema c12: - specifier: 2.0.0-beta.2 - version: 2.0.0-beta.2(magicast@0.3.5) + specifier: 2.0.1 + version: 2.0.1(magicast@0.3.5) consola: specifier: ^3.2.3 version: 3.2.3 @@ -210,23 +213,23 @@ importers: specifier: ^2.0.0 version: 2.0.0 ignore: - specifier: ^5.3.2 - version: 5.3.2 + specifier: ^6.0.2 + version: 6.0.2 jiti: - specifier: 2.0.0-beta.3 - version: 2.0.0-beta.3 + specifier: 2.3.3 + version: 2.3.3 klona: specifier: ^2.0.6 version: 2.0.6 mlly: - specifier: ^1.7.1 - version: 1.7.1 + specifier: ^1.7.2 + version: 1.7.2 pathe: specifier: ^1.1.2 version: 1.1.2 pkg-types: - specifier: ^1.2.0 - version: 1.2.0 + specifier: ^1.2.1 + version: 1.2.1 scule: specifier: ^1.3.0 version: 1.3.0 @@ -240,12 +243,15 @@ importers: specifier: ^2.3.1 version: 2.3.1(webpack-sources@3.2.3) unimport: - specifier: ^3.12.0 - version: 3.12.0(rollup@4.21.3)(webpack-sources@3.2.3) + specifier: ^3.13.1 + version: 3.13.1(rollup@4.24.0)(webpack-sources@3.2.3) untyped: - specifier: ^1.4.2 - version: 1.4.2 + specifier: ^1.5.1 + version: 1.5.1 devDependencies: + '@rspack/core': + specifier: 1.0.8 + version: 1.0.8 '@types/hash-sum': specifier: 1.0.2 version: 1.0.2 @@ -254,19 +260,19 @@ importers: version: 7.5.8 nitro: specifier: npm:nitro-nightly@3.0.0-beta-28665895.e727afda - version: nitro-nightly@3.0.0-beta-28665895.e727afda(typescript@5.6.2)(webpack-sources@3.2.3) + version: nitro-nightly@3.0.0-beta-28665895.e727afda(typescript@5.6.3)(webpack-sources@3.2.3) unbuild: - specifier: 3.0.0-rc.7 - version: 3.0.0-rc.7(sass@1.78.0)(typescript@5.6.2)(vue-tsc@2.1.6(typescript@5.6.2)) + specifier: 3.0.0-rc.11 + version: 3.0.0-rc.11(sass@1.78.0)(typescript@5.6.3)(vue-tsc@2.1.6(typescript@5.6.3)) vite: - specifier: 5.4.5 - version: 5.4.5(@types/node@20.16.5)(sass@1.78.0)(terser@5.32.0) + specifier: 5.4.8 + version: 5.4.8(@types/node@20.16.11)(sass@1.78.0)(terser@5.32.0) vitest: - specifier: 2.1.1 - version: 2.1.1(@types/node@20.16.5)(happy-dom@15.7.4)(sass@1.78.0)(terser@5.32.0) + specifier: 2.1.2 + version: 2.1.2(@types/node@20.16.11)(happy-dom@15.7.4)(sass@1.78.0)(terser@5.32.0) webpack: - specifier: 5.94.0 - version: 5.94.0 + specifier: 5.95.0 + version: 5.95.0 packages/nuxt: dependencies: @@ -274,8 +280,8 @@ importers: specifier: ^2.0.2 version: 2.0.2 '@nuxt/devtools': - specifier: ^1.4.2 - version: 1.4.2(rollup@4.21.3)(vite@5.4.5(@types/node@20.16.5)(sass@1.78.0)(terser@5.32.0))(vue@3.5.5(typescript@5.6.2))(webpack-sources@3.2.3) + specifier: ^1.5.2 + version: 1.5.2(rollup@4.24.0)(vite@5.4.8(@types/node@20.16.11)(sass@1.78.0)(terser@5.32.0))(vue@3.5.11(typescript@5.6.3))(webpack-sources@3.2.3) '@nuxt/kit': specifier: workspace:* version: link:../kit @@ -289,32 +295,32 @@ importers: specifier: workspace:* version: link:../vite '@types/node': - specifier: 20.16.5 - version: 20.16.5 + specifier: 20.16.11 + version: 20.16.11 '@unhead/dom': - specifier: ^1.11.6 - version: 1.11.6 + specifier: ^1.11.7 + version: 1.11.7 '@unhead/shared': - specifier: ^1.11.6 - version: 1.11.6 + specifier: ^1.11.7 + version: 1.11.7 '@unhead/ssr': - specifier: ^1.11.6 - version: 1.11.6 + specifier: ^1.11.7 + version: 1.11.7 '@unhead/vue': - specifier: ^1.11.6 - version: 1.11.6(vue@3.5.5(typescript@5.6.2)) + specifier: ^1.11.7 + version: 1.11.7(vue@3.5.11(typescript@5.6.3)) '@vue/shared': - specifier: ^3.5.5 - version: 3.5.5 + specifier: 3.5.11 + version: 3.5.11 acorn: specifier: 8.12.1 version: 8.12.1 c12: - specifier: 2.0.0-beta.2 - version: 2.0.0-beta.2(magicast@0.3.5) + specifier: 2.0.1 + version: 2.0.1(magicast@0.3.5) chokidar: - specifier: ^3.6.0 - version: 3.6.0 + specifier: ^4.0.1 + version: 4.0.1 compatx: specifier: ^0.1.8 version: 0.1.8 @@ -331,14 +337,14 @@ importers: specifier: ^2.0.3 version: 2.0.3 devalue: - specifier: ^5.0.0 - version: 5.0.0 + specifier: ^5.1.1 + version: 5.1.1 errx: specifier: ^0.1.0 version: 0.1.0 esbuild: - specifier: ^0.23.1 - version: 0.23.1 + specifier: ^0.24.0 + version: 0.24.0 escape-string-regexp: specifier: ^5.0.0 version: 5.0.0 @@ -355,14 +361,14 @@ importers: specifier: ^5.5.3 version: 5.5.3 ignore: - specifier: ^5.3.2 - version: 5.3.2 + specifier: ^6.0.2 + version: 6.0.2 impound: specifier: ^0.1.0 - version: 0.1.0(rollup@4.21.3)(webpack-sources@3.2.3) + version: 0.1.0(rollup@4.24.0)(webpack-sources@3.2.3) jiti: - specifier: 2.0.0-beta.3 - version: 2.0.0-beta.3 + specifier: 2.3.3 + version: 2.3.3 klona: specifier: ^2.0.6 version: 2.0.6 @@ -373,25 +379,25 @@ importers: specifier: ^0.30.11 version: 0.30.11 mlly: - specifier: ^1.7.1 - version: 1.7.1 + specifier: ^1.7.2 + version: 1.7.2 nanotar: specifier: ^0.1.1 version: 0.1.1 nitro: specifier: npm:nitro-nightly@3.0.0-beta-28665895.e727afda - version: nitro-nightly@3.0.0-beta-28665895.e727afda(typescript@5.6.2)(webpack-sources@3.2.3) + version: nitro-nightly@3.0.0-beta-28665895.e727afda(typescript@5.6.3)(webpack-sources@3.2.3) nuxi: - specifier: ^3.13.2 - version: 3.13.2 + specifier: ^3.14.0 + version: 3.14.0 nypm: - specifier: ^0.3.11 - version: 0.3.11 + specifier: ^0.3.12 + version: 0.3.12 ofetch: - specifier: ^1.3.4 - version: 1.3.4(patch_hash=nxc3eojzwynarpj453xzxqr2f4) + specifier: ^1.4.1 + version: 1.4.1 ohash: - specifier: ^1.1.4 + specifier: 1.1.4 version: 1.1.4 pathe: specifier: ^1.1.2 @@ -400,8 +406,8 @@ importers: specifier: ^1.0.0 version: 1.0.0 pkg-types: - specifier: ^1.2.0 - version: 1.2.0 + specifier: ^1.2.1 + version: 1.2.1 radix3: specifier: ^1.1.2 version: 1.1.2 @@ -418,8 +424,8 @@ importers: specifier: ^2.1.0 version: 2.1.0 tinyglobby: - specifier: 0.2.6 - version: 0.2.6 + specifier: 0.2.9 + version: 0.2.9 ufo: specifier: 1.5.4 version: 1.5.4 @@ -436,39 +442,39 @@ importers: specifier: ^1.10.0 version: 1.10.0 unhead: - specifier: ^1.11.6 - version: 1.11.6 + specifier: ^1.11.7 + version: 1.11.7 unimport: - specifier: ^3.12.0 - version: 3.12.0(rollup@4.21.3)(webpack-sources@3.2.3) + specifier: ^3.13.1 + version: 3.13.1(rollup@4.24.0)(webpack-sources@3.2.3) unplugin: specifier: ^1.14.1 version: 1.14.1(webpack-sources@3.2.3) unplugin-vue-router: specifier: ^0.10.8 - version: 0.10.8(rollup@4.21.3)(vue-router@4.4.5(vue@3.5.5(typescript@5.6.2)))(vue@3.5.5(typescript@5.6.2))(webpack-sources@3.2.3) + version: 0.10.8(rollup@4.24.0)(vue-router@4.4.5(vue@3.5.11(typescript@5.6.3)))(vue@3.5.11(typescript@5.6.3))(webpack-sources@3.2.3) unstorage: specifier: ^1.12.0 version: 1.12.0(ioredis@5.4.1) untyped: - specifier: ^1.4.2 - version: 1.4.2 + specifier: ^1.5.1 + version: 1.5.1 vue: - specifier: 3.5.5 - version: 3.5.5(typescript@5.6.2) + specifier: 3.5.11 + version: 3.5.11(typescript@5.6.3) vue-bundle-renderer: - specifier: ^2.1.0 - version: 2.1.0 + specifier: ^2.1.1 + version: 2.1.1 vue-devtools-stub: specifier: ^0.1.0 version: 0.1.0 vue-router: specifier: ^4.4.5 - version: 4.4.5(vue@3.5.5(typescript@5.6.2)) + version: 4.4.5(vue@3.5.11(typescript@5.6.3)) devDependencies: '@nuxt/scripts': - specifier: 0.9.2 - version: 0.9.2(@nuxt/devtools@1.4.2(rollup@4.21.3)(vite@5.4.5(@types/node@20.16.5)(sass@1.78.0)(terser@5.32.0))(vue@3.5.5(typescript@5.6.2))(webpack-sources@3.2.3))(@unocss/webpack@0.62.3(rollup@4.21.3)(webpack@5.94.0(esbuild@0.23.1)))(@vue/compiler-core@3.5.5)(change-case@5.4.4)(ioredis@5.4.1)(nuxt@packages+nuxt)(postcss@8.4.47)(rollup@4.21.3)(typescript@5.6.2)(vite@5.4.5(@types/node@20.16.5)(sass@1.78.0)(terser@5.32.0))(vue@3.5.5(typescript@5.6.2))(webpack-sources@3.2.3)(webpack@5.94.0(esbuild@0.23.1)) + specifier: 0.9.4 + version: 0.9.4(@nuxt/devtools@1.5.2(rollup@4.24.0)(vite@5.4.8(@types/node@20.16.11)(sass@1.78.0)(terser@5.32.0))(vue@3.5.11(typescript@5.6.3))(webpack-sources@3.2.3))(@unocss/webpack@0.62.4(rollup@4.24.0)(webpack@5.95.0(esbuild@0.24.0)))(@vue/compiler-core@3.5.11)(change-case@5.4.4)(ioredis@5.4.1)(nuxt@packages+nuxt)(postcss@8.4.47)(rollup@4.24.0)(typescript@5.6.3)(vite@5.4.8(@types/node@20.16.11)(sass@1.78.0)(terser@5.32.0))(vue@3.5.11(typescript@5.6.3))(webpack-sources@3.2.3)(webpack@5.95.0(esbuild@0.24.0)) '@nuxt/ui-templates': specifier: workspace:* version: link:../ui-templates @@ -476,328 +482,44 @@ importers: specifier: 2.4.1 version: 2.4.1 '@types/estree': - specifier: 1.0.5 - version: 1.0.5 + specifier: 1.0.6 + version: 1.0.6 '@vitejs/plugin-vue': - specifier: 5.1.3 - version: 5.1.3(vite@5.4.5(@types/node@20.16.5)(sass@1.78.0)(terser@5.32.0))(vue@3.5.5(typescript@5.6.2)) + specifier: 5.1.4 + version: 5.1.4(vite@5.4.8(@types/node@20.16.11)(sass@1.78.0)(terser@5.32.0))(vue@3.5.11(typescript@5.6.3)) '@vue/compiler-sfc': - specifier: 3.5.5 - version: 3.5.5 + specifier: 3.5.11 + version: 3.5.11 unbuild: - specifier: 3.0.0-rc.7 - version: 3.0.0-rc.7(sass@1.78.0)(typescript@5.6.2)(vue-tsc@2.1.6(typescript@5.6.2)) + specifier: 3.0.0-rc.11 + version: 3.0.0-rc.11(sass@1.78.0)(typescript@5.6.3)(vue-tsc@2.1.6(typescript@5.6.3)) vite: - specifier: 5.4.5 - version: 5.4.5(@types/node@20.16.5)(sass@1.78.0)(terser@5.32.0) + specifier: 5.4.8 + version: 5.4.8(@types/node@20.16.11)(sass@1.78.0)(terser@5.32.0) vitest: - specifier: 2.1.1 - version: 2.1.1(@types/node@20.16.5)(happy-dom@15.7.4)(sass@1.78.0)(terser@5.32.0) + specifier: 2.1.2 + version: 2.1.2(@types/node@20.16.11)(happy-dom@15.7.4)(sass@1.78.0)(terser@5.32.0) - packages/schema: - dependencies: - compatx: - specifier: ^0.1.8 - version: 0.1.8 - consola: - specifier: ^3.2.3 - version: 3.2.3 - defu: - specifier: ^6.1.4 - version: 6.1.4 - hookable: - specifier: ^5.5.3 - version: 5.5.3 - pathe: - specifier: ^1.1.2 - version: 1.1.2 - pkg-types: - specifier: ^1.2.0 - version: 1.2.0 - scule: - specifier: ^1.3.0 - version: 1.3.0 - std-env: - specifier: ^3.7.0 - version: 3.7.0 - ufo: - specifier: 1.5.4 - version: 1.5.4 - uncrypto: - specifier: ^0.1.3 - version: 0.1.3 - unimport: - specifier: ^3.12.0 - version: 3.12.0(rollup@4.21.3)(webpack-sources@3.2.3) - untyped: - specifier: ^1.4.2 - version: 1.4.2 - devDependencies: - '@nuxt/telemetry': - specifier: 2.6.0 - version: 2.6.0 - '@nuxt/ui-templates': - specifier: workspace:* - version: link:../ui-templates - '@types/file-loader': - specifier: 5.0.4 - version: 5.0.4 - '@types/pug': - specifier: 2.0.10 - version: 2.0.10 - '@types/sass-loader': - specifier: 8.0.9 - version: 8.0.9 - '@unhead/schema': - specifier: 1.11.6 - version: 1.11.6 - '@vitejs/plugin-vue': - specifier: 5.1.3 - version: 5.1.3(vite@5.4.5(@types/node@20.16.5)(sass@1.78.0)(terser@5.32.0))(vue@3.5.5(typescript@5.6.2)) - '@vitejs/plugin-vue-jsx': - specifier: 4.0.1 - version: 4.0.1(vite@5.4.5(@types/node@20.16.5)(sass@1.78.0)(terser@5.32.0))(vue@3.5.5(typescript@5.6.2)) - '@vue/compiler-core': - specifier: 3.5.5 - version: 3.5.5 - '@vue/compiler-sfc': - specifier: 3.5.5 - version: 3.5.5 - '@vue/language-core': - specifier: 2.1.6 - version: 2.1.6(typescript@5.6.2) - c12: - specifier: 2.0.0-beta.2 - version: 2.0.0-beta.2(magicast@0.3.5) - esbuild-loader: - specifier: 4.2.2 - version: 4.2.2(webpack@5.94.0) - h3: - specifier: npm:h3-nightly@2.0.0-1718872656.6765a6e - version: h3-nightly@2.0.0-1718872656.6765a6e - ignore: - specifier: 5.3.2 - version: 5.3.2 - nitro: - specifier: npm:nitro-nightly@3.0.0-beta-28665895.e727afda - version: nitro-nightly@3.0.0-beta-28665895.e727afda(typescript@5.6.2)(webpack-sources@3.2.3) - ofetch: - specifier: 1.3.4 - version: 1.3.4(patch_hash=nxc3eojzwynarpj453xzxqr2f4) - unbuild: - specifier: 3.0.0-rc.7 - version: 3.0.0-rc.7(sass@1.78.0)(typescript@5.6.2)(vue-tsc@2.1.6(typescript@5.6.2)) - unctx: - specifier: 2.3.1 - version: 2.3.1(webpack-sources@3.2.3) - unenv: - specifier: 1.10.0 - version: 1.10.0 - vite: - specifier: 5.4.5 - version: 5.4.5(@types/node@20.16.5)(sass@1.78.0)(terser@5.32.0) - vue: - specifier: 3.5.5 - version: 3.5.5(typescript@5.6.2) - vue-bundle-renderer: - specifier: 2.1.0 - version: 2.1.0 - vue-loader: - specifier: 17.4.2 - version: 17.4.2(@vue/compiler-sfc@3.5.5)(vue@3.5.5(typescript@5.6.2))(webpack@5.94.0) - vue-router: - specifier: 4.4.5 - version: 4.4.5(vue@3.5.5(typescript@5.6.2)) - webpack: - specifier: 5.94.0 - version: 5.94.0 - webpack-dev-middleware: - specifier: 7.4.2 - version: 7.4.2(webpack@5.94.0) - - packages/ui-templates: - devDependencies: - '@unocss/reset': - specifier: 0.62.3 - version: 0.62.3 - critters: - specifier: 0.0.24 - version: 0.0.24 - html-validate: - specifier: 8.22.0 - version: 8.22.0(vitest@1.6.0(@types/node@20.16.5)(happy-dom@15.7.4)(sass@1.78.0)(terser@5.32.0)) - htmlnano: - specifier: 2.1.1 - version: 2.1.1(cssnano@7.0.6(postcss@8.4.47))(postcss@8.4.47)(relateurl@0.2.7)(svgo@3.3.2)(terser@5.32.0)(typescript@5.6.2) - jiti: - specifier: 2.0.0-beta.3 - version: 2.0.0-beta.3 - knitwork: - specifier: 1.1.0 - version: 1.1.0 - pathe: - specifier: 1.1.2 - version: 1.1.2 - prettier: - specifier: 3.3.3 - version: 3.3.3 - scule: - specifier: 1.3.0 - version: 1.3.0 - tinyexec: - specifier: 0.3.0 - version: 0.3.0 - tinyglobby: - specifier: 0.2.6 - version: 0.2.6 - unocss: - specifier: 0.62.3 - version: 0.62.3(@unocss/webpack@0.62.3(rollup@4.21.3)(webpack@5.94.0(esbuild@0.23.1)))(postcss@8.4.47)(rollup@4.21.3)(vite@5.4.5(@types/node@20.16.5)(sass@1.78.0)(terser@5.32.0)) - vite: - specifier: 5.4.5 - version: 5.4.5(@types/node@20.16.5)(sass@1.78.0)(terser@5.32.0) - - packages/vite: - dependencies: - '@nuxt/kit': - specifier: workspace:* - version: link:../kit - '@rollup/plugin-replace': - specifier: ^5.0.7 - version: 5.0.7(rollup@4.21.3) - '@vitejs/plugin-vue': - specifier: ^5.1.3 - version: 5.1.3(vite@5.4.5(@types/node@20.16.5)(sass@1.78.0)(terser@5.32.0))(vue@3.5.5(typescript@5.6.2)) - '@vitejs/plugin-vue-jsx': - specifier: ^4.0.1 - version: 4.0.1(vite@5.4.5(@types/node@20.16.5)(sass@1.78.0)(terser@5.32.0))(vue@3.5.5(typescript@5.6.2)) - autoprefixer: - specifier: ^10.4.20 - version: 10.4.20(postcss@8.4.47) - clear: - specifier: ^0.1.0 - version: 0.1.0 - consola: - specifier: ^3.2.3 - version: 3.2.3 - cssnano: - specifier: ^7.0.6 - version: 7.0.6(postcss@8.4.47) - defu: - specifier: ^6.1.4 - version: 6.1.4 - esbuild: - specifier: ^0.23.1 - version: 0.23.1 - escape-string-regexp: - specifier: ^5.0.0 - version: 5.0.0 - estree-walker: - specifier: ^3.0.3 - version: 3.0.3 - externality: - specifier: ^1.0.2 - version: 1.0.2 - get-port-please: - specifier: ^3.1.2 - version: 3.1.2 - h3: - specifier: npm:h3-nightly@2.0.0-1718872656.6765a6e - version: h3-nightly@2.0.0-1718872656.6765a6e - jiti: - specifier: 2.0.0-beta.3 - version: 2.0.0-beta.3 - knitwork: - specifier: ^1.1.0 - version: 1.1.0 - magic-string: - specifier: ^0.30.11 - version: 0.30.11 - mlly: - specifier: ^1.7.1 - version: 1.7.1 - ohash: - specifier: ^1.1.4 - version: 1.1.4 - pathe: - specifier: ^1.1.2 - version: 1.1.2 - perfect-debounce: - specifier: ^1.0.0 - version: 1.0.0 - pkg-types: - specifier: ^1.2.0 - version: 1.2.0 - postcss: - specifier: 8.4.47 - version: 8.4.47 - rollup-plugin-visualizer: - specifier: ^5.12.0 - version: 5.12.0(rollup@4.21.3) - std-env: - specifier: ^3.7.0 - version: 3.7.0 - strip-literal: - specifier: ^2.1.0 - version: 2.1.0 - ufo: - specifier: 1.5.4 - version: 1.5.4 - unenv: - specifier: ^1.10.0 - version: 1.10.0 - unplugin: - specifier: ^1.14.1 - version: 1.14.1(webpack-sources@3.2.3) - vite: - specifier: 5.4.5 - version: 5.4.5(@types/node@20.16.5)(sass@1.78.0)(terser@5.32.0) - vite-node: - specifier: ^2.1.1 - version: 2.1.1(@types/node@20.16.5)(sass@1.78.0)(terser@5.32.0) - vite-plugin-checker: - specifier: ^0.8.0 - version: 0.8.0(eslint@9.10.0(jiti@2.0.0-beta.3))(optionator@0.9.4)(typescript@5.6.2)(vite@5.4.5(@types/node@20.16.5)(sass@1.78.0)(terser@5.32.0))(vue-tsc@2.1.6(typescript@5.6.2)) - vue-bundle-renderer: - specifier: ^2.1.0 - version: 2.1.0 - devDependencies: - '@nuxt/schema': - specifier: workspace:* - version: link:../schema - '@types/clear': - specifier: 0.1.4 - version: 0.1.4 - '@types/estree': - specifier: 1.0.5 - version: 1.0.5 - rollup: - specifier: 4.21.3 - version: 4.21.3 - unbuild: - specifier: 3.0.0-rc.7 - version: 3.0.0-rc.7(sass@1.78.0)(typescript@5.6.2)(vue-tsc@2.1.6(typescript@5.6.2)) - vue: - specifier: 3.5.5 - version: 3.5.5(typescript@5.6.2) - - packages/webpack: + packages/rspack: dependencies: '@nuxt/friendly-errors-webpack-plugin': specifier: ^2.6.0 - version: 2.6.0(webpack@5.94.0) + version: 2.6.0(webpack@5.95.0) '@nuxt/kit': specifier: workspace:* version: link:../kit + '@rspack/core': + specifier: ^1.0.8 + version: 1.0.8 autoprefixer: specifier: ^10.4.20 version: 10.4.20(postcss@8.4.47) css-loader: specifier: ^7.1.2 - version: 7.1.2(webpack@5.94.0) + version: 7.1.2(@rspack/core@1.0.8)(webpack@5.95.0) css-minimizer-webpack-plugin: specifier: ^7.0.0 - version: 7.0.0(webpack@5.94.0) + version: 7.0.0(webpack@5.95.0) cssnano: specifier: ^7.0.6 version: 7.0.6(postcss@8.4.47) @@ -806,7 +528,7 @@ importers: version: 6.1.4 esbuild-loader: specifier: ^4.2.2 - version: 4.2.2(webpack@5.94.0) + version: 4.2.2(webpack@5.95.0) escape-string-regexp: specifier: ^5.0.0 version: 5.0.0 @@ -815,10 +537,10 @@ importers: version: 3.0.3 file-loader: specifier: ^6.2.0 - version: 6.2.0(webpack@5.94.0) + version: 6.2.0(webpack@5.95.0) fork-ts-checker-webpack-plugin: specifier: ^9.0.2 - version: 9.0.2(typescript@5.6.2)(webpack@5.94.0) + version: 9.0.2(typescript@5.6.3)(webpack@5.95.0) globby: specifier: ^14.0.2 version: 14.0.2 @@ -829,8 +551,8 @@ importers: specifier: ^2.0.0 version: 2.0.0 jiti: - specifier: 2.0.0-beta.3 - version: 2.0.0-beta.3 + specifier: 2.3.3 + version: 2.3.3 knitwork: specifier: ^1.1.0 version: 1.1.0 @@ -841,16 +563,13 @@ importers: specifier: ^0.30.11 version: 0.30.11 memfs: - specifier: ^4.11.1 - version: 4.11.1 - mini-css-extract-plugin: - specifier: ^2.9.1 - version: 2.9.1(webpack@5.94.0) + specifier: ^4.13.0 + version: 4.13.0 mlly: - specifier: ^1.7.1 - version: 1.7.1 + specifier: ^1.7.2 + version: 1.7.2 ohash: - specifier: ^1.1.4 + specifier: 1.1.4 version: 1.1.4 pathe: specifier: ^1.1.2 @@ -869,7 +588,7 @@ importers: version: 2.0.0 postcss-loader: specifier: ^8.1.1 - version: 8.1.1(postcss@8.4.47)(typescript@5.6.2)(webpack@5.94.0) + version: 8.1.1(@rspack/core@1.0.8)(postcss@8.4.47)(typescript@5.6.3)(webpack@5.95.0) postcss-url: specifier: ^10.1.3 version: 10.1.3(postcss@8.4.47) @@ -881,7 +600,7 @@ importers: version: 3.7.0 time-fix-plugin: specifier: ^2.0.7 - version: 2.0.7(webpack@5.94.0) + version: 2.0.7(webpack@5.95.0) ufo: specifier: 1.5.4 version: 1.5.4 @@ -893,22 +612,19 @@ importers: version: 1.14.1(webpack-sources@3.2.3) url-loader: specifier: ^4.1.1 - version: 4.1.1(file-loader@6.2.0(webpack@5.94.0))(webpack@5.94.0) + version: 4.1.1(file-loader@6.2.0(webpack@5.95.0))(webpack@5.95.0) vue-bundle-renderer: - specifier: ^2.1.0 - version: 2.1.0 + specifier: ^2.1.1 + version: 2.1.1 vue-loader: specifier: ^17.4.2 - version: 17.4.2(@vue/compiler-sfc@3.5.5)(vue@3.5.5(typescript@5.6.2))(webpack@5.94.0) - webpack: - specifier: ^5.94.0 - version: 5.94.0 + version: 17.4.2(@vue/compiler-sfc@3.5.11)(vue@3.5.11(typescript@5.6.3))(webpack@5.95.0) webpack-bundle-analyzer: specifier: ^4.10.2 version: 4.10.2 webpack-dev-middleware: specifier: ^7.4.2 - version: 7.4.2(webpack@5.94.0) + version: 7.4.2(webpack@5.95.0) webpack-hot-middleware: specifier: ^2.26.1 version: 2.26.1 @@ -917,7 +633,7 @@ importers: version: 0.6.2 webpackbar: specifier: ^6.0.1 - version: 6.0.1(webpack@5.94.0) + version: 6.0.1(webpack@5.95.0) devDependencies: '@nuxt/schema': specifier: workspace:* @@ -938,14 +654,467 @@ importers: specifier: 2.25.9 version: 2.25.9 rollup: - specifier: 4.21.3 - version: 4.21.3 + specifier: 4.24.0 + version: 4.24.0 unbuild: - specifier: 3.0.0-rc.7 - version: 3.0.0-rc.7(sass@1.78.0)(typescript@5.6.2)(vue-tsc@2.1.6(typescript@5.6.2)) + specifier: 3.0.0-rc.11 + version: 3.0.0-rc.11(sass@1.78.0)(typescript@5.6.3)(vue-tsc@2.1.6(typescript@5.6.3)) vue: - specifier: 3.5.5 - version: 3.5.5(typescript@5.6.2) + specifier: 3.5.11 + version: 3.5.11(typescript@5.6.3) + + packages/schema: + dependencies: + compatx: + specifier: ^0.1.8 + version: 0.1.8 + consola: + specifier: ^3.2.3 + version: 3.2.3 + defu: + specifier: ^6.1.4 + version: 6.1.4 + hookable: + specifier: ^5.5.3 + version: 5.5.3 + pathe: + specifier: ^1.1.2 + version: 1.1.2 + pkg-types: + specifier: ^1.2.1 + version: 1.2.1 + scule: + specifier: ^1.3.0 + version: 1.3.0 + std-env: + specifier: ^3.7.0 + version: 3.7.0 + ufo: + specifier: 1.5.4 + version: 1.5.4 + uncrypto: + specifier: ^0.1.3 + version: 0.1.3 + unimport: + specifier: ^3.13.1 + version: 3.13.1(rollup@4.24.0)(webpack-sources@3.2.3) + untyped: + specifier: ^1.5.1 + version: 1.5.1 + devDependencies: + '@nuxt/telemetry': + specifier: 2.6.0 + version: 2.6.0 + '@nuxt/ui-templates': + specifier: workspace:* + version: link:../ui-templates + '@types/file-loader': + specifier: 5.0.4 + version: 5.0.4 + '@types/pug': + specifier: 2.0.10 + version: 2.0.10 + '@types/sass-loader': + specifier: 8.0.9 + version: 8.0.9 + '@unhead/schema': + specifier: 1.11.7 + version: 1.11.7 + '@vitejs/plugin-vue': + specifier: 5.1.4 + version: 5.1.4(vite@5.4.8(@types/node@20.16.11)(sass@1.78.0)(terser@5.32.0))(vue@3.5.11(typescript@5.6.3)) + '@vitejs/plugin-vue-jsx': + specifier: 4.0.1 + version: 4.0.1(vite@5.4.8(@types/node@20.16.11)(sass@1.78.0)(terser@5.32.0))(vue@3.5.11(typescript@5.6.3)) + '@vue/compiler-core': + specifier: 3.5.11 + version: 3.5.11 + '@vue/compiler-sfc': + specifier: 3.5.11 + version: 3.5.11 + '@vue/language-core': + specifier: 2.1.6 + version: 2.1.6(typescript@5.6.3) + c12: + specifier: 2.0.1 + version: 2.0.1(magicast@0.3.5) + esbuild-loader: + specifier: 4.2.2 + version: 4.2.2(webpack@5.95.0) + h3: + specifier: npm:h3-nightly@2.0.0-1718872656.6765a6e + version: h3-nightly@2.0.0-1718872656.6765a6e + ignore: + specifier: 6.0.2 + version: 6.0.2 + nitro: + specifier: npm:nitro-nightly@3.0.0-beta-28665895.e727afda + version: nitro-nightly@3.0.0-beta-28665895.e727afda(typescript@5.6.3)(webpack-sources@3.2.3) + ofetch: + specifier: 1.4.1 + version: 1.4.1 + unbuild: + specifier: 3.0.0-rc.11 + version: 3.0.0-rc.11(sass@1.78.0)(typescript@5.6.3)(vue-tsc@2.1.6(typescript@5.6.3)) + unctx: + specifier: 2.3.1 + version: 2.3.1(webpack-sources@3.2.3) + unenv: + specifier: 1.10.0 + version: 1.10.0 + vite: + specifier: 5.4.8 + version: 5.4.8(@types/node@20.16.11)(sass@1.78.0)(terser@5.32.0) + vue: + specifier: 3.5.11 + version: 3.5.11(typescript@5.6.3) + vue-bundle-renderer: + specifier: 2.1.1 + version: 2.1.1 + vue-loader: + specifier: 17.4.2 + version: 17.4.2(@vue/compiler-sfc@3.5.11)(vue@3.5.11(typescript@5.6.3))(webpack@5.95.0) + vue-router: + specifier: 4.4.5 + version: 4.4.5(vue@3.5.11(typescript@5.6.3)) + webpack: + specifier: 5.95.0 + version: 5.95.0 + webpack-dev-middleware: + specifier: 7.4.2 + version: 7.4.2(webpack@5.95.0) + + packages/ui-templates: + devDependencies: + '@unocss/reset': + specifier: 0.63.4 + version: 0.63.4 + critters: + specifier: 0.0.24 + version: 0.0.24 + html-validate: + specifier: 8.24.1 + version: 8.24.1(vitest@2.1.2(@types/node@20.16.11)(happy-dom@15.7.4)(sass@1.78.0)(terser@5.32.0)) + htmlnano: + specifier: 2.1.1 + version: 2.1.1(cssnano@7.0.6(postcss@8.4.47))(postcss@8.4.47)(relateurl@0.2.7)(svgo@3.3.2)(terser@5.32.0)(typescript@5.6.3) + jiti: + specifier: 2.3.3 + version: 2.3.3 + knitwork: + specifier: 1.1.0 + version: 1.1.0 + pathe: + specifier: 1.1.2 + version: 1.1.2 + prettier: + specifier: 3.3.3 + version: 3.3.3 + scule: + specifier: 1.3.0 + version: 1.3.0 + tinyexec: + specifier: 0.3.0 + version: 0.3.0 + tinyglobby: + specifier: 0.2.9 + version: 0.2.9 + unocss: + specifier: 0.63.4 + version: 0.63.4(postcss@8.4.47)(rollup@4.24.0)(vite@5.4.8(@types/node@20.16.11)(sass@1.78.0)(terser@5.32.0)) + vite: + specifier: 5.4.8 + version: 5.4.8(@types/node@20.16.11)(sass@1.78.0)(terser@5.32.0) + + packages/vite: + dependencies: + '@nuxt/kit': + specifier: workspace:* + version: link:../kit + '@rollup/plugin-replace': + specifier: ^6.0.1 + version: 6.0.1(rollup@4.24.0) + '@vitejs/plugin-vue': + specifier: ^5.1.4 + version: 5.1.4(vite@5.4.8(@types/node@20.16.11)(sass@1.78.0)(terser@5.32.0))(vue@3.5.11(typescript@5.6.3)) + '@vitejs/plugin-vue-jsx': + specifier: ^4.0.1 + version: 4.0.1(vite@5.4.8(@types/node@20.16.11)(sass@1.78.0)(terser@5.32.0))(vue@3.5.11(typescript@5.6.3)) + autoprefixer: + specifier: ^10.4.20 + version: 10.4.20(postcss@8.4.47) + clear: + specifier: ^0.1.0 + version: 0.1.0 + consola: + specifier: ^3.2.3 + version: 3.2.3 + cssnano: + specifier: ^7.0.6 + version: 7.0.6(postcss@8.4.47) + defu: + specifier: ^6.1.4 + version: 6.1.4 + esbuild: + specifier: ^0.24.0 + version: 0.24.0 + escape-string-regexp: + specifier: ^5.0.0 + version: 5.0.0 + estree-walker: + specifier: ^3.0.3 + version: 3.0.3 + externality: + specifier: ^1.0.2 + version: 1.0.2 + get-port-please: + specifier: ^3.1.2 + version: 3.1.2 + h3: + specifier: npm:h3-nightly@2.0.0-1718872656.6765a6e + version: h3-nightly@2.0.0-1718872656.6765a6e + jiti: + specifier: 2.3.3 + version: 2.3.3 + knitwork: + specifier: ^1.1.0 + version: 1.1.0 + magic-string: + specifier: ^0.30.11 + version: 0.30.11 + mlly: + specifier: ^1.7.2 + version: 1.7.2 + ohash: + specifier: 1.1.4 + version: 1.1.4 + pathe: + specifier: ^1.1.2 + version: 1.1.2 + perfect-debounce: + specifier: ^1.0.0 + version: 1.0.0 + pkg-types: + specifier: ^1.2.1 + version: 1.2.1 + postcss: + specifier: 8.4.47 + version: 8.4.47 + rollup-plugin-visualizer: + specifier: ^5.12.0 + version: 5.12.0(rollup@4.24.0) + std-env: + specifier: ^3.7.0 + version: 3.7.0 + strip-literal: + specifier: ^2.1.0 + version: 2.1.0 + ufo: + specifier: 1.5.4 + version: 1.5.4 + unenv: + specifier: ^1.10.0 + version: 1.10.0 + unplugin: + specifier: ^1.14.1 + version: 1.14.1(webpack-sources@3.2.3) + vite: + specifier: 5.4.8 + version: 5.4.8(@types/node@20.16.11)(sass@1.78.0)(terser@5.32.0) + vite-node: + specifier: ^2.1.2 + version: 2.1.2(@types/node@20.16.11)(sass@1.78.0)(terser@5.32.0) + vite-plugin-checker: + specifier: ^0.8.0 + version: 0.8.0(eslint@9.12.0(jiti@2.3.3))(optionator@0.9.4)(typescript@5.6.3)(vite@5.4.8(@types/node@20.16.11)(sass@1.78.0)(terser@5.32.0))(vue-tsc@2.1.6(typescript@5.6.3)) + vue-bundle-renderer: + specifier: ^2.1.1 + version: 2.1.1 + devDependencies: + '@nuxt/schema': + specifier: workspace:* + version: link:../schema + '@types/clear': + specifier: 0.1.4 + version: 0.1.4 + '@types/estree': + specifier: 1.0.6 + version: 1.0.6 + rollup: + specifier: 4.24.0 + version: 4.24.0 + unbuild: + specifier: 3.0.0-rc.11 + version: 3.0.0-rc.11(sass@1.78.0)(typescript@5.6.3)(vue-tsc@2.1.6(typescript@5.6.3)) + vue: + specifier: 3.5.11 + version: 3.5.11(typescript@5.6.3) + + packages/webpack: + dependencies: + '@nuxt/friendly-errors-webpack-plugin': + specifier: ^2.6.0 + version: 2.6.0(webpack@5.95.0) + '@nuxt/kit': + specifier: workspace:* + version: link:../kit + autoprefixer: + specifier: ^10.4.20 + version: 10.4.20(postcss@8.4.47) + css-loader: + specifier: ^7.1.2 + version: 7.1.2(@rspack/core@1.0.8)(webpack@5.95.0) + css-minimizer-webpack-plugin: + specifier: ^7.0.0 + version: 7.0.0(webpack@5.95.0) + cssnano: + specifier: ^7.0.6 + version: 7.0.6(postcss@8.4.47) + defu: + specifier: ^6.1.4 + version: 6.1.4 + esbuild-loader: + specifier: ^4.2.2 + version: 4.2.2(webpack@5.95.0) + escape-string-regexp: + specifier: ^5.0.0 + version: 5.0.0 + estree-walker: + specifier: ^3.0.3 + version: 3.0.3 + file-loader: + specifier: ^6.2.0 + version: 6.2.0(webpack@5.95.0) + fork-ts-checker-webpack-plugin: + specifier: ^9.0.2 + version: 9.0.2(typescript@5.6.3)(webpack@5.95.0) + globby: + specifier: ^14.0.2 + version: 14.0.2 + h3: + specifier: npm:h3-nightly@2.0.0-1718872656.6765a6e + version: h3-nightly@2.0.0-1718872656.6765a6e + hash-sum: + specifier: ^2.0.0 + version: 2.0.0 + jiti: + specifier: 2.3.3 + version: 2.3.3 + knitwork: + specifier: ^1.1.0 + version: 1.1.0 + lodash-es: + specifier: 4.17.21 + version: 4.17.21 + magic-string: + specifier: ^0.30.11 + version: 0.30.11 + memfs: + specifier: ^4.13.0 + version: 4.13.0 + mini-css-extract-plugin: + specifier: ^2.9.1 + version: 2.9.1(webpack@5.95.0) + mlly: + specifier: ^1.7.2 + version: 1.7.2 + ohash: + specifier: 1.1.4 + version: 1.1.4 + pathe: + specifier: ^1.1.2 + version: 1.1.2 + pify: + specifier: ^6.1.0 + version: 6.1.0 + postcss: + specifier: 8.4.47 + version: 8.4.47 + postcss-import: + specifier: ^16.1.0 + version: 16.1.0(postcss@8.4.47) + postcss-import-resolver: + specifier: ^2.0.0 + version: 2.0.0 + postcss-loader: + specifier: ^8.1.1 + version: 8.1.1(@rspack/core@1.0.8)(postcss@8.4.47)(typescript@5.6.3)(webpack@5.95.0) + postcss-url: + specifier: ^10.1.3 + version: 10.1.3(postcss@8.4.47) + pug-plain-loader: + specifier: ^1.1.0 + version: 1.1.0(pug@3.0.3) + std-env: + specifier: ^3.7.0 + version: 3.7.0 + time-fix-plugin: + specifier: ^2.0.7 + version: 2.0.7(webpack@5.95.0) + ufo: + specifier: 1.5.4 + version: 1.5.4 + unenv: + specifier: ^1.10.0 + version: 1.10.0 + unplugin: + specifier: ^1.14.1 + version: 1.14.1(webpack-sources@3.2.3) + url-loader: + specifier: ^4.1.1 + version: 4.1.1(file-loader@6.2.0(webpack@5.95.0))(webpack@5.95.0) + vue-bundle-renderer: + specifier: ^2.1.1 + version: 2.1.1 + vue-loader: + specifier: ^17.4.2 + version: 17.4.2(@vue/compiler-sfc@3.5.11)(vue@3.5.11(typescript@5.6.3))(webpack@5.95.0) + webpack: + specifier: ^5.95.0 + version: 5.95.0 + webpack-bundle-analyzer: + specifier: ^4.10.2 + version: 4.10.2 + webpack-dev-middleware: + specifier: ^7.4.2 + version: 7.4.2(webpack@5.95.0) + webpack-hot-middleware: + specifier: ^2.26.1 + version: 2.26.1 + webpackbar: + specifier: ^6.0.1 + version: 6.0.1(webpack@5.95.0) + devDependencies: + '@nuxt/schema': + specifier: workspace:* + version: link:../schema + '@rspack/core': + specifier: 1.0.8 + version: 1.0.8 + '@types/hash-sum': + specifier: 1.0.2 + version: 1.0.2 + '@types/lodash-es': + specifier: 4.17.12 + version: 4.17.12 + '@types/pify': + specifier: 5.0.4 + version: 5.0.4 + '@types/webpack-bundle-analyzer': + specifier: 4.7.0 + version: 4.7.0 + '@types/webpack-hot-middleware': + specifier: 2.25.9 + version: 2.25.9 + rollup: + specifier: 4.24.0 + version: 4.24.0 + unbuild: + specifier: 3.0.0-rc.11 + version: 3.0.0-rc.11(sass@1.78.0)(typescript@5.6.3)(vue-tsc@2.1.6(typescript@5.6.3)) + vue: + specifier: 3.5.11 + version: 3.5.11(typescript@5.6.3) playground: dependencies: @@ -955,6 +1124,9 @@ importers: test/fixtures/basic: dependencies: + '@nuxt/rspack-builder': + specifier: workspace:* + version: link:../../../packages/rspack '@nuxt/webpack-builder': specifier: workspace:* version: link:../../../packages/webpack @@ -964,7 +1136,7 @@ importers: devDependencies: '@vue/devtools-api': specifier: latest - version: 7.4.5 + version: 7.4.6 ufo: specifier: 1.5.4 version: 1.5.4 @@ -972,8 +1144,8 @@ importers: specifier: latest version: 1.14.1(webpack-sources@3.2.3) vue: - specifier: 3.5.5 - version: 3.5.5(typescript@5.6.2) + specifier: 3.5.11 + version: 3.5.11(typescript@5.6.3) test/fixtures/basic-types: dependencies: @@ -983,19 +1155,19 @@ importers: devDependencies: ofetch: specifier: latest - version: 1.3.4(patch_hash=nxc3eojzwynarpj453xzxqr2f4) + version: 1.4.1 unplugin-vue-router: specifier: ^0.10.7 - version: 0.10.8(rollup@4.21.3)(vue-router@4.4.5(vue@3.5.5(typescript@5.6.2)))(vue@3.5.5(typescript@5.6.2))(webpack-sources@3.2.3) + version: 0.10.8(rollup@4.24.0)(vue-router@4.4.5(vue@3.5.11(typescript@5.6.3)))(vue@3.5.11(typescript@5.6.3))(webpack-sources@3.2.3) vitest: specifier: 1.6.0 - version: 1.6.0(@types/node@20.16.5)(happy-dom@15.7.4)(sass@1.78.0)(terser@5.32.0) + version: 1.6.0(@types/node@20.16.11)(happy-dom@15.7.4)(sass@1.78.0)(terser@5.32.0) vue: - specifier: 3.5.5 - version: 3.5.5(typescript@5.6.2) + specifier: 3.5.11 + version: 3.5.11(typescript@5.6.3) vue-router: specifier: latest - version: 4.4.5(vue@3.5.5(typescript@5.6.2)) + version: 4.4.5(vue@3.5.11(typescript@5.6.3)) test/fixtures/minimal: dependencies: @@ -1024,8 +1196,8 @@ importers: version: link:../../../packages/nuxt devDependencies: typescript: - specifier: 5.6.2 - version: 5.6.2 + specifier: 5.6.3 + version: 5.6.3 packages: @@ -1043,28 +1215,28 @@ packages: resolution: {integrity: sha512-pRrmXMCwnmrkS3MLgAIW5dXRzeTv6GLjkjb4HmxNnvAKXN1Nfzp4KmGADBQvlVUcqi+a5D+hfGDLLnd5NnYxog==} engines: {node: '>= 16'} - '@babel/code-frame@7.24.7': - resolution: {integrity: sha512-BcYH1CVJBO9tvyIZ2jVeXgSIMvGZ2FDRvDdOIVQyuklNKSsx+eppDEBq/g47Ayw+RqNFE+URvOShmf+f/qwAlA==} + '@babel/code-frame@7.25.7': + resolution: {integrity: sha512-0xZJFNE5XMpENsgfHYTw8FbX4kv53mFLn2i3XPoq69LyhYSCBJtitaHx9QnsVTrsogI4Z3+HtEfZ2/GFPOtf5g==} engines: {node: '>=6.9.0'} - '@babel/compat-data@7.25.4': - resolution: {integrity: sha512-+LGRog6RAsCJrrrg/IO6LGmpphNe5DiK30dGjCoxxeGv49B10/3XYGxPsAwrDlMFcFEvdAUavDT8r9k/hSyQqQ==} + '@babel/compat-data@7.25.7': + resolution: {integrity: sha512-9ickoLz+hcXCeh7jrcin+/SLWm+GkxE2kTvoYyp38p4WkdFXfQJxDFGWp/YHjiKLPx06z2A7W8XKuqbReXDzsw==} engines: {node: '>=6.9.0'} - '@babel/core@7.25.2': - resolution: {integrity: sha512-BBt3opiCOxUr9euZ5/ro/Xv8/V7yJ5bjYMqG/C1YAo8MIKAnumZalCN+msbci3Pigy4lIQfPUpfMM27HMGaYEA==} + '@babel/core@7.25.7': + resolution: {integrity: sha512-yJ474Zv3cwiSOO9nXJuqzvwEeM+chDuQ8GJirw+pZ91sCGCyOZ3dJkVE09fTV0VEVzXyLWhh3G/AolYTPX7Mow==} engines: {node: '>=6.9.0'} - '@babel/generator@7.25.6': - resolution: {integrity: sha512-VPC82gr1seXOpkjAAKoLhP50vx4vGNlF4msF64dSFq1P8RfB+QAuJWGHPXXPc8QyfVWwwB/TNNU4+ayZmHNbZw==} + '@babel/generator@7.25.7': + resolution: {integrity: sha512-5Dqpl5fyV9pIAD62yK9P7fcA768uVPUyrQmqpqstHWgMma4feF1x/oFysBCVZLY5wJ2GkMUCdsNDnGZrPoR6rA==} engines: {node: '>=6.9.0'} '@babel/helper-annotate-as-pure@7.24.7': resolution: {integrity: sha512-BaDeOonYvhdKw+JoMVkAixAAJzG2jVPIwWoKBPdYuY9b452e2rPuI9QPYh3KpofZ3pW2akOmwZLOiOsHMiqRAg==} engines: {node: '>=6.9.0'} - '@babel/helper-compilation-targets@7.25.2': - resolution: {integrity: sha512-U2U5LsSaZ7TAt3cfaymQ8WHh0pxvdHoEk6HVpaexxixjyEquMh0L0YNJNM6CTGKMXV1iksi0iZkGw4AcFkPaaw==} + '@babel/helper-compilation-targets@7.25.7': + resolution: {integrity: sha512-DniTEax0sv6isaw6qSQSfV4gVRNtw2rte8HHM45t9ZR0xILaufBRNkpMifCRiAPyvL4ACD6v0gfCwCmtOQaV4A==} engines: {node: '>=6.9.0'} '@babel/helper-create-class-features-plugin@7.25.4': @@ -1077,12 +1249,12 @@ packages: resolution: {integrity: sha512-LABppdt+Lp/RlBxqrh4qgf1oEH/WxdzQNDJIu5gC/W1GyvPVrOBiItmmM8wan2fm4oYqFuFfkXmlGpLQhPY8CA==} engines: {node: '>=6.9.0'} - '@babel/helper-module-imports@7.24.7': - resolution: {integrity: sha512-8AyH3C+74cgCVVXow/myrynrAGv+nTVg5vKu2nZph9x7RcRwzmh0VFallJuFTZ9mx6u4eSdXZfcOzSqTUm0HCA==} + '@babel/helper-module-imports@7.25.7': + resolution: {integrity: sha512-o0xCgpNmRohmnoWKQ0Ij8IdddjyBFE4T2kagL/x6M3+4zUgc+4qTOUBoNe4XxDskt1HPKO007ZPiMgLDq2s7Kw==} engines: {node: '>=6.9.0'} - '@babel/helper-module-transforms@7.25.2': - resolution: {integrity: sha512-BjyRAbix6j/wv83ftcVJmBt72QtHI56C7JXZoG2xATiLpmoC7dpd8WnkikExHDVPpi/3qCmO6WY1EaXOluiecQ==} + '@babel/helper-module-transforms@7.25.7': + resolution: {integrity: sha512-k/6f8dKG3yDz/qCwSM+RKovjMix563SLxQFo0UhRNo239SP6n9u5/eLtKD6EAjwta2JHJ49CsD8pms2HdNiMMQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0 @@ -1101,36 +1273,36 @@ packages: peerDependencies: '@babel/core': ^7.0.0 - '@babel/helper-simple-access@7.24.7': - resolution: {integrity: sha512-zBAIvbCMh5Ts+b86r/CjU+4XGYIs+R1j951gxI3KmmxBMhCg4oQMsv6ZXQ64XOm/cvzfU1FmoCyt6+owc5QMYg==} + '@babel/helper-simple-access@7.25.7': + resolution: {integrity: sha512-FPGAkJmyoChQeM+ruBGIDyrT2tKfZJO8NcxdC+CWNJi7N8/rZpSxK7yvBJ5O/nF1gfu5KzN7VKG3YVSLFfRSxQ==} engines: {node: '>=6.9.0'} '@babel/helper-skip-transparent-expression-wrappers@7.24.7': resolution: {integrity: sha512-IO+DLT3LQUElMbpzlatRASEyQtfhSE0+m465v++3jyyXeBTBUjtVZg28/gHeV5mrTJqvEKhKroBGAvhW+qPHiQ==} engines: {node: '>=6.9.0'} - '@babel/helper-string-parser@7.24.8': - resolution: {integrity: sha512-pO9KhhRcuUyGnJWwyEgnRJTSIZHiT+vMD0kPeD+so0l7mxkMT19g3pjY9GTnHySck/hDzq+dtW/4VgnMkippsQ==} + '@babel/helper-string-parser@7.25.7': + resolution: {integrity: sha512-CbkjYdsJNHFk8uqpEkpCvRs3YRp9tY6FmFY7wLMSYuGYkrdUi7r2lc4/wqsvlHoMznX3WJ9IP8giGPq68T/Y6g==} engines: {node: '>=6.9.0'} - '@babel/helper-validator-identifier@7.24.7': - resolution: {integrity: sha512-rR+PBcQ1SMQDDyF6X0wxtG8QyLCgUB0eRAGguqRLfkCA87l7yAP7ehq8SNj96OOGTO8OBV70KhuFYcIkHXOg0w==} + '@babel/helper-validator-identifier@7.25.7': + resolution: {integrity: sha512-AM6TzwYqGChO45oiuPqwL2t20/HdMC1rTPAesnBCgPCSF1x3oN9MVUwQV2iyz4xqWrctwK5RNC8LV22kaQCNYg==} engines: {node: '>=6.9.0'} - '@babel/helper-validator-option@7.24.8': - resolution: {integrity: sha512-xb8t9tD1MHLungh/AIoWYN+gVHaB9kwlu8gffXGSt3FFEIT7RjS+xWbc2vUD1UTZdIpKj/ab3rdqJ7ufngyi2Q==} + '@babel/helper-validator-option@7.25.7': + resolution: {integrity: sha512-ytbPLsm+GjArDYXJ8Ydr1c/KJuutjF2besPNbIZnZ6MKUxi/uTA22t2ymmA4WFjZFpjiAMO0xuuJPqK2nvDVfQ==} engines: {node: '>=6.9.0'} - '@babel/helpers@7.25.6': - resolution: {integrity: sha512-Xg0tn4HcfTijTwfDwYlvVCl43V6h4KyVVX2aEm4qdO/PC6L2YvzLHFdmxhoeSA3eslcE6+ZVXHgWwopXYLNq4Q==} + '@babel/helpers@7.25.7': + resolution: {integrity: sha512-Sv6pASx7Esm38KQpF/U/OXLwPPrdGHNKoeblRxgZRLXnAtnkEe4ptJPDtAZM7fBLadbc1Q07kQpSiGQ0Jg6tRA==} engines: {node: '>=6.9.0'} - '@babel/highlight@7.24.7': - resolution: {integrity: sha512-EStJpq4OuY8xYfhGVXngigBJRWxftKX9ksiGDnmlY3o7B/V7KIAc9X4oiK87uPJSc/vs5L869bem5fhZa8caZw==} + '@babel/highlight@7.25.7': + resolution: {integrity: sha512-iYyACpW3iW8Fw+ZybQK+drQre+ns/tKpXbNESfrhNnPLIklLbXr7MYJ6gPEd0iETGLOK+SxMjVvKb/ffmk+FEw==} engines: {node: '>=6.9.0'} - '@babel/parser@7.25.6': - resolution: {integrity: sha512-trGdfBdbD0l1ZPmcJ83eNxB9rbEax4ALFTF7fN386TMYbeCQbyme5cOEXQhbGXKebwGaB/J52w1mrklMcbgy6Q==} + '@babel/parser@7.25.7': + resolution: {integrity: sha512-aZn7ETtQsjjGG5HruveUK06cU3Hljuhd9Iojm4M8WWv3wLE6OkE5PWbDUkItmMgegmccaITudyuW5RPYrYlgWw==} engines: {node: '>=6.0.0'} hasBin: true @@ -1169,42 +1341,30 @@ packages: peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/plugin-transform-modules-commonjs@7.24.8': - resolution: {integrity: sha512-WHsk9H8XxRs3JXKWFiqtQebdh9b/pTk4EgueygFzYlTKAg0Ud985mSevdNjdXdFBATSKVJGQXP1tv6aGbssLKA==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - '@babel/plugin-transform-typescript@7.25.2': resolution: {integrity: sha512-lBwRvjSmqiMYe/pS0+1gggjJleUJi7NzjvQ1Fkqtt69hBa/0t1YuW/MLQMAPixfwaQOHUXsd6jeU3Z+vdGv3+A==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/preset-typescript@7.24.7': - resolution: {integrity: sha512-SyXRe3OdWwIwalxDg5UtJnJQO+YPcTfwiIY2B0Xlddh9o7jpWLvv8X1RthIeDOxQ+O1ML5BLPCONToObyVQVuQ==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - '@babel/runtime@7.25.6': resolution: {integrity: sha512-VBj9MYyDb9tuLq7yzqjgzt6Q+IBQLrGZfdjOekyEirZPHxXWoTSGUTMrpsfi58Up73d13NfYLv8HT9vmznjzhQ==} engines: {node: '>=6.9.0'} - '@babel/standalone@7.25.6': - resolution: {integrity: sha512-Kf2ZcZVqsKbtYhlA7sP0z5A3q5hmCVYMKMWRWNK/5OVwHIve3JY1djVRmIVAx8FMueLIfZGKQDIILK2w8zO4mg==} + '@babel/standalone@7.25.7': + resolution: {integrity: sha512-7H+mK18Ew4C/pIIiZwF1eiVjUEh2Ju/BpwRZwcPeXltF/rIjHjFL0gol7PtGrHocmIq6P6ubJrylmmWQ3lGJPA==} engines: {node: '>=6.9.0'} - '@babel/template@7.25.0': - resolution: {integrity: sha512-aOOgh1/5XzKvg1jvVz7AVrx2piJ2XBi227DHmbY6y+bM9H2FlN+IfecYu4Xl0cNiiVejlsCri89LUsbj8vJD9Q==} + '@babel/template@7.25.7': + resolution: {integrity: sha512-wRwtAgI3bAS+JGU2upWNL9lSlDcRCqD05BZ1n3X2ONLH1WilFP6O1otQjeMK/1g0pvYcXC7b/qVUB1keofjtZA==} engines: {node: '>=6.9.0'} - '@babel/traverse@7.25.6': - resolution: {integrity: sha512-9Vrcx5ZW6UwK5tvqsj0nGpp/XzqthkT0dqIc9g1AdtygFToNtTF67XzYS//dm+SAK9cp3B9R4ZO/46p63SCjlQ==} + '@babel/traverse@7.25.7': + resolution: {integrity: sha512-jatJPT1Zjqvh/1FyJs6qAHL+Dzb7sTb+xr7Q+gM1b+1oBsMsQQ4FkVKb6dFlJvLlVssqkRzV05Jzervt9yhnzg==} engines: {node: '>=6.9.0'} - '@babel/types@7.25.6': - resolution: {integrity: sha512-/l42B1qxpG6RdfYf343Uw1vmDjeNhneUXtzhojE7pDgfpEypmRhI6j1kr17XCVv4Cgl9HdAiQY2x0GwKm7rWCw==} + '@babel/types@7.25.7': + resolution: {integrity: sha512-vwIVdXG+j+FOpkwqHRcBgHLYNL7XMkufrlaFvL9o6Ai9sJn9+PdyIL5qa0XzTZw084c+u9LOls53eoZWP/W5WQ==} engines: {node: '>=6.9.0'} '@bcoe/v8-coverage@0.2.3': @@ -1240,6 +1400,12 @@ packages: cpu: [ppc64] os: [aix] + '@esbuild/aix-ppc64@0.24.0': + resolution: {integrity: sha512-WtKdFM7ls47zkKHFVzMz8opM7LkcsIp9amDUBIAWirg70RM71WRSjdILPsY5Uv1D42ZpUfaPILDlfactHgsRkw==} + engines: {node: '>=18'} + cpu: [ppc64] + os: [aix] + '@esbuild/android-arm64@0.20.2': resolution: {integrity: sha512-mRzjLacRtl/tWU0SvD8lUEwb61yP9cqQo6noDZP/O8VkwafSYwZ4yWy24kan8jE/IMERpYncRt2dw438LP3Xmg==} engines: {node: '>=12'} @@ -1258,6 +1424,12 @@ packages: cpu: [arm64] os: [android] + '@esbuild/android-arm64@0.24.0': + resolution: {integrity: sha512-Vsm497xFM7tTIPYK9bNTYJyF/lsP590Qc1WxJdlB6ljCbdZKU9SY8i7+Iin4kyhV/KV5J2rOKsBQbB77Ab7L/w==} + engines: {node: '>=18'} + cpu: [arm64] + os: [android] + '@esbuild/android-arm@0.20.2': resolution: {integrity: sha512-t98Ra6pw2VaDhqNWO2Oph2LXbz/EJcnLmKLGBJwEwXX/JAN83Fym1rU8l0JUWK6HkIbWONCSSatf4sf2NBRx/w==} engines: {node: '>=12'} @@ -1276,6 +1448,12 @@ packages: cpu: [arm] os: [android] + '@esbuild/android-arm@0.24.0': + resolution: {integrity: sha512-arAtTPo76fJ/ICkXWetLCc9EwEHKaeya4vMrReVlEIUCAUncH7M4bhMQ+M9Vf+FFOZJdTNMXNBrWwW+OXWpSew==} + engines: {node: '>=18'} + cpu: [arm] + os: [android] + '@esbuild/android-x64@0.20.2': resolution: {integrity: sha512-btzExgV+/lMGDDa194CcUQm53ncxzeBrWJcncOBxuC6ndBkKxnHdFJn86mCIgTELsooUmwUm9FkhSp5HYu00Rg==} engines: {node: '>=12'} @@ -1294,6 +1472,12 @@ packages: cpu: [x64] os: [android] + '@esbuild/android-x64@0.24.0': + resolution: {integrity: sha512-t8GrvnFkiIY7pa7mMgJd7p8p8qqYIz1NYiAoKc75Zyv73L3DZW++oYMSHPRarcotTKuSs6m3hTOa5CKHaS02TQ==} + engines: {node: '>=18'} + cpu: [x64] + os: [android] + '@esbuild/darwin-arm64@0.20.2': resolution: {integrity: sha512-4J6IRT+10J3aJH3l1yzEg9y3wkTDgDk7TSDFX+wKFiWjqWp/iCfLIYzGyasx9l0SAFPT1HwSCR+0w/h1ES/MjA==} engines: {node: '>=12'} @@ -1312,6 +1496,12 @@ packages: cpu: [arm64] os: [darwin] + '@esbuild/darwin-arm64@0.24.0': + resolution: {integrity: sha512-CKyDpRbK1hXwv79soeTJNHb5EiG6ct3efd/FTPdzOWdbZZfGhpbcqIpiD0+vwmpu0wTIL97ZRPZu8vUt46nBSw==} + engines: {node: '>=18'} + cpu: [arm64] + os: [darwin] + '@esbuild/darwin-x64@0.20.2': resolution: {integrity: sha512-tBcXp9KNphnNH0dfhv8KYkZhjc+H3XBkF5DKtswJblV7KlT9EI2+jeA8DgBjp908WEuYll6pF+UStUCfEpdysA==} engines: {node: '>=12'} @@ -1330,6 +1520,12 @@ packages: cpu: [x64] os: [darwin] + '@esbuild/darwin-x64@0.24.0': + resolution: {integrity: sha512-rgtz6flkVkh58od4PwTRqxbKH9cOjaXCMZgWD905JOzjFKW+7EiUObfd/Kav+A6Gyud6WZk9w+xu6QLytdi2OA==} + engines: {node: '>=18'} + cpu: [x64] + os: [darwin] + '@esbuild/freebsd-arm64@0.20.2': resolution: {integrity: sha512-d3qI41G4SuLiCGCFGUrKsSeTXyWG6yem1KcGZVS+3FYlYhtNoNgYrWcvkOoaqMhwXSMrZRl69ArHsGJ9mYdbbw==} engines: {node: '>=12'} @@ -1348,6 +1544,12 @@ packages: cpu: [arm64] os: [freebsd] + '@esbuild/freebsd-arm64@0.24.0': + resolution: {integrity: sha512-6Mtdq5nHggwfDNLAHkPlyLBpE5L6hwsuXZX8XNmHno9JuL2+bg2BX5tRkwjyfn6sKbxZTq68suOjgWqCicvPXA==} + engines: {node: '>=18'} + cpu: [arm64] + os: [freebsd] + '@esbuild/freebsd-x64@0.20.2': resolution: {integrity: sha512-d+DipyvHRuqEeM5zDivKV1KuXn9WeRX6vqSqIDgwIfPQtwMP4jaDsQsDncjTDDsExT4lR/91OLjRo8bmC1e+Cw==} engines: {node: '>=12'} @@ -1366,6 +1568,12 @@ packages: cpu: [x64] os: [freebsd] + '@esbuild/freebsd-x64@0.24.0': + resolution: {integrity: sha512-D3H+xh3/zphoX8ck4S2RxKR6gHlHDXXzOf6f/9dbFt/NRBDIE33+cVa49Kil4WUjxMGW0ZIYBYtaGCa2+OsQwQ==} + engines: {node: '>=18'} + cpu: [x64] + os: [freebsd] + '@esbuild/linux-arm64@0.20.2': resolution: {integrity: sha512-9pb6rBjGvTFNira2FLIWqDk/uaf42sSyLE8j1rnUpuzsODBq7FvpwHYZxQ/It/8b+QOS1RYfqgGFNLRI+qlq2A==} engines: {node: '>=12'} @@ -1384,6 +1592,12 @@ packages: cpu: [arm64] os: [linux] + '@esbuild/linux-arm64@0.24.0': + resolution: {integrity: sha512-TDijPXTOeE3eaMkRYpcy3LarIg13dS9wWHRdwYRnzlwlA370rNdZqbcp0WTyyV/k2zSxfko52+C7jU5F9Tfj1g==} + engines: {node: '>=18'} + cpu: [arm64] + os: [linux] + '@esbuild/linux-arm@0.20.2': resolution: {integrity: sha512-VhLPeR8HTMPccbuWWcEUD1Az68TqaTYyj6nfE4QByZIQEQVWBB8vup8PpR7y1QHL3CpcF6xd5WVBU/+SBEvGTg==} engines: {node: '>=12'} @@ -1402,6 +1616,12 @@ packages: cpu: [arm] os: [linux] + '@esbuild/linux-arm@0.24.0': + resolution: {integrity: sha512-gJKIi2IjRo5G6Glxb8d3DzYXlxdEj2NlkixPsqePSZMhLudqPhtZ4BUrpIuTjJYXxvF9njql+vRjB2oaC9XpBw==} + engines: {node: '>=18'} + cpu: [arm] + os: [linux] + '@esbuild/linux-ia32@0.20.2': resolution: {integrity: sha512-o10utieEkNPFDZFQm9CoP7Tvb33UutoJqg3qKf1PWVeeJhJw0Q347PxMvBgVVFgouYLGIhFYG0UGdBumROyiig==} engines: {node: '>=12'} @@ -1420,6 +1640,12 @@ packages: cpu: [ia32] os: [linux] + '@esbuild/linux-ia32@0.24.0': + resolution: {integrity: sha512-K40ip1LAcA0byL05TbCQ4yJ4swvnbzHscRmUilrmP9Am7//0UjPreh4lpYzvThT2Quw66MhjG//20mrufm40mA==} + engines: {node: '>=18'} + cpu: [ia32] + os: [linux] + '@esbuild/linux-loong64@0.20.2': resolution: {integrity: sha512-PR7sp6R/UC4CFVomVINKJ80pMFlfDfMQMYynX7t1tNTeivQ6XdX5r2XovMmha/VjR1YN/HgHWsVcTRIMkymrgQ==} engines: {node: '>=12'} @@ -1438,6 +1664,12 @@ packages: cpu: [loong64] os: [linux] + '@esbuild/linux-loong64@0.24.0': + resolution: {integrity: sha512-0mswrYP/9ai+CU0BzBfPMZ8RVm3RGAN/lmOMgW4aFUSOQBjA31UP8Mr6DDhWSuMwj7jaWOT0p0WoZ6jeHhrD7g==} + engines: {node: '>=18'} + cpu: [loong64] + os: [linux] + '@esbuild/linux-mips64el@0.20.2': resolution: {integrity: sha512-4BlTqeutE/KnOiTG5Y6Sb/Hw6hsBOZapOVF6njAESHInhlQAghVVZL1ZpIctBOoTFbQyGW+LsVYZ8lSSB3wkjA==} engines: {node: '>=12'} @@ -1456,6 +1688,12 @@ packages: cpu: [mips64el] os: [linux] + '@esbuild/linux-mips64el@0.24.0': + resolution: {integrity: sha512-hIKvXm0/3w/5+RDtCJeXqMZGkI2s4oMUGj3/jM0QzhgIASWrGO5/RlzAzm5nNh/awHE0A19h/CvHQe6FaBNrRA==} + engines: {node: '>=18'} + cpu: [mips64el] + os: [linux] + '@esbuild/linux-ppc64@0.20.2': resolution: {integrity: sha512-rD3KsaDprDcfajSKdn25ooz5J5/fWBylaaXkuotBDGnMnDP1Uv5DLAN/45qfnf3JDYyJv/ytGHQaziHUdyzaAg==} engines: {node: '>=12'} @@ -1474,6 +1712,12 @@ packages: cpu: [ppc64] os: [linux] + '@esbuild/linux-ppc64@0.24.0': + resolution: {integrity: sha512-HcZh5BNq0aC52UoocJxaKORfFODWXZxtBaaZNuN3PUX3MoDsChsZqopzi5UupRhPHSEHotoiptqikjN/B77mYQ==} + engines: {node: '>=18'} + cpu: [ppc64] + os: [linux] + '@esbuild/linux-riscv64@0.20.2': resolution: {integrity: sha512-snwmBKacKmwTMmhLlz/3aH1Q9T8v45bKYGE3j26TsaOVtjIag4wLfWSiZykXzXuE1kbCE+zJRmwp+ZbIHinnVg==} engines: {node: '>=12'} @@ -1492,6 +1736,12 @@ packages: cpu: [riscv64] os: [linux] + '@esbuild/linux-riscv64@0.24.0': + resolution: {integrity: sha512-bEh7dMn/h3QxeR2KTy1DUszQjUrIHPZKyO6aN1X4BCnhfYhuQqedHaa5MxSQA/06j3GpiIlFGSsy1c7Gf9padw==} + engines: {node: '>=18'} + cpu: [riscv64] + os: [linux] + '@esbuild/linux-s390x@0.20.2': resolution: {integrity: sha512-wcWISOobRWNm3cezm5HOZcYz1sKoHLd8VL1dl309DiixxVFoFe/o8HnwuIwn6sXre88Nwj+VwZUvJf4AFxkyrQ==} engines: {node: '>=12'} @@ -1510,6 +1760,12 @@ packages: cpu: [s390x] os: [linux] + '@esbuild/linux-s390x@0.24.0': + resolution: {integrity: sha512-ZcQ6+qRkw1UcZGPyrCiHHkmBaj9SiCD8Oqd556HldP+QlpUIe2Wgn3ehQGVoPOvZvtHm8HPx+bH20c9pvbkX3g==} + engines: {node: '>=18'} + cpu: [s390x] + os: [linux] + '@esbuild/linux-x64@0.20.2': resolution: {integrity: sha512-1MdwI6OOTsfQfek8sLwgyjOXAu+wKhLEoaOLTjbijk6E2WONYpH9ZU2mNtR+lZ2B4uwr+usqGuVfFT9tMtGvGw==} engines: {node: '>=12'} @@ -1528,6 +1784,12 @@ packages: cpu: [x64] os: [linux] + '@esbuild/linux-x64@0.24.0': + resolution: {integrity: sha512-vbutsFqQ+foy3wSSbmjBXXIJ6PL3scghJoM8zCL142cGaZKAdCZHyf+Bpu/MmX9zT9Q0zFBVKb36Ma5Fzfa8xA==} + engines: {node: '>=18'} + cpu: [x64] + os: [linux] + '@esbuild/netbsd-x64@0.20.2': resolution: {integrity: sha512-K8/DhBxcVQkzYc43yJXDSyjlFeHQJBiowJ0uVL6Tor3jGQfSGHNNJcWxNbOI8v5k82prYqzPuwkzHt3J1T1iZQ==} engines: {node: '>=12'} @@ -1546,12 +1808,24 @@ packages: cpu: [x64] os: [netbsd] + '@esbuild/netbsd-x64@0.24.0': + resolution: {integrity: sha512-hjQ0R/ulkO8fCYFsG0FZoH+pWgTTDreqpqY7UnQntnaKv95uP5iW3+dChxnx7C3trQQU40S+OgWhUVwCjVFLvg==} + engines: {node: '>=18'} + cpu: [x64] + os: [netbsd] + '@esbuild/openbsd-arm64@0.23.1': resolution: {integrity: sha512-3x37szhLexNA4bXhLrCC/LImN/YtWis6WXr1VESlfVtVeoFJBRINPJ3f0a/6LV8zpikqoUg4hyXw0sFBt5Cr+Q==} engines: {node: '>=18'} cpu: [arm64] os: [openbsd] + '@esbuild/openbsd-arm64@0.24.0': + resolution: {integrity: sha512-MD9uzzkPQbYehwcN583yx3Tu5M8EIoTD+tUgKF982WYL9Pf5rKy9ltgD0eUgs8pvKnmizxjXZyLt0z6DC3rRXg==} + engines: {node: '>=18'} + cpu: [arm64] + os: [openbsd] + '@esbuild/openbsd-x64@0.20.2': resolution: {integrity: sha512-eMpKlV0SThJmmJgiVyN9jTPJ2VBPquf6Kt/nAoo6DgHAoN57K15ZghiHaMvqjCye/uU4X5u3YSMgVBI1h3vKrQ==} engines: {node: '>=12'} @@ -1570,6 +1844,12 @@ packages: cpu: [x64] os: [openbsd] + '@esbuild/openbsd-x64@0.24.0': + resolution: {integrity: sha512-4ir0aY1NGUhIC1hdoCzr1+5b43mw99uNwVzhIq1OY3QcEwPDO3B7WNXBzaKY5Nsf1+N11i1eOfFcq+D/gOS15Q==} + engines: {node: '>=18'} + cpu: [x64] + os: [openbsd] + '@esbuild/sunos-x64@0.20.2': resolution: {integrity: sha512-2UyFtRC6cXLyejf/YEld4Hajo7UHILetzE1vsRcGL3earZEW77JxrFjH4Ez2qaTiEfMgAXxfAZCm1fvM/G/o8w==} engines: {node: '>=12'} @@ -1588,6 +1868,12 @@ packages: cpu: [x64] os: [sunos] + '@esbuild/sunos-x64@0.24.0': + resolution: {integrity: sha512-jVzdzsbM5xrotH+W5f1s+JtUy1UWgjU0Cf4wMvffTB8m6wP5/kx0KiaLHlbJO+dMgtxKV8RQ/JvtlFcdZ1zCPA==} + engines: {node: '>=18'} + cpu: [x64] + os: [sunos] + '@esbuild/win32-arm64@0.20.2': resolution: {integrity: sha512-GRibxoawM9ZCnDxnP3usoUDO9vUkpAxIIZ6GQI+IlVmr5kP3zUq+l17xELTHMWTWzjxa2guPNyrpq1GWmPvcGQ==} engines: {node: '>=12'} @@ -1606,6 +1892,12 @@ packages: cpu: [arm64] os: [win32] + '@esbuild/win32-arm64@0.24.0': + resolution: {integrity: sha512-iKc8GAslzRpBytO2/aN3d2yb2z8XTVfNV0PjGlCxKo5SgWmNXx82I/Q3aG1tFfS+A2igVCY97TJ8tnYwpUWLCA==} + engines: {node: '>=18'} + cpu: [arm64] + os: [win32] + '@esbuild/win32-ia32@0.20.2': resolution: {integrity: sha512-HfLOfn9YWmkSKRQqovpnITazdtquEW8/SoHW7pWpuEeguaZI4QnCRW6b+oZTztdBnZOS2hqJ6im/D5cPzBTTlQ==} engines: {node: '>=12'} @@ -1624,6 +1916,12 @@ packages: cpu: [ia32] os: [win32] + '@esbuild/win32-ia32@0.24.0': + resolution: {integrity: sha512-vQW36KZolfIudCcTnaTpmLQ24Ha1RjygBo39/aLkM2kmjkWmZGEJ5Gn9l5/7tzXA42QGIoWbICfg6KLLkIw6yw==} + engines: {node: '>=18'} + cpu: [ia32] + os: [win32] + '@esbuild/win32-x64@0.20.2': resolution: {integrity: sha512-N49X4lJX27+l9jbLKSqZ6bKNjzQvHaT8IIFUy+YIqmXQdjYCToGWwOItDrfby14c78aDd5NHQl29xingXfCdLQ==} engines: {node: '>=12'} @@ -1642,6 +1940,12 @@ packages: cpu: [x64] os: [win32] + '@esbuild/win32-x64@0.24.0': + resolution: {integrity: sha512-7IAFPrjSQIJrGsK6flwg7NFmwBoSTyF3rl7If0hNUFQU4ilTsEPL6GuMuU9BfIWVVGuRnuIidkSMC+c0Otu8IA==} + engines: {node: '>=18'} + cpu: [x64] + os: [win32] + '@eslint-community/eslint-utils@4.4.0': resolution: {integrity: sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} @@ -1660,20 +1964,24 @@ packages: resolution: {integrity: sha512-fTxvnS1sRMu3+JjXwJG0j/i4RT9u4qJ+lqS/yCGap4lH4zZGzQ7tu+xZqQmcMZq5OBZDL4QRxQzRjkWcGt8IVw==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + '@eslint/core@0.6.0': + resolution: {integrity: sha512-8I2Q8ykA4J0x0o7cg67FPVnehcqWTBehu/lmY+bolPFHGjh49YzGBMXTvpqVgEbBdvNCSxj6iFgiIyHzf03lzg==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + '@eslint/eslintrc@3.1.0': resolution: {integrity: sha512-4Bfj15dVJdoy3RfZmmo86RK1Fwzn6SstsvK9JS+BaVKqC6QQQQyXekNaC+g+LKNgkQ+2VhGAzm6hO40AhMR3zQ==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - '@eslint/js@9.10.0': - resolution: {integrity: sha512-fuXtbiP5GWIn8Fz+LWoOMVf/Jxm+aajZYkhi6CuEm4SxymFM+eUWzbO9qXT+L0iCkL5+KGYMCSGxo686H19S1g==} + '@eslint/js@9.12.0': + resolution: {integrity: sha512-eohesHH8WFRUprDNyEREgqP6beG6htMeUYeCpkEgBCieCMme5r9zFWjzAJp//9S+Kub4rqE+jXe9Cp1a7IYIIA==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} '@eslint/object-schema@2.1.4': resolution: {integrity: sha512-BsWiH1yFGjXXS2yvrf5LyuoSIIbPrGUWob917o+BTKuZ7qJdxX8aJLRxs1fS9n6r7vESrq1OUqb68dANcFXuQQ==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - '@eslint/plugin-kit@0.1.0': - resolution: {integrity: sha512-autAXT203ixhqei9xt+qkYOvY8l6LAFIdT2UXc/RPNeUVfqRF1BV94GTJyVPFKT8nFM6MyVJhjLj9E8JWvf5zQ==} + '@eslint/plugin-kit@0.2.0': + resolution: {integrity: sha512-vH9PiIMMwvhCx31Af3HiGzsVNULDbyVkHXwlemn/B0TFj/00ho3y55efXrUZTfQipxoHC5u4xq6zblww1zm1Ig==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} '@fastify/busboy@2.1.1': @@ -1693,12 +2001,20 @@ packages: resolution: {integrity: sha512-Nl8HCv0hGRSLQ+n1OD4Hk3a+Urwk9HH0vQkAzzCarT4KlA7bRl+6xEiS5PZVwOmjtC7XiH/oNe3as9Fxcr2A1w==} engines: {node: '>= 16'} + '@humanfs/core@0.19.0': + resolution: {integrity: sha512-2cbWIHbZVEweE853g8jymffCA+NCMiuqeECeBBLm8dg2oFdjuGJhgN4UAbI+6v0CKbbhvtXA4qV8YR5Ji86nmw==} + engines: {node: '>=18.18.0'} + + '@humanfs/node@0.16.5': + resolution: {integrity: sha512-KSPA4umqSG4LHYRodq31VDwKAvaTF4xmVlzM8Aeh4PlU1JQ3IG0wiA8C25d3RQ9nJyM3mBHyI53K06VVL/oFFg==} + engines: {node: '>=18.18.0'} + '@humanwhocodes/module-importer@1.0.1': resolution: {integrity: sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==} engines: {node: '>=12.22'} - '@humanwhocodes/retry@0.3.0': - resolution: {integrity: sha512-d2CGZR2o7fS6sWB7DG/3a95bGKQyHMACZ5aW8qGkkqQpUoZV6C0X7Pc7l4ZNMZkfNBf4VWNe9E1jRsf0G146Ew==} + '@humanwhocodes/retry@0.3.1': + resolution: {integrity: sha512-JBxkERygn7Bv/GbN5Rv8Ul6LVknS+5Bp6RgDC/O8gEBU/yeH5Ui5C/OlWrTb6qct7LjjfT6Re2NxB0ln0yYybA==} engines: {node: '>=18.18'} '@iconify-json/carbon@1.2.1': @@ -1710,14 +2026,14 @@ packages: '@iconify-json/ri@1.2.0': resolution: {integrity: sha512-br8It3uRHylNhEH72aU9VF6gIdL4BAi6JMdcxsCaVbAyWBJ0jd4RxfmsYnil6TmEfP5wxihiCKbtbQmIHZdqKg==} - '@iconify-json/tabler@1.2.2': - resolution: {integrity: sha512-sdHGvNKWm4TofzGm/rP5UythJBp82DqTOfjSlCLUTnuwCuRSJia5vfoIx2aEVRKq8jINj/V80c+A2k7jAW8Hlg==} + '@iconify-json/tabler@1.2.3': + resolution: {integrity: sha512-km0P/1Gtp/bFhvBQQmDkMx3nNIkNmU57WCYl9b8Envl81m3bhVVT85A8FtWChQxMXsYv3cTNuwMq/WZGfcY9vQ==} '@iconify/types@2.0.0': resolution: {integrity: sha512-+wluvCrRhXrhyOmRDJ3q8mux9JkKy5SJ/v8ol2tu4FVjyYvtEzkc/3pK15ET6RKg4b4w4BmTk1+gsCUhf21Ykg==} - '@iconify/utils@2.1.32': - resolution: {integrity: sha512-LeifFZPPKu28O3AEDpYJNdEbvS4/ojAPyIW+pF/vUpJTYnbTiXUHkCh0bwgFRzKvdpb8H4Fbfd/742++MF4fPQ==} + '@iconify/utils@2.1.33': + resolution: {integrity: sha512-jP9h6v/g0BIZx0p7XGJJVtkVnydtbgTgt9mVNcGDYwaa7UhdHdI9dvoq+gKj9sijMSJKxUPEG2JyjsgXjxL7Kw==} '@ioredis/commands@1.2.0': resolution: {integrity: sha512-Sx1pU8EM64o2BrqNpEO1CNLtKQwyhuXuqyfH7oGKCk+1a33d2r5saW8zNwm3j6BTExtjrv2BxTgzzkMwts6vGg==} @@ -1790,6 +2106,18 @@ packages: resolution: {integrity: sha512-Yhlar6v9WQgUp/He7BdgzOz8lqMQ8sU+jkCq7Wx8Myc5YFJLbEe7lgui/V7G1qB1DJykHSGwreceSaD60Y0PUQ==} hasBin: true + '@module-federation/runtime-tools@0.5.1': + resolution: {integrity: sha512-nfBedkoZ3/SWyO0hnmaxuz0R0iGPSikHZOAZ0N/dVSQaIzlffUo35B5nlC2wgWIc0JdMZfkwkjZRrnuuDIJbzg==} + + '@module-federation/runtime@0.5.1': + resolution: {integrity: sha512-xgiMUWwGLWDrvZc9JibuEbXIbhXg6z2oUkemogSvQ4LKvrl/n0kbqP1Blk669mXzyWbqtSp6PpvNdwaE1aN5xQ==} + + '@module-federation/sdk@0.5.1': + resolution: {integrity: sha512-exvchtjNURJJkpqjQ3/opdbfeT2wPKvrbnGnyRkrwW5o3FH1LaST1tkiNviT6OXTexGaVc2DahbdniQHVtQ7pA==} + + '@module-federation/webpack-bundler-runtime@0.5.1': + resolution: {integrity: sha512-mMhRFH0k2VjwHt3Jol9JkUsmI/4XlrAoBG3E0o7HoyoPYv1UFOWyqAflfANcUPgbYpvqmyLzDcO+3IT36LXnrA==} + '@netlify/functions@2.8.1': resolution: {integrity: sha512-+6wtYdoz0yE06dSa9XkP47tw5zm6g13QMeCwM3MmHx1vn8hzwFa51JtmfraprdkL7amvb7gaNM+OOhQU1h6T8A==} engines: {node: '>=14.0.0'} @@ -1817,25 +2145,30 @@ packages: '@nuxt/devalue@2.0.2': resolution: {integrity: sha512-GBzP8zOc7CGWyFQS6dv1lQz8VVpz5C2yRszbXufwG/9zhStTIH50EtD87NmWbTMwXDvZLNg8GIpb1UFdH93JCA==} - '@nuxt/devtools-kit@1.4.2': - resolution: {integrity: sha512-8a5PhVnC7E94318/sHbNSe9mI2MlsQ8+pJLGs2Hh1OJyidB9SWe6hoFc8q4K9VOtXak9uCFVb5V2JGXS1q+1aA==} + '@nuxt/devtools-kit@1.5.1': + resolution: {integrity: sha512-s2dpN1vCOgua2pSYG7/xUMjf7CyLTBeEK2IRqeOeiNpiElft4ygDddlg6P3ot0Hpp+GvWTz0uPGot/vI73uk4w==} peerDependencies: - vite: 5.4.5 + vite: 5.4.8 - '@nuxt/devtools-ui-kit@1.4.2': - resolution: {integrity: sha512-ELVSAVimFeX4RWrfBjckevyB2btIrd4KUG0qVEaX9pBzKxwg8C1u+sDEfDfSQSnByXf7uoaGkR/1O/Up7xu65g==} + '@nuxt/devtools-kit@1.5.2': + resolution: {integrity: sha512-IMbwflL/JLuK1JcM5yWKa+T5JGjwnCACZJw218/8bUTt/uTVgtkMueE+1/p9rhCWxvGQiT3xnCIXKhEg7xP58Q==} peerDependencies: - '@nuxt/devtools': 1.4.2 + vite: 5.4.8 - '@nuxt/devtools-wizard@1.4.2': - resolution: {integrity: sha512-TyhmPBg/xJKPOdnwR3DAh8KMUt6/0dUNABCxGVeY7PYbIiXt4msIGVJkBc4y+WwIJHOYPrSRClmZVsXQfRlB4A==} + '@nuxt/devtools-ui-kit@1.5.1': + resolution: {integrity: sha512-/1B2AYXuuPePWVuoHd/UGIKR3z3vO2bW73UAEszpHVLc/OwLA19K9f5o91sgyamAi2Qb5NymAMc/UZL0ijN8uA==} + peerDependencies: + '@nuxt/devtools': 1.5.1 + + '@nuxt/devtools-wizard@1.5.2': + resolution: {integrity: sha512-wZhouI3drb7HL7KYezYb9ksK0EeSVbHDPPKdLQePVrr+7SphThqiHoWmovBB3e/D4jtO3VC07+ILZcXUnat6HQ==} hasBin: true - '@nuxt/devtools@1.4.2': - resolution: {integrity: sha512-Ok3g2P7iwKyK8LiwozbYVAZTo8t91iXSmlJj2ozeo1okKQ2Qi1AtwB6nYgIlkUHZmo155ZjG/LCHYI5uhQ/sGw==} + '@nuxt/devtools@1.5.2': + resolution: {integrity: sha512-E0bqGjAEpzVu7K8soiiDOqjAQ1FaRZPqSSU0OidmRL0HNM9kIaBNr78R494OLSop0Hh0d2Uha7Yt9IEADHtgyw==} hasBin: true peerDependencies: - vite: 5.4.5 + vite: 5.4.8 '@nuxt/eslint-config@0.5.7': resolution: {integrity: sha512-B+snO9NS9+v2657Z84tMbW3hLxjauIUkk2m4vnYjb9xfAFdoQwK07q6aaf7LzvagmVFmQiclT9LbJMvlRqzmsA==} @@ -1853,15 +2186,15 @@ packages: peerDependencies: webpack: ^2.0.0 || ^3.0.0 || ^4.0.0 || ^5.0.0 - '@nuxt/scripts@0.9.2': - resolution: {integrity: sha512-2BgLzVNotv8a8j3E+dTsVvGqs/XE8TKoALj5Z7Vi+t8nvxXUHJZtiPQl2Srs8UYW+2kCQOcrSbNOrZLMkGC5jQ==} + '@nuxt/scripts@0.9.4': + resolution: {integrity: sha512-9fEzXCAmdelCRsNW+hMN126Zko1behgoja4WbPBXR+3tRVH0UvMeLJmEVturahinFpnvUNrXhbx446XvVR/Yuw==} '@nuxt/telemetry@2.6.0': resolution: {integrity: sha512-h4YJ1d32cU7tDKjjhjtIIEck4WF/w3DTQBT348E9Pz85YLttnLqktLM0Ez9Xc2LzCeUgBDQv1el7Ob/zT3KUqg==} hasBin: true - '@nuxt/test-utils@3.14.2': - resolution: {integrity: sha512-n5soEpHom9aL9sMwrBiD3xGR+oXbx+O8zL2NF9aelWOTSzPPNN+Qo3cBEECMc6NYQi1a4LbCKkPjQfbtPvaqkg==} + '@nuxt/test-utils@3.14.3': + resolution: {integrity: sha512-5SoyaR9bQG7xcyj6kSnzFVWvpAdiKSruRkq3KVDKEAbxwHhtyz2Ijqxf8iGE3W9dAM0F+omIvLmjen3ITgd3rA==} engines: {node: '>=18.20.4'} peerDependencies: '@cucumber/cucumber': ^10.3.1 || ^11.0.0 @@ -1875,9 +2208,9 @@ packages: jsdom: ^22.0.0 || ^23.0.0 || ^24.0.0 || ^25.0.0 nitropack: '*' playwright-core: ^1.43.1 - vite: 5.4.5 + vite: 5.4.8 vitest: ^0.34.6 || ^1.0.0 || ^2.0.0 - vue: 3.5.5 + vue: 3.5.11 vue-router: ^4.0.0 peerDependenciesMeta: '@cucumber/cucumber': @@ -2010,11 +2343,11 @@ packages: resolution: {integrity: sha512-g6/Y7HGQCllZI1iXAXDvmnpU7kaUeA7s9RVH13V2QIFi6VUJ+8HbyqTpUvAgkWRJV3da5CECEHyu+85fH+0hEg==} engines: {node: '>=14.19.0', npm: '>=7.0.0'} - '@rollup/plugin-alias@5.1.0': - resolution: {integrity: sha512-lpA3RZ9PdIG7qqhEfv79tBffNaoDuukFDrmhLqg9ifv99u/ehn+lOg30x2zmhf8AQqQUZaMk/B9fZraQ6/acDQ==} + '@rollup/plugin-alias@5.1.1': + resolution: {integrity: sha512-PR9zDb+rOzkRb2VD+EuKB7UC41vU5DIwZ5qqCpk0KJudcWAyi8rvYOhS7+L5aZCspw1stTViLgN5v6FF1p5cgQ==} engines: {node: '>=14.0.0'} peerDependencies: - rollup: 4.21.3 + rollup: 4.24.0 peerDependenciesMeta: rollup: optional: true @@ -2023,7 +2356,7 @@ packages: resolution: {integrity: sha512-ZEZWTK5n6Qde0to4vS9Mr5x/0UZoqCxPVR9KRUjU4kA2sO7GEUn1fop0DAwpO6z0Nw/kJON9bDmSxdWxO/TT1A==} engines: {node: '>=14.0.0'} peerDependencies: - rollup: 4.21.3 + rollup: 4.24.0 peerDependenciesMeta: rollup: optional: true @@ -2032,7 +2365,16 @@ packages: resolution: {integrity: sha512-UnsKoZK6/aGIH6AdkptXhNvhaqftcjq3zZdT+LY5Ftms6JR06nADcDsYp5hTU9E2lbJUEOhdlY5J4DNTneM+jQ==} engines: {node: '>=16.0.0 || 14 >= 14.17'} peerDependencies: - rollup: 4.21.3 + rollup: 4.24.0 + peerDependenciesMeta: + rollup: + optional: true + + '@rollup/plugin-commonjs@28.0.0': + resolution: {integrity: sha512-BJcu+a+Mpq476DMXG+hevgPSl56bkUoi88dKT8t3RyUp8kGuOh+2bU8Gs7zXDlu+fyZggnJ+iOBGrb/O1SorYg==} + engines: {node: '>=16.0.0 || 14 >= 14.17'} + peerDependencies: + rollup: 4.24.0 peerDependenciesMeta: rollup: optional: true @@ -2041,7 +2383,7 @@ packages: resolution: {integrity: sha512-2+DEJbNBoPROPkgTDNe8/1YXWcqxbN5DTjASVIOx8HS+pITXushyNiBV56RB08zuptzz8gT3YfkqriTBVycepg==} engines: {node: '>=14.0.0'} peerDependencies: - rollup: 4.21.3 + rollup: 4.24.0 peerDependenciesMeta: rollup: optional: true @@ -2050,16 +2392,16 @@ packages: resolution: {integrity: sha512-EGI2te5ENk1coGeADSIwZ7G2Q8CJS2sF120T7jLw4xFw9n7wIOXHo+kIYRAoVpJAN+kmqZSoO3Fp4JtoNF4ReA==} engines: {node: '>=14.0.0'} peerDependencies: - rollup: 4.21.3 + rollup: 4.24.0 peerDependenciesMeta: rollup: optional: true - '@rollup/plugin-node-resolve@15.2.3': - resolution: {integrity: sha512-j/lym8nf5E21LwBT4Df1VD6hRO2L2iwUeUmP7litikRsVp1H6NWx20NEp0Y7su+7XGc476GnXXc4kFeZNGmaSQ==} + '@rollup/plugin-node-resolve@15.3.0': + resolution: {integrity: sha512-9eO5McEICxMzJpDW9OnMYSv4Sta3hmt7VtBFz5zR9273suNOydOyq/FrGeGy+KsTRFm8w0SLVhzig2ILFT63Ag==} engines: {node: '>=14.0.0'} peerDependencies: - rollup: 4.21.3 + rollup: 4.24.0 peerDependenciesMeta: rollup: optional: true @@ -2068,7 +2410,16 @@ packages: resolution: {integrity: sha512-PqxSfuorkHz/SPpyngLyg5GCEkOcee9M1bkxiVDr41Pd61mqP1PLOoDPbpl44SB2mQGKwV/In74gqQmGITOhEQ==} engines: {node: '>=14.0.0'} peerDependencies: - rollup: 4.21.3 + rollup: 4.24.0 + peerDependenciesMeta: + rollup: + optional: true + + '@rollup/plugin-replace@6.0.1': + resolution: {integrity: sha512-2sPh9b73dj5IxuMmDAsQWVFT7mR+yoHweBaXG2W/R8vQ+IWZlnaI7BR7J6EguVQUp1hd8Z7XuozpDjEKQAAC2Q==} + engines: {node: '>=14.0.0'} + peerDependencies: + rollup: 4.24.0 peerDependenciesMeta: rollup: optional: true @@ -2077,7 +2428,7 @@ packages: resolution: {integrity: sha512-XHeJC5Bgvs8LfukDwWZp7yeqin6ns8RTl2B9avbejt6tZqsqvVoWI7ZTQrcNsfKEDWBTnTxM8nMDkO2IFFbd0A==} engines: {node: '>=14.0.0'} peerDependencies: - rollup: 4.21.3 + rollup: 4.24.0 peerDependenciesMeta: rollup: optional: true @@ -2086,130 +2437,203 @@ packages: resolution: {integrity: sha512-iKnFXr7NkdZAIHiIWE+BX5ULi/ucVFYWD6TbAV+rZctiRTY2PL6tsIKhoIOaoskiWAkgu+VsbXgUVDNLHf+InQ==} engines: {node: '>= 8.0.0'} - '@rollup/pluginutils@5.1.0': - resolution: {integrity: sha512-XTIWOPPcpvyKI6L1NHo0lFlCyznUEyPmPY1mc3KpPVDYulHSTvyeLNVW00QTLIAFNhR3kYnJTQHeGqU4M3n09g==} + '@rollup/pluginutils@5.1.2': + resolution: {integrity: sha512-/FIdS3PyZ39bjZlwqFnWqCOVnW7o963LtKMwQOD0NhQqw22gSr2YY1afu3FxRip4ZCZNsD5jq6Aaz6QV3D/Njw==} engines: {node: '>=14.0.0'} peerDependencies: - rollup: 4.21.3 + rollup: 4.24.0 peerDependenciesMeta: rollup: optional: true - '@rollup/rollup-android-arm-eabi@4.21.3': - resolution: {integrity: sha512-MmKSfaB9GX+zXl6E8z4koOr/xU63AMVleLEa64v7R0QF/ZloMs5vcD1sHgM64GXXS1csaJutG+ddtzcueI/BLg==} + '@rollup/rollup-android-arm-eabi@4.24.0': + resolution: {integrity: sha512-Q6HJd7Y6xdB48x8ZNVDOqsbh2uByBhgK8PiQgPhwkIw/HC/YX5Ghq2mQY5sRMZWHb3VsFkWooUVOZHKr7DmDIA==} cpu: [arm] os: [android] - '@rollup/rollup-android-arm64@4.21.3': - resolution: {integrity: sha512-zrt8ecH07PE3sB4jPOggweBjJMzI1JG5xI2DIsUbkA+7K+Gkjys6eV7i9pOenNSDJH3eOr/jLb/PzqtmdwDq5g==} + '@rollup/rollup-android-arm64@4.24.0': + resolution: {integrity: sha512-ijLnS1qFId8xhKjT81uBHuuJp2lU4x2yxa4ctFPtG+MqEE6+C5f/+X/bStmxapgmwLwiL3ih122xv8kVARNAZA==} cpu: [arm64] os: [android] - '@rollup/rollup-darwin-arm64@4.21.3': - resolution: {integrity: sha512-P0UxIOrKNBFTQaXTxOH4RxuEBVCgEA5UTNV6Yz7z9QHnUJ7eLX9reOd/NYMO3+XZO2cco19mXTxDMXxit4R/eQ==} + '@rollup/rollup-darwin-arm64@4.24.0': + resolution: {integrity: sha512-bIv+X9xeSs1XCk6DVvkO+S/z8/2AMt/2lMqdQbMrmVpgFvXlmde9mLcbQpztXm1tajC3raFDqegsH18HQPMYtA==} cpu: [arm64] os: [darwin] - '@rollup/rollup-darwin-x64@4.21.3': - resolution: {integrity: sha512-L1M0vKGO5ASKntqtsFEjTq/fD91vAqnzeaF6sfNAy55aD+Hi2pBI5DKwCO+UNDQHWsDViJLqshxOahXyLSh3EA==} + '@rollup/rollup-darwin-x64@4.24.0': + resolution: {integrity: sha512-X6/nOwoFN7RT2svEQWUsW/5C/fYMBe4fnLK9DQk4SX4mgVBiTA9h64kjUYPvGQ0F/9xwJ5U5UfTbl6BEjaQdBQ==} cpu: [x64] os: [darwin] - '@rollup/rollup-linux-arm-gnueabihf@4.21.3': - resolution: {integrity: sha512-btVgIsCjuYFKUjopPoWiDqmoUXQDiW2A4C3Mtmp5vACm7/GnyuprqIDPNczeyR5W8rTXEbkmrJux7cJmD99D2g==} + '@rollup/rollup-linux-arm-gnueabihf@4.24.0': + resolution: {integrity: sha512-0KXvIJQMOImLCVCz9uvvdPgfyWo93aHHp8ui3FrtOP57svqrF/roSSR5pjqL2hcMp0ljeGlU4q9o/rQaAQ3AYA==} cpu: [arm] os: [linux] - '@rollup/rollup-linux-arm-musleabihf@4.21.3': - resolution: {integrity: sha512-zmjbSphplZlau6ZTkxd3+NMtE4UKVy7U4aVFMmHcgO5CUbw17ZP6QCgyxhzGaU/wFFdTfiojjbLG3/0p9HhAqA==} + '@rollup/rollup-linux-arm-musleabihf@4.24.0': + resolution: {integrity: sha512-it2BW6kKFVh8xk/BnHfakEeoLPv8STIISekpoF+nBgWM4d55CZKc7T4Dx1pEbTnYm/xEKMgy1MNtYuoA8RFIWw==} cpu: [arm] os: [linux] - '@rollup/rollup-linux-arm64-gnu@4.21.3': - resolution: {integrity: sha512-nSZfcZtAnQPRZmUkUQwZq2OjQciR6tEoJaZVFvLHsj0MF6QhNMg0fQ6mUOsiCUpTqxTx0/O6gX0V/nYc7LrgPw==} + '@rollup/rollup-linux-arm64-gnu@4.24.0': + resolution: {integrity: sha512-i0xTLXjqap2eRfulFVlSnM5dEbTVque/3Pi4g2y7cxrs7+a9De42z4XxKLYJ7+OhE3IgxvfQM7vQc43bwTgPwA==} cpu: [arm64] os: [linux] - '@rollup/rollup-linux-arm64-musl@4.21.3': - resolution: {integrity: sha512-MnvSPGO8KJXIMGlQDYfvYS3IosFN2rKsvxRpPO2l2cum+Z3exiExLwVU+GExL96pn8IP+GdH8Tz70EpBhO0sIQ==} + '@rollup/rollup-linux-arm64-musl@4.24.0': + resolution: {integrity: sha512-9E6MKUJhDuDh604Qco5yP/3qn3y7SLXYuiC0Rpr89aMScS2UAmK1wHP2b7KAa1nSjWJc/f/Lc0Wl1L47qjiyQw==} cpu: [arm64] os: [linux] - '@rollup/rollup-linux-powerpc64le-gnu@4.21.3': - resolution: {integrity: sha512-+W+p/9QNDr2vE2AXU0qIy0qQE75E8RTwTwgqS2G5CRQ11vzq0tbnfBd6brWhS9bCRjAjepJe2fvvkvS3dno+iw==} + '@rollup/rollup-linux-powerpc64le-gnu@4.24.0': + resolution: {integrity: sha512-2XFFPJ2XMEiF5Zi2EBf4h73oR1V/lycirxZxHZNc93SqDN/IWhYYSYj8I9381ikUFXZrz2v7r2tOVk2NBwxrWw==} cpu: [ppc64] os: [linux] - '@rollup/rollup-linux-riscv64-gnu@4.21.3': - resolution: {integrity: sha512-yXH6K6KfqGXaxHrtr+Uoy+JpNlUlI46BKVyonGiaD74ravdnF9BUNC+vV+SIuB96hUMGShhKV693rF9QDfO6nQ==} + '@rollup/rollup-linux-riscv64-gnu@4.24.0': + resolution: {integrity: sha512-M3Dg4hlwuntUCdzU7KjYqbbd+BLq3JMAOhCKdBE3TcMGMZbKkDdJ5ivNdehOssMCIokNHFOsv7DO4rlEOfyKpg==} cpu: [riscv64] os: [linux] - '@rollup/rollup-linux-s390x-gnu@4.21.3': - resolution: {integrity: sha512-R8cwY9wcnApN/KDYWTH4gV/ypvy9yZUHlbJvfaiXSB48JO3KpwSpjOGqO4jnGkLDSk1hgjYkTbTt6Q7uvPf8eg==} + '@rollup/rollup-linux-s390x-gnu@4.24.0': + resolution: {integrity: sha512-mjBaoo4ocxJppTorZVKWFpy1bfFj9FeCMJqzlMQGjpNPY9JwQi7OuS1axzNIk0nMX6jSgy6ZURDZ2w0QW6D56g==} cpu: [s390x] os: [linux] - '@rollup/rollup-linux-x64-gnu@4.21.3': - resolution: {integrity: sha512-kZPbX/NOPh0vhS5sI+dR8L1bU2cSO9FgxwM8r7wHzGydzfSjLRCFAT87GR5U9scj2rhzN3JPYVC7NoBbl4FZ0g==} + '@rollup/rollup-linux-x64-gnu@4.24.0': + resolution: {integrity: sha512-ZXFk7M72R0YYFN5q13niV0B7G8/5dcQ9JDp8keJSfr3GoZeXEoMHP/HlvqROA3OMbMdfr19IjCeNAnPUG93b6A==} cpu: [x64] os: [linux] - '@rollup/rollup-linux-x64-musl@4.21.3': - resolution: {integrity: sha512-S0Yq+xA1VEH66uiMNhijsWAafffydd2X5b77eLHfRmfLsRSpbiAWiRHV6DEpz6aOToPsgid7TI9rGd6zB1rhbg==} + '@rollup/rollup-linux-x64-musl@4.24.0': + resolution: {integrity: sha512-w1i+L7kAXZNdYl+vFvzSZy8Y1arS7vMgIy8wusXJzRrPyof5LAb02KGr1PD2EkRcl73kHulIID0M501lN+vobQ==} cpu: [x64] os: [linux] - '@rollup/rollup-win32-arm64-msvc@4.21.3': - resolution: {integrity: sha512-9isNzeL34yquCPyerog+IMCNxKR8XYmGd0tHSV+OVx0TmE0aJOo9uw4fZfUuk2qxobP5sug6vNdZR6u7Mw7Q+Q==} + '@rollup/rollup-win32-arm64-msvc@4.24.0': + resolution: {integrity: sha512-VXBrnPWgBpVDCVY6XF3LEW0pOU51KbaHhccHw6AS6vBWIC60eqsH19DAeeObl+g8nKAz04QFdl/Cefta0xQtUQ==} cpu: [arm64] os: [win32] - '@rollup/rollup-win32-ia32-msvc@4.21.3': - resolution: {integrity: sha512-nMIdKnfZfzn1Vsk+RuOvl43ONTZXoAPUUxgcU0tXooqg4YrAqzfKzVenqqk2g5efWh46/D28cKFrOzDSW28gTA==} + '@rollup/rollup-win32-ia32-msvc@4.24.0': + resolution: {integrity: sha512-xrNcGDU0OxVcPTH/8n/ShH4UevZxKIO6HJFK0e15XItZP2UcaiLFd5kiX7hJnqCbSztUF8Qot+JWBC/QXRPYWQ==} cpu: [ia32] os: [win32] - '@rollup/rollup-win32-x64-msvc@4.21.3': - resolution: {integrity: sha512-fOvu7PCQjAj4eWDEuD8Xz5gpzFqXzGlxHZozHP4b9Jxv9APtdxL6STqztDzMLuRXEc4UpXGGhx029Xgm91QBeA==} + '@rollup/rollup-win32-x64-msvc@4.24.0': + resolution: {integrity: sha512-fbMkAF7fufku0N2dE5TBXcNlg0pt0cJue4xBRE2Qc5Vqikxr4VCgKj/ht6SMdFcOacVA9rqF70APJ8RN/4vMJw==} cpu: [x64] os: [win32] + '@rspack/binding-darwin-arm64@1.0.8': + resolution: {integrity: sha512-1l8/eg3HNz53DHQO3fy5O5QKdYh8hSMZaWGtm3NR5IfdrTm2TaLL9tuR8oL2iHHtd87LEvVKHXdjlcuLV5IPNQ==} + cpu: [arm64] + os: [darwin] + + '@rspack/binding-darwin-x64@1.0.8': + resolution: {integrity: sha512-7BbG8gXVWjtqJegDpsObzM/B90Eig1piEtcahvPdvlC92uZz3/IwtKPpMaywGBrf5RSI3U0nQMSekwz0cO1SOw==} + cpu: [x64] + os: [darwin] + + '@rspack/binding-linux-arm64-gnu@1.0.8': + resolution: {integrity: sha512-QnqCL0wmwYqT/IFx5q0aw7DsIOr8oYUa4+7JI8iiqRf3RuuRJExesVW9VuWr0jS2UvChKgmb8PvRtDy/0tshFw==} + cpu: [arm64] + os: [linux] + + '@rspack/binding-linux-arm64-musl@1.0.8': + resolution: {integrity: sha512-Ns9TsE7zdUjimW5HURRW08BaMyAh16MDh97PPsGEMeRPx9plnRO9aXvuUG6t+0gy4KwlQdeq3BvUsbBpIo5Tow==} + cpu: [arm64] + os: [linux] + + '@rspack/binding-linux-x64-gnu@1.0.8': + resolution: {integrity: sha512-lfqUuKCoyRN/gGeokhX/oNYqB6OpbtgQb57b0QuD8IaiH2a1ee0TtEVvRbyQNEDwht6lW4RTNg0RfMYu52LgXg==} + cpu: [x64] + os: [linux] + + '@rspack/binding-linux-x64-musl@1.0.8': + resolution: {integrity: sha512-MgbHJWV5utVa1/U9skrXClydZ/eZw001++v4B6nb8myU6Ck1D02aMl9ESefb/sSA8TatLLxEXQ2VENG9stnPwQ==} + cpu: [x64] + os: [linux] + + '@rspack/binding-win32-arm64-msvc@1.0.8': + resolution: {integrity: sha512-3NN5VisnSOzhgqX77O/7NvcjPUueg1oIdMKoc5vElJCEu5FEXPqDhwZmr1PpBovaXshAcgExF3j54+20pwdg5g==} + cpu: [arm64] + os: [win32] + + '@rspack/binding-win32-ia32-msvc@1.0.8': + resolution: {integrity: sha512-17VQNC7PSygzsipSVoukDM/SOcVueVNsk9bZiB0Swl20BaqrlBts2Dvlmo+L+ZGsxOYI97WvA/zomMDv860usg==} + cpu: [ia32] + os: [win32] + + '@rspack/binding-win32-x64-msvc@1.0.8': + resolution: {integrity: sha512-Vtjt74Soh09XUsV5Nw0YjZVSk/qtsjtPnzbSZluncSAVUs8l+X1ALcM6n1Jrt3TLTfcqf7a+VIsWOXAMqkCGUg==} + cpu: [x64] + os: [win32] + + '@rspack/binding@1.0.8': + resolution: {integrity: sha512-abRirbrjobcllLAamyeiWxT6Rb0wELUnITynQdqRbSweWm2lvnhm9YBv4BcOjvJBzhJtvRJo5JBtbKXjDTarug==} + + '@rspack/core@1.0.8': + resolution: {integrity: sha512-pbXwXYb4WQwb0l35P5v3l/NpDJXy1WiVE4IcQ/6LxZYU5NyZuqtsK0trR88xIVRZb9qU0JUeCdQq7Xa6Q+c3Xw==} + engines: {node: '>=16.0.0'} + peerDependencies: + '@swc/helpers': '>=0.5.1' + peerDependenciesMeta: + '@swc/helpers': + optional: true + + '@rspack/lite-tapable@1.0.1': + resolution: {integrity: sha512-VynGOEsVw2s8TAlLf/uESfrgfrq2+rcXB1muPJYBWbsm1Oa6r5qVQhjA5ggM6z/coYPrsVMgovl3Ff7Q7OCp1w==} + engines: {node: '>=16.0.0'} + '@shikijs/core@1.17.0': resolution: {integrity: sha512-Mkk4Mp4bNnW1kytU8I7S5PK5teNSe0iKlfqxPss4sdwnlcU8a2N62Z3te2gVmZfU9t1HF6L3wyWuM43IvEeEsg==} - '@shikijs/core@1.17.6': - resolution: {integrity: sha512-9ztslig6/YmCg/XwESAXbKjAjOhaq6HVced9NY6qcbDz1X5g/S90Wco2vMjBNX/6V71ASkzri76JewSGPa7kiQ==} + '@shikijs/core@1.20.0': + resolution: {integrity: sha512-KlO3iE0THzSdYkzDFugt8SHe6FR3qNYTkmpbdW1d6xo8juQkMjybxAw/cBi2npL2eb2F4PbbnSs5Z9tDusfvyg==} + + '@shikijs/core@1.22.0': + resolution: {integrity: sha512-S8sMe4q71TJAW+qG93s5VaiihujRK6rqDFqBnxqvga/3LvqHEnxqBIOPkt//IdXVtHkQWKu4nOQNk0uBGicU7Q==} '@shikijs/engine-javascript@1.17.0': resolution: {integrity: sha512-EiBVlxmzJZdC2ypzn8k+vxLngbBNgHLS4RilwrFOABGRc72kUZubbD/6Chrq2RcVtD3yq1GtiiIdFMGd9BTX3Q==} - '@shikijs/engine-javascript@1.17.6': - resolution: {integrity: sha512-5EEZj8tVcierNxm4V0UMS2PVoflb0UJPalWWV8l9rRg+oOfnr5VivqBJbkyq5grltVPvByIXvVbY8GSM/356jQ==} + '@shikijs/engine-javascript@1.20.0': + resolution: {integrity: sha512-ZUMo758uduM0Tfgzi/kd+0IKMbNdumCxxWjY36uf1DIs2Qyg9HIq3vA1Wfa/vc6HE7tHWFpANRi3mv7UzJ68MQ==} + + '@shikijs/engine-javascript@1.22.0': + resolution: {integrity: sha512-AeEtF4Gcck2dwBqCFUKYfsCq0s+eEbCEbkUuFou53NZ0sTGnJnJ/05KHQFZxpii5HMXbocV9URYVowOP2wH5kw==} '@shikijs/engine-oniguruma@1.17.0': resolution: {integrity: sha512-nsXzJGLQ0fhKmA4Gwt1cF7vC8VuZ1HSDrTRuj48h/qDeX/TzmOlTDXQ3uPtyuhyg/2rbZRzNhN8UFU4fSnQfXg==} - '@shikijs/engine-oniguruma@1.17.6': - resolution: {integrity: sha512-NLfWDMXFYe0nDHFbEoyZdz89aIIey3bTfF3zLYSUNTXks5s4uinZVmuPOFf1HfTeGqIn8uErJSBc3VnpJO7Alw==} + '@shikijs/engine-oniguruma@1.20.0': + resolution: {integrity: sha512-MQ40WkVTZk7by33ces4PGK6XNFSo6PYvKTSAr2kTWdRNhFmOcnaX+1XzvFwB26eySXR7U74t91czZ1qJkEgxTA==} + + '@shikijs/engine-oniguruma@1.22.0': + resolution: {integrity: sha512-5iBVjhu/DYs1HB0BKsRRFipRrD7rqjxlWTj4F2Pf+nQSPqc3kcyqFFeZXnBMzDf0HdqaFVvhDRAGiYNvyLP+Mw==} '@shikijs/transformers@1.17.0': resolution: {integrity: sha512-C/s6z0knkWBVRG6cmklTUn+70URKVE8qlQuFg6Bi/9iqpX68NZloZhxCtVHeTd56pit15hivTlgSAY+SP7C8hA==} - '@shikijs/twoslash@1.17.6': - resolution: {integrity: sha512-87acUkBoLrP+nt04TUqvISQq+IF5aGfeesV8Y5X48BCst0FuI/K4V22Ixsd+L2S9dnjQCNomU8O1OUXUAT7M9A==} + '@shikijs/twoslash@1.22.0': + resolution: {integrity: sha512-r5F/x4GTh18XzhAREehgT9lCDFZlISBSIsOFZQQaqjiOLG81PIqJN1I1D6XY58UN9OJt+3mffuKq19K4FOJKJA==} '@shikijs/types@1.17.0': resolution: {integrity: sha512-Tvu2pA69lbpXB+MmgIaROP1tio8y0uYvKb5Foh3q0TJBTAJuaoa5eDEtS/0LquyveacsiVrYF4uEZILju+7Ybg==} - '@shikijs/types@1.17.6': - resolution: {integrity: sha512-ndTFa2TJi2w51ddKQDn3Jy8f6K4E5Q2x3dA3Hmsd3+YmxDQ10UWHjcw7VbVbKzv3VcUvYPLy+z9neqytSzUMUg==} + '@shikijs/types@1.20.0': + resolution: {integrity: sha512-y+EaDvU2K6/GaXOKXxJaGnr1XtmZMF7MfS0pSEDdxEq66gCtKsLwQvVwoQFdp7R7dLlNAro3ijEE19sMZ0pzqg==} + + '@shikijs/types@1.22.0': + resolution: {integrity: sha512-Fw/Nr7FGFhlQqHfxzZY8Cwtwk5E9nKDUgeLjZgt3UuhcM3yJR9xj3ZGNravZZok8XmEZMiYkSMTPlPkULB8nww==} '@shikijs/vitepress-twoslash@1.17.0': resolution: {integrity: sha512-FcdZUtF1jL51fZfkITd1qEnmnVe/w8lnOGhEWptMqMNvMYzB8vxDv5y+E1zvE+rw0NbBuWtOmZea3WOah1nr6g==} - '@shikijs/vscode-textmate@9.2.2': - resolution: {integrity: sha512-TMp15K+GGYrWlZM8+Lnj9EaHEFmOen0WJBrfa17hF7taDOYthuPPV0GWzfd/9iMij0akS/8Yw2ikquH7uVi/fg==} + '@shikijs/vscode-textmate@9.3.0': + resolution: {integrity: sha512-jn7/7ky30idSkd/O5yDBfAnVt+JJpepofP/POZ1iMOxK59cOfqIgg/Dj0eFsjOTMw+4ycJN0uhZH/Eb0bs/EUA==} '@sidvind/better-ajv-errors@3.0.1': resolution: {integrity: sha512-++1mEYIeozfnwWI9P1ECvOPoacy+CgDASrmGvXPMCcqgx0YUzB01vZ78uHdQ443V6sTY+e9MzHqmN9DOls02aw==} @@ -2243,7 +2667,7 @@ packages: engines: {node: '>=14'} peerDependencies: '@vue/compiler-sfc': '>= 3' - vue: 3.5.5 + vue: 3.5.11 peerDependenciesMeta: '@vue/compiler-sfc': optional: true @@ -2270,14 +2694,14 @@ packages: '@types/eslint__js@8.42.3': resolution: {integrity: sha512-alfG737uhmPdnvkrLdZLcEKJ/B8s9Y4hrZ+YAdzUeoArBlSUERA2E87ROfOaS4jd/C45fzOoZzidLc1IPwLqOw==} - '@types/estree@1.0.5': - resolution: {integrity: sha512-/kYRxGDLWzHOB7q+wtSUQlFrtcdUccpfy+X+9iMBpHK8QLLhx2wIPYuS5DYtR9Wa/YlZAbIovy7qVdB1Aq6Lyw==} + '@types/estree@1.0.6': + resolution: {integrity: sha512-AYnb1nQyY49te+VRAVgmzfcgjYS91mY5P0TKUDCLEM+gNnA+3T6rWITXRLYCpahpqSQbN5cE+gHpnPyXjHWxcw==} '@types/file-loader@5.0.4': resolution: {integrity: sha512-aB4X92oi5D2nIGI8/kolnJ47btRM2MQjQS4eJgA/VnCD12x0+kP5v7b5beVQWKHLOcquwUXvv6aMt8PmMy9uug==} - '@types/google.maps@3.58.0': - resolution: {integrity: sha512-rZPrbNHoGxeY70uuQYFLGQqcz5mLd3pZy0u286GSugvN7PLFsHNRF2wN2QXtUgNiC33IC0LX+MD3LGAC3wN7Eg==} + '@types/google.maps@3.58.1': + resolution: {integrity: sha512-X9QTSvGJ0nCfMzYOnaVs/k6/4L+7F5uCS+4iUmkLEls6J9S/Phv+m/i3mDeyc49ZBgwab3EFO1HEoBY7k98EGQ==} '@types/hash-sum@1.0.2': resolution: {integrity: sha512-UP28RddqY8xcU0SCEp9YKutQICXpaAq9N8U2klqF5hegGha7KzTOL8EdhIIV3bOSGBzjEpN9bU/d+nNZBdJYVw==} @@ -2315,8 +2739,8 @@ packages: '@types/node-sass@4.11.7': resolution: {integrity: sha512-QY0sXZGPRzJ2obo66f9zB6S0Uo9PRdcoPKPbyftSoKXub90s4ut/JK3fYHOqmhYhRRVEB3P5o5rEnq2/bWBdeg==} - '@types/node@20.16.5': - resolution: {integrity: sha512-VwYCweNo3ERajwy0IUlqqcyZ8/A7Zwa9ZP3MnENWcB11AejO+tLy3pu850goUW2FC/IJMdZUfKpX/yxL1gymCA==} + '@types/node@20.16.11': + resolution: {integrity: sha512-y+cTCACu92FyA5fgQSAI8A1H429g7aSK2HsO7K4XYUWc4dY5IUz55JSDIYT6/VsOLfGy8vmvQYC2hfb0iF16Uw==} '@types/normalize-package-data@2.4.4': resolution: {integrity: sha512-37i+OaWTh9qeK4LSHPsyRC7NahnGotNuZvjLSgcPzblpHB3rrCJxAOgI5gCdKm7coonsaX1Of0ILiTcnZjbfxA==} @@ -2406,6 +2830,10 @@ packages: resolution: {integrity: sha512-06JOQ9Qgj33yvBEx6tpC8ecP9o860rsR22hWMEd12WcTRrfaFgHr2RB/CA/B+7BMhHkXT4chg2MyboGdFGawYg==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + '@typescript-eslint/scope-manager@8.8.0': + resolution: {integrity: sha512-EL8eaGC6gx3jDd8GwEFEV091210U97J0jeEHrAYvIYosmEGet4wJ+g0SYmLu+oRiAwbSA5AVrt6DxLHfdd+bUg==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + '@typescript-eslint/type-utils@8.5.0': resolution: {integrity: sha512-N1K8Ix+lUM+cIDhL2uekVn/ZD7TZW+9/rwz8DclQpcQ9rk4sIL5CAlBC0CugWKREmDjBzI/kQqU4wkg46jWLYA==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} @@ -2419,6 +2847,10 @@ packages: resolution: {integrity: sha512-qjkormnQS5wF9pjSi6q60bKUHH44j2APxfh9TQRXK8wbYVeDYYdYJGIROL87LGZZ2gz3Rbmjc736qyL8deVtdw==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + '@typescript-eslint/types@8.8.0': + resolution: {integrity: sha512-QJwc50hRCgBd/k12sTykOJbESe1RrzmX6COk8Y525C9l7oweZ+1lw9JiU56im7Amm8swlz00DRIlxMYLizr2Vw==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + '@typescript-eslint/typescript-estree@8.5.0': resolution: {integrity: sha512-vEG2Sf9P8BPQ+d0pxdfndw3xIXaoSjliG0/Ejk7UggByZPKXmJmw3GW5jV2gHNQNawBUyfahoSiCFVov0Ruf7Q==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} @@ -2428,132 +2860,225 @@ packages: typescript: optional: true + '@typescript-eslint/typescript-estree@8.8.0': + resolution: {integrity: sha512-ZaMJwc/0ckLz5DaAZ+pNLmHv8AMVGtfWxZe/x2JVEkD5LnmhWiQMMcYT7IY7gkdJuzJ9P14fRy28lUrlDSWYdw==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + peerDependencies: + typescript: '*' + peerDependenciesMeta: + typescript: + optional: true + '@typescript-eslint/utils@8.5.0': resolution: {integrity: sha512-6yyGYVL0e+VzGYp60wvkBHiqDWOpT63pdMV2CVG4LVDd5uR6q1qQN/7LafBZtAtNIn/mqXjsSeS5ggv/P0iECw==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: eslint: ^8.57.0 || ^9.0.0 + '@typescript-eslint/utils@8.8.0': + resolution: {integrity: sha512-QE2MgfOTem00qrlPgyByaCHay9yb1+9BjnMFnSFkUKQfu7adBXDTnCAivURnuPPAG/qiB+kzKkZKmKfaMT0zVg==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + peerDependencies: + eslint: ^8.57.0 || ^9.0.0 + '@typescript-eslint/visitor-keys@8.5.0': resolution: {integrity: sha512-yTPqMnbAZJNy2Xq2XU8AdtOW9tJIr+UQb64aXB9f3B1498Zx9JorVgFJcZpEc9UBuCCrdzKID2RGAMkYcDtZOw==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + '@typescript-eslint/visitor-keys@8.8.0': + resolution: {integrity: sha512-8mq51Lx6Hpmd7HnA2fcHQo3YgfX1qbccxQOgZcb4tvasu//zXRaA1j5ZRFeCw/VRAdFi4mRM9DnZw0Nu0Q2d1g==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + '@typescript/vfs@1.6.0': resolution: {integrity: sha512-hvJUjNVeBMp77qPINuUvYXj4FyWeeMMKZkxEATEU3hqBAQ7qdTBCUFT7Sp0Zu0faeEtFf+ldXxMEDr/bk73ISg==} peerDependencies: - typescript: 5.6.2 + typescript: 5.6.3 '@ungap/structured-clone@1.2.0': resolution: {integrity: sha512-zuVdFrMJiuCDQUMCzQaD6KL28MjnqqN8XnAqiEq9PNm/hCPTSGfrXCOfwj1ow4LFb/tNymJPwsNbVePc1xFqrQ==} - '@unhead/dom@1.11.6': - resolution: {integrity: sha512-FYU8Cu+XWcpbO4OvXdB6x7m6GTPcl6CW7igI8rNu6Kc0Ilxb+atxIvyFXdTGAyB7h/F0w3ex06ZVWJ65f3EW8A==} + '@unhead/dom@1.11.7': + resolution: {integrity: sha512-Nj2ulnbY5lvIcxqXwdO5YfdvLm8EYLjcaOje2b2aQnfyPAyOIVeR8iB79DDKk/uZZAPEwkdhSnUdEh9Ny0b3lw==} - '@unhead/schema@1.11.6': - resolution: {integrity: sha512-Ava5+kQERaZ2fi66phgR9KZQr9SsheN1YhhKM8fCP2A4Jb5lHUssVQ19P0+89V6RX9iUg/Q27WdEbznm75LzhQ==} + '@unhead/schema@1.11.7': + resolution: {integrity: sha512-j9uN7T63aUXrZ6yx2CfjVT7xZHjn0PZO7TPMaWqMFjneIH/NONKvDVCMEqDlXeqdSIERIYtk/xTHgCUMer5eyw==} - '@unhead/shared@1.11.6': - resolution: {integrity: sha512-aGrtzRCcFlVh9iru73fBS8FA1vpQskS190t5cCRRMpisOEunVv3ueqXN1F8CseQd0W4wyEr/ycDvdfKt+RPv5g==} + '@unhead/shared@1.11.7': + resolution: {integrity: sha512-5v3PmV1LMyikGyQi/URYS5ilH8dg1Iomtja7iFWke990O8RBDEzAdagJqcsUE/fw+o7cXRSOamyx5wCf5Q1TrA==} - '@unhead/ssr@1.11.6': - resolution: {integrity: sha512-jmRkJB3UWlaAV6aoTBcsi2cLOje8hJxWqbmcLmekmCBZcCgR8yHEjxVCzLtYnAQg68Trgg9+uqMt+8UFY40tDA==} + '@unhead/ssr@1.11.7': + resolution: {integrity: sha512-qI1zNFY8fU5S9EhroxlXSA5Q/XKbWAKXrVVNG+6bIh/IRrMOMJrPk4d1GmphF4gmNri3ARqly+OWx4VVaj0scA==} - '@unhead/vue@1.11.6': - resolution: {integrity: sha512-CMuDJGTi4n4wKdOp6/JmB9roGshjTdoFKF34PEkXu4+g97BiVFiZ9LvgY44+UlWCUzQHcqEPRQIzm9iKEqcfKw==} + '@unhead/vue@1.11.7': + resolution: {integrity: sha512-SLr0eQfznVp63iKi47L4s5Yz+oiQjDA82VBP4jlXi7dM9fSIn1ul1aKvBqle/ZxI2cqY8zVGz60EjhjWeu754A==} peerDependencies: - vue: 3.5.5 + vue: 3.5.11 - '@unocss/astro@0.62.3': - resolution: {integrity: sha512-C6ZdyLbLDS0LebwmgwVItLNAOSkL/tvVWNRd1i3Jy5uj1vPxlrw+3lIYiHjEofn0GFpBiwlv5+OCvO1Xpq5MqA==} + '@unocss/astro@0.62.4': + resolution: {integrity: sha512-98KfkbrNhBLx2+uYxMiGsldIeIZ6/PbL4yaGRHeHoiHd7p4HmIyCF+auYe4Psntx3Yr8kU+XSIAhGDYebvTidQ==} peerDependencies: - vite: 5.4.5 + vite: 5.4.8 peerDependenciesMeta: vite: optional: true - '@unocss/cli@0.62.3': - resolution: {integrity: sha512-yEl1iNKkBVpo8+i8gzveM5/0/vOVe6m8+FmuSDuKeSPJnYMhI1mAn+OCKFb/I+qEeLbRPXebbJUUB1xZNzya+w==} + '@unocss/astro@0.63.4': + resolution: {integrity: sha512-qu1uMDUT8lXU3mm5EjZpnizvjSYtfY0TTDivR5QNm1i3Xd+ErHfdfOpXdJ2mYvxv+X7C570//KUugkTI3Mb3kQ==} + peerDependencies: + vite: 5.4.8 + peerDependenciesMeta: + vite: + optional: true + + '@unocss/cli@0.62.4': + resolution: {integrity: sha512-p4VyS40mzn4LCOkIsbIRzN0Zi50rRepesREi2S1+R4Kpvd4QFeeuxTuZNHEyi2uCboQ9ZWl1gfStCXIrNECwTg==} engines: {node: '>=14'} hasBin: true - '@unocss/config@0.62.3': - resolution: {integrity: sha512-zYOvFE0HfGIbnP/AvsbAlJpPRx9CQyXzL11m/8zgsHW5SGlJIYxuTll83l/xu026G5mPiksy7quoEOEgCLslqw==} + '@unocss/cli@0.63.4': + resolution: {integrity: sha512-kBWEiVW7KWfjptAJsk38w9dVqOmrO2/z0WADFnlX2RuKNDoCn422Rus6tFB12wZsEujC9eFM34P2nnU7IWWtlQ==} + engines: {node: '>=14'} + hasBin: true + + '@unocss/config@0.62.4': + resolution: {integrity: sha512-XKudKxxW8P44JvlIdS6HBpfE3qZA9rhbemy6/sb8HyZjKYjgeM9jx5yjk+9+4hXNma/KlwDXwjAqY29z0S0SrA==} engines: {node: '>=14'} - '@unocss/core@0.62.3': - resolution: {integrity: sha512-Pfyrj8S7jq9K1QXD6Z5BCeiQavaHpbMN5q958/kmdbNGp57hOg1e346fMJAvgPjLBR+lE/hgZEsDrijtRiZXnw==} + '@unocss/config@0.63.4': + resolution: {integrity: sha512-LfAzM8z0r2comUW94KaSo4JaaEZjPkvrfyVWfO/hyaXa+/xSVIkCTW7+lfWh77hrg1e2SUY1HEvIFBg9Jvb1xQ==} + engines: {node: '>=14'} - '@unocss/extractor-arbitrary-variants@0.62.3': - resolution: {integrity: sha512-9ZscWyXEwDZif+b56xZyJFHwJOjdMXmj+6x96jOsnRNBzwT9eW7YcGCErP1ih/q1S6KmuRrHM/JOXMBQ6H4qlw==} + '@unocss/core@0.62.4': + resolution: {integrity: sha512-Cc+Vo6XlaQpyVejkJrrzzWtiK9pgMWzVVBpm9VCVtwZPUjD4GSc+g7VQCPXSsr7m03tmSuRySJx72QcASmauNQ==} - '@unocss/inspector@0.62.3': - resolution: {integrity: sha512-nTSXOf7YimFPxEYJo5VfP5wlMgYOCjlv3c5Ub/0fynCJXZNb89SFeU05ABXkEgg/FfiobVBTscikLc6guW8eHQ==} + '@unocss/core@0.63.4': + resolution: {integrity: sha512-VB4DJ5DsRWpX64si5tWYRXf1n5UkYQqe2s1V22qFiWmXa7Ec+Vf9s3cxWZmoWFC5P9RQiwM9kAqxdg1G+elVkQ==} - '@unocss/nuxt@0.62.3': - resolution: {integrity: sha512-GktKR2hFP0RjCn8GB9d0SKZY6fXr6dFJZURV6KOgRlu3hvlXJiUA/6MU/eij86q/Q5CZcHEUcVFkHD5Ex8cqKw==} + '@unocss/extractor-arbitrary-variants@0.62.4': + resolution: {integrity: sha512-e4hJfBMyFr6T6dYSTTjNv9CQwaU1CVEKxDlYP0GpfSgxsV58pguID9j1mt0/XZD6LvEDzwxj9RTRWKpUSWqp+Q==} - '@unocss/postcss@0.62.3': - resolution: {integrity: sha512-CwL378ef0QazduXqlaGcWgKJAzemBUxdhapWWiRqI8sXC/eXht5xK6nS1JxqADDuxosgqsGdvcCGmP8ZFrEyiA==} + '@unocss/extractor-arbitrary-variants@0.63.4': + resolution: {integrity: sha512-gI/+2Nv+cH/ZoOc/4X7RLD9CuBXH51jfwGJ1xRveS7tj+EBs8VshP7Vhbn6Jyp69E00wt4hyzjviDoGqcIA8bA==} + + '@unocss/inspector@0.62.4': + resolution: {integrity: sha512-bRcnI99gZecNzrUr6kDMdwGHkhUuTPyvvadRdaOxHc9Ow3ANNyqymeFM1q5anZEUZt8h15TYN0mdyQyIWkU3zg==} + + '@unocss/inspector@0.63.4': + resolution: {integrity: sha512-NHvOTScsMrh6oMmwGMrqB1q1RCFTHZCIK0Vwp8hL8/gmNlza2Kd2cQ/WYSEsjW132xeLCOqTME5qny1gpG6SpA==} + + '@unocss/nuxt@0.62.4': + resolution: {integrity: sha512-ZNfXu/f2kIRc8rnstToR/s2ubcvWDaCPmV5jXL+SQytSPb1ONCkK7ITNgB2TtrTEqQyhNX33VlnHNF8KsM8PNA==} + + '@unocss/postcss@0.62.4': + resolution: {integrity: sha512-kWdHy7UsSP4bDu8I7sCKeO0VuzvVpNHmn2rifK5gNstUx5dZ1H/SoyXTHx5sKtgfZBRzdNXFu2nZ3PzYGvEFbw==} engines: {node: '>=14'} peerDependencies: postcss: 8.4.47 - '@unocss/preset-attributify@0.62.3': - resolution: {integrity: sha512-ORNwyLobGTwnn/tK5yHnMabdJU6Mr/C4LyFH7G8VSLit/aVS0fFa795kJXwxfbqQoQ7Gw0Zxs9oE5RXI0/0y7g==} + '@unocss/postcss@0.63.4': + resolution: {integrity: sha512-JnSAV1hAZumkm0KZGXYqWsP2I7wnOdr+oeDckHKLdZR2mHNVbDm46H8XGbie55t/gPftaLSsMbaPvRjU2Fclqg==} + engines: {node: '>=14'} + peerDependencies: + postcss: 8.4.47 - '@unocss/preset-icons@0.62.3': - resolution: {integrity: sha512-Ie+5RTyac1Q5CNB/s/4aB4VTHAQgQqsI5hshMNLkJ0Jj1lWxodUdEbCRKjXDalRjAXOS9vsLjfJ35ozJ1RSTIQ==} + '@unocss/preset-attributify@0.62.4': + resolution: {integrity: sha512-ei5nNT58GON9iyCGRRiIrphzyQbBIZ9iEqSBhIY0flcfi1uAPUXV32aO2slqJnWWAIwbRSb1GMpwYR8mmfuz8g==} - '@unocss/preset-mini@0.62.3': - resolution: {integrity: sha512-dn/8ubeW2ry/ZF3iKxdQHnS0l3EBibt0rIOE/XVwx24ub6pRzclU4r7xHnXeqvAFOO9PoiKDGgFR92m6R2MxyQ==} + '@unocss/preset-attributify@0.63.4': + resolution: {integrity: sha512-Q2DT4oVdxaL7XxD9sDP3adb5tnYr05sCxCxPhv3ch8brU7uvwbyqkiEw105pWbj0Hb3i/0kD4iq7lVMZYRH5nw==} - '@unocss/preset-tagify@0.62.3': - resolution: {integrity: sha512-8BpUCZ5sjOZOzBKtu7ecfhRggwwPF78IqeqeNjI+XYRs8r7TBBcUVeF6zUkwhlX/TbtREkw2OZj0Iusa9CBO+A==} + '@unocss/preset-icons@0.62.4': + resolution: {integrity: sha512-n9m2nRTxyiw0sqOwSioO3rro0kaPW0JJzWlzcfdwQ+ZORNR5WyJL298fLXYUFbZG3EOF+zSPg6CMDWudKk/tlA==} - '@unocss/preset-typography@0.62.3': - resolution: {integrity: sha512-GjtDgQ1Jec/5RNmnyGMWMgyPdStWcFG/S+NUfOuroRsGSI8PDxihVOwFu5CwvOB2J2r6mRNLeUYMluE05jW3sw==} + '@unocss/preset-icons@0.63.4': + resolution: {integrity: sha512-V7JV2xvEGeNVjP6HT4IG/BY/HgajJt9CLT2sgKbaVCU9hNOuBs1YTOxua0KLynbTYwr5F5cDMuE/9slQYinZmg==} - '@unocss/preset-uno@0.62.3': - resolution: {integrity: sha512-RlsrMlpEzoZqB0lr5VvlkHGpEgr0Vp6z4Q/7DjW5t7mi20Z2i8olaLGWM0TO1wKoRi8bxc6HP0RHUS7pHtZxBA==} + '@unocss/preset-mini@0.62.4': + resolution: {integrity: sha512-1O+QpQFx7FT61aheAZEYemW5e4AGib8TFGm+rWLudKq2IBNnXHcS5xsq5QvqdC7rp9Dn3lnW5du6ijow5kCBuw==} - '@unocss/preset-web-fonts@0.62.3': - resolution: {integrity: sha512-rGEouncGFwcUY1cjkQ/ZoSmEzOeSi3Yk4YAfHGyS0ff5zKuTDWZgivB8hh/mTtvRzZunIL+FW1+1z5G9rUwjgQ==} + '@unocss/preset-mini@0.63.4': + resolution: {integrity: sha512-sim1/uy/XaVzdnMdepXdbdacXF5QNkPDnl4PYBWTyGuT5yKFpuipWpJDS5zZH5W6PYzKdcDA3YiaJ0S5CiUWpQ==} - '@unocss/preset-wind@0.62.3': - resolution: {integrity: sha512-6+VNce1he1U5EXKlXRwTIPn8KeK6bZ2jAEgcCxk8mFy8SzOlLeYzXCI9lcdiWRTjIeIiK5iSaUqmsQFtKdTyQg==} + '@unocss/preset-tagify@0.62.4': + resolution: {integrity: sha512-8b2Kcsvt93xu1JqDqcD3QvvW0L5rqvH7ev3BlNEVx6n8ayBqfB5HEd4ILKr7wSC90re+EnCgnMm7EP2FiQAJkw==} - '@unocss/reset@0.62.3': - resolution: {integrity: sha512-XVKPkbm8y9SGzRaG3x+HygGZURm50MvKLVHXsbxi67RbIir9Ouyt9hQTV6Xs3RicRZFWOpJx3wMRb8iKUOe5Zw==} + '@unocss/preset-tagify@0.63.4': + resolution: {integrity: sha512-RQkeSCKrGAowomjh8/chlnVWWOFlC+QkHB1oY5isRXNO2HStESZljyL/MisRpgjj0ubPiocoFCI2hRzXT/HrSg==} - '@unocss/rule-utils@0.62.3': - resolution: {integrity: sha512-qI37jHH//XzyR5Y2aN3Kpo4lQrQO+CaiXpqPSwMLYh2bIypc2RQVpqGVtU736x0eA6IIx41XEkKzUW+VtvJvmg==} + '@unocss/preset-typography@0.62.4': + resolution: {integrity: sha512-ZVh+NbcibMmD6ve8Deub/G+XAFcGPuzE2Fx/tMAfWfYlfyOAtrMxuL+AARMthpRxdE0JOtggXNTrJb0ZhGYl9g==} + + '@unocss/preset-typography@0.63.4': + resolution: {integrity: sha512-PtRXDqF8dW1GYDxiF1Opl+M5fhZeKx63bhvtXXf3iHjVzPDSHB6w1kTElh6vIWeLDNM9GZbbJyB5f2C8DBjibw==} + + '@unocss/preset-uno@0.62.4': + resolution: {integrity: sha512-2S6+molIz8dH/al0nfkU7i/pMS0oERPr4k9iW80Byt4cKDIhh/0jhZrC83kgZRtCf5hclSBO4oCoMTi1JF7SBw==} + + '@unocss/preset-uno@0.63.4': + resolution: {integrity: sha512-VMc2R0XRMjXA5u5HnP0SkiWtc8EnEJvipNPKsWBuyyVb0QrsIXtF5z3l3cuZmD6V7m/o9s81yshL0gFOBpF7iQ==} + + '@unocss/preset-web-fonts@0.62.4': + resolution: {integrity: sha512-kaxgYBVyMdBlErseN8kWLiaS2N5OMlwg5ktAxUlei275fMoY7inQjOwppnjDVveJbN9SP6TcqqFpBIPfUayPkQ==} + + '@unocss/preset-web-fonts@0.63.4': + resolution: {integrity: sha512-XuU4dNwTQ0ULlYpQFSKk2JRYACTzpIzpPGP5ZnqdwBxEQH5JhXx4mEmaOhu1OH3c2hZURAkdQvBzYWia4oZ6og==} + + '@unocss/preset-wind@0.62.4': + resolution: {integrity: sha512-YOzfQ11AmAnl1ZkcWLMMxCdezLjRKavLNk38LumUMtcdsa0DAy+1JjTp+KEvVQAnD+Et/ld5X+YcBWJkVy5WFQ==} + + '@unocss/preset-wind@0.63.4': + resolution: {integrity: sha512-8fTUp6ZxH9YiScz4nZ1tRqprayrlQSfguzkjxDvOrwazfNcmxvHSZfC9dtpEmY+QssM1zHH0mmWmWgQYwU9Zdw==} + + '@unocss/reset@0.62.4': + resolution: {integrity: sha512-CtxjeDgN39fY/eZDLIXN4wy7C8W7+SD+41AlzGVU5JwhcXmnb1XoDpOd2lzMxc/Yy3F5dIJt2+MRDj9RnpX9Ew==} + + '@unocss/reset@0.63.4': + resolution: {integrity: sha512-7lnVH9zuVMekY0IUtcQRrbEqlkhvyGixgzHSWPBF/JA/Pto18bhd+cMeZhuz4eHRbN274bANX+//I+Ilfo7SSg==} + + '@unocss/rule-utils@0.62.4': + resolution: {integrity: sha512-XUwLbLUzL+VSHCJNK5QBHC9RbFehumge1/XJmsRfmh0+oxgJoO1gvEvxi57gYEmdJdMRJHRJZ66se6+cB0Ymvw==} engines: {node: '>=14'} - '@unocss/scope@0.62.3': - resolution: {integrity: sha512-TJGmFfsMrTo8DBJ7CJupIqObpgij+w4jCHMBf1uu0/9jbm63dH6WGcrl3zf5mm6UBTeLmB0RwJ8K4hs7LtrBDQ==} + '@unocss/rule-utils@0.63.4': + resolution: {integrity: sha512-7yRWF881ymxnMcCJSiI/1kMI8uwRqRi3l5XnV+JSGjjF2fDr1POUQjSLaA4s7ZfdEgmjagdLK3F5xqkfMMECNA==} + engines: {node: '>=14'} - '@unocss/transformer-attributify-jsx-babel@0.62.3': - resolution: {integrity: sha512-3yFZPSoN8VLiAGUAFIyfDRv9HQYTKFGKawDdMM9ATZmSEYOecJnYjS2HayT1P9kzGwBwuKoFjcX50JH1PuNokg==} + '@unocss/transformer-attributify-jsx@0.62.4': + resolution: {integrity: sha512-z9DDqS2DibDR9gno55diKfAVegeJ9uoyQXQhH3R0KY4YMF49N1fWy/t74gOiHtlPmvjQtDRZYgjgaMCc2w8oWg==} - '@unocss/transformer-attributify-jsx@0.62.3': - resolution: {integrity: sha512-AutidZj26QW1vLQzuW/aQigC/5ZnIeqGYIBeb/O+FKKt0bU411tHrHnA1iV4CoxIdWJTkw2sGAl6z6YvwAYG6w==} + '@unocss/transformer-attributify-jsx@0.63.4': + resolution: {integrity: sha512-5cO9BY/Bga6YmbTch1Neg+E46HerJp5wLxPkIcFCDNsqy2MsB97jsFG1dO0jDUg43E26MRI19tg1eqrWL6sTYg==} - '@unocss/transformer-compile-class@0.62.3': - resolution: {integrity: sha512-1hf+99wJXzQXQPz9xR0AiTB3vBXT5RiEyugIX95HFx7EvSE/P17RP90yKEKZtDZRUwGiz2vIyySlxcKTFak9Vg==} + '@unocss/transformer-compile-class@0.62.4': + resolution: {integrity: sha512-8yadY9T7LToJwSsrmYU3rUKlnDgPGVRvON7z9g1IjUCmFCGx7Gpg84x9KpKUG6eUTshPQFUI0YUHocrYFevAEA==} - '@unocss/transformer-directives@0.62.3': - resolution: {integrity: sha512-HqHwFOA7DfxD/A1ROZIp8Dr8iZcE0z4w3VQtViWPQ89Fqmb7p2wCPGekk+8yW5PAltpynvHE4ahJEto5xjdg6w==} + '@unocss/transformer-compile-class@0.63.4': + resolution: {integrity: sha512-ta6mqq2S5OWcfBzzYnaiMt3ekn2ECNZTqzzqMglnIKPkE+GmqUmmRavRnpc+NGobuqMRcI4F6x8MSSHf4MV0jw==} - '@unocss/transformer-variant-group@0.62.3': - resolution: {integrity: sha512-oNX1SdfWemz0GWGSXACu8NevM0t2l44j2ancnooNkNz3l1+z1nbn4vFwfsJCOqOaoVm4ZqxaiQ8HIx81ZSiU1A==} + '@unocss/transformer-directives@0.62.4': + resolution: {integrity: sha512-bq9ZDG6/mr6X2mAogAo0PBVrLSLT0900MPqnj/ixadYHc7mRpX+y6bc/1AgWytZIFYSdNzf7XDoquZuwf42Ucg==} - '@unocss/vite@0.62.3': - resolution: {integrity: sha512-RrqF6Go8s0BGpwRfkOiLuO+n3CUE/CXxGqb0ipbUARhmNWJlekE3YPfayqImSEnCcImpaPgtVGv6Y0u3kLGG/w==} + '@unocss/transformer-directives@0.63.4': + resolution: {integrity: sha512-N/dNhmn3e9/Z4IvAujxCdwhNMfx2SihPA2/7GFSMMRi7F0Hn/o2hOqQquRqIJbQwIvi6bJtKwyasxjDoUhJqBA==} + + '@unocss/transformer-variant-group@0.62.4': + resolution: {integrity: sha512-W1fxMc2Lzxu4E+6JBQEBzK+AwoCQYI+EL2FT2BCUsAno37f3JdnwFFEVscck0epSdmdtidsSLDognyX8h10r8A==} + + '@unocss/transformer-variant-group@0.63.4': + resolution: {integrity: sha512-uEHltdfR0Y1nvs1eqHwsgevRFhZkLmA/MsaMEfNblDJ6CLHe/ACNmMoLX1Mcuq/lAPs0X6jGnKudk4QTrCv15Q==} + + '@unocss/vite@0.62.4': + resolution: {integrity: sha512-JKq3V6bcevYl9X5Jl3p9crArbhzI8JVWQkOxKV2nGLFaqvnc47vMSDxlU4MUdRWp3aQvzDw132tcx27oSbrojw==} peerDependencies: - vite: 5.4.5 + vite: 5.4.8 - '@unocss/webpack@0.62.3': - resolution: {integrity: sha512-Emacl2uNau0pa7/wEFCQxAxwK3nkIa+Kp2CAcJdlwcaNBcqtowkTga0FOdq71YUENXv+aziK7mV6lrjdS/hgcA==} + '@unocss/vite@0.63.4': + resolution: {integrity: sha512-YK0L177GD8Kx+JtfiCJy4YyBYckAXo4ogC8LZ+pYVNXDMN+F+XItpGI/ofLRaGIaewNg+MJgGY+CQZceABEAfg==} + peerDependencies: + vite: 5.4.8 + + '@unocss/webpack@0.62.4': + resolution: {integrity: sha512-hccXqpssqi1DyPJOwyIB3IhYe5SWND2JwTPxVTg8wO9fI1JvEK5DxK8FflJpXVps7QjotCmB/AXp0ezD0SutUg==} peerDependencies: webpack: ^4 || ^5 @@ -2571,21 +3096,21 @@ packages: resolution: {integrity: sha512-7mg9HFGnFHMEwCdB6AY83cVK4A6sCqnrjFYF4WIlebYAQVVJ/sC/CiTruVdrRlhrFoeZ8rlMxY9wYpPTIRhhAg==} engines: {node: ^18.0.0 || >=20.0.0} peerDependencies: - vite: 5.4.5 - vue: 3.5.5 + vite: 5.4.8 + vue: 3.5.11 - '@vitejs/plugin-vue@5.1.3': - resolution: {integrity: sha512-3xbWsKEKXYlmX82aOHufFQVnkbMC/v8fLpWwh6hWOUrK5fbbtBh9Q/WWse27BFgSy2/e2c0fz5Scgya9h2GLhw==} + '@vitejs/plugin-vue@5.1.4': + resolution: {integrity: sha512-N2XSI2n3sQqp5w7Y/AN/L2XDjBIRGqXko+eDp42sydYSBeJuSm5a1sLf8zakmo8u7tA8NmBgoDLA1HeOESjp9A==} engines: {node: ^18.0.0 || >=20.0.0} peerDependencies: - vite: 5.4.5 - vue: 3.5.5 + vite: 5.4.8 + vue: 3.5.11 - '@vitest/coverage-v8@2.1.1': - resolution: {integrity: sha512-md/A7A3c42oTT8JUHSqjP5uKTWJejzUW4jalpvs+rZ27gsURsMU8DEb+8Jf8C6Kj2gwfSHJqobDNBuoqlm0cFw==} + '@vitest/coverage-v8@2.1.2': + resolution: {integrity: sha512-b7kHrFrs2urS0cOk5N10lttI8UdJ/yP3nB4JYTREvR5o18cR99yPpK4gK8oQgI42BVv0ILWYUSYB7AXkAUDc0g==} peerDependencies: - '@vitest/browser': 2.1.1 - vitest: 2.1.1 + '@vitest/browser': 2.1.2 + vitest: 2.1.2 peerDependenciesMeta: '@vitest/browser': optional: true @@ -2593,47 +3118,47 @@ packages: '@vitest/expect@1.6.0': resolution: {integrity: sha512-ixEvFVQjycy/oNgHjqsL6AZCDduC+tflRluaHIzKIsdbzkLn2U/iBnVeJwB6HsIjQBdfMR8Z0tRxKUsvFJEeWQ==} - '@vitest/expect@2.1.1': - resolution: {integrity: sha512-YeueunS0HiHiQxk+KEOnq/QMzlUuOzbU1Go+PgAsHvvv3tUkJPm9xWt+6ITNTlzsMXUjmgm5T+U7KBPK2qQV6w==} + '@vitest/expect@2.1.2': + resolution: {integrity: sha512-FEgtlN8mIUSEAAnlvn7mP8vzaWhEaAEvhSXCqrsijM7K6QqjB11qoRZYEd4AKSCDz8p0/+yH5LzhZ47qt+EyPg==} - '@vitest/mocker@2.1.1': - resolution: {integrity: sha512-LNN5VwOEdJqCmJ/2XJBywB11DLlkbY0ooDJW3uRX5cZyYCrc4PI/ePX0iQhE3BiEGiQmK4GE7Q/PqCkkaiPnrA==} + '@vitest/mocker@2.1.2': + resolution: {integrity: sha512-ExElkCGMS13JAJy+812fw1aCv2QO/LBK6CyO4WOPAzLTmve50gydOlWhgdBJPx2ztbADUq3JVI0C5U+bShaeEA==} peerDependencies: - '@vitest/spy': 2.1.1 + '@vitest/spy': 2.1.2 msw: ^2.3.5 - vite: 5.4.5 + vite: 5.4.8 peerDependenciesMeta: msw: optional: true vite: optional: true - '@vitest/pretty-format@2.1.1': - resolution: {integrity: sha512-SjxPFOtuINDUW8/UkElJYQSFtnWX7tMksSGW0vfjxMneFqxVr8YJ979QpMbDW7g+BIiq88RAGDjf7en6rvLPPQ==} + '@vitest/pretty-format@2.1.2': + resolution: {integrity: sha512-FIoglbHrSUlOJPDGIrh2bjX1sNars5HbxlcsFKCtKzu4+5lpsRhOCVcuzp0fEhAGHkPZRIXVNzPcpSlkoZ3LuA==} '@vitest/runner@1.6.0': resolution: {integrity: sha512-P4xgwPjwesuBiHisAVz/LSSZtDjOTPYZVmNAnpHHSR6ONrf8eCJOFRvUwdHn30F5M1fxhqtl7QZQUk2dprIXAg==} - '@vitest/runner@2.1.1': - resolution: {integrity: sha512-uTPuY6PWOYitIkLPidaY5L3t0JJITdGTSwBtwMjKzo5O6RCOEncz9PUN+0pDidX8kTHYjO0EwUIvhlGpnGpxmA==} + '@vitest/runner@2.1.2': + resolution: {integrity: sha512-UCsPtvluHO3u7jdoONGjOSil+uON5SSvU9buQh3lP7GgUXHp78guN1wRmZDX4wGK6J10f9NUtP6pO+SFquoMlw==} '@vitest/snapshot@1.6.0': resolution: {integrity: sha512-+Hx43f8Chus+DCmygqqfetcAZrDJwvTj0ymqjQq4CvmpKFSTVteEOBzCusu1x2tt4OJcvBflyHUE0DZSLgEMtQ==} - '@vitest/snapshot@2.1.1': - resolution: {integrity: sha512-BnSku1WFy7r4mm96ha2FzN99AZJgpZOWrAhtQfoxjUU5YMRpq1zmHRq7a5K9/NjqonebO7iVDla+VvZS8BOWMw==} + '@vitest/snapshot@2.1.2': + resolution: {integrity: sha512-xtAeNsZ++aRIYIUsek7VHzry/9AcxeULlegBvsdLncLmNCR6tR8SRjn8BbDP4naxtccvzTqZ+L1ltZlRCfBZFA==} '@vitest/spy@1.6.0': resolution: {integrity: sha512-leUTap6B/cqi/bQkXUu6bQV5TZPx7pmMBKBQiI0rJA8c3pB56ZsaTbREnF7CJfmvAS4V2cXIBAh/3rVwrrCYgw==} - '@vitest/spy@2.1.1': - resolution: {integrity: sha512-ZM39BnZ9t/xZ/nF4UwRH5il0Sw93QnZXd9NAZGRpIgj0yvVwPpLd702s/Cx955rGaMlyBQkZJ2Ir7qyY48VZ+g==} + '@vitest/spy@2.1.2': + resolution: {integrity: sha512-GSUi5zoy+abNRJwmFhBDC0yRuVUn8WMlQscvnbbXdKLXX9dE59YbfwXxuJ/mth6eeqIzofU8BB5XDo/Ns/qK2A==} '@vitest/utils@1.6.0': resolution: {integrity: sha512-21cPiuGMoMZwiOHa2i4LXkMkMkCGzA+MVFV70jRwHo95dL4x/ts5GZhML1QWuy7yfp3WzK3lRvZi3JnXTYqrBw==} - '@vitest/utils@2.1.1': - resolution: {integrity: sha512-Y6Q9TsI+qJ2CC0ZKj6VBb+T8UPz593N113nnUykqwANqhgf3QkZeHFlusgKLTqrnVHbj/XDKZcDHol+dxVT+rQ==} + '@vitest/utils@2.1.2': + resolution: {integrity: sha512-zMO2KdYy6mx56btx9JvAqAZ6EyS3g49krMPPrgOp1yxGZiA93HumGk+bZ5jIZtOg5/VBYl5eBmGRQHqq4FG6uQ==} '@volar/language-core@2.4.4': resolution: {integrity: sha512-kO9k4kTLfxpg+6lq7/KAIv3m2d62IHuCL6GbVgYZTpfKvIGoAIlDxK7pFcB/eczN2+ydg/vnyaeZ6SGyZrJw2w==} @@ -2648,7 +3173,7 @@ packages: resolution: {integrity: sha512-dlSqrGdIDhqMOz92XtlMNyuHHeHe594O6f10XLtmlB0Jrq/Pl4Hj8rXAnVlRdjg+ptbZRSNL6MSgOPPoC82owg==} engines: {node: '>=16.14.0'} peerDependencies: - vue: 3.5.5 + vue: 3.5.11 peerDependenciesMeta: vue: optional: true @@ -2669,17 +3194,17 @@ packages: peerDependencies: '@babel/core': ^7.0.0-0 - '@vue/compiler-core@3.5.5': - resolution: {integrity: sha512-ZrxcY8JMoV+kgDrmRwlDufz0SjDZ7jfoNZiIBluAACMBmgr55o/jTbxnyrccH6VSJXnFaDI4Ik1UFCiq9r8i7w==} + '@vue/compiler-core@3.5.11': + resolution: {integrity: sha512-PwAdxs7/9Hc3ieBO12tXzmTD+Ln4qhT/56S+8DvrrZ4kLDn4Z/AMUr8tXJD0axiJBS0RKIoNaR0yMuQB9v9Udg==} - '@vue/compiler-dom@3.5.5': - resolution: {integrity: sha512-HSvK5q1gmBbxRse3S0Wt34RcKuOyjDJKDDMuF3i7NC+QkDFrbAqw8NnrEm/z7zFDxWZa4/5eUwsBOMQzm1RHBA==} + '@vue/compiler-dom@3.5.11': + resolution: {integrity: sha512-pyGf8zdbDDRkBrEzf8p7BQlMKNNF5Fk/Cf/fQ6PiUz9at4OaUfyXW0dGJTo2Vl1f5U9jSLCNf0EZJEogLXoeew==} - '@vue/compiler-sfc@3.5.5': - resolution: {integrity: sha512-MzBHDxwZhgQPHrwJ5tj92gdTYRCuPDSZr8PY3+JFv8cv2UD5/WayH5yo0kKCkKfrtJhc39jNSMityHrkMSbfnA==} + '@vue/compiler-sfc@3.5.11': + resolution: {integrity: sha512-gsbBtT4N9ANXXepprle+X9YLg2htQk1sqH/qGJ/EApl+dgpUBdTv3yP7YlR535uHZY3n6XaR0/bKo0BgwwDniw==} - '@vue/compiler-ssr@3.5.5': - resolution: {integrity: sha512-oFasHnpv/upubjJEmqiTKQYb4qS3ziJddf4UVWuFw6ebk/QTrTUc+AUoTJdo39x9g+AOQBzhOU0ICCRuUjvkmw==} + '@vue/compiler-ssr@3.5.11': + resolution: {integrity: sha512-P4+GPjOuC2aFTk1Z4WANvEhyOykcvEd5bIj2KVNGKGfM745LaXGr++5njpdBTzVz5pZifdlR1kpYSJJpIlSePA==} '@vue/compiler-vue2@2.7.16': resolution: {integrity: sha512-qYC3Psj9S/mfu9uVi5WvNZIzq+xnXMhOwbTFKKDD7b1lhpnn71jXSFdTQ+WsIEk0ONCd7VV2IMm7ONl6tbQ86A==} @@ -2687,56 +3212,56 @@ packages: '@vue/devtools-api@6.6.4': resolution: {integrity: sha512-sGhTPMuXqZ1rVOk32RylztWkfXTRhuS7vgAKv0zjqk8gbsHkJ7xfFf+jbySxt7tWObEJwyKaHMikV/WGDiQm8g==} - '@vue/devtools-api@7.4.5': - resolution: {integrity: sha512-PX9uXirHOY2P99kb1cP3DxWZojFW3acNMqd+l4i5nKcqY59trXTOfwDZXt2Qifu0OU1izAQb76Ur6NPVldF2KQ==} + '@vue/devtools-api@7.4.6': + resolution: {integrity: sha512-XipBV5k0/IfTr0sNBDTg7OBUCp51cYMMXyPxLXJZ4K/wmUeMqt8cVdr2ZZGOFq+si/jTyCYnNxeKoyev5DOUUA==} '@vue/devtools-core@7.4.4': resolution: {integrity: sha512-DLxgA3DfeADkRzhAfm3G2Rw/cWxub64SdP5b+s5dwL30+whOGj+QNhmyFpwZ8ZTrHDFRIPj0RqNzJ8IRR1pz7w==} peerDependencies: - vue: 3.5.5 + vue: 3.5.11 '@vue/devtools-kit@7.4.4': resolution: {integrity: sha512-awK/4NfsUG0nQ7qnTM37m7ZkEUMREyPh8taFCX+uQYps/MTFEum0AD05VeGDRMXwWvMmGIcWX9xp8ZiBddY0jw==} - '@vue/devtools-kit@7.4.5': - resolution: {integrity: sha512-Uuki4Z6Bc/ExvtlPkeDNGSAe4580R+HPcVABfTE9TF7BTz3Nntk7vxIRUyWblZkUEcB/x+wn2uofyt5i2LaUew==} + '@vue/devtools-kit@7.4.6': + resolution: {integrity: sha512-NbYBwPWgEic1AOd9bWExz9weBzFdjiIfov0yRn4DrRfR+EQJCI9dn4I0XS7IxYGdkmUJi8mFW42LLk18WsGqew==} - '@vue/devtools-shared@7.4.5': - resolution: {integrity: sha512-2XgUOkL/7QDmyYI9J7cm+rz/qBhcGv+W5+i1fhwdQ0HQ1RowhdK66F0QBuJSz/5k12opJY8eN6m03/XZMs7imQ==} + '@vue/devtools-shared@7.4.6': + resolution: {integrity: sha512-rPeSBzElnHYMB05Cc056BQiJpgocQjY8XVulgni+O9a9Gr9tNXgPteSzFFD+fT/iWMxNuUgGKs9CuW5DZewfIg==} '@vue/language-core@2.1.6': resolution: {integrity: sha512-MW569cSky9R/ooKMh6xa2g1D0AtRKbL56k83dzus/bx//RDJk24RHWkMzbAlXjMdDNyxAaagKPRquBIxkxlCkg==} peerDependencies: - typescript: 5.6.2 + typescript: 5.6.3 peerDependenciesMeta: typescript: optional: true - '@vue/reactivity@3.5.5': - resolution: {integrity: sha512-V4tTWElZQhT73PSK3Wnax9R9m4qvMX+LeKHnfylZc6SLh4Jc5/BPakp6e3zEhKWi5AN8TDzRkGnLkp8OqycYng==} + '@vue/reactivity@3.5.11': + resolution: {integrity: sha512-Nqo5VZEn8MJWlCce8XoyVqHZbd5P2NH+yuAaFzuNSR96I+y1cnuUiq7xfSG+kyvLSiWmaHTKP1r3OZY4mMD50w==} - '@vue/runtime-core@3.5.5': - resolution: {integrity: sha512-2/CFaRN17jgsXy4MpigWFBCAMmLkXPb4CjaHrndglwYSra7ajvkH2cat21dscuXaH91G8fXAeg5gCyxWJ+wCRA==} + '@vue/runtime-core@3.5.11': + resolution: {integrity: sha512-7PsxFGqwfDhfhh0OcDWBG1DaIQIVOLgkwA5q6MtkPiDFjp5gohVnJEahSktwSFLq7R5PtxDKy6WKURVN1UDbzA==} - '@vue/runtime-dom@3.5.5': - resolution: {integrity: sha512-0bQGgCuL+4Muz5PsCLgF4Ata9BTdhHi5VjsxtTDyI0Wy4MgoSvBGaA6bDc7W7CGgZOyirf9LNeetMYHQ05pgpw==} + '@vue/runtime-dom@3.5.11': + resolution: {integrity: sha512-GNghjecT6IrGf0UhuYmpgaOlN7kxzQBhxWEn08c/SQDxv1yy4IXI1bn81JgEpQ4IXjRxWtPyI8x0/7TF5rPfYQ==} - '@vue/server-renderer@3.5.5': - resolution: {integrity: sha512-XjRamLIq5f47cxgy+hiX7zUIY+4RHdPDVrPvvMDAUTdW5RJWX/S0ji/rCbm3LWTT/9Co9bvQME8ZI15ahL4/Qw==} + '@vue/server-renderer@3.5.11': + resolution: {integrity: sha512-cVOwYBxR7Wb1B1FoxYvtjJD8X/9E5nlH4VSkJy2uMA1MzYNdzAAB//l8nrmN9py/4aP+3NjWukf9PZ3TeWULaA==} peerDependencies: - vue: 3.5.5 + vue: 3.5.11 - '@vue/shared@3.5.5': - resolution: {integrity: sha512-0KyMXyEgnmFAs6rNUL+6eUHtUCqCaNrVd+AW3MX3LyA0Yry5SA0Km03CDKiOua1x1WWnIr+W9+S0GMFoSDWERQ==} + '@vue/shared@3.5.11': + resolution: {integrity: sha512-W8GgysJVnFo81FthhzurdRAWP/byq3q2qIw70e0JWblzVhjgOMiC2GyovXrZTFQJnFVryYaKGP3Tc9vYzYm6PQ==} '@vue/test-utils@2.4.6': resolution: {integrity: sha512-FMxEjOpYNYiFe0GkaHsnJPXFHxQ6m4t8vI/ElPGpMWxZKpmRvQ33OIrvRXemy6yha03RxhOlQuy+gZMC3CQSow==} - '@vueuse/core@11.0.3': - resolution: {integrity: sha512-RENlh64+SYA9XMExmmH1a3TPqeIuJBNNB/63GT35MZI+zpru3oMRUA6cEFr9HmGqEgUisurwGwnIieF6qu3aXw==} + '@vueuse/core@11.1.0': + resolution: {integrity: sha512-P6dk79QYA6sKQnghrUz/1tHi0n9mrb/iO1WTMk/ElLmTyNqgDeSZ3wcDf6fRBGzRJbeG1dxzEOvLENMjr+E3fg==} - '@vueuse/integrations@11.0.3': - resolution: {integrity: sha512-w6CDisaxs19S5Fd+NPPLFaA3GoX5gxuxrbTTBu0EYap7oH13w75L6C/+7e9mcoF9akhcR6GyYajwVMQEjdapJg==} + '@vueuse/integrations@11.1.0': + resolution: {integrity: sha512-O2ZgrAGPy0qAjpoI2YR3egNgyEqwG85fxfwmA9BshRIGjV4G6yu6CfOPpMHAOoCD+UfsIl7Vb1bXJ6ifrHYDDA==} peerDependencies: async-validator: ^4 axios: ^1 @@ -2776,16 +3301,16 @@ packages: universal-cookie: optional: true - '@vueuse/metadata@11.0.3': - resolution: {integrity: sha512-+FtbO4SD5WpsOcQTcC0hAhNlOid6QNLzqedtquTtQ+CRNBoAt9GuV07c6KNHK1wCmlq8DFPwgiLF2rXwgSHX5Q==} + '@vueuse/metadata@11.1.0': + resolution: {integrity: sha512-l9Q502TBTaPYGanl1G+hPgd3QX5s4CGnpXriVBR5fEZ/goI6fvDaVmIl3Td8oKFurOxTmbXvBPSsgrd6eu6HYg==} - '@vueuse/nuxt@11.0.3': - resolution: {integrity: sha512-1tZGM9lvFl6HqmSQNM6hsHbAzLkBitoh8RsVC8kIG/93d3Pb5dEqUdt1k+OfHyR8V2rfSOwCfJx+wlUTlY0A2g==} + '@vueuse/nuxt@11.1.0': + resolution: {integrity: sha512-ZPYigcqgPPe9vk9nBHLF8p0zshX8qvWV/ox1Y4GdV4k2flPiw7+2THNTpU2NZDBXSOXlhB2sao+paGCsvJm/Qw==} peerDependencies: nuxt: workspace:* - '@vueuse/shared@11.0.3': - resolution: {integrity: sha512-0rY2m6HS5t27n/Vp5cTDsKTlNnimCqsbh/fmT2LgE+aaU42EMfXo8+bNX91W9I7DDmxfuACXMmrd7d79JxkqWA==} + '@vueuse/shared@11.1.0': + resolution: {integrity: sha512-YUtIpY122q7osj+zsNMFAfMTubGz0sn5QzE5gPzAIiCmtt2ha3uQUY1+JPyL4gRCTsLPX82Y9brNbo/aqlA91w==} '@webassemblyjs/ast@1.12.1': resolution: {integrity: sha512-EKfMUOPRRUTy5UII4qJDGPpqfwjOmZ5jeGFwid9mnoqIFK+e0vqoi1qH56JpmZSzEL53jKnNzScdmftJyG5xWg==} @@ -3033,10 +3558,6 @@ packages: base64-js@1.5.1: resolution: {integrity: sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==} - big-integer@1.6.52: - resolution: {integrity: sha512-QxD8cf2eVqJOOz63z6JIN9BzvVs/dlySa5HGSBH5xtR8dPteIRQnBxxKqkNTiT6jbDTF6jAfrd4oMcND9RGbQg==} - engines: {node: '>=0.6'} - big.js@5.2.2: resolution: {integrity: sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ==} @@ -3053,10 +3574,6 @@ packages: boolbase@1.0.0: resolution: {integrity: sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==} - bplist-parser@0.2.0: - resolution: {integrity: sha512-z0M+byMThzQmD9NILRniCUXYsYpjwnlO8N5uCFaCqIOpqRsJCrQL9NK3JsD67CN5a08nF5oIL2bD6loTdHOuKw==} - engines: {node: '>= 5.10.0'} - brace-expansion@1.1.11: resolution: {integrity: sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==} @@ -3067,8 +3584,8 @@ packages: resolution: {integrity: sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==} engines: {node: '>=8'} - browserslist@4.23.3: - resolution: {integrity: sha512-btwCFJVjI4YWDNfau8RhZ+B1Q/VLoUITrm3RlP6y1tYGWIOa+InuYiRGXUBXo8nA1qKmHMyLB/iVQg5TT4eFoA==} + browserslist@4.24.0: + resolution: {integrity: sha512-Rmb62sR1Zpjql25eSanFGEhAxcFwfA1K0GuQcLoaJBAcENegrQut3hYdhXFF1obQfiDyqIW/cLM5HSJ/9k884A==} engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7} hasBin: true @@ -3086,10 +3603,6 @@ packages: resolution: {integrity: sha512-zhaCDicdLuWN5UbN5IMnFqNMhNfo919sH85y2/ea+5Yg9TsTkeZxpL+JLbp6cgYFS4sRLp3YV4S6yDuqVWHYOw==} engines: {node: '>=6'} - bundle-name@3.0.0: - resolution: {integrity: sha512-PKA4BeSvBpQKQ8iPOGCSiell+N8P+Tf1DlwqmYhpe2gAhKPHn8EYOxVT+ShuGmhg8lN8XiSlS80yiExKXrURlw==} - engines: {node: '>=12'} - bundle-name@4.1.0: resolution: {integrity: sha512-tjwM5exMg6BGRI+kNmTntNsvdZS1X8BFYS6tnJ2hdH0kVxM6/eVZ2xy+FqStSWvYmtfFMDLIxurorHwDKfDz5Q==} engines: {node: '>=18'} @@ -3100,8 +3613,8 @@ packages: peerDependencies: esbuild: '>=0.18' - c12@2.0.0-beta.2: - resolution: {integrity: sha512-H9B34RbWju2YPSbJTvg9Lw7dSfLs48HyJMSkzOPorg3ci3ZJTy7KbZZU6r+OUgNi2Jt7U8Ri0Tm5gnLMzms8mA==} + c12@2.0.1: + resolution: {integrity: sha512-Z4JgsKXHG37C6PYUtIxCfLJZvo6FyhHJoClwwb9ftUkLpPSkuYqn6Tr+vnaN8hymm0kIbcg6Ey3kv/Q71k5w/A==} peerDependencies: magicast: ^0.3.5 peerDependenciesMeta: @@ -3123,8 +3636,8 @@ packages: caniuse-api@3.0.0: resolution: {integrity: sha512-bsTwuIg/BZZK/vreVTYYbSWoe2F+71P7K5QGEX+pT250DZbfU1MQ5prOKpPR+LL6uWKK3KMwMCAS74QB3Um1uw==} - caniuse-lite@1.0.30001660: - resolution: {integrity: sha512-GacvNTTuATm26qC74pt+ad1fW15mlQ/zuTzzY1ZoIzECTP8HURDfF43kNxPgf7H1jmelCBQTTbBNxdSXOA7Bqg==} + caniuse-lite@1.0.30001667: + resolution: {integrity: sha512-7LTwJjcRkzKFmtqGsibMeuXmvFDfZq/nzIjnmgCGzKKRVzjD72selLDK1oPF/Oxzmt4fNcPvTDvGqSDG4tCALw==} case-police@0.7.0: resolution: {integrity: sha512-ULkv4kNeSBFCFwXE1NA/x6/FqY8lRRXT10HsGX7K0LcMcA/B45SgnNY98hnQ9c05AaVhgbR5jlCO0BXMlIEuPg==} @@ -3156,8 +3669,8 @@ packages: change-case@5.4.4: resolution: {integrity: sha512-HRQyTk2/YPEkt9TnUPbOpr64Uw3KOicFWPVBb+xiHvd6eBx/qPr9xqfBFDT8P2vWsvvz4jbEkfDe71W3VyNu2w==} - changelogen@0.5.5: - resolution: {integrity: sha512-IzgToIJ/R9NhVKmL+PW33ozYkv53bXvufDNUSH3GTKXq1iCHGgkbgbtqEWbo8tnWNnt7nPDpjL8PwSG2iS8RVw==} + changelogen@0.5.7: + resolution: {integrity: sha512-cTZXBcJMl3pudE40WENOakXkcVtrbBpbkmSkM20NdRiUqa4+VYRdXdEsgQ0BNQ6JBE2YymTNWtPKVF7UCTN5+g==} hasBin: true char-regex@1.0.2: @@ -3190,6 +3703,10 @@ packages: resolution: {integrity: sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==} engines: {node: '>= 8.10.0'} + chokidar@4.0.1: + resolution: {integrity: sha512-n8enUVCED/KVRQlab1hr3MVpcVMvxtZjmEa956u+4YijlmQED223XMSYj2tLuKvr4jcCTzNNMpQDUer72MMmzA==} + engines: {node: '>= 14.16.0'} + chownr@2.0.0: resolution: {integrity: sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ==} engines: {node: '>=10'} @@ -3296,8 +3813,8 @@ packages: concat-map@0.0.1: resolution: {integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==} - confbox@0.1.7: - resolution: {integrity: sha512-uJcB/FKZtBMCJpK8MQji6bJHgu1tixKPxRLeGkNzBoOZzpnZUJm0jm2/sBDWcuBx1dYgxV4JU+g5hmNxCyAmdA==} + confbox@0.1.8: + resolution: {integrity: sha512-RMtmw0iFkeR4YV+fUOSucriAQNb9g8zFR52MWCtl+cCZOFRNL6zeB395vPzFhEjjn4fMxXudmELnl/KF/WrK6w==} config-chain@1.1.13: resolution: {integrity: sha512-qj+f8APARXHrM0hraqXYb2/bOVSV4PvJQlNZ/DVj0QrmNM2q2euizkeuVckQ57J+W0mRH6Hvi+k50M4Jul2VRQ==} @@ -3335,7 +3852,7 @@ packages: resolution: {integrity: sha512-kcZ6+W5QzcJ3P1Mt+83OUv/oHFqZHIx8DuxG6eZ5RGMERoLqp4BuGjhHLYGK+Kf5XVkQvqBSmAy/nGWN3qDgEA==} engines: {node: '>=14'} peerDependencies: - typescript: 5.6.2 + typescript: 5.6.3 peerDependenciesMeta: typescript: optional: true @@ -3344,7 +3861,7 @@ packages: resolution: {integrity: sha512-itvL5h8RETACmOTFc4UfIyB2RfEHi71Ax6E/PivVxq9NseKbOWpeyHEOIbmAw1rs8Ak0VursQNww7lf7YtUwzg==} engines: {node: '>=14'} peerDependencies: - typescript: 5.6.2 + typescript: 5.6.3 peerDependenciesMeta: typescript: optional: true @@ -3438,6 +3955,10 @@ packages: resolution: {integrity: sha512-6Fv1DV/TYw//QF5IzQdqsNDjx/wc8TrMBZsqjL9eW01tWb7R7k/mq+/VXfJCl7SoD5emsJop9cOByJZfs8hYIw==} engines: {node: ^10 || ^12.20.0 || ^14.13.0 || >=15.0.0} + css-tree@3.0.0: + resolution: {integrity: sha512-o88DVQ6GzsABn1+6+zo2ct801dBO5OASVyxbbvA2W20ue2puSh/VOuqUj90eUeMSX/xqGqBmOKiRQN7tJOuBXw==} + engines: {node: ^10 || ^12.20.0 || ^14.13.0 || >=15.0.0} + css-what@6.1.0: resolution: {integrity: sha512-HTUrgRJ7r4dsZKU6GjmpfRK1O76h97Z8MfS1G0FozR+oF2kG6Vfe8JE6zwrkbxigziPHinCJ+gCPjA9EaBDtRw==} engines: {node: '>= 6'} @@ -3546,18 +4067,10 @@ packages: resolution: {integrity: sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==} engines: {node: '>=0.10.0'} - default-browser-id@3.0.0: - resolution: {integrity: sha512-OZ1y3y0SqSICtE8DE4S8YOE9UZOJ8wO16fKWVP5J1Qz42kV9jcnMVFrEE/noXb/ss3Q4pZIH79kxofzyNNtUNA==} - engines: {node: '>=12'} - default-browser-id@5.0.0: resolution: {integrity: sha512-A6p/pu/6fyBcA1TRz/GqWYPViplrftcW2gZC9q79ngNCKAeR/X3gcEdXQHl4KNXV+3wgIJ1CPkJQ3IHM6lcsyA==} engines: {node: '>=18'} - default-browser@4.0.0: - resolution: {integrity: sha512-wX5pXO1+BrhMkSbROFsyxUm0i/cJEScyNhA4PPxc41ICuv05ZZB/MX28s8aZx6xjmatvebIapF6hLEKEcpneUA==} - engines: {node: '>=14.16'} - default-browser@5.2.1: resolution: {integrity: sha512-WY/3TUME0x3KPYdRRxEJJvXRHV4PyPoUsxtZa78lwItwRQRHhd2U9xOscaT/YTf8uCXIAjeJOFBVEh/7FtD8Xg==} engines: {node: '>=18'} @@ -3615,8 +4128,8 @@ packages: resolution: {integrity: sha512-bwy0MGW55bG41VqxxypOsdSdGqLwXPI/focwgTYCFMbdUiBAxLg9CFzG08sz2aqzknwiX7Hkl0bQENjg8iLByw==} engines: {node: '>=8'} - devalue@5.0.0: - resolution: {integrity: sha512-gO+/OMXF7488D+u3ue+G7Y4AA3ZmUnB3eHJXmBTgNHvr4ZNzl36A0ZtG+XCRNYCkYx/bFmw4qtkoFLa+wSrwAA==} + devalue@5.1.1: + resolution: {integrity: sha512-maua5KUiapvEwiEAe+XnlZ3Rh0GD+qI1J/nb9vrJc3muPXvcF/8gXYTWF76+5DAqHyDUtOIImEuo0YKE9mshVw==} devlop@1.1.0: resolution: {integrity: sha512-RWmIqhcFf1lRYBvNmr7qTNuyCt/7/ns2jbpp1+PalgE/rDQcBT0fioSMUpJ93irlUhC5hrg4cYqe6U+0ImW0rA==} @@ -3688,8 +4201,8 @@ packages: ee-first@1.1.1: resolution: {integrity: sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==} - electron-to-chromium@1.5.19: - resolution: {integrity: sha512-kpLJJi3zxTR1U828P+LIUDZ5ohixyo68/IcYOHLqnbTPr/wdgn4i1ECvmALN9E16JPA6cvCG5UG79gVwVdEK5w==} + electron-to-chromium@1.5.32: + resolution: {integrity: sha512-M+7ph0VGBQqqpTT2YrabjNKSQ2fEl9PVx6AK3N558gDH9NO8O6XN9SXXFWRo9u9PbEg/bWq+tjXQr+eXmxubCw==} emoji-regex@8.0.0: resolution: {integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==} @@ -3784,6 +4297,11 @@ packages: engines: {node: '>=18'} hasBin: true + esbuild@0.24.0: + resolution: {integrity: sha512-FuLPevChGDshgSicjisSooU0cemp/sGXR841D5LHMB7mTVOmsEHcAxaH3irL53+8YDIeVNQEySh4DaYU/iuPqQ==} + engines: {node: '>=18'} + hasBin: true + escalade@3.2.0: resolution: {integrity: sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==} engines: {node: '>=6'} @@ -3830,8 +4348,8 @@ packages: resolution: {integrity: sha512-brcKcxGnISN2CcVhXJ/kEQlNa0MEfGRtwKtWA16SkqXHKitaKIMrfemJKLKX1YqDU5C/5JY3PvZXd5jEW04e0Q==} engines: {node: '>=5.0.0'} - eslint-plugin-perfectionist@3.6.0: - resolution: {integrity: sha512-sA6ljy6dL/9cM5ruZ/pMqRVt0FQ4Z7mbQWlBYpyX9941LVfm65d2jl2k1ZbWD3ud9Wm+/NKgOvRnAatsKhMJbA==} + eslint-plugin-perfectionist@3.8.0: + resolution: {integrity: sha512-BYJWbQVOjvIGK9V1xUfn790HuvkePjxti8epOi1H6sdzo0N4RehBmQ8coHPbgA/f12BUG1NIoDtQhI9mUm+o2A==} engines: {node: ^18.0.0 || >=20.0.0} peerDependencies: astro-eslint-parser: ^1.0.2 @@ -3875,8 +4393,8 @@ packages: resolution: {integrity: sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - eslint-scope@8.0.2: - resolution: {integrity: sha512-6E4xmrTw5wtxnLA5wYL3WDfhZ/1bUBGOXV0zQvVRDOtrR8D0p6W7fs3JweNYhwRYeGvd/1CKX2se0/2s7Q/nJA==} + eslint-scope@8.1.0: + resolution: {integrity: sha512-14dSvlhaVhKKsa9Fx1l8A17s7ah7Ef7wCakJ10LYk6+GYmP9yDti2oq2SEwcyndt6knfcZyhyxwY3i9yL78EQw==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} eslint-typegen@0.3.2: @@ -3888,22 +4406,22 @@ packages: resolution: {integrity: sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - eslint-visitor-keys@4.0.0: - resolution: {integrity: sha512-OtIRv/2GyiF6o/d8K7MYKKbXrOUBIK6SfkIRM4Z0dY3w+LiQ0vy3F57m0Z71bjbyeiWFiHJ8brqnmE6H6/jEuw==} + eslint-visitor-keys@4.1.0: + resolution: {integrity: sha512-Q7lok0mqMUSf5a/AdAZkA5a/gHcO6snwQClVNNvFKCAVlxXucdU8pKydU5ZVZjBx5xr37vGbFFWtLQYreLzrZg==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - eslint@9.10.0: - resolution: {integrity: sha512-Y4D0IgtBZfOcOUAIQTSXBKoNGfY0REGqHJG6+Q81vNippW5YlKjHFj4soMxamKK1NXHUWuBZTLdU3Km+L/pcHw==} + eslint@9.12.0: + resolution: {integrity: sha512-UVIOlTEWxwIopRL1wgSQYdnVDcEvs2wyaO6DGo5mXqe3r16IoCNWkR29iHhyaP4cICWjbgbmFUGAhh0GJRuGZw==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} hasBin: true peerDependencies: - jiti: 2.0.0-beta.3 + jiti: 2.3.3 peerDependenciesMeta: jiti: optional: true - espree@10.1.0: - resolution: {integrity: sha512-M1M6CpiE6ffoigIOWYO9UDP8TMUw9kqb21tf+08IgDYjCsOvCuDt4jQcZmoYxx+w7zlKw9/N0KXfto+I8/FrXA==} + espree@10.2.0: + resolution: {integrity: sha512-upbkBJbckcCNBDBDXEbuhjbP68n+scUd3k/U2EkyM9nw+I/jPiL4cLF/Al06CF96wRltFda16sxDFrxsI1v0/g==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} espree@9.6.1: @@ -3948,10 +4466,6 @@ packages: resolution: {integrity: sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==} engines: {node: '>=0.8.x'} - execa@5.1.1: - resolution: {integrity: sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==} - engines: {node: '>=10'} - execa@7.2.0: resolution: {integrity: sha512-UduyVP7TLB5IcAQl+OzLyLcS/l32W/GLg+AhHJ+ow40FOk2U3SAllPwR44v4vmdFwIWqpdwxxpQbF1n5ta9seA==} engines: {node: ^14.18.0 || ^16.14.0 || >=18.0.0} @@ -3995,8 +4509,8 @@ packages: fastq@1.17.1: resolution: {integrity: sha512-sRVD3lWVIXWg6By68ZN7vho9a1pQcN/WBFaAAsDDFzlJjvoGx0P8z7V1t72grFJfJhu3YPZBuu25f7Kaw2jN1w==} - fdir@6.3.0: - resolution: {integrity: sha512-QOnuT+BOtivR77wYvCWHfGt9s4Pz1VIMbD463vegT5MLqNXy8rYFT/lPVEqf/bhYeT6qmqrNHhsX+rWwe3rOCQ==} + fdir@6.4.0: + resolution: {integrity: sha512-3oB133prH1o4j/L5lLW7uOCF1PlD+/It2L0eL/iAqWMB91RBbqTewABqxhj0ibBd90EEmWZq7ntIWzVaWcXTGQ==} peerDependencies: picomatch: ^3 || ^4 peerDependenciesMeta: @@ -4052,13 +4566,13 @@ packages: resolution: {integrity: sha512-afW+h2CFafo+7Y9Lvw/xsqjaQlKLdJV7h1fCHfcYQ1C4SVMlu7OAekqWgu5d4SgvkBVU0pVpLlVsrSTBURFRkg==} peerDependencies: '@nuxt/kit': workspace:* - vue: 3.5.5 + vue: 3.5.11 peerDependenciesMeta: '@nuxt/kit': optional: true - focus-trap@7.5.4: - resolution: {integrity: sha512-N7kHdlgsO/v+iD/dMoJKtsSqs5Dz/dXZVebRgJw23LDk+jMi/974zyiOYDziY2JPp8xivq9BmUGwIJMiuSBi7w==} + focus-trap@7.6.0: + resolution: {integrity: sha512-1td0l3pMkWJLFipobUcGaf+5DTY4PLDDrcqoSaKP8ediO/CoWCCYk/fT/Y2A4e6TNB+Sh6clRJCjOPPnKoNHnQ==} for-each@0.3.3: resolution: {integrity: sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==} @@ -4071,7 +4585,7 @@ packages: resolution: {integrity: sha512-Uochze2R8peoN1XqlSi/rGUkDQpRogtLFocP9+PGu68zk1BDAKXfdeCdyVZpgTk8V8WFVQXdEz426VKjXLO1Gg==} engines: {node: '>=12.13.0', yarn: '>=1.0.0'} peerDependencies: - typescript: 5.6.2 + typescript: 5.6.3 webpack: ^5.11.0 fraction.js@4.3.7: @@ -4293,8 +4807,8 @@ packages: hast-util-raw@9.0.4: resolution: {integrity: sha512-LHE65TD2YiNsHD3YuXcKPHXPLuYh/gjp12mOfU8jxSrm1f/yJpsb0F/KKljS6U9LJoP0Ux+tCe8iJ2AsPzTdgA==} - hast-util-to-html@9.0.2: - resolution: {integrity: sha512-RP5wNpj5nm1Z8cloDv4Sl4RS8jH5HYa0v93YB6Wb4poEzgMo/dAAL0KcT4974dCjcNG5pkLqTImeFHHCwwfY3g==} + hast-util-to-html@9.0.3: + resolution: {integrity: sha512-M17uBDzMJ9RPCqLMO92gNNUDuBSq10a25SDBI08iCCxmorf4Yy6sYHK57n9WAbRAAaU+DuR4W6GN9K4DFZesYg==} hast-util-to-parse5@8.0.0: resolution: {integrity: sha512-3KKrV5ZVI8if87DVSi1vDeByYrkGzg4mEfeu4alwgmmIeARiBLKCZS2uw5Gb6nU9x9Yufyj3iudm6i7nl52PFw==} @@ -4328,15 +4842,15 @@ packages: resolution: {integrity: sha512-ztqyC3kLto0e9WbNp0aeP+M3kTt+nbaIveGmUxAtZa+8iFgKLUOD4YKM5j+f3QD89bra7UeumolZHKuOXnTmeQ==} engines: {node: '>=8'} - html-validate@8.22.0: - resolution: {integrity: sha512-kKDnU04zdxQIOSZVD6BKma6gWpCMCCFwYvHWwTorBMVbSYXMW1B5kGgLwOMHzTlC3yiuaO7NvJprXk3w7Jko/Q==} + html-validate@8.24.1: + resolution: {integrity: sha512-WDV/JI4sVdX0QW4cupodsuMfI8vDygw3dMXD76OHKNMf7qhKxUsLDnNVKG7GLeAkRP0e0Y6H8AOrlaatob+g4Q==} engines: {node: '>= 16.14'} hasBin: true peerDependencies: jest: ^27.1 || ^28.1.3 || ^29.0.3 jest-diff: ^27.1 || ^28.1.3 || ^29.0.3 jest-snapshot: ^27.1 || ^28.1.3 || ^29.0.3 - vitest: ^0.34 || ^1 + vitest: ^0.34.0 || ^1.0.0 || ^2.0.0 peerDependenciesMeta: jest: optional: true @@ -4404,10 +4918,6 @@ packages: httpxy@0.1.5: resolution: {integrity: sha512-hqLDO+rfststuyEUTWObQK6zHEEmZ/kaIP2/zclGGZn6X8h/ESTWg+WKecQ/e5k4nPswjzZD+q2VqZIbr15CoQ==} - human-signals@2.1.0: - resolution: {integrity: sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==} - engines: {node: '>=10.17.0'} - human-signals@4.3.1: resolution: {integrity: sha512-nZXjEF2nbo7lIw3mgYjItAfgQXog3OjJogSbKa2CQIIvSGWcKgeJnQlNXip6NglNzYH45nSRiEVimMvYL8DDqQ==} engines: {node: '>=14.18.0'} @@ -4433,6 +4943,10 @@ packages: resolution: {integrity: sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==} engines: {node: '>= 4'} + ignore@6.0.2: + resolution: {integrity: sha512-InwqeHHN2XpumIkMvpl/DCJVrAHgCsG5+cn1XlnLWGwtZBm8QJfSusItfrwx81CTp5agNZqpKU2J/ccC5nGT4A==} + engines: {node: '>= 4'} + image-meta@0.2.1: resolution: {integrity: sha512-K6acvFaelNxx8wc2VjbIzXKDVB0Khs0QT35U6NkGfTdCmjLNcO2945m7RFNR9/RPVFm48hq7QPzK8uGH18HCGw==} @@ -4596,10 +5110,6 @@ packages: resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==} engines: {node: '>=0.12.0'} - is-path-inside@3.0.3: - resolution: {integrity: sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==} - engines: {node: '>=8'} - is-path-inside@4.0.0: resolution: {integrity: sha512-lJJV/5dYS+RcL8uQdBDW9c9uWFLLBNRyFhnAKXw5tVqLlKZ4RMGZKv+YQ/IA3OhD+RpbJa1LLFM1FQPGyIXvOA==} engines: {node: '>=12'} @@ -4717,8 +5227,8 @@ packages: resolution: {integrity: sha512-2yTgeWTWzMWkHu6Jp9NKgePDaYHbntiwvYuuJLbbN9vl7DC9DvXKOB2BC3ZZ92D3cvV/aflH0osDfwpHepQ53w==} hasBin: true - jiti@2.0.0-beta.3: - resolution: {integrity: sha512-pmfRbVRs/7khFrSAYnSiJ8C0D5GvzkE4Ey2pAvUcJsw1ly/p+7ut27jbJrjY79BpAJQJ4gXYFtK6d1Aub+9baQ==} + jiti@2.3.3: + resolution: {integrity: sha512-EX4oNDwcXSivPrw2qKH2LB5PoFxEvgtv2JgwW0bU858HoLQ+kutSvjLMUqBd0PeJYEinLWhoI9Ol0eYMqj/wNQ==} hasBin: true js-beautify@1.15.1: @@ -4755,11 +5265,6 @@ packages: resolution: {integrity: sha512-uZz5UnB7u4T9LvwmFqXii7pZSouaRPorGs5who1Ip7VO0wxanFvBL7GkM6dTHlgX+jhBApRetaWpnDabOeTcnA==} hasBin: true - jsesc@2.5.2: - resolution: {integrity: sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==} - engines: {node: '>=4'} - hasBin: true - jsesc@3.0.2: resolution: {integrity: sha512-xKqzzWXDttJuOcawBt4KnKHHIf5oQ/Cxax+0PWFG+DFDgHNAdi+TXECADI+RYiFUMmx8792xsMbbgXj4CwnP4g==} engines: {node: '>=6'} @@ -4792,8 +5297,8 @@ packages: engines: {node: '>=6'} hasBin: true - jsonc-parser@3.2.1: - resolution: {integrity: sha512-AilxAyFOAcK5wA1+LeaySVBrHsGQvUFCDWXKpZjzaL0PqW+xfBOttn8GNtWKFWqneyMZj41MWF9Kl6iPWLwgOA==} + jsonc-parser@3.3.1: + resolution: {integrity: sha512-HUgH65KyejrUFPvHFPbqOY0rsFip3Bo5wb4ngvdi1EpCYWUQDC5V+Y7mZws+DLkr4M//zQJoanu1SP+87Dv1oQ==} jsonfile@6.1.0: resolution: {integrity: sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==} @@ -4954,17 +5459,17 @@ packages: markdown-table@3.0.3: resolution: {integrity: sha512-Z1NL3Tb1M9wH4XESsCDEksWoKTdlUafKc4pt0GRwjUyXaCFZ+dc3g2erqB6zm3szA2IUSi7VnPI+o/9jnxh9hw==} - markdownlint-cli@0.41.0: - resolution: {integrity: sha512-kp29tKrMKdn+xonfefjp3a/MsNzAd9c5ke0ydMEI9PR98bOjzglYN4nfMSaIs69msUf1DNkgevAIAPtK2SeX0Q==} + markdownlint-cli@0.42.0: + resolution: {integrity: sha512-AjkzhhZa3TmEGi/CE2Wpmny69x1IrzqK2gPB0k8SmNMRgnSAJfyEO5FgZdWTHtJ6Nrdv5FWt5c4C5pkG6Dk30A==} engines: {node: '>=18'} hasBin: true - markdownlint-micromark@0.1.9: - resolution: {integrity: sha512-5hVs/DzAFa8XqYosbEAEg6ok6MF2smDj89ztn9pKkCtdKHVdPQuGMH7frFfYL9mLkvfFe4pTyAMffLbjf3/EyA==} + markdownlint-micromark@0.1.10: + resolution: {integrity: sha512-no5ZfdqAdWGxftCLlySHSgddEjyW4kui4z7amQcGsSKfYC5v/ou+8mIQVyg9KQMeEZLNtz9OPDTj7nnTnoR4FQ==} engines: {node: '>=18'} - markdownlint@0.34.0: - resolution: {integrity: sha512-qwGyuyKwjkEMOJ10XN6OTKNOVYvOIi35RNvDLNxTof5s8UmyGHlCdpngRHoRGNvQVGuxO3BJ7uNSgdeX166WXw==} + markdownlint@0.35.0: + resolution: {integrity: sha512-wgp8yesWjFBL7bycA3hxwHRdsZGJhjhyP1dSxKVKrza0EPFYtn+mHtkVy6dvP1kGSjovyG5B8yNP6Frj0UFUJg==} engines: {node: '>=18'} mdast-util-find-and-replace@3.0.1: @@ -5009,6 +5514,9 @@ packages: mdn-data@2.0.30: resolution: {integrity: sha512-GaqWWShW4kv/G9IEucWScBx9G1/vsFZZJUO+tD26M8J8z3Kw5RDQjaoZe03YAClgeS/SWPOcb4nkFBTEi5DUEA==} + mdn-data@2.10.0: + resolution: {integrity: sha512-qq7C3EtK3yJXMwz1zAab65pjl+UhohqMOctTgcqjLOWABqmwj+me02LSsCuEUxnst9X1lCBpoE0WArGKgdGDzw==} + mdurl@2.0.0: resolution: {integrity: sha512-Lf+9+2r+Tdp5wXDXC4PcIBjTDtq4UKjCPMQhKIuzpJNW0b96kVqSwW0bT7FhRSfmAiFYgP+SCRvdrDozfh0U5w==} @@ -5016,8 +5524,8 @@ packages: resolution: {integrity: sha512-UERzLsxzllchadvbPs5aolHh65ISpKpM+ccLbOJ8/vvpBKmAWf+la7dXFy7Mr0ySHbdHrFv5kGFCUHHe6GFEmw==} engines: {node: '>= 4.0.0'} - memfs@4.11.1: - resolution: {integrity: sha512-LZcMTBAgqUUKNXZagcZxvXXfgF1bHX7Y7nQ0QyEiNbRJgE29GhgPd8Yna1VQcLlPiHt/5RFJMWYN9Uv/VPNvjQ==} + memfs@4.13.0: + resolution: {integrity: sha512-dIs5KGy24fbdDhIAg0RxXpFqQp3RwL6wgSMRF9OSuphL/Uc9a4u2/SDJKPLj/zUgtOGKuHrRMrj563+IErj4Cg==} engines: {node: '>= 4.0.0'} memory-fs@0.5.0: @@ -5147,10 +5655,6 @@ packages: engines: {node: '>=16'} hasBin: true - mimic-fn@2.1.0: - resolution: {integrity: sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==} - engines: {node: '>=6'} - mimic-fn@4.0.0: resolution: {integrity: sha512-vqiC06CuhBTUdZH+RYl8sFrL096vA45Ok5ISO6sE/Mr1jRbGH4Csnhi8f3wKVl7x8mO4Au7Ir9D3Oyv1VYMFJw==} engines: {node: '>=12'} @@ -5214,12 +5718,12 @@ packages: engines: {node: '>=10'} hasBin: true - mkdist@1.5.9: - resolution: {integrity: sha512-PdJimzhcgDxaHpk1SUabw56gT3BU15vBHUTHkeeus8Kl7jUkpgG7+z0PiS/y23XXgO8TiU/dKP3L1oG55qrP1g==} + mkdist@1.6.0: + resolution: {integrity: sha512-nD7J/mx33Lwm4Q4qoPgRBVA9JQNKgyE7fLo5vdPWVDdjz96pXglGERp/fRnGPCTB37Kykfxs5bDdXa9BWOT9nw==} hasBin: true peerDependencies: sass: ^1.78.0 - typescript: 5.6.2 + typescript: 5.6.3 vue-tsc: ^1.8.27 || ^2.0.21 peerDependenciesMeta: sass: @@ -5229,8 +5733,8 @@ packages: vue-tsc: optional: true - mlly@1.7.1: - resolution: {integrity: sha512-rrVRZRELyQzrIUAVMHxP97kv+G786pHmOKzuFII8zDYahFBS7qnHh2AlYSl1GAHhaMPCz6/oHjVMcfFYgFYHgA==} + mlly@1.7.2: + resolution: {integrity: sha512-tN3dvVHYVz4DhSXinXIk7u9syPYaJvio118uomkovAtWBT+RdbP6Lfh/5Lvo519YMmwBafwlh20IPTXIStscpA==} mri@1.2.0: resolution: {integrity: sha512-tzzskb3bG8LvYGFF/mDTpq3jpI6Q9wc3LEmBaghu+DdCssd1FakN7Bc0hVNmEyGq1bq3RgfkCb3cmQLpNPOroA==} @@ -5360,8 +5864,8 @@ packages: nth-check@2.1.1: resolution: {integrity: sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w==} - nuxi@3.13.2: - resolution: {integrity: sha512-yAgpxBcIB2/DWL7dWRZOQa5ULLZQ4AWgYdqtUDbeOZ3KxmY/+fqm8/UJuU7QK81JrccNaZeSI+GLe5BY7RR3cQ==} + nuxi@3.14.0: + resolution: {integrity: sha512-MhG4QR6D95jQxhnwKfdKXulZ8Yqy1nbpwbotbxY5IcabOzpEeTB8hYn2BFkmYdMUB0no81qpv2ldZmVCT9UsnQ==} engines: {node: ^16.10.0 || >=18.0.0} hasBin: true @@ -5371,8 +5875,8 @@ packages: peerDependencies: '@nuxtjs/mdc': '>=0.5.0' - nypm@0.3.11: - resolution: {integrity: sha512-E5GqaAYSnbb6n1qZyik2wjPDZON43FqOJO59+3OkWrnmQtjggrMOVnsyzfjxp/tS6nlYJBA4zRA5jSM2YaadMg==} + nypm@0.3.12: + resolution: {integrity: sha512-D3pzNDWIvgA+7IORhD/IuWzEk4uXv6GsgOxiid4UU3h9oq5IqV1KtPDi63n4sZJ/xcWlr88c0QM2RgN5VbOhFA==} engines: {node: ^14.16.0 || >=16.10.0} hasBin: true @@ -5396,11 +5900,8 @@ packages: resolution: {integrity: sha512-byy+U7gp+FVwmyzKPYhW2h5l3crpmGsxl7X2s8y43IgxvG4g3QZ6CffDtsNQy1WsmZpQbO+ybo0AlW7TY6DcBQ==} engines: {node: '>= 0.4'} - ofetch@1.3.4: - resolution: {integrity: sha512-KLIET85ik3vhEfS+3fDlc/BAZiAp+43QEC/yCo5zkNoY2YaKvNkOaFr/6wCFgFH1kuYQM5pMNi0Tg8koiIemtw==} - - ohash@1.1.3: - resolution: {integrity: sha512-zuHHiGTYTA1sYJ/wZN+t5HKZaH23i4yI1HMwbuXm24Nid7Dv0KcuRlKoNKS9UNfAVSBlnGLcuQrnOKWOZoEGaw==} + ofetch@1.4.1: + resolution: {integrity: sha512-QZj2DfGplQAr2oj9KzceK9Hwz6Whxazmn85yYeVuS3u9XTMOGMRx0kO95MQ+vLsj/S/NwBDMMLU5hpxvI6Tklw==} ohash@1.1.4: resolution: {integrity: sha512-FlDryZAahJmEF3VR3w1KogSEdWX3WhA5GPakFx4J81kEAiHyLMpdLLElS8n8dfNadMgAne/MywcvmogzscVt4g==} @@ -5412,10 +5913,6 @@ packages: once@1.4.0: resolution: {integrity: sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==} - onetime@5.1.2: - resolution: {integrity: sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==} - engines: {node: '>=6'} - onetime@6.0.0: resolution: {integrity: sha512-1FlR+gjXK7X+AsAHso35MnyN5KqGwJRi/31ft6x0M194ht7S+rWAvd7PHss9xSKMzE0asv1pyIHaJYq+BbacAQ==} engines: {node: '>=12'} @@ -5434,10 +5931,6 @@ packages: resolution: {integrity: sha512-7x81NCL719oNbsq/3mh+hVrAWmFuEYUqrq/Iw3kUzH8ReypT9QQ0BLoJS7/G9k6N81XjW4qHWtjWwe/9eLy1EQ==} engines: {node: '>=12'} - open@9.1.0: - resolution: {integrity: sha512-OS+QTnw1/4vrf+9hh1jc1jnYjzSG4ttTBB8UxOwAnInG3Uo4ssetzC1ihqaIHjLJnA5GGlRl6QlZXOTQhRBUvg==} - engines: {node: '>=14.16'} - openapi-typescript@6.7.6: resolution: {integrity: sha512-c/hfooPx+RBIOPM09GSxABOZhYPblDoyaGhqBkD/59vtpN21jEuWKDlM0KYTvqJVlSYjKs0tBcIdeXKChlSPtw==} hasBin: true @@ -5446,7 +5939,7 @@ packages: resolution: {integrity: sha512-u4iVuTGkzKG4rHFUMA/IFXTks9tYVQzkowZsScMOdzJSvIF10qSNySWHTwnN2fD+MEeWFAM8i1f3IUBlgS92eQ==} hasBin: true peerDependencies: - typescript: 5.6.2 + typescript: 5.6.3 opener@1.5.2: resolution: {integrity: sha512-ur5UIdyw5Y7yEj9wLzhqXiy6GZ3Mwx0yGI+5sMn2r0N0v3cKJvUmFH5yPP+WXh9e0xfyzyJX95D8l088DNFj7A==} @@ -5592,11 +6085,11 @@ packages: resolution: {integrity: sha512-KocF8ve28eFjjuBKKGvzOBGzG8ew2OqOOSxTTZhirkzH7h3BI1vyzqlR0qbfcDBve1Yzo3FVlWUAtCRrbVN8Fw==} engines: {node: '>=14.16'} - pkg-types@1.2.0: - resolution: {integrity: sha512-+ifYuSSqOQ8CqP4MbZA5hDpb97n3E8SVWdJe+Wms9kj745lmd3b7EZJiqvmLwAlmRfjrI7Hi5z3kdBJ93lFNPA==} + pkg-types@1.2.1: + resolution: {integrity: sha512-sQoqa8alT3nHjGuTjuKgOnvjo4cljkufdtLMnO2LBP/wRwuDlo1tkaEdMxCRhyGRPacv/ztlZgDPm2b7FAmEvw==} - playwright-core@1.47.1: - resolution: {integrity: sha512-i1iyJdLftqtt51mEk6AhYFaAJCDx0xQ/O5NU8EKaWFgMjItPVma542Nh/Aq8aLCjIJSzjaiEQGW/nyqLkGF1OQ==} + playwright-core@1.48.0: + resolution: {integrity: sha512-RBvzjM9rdpP7UUFrQzRwR8L/xR4HyC1QXMzGYTbf1vjw25/ya9NRAVnXi/0fvFopjebvyPzsmoK58xxeEOaVvA==} engines: {node: '>=18'} hasBin: true @@ -6008,6 +6501,10 @@ packages: resolution: {integrity: sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==} engines: {node: '>=8.10.0'} + readdirp@4.0.1: + resolution: {integrity: sha512-GkMg9uOTpIWWKbSsgwb5fA4EavTR+SG/PMPoAY8hkhHfEEY0/vqljY+XHqtDf2cr2IJtoNRDbrrEpZUiZCkYRw==} + engines: {node: '>= 14.16.0'} + redis-errors@1.2.0: resolution: {integrity: sha512-1qny3OExCf0UvUV/5wpYKf2YwPcOqXzkwKKSmKHiE6ZMQs5heeE/c8eXK+PNllPvmjgAbfnsbpkGZWy8cBpn9w==} engines: {node: '>=4'} @@ -6128,28 +6625,24 @@ packages: resolution: {integrity: sha512-aSHRcJ6KG2IHIioYlvAOcEq6U99sVtqDDKVhnwt70rW6tsz3tv5OSjEiWcgzfsHdLyGXZ/3b/7b/+Za3Y6r1XA==} engines: {node: '>=16'} peerDependencies: - rollup: 4.21.3 - typescript: 5.6.2 + rollup: 4.24.0 + typescript: 5.6.3 rollup-plugin-visualizer@5.12.0: resolution: {integrity: sha512-8/NU9jXcHRs7Nnj07PF2o4gjxmm9lXIrZ8r175bT9dK8qoLlvKTwRMArRCMgpMGlq8CTLugRvEmyMeMXIU2pNQ==} engines: {node: '>=14'} hasBin: true peerDependencies: - rollup: 4.21.3 + rollup: 4.24.0 peerDependenciesMeta: rollup: optional: true - rollup@4.21.3: - resolution: {integrity: sha512-7sqRtBNnEbcBtMeRVc6VRsJMmpI+JU1z9VTvW8D4gXIYQFz0aLcsE6rRkyghZkLfEgUZgVvOG7A5CVz/VW5GIA==} + rollup@4.24.0: + resolution: {integrity: sha512-DOmrlGSXNk1DM0ljiQA+i+o0rSLhtii1je5wgk60j49d1jHT5YYttBv1iWOnYSTG+fZZESUOSNiAl89SIet+Cg==} engines: {node: '>=18.0.0', npm: '>=8.0.0'} hasBin: true - run-applescript@5.0.0: - resolution: {integrity: sha512-XcT5rBksx1QdIhlFOCtgZkB99ZEouFZ1E2Kc2LHqNW13U3/74YGdkQRmThTwxy4QIyookibDKYZOPqX//6BlAg==} - engines: {node: '>=12'} - run-applescript@7.0.0: resolution: {integrity: sha512-9by4Ij99JUr/MCFBUkDKLWK3G9HVXmabKz9U5MlIAIuvuzkiOicRYs8XJLxX+xahD+mLiiCYDqF9dKAgtzKP1A==} engines: {node: '>=18'} @@ -6276,8 +6769,8 @@ packages: shiki@1.17.0: resolution: {integrity: sha512-VZf8cPShRwfzPcaswv81+YP7qJEoFwRT+Ehy6bizim7M0zG9bk8Egug550C+xS9g7rKIOPhzAlp2uEyuCxbk/A==} - shiki@1.17.6: - resolution: {integrity: sha512-RejGugKpDM75vh6YtF9R771acxHRDikC/01kxsUGW+Pnaz3pTY+c8aZB5CnD7p0vuFPs1HaoAIU/4E+NCfS+mQ==} + shiki@1.20.0: + resolution: {integrity: sha512-MZJJ1PCFsQB1Piq+25wiz0a75yUv8Q3/fzy7SzRx5ONdjdtGdyiKwYn8vb/FnK5kjS0voWGnPpjG16POauUR+g==} side-channel@1.0.6: resolution: {integrity: sha512-fDW/EZ6Q9RiO8eFG8Hj+7u/oW+XrPTIChwCOM2+th2A6OblDtYYIpve9m+KvI9Z4C9qSEXlaGR6bTEYHReuglA==} @@ -6293,8 +6786,8 @@ packages: resolution: {integrity: sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==} engines: {node: '>=14'} - simple-git@3.26.0: - resolution: {integrity: sha512-5tbkCSzuskR6uA7uA23yjasmA0RzugVo8QM2bpsnxkrgP13eisFT7TMS4a+xKEJvbmr4qf+l0WT3eKa9IxxUyw==} + simple-git@3.27.0: + resolution: {integrity: sha512-ivHoFS9Yi9GY49ogc6/YAi3Fl9ROnF4VyubNylgCkA+RVqLaKWnDSzXOVzya8csELIaWaYNutsEuAhZrtOjozA==} sirv@2.0.4: resolution: {integrity: sha512-94Bdh3cC2PKrbgSOUqTiGPWVZeSiXfKOVZNJniWoqrWrRkB1CJzBU3NEbiTsPcYy1lDsANA/THzS+9WBiy5nfQ==} @@ -6307,10 +6800,6 @@ packages: resolution: {integrity: sha512-kUMbT1oBJCpgrnKoSr0o6wPtvRWT9W9UKvGLwfJYO2WuahZRHOpEyL1ckyMGgMWh0UdpmaoFqKKD29WTomNEGA==} engines: {node: '>=8'} - slash@4.0.0: - resolution: {integrity: sha512-3dOsAHXXUkQTpOYcoAxLIorMTp4gIQr5IW3iVb7A7lFIp0VHhnynm9izx6TssdrIcVIESAlVjtnO2K8bg+Coew==} - engines: {node: '>=12'} - slash@5.1.0: resolution: {integrity: sha512-ZA6oR3T/pEyuqwMgAKT0/hAv8oAXckzbkmR0UkUosQ+Mc4RxGoJkRmwHgHufaenlyAgE1Mxgpdcrf75y6XcnDg==} engines: {node: '>=14.16'} @@ -6321,8 +6810,8 @@ packages: smob@1.5.0: resolution: {integrity: sha512-g6T+p7QO8npa+/hNx9ohv1E5pVCmWrVCUzUXJyLdMmftX6ER0oiWY/w9knEonLpnOp6b6FenKnMfR8gqwWdwig==} - smol-toml@1.2.2: - resolution: {integrity: sha512-fVEjX2ybKdJKzFL46VshQbj9PuA4IUKivalgp48/3zwS9vXzyykzQ6AX92UxHSvWJagziMRLeHMgEzoGO7A8hQ==} + smol-toml@1.3.0: + resolution: {integrity: sha512-tWpi2TsODPScmi48b/OQZGi2lgUmBCHy6SZrhi/FdnnHiU1GwebbCfuQuxsC3nHaLwtYeJGPrDZDIeodDOc4pA==} engines: {node: '>= 18'} source-list-map@2.0.1: @@ -6419,10 +6908,6 @@ packages: resolution: {integrity: sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==} engines: {node: '>=12'} - strip-final-newline@2.0.0: - resolution: {integrity: sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==} - engines: {node: '>=6'} - strip-final-newline@3.0.0: resolution: {integrity: sha512-dOESqjYr96iWYylGObzd39EuNTa5VJxyvVAEm5Jnh7KGo75V43Hk1odPQkNDyXNmUR6k+gEiDVXnjB8HJ3crXw==} engines: {node: '>=12'} @@ -6559,8 +7044,8 @@ packages: tinyexec@0.3.0: resolution: {integrity: sha512-tVGE0mVJPGb0chKhqmsoosjsS+qUnJVGJpZgsHYQcGoPlG3B51R3PouqTgEGH2Dc9jjFyOqOpix6ZHNMXp1FZg==} - tinyglobby@0.2.6: - resolution: {integrity: sha512-NbBoFBpqfcgd1tCiO8Lkfdk+xrA7mlLR9zgvZcZWQQwU63XAfUePyd6wZBaU93Hqw347lHnwFzttAkemHzzz4g==} + tinyglobby@0.2.9: + resolution: {integrity: sha512-8or1+BGEdk1Zkkw2ii16qSS7uVrQJPre5A9o/XkWPATkk23FZh/15BKFxPnlTy6vkljZxLqYCzzBMj30ZrSvjw==} engines: {node: '>=12.0.0'} tinypool@0.8.4: @@ -6583,10 +7068,6 @@ packages: resolution: {integrity: sha512-n1cw8k1k0x4pgA2+9XrOkFydTerNcJ1zWCO5Nn9scWHTD+5tp8dghT2x1uduQePZTZgd3Tupf+x9BxJjeJi77Q==} engines: {node: '>=14.0.0'} - titleize@3.0.0: - resolution: {integrity: sha512-KxVu8EYHDPBdUYdKZdKtU2aj2XfEx9AfjXxE/Aj0vT06w2icA09Vus1rh6eSu1y01akYg6BjIK/hxyLJINoMLQ==} - engines: {node: '>=12'} - to-fast-properties@2.0.0: resolution: {integrity: sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==} engines: {node: '>=4'} @@ -6625,28 +7106,36 @@ packages: resolution: {integrity: sha512-UQMIo7pb8WRomKR1/+MFVLTroIvDVtMX3K6OUir8ynLyzB8Jeriont2bTAtmNPa1ekAgN7YPDyf6V+ygrdU+eQ==} engines: {node: '>=16'} peerDependencies: - typescript: 5.6.2 + typescript: 5.6.3 tslib@2.7.0: resolution: {integrity: sha512-gLXCKdN1/j47AiHiOkJN69hJmcbGTHI0ImLmbYLHykhgeN0jVGola9yVjFgzCUklsZQMW55o+dW7IXv3RCXDzA==} - tsx@4.19.0: - resolution: {integrity: sha512-bV30kM7bsLZKZIOCHeMNVMJ32/LuJzLVajkQI/qf92J2Qr08ueLQvW00PUZGiuLPP760UINwupgUj8qrSCPUKg==} + tsx@4.19.1: + resolution: {integrity: sha512-0flMz1lh74BR4wOvBjuh9olbnwqCPc35OOlfyzHba0Dc+QNUeWX/Gq2YTbnwcWPO3BMd8fkzRVrHcsR+a7z7rA==} engines: {node: '>=18.0.0'} hasBin: true twoslash-protocol@0.2.11: resolution: {integrity: sha512-rp+nkOWbKfJnBTDZtnIaBGjnU+4CaMhqu6db2UU7byU96rH8X4hao4BOxYw6jdZc85Lhv5pOfcjgfHeQyLzndQ==} + twoslash-protocol@0.2.12: + resolution: {integrity: sha512-5qZLXVYfZ9ABdjqbvPc4RWMr7PrpPaaDSeaYY55vl/w1j6H6kzsWK/urAEIXlzYlyrFmyz1UbwIt+AA0ck+wbg==} + twoslash-vue@0.2.11: resolution: {integrity: sha512-wBwIwG0PRuv5V+1DD4Zno1j6MnaCbaY/ELops7oKSoMBTIQL720iRXppyldVVoYvti2caUA97T36XhZXHpjQyA==} peerDependencies: - typescript: 5.6.2 + typescript: 5.6.3 twoslash@0.2.11: resolution: {integrity: sha512-392Qkcu5sD2hROLZ+XPywChreDGJ8Yu5nnK/Moxfti/R39q0Q39MaV7iHjz92B5qucyjsQFnKMdYIzafX5T8dg==} peerDependencies: - typescript: 5.6.2 + typescript: 5.6.3 + + twoslash@0.2.12: + resolution: {integrity: sha512-tEHPASMqi7kqwfJbkk7hc/4EhlrKCSLcur+TcvYki3vhIfaRMXnXjaYFgXpoZRbT6GdprD4tGuVBEmTpUgLBsw==} + peerDependencies: + typescript: 5.6.3 type-check@0.4.0: resolution: {integrity: sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==} @@ -6680,8 +7169,8 @@ packages: resolution: {integrity: sha512-yOGpmOAL7CkKe/91I5O3gPICmJNLJ1G4zFYVAsRHg7M64biSnPtRj0WNQt++bRkjYOqjWXrhnUw1utzmVErAdg==} engines: {node: '>=16'} - typescript@5.6.2: - resolution: {integrity: sha512-NW8ByodCSNCwZeghjN3o+JX5OFH0Ojg6sadjEKY4huZ52TqbJTJnDo5+Tw98lSy63NZvi4n+ez5m2u5d4PkZyw==} + typescript@5.6.3: + resolution: {integrity: sha512-hjcS1mhfuyi4WW8IWtjP7brDrG2cuDZukyrYrSauoXGNgx0S7zceP07adYkJycEr56BOUTNPzbInooiN3fn1qw==} engines: {node: '>=14.17'} hasBin: true @@ -6694,11 +7183,11 @@ packages: ultrahtml@1.5.3: resolution: {integrity: sha512-GykOvZwgDWZlTQMtp5jrD4BVL+gNn2NVlVafjcFUJ7taY20tqYdwdoWBFy6GBJsNTZe1GkGPkSl5knQAjtgceg==} - unbuild@3.0.0-rc.7: - resolution: {integrity: sha512-LsxbMZGYC0ZwHb8sxqHzuBsMq+GS9g5ObWtnfCElpOz/yUT+raIoA6Ref53Ht4wLcjwraOxYMwVo1rHXpMpTzQ==} + unbuild@3.0.0-rc.11: + resolution: {integrity: sha512-faBmtdo73jSSoghmf7CuscmAMOr34eri9j674pQP+KKjxvwTKaRol6f2DVhKhNCfceeHdfm2BfDwRxo2L/w0fg==} hasBin: true peerDependencies: - typescript: 5.6.2 + typescript: 5.6.3 peerDependenciesMeta: typescript: optional: true @@ -6722,8 +7211,8 @@ packages: unenv@1.10.0: resolution: {integrity: sha512-wY5bskBQFL9n3Eca5XnhH6KbUo/tfvkwm9OpcdCvLaeA7piBNbavbOKJySEwQ1V0RH6HvNlSAFRTpvTqgKRQXQ==} - unhead@1.11.6: - resolution: {integrity: sha512-TKTQGUzHKF925VZ4KZVbLfKFzTVTEWfPLaXKmkd/ptEY2FHEoJUF7xOpAWc3K7Jzy/ExS66TL7GnLLjtd4sISg==} + unhead@1.11.7: + resolution: {integrity: sha512-aA0+JBRryLhDKUq6L2JhMDLZEG/ElyyDASyC9wiwDl6nvvsj9hD26LgPWgmAsSd+9HtMGM2N1gU27CWEMo16CQ==} unicode-emoji-modifier-base@1.0.0: resolution: {integrity: sha512-yLSH4py7oFH3oG/9K+XWrz1pSi3dfUrWEnInbxMfArOfc1+33BlGPQtLsOYwvdMy11AwUBetYuaRxSPqgkq+8g==} @@ -6736,8 +7225,8 @@ packages: unified@11.0.5: resolution: {integrity: sha512-xKvGhPWw3k84Qjh8bI3ZeJjqnyadK+GEFtazSfZv/rKeTkTjOJho6mFqh2SM96iIcZokxiOpg78GazTSg8+KHA==} - unimport@3.12.0: - resolution: {integrity: sha512-5y8dSvNvyevsnw4TBQkIQR1Rjdbb+XjVSwQwxltpnVZrStBvvPkMPcZrh1kg5kY77kpx6+D4Ztd3W6FOBH/y2Q==} + unimport@3.13.1: + resolution: {integrity: sha512-nNrVzcs93yrZQOW77qnyOVHtb68LegvhYFwxFMfuuWScmwQmyVCG/NBuN8tYsaGzgQUVYv34E/af+Cc9u4og4A==} unist-builder@4.0.0: resolution: {integrity: sha512-wmRFnH+BLpZnTKpc5L7O67Kac89s9HMrtELpnNaE6TAobq5DTZZs5YaTQfAZBA9bFPECx2uVAPO31c+GVug8mg==} @@ -6761,12 +7250,24 @@ packages: resolution: {integrity: sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==} engines: {node: '>= 10.0.0'} - unocss@0.62.3: - resolution: {integrity: sha512-CLS6+JIlBobe/iPTz07pehyGDP8VqGJsiE+ZZ3Xkgib3hw76nCqAQF/4mJ8jVoV4C8KvGyVxmHaSSCFOkWmmZg==} + unocss@0.62.4: + resolution: {integrity: sha512-SaGbxXQkk8GDPeJpWsBCZ8a23Knu4ixVTt6pvcQWKjOCGTd9XBd+vLZzN2WwdwgBPVwmMmx5wp+/gPHKFNOmIw==} engines: {node: '>=14'} peerDependencies: - '@unocss/webpack': 0.62.3 - vite: 5.4.5 + '@unocss/webpack': 0.62.4 + vite: 5.4.8 + peerDependenciesMeta: + '@unocss/webpack': + optional: true + vite: + optional: true + + unocss@0.63.4: + resolution: {integrity: sha512-MQ/ktuJ2MoXBsd117DEONFubJRQN6Og4mQJLbT+0nna2aTW4jYJESJ479mJYWq/ajonxEaM+zrf8M92VIWxzEw==} + engines: {node: '>=14'} + peerDependencies: + '@unocss/webpack': 0.63.4 + vite: 5.4.8 peerDependenciesMeta: '@unocss/webpack': optional: true @@ -6834,16 +7335,12 @@ packages: ioredis: optional: true - untildify@4.0.0: - resolution: {integrity: sha512-KK8xQ1mkzZeg9inewmFVDNkg3l5LUhoq9kN6iWYB/CC9YMG8HA+c1Q8HwDe6dEX7kErrEVNVBO3fWsVq5iDgtw==} - engines: {node: '>=8'} - untun@0.1.3: resolution: {integrity: sha512-4luGP9LMYszMRZwsvyUd9MrxgEGZdZuZgpVQHEEX0lCYFESasVRvZd0EYpCkOIbJKHMuv0LskpXc/8Un+MJzEQ==} hasBin: true - untyped@1.4.2: - resolution: {integrity: sha512-nC5q0DnPEPVURPhfPQLahhSTnemVtPzdx7ofiRxXpOB2SYnb3MfdU3DVGyJdS8Lx+tBWeAePO8BfU/3EgksM7Q==} + untyped@1.5.1: + resolution: {integrity: sha512-reBOnkJBFfBZ8pCKaeHgfZLcehXtM6UTxc+vqs1JvCps0c4amLNp3fhdGBZwYp+VLyoY9n3X5KOP7lCyWBUX9A==} hasBin: true unwasm@0.3.9: @@ -6883,12 +7380,12 @@ packages: v-lazy-show@0.2.4: resolution: {integrity: sha512-Lx9Str2i+HTh+zGzs9O3YyhGAZOAAfU+6MUUPcQPPiPxQO1sHBEv9sH3MO9bPc4T09gsjsS2+sbaCWQ1MdhpJQ==} peerDependencies: - '@vue/compiler-core': ^3.3 + '@vue/compiler-core': 3.5.11 - valibot@0.42.0: - resolution: {integrity: sha512-igMdmHXxDiQY714ssh9bGisMqJ2yg7sko1KOmv/omnrIacGtP6mGrbvVT1IuV1bDrHyG9ybgpHwG1UElDiDCLg==} + valibot@0.42.1: + resolution: {integrity: sha512-3keXV29Ar5b//Hqi4MbSdV7lfVp6zuYLZuA9V1PvQUsXqogr+u5lvLPLk3A4f74VUXDnf/JfWMN6sB+koJ/FFw==} peerDependencies: - typescript: 5.6.2 + typescript: 5.6.3 peerDependenciesMeta: typescript: optional: true @@ -6908,15 +7405,15 @@ packages: vite-hot-client@0.2.3: resolution: {integrity: sha512-rOGAV7rUlUHX89fP2p2v0A2WWvV3QMX2UYq0fRqsWSvFvev4atHWqjwGoKaZT1VTKyLGk533ecu3eyd0o59CAg==} peerDependencies: - vite: 5.4.5 + vite: 5.4.8 vite-node@1.6.0: resolution: {integrity: sha512-de6HJgzC+TFzOu0NTC4RAIsyf/DY/ibWDYQUcuEA84EMHhcefTUGkjFHKKEJhQN4A+6I0u++kr3l36ZF2d7XRw==} engines: {node: ^18.0.0 || >=20.0.0} hasBin: true - vite-node@2.1.1: - resolution: {integrity: sha512-N/mGckI1suG/5wQI35XeR9rsMsPqKXzq1CdUndzVstBj/HvyxxGctwnK6WX43NGt5L3Z5tcRf83g4TITKJhPrA==} + vite-node@2.1.2: + resolution: {integrity: sha512-HPcGNN5g/7I2OtPjLqgOtCRu/qhVvBxTUD3qzitmL0SrG1cWFzxzhMDWussxSbrRYWqnKf8P2jiNhPMSN+ymsQ==} engines: {node: ^18.0.0 || >=20.0.0} hasBin: true @@ -6929,8 +7426,8 @@ packages: meow: ^9.0.0 optionator: ^0.9.1 stylelint: '>=13' - typescript: 5.6.2 - vite: 5.4.5 + typescript: 5.6.3 + vite: 5.4.8 vls: '*' vti: '*' vue-tsc: ~2.1.6 @@ -6959,22 +7456,22 @@ packages: engines: {node: '>=14'} peerDependencies: '@nuxt/kit': '*' - vite: 5.4.5 + vite: 5.4.8 peerDependenciesMeta: '@nuxt/kit': optional: true - vite-plugin-vue-inspector@5.2.0: - resolution: {integrity: sha512-wWxyb9XAtaIvV/Lr7cqB1HIzmHZFVUJsTNm3yAxkS87dgh/Ky4qr2wDEWNxF23fdhVa3jQ8MZREpr4XyiuaRqA==} + vite-plugin-vue-inspector@5.1.3: + resolution: {integrity: sha512-pMrseXIDP1Gb38mOevY+BvtNGNqiqmqa2pKB99lnLsADQww9w9xMbAfT4GB6RUoaOkSPrtlXqpq2Fq+Dj2AgFg==} peerDependencies: - vite: 5.4.5 + vite: 5.4.8 - vite@5.4.5: - resolution: {integrity: sha512-pXqR0qtb2bTwLkev4SE3r4abCNioP3GkjvIDLlzziPpXtHgiJIjuKl+1GN6ESOT3wMjG3JTeARopj2SwYaHTOA==} + vite@5.4.8: + resolution: {integrity: sha512-FqrItQ4DT1NC4zCUqMB4c4AZORMKIa0m8/URVCZ77OZ/QSNeJ54bU1vrFADbDsuwfIPcgknRkmqakQcgnL4GiQ==} engines: {node: ^18.0.0 || >=20.0.0} hasBin: true peerDependencies: - '@types/node': 20.16.5 + '@types/node': 20.16.11 less: '*' lightningcss: ^1.21.0 sass: '*' @@ -7009,7 +7506,7 @@ packages: hasBin: true peerDependencies: '@edge-runtime/vm': '*' - '@types/node': 20.16.5 + '@types/node': 20.16.11 '@vitest/browser': 1.6.0 '@vitest/ui': 1.6.0 happy-dom: '*' @@ -7028,15 +7525,15 @@ packages: jsdom: optional: true - vitest@2.1.1: - resolution: {integrity: sha512-97We7/VC0e9X5zBVkvt7SGQMGrRtn3KtySFQG5fpaMlS+l62eeXRQO633AYhSTC3z7IMebnPPNjGXVGNRFlxBA==} + vitest@2.1.2: + resolution: {integrity: sha512-veNjLizOMkRrJ6xxb+pvxN6/QAWg95mzcRjtmkepXdN87FNfxAss9RKe2far/G9cQpipfgP2taqg0KiWsquj8A==} engines: {node: ^18.0.0 || >=20.0.0} hasBin: true peerDependencies: '@edge-runtime/vm': '*' - '@types/node': 20.16.5 - '@vitest/browser': 2.1.1 - '@vitest/ui': 2.1.1 + '@types/node': 20.16.11 + '@vitest/browser': 2.1.2 + '@vitest/ui': 2.1.2 happy-dom: '*' jsdom: '*' peerDependenciesMeta: @@ -7081,8 +7578,8 @@ packages: vscode-uri@3.0.8: resolution: {integrity: sha512-AyFQ0EVmsOZOlAnxoFOGOq1SQDWAB7C6aqMGS23svWAllfOaxbuFvcT8D1i8z3Gyn8fraVeZNNmN6e9bxxXkKw==} - vue-bundle-renderer@2.1.0: - resolution: {integrity: sha512-uZ+5ZJdZ/b43gMblWtcpikY6spJd0nERaM/1RtgioXNfWFbjKlUwrS8HlrddN6T2xtptmOouWclxLUkpgcVX3Q==} + vue-bundle-renderer@2.1.1: + resolution: {integrity: sha512-+qALLI5cQncuetYOXp4yScwYvqh8c6SMXee3B+M7oTZxOgtESP0l4j/fXdEJoZ+EdMxkGWIj+aSEyjXkOdmd7g==} vue-component-type-helpers@2.1.6: resolution: {integrity: sha512-ng11B8B/ZADUMMOsRbqv0arc442q7lifSubD0v8oDXIFoMg/mXwAPUunrroIDkY+mcD0dHKccdaznSVp8EoX3w==} @@ -7093,7 +7590,7 @@ packages: hasBin: true peerDependencies: '@vue/composition-api': ^1.0.0-rc.1 - vue: 3.5.5 + vue: 3.5.11 peerDependenciesMeta: '@vue/composition-api': optional: true @@ -7122,23 +7619,23 @@ packages: vue-resize@2.0.0-alpha.1: resolution: {integrity: sha512-7+iqOueLU7uc9NrMfrzbG8hwMqchfVfSzpVlCMeJQe4pyibqyoifDNbKTZvwxZKDvGkB+PdFeKvnGZMoEb8esg==} peerDependencies: - vue: 3.5.5 + vue: 3.5.11 vue-router@4.4.5: resolution: {integrity: sha512-4fKZygS8cH1yCyuabAXGUAsyi1b2/o/OKgu/RUb+znIYOxPRxdkytJEx+0wGcpBE1pX6vUgh5jwWOKRGvuA/7Q==} peerDependencies: - vue: 3.5.5 + vue: 3.5.11 vue-tsc@2.1.6: resolution: {integrity: sha512-f98dyZp5FOukcYmbFpuSCJ4Z0vHSOSmxGttZJCsFeX0M4w/Rsq0s4uKXjcSRsZqsRgQa6z7SfuO+y0HVICE57Q==} hasBin: true peerDependencies: - typescript: 5.6.2 + typescript: 5.6.3 - vue@3.5.5: - resolution: {integrity: sha512-ybC+xn67K4+df1yVeov4UjBGyVcXM0a1g7JVZr+pWVUX3xF6ntXU0wIjkTkduZBUIpxTlsftJSxz2kwhsT7dgA==} + vue@3.5.11: + resolution: {integrity: sha512-/8Wurrd9J3lb72FTQS7gRMNQD4nztTtKPmuDuPuhqXmmpD6+skVjAeahNpVzsuky6Sy9gy7wn8UadqPtt9SQIg==} peerDependencies: - typescript: 5.6.2 + typescript: 5.6.3 peerDependenciesMeta: typescript: optional: true @@ -7184,8 +7681,8 @@ packages: webpack-virtual-modules@0.6.2: resolution: {integrity: sha512-66/V2i5hQanC51vBQKPH4aI8NMAcBW59FVBs+rC7eGHupMyfn34q7rZIE+ETlJ+XTevqfUhVVBgSUNSW2flEUQ==} - webpack@5.94.0: - resolution: {integrity: sha512-KcsGn50VT+06JH/iunZJedYGUJS5FGjow8wb9c0v5n1Om8O1g4L6LjtfxwlXIATopoQu+vOXXa7gYisWxCoPyg==} + webpack@5.95.0: + resolution: {integrity: sha512-2t3XstrKULz41MNMBF+cJ97TyHdyQ8HCt//pqErqDvNjU9YQBnZxIHa11VXsi7F3mb5/aO2tuDxdeTPdU7xu9Q==} engines: {node: '>=10.13.0'} hasBin: true peerDependencies: @@ -7350,25 +7847,25 @@ snapshots: '@types/json-schema': 7.0.15 js-yaml: 4.1.0 - '@babel/code-frame@7.24.7': + '@babel/code-frame@7.25.7': dependencies: - '@babel/highlight': 7.24.7 + '@babel/highlight': 7.25.7 picocolors: 1.1.0 - '@babel/compat-data@7.25.4': {} + '@babel/compat-data@7.25.7': {} - '@babel/core@7.25.2': + '@babel/core@7.25.7': dependencies: '@ampproject/remapping': 2.3.0 - '@babel/code-frame': 7.24.7 - '@babel/generator': 7.25.6 - '@babel/helper-compilation-targets': 7.25.2 - '@babel/helper-module-transforms': 7.25.2(@babel/core@7.25.2) - '@babel/helpers': 7.25.6 - '@babel/parser': 7.25.6 - '@babel/template': 7.25.0 - '@babel/traverse': 7.25.6 - '@babel/types': 7.25.6 + '@babel/code-frame': 7.25.7 + '@babel/generator': 7.25.7 + '@babel/helper-compilation-targets': 7.25.7 + '@babel/helper-module-transforms': 7.25.7(@babel/core@7.25.7) + '@babel/helpers': 7.25.7 + '@babel/parser': 7.25.7 + '@babel/template': 7.25.7 + '@babel/traverse': 7.25.7 + '@babel/types': 7.25.7 convert-source-map: 2.0.0 debug: 4.3.7(supports-color@9.4.0) gensync: 1.0.0-beta.2 @@ -7377,175 +7874,155 @@ snapshots: transitivePeerDependencies: - supports-color - '@babel/generator@7.25.6': + '@babel/generator@7.25.7': dependencies: - '@babel/types': 7.25.6 + '@babel/types': 7.25.7 '@jridgewell/gen-mapping': 0.3.5 '@jridgewell/trace-mapping': 0.3.25 - jsesc: 2.5.2 + jsesc: 3.0.2 '@babel/helper-annotate-as-pure@7.24.7': dependencies: - '@babel/types': 7.25.6 + '@babel/types': 7.25.7 - '@babel/helper-compilation-targets@7.25.2': + '@babel/helper-compilation-targets@7.25.7': dependencies: - '@babel/compat-data': 7.25.4 - '@babel/helper-validator-option': 7.24.8 - browserslist: 4.23.3 + '@babel/compat-data': 7.25.7 + '@babel/helper-validator-option': 7.25.7 + browserslist: 4.24.0 lru-cache: 5.1.1 semver: 6.3.1 - '@babel/helper-create-class-features-plugin@7.25.4(@babel/core@7.25.2)': + '@babel/helper-create-class-features-plugin@7.25.4(@babel/core@7.25.7)': dependencies: - '@babel/core': 7.25.2 + '@babel/core': 7.25.7 '@babel/helper-annotate-as-pure': 7.24.7 '@babel/helper-member-expression-to-functions': 7.24.8 '@babel/helper-optimise-call-expression': 7.24.7 - '@babel/helper-replace-supers': 7.25.0(@babel/core@7.25.2) + '@babel/helper-replace-supers': 7.25.0(@babel/core@7.25.7) '@babel/helper-skip-transparent-expression-wrappers': 7.24.7 - '@babel/traverse': 7.25.6 + '@babel/traverse': 7.25.7 semver: 6.3.1 transitivePeerDependencies: - supports-color '@babel/helper-member-expression-to-functions@7.24.8': dependencies: - '@babel/traverse': 7.25.6 - '@babel/types': 7.25.6 + '@babel/traverse': 7.25.7 + '@babel/types': 7.25.7 transitivePeerDependencies: - supports-color - '@babel/helper-module-imports@7.24.7': + '@babel/helper-module-imports@7.25.7': dependencies: - '@babel/traverse': 7.25.6 - '@babel/types': 7.25.6 + '@babel/traverse': 7.25.7 + '@babel/types': 7.25.7 transitivePeerDependencies: - supports-color - '@babel/helper-module-transforms@7.25.2(@babel/core@7.25.2)': + '@babel/helper-module-transforms@7.25.7(@babel/core@7.25.7)': dependencies: - '@babel/core': 7.25.2 - '@babel/helper-module-imports': 7.24.7 - '@babel/helper-simple-access': 7.24.7 - '@babel/helper-validator-identifier': 7.24.7 - '@babel/traverse': 7.25.6 + '@babel/core': 7.25.7 + '@babel/helper-module-imports': 7.25.7 + '@babel/helper-simple-access': 7.25.7 + '@babel/helper-validator-identifier': 7.25.7 + '@babel/traverse': 7.25.7 transitivePeerDependencies: - supports-color '@babel/helper-optimise-call-expression@7.24.7': dependencies: - '@babel/types': 7.25.6 + '@babel/types': 7.25.7 '@babel/helper-plugin-utils@7.24.8': {} - '@babel/helper-replace-supers@7.25.0(@babel/core@7.25.2)': + '@babel/helper-replace-supers@7.25.0(@babel/core@7.25.7)': dependencies: - '@babel/core': 7.25.2 + '@babel/core': 7.25.7 '@babel/helper-member-expression-to-functions': 7.24.8 '@babel/helper-optimise-call-expression': 7.24.7 - '@babel/traverse': 7.25.6 + '@babel/traverse': 7.25.7 transitivePeerDependencies: - supports-color - '@babel/helper-simple-access@7.24.7': + '@babel/helper-simple-access@7.25.7': dependencies: - '@babel/traverse': 7.25.6 - '@babel/types': 7.25.6 + '@babel/traverse': 7.25.7 + '@babel/types': 7.25.7 transitivePeerDependencies: - supports-color '@babel/helper-skip-transparent-expression-wrappers@7.24.7': dependencies: - '@babel/traverse': 7.25.6 - '@babel/types': 7.25.6 + '@babel/traverse': 7.25.7 + '@babel/types': 7.25.7 transitivePeerDependencies: - supports-color - '@babel/helper-string-parser@7.24.8': {} + '@babel/helper-string-parser@7.25.7': {} - '@babel/helper-validator-identifier@7.24.7': {} + '@babel/helper-validator-identifier@7.25.7': {} - '@babel/helper-validator-option@7.24.8': {} + '@babel/helper-validator-option@7.25.7': {} - '@babel/helpers@7.25.6': + '@babel/helpers@7.25.7': dependencies: - '@babel/template': 7.25.0 - '@babel/types': 7.25.6 + '@babel/template': 7.25.7 + '@babel/types': 7.25.7 - '@babel/highlight@7.24.7': + '@babel/highlight@7.25.7': dependencies: - '@babel/helper-validator-identifier': 7.24.7 + '@babel/helper-validator-identifier': 7.25.7 chalk: 2.4.2 js-tokens: 4.0.0 picocolors: 1.1.0 - '@babel/parser@7.25.6': + '@babel/parser@7.25.7': dependencies: - '@babel/types': 7.25.6 + '@babel/types': 7.25.7 - '@babel/plugin-proposal-decorators@7.24.7(@babel/core@7.25.2)': + '@babel/plugin-proposal-decorators@7.24.7(@babel/core@7.25.7)': dependencies: - '@babel/core': 7.25.2 - '@babel/helper-create-class-features-plugin': 7.25.4(@babel/core@7.25.2) + '@babel/core': 7.25.7 + '@babel/helper-create-class-features-plugin': 7.25.4(@babel/core@7.25.7) '@babel/helper-plugin-utils': 7.24.8 - '@babel/plugin-syntax-decorators': 7.24.7(@babel/core@7.25.2) + '@babel/plugin-syntax-decorators': 7.24.7(@babel/core@7.25.7) transitivePeerDependencies: - supports-color - '@babel/plugin-syntax-decorators@7.24.7(@babel/core@7.25.2)': + '@babel/plugin-syntax-decorators@7.24.7(@babel/core@7.25.7)': dependencies: - '@babel/core': 7.25.2 + '@babel/core': 7.25.7 '@babel/helper-plugin-utils': 7.24.8 - '@babel/plugin-syntax-import-attributes@7.25.6(@babel/core@7.25.2)': + '@babel/plugin-syntax-import-attributes@7.25.6(@babel/core@7.25.7)': dependencies: - '@babel/core': 7.25.2 + '@babel/core': 7.25.7 '@babel/helper-plugin-utils': 7.24.8 - '@babel/plugin-syntax-import-meta@7.10.4(@babel/core@7.25.2)': + '@babel/plugin-syntax-import-meta@7.10.4(@babel/core@7.25.7)': dependencies: - '@babel/core': 7.25.2 + '@babel/core': 7.25.7 '@babel/helper-plugin-utils': 7.24.8 - '@babel/plugin-syntax-jsx@7.24.7(@babel/core@7.25.2)': + '@babel/plugin-syntax-jsx@7.24.7(@babel/core@7.25.7)': dependencies: - '@babel/core': 7.25.2 + '@babel/core': 7.25.7 '@babel/helper-plugin-utils': 7.24.8 - '@babel/plugin-syntax-typescript@7.25.4(@babel/core@7.25.2)': + '@babel/plugin-syntax-typescript@7.25.4(@babel/core@7.25.7)': dependencies: - '@babel/core': 7.25.2 + '@babel/core': 7.25.7 '@babel/helper-plugin-utils': 7.24.8 - '@babel/plugin-transform-modules-commonjs@7.24.8(@babel/core@7.25.2)': + '@babel/plugin-transform-typescript@7.25.2(@babel/core@7.25.7)': dependencies: - '@babel/core': 7.25.2 - '@babel/helper-module-transforms': 7.25.2(@babel/core@7.25.2) - '@babel/helper-plugin-utils': 7.24.8 - '@babel/helper-simple-access': 7.24.7 - transitivePeerDependencies: - - supports-color - - '@babel/plugin-transform-typescript@7.25.2(@babel/core@7.25.2)': - dependencies: - '@babel/core': 7.25.2 + '@babel/core': 7.25.7 '@babel/helper-annotate-as-pure': 7.24.7 - '@babel/helper-create-class-features-plugin': 7.25.4(@babel/core@7.25.2) + '@babel/helper-create-class-features-plugin': 7.25.4(@babel/core@7.25.7) '@babel/helper-plugin-utils': 7.24.8 '@babel/helper-skip-transparent-expression-wrappers': 7.24.7 - '@babel/plugin-syntax-typescript': 7.25.4(@babel/core@7.25.2) - transitivePeerDependencies: - - supports-color - - '@babel/preset-typescript@7.24.7(@babel/core@7.25.2)': - dependencies: - '@babel/core': 7.25.2 - '@babel/helper-plugin-utils': 7.24.8 - '@babel/helper-validator-option': 7.24.8 - '@babel/plugin-syntax-jsx': 7.24.7(@babel/core@7.25.2) - '@babel/plugin-transform-modules-commonjs': 7.24.8(@babel/core@7.25.2) - '@babel/plugin-transform-typescript': 7.25.2(@babel/core@7.25.2) + '@babel/plugin-syntax-typescript': 7.25.4(@babel/core@7.25.7) transitivePeerDependencies: - supports-color @@ -7553,30 +8030,30 @@ snapshots: dependencies: regenerator-runtime: 0.14.1 - '@babel/standalone@7.25.6': {} + '@babel/standalone@7.25.7': {} - '@babel/template@7.25.0': + '@babel/template@7.25.7': dependencies: - '@babel/code-frame': 7.24.7 - '@babel/parser': 7.25.6 - '@babel/types': 7.25.6 + '@babel/code-frame': 7.25.7 + '@babel/parser': 7.25.7 + '@babel/types': 7.25.7 - '@babel/traverse@7.25.6': + '@babel/traverse@7.25.7': dependencies: - '@babel/code-frame': 7.24.7 - '@babel/generator': 7.25.6 - '@babel/parser': 7.25.6 - '@babel/template': 7.25.0 - '@babel/types': 7.25.6 + '@babel/code-frame': 7.25.7 + '@babel/generator': 7.25.7 + '@babel/parser': 7.25.7 + '@babel/template': 7.25.7 + '@babel/types': 7.25.7 debug: 4.3.7(supports-color@9.4.0) globals: 11.12.0 transitivePeerDependencies: - supports-color - '@babel/types@7.25.6': + '@babel/types@7.25.7': dependencies: - '@babel/helper-string-parser': 7.24.8 - '@babel/helper-validator-identifier': 7.24.7 + '@babel/helper-string-parser': 7.25.7 + '@babel/helper-validator-identifier': 7.25.7 to-fast-properties: 2.0.0 '@bcoe/v8-coverage@0.2.3': {} @@ -7602,6 +8079,9 @@ snapshots: '@esbuild/aix-ppc64@0.23.1': optional: true + '@esbuild/aix-ppc64@0.24.0': + optional: true + '@esbuild/android-arm64@0.20.2': optional: true @@ -7611,6 +8091,9 @@ snapshots: '@esbuild/android-arm64@0.23.1': optional: true + '@esbuild/android-arm64@0.24.0': + optional: true + '@esbuild/android-arm@0.20.2': optional: true @@ -7620,6 +8103,9 @@ snapshots: '@esbuild/android-arm@0.23.1': optional: true + '@esbuild/android-arm@0.24.0': + optional: true + '@esbuild/android-x64@0.20.2': optional: true @@ -7629,6 +8115,9 @@ snapshots: '@esbuild/android-x64@0.23.1': optional: true + '@esbuild/android-x64@0.24.0': + optional: true + '@esbuild/darwin-arm64@0.20.2': optional: true @@ -7638,6 +8127,9 @@ snapshots: '@esbuild/darwin-arm64@0.23.1': optional: true + '@esbuild/darwin-arm64@0.24.0': + optional: true + '@esbuild/darwin-x64@0.20.2': optional: true @@ -7647,6 +8139,9 @@ snapshots: '@esbuild/darwin-x64@0.23.1': optional: true + '@esbuild/darwin-x64@0.24.0': + optional: true + '@esbuild/freebsd-arm64@0.20.2': optional: true @@ -7656,6 +8151,9 @@ snapshots: '@esbuild/freebsd-arm64@0.23.1': optional: true + '@esbuild/freebsd-arm64@0.24.0': + optional: true + '@esbuild/freebsd-x64@0.20.2': optional: true @@ -7665,6 +8163,9 @@ snapshots: '@esbuild/freebsd-x64@0.23.1': optional: true + '@esbuild/freebsd-x64@0.24.0': + optional: true + '@esbuild/linux-arm64@0.20.2': optional: true @@ -7674,6 +8175,9 @@ snapshots: '@esbuild/linux-arm64@0.23.1': optional: true + '@esbuild/linux-arm64@0.24.0': + optional: true + '@esbuild/linux-arm@0.20.2': optional: true @@ -7683,6 +8187,9 @@ snapshots: '@esbuild/linux-arm@0.23.1': optional: true + '@esbuild/linux-arm@0.24.0': + optional: true + '@esbuild/linux-ia32@0.20.2': optional: true @@ -7692,6 +8199,9 @@ snapshots: '@esbuild/linux-ia32@0.23.1': optional: true + '@esbuild/linux-ia32@0.24.0': + optional: true + '@esbuild/linux-loong64@0.20.2': optional: true @@ -7701,6 +8211,9 @@ snapshots: '@esbuild/linux-loong64@0.23.1': optional: true + '@esbuild/linux-loong64@0.24.0': + optional: true + '@esbuild/linux-mips64el@0.20.2': optional: true @@ -7710,6 +8223,9 @@ snapshots: '@esbuild/linux-mips64el@0.23.1': optional: true + '@esbuild/linux-mips64el@0.24.0': + optional: true + '@esbuild/linux-ppc64@0.20.2': optional: true @@ -7719,6 +8235,9 @@ snapshots: '@esbuild/linux-ppc64@0.23.1': optional: true + '@esbuild/linux-ppc64@0.24.0': + optional: true + '@esbuild/linux-riscv64@0.20.2': optional: true @@ -7728,6 +8247,9 @@ snapshots: '@esbuild/linux-riscv64@0.23.1': optional: true + '@esbuild/linux-riscv64@0.24.0': + optional: true + '@esbuild/linux-s390x@0.20.2': optional: true @@ -7737,6 +8259,9 @@ snapshots: '@esbuild/linux-s390x@0.23.1': optional: true + '@esbuild/linux-s390x@0.24.0': + optional: true + '@esbuild/linux-x64@0.20.2': optional: true @@ -7746,6 +8271,9 @@ snapshots: '@esbuild/linux-x64@0.23.1': optional: true + '@esbuild/linux-x64@0.24.0': + optional: true + '@esbuild/netbsd-x64@0.20.2': optional: true @@ -7755,9 +8283,15 @@ snapshots: '@esbuild/netbsd-x64@0.23.1': optional: true + '@esbuild/netbsd-x64@0.24.0': + optional: true + '@esbuild/openbsd-arm64@0.23.1': optional: true + '@esbuild/openbsd-arm64@0.24.0': + optional: true + '@esbuild/openbsd-x64@0.20.2': optional: true @@ -7767,6 +8301,9 @@ snapshots: '@esbuild/openbsd-x64@0.23.1': optional: true + '@esbuild/openbsd-x64@0.24.0': + optional: true + '@esbuild/sunos-x64@0.20.2': optional: true @@ -7776,6 +8313,9 @@ snapshots: '@esbuild/sunos-x64@0.23.1': optional: true + '@esbuild/sunos-x64@0.24.0': + optional: true + '@esbuild/win32-arm64@0.20.2': optional: true @@ -7785,6 +8325,9 @@ snapshots: '@esbuild/win32-arm64@0.23.1': optional: true + '@esbuild/win32-arm64@0.24.0': + optional: true + '@esbuild/win32-ia32@0.20.2': optional: true @@ -7794,6 +8337,9 @@ snapshots: '@esbuild/win32-ia32@0.23.1': optional: true + '@esbuild/win32-ia32@0.24.0': + optional: true + '@esbuild/win32-x64@0.20.2': optional: true @@ -7803,9 +8349,12 @@ snapshots: '@esbuild/win32-x64@0.23.1': optional: true - '@eslint-community/eslint-utils@4.4.0(eslint@9.10.0(jiti@2.0.0-beta.3))': + '@esbuild/win32-x64@0.24.0': + optional: true + + '@eslint-community/eslint-utils@4.4.0(eslint@9.12.0(jiti@2.3.3))': dependencies: - eslint: 9.10.0(jiti@2.0.0-beta.3) + eslint: 9.12.0(jiti@2.3.3) eslint-visitor-keys: 3.4.3 '@eslint-community/regexpp@4.11.0': {} @@ -7820,11 +8369,13 @@ snapshots: transitivePeerDependencies: - supports-color + '@eslint/core@0.6.0': {} + '@eslint/eslintrc@3.1.0': dependencies: ajv: 6.12.6 debug: 4.3.7(supports-color@9.4.0) - espree: 10.1.0 + espree: 10.2.0 globals: 14.0.0 ignore: 5.3.2 import-fresh: 3.3.0 @@ -7834,11 +8385,11 @@ snapshots: transitivePeerDependencies: - supports-color - '@eslint/js@9.10.0': {} + '@eslint/js@9.12.0': {} '@eslint/object-schema@2.1.4': {} - '@eslint/plugin-kit@0.1.0': + '@eslint/plugin-kit@0.2.0': dependencies: levn: 0.4.1 @@ -7858,9 +8409,16 @@ snapshots: dependencies: kleur: 4.1.5 + '@humanfs/core@0.19.0': {} + + '@humanfs/node@0.16.5': + dependencies: + '@humanfs/core': 0.19.0 + '@humanwhocodes/retry': 0.3.1 + '@humanwhocodes/module-importer@1.0.1': {} - '@humanwhocodes/retry@0.3.0': {} + '@humanwhocodes/retry@0.3.1': {} '@iconify-json/carbon@1.2.1': dependencies: @@ -7874,13 +8432,13 @@ snapshots: dependencies: '@iconify/types': 2.0.0 - '@iconify-json/tabler@1.2.2': + '@iconify-json/tabler@1.2.3': dependencies: '@iconify/types': 2.0.0 '@iconify/types@2.0.0': {} - '@iconify/utils@2.1.32': + '@iconify/utils@2.1.33': dependencies: '@antfu/install-pkg': 0.4.1 '@antfu/utils': 0.7.10 @@ -7888,7 +8446,7 @@ snapshots: debug: 4.3.7(supports-color@9.4.0) kolorist: 1.8.0 local-pkg: 0.5.0 - mlly: 1.7.1 + mlly: 1.7.2 transitivePeerDependencies: - supports-color @@ -7914,7 +8472,7 @@ snapshots: '@jest/schemas': 29.6.3 '@types/istanbul-lib-coverage': 2.0.6 '@types/istanbul-reports': 3.0.4 - '@types/node': 20.16.5 + '@types/node': 20.16.11 '@types/yargs': 17.0.33 chalk: 4.1.2 @@ -7981,6 +8539,22 @@ snapshots: - encoding - supports-color + '@module-federation/runtime-tools@0.5.1': + dependencies: + '@module-federation/runtime': 0.5.1 + '@module-federation/webpack-bundler-runtime': 0.5.1 + + '@module-federation/runtime@0.5.1': + dependencies: + '@module-federation/sdk': 0.5.1 + + '@module-federation/sdk@0.5.1': {} + + '@module-federation/webpack-bundler-runtime@0.5.1': + dependencies: + '@module-federation/runtime': 0.5.1 + '@module-federation/sdk': 0.5.1 + '@netlify/functions@2.8.1': dependencies: '@netlify/serverless-functions-api': 1.19.1 @@ -8006,36 +8580,43 @@ snapshots: '@nuxt/devalue@2.0.2': {} - '@nuxt/devtools-kit@1.4.2(vite@5.4.5(@types/node@20.16.5)(sass@1.78.0)(terser@5.32.0))': + '@nuxt/devtools-kit@1.5.1(vite@5.4.8(@types/node@20.16.11)(sass@1.78.0)(terser@5.32.0))': dependencies: '@nuxt/kit': link:packages/kit '@nuxt/schema': link:packages/schema execa: 7.2.0 - vite: 5.4.5(@types/node@20.16.5)(sass@1.78.0)(terser@5.32.0) + vite: 5.4.8(@types/node@20.16.11)(sass@1.78.0)(terser@5.32.0) - '@nuxt/devtools-ui-kit@1.4.2(@nuxt/devtools@1.4.2(rollup@4.21.3)(vite@5.4.5(@types/node@20.16.5)(sass@1.78.0)(terser@5.32.0))(vue@3.5.5(typescript@5.6.2))(webpack-sources@3.2.3))(@unocss/webpack@0.62.3(rollup@4.21.3)(webpack@5.94.0(esbuild@0.23.1)))(@vue/compiler-core@3.5.5)(change-case@5.4.4)(nuxt@packages+nuxt)(postcss@8.4.47)(rollup@4.21.3)(vite@5.4.5(@types/node@20.16.5)(sass@1.78.0)(terser@5.32.0))(vue@3.5.5(typescript@5.6.2))(webpack@5.94.0(esbuild@0.23.1))': + '@nuxt/devtools-kit@1.5.2(vite@5.4.8(@types/node@20.16.11)(sass@1.78.0)(terser@5.32.0))': + dependencies: + '@nuxt/kit': link:packages/kit + '@nuxt/schema': link:packages/schema + execa: 7.2.0 + vite: 5.4.8(@types/node@20.16.11)(sass@1.78.0)(terser@5.32.0) + + '@nuxt/devtools-ui-kit@1.5.1(@nuxt/devtools@1.5.2(rollup@4.24.0)(vite@5.4.8(@types/node@20.16.11)(sass@1.78.0)(terser@5.32.0))(vue@3.5.11(typescript@5.6.3))(webpack-sources@3.2.3))(@unocss/webpack@0.62.4(rollup@4.24.0)(webpack@5.95.0(esbuild@0.24.0)))(@vue/compiler-core@3.5.11)(change-case@5.4.4)(nuxt@packages+nuxt)(postcss@8.4.47)(rollup@4.24.0)(vite@5.4.8(@types/node@20.16.11)(sass@1.78.0)(terser@5.32.0))(vue@3.5.11(typescript@5.6.3))(webpack@5.95.0(esbuild@0.24.0))': dependencies: '@iconify-json/carbon': 1.2.1 '@iconify-json/logos': 1.2.0 '@iconify-json/ri': 1.2.0 - '@iconify-json/tabler': 1.2.2 - '@nuxt/devtools': 1.4.2(rollup@4.21.3)(vite@5.4.5(@types/node@20.16.5)(sass@1.78.0)(terser@5.32.0))(vue@3.5.5(typescript@5.6.2))(webpack-sources@3.2.3) - '@nuxt/devtools-kit': 1.4.2(vite@5.4.5(@types/node@20.16.5)(sass@1.78.0)(terser@5.32.0)) + '@iconify-json/tabler': 1.2.3 + '@nuxt/devtools': 1.5.2(rollup@4.24.0)(vite@5.4.8(@types/node@20.16.11)(sass@1.78.0)(terser@5.32.0))(vue@3.5.11(typescript@5.6.3))(webpack-sources@3.2.3) + '@nuxt/devtools-kit': 1.5.1(vite@5.4.8(@types/node@20.16.11)(sass@1.78.0)(terser@5.32.0)) '@nuxt/kit': link:packages/kit - '@unocss/core': 0.62.3 - '@unocss/nuxt': 0.62.3(postcss@8.4.47)(rollup@4.21.3)(vite@5.4.5(@types/node@20.16.5)(sass@1.78.0)(terser@5.32.0))(webpack@5.94.0(esbuild@0.23.1)) - '@unocss/preset-attributify': 0.62.3 - '@unocss/preset-icons': 0.62.3 - '@unocss/preset-mini': 0.62.3 - '@unocss/reset': 0.62.3 - '@vueuse/core': 11.0.3(vue@3.5.5(typescript@5.6.2)) - '@vueuse/integrations': 11.0.3(change-case@5.4.4)(focus-trap@7.5.4)(vue@3.5.5(typescript@5.6.2)) - '@vueuse/nuxt': 11.0.3(nuxt@packages+nuxt)(vue@3.5.5(typescript@5.6.2)) + '@unocss/core': 0.62.4 + '@unocss/nuxt': 0.62.4(postcss@8.4.47)(rollup@4.24.0)(vite@5.4.8(@types/node@20.16.11)(sass@1.78.0)(terser@5.32.0))(webpack@5.95.0(esbuild@0.24.0)) + '@unocss/preset-attributify': 0.62.4 + '@unocss/preset-icons': 0.62.4 + '@unocss/preset-mini': 0.62.4 + '@unocss/reset': 0.62.4 + '@vueuse/core': 11.1.0(vue@3.5.11(typescript@5.6.3)) + '@vueuse/integrations': 11.1.0(change-case@5.4.4)(focus-trap@7.6.0)(vue@3.5.11(typescript@5.6.3)) + '@vueuse/nuxt': 11.1.0(nuxt@packages+nuxt)(vue@3.5.11(typescript@5.6.3)) defu: 6.1.4 - focus-trap: 7.5.4 + focus-trap: 7.6.0 splitpanes: 3.1.5 - unocss: 0.62.3(@unocss/webpack@0.62.3(rollup@4.21.3)(webpack@5.94.0(esbuild@0.23.1)))(postcss@8.4.47)(rollup@4.21.3)(vite@5.4.5(@types/node@20.16.5)(sass@1.78.0)(terser@5.32.0)) - v-lazy-show: 0.2.4(@vue/compiler-core@3.5.5) + unocss: 0.62.4(@unocss/webpack@0.62.4(rollup@4.24.0)(webpack@5.95.0(esbuild@0.24.0)))(postcss@8.4.47)(rollup@4.24.0)(vite@5.4.8(@types/node@20.16.11)(sass@1.78.0)(terser@5.32.0)) + v-lazy-show: 0.2.4(@vue/compiler-core@3.5.11) transitivePeerDependencies: - '@unocss/webpack' - '@vue/compiler-core' @@ -8059,7 +8640,7 @@ snapshots: - vue - webpack - '@nuxt/devtools-wizard@1.4.2': + '@nuxt/devtools-wizard@1.5.2': dependencies: consola: 3.2.3 diff: 7.0.0 @@ -8067,18 +8648,18 @@ snapshots: global-directory: 4.0.1 magicast: 0.3.5 pathe: 1.1.2 - pkg-types: 1.2.0 + pkg-types: 1.2.1 prompts: 2.4.2 rc9: 2.1.2 semver: 7.6.3 - '@nuxt/devtools@1.4.2(rollup@4.21.3)(vite@5.4.5(@types/node@20.16.5)(sass@1.78.0)(terser@5.32.0))(vue@3.5.5(typescript@5.6.2))(webpack-sources@3.2.3)': + '@nuxt/devtools@1.5.2(rollup@4.24.0)(vite@5.4.8(@types/node@20.16.11)(sass@1.78.0)(terser@5.32.0))(vue@3.5.11(typescript@5.6.3))(webpack-sources@3.2.3)': dependencies: '@antfu/utils': 0.7.10 - '@nuxt/devtools-kit': 1.4.2(vite@5.4.5(@types/node@20.16.5)(sass@1.78.0)(terser@5.32.0)) - '@nuxt/devtools-wizard': 1.4.2 + '@nuxt/devtools-kit': 1.5.2(vite@5.4.8(@types/node@20.16.11)(sass@1.78.0)(terser@5.32.0)) + '@nuxt/devtools-wizard': 1.5.2 '@nuxt/kit': link:packages/kit - '@vue/devtools-core': 7.4.4(vite@5.4.5(@types/node@20.16.5)(sass@1.78.0)(terser@5.32.0))(vue@3.5.5(typescript@5.6.2)) + '@vue/devtools-core': 7.4.4(vite@5.4.8(@types/node@20.16.11)(sass@1.78.0)(terser@5.32.0))(vue@3.5.11(typescript@5.6.3)) '@vue/devtools-kit': 7.4.4 birpc: 0.2.17 consola: 3.2.3 @@ -8095,21 +8676,21 @@ snapshots: launch-editor: 2.9.1 local-pkg: 0.5.0 magicast: 0.3.5 - nypm: 0.3.11 + nypm: 0.3.12 ohash: 1.1.4 pathe: 1.1.2 perfect-debounce: 1.0.0 - pkg-types: 1.2.0 + pkg-types: 1.2.1 rc9: 2.1.2 scule: 1.3.0 semver: 7.6.3 - simple-git: 3.26.0 + simple-git: 3.27.0 sirv: 2.0.4 - tinyglobby: 0.2.6 - unimport: 3.12.0(rollup@4.21.3)(webpack-sources@3.2.3) - vite: 5.4.5(@types/node@20.16.5)(sass@1.78.0)(terser@5.32.0) - vite-plugin-inspect: 0.8.7(@nuxt/kit@packages+kit)(rollup@4.21.3)(vite@5.4.5(@types/node@20.16.5)(sass@1.78.0)(terser@5.32.0)) - vite-plugin-vue-inspector: 5.2.0(vite@5.4.5(@types/node@20.16.5)(sass@1.78.0)(terser@5.32.0)) + tinyglobby: 0.2.9 + unimport: 3.13.1(rollup@4.24.0)(webpack-sources@3.2.3) + vite: 5.4.8(@types/node@20.16.11)(sass@1.78.0)(terser@5.32.0) + vite-plugin-inspect: 0.8.7(@nuxt/kit@packages+kit)(rollup@4.24.0)(vite@5.4.8(@types/node@20.16.11)(sass@1.78.0)(terser@5.32.0)) + vite-plugin-vue-inspector: 5.1.3(vite@5.4.8(@types/node@20.16.11)(sass@1.78.0)(terser@5.32.0)) which: 3.0.1 ws: 8.18.0 transitivePeerDependencies: @@ -8120,76 +8701,76 @@ snapshots: - vue - webpack-sources - '@nuxt/eslint-config@0.5.7(eslint@9.10.0(jiti@2.0.0-beta.3))(typescript@5.6.2)': + '@nuxt/eslint-config@0.5.7(eslint@9.12.0(jiti@2.3.3))(typescript@5.6.3)': dependencies: - '@eslint/js': 9.10.0 - '@nuxt/eslint-plugin': 0.5.7(eslint@9.10.0(jiti@2.0.0-beta.3))(typescript@5.6.2) - '@stylistic/eslint-plugin': 2.8.0(eslint@9.10.0(jiti@2.0.0-beta.3))(typescript@5.6.2) - '@typescript-eslint/eslint-plugin': 8.5.0(@typescript-eslint/parser@8.5.0(eslint@9.10.0(jiti@2.0.0-beta.3))(typescript@5.6.2))(eslint@9.10.0(jiti@2.0.0-beta.3))(typescript@5.6.2) - '@typescript-eslint/parser': 8.5.0(eslint@9.10.0(jiti@2.0.0-beta.3))(typescript@5.6.2) - eslint: 9.10.0(jiti@2.0.0-beta.3) - eslint-config-flat-gitignore: 0.3.0(eslint@9.10.0(jiti@2.0.0-beta.3)) + '@eslint/js': 9.12.0 + '@nuxt/eslint-plugin': 0.5.7(eslint@9.12.0(jiti@2.3.3))(typescript@5.6.3) + '@stylistic/eslint-plugin': 2.8.0(eslint@9.12.0(jiti@2.3.3))(typescript@5.6.3) + '@typescript-eslint/eslint-plugin': 8.5.0(@typescript-eslint/parser@8.5.0(eslint@9.12.0(jiti@2.3.3))(typescript@5.6.3))(eslint@9.12.0(jiti@2.3.3))(typescript@5.6.3) + '@typescript-eslint/parser': 8.5.0(eslint@9.12.0(jiti@2.3.3))(typescript@5.6.3) + eslint: 9.12.0(jiti@2.3.3) + eslint-config-flat-gitignore: 0.3.0(eslint@9.12.0(jiti@2.3.3)) eslint-flat-config-utils: 0.4.0 - eslint-plugin-import-x: 4.2.1(eslint@9.10.0(jiti@2.0.0-beta.3))(typescript@5.6.2) - eslint-plugin-jsdoc: 50.2.2(eslint@9.10.0(jiti@2.0.0-beta.3)) - eslint-plugin-regexp: 2.6.0(eslint@9.10.0(jiti@2.0.0-beta.3)) - eslint-plugin-unicorn: 55.0.0(eslint@9.10.0(jiti@2.0.0-beta.3)) - eslint-plugin-vue: 9.28.0(eslint@9.10.0(jiti@2.0.0-beta.3)) + eslint-plugin-import-x: 4.2.1(eslint@9.12.0(jiti@2.3.3))(typescript@5.6.3) + eslint-plugin-jsdoc: 50.2.2(eslint@9.12.0(jiti@2.3.3)) + eslint-plugin-regexp: 2.6.0(eslint@9.12.0(jiti@2.3.3)) + eslint-plugin-unicorn: 55.0.0(eslint@9.12.0(jiti@2.3.3)) + eslint-plugin-vue: 9.28.0(eslint@9.12.0(jiti@2.3.3)) globals: 15.9.0 local-pkg: 0.5.0 pathe: 1.1.2 - vue-eslint-parser: 9.4.3(eslint@9.10.0(jiti@2.0.0-beta.3)) + vue-eslint-parser: 9.4.3(eslint@9.12.0(jiti@2.3.3)) transitivePeerDependencies: - supports-color - typescript - '@nuxt/eslint-plugin@0.5.7(eslint@9.10.0(jiti@2.0.0-beta.3))(typescript@5.6.2)': + '@nuxt/eslint-plugin@0.5.7(eslint@9.12.0(jiti@2.3.3))(typescript@5.6.3)': dependencies: - '@typescript-eslint/types': 8.5.0 - '@typescript-eslint/utils': 8.5.0(eslint@9.10.0(jiti@2.0.0-beta.3))(typescript@5.6.2) - eslint: 9.10.0(jiti@2.0.0-beta.3) + '@typescript-eslint/types': 8.8.0 + '@typescript-eslint/utils': 8.8.0(eslint@9.12.0(jiti@2.3.3))(typescript@5.6.3) + eslint: 9.12.0(jiti@2.3.3) transitivePeerDependencies: - supports-color - typescript - '@nuxt/friendly-errors-webpack-plugin@2.6.0(webpack@5.94.0)': + '@nuxt/friendly-errors-webpack-plugin@2.6.0(webpack@5.95.0)': dependencies: chalk: 2.4.2 consola: 3.2.3 error-stack-parser: 2.1.4 string-width: 4.2.3 - webpack: 5.94.0 + webpack: 5.95.0 - '@nuxt/scripts@0.9.2(@nuxt/devtools@1.4.2(rollup@4.21.3)(vite@5.4.5(@types/node@20.16.5)(sass@1.78.0)(terser@5.32.0))(vue@3.5.5(typescript@5.6.2))(webpack-sources@3.2.3))(@unocss/webpack@0.62.3(rollup@4.21.3)(webpack@5.94.0(esbuild@0.23.1)))(@vue/compiler-core@3.5.5)(change-case@5.4.4)(ioredis@5.4.1)(nuxt@packages+nuxt)(postcss@8.4.47)(rollup@4.21.3)(typescript@5.6.2)(vite@5.4.5(@types/node@20.16.5)(sass@1.78.0)(terser@5.32.0))(vue@3.5.5(typescript@5.6.2))(webpack-sources@3.2.3)(webpack@5.94.0(esbuild@0.23.1))': + '@nuxt/scripts@0.9.4(@nuxt/devtools@1.5.2(rollup@4.24.0)(vite@5.4.8(@types/node@20.16.11)(sass@1.78.0)(terser@5.32.0))(vue@3.5.11(typescript@5.6.3))(webpack-sources@3.2.3))(@unocss/webpack@0.62.4(rollup@4.24.0)(webpack@5.95.0(esbuild@0.24.0)))(@vue/compiler-core@3.5.11)(change-case@5.4.4)(ioredis@5.4.1)(nuxt@packages+nuxt)(postcss@8.4.47)(rollup@4.24.0)(typescript@5.6.3)(vite@5.4.8(@types/node@20.16.11)(sass@1.78.0)(terser@5.32.0))(vue@3.5.11(typescript@5.6.3))(webpack-sources@3.2.3)(webpack@5.95.0(esbuild@0.24.0))': dependencies: - '@nuxt/devtools-kit': 1.4.2(vite@5.4.5(@types/node@20.16.5)(sass@1.78.0)(terser@5.32.0)) - '@nuxt/devtools-ui-kit': 1.4.2(@nuxt/devtools@1.4.2(rollup@4.21.3)(vite@5.4.5(@types/node@20.16.5)(sass@1.78.0)(terser@5.32.0))(vue@3.5.5(typescript@5.6.2))(webpack-sources@3.2.3))(@unocss/webpack@0.62.3(rollup@4.21.3)(webpack@5.94.0(esbuild@0.23.1)))(@vue/compiler-core@3.5.5)(change-case@5.4.4)(nuxt@packages+nuxt)(postcss@8.4.47)(rollup@4.21.3)(vite@5.4.5(@types/node@20.16.5)(sass@1.78.0)(terser@5.32.0))(vue@3.5.5(typescript@5.6.2))(webpack@5.94.0(esbuild@0.23.1)) + '@nuxt/devtools-kit': 1.5.2(vite@5.4.8(@types/node@20.16.11)(sass@1.78.0)(terser@5.32.0)) + '@nuxt/devtools-ui-kit': 1.5.1(@nuxt/devtools@1.5.2(rollup@4.24.0)(vite@5.4.8(@types/node@20.16.11)(sass@1.78.0)(terser@5.32.0))(vue@3.5.11(typescript@5.6.3))(webpack-sources@3.2.3))(@unocss/webpack@0.62.4(rollup@4.24.0)(webpack@5.95.0(esbuild@0.24.0)))(@vue/compiler-core@3.5.11)(change-case@5.4.4)(nuxt@packages+nuxt)(postcss@8.4.47)(rollup@4.24.0)(vite@5.4.8(@types/node@20.16.11)(sass@1.78.0)(terser@5.32.0))(vue@3.5.11(typescript@5.6.3))(webpack@5.95.0(esbuild@0.24.0)) '@nuxt/kit': link:packages/kit - '@types/google.maps': 3.58.0 + '@types/google.maps': 3.58.1 '@types/stripe-v3': 3.1.33 '@types/vimeo__player': 2.18.3 '@types/youtube': 0.1.0 - '@unhead/vue': 1.11.6(vue@3.5.5(typescript@5.6.2)) - '@vueuse/core': 11.0.3(vue@3.5.5(typescript@5.6.2)) + '@unhead/vue': 1.11.7(vue@3.5.11(typescript@5.6.3)) + '@vueuse/core': 11.1.0(vue@3.5.11(typescript@5.6.3)) consola: 3.2.3 defu: 6.1.4 h3: h3-nightly@2.0.0-1718872656.6765a6e magic-string: 0.30.11 - mlly: 1.7.1 - ofetch: 1.3.4(patch_hash=nxc3eojzwynarpj453xzxqr2f4) + mlly: 1.7.2 + ofetch: 1.4.1 ohash: 1.1.4 pathe: 1.1.2 - pkg-types: 1.2.0 + pkg-types: 1.2.1 semver: 7.6.3 - shiki: 1.17.6 + shiki: 1.20.0 sirv: 2.0.4 std-env: 3.7.0 third-party-capital: 2.3.0 ufo: 1.5.4 - unimport: 3.12.0(rollup@4.21.3)(webpack-sources@3.2.3) + unimport: 3.13.1(rollup@4.24.0)(webpack-sources@3.2.3) unplugin: 1.14.1(webpack-sources@3.2.3) unstorage: 1.12.0(ioredis@5.4.1) - valibot: 0.42.0(typescript@5.6.2) + valibot: 0.42.1(typescript@5.6.3) transitivePeerDependencies: - '@azure/app-configuration' - '@azure/cosmos' @@ -8240,21 +8821,21 @@ snapshots: dotenv: 16.4.5 git-url-parse: 15.0.0 is-docker: 3.0.0 - jiti: 2.0.0-beta.3 + jiti: 2.3.3 mri: 1.2.0 nanoid: 5.0.7 - ofetch: 1.3.4(patch_hash=nxc3eojzwynarpj453xzxqr2f4) + ofetch: 1.4.1 package-manager-detector: 0.2.0 parse-git-config: 3.0.0 pathe: 1.1.2 rc9: 2.1.2 std-env: 3.7.0 - '@nuxt/test-utils@3.14.2(@testing-library/vue@8.1.0(@vue/compiler-sfc@3.5.5)(vue@3.5.5(typescript@5.6.2)))(@vue/test-utils@2.4.6)(h3-nightly@2.0.0-1718872656.6765a6e)(happy-dom@15.7.4)(magicast@0.3.5)(nitropack@2.9.7(magicast@0.3.5)(webpack-sources@3.2.3))(playwright-core@1.47.1)(vite@5.4.5(@types/node@20.16.5)(sass@1.78.0)(terser@5.32.0))(vitest@2.1.1(@types/node@20.16.5)(happy-dom@15.7.4)(sass@1.78.0)(terser@5.32.0))(vue-router@4.4.5(vue@3.5.5(typescript@5.6.2)))(vue@3.5.5(typescript@5.6.2))(webpack-sources@3.2.3)': + '@nuxt/test-utils@3.14.3(@testing-library/vue@8.1.0(@vue/compiler-sfc@3.5.11)(vue@3.5.11(typescript@5.6.3)))(@vue/test-utils@2.4.6)(h3-nightly@2.0.0-1718872656.6765a6e)(happy-dom@15.7.4)(magicast@0.3.5)(nitropack@2.9.7(magicast@0.3.5)(webpack-sources@3.2.3))(playwright-core@1.48.0)(vite@5.4.8(@types/node@20.16.11)(sass@1.78.0)(terser@5.32.0))(vitest@2.1.2(@types/node@20.16.11)(happy-dom@15.7.4)(sass@1.78.0)(terser@5.32.0))(vue-router@4.4.5(vue@3.5.11(typescript@5.6.3)))(vue@3.5.11(typescript@5.6.3))(webpack-sources@3.2.3)': dependencies: '@nuxt/kit': link:packages/kit '@nuxt/schema': link:packages/schema - c12: 2.0.0-beta.2(magicast@0.3.5) + c12: 2.0.1(magicast@0.3.5) consola: 3.2.3 defu: 6.1.4 destr: 2.0.3 @@ -8266,7 +8847,7 @@ snapshots: magic-string: 0.30.11 nitropack: 2.9.7(magicast@0.3.5)(webpack-sources@3.2.3) node-fetch-native: 1.6.4 - ofetch: 1.3.4(patch_hash=nxc3eojzwynarpj453xzxqr2f4) + ofetch: 1.4.1 pathe: 1.1.2 perfect-debounce: 1.0.0 radix3: 1.1.2 @@ -8276,16 +8857,16 @@ snapshots: ufo: 1.5.4 unenv: 1.10.0 unplugin: 1.14.1(webpack-sources@3.2.3) - vite: 5.4.5(@types/node@20.16.5)(sass@1.78.0)(terser@5.32.0) - vitest-environment-nuxt: 1.0.1(@testing-library/vue@8.1.0(@vue/compiler-sfc@3.5.5)(vue@3.5.5(typescript@5.6.2)))(@vue/test-utils@2.4.6)(h3-nightly@2.0.0-1718872656.6765a6e)(happy-dom@15.7.4)(magicast@0.3.5)(nitropack@2.9.7(magicast@0.3.5)(webpack-sources@3.2.3))(playwright-core@1.47.1)(vite@5.4.5(@types/node@20.16.5)(sass@1.78.0)(terser@5.32.0))(vitest@2.1.1(@types/node@20.16.5)(happy-dom@15.7.4)(sass@1.78.0)(terser@5.32.0))(vue-router@4.4.5(vue@3.5.5(typescript@5.6.2)))(vue@3.5.5(typescript@5.6.2))(webpack-sources@3.2.3) - vue: 3.5.5(typescript@5.6.2) - vue-router: 4.4.5(vue@3.5.5(typescript@5.6.2)) + vite: 5.4.8(@types/node@20.16.11)(sass@1.78.0)(terser@5.32.0) + vitest-environment-nuxt: 1.0.1(@testing-library/vue@8.1.0(@vue/compiler-sfc@3.5.11)(vue@3.5.11(typescript@5.6.3)))(@vue/test-utils@2.4.6)(h3-nightly@2.0.0-1718872656.6765a6e)(happy-dom@15.7.4)(magicast@0.3.5)(nitropack@2.9.7(magicast@0.3.5)(webpack-sources@3.2.3))(playwright-core@1.48.0)(vite@5.4.8(@types/node@20.16.11)(sass@1.78.0)(terser@5.32.0))(vitest@2.1.2(@types/node@20.16.11)(happy-dom@15.7.4)(sass@1.78.0)(terser@5.32.0))(vue-router@4.4.5(vue@3.5.11(typescript@5.6.3)))(vue@3.5.11(typescript@5.6.3))(webpack-sources@3.2.3) + vue: 3.5.11(typescript@5.6.3) + vue-router: 4.4.5(vue@3.5.11(typescript@5.6.3)) optionalDependencies: - '@testing-library/vue': 8.1.0(@vue/compiler-sfc@3.5.5)(vue@3.5.5(typescript@5.6.2)) + '@testing-library/vue': 8.1.0(@vue/compiler-sfc@3.5.11)(vue@3.5.11(typescript@5.6.3)) '@vue/test-utils': 2.4.6 happy-dom: 15.7.4 - playwright-core: 1.47.1 - vitest: 2.1.1(@types/node@20.16.5)(happy-dom@15.7.4)(sass@1.78.0)(terser@5.32.0) + playwright-core: 1.48.0 + vitest: 2.1.2(@types/node@20.16.11)(happy-dom@15.7.4)(sass@1.78.0)(terser@5.32.0) transitivePeerDependencies: - magicast - webpack-sources @@ -8296,7 +8877,7 @@ snapshots: '@shikijs/transformers': 1.17.0 '@types/hast': 3.0.4 '@types/mdast': 4.0.4 - '@vue/compiler-core': 3.5.5 + '@vue/compiler-core': 3.5.11 consola: 3.2.3 debug: 4.3.7(supports-color@9.4.0) defu: 6.1.4 @@ -8321,7 +8902,7 @@ snapshots: remark-parse: 11.0.0 remark-rehype: 11.1.0 scule: 1.3.0 - shiki: 1.17.6 + shiki: 1.20.0 ufo: 1.5.4 unified: 11.0.5 unist-builder: 4.0.0 @@ -8427,152 +9008,225 @@ snapshots: - encoding - supports-color - '@rollup/plugin-alias@5.1.0(rollup@4.21.3)': - dependencies: - slash: 4.0.0 + '@rollup/plugin-alias@5.1.1(rollup@4.24.0)': optionalDependencies: - rollup: 4.21.3 + rollup: 4.24.0 - '@rollup/plugin-commonjs@25.0.8(rollup@4.21.3)': + '@rollup/plugin-commonjs@25.0.8(rollup@4.24.0)': dependencies: - '@rollup/pluginutils': 5.1.0(rollup@4.21.3) + '@rollup/pluginutils': 5.1.2(rollup@4.24.0) commondir: 1.0.1 estree-walker: 2.0.2 glob: 8.1.0 is-reference: 1.2.1 magic-string: 0.30.11 optionalDependencies: - rollup: 4.21.3 + rollup: 4.24.0 - '@rollup/plugin-commonjs@26.0.1(rollup@4.21.3)': + '@rollup/plugin-commonjs@26.0.1(rollup@4.24.0)': dependencies: - '@rollup/pluginutils': 5.1.0(rollup@4.21.3) + '@rollup/pluginutils': 5.1.2(rollup@4.24.0) commondir: 1.0.1 estree-walker: 2.0.2 glob: 10.4.5 is-reference: 1.2.1 magic-string: 0.30.11 optionalDependencies: - rollup: 4.21.3 + rollup: 4.24.0 - '@rollup/plugin-inject@5.0.5(rollup@4.21.3)': + '@rollup/plugin-commonjs@28.0.0(rollup@4.24.0)': dependencies: - '@rollup/pluginutils': 5.1.0(rollup@4.21.3) + '@rollup/pluginutils': 5.1.2(rollup@4.24.0) + commondir: 1.0.1 + estree-walker: 2.0.2 + fdir: 6.4.0(picomatch@2.3.1) + is-reference: 1.2.1 + magic-string: 0.30.11 + picomatch: 2.3.1 + optionalDependencies: + rollup: 4.24.0 + + '@rollup/plugin-inject@5.0.5(rollup@4.24.0)': + dependencies: + '@rollup/pluginutils': 5.1.2(rollup@4.24.0) estree-walker: 2.0.2 magic-string: 0.30.11 optionalDependencies: - rollup: 4.21.3 + rollup: 4.24.0 - '@rollup/plugin-json@6.1.0(rollup@4.21.3)': + '@rollup/plugin-json@6.1.0(rollup@4.24.0)': dependencies: - '@rollup/pluginutils': 5.1.0(rollup@4.21.3) + '@rollup/pluginutils': 5.1.2(rollup@4.24.0) optionalDependencies: - rollup: 4.21.3 + rollup: 4.24.0 - '@rollup/plugin-node-resolve@15.2.3(rollup@4.21.3)': + '@rollup/plugin-node-resolve@15.3.0(rollup@4.24.0)': dependencies: - '@rollup/pluginutils': 5.1.0(rollup@4.21.3) + '@rollup/pluginutils': 5.1.2(rollup@4.24.0) '@types/resolve': 1.20.2 deepmerge: 4.3.1 - is-builtin-module: 3.2.1 is-module: 1.0.0 resolve: 1.22.8 optionalDependencies: - rollup: 4.21.3 + rollup: 4.24.0 - '@rollup/plugin-replace@5.0.7(rollup@4.21.3)': + '@rollup/plugin-replace@5.0.7(rollup@4.24.0)': dependencies: - '@rollup/pluginutils': 5.1.0(rollup@4.21.3) + '@rollup/pluginutils': 5.1.2(rollup@4.24.0) magic-string: 0.30.11 optionalDependencies: - rollup: 4.21.3 + rollup: 4.24.0 - '@rollup/plugin-terser@0.4.4(rollup@4.21.3)': + '@rollup/plugin-replace@6.0.1(rollup@4.24.0)': + dependencies: + '@rollup/pluginutils': 5.1.2(rollup@4.24.0) + magic-string: 0.30.11 + optionalDependencies: + rollup: 4.24.0 + + '@rollup/plugin-terser@0.4.4(rollup@4.24.0)': dependencies: serialize-javascript: 6.0.2 smob: 1.5.0 terser: 5.32.0 optionalDependencies: - rollup: 4.21.3 + rollup: 4.24.0 '@rollup/pluginutils@4.2.1': dependencies: estree-walker: 2.0.2 picomatch: 2.3.1 - '@rollup/pluginutils@5.1.0(rollup@4.21.3)': + '@rollup/pluginutils@5.1.2(rollup@4.24.0)': dependencies: - '@types/estree': 1.0.5 + '@types/estree': 1.0.6 estree-walker: 2.0.2 picomatch: 2.3.1 optionalDependencies: - rollup: 4.21.3 + rollup: 4.24.0 - '@rollup/rollup-android-arm-eabi@4.21.3': + '@rollup/rollup-android-arm-eabi@4.24.0': optional: true - '@rollup/rollup-android-arm64@4.21.3': + '@rollup/rollup-android-arm64@4.24.0': optional: true - '@rollup/rollup-darwin-arm64@4.21.3': + '@rollup/rollup-darwin-arm64@4.24.0': optional: true - '@rollup/rollup-darwin-x64@4.21.3': + '@rollup/rollup-darwin-x64@4.24.0': optional: true - '@rollup/rollup-linux-arm-gnueabihf@4.21.3': + '@rollup/rollup-linux-arm-gnueabihf@4.24.0': optional: true - '@rollup/rollup-linux-arm-musleabihf@4.21.3': + '@rollup/rollup-linux-arm-musleabihf@4.24.0': optional: true - '@rollup/rollup-linux-arm64-gnu@4.21.3': + '@rollup/rollup-linux-arm64-gnu@4.24.0': optional: true - '@rollup/rollup-linux-arm64-musl@4.21.3': + '@rollup/rollup-linux-arm64-musl@4.24.0': optional: true - '@rollup/rollup-linux-powerpc64le-gnu@4.21.3': + '@rollup/rollup-linux-powerpc64le-gnu@4.24.0': optional: true - '@rollup/rollup-linux-riscv64-gnu@4.21.3': + '@rollup/rollup-linux-riscv64-gnu@4.24.0': optional: true - '@rollup/rollup-linux-s390x-gnu@4.21.3': + '@rollup/rollup-linux-s390x-gnu@4.24.0': optional: true - '@rollup/rollup-linux-x64-gnu@4.21.3': + '@rollup/rollup-linux-x64-gnu@4.24.0': optional: true - '@rollup/rollup-linux-x64-musl@4.21.3': + '@rollup/rollup-linux-x64-musl@4.24.0': optional: true - '@rollup/rollup-win32-arm64-msvc@4.21.3': + '@rollup/rollup-win32-arm64-msvc@4.24.0': optional: true - '@rollup/rollup-win32-ia32-msvc@4.21.3': + '@rollup/rollup-win32-ia32-msvc@4.24.0': optional: true - '@rollup/rollup-win32-x64-msvc@4.21.3': + '@rollup/rollup-win32-x64-msvc@4.24.0': optional: true + '@rspack/binding-darwin-arm64@1.0.8': + optional: true + + '@rspack/binding-darwin-x64@1.0.8': + optional: true + + '@rspack/binding-linux-arm64-gnu@1.0.8': + optional: true + + '@rspack/binding-linux-arm64-musl@1.0.8': + optional: true + + '@rspack/binding-linux-x64-gnu@1.0.8': + optional: true + + '@rspack/binding-linux-x64-musl@1.0.8': + optional: true + + '@rspack/binding-win32-arm64-msvc@1.0.8': + optional: true + + '@rspack/binding-win32-ia32-msvc@1.0.8': + optional: true + + '@rspack/binding-win32-x64-msvc@1.0.8': + optional: true + + '@rspack/binding@1.0.8': + optionalDependencies: + '@rspack/binding-darwin-arm64': 1.0.8 + '@rspack/binding-darwin-x64': 1.0.8 + '@rspack/binding-linux-arm64-gnu': 1.0.8 + '@rspack/binding-linux-arm64-musl': 1.0.8 + '@rspack/binding-linux-x64-gnu': 1.0.8 + '@rspack/binding-linux-x64-musl': 1.0.8 + '@rspack/binding-win32-arm64-msvc': 1.0.8 + '@rspack/binding-win32-ia32-msvc': 1.0.8 + '@rspack/binding-win32-x64-msvc': 1.0.8 + + '@rspack/core@1.0.8': + dependencies: + '@module-federation/runtime-tools': 0.5.1 + '@rspack/binding': 1.0.8 + '@rspack/lite-tapable': 1.0.1 + caniuse-lite: 1.0.30001667 + + '@rspack/lite-tapable@1.0.1': {} + '@shikijs/core@1.17.0': dependencies: '@shikijs/engine-javascript': 1.17.0 '@shikijs/engine-oniguruma': 1.17.0 '@shikijs/types': 1.17.0 - '@shikijs/vscode-textmate': 9.2.2 + '@shikijs/vscode-textmate': 9.3.0 '@types/hast': 3.0.4 - hast-util-to-html: 9.0.2 + hast-util-to-html: 9.0.3 - '@shikijs/core@1.17.6': + '@shikijs/core@1.20.0': dependencies: - '@shikijs/engine-javascript': 1.17.6 - '@shikijs/engine-oniguruma': 1.17.6 - '@shikijs/types': 1.17.6 - '@shikijs/vscode-textmate': 9.2.2 + '@shikijs/engine-javascript': 1.20.0 + '@shikijs/engine-oniguruma': 1.20.0 + '@shikijs/types': 1.20.0 + '@shikijs/vscode-textmate': 9.3.0 '@types/hast': 3.0.4 - hast-util-to-html: 9.0.2 + hast-util-to-html: 9.0.3 + + '@shikijs/core@1.22.0': + dependencies: + '@shikijs/engine-javascript': 1.22.0 + '@shikijs/engine-oniguruma': 1.22.0 + '@shikijs/types': 1.22.0 + '@shikijs/vscode-textmate': 9.3.0 + '@types/hast': 3.0.4 + hast-util-to-html: 9.0.3 '@shikijs/engine-javascript@1.17.0': dependencies: @@ -8580,61 +9234,78 @@ snapshots: oniguruma-to-js: 0.3.3 regex: 4.3.2 - '@shikijs/engine-javascript@1.17.6': + '@shikijs/engine-javascript@1.20.0': dependencies: - '@shikijs/types': 1.17.6 + '@shikijs/types': 1.20.0 + '@shikijs/vscode-textmate': 9.3.0 + oniguruma-to-js: 0.4.3 + + '@shikijs/engine-javascript@1.22.0': + dependencies: + '@shikijs/types': 1.22.0 + '@shikijs/vscode-textmate': 9.3.0 oniguruma-to-js: 0.4.3 '@shikijs/engine-oniguruma@1.17.0': dependencies: '@shikijs/types': 1.17.0 - '@shikijs/vscode-textmate': 9.2.2 + '@shikijs/vscode-textmate': 9.3.0 - '@shikijs/engine-oniguruma@1.17.6': + '@shikijs/engine-oniguruma@1.20.0': dependencies: - '@shikijs/types': 1.17.6 - '@shikijs/vscode-textmate': 9.2.2 + '@shikijs/types': 1.20.0 + '@shikijs/vscode-textmate': 9.3.0 + + '@shikijs/engine-oniguruma@1.22.0': + dependencies: + '@shikijs/types': 1.22.0 + '@shikijs/vscode-textmate': 9.3.0 '@shikijs/transformers@1.17.0': dependencies: shiki: 1.17.0 - '@shikijs/twoslash@1.17.6(typescript@5.6.2)': + '@shikijs/twoslash@1.22.0(typescript@5.6.3)': dependencies: - '@shikijs/core': 1.17.6 - '@shikijs/types': 1.17.6 - twoslash: 0.2.11(typescript@5.6.2) + '@shikijs/core': 1.22.0 + '@shikijs/types': 1.22.0 + twoslash: 0.2.12(typescript@5.6.3) transitivePeerDependencies: - supports-color - typescript '@shikijs/types@1.17.0': dependencies: - '@shikijs/vscode-textmate': 9.2.2 + '@shikijs/vscode-textmate': 9.3.0 '@types/hast': 3.0.4 - '@shikijs/types@1.17.6': + '@shikijs/types@1.20.0': dependencies: - '@shikijs/vscode-textmate': 9.2.2 + '@shikijs/vscode-textmate': 9.3.0 '@types/hast': 3.0.4 - '@shikijs/vitepress-twoslash@1.17.0(@nuxt/kit@packages+kit)(typescript@5.6.2)': + '@shikijs/types@1.22.0': dependencies: - '@shikijs/twoslash': 1.17.6(typescript@5.6.2) - floating-vue: 5.2.2(@nuxt/kit@packages+kit)(vue@3.5.5(typescript@5.6.2)) + '@shikijs/vscode-textmate': 9.3.0 + '@types/hast': 3.0.4 + + '@shikijs/vitepress-twoslash@1.17.0(@nuxt/kit@packages+kit)(typescript@5.6.3)': + dependencies: + '@shikijs/twoslash': 1.22.0(typescript@5.6.3) + floating-vue: 5.2.2(@nuxt/kit@packages+kit)(vue@3.5.11(typescript@5.6.3)) mdast-util-from-markdown: 2.0.1 mdast-util-gfm: 3.0.0 mdast-util-to-hast: 13.2.0 shiki: 1.17.0 - twoslash: 0.2.11(typescript@5.6.2) - twoslash-vue: 0.2.11(typescript@5.6.2) - vue: 3.5.5(typescript@5.6.2) + twoslash: 0.2.12(typescript@5.6.3) + twoslash-vue: 0.2.11(typescript@5.6.3) + vue: 3.5.11(typescript@5.6.3) transitivePeerDependencies: - '@nuxt/kit' - supports-color - typescript - '@shikijs/vscode-textmate@9.2.2': {} + '@shikijs/vscode-textmate@9.3.0': {} '@sidvind/better-ajv-errors@3.0.1(ajv@8.17.1)': dependencies: @@ -8647,12 +9318,12 @@ snapshots: '@sindresorhus/merge-streams@2.3.0': {} - '@stylistic/eslint-plugin@2.8.0(eslint@9.10.0(jiti@2.0.0-beta.3))(typescript@5.6.2)': + '@stylistic/eslint-plugin@2.8.0(eslint@9.12.0(jiti@2.3.3))(typescript@5.6.3)': dependencies: - '@typescript-eslint/utils': 8.5.0(eslint@9.10.0(jiti@2.0.0-beta.3))(typescript@5.6.2) - eslint: 9.10.0(jiti@2.0.0-beta.3) - eslint-visitor-keys: 4.0.0 - espree: 10.1.0 + '@typescript-eslint/utils': 8.8.0(eslint@9.12.0(jiti@2.3.3))(typescript@5.6.3) + eslint: 9.12.0(jiti@2.3.3) + eslint-visitor-keys: 4.1.0 + espree: 10.2.0 estraverse: 5.3.0 picomatch: 4.0.2 transitivePeerDependencies: @@ -8661,7 +9332,7 @@ snapshots: '@testing-library/dom@9.3.4': dependencies: - '@babel/code-frame': 7.24.7 + '@babel/code-frame': 7.25.7 '@babel/runtime': 7.25.6 '@types/aria-query': 5.0.4 aria-query: 5.1.3 @@ -8670,14 +9341,14 @@ snapshots: lz-string: 1.5.0 pretty-format: 27.5.1 - '@testing-library/vue@8.1.0(@vue/compiler-sfc@3.5.5)(vue@3.5.5(typescript@5.6.2))': + '@testing-library/vue@8.1.0(@vue/compiler-sfc@3.5.11)(vue@3.5.11(typescript@5.6.3))': dependencies: '@babel/runtime': 7.25.6 '@testing-library/dom': 9.3.4 '@vue/test-utils': 2.4.6 - vue: 3.5.5(typescript@5.6.2) + vue: 3.5.11(typescript@5.6.3) optionalDependencies: - '@vue/compiler-sfc': 3.5.5 + '@vue/compiler-sfc': 3.5.11 '@trysound/sax@0.2.0': {} @@ -8687,7 +9358,7 @@ snapshots: '@types/connect@3.4.38': dependencies: - '@types/node': 20.16.5 + '@types/node': 20.16.11 '@types/debug@4.1.12': dependencies: @@ -8695,20 +9366,20 @@ snapshots: '@types/eslint@9.6.1': dependencies: - '@types/estree': 1.0.5 + '@types/estree': 1.0.6 '@types/json-schema': 7.0.15 '@types/eslint__js@8.42.3': dependencies: '@types/eslint': 9.6.1 - '@types/estree@1.0.5': {} + '@types/estree@1.0.6': {} '@types/file-loader@5.0.4': dependencies: '@types/webpack': 4.41.39 - '@types/google.maps@3.58.0': {} + '@types/google.maps@3.58.1': {} '@types/hash-sum@1.0.2': {} @@ -8718,7 +9389,7 @@ snapshots: '@types/http-proxy@1.17.15': dependencies: - '@types/node': 20.16.5 + '@types/node': 20.16.11 '@types/istanbul-lib-coverage@2.0.6': {} @@ -8746,9 +9417,9 @@ snapshots: '@types/node-sass@4.11.7': dependencies: - '@types/node': 20.16.5 + '@types/node': 20.16.11 - '@types/node@20.16.5': + '@types/node@20.16.11': dependencies: undici-types: 6.19.8 @@ -8762,7 +9433,7 @@ snapshots: '@types/sass-loader@8.0.9': dependencies: - '@types/node': 20.16.5 + '@types/node': 20.16.11 '@types/node-sass': 4.11.7 '@types/webpack': 4.41.39 sass: 1.78.0 @@ -8789,9 +9460,9 @@ snapshots: '@types/webpack-bundle-analyzer@4.7.0': dependencies: - '@types/node': 20.16.5 + '@types/node': 20.16.11 tapable: 2.2.1 - webpack: 5.94.0 + webpack: 5.95.0 transitivePeerDependencies: - '@swc/core' - esbuild @@ -8802,7 +9473,7 @@ snapshots: dependencies: '@types/connect': 3.4.38 tapable: 2.2.1 - webpack: 5.94.0 + webpack: 5.95.0 transitivePeerDependencies: - '@swc/core' - esbuild @@ -8811,13 +9482,13 @@ snapshots: '@types/webpack-sources@3.2.3': dependencies: - '@types/node': 20.16.5 + '@types/node': 20.16.11 '@types/source-list-map': 0.1.6 source-map: 0.7.4 '@types/webpack@4.41.39': dependencies: - '@types/node': 20.16.5 + '@types/node': 20.16.11 '@types/tapable': 1.0.12 '@types/uglify-js': 3.17.5 '@types/webpack-sources': 3.2.3 @@ -8832,34 +9503,34 @@ snapshots: '@types/youtube@0.1.0': {} - '@typescript-eslint/eslint-plugin@8.5.0(@typescript-eslint/parser@8.5.0(eslint@9.10.0(jiti@2.0.0-beta.3))(typescript@5.6.2))(eslint@9.10.0(jiti@2.0.0-beta.3))(typescript@5.6.2)': + '@typescript-eslint/eslint-plugin@8.5.0(@typescript-eslint/parser@8.5.0(eslint@9.12.0(jiti@2.3.3))(typescript@5.6.3))(eslint@9.12.0(jiti@2.3.3))(typescript@5.6.3)': dependencies: '@eslint-community/regexpp': 4.11.0 - '@typescript-eslint/parser': 8.5.0(eslint@9.10.0(jiti@2.0.0-beta.3))(typescript@5.6.2) + '@typescript-eslint/parser': 8.5.0(eslint@9.12.0(jiti@2.3.3))(typescript@5.6.3) '@typescript-eslint/scope-manager': 8.5.0 - '@typescript-eslint/type-utils': 8.5.0(eslint@9.10.0(jiti@2.0.0-beta.3))(typescript@5.6.2) - '@typescript-eslint/utils': 8.5.0(eslint@9.10.0(jiti@2.0.0-beta.3))(typescript@5.6.2) + '@typescript-eslint/type-utils': 8.5.0(eslint@9.12.0(jiti@2.3.3))(typescript@5.6.3) + '@typescript-eslint/utils': 8.5.0(eslint@9.12.0(jiti@2.3.3))(typescript@5.6.3) '@typescript-eslint/visitor-keys': 8.5.0 - eslint: 9.10.0(jiti@2.0.0-beta.3) + eslint: 9.12.0(jiti@2.3.3) graphemer: 1.4.0 ignore: 5.3.2 natural-compare: 1.4.0 - ts-api-utils: 1.3.0(typescript@5.6.2) + ts-api-utils: 1.3.0(typescript@5.6.3) optionalDependencies: - typescript: 5.6.2 + typescript: 5.6.3 transitivePeerDependencies: - supports-color - '@typescript-eslint/parser@8.5.0(eslint@9.10.0(jiti@2.0.0-beta.3))(typescript@5.6.2)': + '@typescript-eslint/parser@8.5.0(eslint@9.12.0(jiti@2.3.3))(typescript@5.6.3)': dependencies: '@typescript-eslint/scope-manager': 8.5.0 '@typescript-eslint/types': 8.5.0 - '@typescript-eslint/typescript-estree': 8.5.0(typescript@5.6.2) + '@typescript-eslint/typescript-estree': 8.5.0(typescript@5.6.3) '@typescript-eslint/visitor-keys': 8.5.0 debug: 4.3.7(supports-color@9.4.0) - eslint: 9.10.0(jiti@2.0.0-beta.3) + eslint: 9.12.0(jiti@2.3.3) optionalDependencies: - typescript: 5.6.2 + typescript: 5.6.3 transitivePeerDependencies: - supports-color @@ -8868,21 +9539,28 @@ snapshots: '@typescript-eslint/types': 8.5.0 '@typescript-eslint/visitor-keys': 8.5.0 - '@typescript-eslint/type-utils@8.5.0(eslint@9.10.0(jiti@2.0.0-beta.3))(typescript@5.6.2)': + '@typescript-eslint/scope-manager@8.8.0': dependencies: - '@typescript-eslint/typescript-estree': 8.5.0(typescript@5.6.2) - '@typescript-eslint/utils': 8.5.0(eslint@9.10.0(jiti@2.0.0-beta.3))(typescript@5.6.2) + '@typescript-eslint/types': 8.8.0 + '@typescript-eslint/visitor-keys': 8.8.0 + + '@typescript-eslint/type-utils@8.5.0(eslint@9.12.0(jiti@2.3.3))(typescript@5.6.3)': + dependencies: + '@typescript-eslint/typescript-estree': 8.5.0(typescript@5.6.3) + '@typescript-eslint/utils': 8.5.0(eslint@9.12.0(jiti@2.3.3))(typescript@5.6.3) debug: 4.3.7(supports-color@9.4.0) - ts-api-utils: 1.3.0(typescript@5.6.2) + ts-api-utils: 1.3.0(typescript@5.6.3) optionalDependencies: - typescript: 5.6.2 + typescript: 5.6.3 transitivePeerDependencies: - eslint - supports-color '@typescript-eslint/types@8.5.0': {} - '@typescript-eslint/typescript-estree@8.5.0(typescript@5.6.2)': + '@typescript-eslint/types@8.8.0': {} + + '@typescript-eslint/typescript-estree@8.5.0(typescript@5.6.3)': dependencies: '@typescript-eslint/types': 8.5.0 '@typescript-eslint/visitor-keys': 8.5.0 @@ -8891,19 +9569,45 @@ snapshots: is-glob: 4.0.3 minimatch: 9.0.5 semver: 7.6.3 - ts-api-utils: 1.3.0(typescript@5.6.2) + ts-api-utils: 1.3.0(typescript@5.6.3) optionalDependencies: - typescript: 5.6.2 + typescript: 5.6.3 transitivePeerDependencies: - supports-color - '@typescript-eslint/utils@8.5.0(eslint@9.10.0(jiti@2.0.0-beta.3))(typescript@5.6.2)': + '@typescript-eslint/typescript-estree@8.8.0(typescript@5.6.3)': dependencies: - '@eslint-community/eslint-utils': 4.4.0(eslint@9.10.0(jiti@2.0.0-beta.3)) + '@typescript-eslint/types': 8.8.0 + '@typescript-eslint/visitor-keys': 8.8.0 + debug: 4.3.7(supports-color@9.4.0) + fast-glob: 3.3.2 + is-glob: 4.0.3 + minimatch: 9.0.5 + semver: 7.6.3 + ts-api-utils: 1.3.0(typescript@5.6.3) + optionalDependencies: + typescript: 5.6.3 + transitivePeerDependencies: + - supports-color + + '@typescript-eslint/utils@8.5.0(eslint@9.12.0(jiti@2.3.3))(typescript@5.6.3)': + dependencies: + '@eslint-community/eslint-utils': 4.4.0(eslint@9.12.0(jiti@2.3.3)) '@typescript-eslint/scope-manager': 8.5.0 '@typescript-eslint/types': 8.5.0 - '@typescript-eslint/typescript-estree': 8.5.0(typescript@5.6.2) - eslint: 9.10.0(jiti@2.0.0-beta.3) + '@typescript-eslint/typescript-estree': 8.5.0(typescript@5.6.3) + eslint: 9.12.0(jiti@2.3.3) + transitivePeerDependencies: + - supports-color + - typescript + + '@typescript-eslint/utils@8.8.0(eslint@9.12.0(jiti@2.3.3))(typescript@5.6.3)': + dependencies: + '@eslint-community/eslint-utils': 4.4.0(eslint@9.12.0(jiti@2.3.3)) + '@typescript-eslint/scope-manager': 8.8.0 + '@typescript-eslint/types': 8.8.0 + '@typescript-eslint/typescript-estree': 8.8.0(typescript@5.6.3) + eslint: 9.12.0(jiti@2.3.3) transitivePeerDependencies: - supports-color - typescript @@ -8913,61 +9617,77 @@ snapshots: '@typescript-eslint/types': 8.5.0 eslint-visitor-keys: 3.4.3 - '@typescript/vfs@1.6.0(typescript@5.6.2)': + '@typescript-eslint/visitor-keys@8.8.0': + dependencies: + '@typescript-eslint/types': 8.8.0 + eslint-visitor-keys: 3.4.3 + + '@typescript/vfs@1.6.0(typescript@5.6.3)': dependencies: debug: 4.3.7(supports-color@9.4.0) - typescript: 5.6.2 + typescript: 5.6.3 transitivePeerDependencies: - supports-color '@ungap/structured-clone@1.2.0': {} - '@unhead/dom@1.11.6': + '@unhead/dom@1.11.7': dependencies: - '@unhead/schema': 1.11.6 - '@unhead/shared': 1.11.6 + '@unhead/schema': 1.11.7 + '@unhead/shared': 1.11.7 - '@unhead/schema@1.11.6': + '@unhead/schema@1.11.7': dependencies: hookable: 5.5.3 zhead: 2.2.4 - '@unhead/shared@1.11.6': + '@unhead/shared@1.11.7': dependencies: - '@unhead/schema': 1.11.6 + '@unhead/schema': 1.11.7 - '@unhead/ssr@1.11.6': + '@unhead/ssr@1.11.7': dependencies: - '@unhead/schema': 1.11.6 - '@unhead/shared': 1.11.6 + '@unhead/schema': 1.11.7 + '@unhead/shared': 1.11.7 - '@unhead/vue@1.11.6(vue@3.5.5(typescript@5.6.2))': + '@unhead/vue@1.11.7(vue@3.5.11(typescript@5.6.3))': dependencies: - '@unhead/schema': 1.11.6 - '@unhead/shared': 1.11.6 + '@unhead/schema': 1.11.7 + '@unhead/shared': 1.11.7 defu: 6.1.4 hookable: 5.5.3 - unhead: 1.11.6 - vue: 3.5.5(typescript@5.6.2) + unhead: 1.11.7 + vue: 3.5.11(typescript@5.6.3) - '@unocss/astro@0.62.3(rollup@4.21.3)(vite@5.4.5(@types/node@20.16.5)(sass@1.78.0)(terser@5.32.0))': + '@unocss/astro@0.62.4(rollup@4.24.0)(vite@5.4.8(@types/node@20.16.11)(sass@1.78.0)(terser@5.32.0))': dependencies: - '@unocss/core': 0.62.3 - '@unocss/reset': 0.62.3 - '@unocss/vite': 0.62.3(rollup@4.21.3)(vite@5.4.5(@types/node@20.16.5)(sass@1.78.0)(terser@5.32.0)) + '@unocss/core': 0.62.4 + '@unocss/reset': 0.62.4 + '@unocss/vite': 0.62.4(rollup@4.24.0)(vite@5.4.8(@types/node@20.16.11)(sass@1.78.0)(terser@5.32.0)) optionalDependencies: - vite: 5.4.5(@types/node@20.16.5)(sass@1.78.0)(terser@5.32.0) + vite: 5.4.8(@types/node@20.16.11)(sass@1.78.0)(terser@5.32.0) transitivePeerDependencies: - rollup - supports-color - '@unocss/cli@0.62.3(rollup@4.21.3)': + '@unocss/astro@0.63.4(rollup@4.24.0)(vite@5.4.8(@types/node@20.16.11)(sass@1.78.0)(terser@5.32.0))': + dependencies: + '@unocss/core': 0.63.4 + '@unocss/reset': 0.63.4 + '@unocss/vite': 0.63.4(rollup@4.24.0)(vite@5.4.8(@types/node@20.16.11)(sass@1.78.0)(terser@5.32.0)) + optionalDependencies: + vite: 5.4.8(@types/node@20.16.11)(sass@1.78.0)(terser@5.32.0) + transitivePeerDependencies: + - rollup + - supports-color + + '@unocss/cli@0.62.4(rollup@4.24.0)': dependencies: '@ampproject/remapping': 2.3.0 - '@rollup/pluginutils': 5.1.0(rollup@4.21.3) - '@unocss/config': 0.62.3 - '@unocss/core': 0.62.3 - '@unocss/preset-uno': 0.62.3 + '@rollup/pluginutils': 5.1.2(rollup@4.24.0) + '@unocss/config': 0.62.4 + '@unocss/core': 0.62.4 + '@unocss/preset-uno': 0.62.4 cac: 6.7.14 chokidar: 3.6.0 colorette: 2.0.20 @@ -8975,47 +9695,86 @@ snapshots: magic-string: 0.30.11 pathe: 1.1.2 perfect-debounce: 1.0.0 - tinyglobby: 0.2.6 + tinyglobby: 0.2.9 transitivePeerDependencies: - rollup - supports-color - '@unocss/config@0.62.3': + '@unocss/cli@0.63.4(rollup@4.24.0)': dependencies: - '@unocss/core': 0.62.3 + '@ampproject/remapping': 2.3.0 + '@rollup/pluginutils': 5.1.2(rollup@4.24.0) + '@unocss/config': 0.63.4 + '@unocss/core': 0.63.4 + '@unocss/preset-uno': 0.63.4 + cac: 6.7.14 + chokidar: 3.6.0 + colorette: 2.0.20 + consola: 3.2.3 + magic-string: 0.30.11 + pathe: 1.1.2 + perfect-debounce: 1.0.0 + tinyglobby: 0.2.9 + transitivePeerDependencies: + - rollup + - supports-color + + '@unocss/config@0.62.4': + dependencies: + '@unocss/core': 0.62.4 unconfig: 0.5.5 transitivePeerDependencies: - supports-color - '@unocss/core@0.62.3': {} - - '@unocss/extractor-arbitrary-variants@0.62.3': + '@unocss/config@0.63.4': dependencies: - '@unocss/core': 0.62.3 + '@unocss/core': 0.63.4 + unconfig: 0.5.5 + transitivePeerDependencies: + - supports-color - '@unocss/inspector@0.62.3': + '@unocss/core@0.62.4': {} + + '@unocss/core@0.63.4': {} + + '@unocss/extractor-arbitrary-variants@0.62.4': dependencies: - '@unocss/core': 0.62.3 - '@unocss/rule-utils': 0.62.3 + '@unocss/core': 0.62.4 + + '@unocss/extractor-arbitrary-variants@0.63.4': + dependencies: + '@unocss/core': 0.63.4 + + '@unocss/inspector@0.62.4': + dependencies: + '@unocss/core': 0.62.4 + '@unocss/rule-utils': 0.62.4 gzip-size: 6.0.0 sirv: 2.0.4 - '@unocss/nuxt@0.62.3(postcss@8.4.47)(rollup@4.21.3)(vite@5.4.5(@types/node@20.16.5)(sass@1.78.0)(terser@5.32.0))(webpack@5.94.0(esbuild@0.23.1))': + '@unocss/inspector@0.63.4': + dependencies: + '@unocss/core': 0.63.4 + '@unocss/rule-utils': 0.63.4 + gzip-size: 6.0.0 + sirv: 2.0.4 + + '@unocss/nuxt@0.62.4(postcss@8.4.47)(rollup@4.24.0)(vite@5.4.8(@types/node@20.16.11)(sass@1.78.0)(terser@5.32.0))(webpack@5.95.0(esbuild@0.24.0))': dependencies: '@nuxt/kit': link:packages/kit - '@unocss/config': 0.62.3 - '@unocss/core': 0.62.3 - '@unocss/preset-attributify': 0.62.3 - '@unocss/preset-icons': 0.62.3 - '@unocss/preset-tagify': 0.62.3 - '@unocss/preset-typography': 0.62.3 - '@unocss/preset-uno': 0.62.3 - '@unocss/preset-web-fonts': 0.62.3 - '@unocss/preset-wind': 0.62.3 - '@unocss/reset': 0.62.3 - '@unocss/vite': 0.62.3(rollup@4.21.3)(vite@5.4.5(@types/node@20.16.5)(sass@1.78.0)(terser@5.32.0)) - '@unocss/webpack': 0.62.3(rollup@4.21.3)(webpack@5.94.0(esbuild@0.23.1)) - unocss: 0.62.3(@unocss/webpack@0.62.3(rollup@4.21.3)(webpack@5.94.0(esbuild@0.23.1)))(postcss@8.4.47)(rollup@4.21.3)(vite@5.4.5(@types/node@20.16.5)(sass@1.78.0)(terser@5.32.0)) + '@unocss/config': 0.62.4 + '@unocss/core': 0.62.4 + '@unocss/preset-attributify': 0.62.4 + '@unocss/preset-icons': 0.62.4 + '@unocss/preset-tagify': 0.62.4 + '@unocss/preset-typography': 0.62.4 + '@unocss/preset-uno': 0.62.4 + '@unocss/preset-web-fonts': 0.62.4 + '@unocss/preset-wind': 0.62.4 + '@unocss/reset': 0.62.4 + '@unocss/vite': 0.62.4(rollup@4.24.0)(vite@5.4.8(@types/node@20.16.11)(sass@1.78.0)(terser@5.32.0)) + '@unocss/webpack': 0.62.4(rollup@4.24.0)(webpack@5.95.0(esbuild@0.24.0)) + unocss: 0.62.4(@unocss/webpack@0.62.4(rollup@4.24.0)(webpack@5.95.0(esbuild@0.24.0)))(postcss@8.4.47)(rollup@4.24.0)(vite@5.4.8(@types/node@20.16.11)(sass@1.78.0)(terser@5.32.0)) transitivePeerDependencies: - postcss - rollup @@ -9023,127 +9782,209 @@ snapshots: - vite - webpack - '@unocss/postcss@0.62.3(postcss@8.4.47)': + '@unocss/postcss@0.62.4(postcss@8.4.47)': dependencies: - '@unocss/config': 0.62.3 - '@unocss/core': 0.62.3 - '@unocss/rule-utils': 0.62.3 + '@unocss/config': 0.62.4 + '@unocss/core': 0.62.4 + '@unocss/rule-utils': 0.62.4 css-tree: 2.3.1 - magic-string: 0.30.11 postcss: 8.4.47 - tinyglobby: 0.2.6 + tinyglobby: 0.2.9 transitivePeerDependencies: - supports-color - '@unocss/preset-attributify@0.62.3': + '@unocss/postcss@0.63.4(postcss@8.4.47)': dependencies: - '@unocss/core': 0.62.3 - - '@unocss/preset-icons@0.62.3': - dependencies: - '@iconify/utils': 2.1.32 - '@unocss/core': 0.62.3 - ofetch: 1.3.4(patch_hash=nxc3eojzwynarpj453xzxqr2f4) + '@unocss/config': 0.63.4 + '@unocss/core': 0.63.4 + '@unocss/rule-utils': 0.63.4 + css-tree: 3.0.0 + postcss: 8.4.47 + tinyglobby: 0.2.9 transitivePeerDependencies: - supports-color - '@unocss/preset-mini@0.62.3': + '@unocss/preset-attributify@0.62.4': dependencies: - '@unocss/core': 0.62.3 - '@unocss/extractor-arbitrary-variants': 0.62.3 - '@unocss/rule-utils': 0.62.3 + '@unocss/core': 0.62.4 - '@unocss/preset-tagify@0.62.3': + '@unocss/preset-attributify@0.63.4': dependencies: - '@unocss/core': 0.62.3 + '@unocss/core': 0.63.4 - '@unocss/preset-typography@0.62.3': + '@unocss/preset-icons@0.62.4': dependencies: - '@unocss/core': 0.62.3 - '@unocss/preset-mini': 0.62.3 + '@iconify/utils': 2.1.33 + '@unocss/core': 0.62.4 + ofetch: 1.4.1 + transitivePeerDependencies: + - supports-color - '@unocss/preset-uno@0.62.3': + '@unocss/preset-icons@0.63.4': dependencies: - '@unocss/core': 0.62.3 - '@unocss/preset-mini': 0.62.3 - '@unocss/preset-wind': 0.62.3 - '@unocss/rule-utils': 0.62.3 + '@iconify/utils': 2.1.33 + '@unocss/core': 0.63.4 + ofetch: 1.4.1 + transitivePeerDependencies: + - supports-color - '@unocss/preset-web-fonts@0.62.3': + '@unocss/preset-mini@0.62.4': dependencies: - '@unocss/core': 0.62.3 - ofetch: 1.3.4(patch_hash=nxc3eojzwynarpj453xzxqr2f4) + '@unocss/core': 0.62.4 + '@unocss/extractor-arbitrary-variants': 0.62.4 + '@unocss/rule-utils': 0.62.4 - '@unocss/preset-wind@0.62.3': + '@unocss/preset-mini@0.63.4': dependencies: - '@unocss/core': 0.62.3 - '@unocss/preset-mini': 0.62.3 - '@unocss/rule-utils': 0.62.3 + '@unocss/core': 0.63.4 + '@unocss/extractor-arbitrary-variants': 0.63.4 + '@unocss/rule-utils': 0.63.4 - '@unocss/reset@0.62.3': {} - - '@unocss/rule-utils@0.62.3': + '@unocss/preset-tagify@0.62.4': dependencies: - '@unocss/core': 0.62.3 + '@unocss/core': 0.62.4 + + '@unocss/preset-tagify@0.63.4': + dependencies: + '@unocss/core': 0.63.4 + + '@unocss/preset-typography@0.62.4': + dependencies: + '@unocss/core': 0.62.4 + '@unocss/preset-mini': 0.62.4 + + '@unocss/preset-typography@0.63.4': + dependencies: + '@unocss/core': 0.63.4 + '@unocss/preset-mini': 0.63.4 + + '@unocss/preset-uno@0.62.4': + dependencies: + '@unocss/core': 0.62.4 + '@unocss/preset-mini': 0.62.4 + '@unocss/preset-wind': 0.62.4 + '@unocss/rule-utils': 0.62.4 + + '@unocss/preset-uno@0.63.4': + dependencies: + '@unocss/core': 0.63.4 + '@unocss/preset-mini': 0.63.4 + '@unocss/preset-wind': 0.63.4 + '@unocss/rule-utils': 0.63.4 + + '@unocss/preset-web-fonts@0.62.4': + dependencies: + '@unocss/core': 0.62.4 + ofetch: 1.4.1 + + '@unocss/preset-web-fonts@0.63.4': + dependencies: + '@unocss/core': 0.63.4 + ofetch: 1.4.1 + + '@unocss/preset-wind@0.62.4': + dependencies: + '@unocss/core': 0.62.4 + '@unocss/preset-mini': 0.62.4 + '@unocss/rule-utils': 0.62.4 + + '@unocss/preset-wind@0.63.4': + dependencies: + '@unocss/core': 0.63.4 + '@unocss/preset-mini': 0.63.4 + '@unocss/rule-utils': 0.63.4 + + '@unocss/reset@0.62.4': {} + + '@unocss/reset@0.63.4': {} + + '@unocss/rule-utils@0.62.4': + dependencies: + '@unocss/core': 0.62.4 magic-string: 0.30.11 - '@unocss/scope@0.62.3': {} - - '@unocss/transformer-attributify-jsx-babel@0.62.3': + '@unocss/rule-utils@0.63.4': dependencies: - '@babel/core': 7.25.2 - '@babel/plugin-syntax-jsx': 7.24.7(@babel/core@7.25.2) - '@babel/preset-typescript': 7.24.7(@babel/core@7.25.2) - '@unocss/core': 0.62.3 - transitivePeerDependencies: - - supports-color + '@unocss/core': 0.63.4 + magic-string: 0.30.11 - '@unocss/transformer-attributify-jsx@0.62.3': + '@unocss/transformer-attributify-jsx@0.62.4': dependencies: - '@unocss/core': 0.62.3 + '@unocss/core': 0.62.4 - '@unocss/transformer-compile-class@0.62.3': + '@unocss/transformer-attributify-jsx@0.63.4': dependencies: - '@unocss/core': 0.62.3 + '@unocss/core': 0.63.4 - '@unocss/transformer-directives@0.62.3': + '@unocss/transformer-compile-class@0.62.4': dependencies: - '@unocss/core': 0.62.3 - '@unocss/rule-utils': 0.62.3 + '@unocss/core': 0.62.4 + + '@unocss/transformer-compile-class@0.63.4': + dependencies: + '@unocss/core': 0.63.4 + + '@unocss/transformer-directives@0.62.4': + dependencies: + '@unocss/core': 0.62.4 + '@unocss/rule-utils': 0.62.4 css-tree: 2.3.1 - '@unocss/transformer-variant-group@0.62.3': + '@unocss/transformer-directives@0.63.4': dependencies: - '@unocss/core': 0.62.3 + '@unocss/core': 0.63.4 + '@unocss/rule-utils': 0.63.4 + css-tree: 3.0.0 - '@unocss/vite@0.62.3(rollup@4.21.3)(vite@5.4.5(@types/node@20.16.5)(sass@1.78.0)(terser@5.32.0))': + '@unocss/transformer-variant-group@0.62.4': + dependencies: + '@unocss/core': 0.62.4 + + '@unocss/transformer-variant-group@0.63.4': + dependencies: + '@unocss/core': 0.63.4 + + '@unocss/vite@0.62.4(rollup@4.24.0)(vite@5.4.8(@types/node@20.16.11)(sass@1.78.0)(terser@5.32.0))': dependencies: '@ampproject/remapping': 2.3.0 - '@rollup/pluginutils': 5.1.0(rollup@4.21.3) - '@unocss/config': 0.62.3 - '@unocss/core': 0.62.3 - '@unocss/inspector': 0.62.3 - '@unocss/scope': 0.62.3 - '@unocss/transformer-directives': 0.62.3 + '@rollup/pluginutils': 5.1.2(rollup@4.24.0) + '@unocss/config': 0.62.4 + '@unocss/core': 0.62.4 + '@unocss/inspector': 0.62.4 chokidar: 3.6.0 magic-string: 0.30.11 - tinyglobby: 0.2.6 - vite: 5.4.5(@types/node@20.16.5)(sass@1.78.0)(terser@5.32.0) + tinyglobby: 0.2.9 + vite: 5.4.8(@types/node@20.16.11)(sass@1.78.0)(terser@5.32.0) transitivePeerDependencies: - rollup - supports-color - '@unocss/webpack@0.62.3(rollup@4.21.3)(webpack@5.94.0(esbuild@0.23.1))': + '@unocss/vite@0.63.4(rollup@4.24.0)(vite@5.4.8(@types/node@20.16.11)(sass@1.78.0)(terser@5.32.0))': dependencies: '@ampproject/remapping': 2.3.0 - '@rollup/pluginutils': 5.1.0(rollup@4.21.3) - '@unocss/config': 0.62.3 - '@unocss/core': 0.62.3 + '@rollup/pluginutils': 5.1.2(rollup@4.24.0) + '@unocss/config': 0.63.4 + '@unocss/core': 0.63.4 + '@unocss/inspector': 0.63.4 chokidar: 3.6.0 magic-string: 0.30.11 - tinyglobby: 0.2.6 + tinyglobby: 0.2.9 + vite: 5.4.8(@types/node@20.16.11)(sass@1.78.0)(terser@5.32.0) + transitivePeerDependencies: + - rollup + - supports-color + + '@unocss/webpack@0.62.4(rollup@4.24.0)(webpack@5.95.0(esbuild@0.24.0))': + dependencies: + '@ampproject/remapping': 2.3.0 + '@rollup/pluginutils': 5.1.2(rollup@4.24.0) + '@unocss/config': 0.62.4 + '@unocss/core': 0.62.4 + chokidar: 3.6.0 + magic-string: 0.30.11 + tinyglobby: 0.2.9 unplugin: 1.14.1(webpack-sources@3.2.3) - webpack: 5.94.0(esbuild@0.23.1) + webpack: 5.95.0(esbuild@0.24.0) webpack-sources: 3.2.3 transitivePeerDependencies: - rollup @@ -9185,22 +10026,22 @@ snapshots: - encoding - supports-color - '@vitejs/plugin-vue-jsx@4.0.1(vite@5.4.5(@types/node@20.16.5)(sass@1.78.0)(terser@5.32.0))(vue@3.5.5(typescript@5.6.2))': + '@vitejs/plugin-vue-jsx@4.0.1(vite@5.4.8(@types/node@20.16.11)(sass@1.78.0)(terser@5.32.0))(vue@3.5.11(typescript@5.6.3))': dependencies: - '@babel/core': 7.25.2 - '@babel/plugin-transform-typescript': 7.25.2(@babel/core@7.25.2) - '@vue/babel-plugin-jsx': 1.2.5(@babel/core@7.25.2) - vite: 5.4.5(@types/node@20.16.5)(sass@1.78.0)(terser@5.32.0) - vue: 3.5.5(typescript@5.6.2) + '@babel/core': 7.25.7 + '@babel/plugin-transform-typescript': 7.25.2(@babel/core@7.25.7) + '@vue/babel-plugin-jsx': 1.2.5(@babel/core@7.25.7) + vite: 5.4.8(@types/node@20.16.11)(sass@1.78.0)(terser@5.32.0) + vue: 3.5.11(typescript@5.6.3) transitivePeerDependencies: - supports-color - '@vitejs/plugin-vue@5.1.3(vite@5.4.5(@types/node@20.16.5)(sass@1.78.0)(terser@5.32.0))(vue@3.5.5(typescript@5.6.2))': + '@vitejs/plugin-vue@5.1.4(vite@5.4.8(@types/node@20.16.11)(sass@1.78.0)(terser@5.32.0))(vue@3.5.11(typescript@5.6.3))': dependencies: - vite: 5.4.5(@types/node@20.16.5)(sass@1.78.0)(terser@5.32.0) - vue: 3.5.5(typescript@5.6.2) + vite: 5.4.8(@types/node@20.16.11)(sass@1.78.0)(terser@5.32.0) + vue: 3.5.11(typescript@5.6.3) - '@vitest/coverage-v8@2.1.1(vitest@2.1.1(@types/node@20.16.5)(happy-dom@15.7.4)(sass@1.78.0)(terser@5.32.0))': + '@vitest/coverage-v8@2.1.2(vitest@2.1.2(@types/node@20.16.11)(happy-dom@15.7.4)(sass@1.78.0)(terser@5.32.0))': dependencies: '@ampproject/remapping': 2.3.0 '@bcoe/v8-coverage': 0.2.3 @@ -9214,7 +10055,7 @@ snapshots: std-env: 3.7.0 test-exclude: 7.0.1 tinyrainbow: 1.2.0 - vitest: 2.1.1(@types/node@20.16.5)(happy-dom@15.7.4)(sass@1.78.0)(terser@5.32.0) + vitest: 2.1.2(@types/node@20.16.11)(happy-dom@15.7.4)(sass@1.78.0)(terser@5.32.0) transitivePeerDependencies: - supports-color @@ -9224,22 +10065,22 @@ snapshots: '@vitest/utils': 1.6.0 chai: 4.5.0 - '@vitest/expect@2.1.1': + '@vitest/expect@2.1.2': dependencies: - '@vitest/spy': 2.1.1 - '@vitest/utils': 2.1.1 + '@vitest/spy': 2.1.2 + '@vitest/utils': 2.1.2 chai: 5.1.1 tinyrainbow: 1.2.0 - '@vitest/mocker@2.1.1(@vitest/spy@2.1.1)(vite@5.4.5(@types/node@20.16.5)(sass@1.78.0)(terser@5.32.0))': + '@vitest/mocker@2.1.2(@vitest/spy@2.1.2)(vite@5.4.8(@types/node@20.16.11)(sass@1.78.0)(terser@5.32.0))': dependencies: - '@vitest/spy': 2.1.1 + '@vitest/spy': 2.1.2 estree-walker: 3.0.3 magic-string: 0.30.11 optionalDependencies: - vite: 5.4.5(@types/node@20.16.5)(sass@1.78.0)(terser@5.32.0) + vite: 5.4.8(@types/node@20.16.11)(sass@1.78.0)(terser@5.32.0) - '@vitest/pretty-format@2.1.1': + '@vitest/pretty-format@2.1.2': dependencies: tinyrainbow: 1.2.0 @@ -9249,9 +10090,9 @@ snapshots: p-limit: 5.0.0 pathe: 1.1.2 - '@vitest/runner@2.1.1': + '@vitest/runner@2.1.2': dependencies: - '@vitest/utils': 2.1.1 + '@vitest/utils': 2.1.2 pathe: 1.1.2 '@vitest/snapshot@1.6.0': @@ -9260,9 +10101,9 @@ snapshots: pathe: 1.1.2 pretty-format: 29.7.0 - '@vitest/snapshot@2.1.1': + '@vitest/snapshot@2.1.2': dependencies: - '@vitest/pretty-format': 2.1.1 + '@vitest/pretty-format': 2.1.2 magic-string: 0.30.11 pathe: 1.1.2 @@ -9270,7 +10111,7 @@ snapshots: dependencies: tinyspy: 2.2.1 - '@vitest/spy@2.1.1': + '@vitest/spy@2.1.2': dependencies: tinyspy: 3.0.2 @@ -9281,9 +10122,9 @@ snapshots: loupe: 2.3.7 pretty-format: 29.7.0 - '@vitest/utils@2.1.1': + '@vitest/utils@2.1.2': dependencies: - '@vitest/pretty-format': 2.1.1 + '@vitest/pretty-format': 2.1.2 loupe: 3.1.1 tinyrainbow: 1.2.0 @@ -9299,78 +10140,78 @@ snapshots: path-browserify: 1.0.1 vscode-uri: 3.0.8 - '@vue-macros/common@1.12.3(rollup@4.21.3)(vue@3.5.5(typescript@5.6.2))': + '@vue-macros/common@1.12.3(rollup@4.24.0)(vue@3.5.11(typescript@5.6.3))': dependencies: - '@babel/types': 7.25.6 - '@rollup/pluginutils': 5.1.0(rollup@4.21.3) - '@vue/compiler-sfc': 3.5.5 + '@babel/types': 7.25.7 + '@rollup/pluginutils': 5.1.2(rollup@4.24.0) + '@vue/compiler-sfc': 3.5.11 ast-kit: 1.1.0 local-pkg: 0.5.0 magic-string-ast: 0.6.2 optionalDependencies: - vue: 3.5.5(typescript@5.6.2) + vue: 3.5.11(typescript@5.6.3) transitivePeerDependencies: - rollup '@vue/babel-helper-vue-transform-on@1.2.5': {} - '@vue/babel-plugin-jsx@1.2.5(@babel/core@7.25.2)': + '@vue/babel-plugin-jsx@1.2.5(@babel/core@7.25.7)': dependencies: - '@babel/helper-module-imports': 7.24.7 + '@babel/helper-module-imports': 7.25.7 '@babel/helper-plugin-utils': 7.24.8 - '@babel/plugin-syntax-jsx': 7.24.7(@babel/core@7.25.2) - '@babel/template': 7.25.0 - '@babel/traverse': 7.25.6 - '@babel/types': 7.25.6 + '@babel/plugin-syntax-jsx': 7.24.7(@babel/core@7.25.7) + '@babel/template': 7.25.7 + '@babel/traverse': 7.25.7 + '@babel/types': 7.25.7 '@vue/babel-helper-vue-transform-on': 1.2.5 - '@vue/babel-plugin-resolve-type': 1.2.5(@babel/core@7.25.2) + '@vue/babel-plugin-resolve-type': 1.2.5(@babel/core@7.25.7) html-tags: 3.3.1 svg-tags: 1.0.0 optionalDependencies: - '@babel/core': 7.25.2 + '@babel/core': 7.25.7 transitivePeerDependencies: - supports-color - '@vue/babel-plugin-resolve-type@1.2.5(@babel/core@7.25.2)': + '@vue/babel-plugin-resolve-type@1.2.5(@babel/core@7.25.7)': dependencies: - '@babel/code-frame': 7.24.7 - '@babel/core': 7.25.2 - '@babel/helper-module-imports': 7.24.7 + '@babel/code-frame': 7.25.7 + '@babel/core': 7.25.7 + '@babel/helper-module-imports': 7.25.7 '@babel/helper-plugin-utils': 7.24.8 - '@babel/parser': 7.25.6 - '@vue/compiler-sfc': 3.5.5 + '@babel/parser': 7.25.7 + '@vue/compiler-sfc': 3.5.11 transitivePeerDependencies: - supports-color - '@vue/compiler-core@3.5.5': + '@vue/compiler-core@3.5.11': dependencies: - '@babel/parser': 7.25.6 - '@vue/shared': 3.5.5 + '@babel/parser': 7.25.7 + '@vue/shared': 3.5.11 entities: 4.5.0 estree-walker: 2.0.2 source-map-js: 1.2.1 - '@vue/compiler-dom@3.5.5': + '@vue/compiler-dom@3.5.11': dependencies: - '@vue/compiler-core': 3.5.5 - '@vue/shared': 3.5.5 + '@vue/compiler-core': 3.5.11 + '@vue/shared': 3.5.11 - '@vue/compiler-sfc@3.5.5': + '@vue/compiler-sfc@3.5.11': dependencies: - '@babel/parser': 7.25.6 - '@vue/compiler-core': 3.5.5 - '@vue/compiler-dom': 3.5.5 - '@vue/compiler-ssr': 3.5.5 - '@vue/shared': 3.5.5 + '@babel/parser': 7.25.7 + '@vue/compiler-core': 3.5.11 + '@vue/compiler-dom': 3.5.11 + '@vue/compiler-ssr': 3.5.11 + '@vue/shared': 3.5.11 estree-walker: 2.0.2 magic-string: 0.30.11 postcss: 8.4.47 source-map-js: 1.2.1 - '@vue/compiler-ssr@3.5.5': + '@vue/compiler-ssr@3.5.11': dependencies: - '@vue/compiler-dom': 3.5.5 - '@vue/shared': 3.5.5 + '@vue/compiler-dom': 3.5.11 + '@vue/shared': 3.5.11 '@vue/compiler-vue2@2.7.16': dependencies: @@ -9379,25 +10220,25 @@ snapshots: '@vue/devtools-api@6.6.4': {} - '@vue/devtools-api@7.4.5': + '@vue/devtools-api@7.4.6': dependencies: - '@vue/devtools-kit': 7.4.5 + '@vue/devtools-kit': 7.4.6 - '@vue/devtools-core@7.4.4(vite@5.4.5(@types/node@20.16.5)(sass@1.78.0)(terser@5.32.0))(vue@3.5.5(typescript@5.6.2))': + '@vue/devtools-core@7.4.4(vite@5.4.8(@types/node@20.16.11)(sass@1.78.0)(terser@5.32.0))(vue@3.5.11(typescript@5.6.3))': dependencies: - '@vue/devtools-kit': 7.4.5 - '@vue/devtools-shared': 7.4.5 + '@vue/devtools-kit': 7.4.6 + '@vue/devtools-shared': 7.4.6 mitt: 3.0.1 nanoid: 3.3.7 pathe: 1.1.2 - vite-hot-client: 0.2.3(vite@5.4.5(@types/node@20.16.5)(sass@1.78.0)(terser@5.32.0)) - vue: 3.5.5(typescript@5.6.2) + vite-hot-client: 0.2.3(vite@5.4.8(@types/node@20.16.11)(sass@1.78.0)(terser@5.32.0)) + vue: 3.5.11(typescript@5.6.3) transitivePeerDependencies: - vite '@vue/devtools-kit@7.4.4': dependencies: - '@vue/devtools-shared': 7.4.5 + '@vue/devtools-shared': 7.4.6 birpc: 0.2.17 hookable: 5.5.3 mitt: 3.0.1 @@ -9405,9 +10246,9 @@ snapshots: speakingurl: 14.0.1 superjson: 2.2.1 - '@vue/devtools-kit@7.4.5': + '@vue/devtools-kit@7.4.6': dependencies: - '@vue/devtools-shared': 7.4.5 + '@vue/devtools-shared': 7.4.6 birpc: 0.2.17 hookable: 5.5.3 mitt: 3.0.1 @@ -9415,91 +10256,91 @@ snapshots: speakingurl: 14.0.1 superjson: 2.2.1 - '@vue/devtools-shared@7.4.5': + '@vue/devtools-shared@7.4.6': dependencies: rfdc: 1.4.1 - '@vue/language-core@2.1.6(typescript@5.6.2)': + '@vue/language-core@2.1.6(typescript@5.6.3)': dependencies: '@volar/language-core': 2.4.4 - '@vue/compiler-dom': 3.5.5 + '@vue/compiler-dom': 3.5.11 '@vue/compiler-vue2': 2.7.16 - '@vue/shared': 3.5.5 + '@vue/shared': 3.5.11 computeds: 0.0.1 minimatch: 9.0.5 muggle-string: 0.4.1 path-browserify: 1.0.1 optionalDependencies: - typescript: 5.6.2 + typescript: 5.6.3 - '@vue/reactivity@3.5.5': + '@vue/reactivity@3.5.11': dependencies: - '@vue/shared': 3.5.5 + '@vue/shared': 3.5.11 - '@vue/runtime-core@3.5.5': + '@vue/runtime-core@3.5.11': dependencies: - '@vue/reactivity': 3.5.5 - '@vue/shared': 3.5.5 + '@vue/reactivity': 3.5.11 + '@vue/shared': 3.5.11 - '@vue/runtime-dom@3.5.5': + '@vue/runtime-dom@3.5.11': dependencies: - '@vue/reactivity': 3.5.5 - '@vue/runtime-core': 3.5.5 - '@vue/shared': 3.5.5 + '@vue/reactivity': 3.5.11 + '@vue/runtime-core': 3.5.11 + '@vue/shared': 3.5.11 csstype: 3.1.3 - '@vue/server-renderer@3.5.5(vue@3.5.5(typescript@5.6.2))': + '@vue/server-renderer@3.5.11(vue@3.5.11(typescript@5.6.3))': dependencies: - '@vue/compiler-ssr': 3.5.5 - '@vue/shared': 3.5.5 - vue: 3.5.5(typescript@5.6.2) + '@vue/compiler-ssr': 3.5.11 + '@vue/shared': 3.5.11 + vue: 3.5.11(typescript@5.6.3) - '@vue/shared@3.5.5': {} + '@vue/shared@3.5.11': {} '@vue/test-utils@2.4.6': dependencies: js-beautify: 1.15.1 vue-component-type-helpers: 2.1.6 - '@vueuse/core@11.0.3(vue@3.5.5(typescript@5.6.2))': + '@vueuse/core@11.1.0(vue@3.5.11(typescript@5.6.3))': dependencies: '@types/web-bluetooth': 0.0.20 - '@vueuse/metadata': 11.0.3 - '@vueuse/shared': 11.0.3(vue@3.5.5(typescript@5.6.2)) - vue-demi: 0.14.10(vue@3.5.5(typescript@5.6.2)) + '@vueuse/metadata': 11.1.0 + '@vueuse/shared': 11.1.0(vue@3.5.11(typescript@5.6.3)) + vue-demi: 0.14.10(vue@3.5.11(typescript@5.6.3)) transitivePeerDependencies: - '@vue/composition-api' - vue - '@vueuse/integrations@11.0.3(change-case@5.4.4)(focus-trap@7.5.4)(vue@3.5.5(typescript@5.6.2))': + '@vueuse/integrations@11.1.0(change-case@5.4.4)(focus-trap@7.6.0)(vue@3.5.11(typescript@5.6.3))': dependencies: - '@vueuse/core': 11.0.3(vue@3.5.5(typescript@5.6.2)) - '@vueuse/shared': 11.0.3(vue@3.5.5(typescript@5.6.2)) - vue-demi: 0.14.10(vue@3.5.5(typescript@5.6.2)) + '@vueuse/core': 11.1.0(vue@3.5.11(typescript@5.6.3)) + '@vueuse/shared': 11.1.0(vue@3.5.11(typescript@5.6.3)) + vue-demi: 0.14.10(vue@3.5.11(typescript@5.6.3)) optionalDependencies: change-case: 5.4.4 - focus-trap: 7.5.4 + focus-trap: 7.6.0 transitivePeerDependencies: - '@vue/composition-api' - vue - '@vueuse/metadata@11.0.3': {} + '@vueuse/metadata@11.1.0': {} - '@vueuse/nuxt@11.0.3(nuxt@packages+nuxt)(vue@3.5.5(typescript@5.6.2))': + '@vueuse/nuxt@11.1.0(nuxt@packages+nuxt)(vue@3.5.11(typescript@5.6.3))': dependencies: '@nuxt/kit': link:packages/kit - '@vueuse/core': 11.0.3(vue@3.5.5(typescript@5.6.2)) - '@vueuse/metadata': 11.0.3 + '@vueuse/core': 11.1.0(vue@3.5.11(typescript@5.6.3)) + '@vueuse/metadata': 11.1.0 local-pkg: 0.5.0 nuxt: link:packages/nuxt - vue-demi: 0.14.10(vue@3.5.5(typescript@5.6.2)) + vue-demi: 0.14.10(vue@3.5.11(typescript@5.6.3)) transitivePeerDependencies: - '@vue/composition-api' - vue - '@vueuse/shared@11.0.3(vue@3.5.5(typescript@5.6.2))': + '@vueuse/shared@11.1.0(vue@3.5.11(typescript@5.6.3))': dependencies: - vue-demi: 0.14.10(vue@3.5.5(typescript@5.6.2)) + vue-demi: 0.14.10(vue@3.5.11(typescript@5.6.3)) transitivePeerDependencies: - '@vue/composition-api' - vue @@ -9726,12 +10567,12 @@ snapshots: ast-kit@1.1.0: dependencies: - '@babel/parser': 7.25.6 + '@babel/parser': 7.25.7 pathe: 1.1.2 ast-walker-scope@0.6.2: dependencies: - '@babel/parser': 7.25.6 + '@babel/parser': 7.25.7 ast-kit: 1.1.0 async-sema@3.1.1: {} @@ -9740,8 +10581,8 @@ snapshots: autoprefixer@10.4.20(postcss@8.4.47): dependencies: - browserslist: 4.23.3 - caniuse-lite: 1.0.30001660 + browserslist: 4.24.0 + caniuse-lite: 1.0.30001667 fraction.js: 4.3.7 normalize-range: 0.1.2 picocolors: 1.1.0 @@ -9756,7 +10597,7 @@ snapshots: babel-walk@3.0.0-canary-5: dependencies: - '@babel/types': 7.25.6 + '@babel/types': 7.25.7 bail@2.0.2: {} @@ -9767,8 +10608,6 @@ snapshots: base64-js@1.5.1: {} - big-integer@1.6.52: {} - big.js@5.2.2: {} binary-extensions@2.3.0: {} @@ -9781,10 +10620,6 @@ snapshots: boolbase@1.0.0: {} - bplist-parser@0.2.0: - dependencies: - big-integer: 1.6.52 - brace-expansion@1.1.11: dependencies: balanced-match: 1.0.2 @@ -9798,12 +10633,12 @@ snapshots: dependencies: fill-range: 7.1.1 - browserslist@4.23.3: + browserslist@4.24.0: dependencies: - caniuse-lite: 1.0.30001660 - electron-to-chromium: 1.5.19 + caniuse-lite: 1.0.30001667 + electron-to-chromium: 1.5.32 node-releases: 2.0.18 - update-browserslist-db: 1.1.0(browserslist@4.23.3) + update-browserslist-db: 1.1.0(browserslist@4.24.0) buffer-crc32@1.0.0: {} @@ -9816,10 +10651,6 @@ snapshots: builtin-modules@3.3.0: {} - bundle-name@3.0.0: - dependencies: - run-applescript: 5.0.0 - bundle-name@4.1.0: dependencies: run-applescript: 7.0.0 @@ -9829,19 +10660,19 @@ snapshots: esbuild: 0.23.1 load-tsconfig: 0.2.5 - c12@2.0.0-beta.2(magicast@0.3.5): + c12@2.0.1(magicast@0.3.5): dependencies: - chokidar: 3.6.0 - confbox: 0.1.7 + chokidar: 4.0.1 + confbox: 0.1.8 defu: 6.1.4 dotenv: 16.4.5 giget: 1.2.3 - jiti: 2.0.0-beta.3 - mlly: 1.7.1 - ohash: 1.1.3 + jiti: 2.3.3 + mlly: 1.7.2 + ohash: 1.1.4 pathe: 1.1.2 perfect-debounce: 1.0.0 - pkg-types: 1.2.0 + pkg-types: 1.2.1 rc9: 2.1.2 optionalDependencies: magicast: 0.3.5 @@ -9860,12 +10691,12 @@ snapshots: caniuse-api@3.0.0: dependencies: - browserslist: 4.23.3 - caniuse-lite: 1.0.30001660 + browserslist: 4.24.0 + caniuse-lite: 1.0.30001667 lodash.memoize: 4.1.2 lodash.uniq: 4.5.0 - caniuse-lite@1.0.30001660: {} + caniuse-lite@1.0.30001667: {} case-police@0.7.0: {} @@ -9904,19 +10735,18 @@ snapshots: change-case@5.4.4: {} - changelogen@0.5.5(magicast@0.3.5): + changelogen@0.5.7(magicast@0.3.5): dependencies: - c12: 2.0.0-beta.2(magicast@0.3.5) + c12: 2.0.1(magicast@0.3.5) colorette: 2.0.20 consola: 3.2.3 convert-gitmoji: 0.1.5 - execa: 8.0.1 mri: 1.2.0 node-fetch-native: 1.6.4 - ofetch: 1.3.4(patch_hash=nxc3eojzwynarpj453xzxqr2f4) - open: 9.1.0 + ofetch: 1.4.1 + open: 10.1.0 pathe: 1.1.2 - pkg-types: 1.2.0 + pkg-types: 1.2.1 scule: 1.3.0 semver: 7.6.3 std-env: 3.7.0 @@ -9956,6 +10786,10 @@ snapshots: optionalDependencies: fsevents: 2.3.3 + chokidar@4.0.1: + dependencies: + readdirp: 4.0.1 + chownr@2.0.0: {} chrome-trace-event@1.0.4: {} @@ -10038,7 +10872,7 @@ snapshots: concat-map@0.0.1: {} - confbox@0.1.7: {} + confbox@0.1.8: {} config-chain@1.1.13: dependencies: @@ -10051,8 +10885,8 @@ snapshots: constantinople@4.0.1: dependencies: - '@babel/parser': 7.25.6 - '@babel/types': 7.25.6 + '@babel/parser': 7.25.7 + '@babel/types': 7.25.7 convert-gitmoji@0.1.5: {} @@ -10066,27 +10900,27 @@ snapshots: core-js-compat@3.38.1: dependencies: - browserslist: 4.23.3 + browserslist: 4.24.0 core-util-is@1.0.3: {} - cosmiconfig@8.3.6(typescript@5.6.2): + cosmiconfig@8.3.6(typescript@5.6.3): dependencies: import-fresh: 3.3.0 js-yaml: 4.1.0 parse-json: 5.2.0 path-type: 4.0.0 optionalDependencies: - typescript: 5.6.2 + typescript: 5.6.3 - cosmiconfig@9.0.0(typescript@5.6.2): + cosmiconfig@9.0.0(typescript@5.6.3): dependencies: env-paths: 2.2.1 import-fresh: 3.3.0 js-yaml: 4.1.0 parse-json: 5.2.0 optionalDependencies: - typescript: 5.6.2 + typescript: 5.6.3 crc-32@1.2.2: {} @@ -10123,7 +10957,7 @@ snapshots: dependencies: postcss: 8.4.47 - css-loader@7.1.2(webpack@5.94.0): + css-loader@7.1.2(@rspack/core@1.0.8)(webpack@5.95.0): dependencies: icss-utils: 5.1.0(postcss@8.4.47) postcss: 8.4.47 @@ -10134,9 +10968,10 @@ snapshots: postcss-value-parser: 4.2.0 semver: 7.6.3 optionalDependencies: - webpack: 5.94.0 + '@rspack/core': 1.0.8 + webpack: 5.95.0 - css-minimizer-webpack-plugin@7.0.0(webpack@5.94.0): + css-minimizer-webpack-plugin@7.0.0(webpack@5.95.0): dependencies: '@jridgewell/trace-mapping': 0.3.25 cssnano: 7.0.6(postcss@8.4.47) @@ -10144,7 +10979,7 @@ snapshots: postcss: 8.4.47 schema-utils: 4.2.0 serialize-javascript: 6.0.2 - webpack: 5.94.0 + webpack: 5.95.0 css-select@5.1.0: dependencies: @@ -10164,13 +10999,18 @@ snapshots: mdn-data: 2.0.30 source-map-js: 1.2.1 + css-tree@3.0.0: + dependencies: + mdn-data: 2.10.0 + source-map-js: 1.2.1 + css-what@6.1.0: {} cssesc@3.0.0: {} cssnano-preset-default@7.0.6(postcss@8.4.47): dependencies: - browserslist: 4.23.3 + browserslist: 4.24.0 css-declaration-sorter: 7.2.0(postcss@8.4.47) cssnano-utils: 5.0.0(postcss@8.4.47) postcss: 8.4.47 @@ -10277,20 +11117,8 @@ snapshots: deepmerge@4.3.1: {} - default-browser-id@3.0.0: - dependencies: - bplist-parser: 0.2.0 - untildify: 4.0.0 - default-browser-id@5.0.0: {} - default-browser@4.0.0: - dependencies: - bundle-name: 3.0.0 - default-browser-id: 3.0.0 - execa: 7.2.0 - titleize: 3.0.0 - default-browser@5.2.1: dependencies: bundle-name: 4.1.0 @@ -10332,7 +11160,7 @@ snapshots: detect-libc@2.0.3: {} - devalue@5.0.0: {} + devalue@5.1.1: {} devlop@1.1.0: dependencies: @@ -10407,7 +11235,7 @@ snapshots: ee-first@1.1.1: {} - electron-to-chromium@1.5.19: {} + electron-to-chromium@1.5.32: {} emoji-regex@8.0.0: {} @@ -10476,12 +11304,12 @@ snapshots: es-module-lexer@1.5.4: {} - esbuild-loader@4.2.2(webpack@5.94.0): + esbuild-loader@4.2.2(webpack@5.95.0): dependencies: esbuild: 0.21.5 get-tsconfig: 4.8.0 loader-utils: 2.0.4 - webpack: 5.94.0 + webpack: 5.95.0 webpack-sources: 1.4.3 esbuild@0.20.2: @@ -10563,6 +11391,33 @@ snapshots: '@esbuild/win32-ia32': 0.23.1 '@esbuild/win32-x64': 0.23.1 + esbuild@0.24.0: + optionalDependencies: + '@esbuild/aix-ppc64': 0.24.0 + '@esbuild/android-arm': 0.24.0 + '@esbuild/android-arm64': 0.24.0 + '@esbuild/android-x64': 0.24.0 + '@esbuild/darwin-arm64': 0.24.0 + '@esbuild/darwin-x64': 0.24.0 + '@esbuild/freebsd-arm64': 0.24.0 + '@esbuild/freebsd-x64': 0.24.0 + '@esbuild/linux-arm': 0.24.0 + '@esbuild/linux-arm64': 0.24.0 + '@esbuild/linux-ia32': 0.24.0 + '@esbuild/linux-loong64': 0.24.0 + '@esbuild/linux-mips64el': 0.24.0 + '@esbuild/linux-ppc64': 0.24.0 + '@esbuild/linux-riscv64': 0.24.0 + '@esbuild/linux-s390x': 0.24.0 + '@esbuild/linux-x64': 0.24.0 + '@esbuild/netbsd-x64': 0.24.0 + '@esbuild/openbsd-arm64': 0.24.0 + '@esbuild/openbsd-x64': 0.24.0 + '@esbuild/sunos-x64': 0.24.0 + '@esbuild/win32-arm64': 0.24.0 + '@esbuild/win32-ia32': 0.24.0 + '@esbuild/win32-x64': 0.24.0 + escalade@3.2.0: {} escape-html@1.0.3: {} @@ -10573,10 +11428,10 @@ snapshots: escape-string-regexp@5.0.0: {} - eslint-config-flat-gitignore@0.3.0(eslint@9.10.0(jiti@2.0.0-beta.3)): + eslint-config-flat-gitignore@0.3.0(eslint@9.12.0(jiti@2.3.3)): dependencies: '@eslint/compat': 1.1.1 - eslint: 9.10.0(jiti@2.0.0-beta.3) + eslint: 9.12.0(jiti@2.3.3) find-up-simple: 1.0.0 eslint-flat-config-utils@0.4.0: @@ -10591,12 +11446,12 @@ snapshots: transitivePeerDependencies: - supports-color - eslint-plugin-import-x@4.2.1(eslint@9.10.0(jiti@2.0.0-beta.3))(typescript@5.6.2): + eslint-plugin-import-x@4.2.1(eslint@9.12.0(jiti@2.3.3))(typescript@5.6.3): dependencies: - '@typescript-eslint/utils': 8.5.0(eslint@9.10.0(jiti@2.0.0-beta.3))(typescript@5.6.2) + '@typescript-eslint/utils': 8.8.0(eslint@9.12.0(jiti@2.3.3))(typescript@5.6.3) debug: 4.3.7(supports-color@9.4.0) doctrine: 3.0.0 - eslint: 9.10.0(jiti@2.0.0-beta.3) + eslint: 9.12.0(jiti@2.3.3) eslint-import-resolver-node: 0.3.9 get-tsconfig: 4.8.0 is-glob: 4.0.3 @@ -10608,15 +11463,15 @@ snapshots: - supports-color - typescript - eslint-plugin-jsdoc@50.2.2(eslint@9.10.0(jiti@2.0.0-beta.3)): + eslint-plugin-jsdoc@50.2.2(eslint@9.12.0(jiti@2.3.3)): dependencies: '@es-joy/jsdoccomment': 0.48.0 are-docs-informative: 0.0.2 comment-parser: 1.4.1 debug: 4.3.7(supports-color@9.4.0) escape-string-regexp: 4.0.0 - eslint: 9.10.0(jiti@2.0.0-beta.3) - espree: 10.1.0 + eslint: 9.12.0(jiti@2.3.3) + espree: 10.2.0 esquery: 1.6.0 parse-imports: 2.1.1 semver: 7.6.3 @@ -10627,38 +11482,38 @@ snapshots: eslint-plugin-no-only-tests@3.3.0: {} - eslint-plugin-perfectionist@3.6.0(eslint@9.10.0(jiti@2.0.0-beta.3))(typescript@5.6.2)(vue-eslint-parser@9.4.3(eslint@9.10.0(jiti@2.0.0-beta.3))): + eslint-plugin-perfectionist@3.8.0(eslint@9.12.0(jiti@2.3.3))(typescript@5.6.3)(vue-eslint-parser@9.4.3(eslint@9.12.0(jiti@2.3.3))): dependencies: - '@typescript-eslint/types': 8.5.0 - '@typescript-eslint/utils': 8.5.0(eslint@9.10.0(jiti@2.0.0-beta.3))(typescript@5.6.2) - eslint: 9.10.0(jiti@2.0.0-beta.3) + '@typescript-eslint/types': 8.8.0 + '@typescript-eslint/utils': 8.8.0(eslint@9.12.0(jiti@2.3.3))(typescript@5.6.3) + eslint: 9.12.0(jiti@2.3.3) minimatch: 9.0.5 natural-compare-lite: 1.4.0 optionalDependencies: - vue-eslint-parser: 9.4.3(eslint@9.10.0(jiti@2.0.0-beta.3)) + vue-eslint-parser: 9.4.3(eslint@9.12.0(jiti@2.3.3)) transitivePeerDependencies: - supports-color - typescript - eslint-plugin-regexp@2.6.0(eslint@9.10.0(jiti@2.0.0-beta.3)): + eslint-plugin-regexp@2.6.0(eslint@9.12.0(jiti@2.3.3)): dependencies: - '@eslint-community/eslint-utils': 4.4.0(eslint@9.10.0(jiti@2.0.0-beta.3)) + '@eslint-community/eslint-utils': 4.4.0(eslint@9.12.0(jiti@2.3.3)) '@eslint-community/regexpp': 4.11.0 comment-parser: 1.4.1 - eslint: 9.10.0(jiti@2.0.0-beta.3) + eslint: 9.12.0(jiti@2.3.3) jsdoc-type-pratt-parser: 4.1.0 refa: 0.12.1 regexp-ast-analysis: 0.7.1 scslre: 0.3.0 - eslint-plugin-unicorn@55.0.0(eslint@9.10.0(jiti@2.0.0-beta.3)): + eslint-plugin-unicorn@55.0.0(eslint@9.12.0(jiti@2.3.3)): dependencies: - '@babel/helper-validator-identifier': 7.24.7 - '@eslint-community/eslint-utils': 4.4.0(eslint@9.10.0(jiti@2.0.0-beta.3)) + '@babel/helper-validator-identifier': 7.25.7 + '@eslint-community/eslint-utils': 4.4.0(eslint@9.12.0(jiti@2.3.3)) ci-info: 4.0.0 clean-regexp: 1.0.0 core-js-compat: 3.38.1 - eslint: 9.10.0(jiti@2.0.0-beta.3) + eslint: 9.12.0(jiti@2.3.3) esquery: 1.6.0 globals: 15.9.0 indent-string: 4.0.0 @@ -10671,16 +11526,16 @@ snapshots: semver: 7.6.3 strip-indent: 3.0.0 - eslint-plugin-vue@9.28.0(eslint@9.10.0(jiti@2.0.0-beta.3)): + eslint-plugin-vue@9.28.0(eslint@9.12.0(jiti@2.3.3)): dependencies: - '@eslint-community/eslint-utils': 4.4.0(eslint@9.10.0(jiti@2.0.0-beta.3)) - eslint: 9.10.0(jiti@2.0.0-beta.3) + '@eslint-community/eslint-utils': 4.4.0(eslint@9.12.0(jiti@2.3.3)) + eslint: 9.12.0(jiti@2.3.3) globals: 13.24.0 natural-compare: 1.4.0 nth-check: 2.1.1 postcss-selector-parser: 6.1.2 semver: 7.6.3 - vue-eslint-parser: 9.4.3(eslint@9.10.0(jiti@2.0.0-beta.3)) + vue-eslint-parser: 9.4.3(eslint@9.12.0(jiti@2.3.3)) xml-name-validator: 4.0.0 transitivePeerDependencies: - supports-color @@ -10695,40 +11550,43 @@ snapshots: esrecurse: 4.3.0 estraverse: 5.3.0 - eslint-scope@8.0.2: + eslint-scope@8.1.0: dependencies: esrecurse: 4.3.0 estraverse: 5.3.0 - eslint-typegen@0.3.2(eslint@9.10.0(jiti@2.0.0-beta.3)): + eslint-typegen@0.3.2(eslint@9.12.0(jiti@2.3.3)): dependencies: - eslint: 9.10.0(jiti@2.0.0-beta.3) + eslint: 9.12.0(jiti@2.3.3) json-schema-to-typescript-lite: 14.1.0 ohash: 1.1.4 eslint-visitor-keys@3.4.3: {} - eslint-visitor-keys@4.0.0: {} + eslint-visitor-keys@4.1.0: {} - eslint@9.10.0(jiti@2.0.0-beta.3): + eslint@9.12.0(jiti@2.3.3): dependencies: - '@eslint-community/eslint-utils': 4.4.0(eslint@9.10.0(jiti@2.0.0-beta.3)) + '@eslint-community/eslint-utils': 4.4.0(eslint@9.12.0(jiti@2.3.3)) '@eslint-community/regexpp': 4.11.0 '@eslint/config-array': 0.18.0 + '@eslint/core': 0.6.0 '@eslint/eslintrc': 3.1.0 - '@eslint/js': 9.10.0 - '@eslint/plugin-kit': 0.1.0 + '@eslint/js': 9.12.0 + '@eslint/plugin-kit': 0.2.0 + '@humanfs/node': 0.16.5 '@humanwhocodes/module-importer': 1.0.1 - '@humanwhocodes/retry': 0.3.0 - '@nodelib/fs.walk': 1.2.8 + '@humanwhocodes/retry': 0.3.1 + '@types/estree': 1.0.6 + '@types/json-schema': 7.0.15 ajv: 6.12.6 chalk: 4.1.2 cross-spawn: 7.0.3 debug: 4.3.7(supports-color@9.4.0) escape-string-regexp: 4.0.0 - eslint-scope: 8.0.2 - eslint-visitor-keys: 4.0.0 - espree: 10.1.0 + eslint-scope: 8.1.0 + eslint-visitor-keys: 4.1.0 + espree: 10.2.0 esquery: 1.6.0 esutils: 2.0.3 fast-deep-equal: 3.1.3 @@ -10738,24 +11596,22 @@ snapshots: ignore: 5.3.2 imurmurhash: 0.1.4 is-glob: 4.0.3 - is-path-inside: 3.0.3 json-stable-stringify-without-jsonify: 1.0.1 lodash.merge: 4.6.2 minimatch: 3.1.2 natural-compare: 1.4.0 optionator: 0.9.4 - strip-ansi: 6.0.1 text-table: 0.2.0 optionalDependencies: - jiti: 2.0.0-beta.3 + jiti: 2.3.3 transitivePeerDependencies: - supports-color - espree@10.1.0: + espree@10.2.0: dependencies: acorn: 8.12.1 acorn-jsx: 5.3.2(acorn@8.12.1) - eslint-visitor-keys: 4.0.0 + eslint-visitor-keys: 4.1.0 espree@9.6.1: dependencies: @@ -10779,7 +11635,7 @@ snapshots: estree-walker@3.0.3: dependencies: - '@types/estree': 1.0.5 + '@types/estree': 1.0.6 esutils@2.0.3: {} @@ -10789,18 +11645,6 @@ snapshots: events@3.3.0: {} - execa@5.1.1: - dependencies: - cross-spawn: 7.0.3 - get-stream: 6.0.1 - human-signals: 2.1.0 - is-stream: 2.0.1 - merge-stream: 2.0.0 - npm-run-path: 4.0.1 - onetime: 5.1.2 - signal-exit: 3.0.7 - strip-final-newline: 2.0.0 - execa@7.2.0: dependencies: cross-spawn: 7.0.3 @@ -10830,7 +11674,7 @@ snapshots: externality@1.0.2: dependencies: enhanced-resolve: 5.17.1 - mlly: 1.7.1 + mlly: 1.7.2 pathe: 1.1.2 ufo: 1.5.4 @@ -10860,7 +11704,11 @@ snapshots: dependencies: reusify: 1.0.4 - fdir@6.3.0(picomatch@4.0.2): + fdir@6.4.0(picomatch@2.3.1): + optionalDependencies: + picomatch: 2.3.1 + + fdir@6.4.0(picomatch@4.0.2): optionalDependencies: picomatch: 4.0.2 @@ -10872,11 +11720,11 @@ snapshots: dependencies: flat-cache: 4.0.1 - file-loader@6.2.0(webpack@5.94.0): + file-loader@6.2.0(webpack@5.95.0): dependencies: loader-utils: 2.0.4 schema-utils: 3.3.0 - webpack: 5.94.0 + webpack: 5.95.0 file-uri-to-path@1.0.0: {} @@ -10905,15 +11753,15 @@ snapshots: flatted@3.3.1: {} - floating-vue@5.2.2(@nuxt/kit@packages+kit)(vue@3.5.5(typescript@5.6.2)): + floating-vue@5.2.2(@nuxt/kit@packages+kit)(vue@3.5.11(typescript@5.6.3)): dependencies: '@floating-ui/dom': 1.1.1 - vue: 3.5.5(typescript@5.6.2) - vue-resize: 2.0.0-alpha.1(vue@3.5.5(typescript@5.6.2)) + vue: 3.5.11(typescript@5.6.3) + vue-resize: 2.0.0-alpha.1(vue@3.5.11(typescript@5.6.3)) optionalDependencies: '@nuxt/kit': link:packages/kit - focus-trap@7.5.4: + focus-trap@7.6.0: dependencies: tabbable: 6.2.0 @@ -10926,12 +11774,12 @@ snapshots: cross-spawn: 7.0.3 signal-exit: 4.1.0 - fork-ts-checker-webpack-plugin@9.0.2(typescript@5.6.2)(webpack@5.94.0): + fork-ts-checker-webpack-plugin@9.0.2(typescript@5.6.3)(webpack@5.95.0): dependencies: - '@babel/code-frame': 7.24.7 + '@babel/code-frame': 7.25.7 chalk: 4.1.2 chokidar: 3.6.0 - cosmiconfig: 8.3.6(typescript@5.6.2) + cosmiconfig: 8.3.6(typescript@5.6.3) deepmerge: 4.3.1 fs-extra: 10.1.0 memfs: 3.5.3 @@ -10940,8 +11788,8 @@ snapshots: schema-utils: 3.3.0 semver: 7.6.3 tapable: 2.2.1 - typescript: 5.6.2 - webpack: 5.94.0 + typescript: 5.6.3 + webpack: 5.95.0 fraction.js@4.3.7: {} @@ -11018,7 +11866,7 @@ snapshots: consola: 3.2.3 defu: 6.1.4 node-fetch-native: 1.6.4 - nypm: 0.3.11 + nypm: 0.3.12 ohash: 1.1.4 pathe: 1.1.2 tar: 6.2.1 @@ -11206,7 +12054,7 @@ snapshots: web-namespaces: 2.0.1 zwitch: 2.0.4 - hast-util-to-html@9.0.2: + hast-util-to-html@9.0.3: dependencies: '@types/hast': 3.0.4 '@types/unist': 3.0.3 @@ -11258,7 +12106,7 @@ snapshots: html-tags@3.3.1: {} - html-validate@8.22.0(vitest@1.6.0(@types/node@20.16.5)(happy-dom@15.7.4)(sass@1.78.0)(terser@5.32.0)): + html-validate@8.24.1(vitest@2.1.2(@types/node@20.16.11)(happy-dom@15.7.4)(sass@1.78.0)(terser@5.32.0)): dependencies: '@html-validate/stylish': 4.2.0 '@sidvind/better-ajv-errors': 3.0.1(ajv@8.17.1) @@ -11271,13 +12119,13 @@ snapshots: prompts: 2.4.2 semver: 7.6.3 optionalDependencies: - vitest: 1.6.0(@types/node@20.16.5)(happy-dom@15.7.4)(sass@1.78.0)(terser@5.32.0) + vitest: 2.1.2(@types/node@20.16.11)(happy-dom@15.7.4)(sass@1.78.0)(terser@5.32.0) html-void-elements@3.0.0: {} - htmlnano@2.1.1(cssnano@7.0.6(postcss@8.4.47))(postcss@8.4.47)(relateurl@0.2.7)(svgo@3.3.2)(terser@5.32.0)(typescript@5.6.2): + htmlnano@2.1.1(cssnano@7.0.6(postcss@8.4.47))(postcss@8.4.47)(relateurl@0.2.7)(svgo@3.3.2)(terser@5.32.0)(typescript@5.6.3): dependencies: - cosmiconfig: 9.0.0(typescript@5.6.2) + cosmiconfig: 9.0.0(typescript@5.6.3) posthtml: 0.16.6 timsort: 0.3.0 optionalDependencies: @@ -11329,8 +12177,6 @@ snapshots: httpxy@0.1.5: {} - human-signals@2.1.0: {} - human-signals@4.3.1: {} human-signals@5.0.0: {} @@ -11345,6 +12191,8 @@ snapshots: ignore@5.3.2: {} + ignore@6.0.2: {} + image-meta@0.2.1: {} immutable@4.3.7: {} @@ -11359,17 +12207,17 @@ snapshots: bundle-require: 5.0.0(esbuild@0.23.1) debug: 4.3.7(supports-color@9.4.0) esbuild: 0.23.1 - jiti: 2.0.0-beta.3 + jiti: 2.3.3 jiti-v1: jiti@1.21.6 pathe: 1.1.2 - tsx: 4.19.0 + tsx: 4.19.1 transitivePeerDependencies: - supports-color - impound@0.1.0(rollup@4.21.3)(webpack-sources@3.2.3): + impound@0.1.0(rollup@4.24.0)(webpack-sources@3.2.3): dependencies: - '@rollup/pluginutils': 5.1.0(rollup@4.21.3) - mlly: 1.7.1 + '@rollup/pluginutils': 5.1.2(rollup@4.24.0) + mlly: 1.7.2 pathe: 1.1.2 unenv: 1.10.0 unplugin: 1.14.1(webpack-sources@3.2.3) @@ -11508,8 +12356,6 @@ snapshots: is-number@7.0.0: {} - is-path-inside@3.0.3: {} - is-path-inside@4.0.0: {} is-plain-obj@4.1.0: {} @@ -11518,7 +12364,7 @@ snapshots: is-reference@1.2.1: dependencies: - '@types/estree': 1.0.5 + '@types/estree': 1.0.6 is-regex@1.1.4: dependencies: @@ -11610,7 +12456,7 @@ snapshots: jest-util@29.7.0: dependencies: '@jest/types': 29.6.3 - '@types/node': 20.16.5 + '@types/node': 20.16.11 chalk: 4.1.2 ci-info: 3.9.0 graceful-fs: 4.2.11 @@ -11618,20 +12464,20 @@ snapshots: jest-worker@27.5.1: dependencies: - '@types/node': 20.16.5 + '@types/node': 20.16.11 merge-stream: 2.0.0 supports-color: 8.1.1 jest-worker@29.7.0: dependencies: - '@types/node': 20.16.5 + '@types/node': 20.16.11 jest-util: 29.7.0 merge-stream: 2.0.0 supports-color: 8.1.1 jiti@1.21.6: {} - jiti@2.0.0-beta.3: {} + jiti@2.3.3: {} js-beautify@1.15.1: dependencies: @@ -11659,8 +12505,6 @@ snapshots: jsesc@0.5.0: {} - jsesc@2.5.2: {} - jsesc@3.0.2: {} json-buffer@3.0.1: {} @@ -11684,7 +12528,7 @@ snapshots: json5@2.2.3: {} - jsonc-parser@3.2.1: {} + jsonc-parser@3.3.1: {} jsonfile@6.1.0: dependencies: @@ -11747,8 +12591,8 @@ snapshots: get-port-please: 3.1.2 h3: h3-nightly@2.0.0-1718872656.6765a6e http-shutdown: 1.2.2 - jiti: 2.0.0-beta.3 - mlly: 1.7.1 + jiti: 2.3.3 + mlly: 1.7.2 node-forge: 1.3.1 pathe: 1.1.2 std-env: 3.7.0 @@ -11776,8 +12620,8 @@ snapshots: local-pkg@0.5.0: dependencies: - mlly: 1.7.1 - pkg-types: 1.2.0 + mlly: 1.7.2 + pkg-types: 1.2.1 locate-path@5.0.0: dependencies: @@ -11833,8 +12677,8 @@ snapshots: magicast@0.3.5: dependencies: - '@babel/parser': 7.25.6 - '@babel/types': 7.25.6 + '@babel/parser': 7.25.7 + '@babel/types': 7.25.7 source-map-js: 1.2.1 make-dir@3.1.0: @@ -11860,26 +12704,26 @@ snapshots: markdown-table@3.0.3: {} - markdownlint-cli@0.41.0: + markdownlint-cli@0.42.0: dependencies: commander: 12.1.0 get-stdin: 9.0.0 - glob: 10.4.5 - ignore: 5.3.2 + glob: 11.0.0 + ignore: 6.0.2 js-yaml: 4.1.0 - jsonc-parser: 3.2.1 + jsonc-parser: 3.3.1 jsonpointer: 5.0.1 - markdownlint: 0.34.0 - minimatch: 9.0.5 + markdownlint: 0.35.0 + minimatch: 10.0.1 run-con: 1.3.2 - smol-toml: 1.2.2 + smol-toml: 1.3.0 - markdownlint-micromark@0.1.9: {} + markdownlint-micromark@0.1.10: {} - markdownlint@0.34.0: + markdownlint@0.35.0: dependencies: markdown-it: 14.1.0 - markdownlint-micromark: 0.1.9 + markdownlint-micromark: 0.1.10 mdast-util-find-and-replace@3.0.1: dependencies: @@ -11998,13 +12842,15 @@ snapshots: mdn-data@2.0.30: {} + mdn-data@2.10.0: {} + mdurl@2.0.0: {} memfs@3.5.3: dependencies: fs-monkey: 1.0.6 - memfs@4.11.1: + memfs@4.13.0: dependencies: '@jsonjoy.com/json-pack': 1.1.0(tslib@2.7.0) '@jsonjoy.com/util': 1.3.0(tslib@2.7.0) @@ -12230,17 +13076,15 @@ snapshots: mime@4.0.4: {} - mimic-fn@2.1.0: {} - mimic-fn@4.0.0: {} min-indent@1.0.1: {} - mini-css-extract-plugin@2.9.1(webpack@5.94.0): + mini-css-extract-plugin@2.9.1(webpack@5.95.0): dependencies: schema-utils: 4.2.0 tapable: 2.2.1 - webpack: 5.94.0 + webpack: 5.95.0 minimatch@10.0.1: dependencies: @@ -12285,31 +13129,31 @@ snapshots: mkdirp@1.0.4: {} - mkdist@1.5.9(sass@1.78.0)(typescript@5.6.2)(vue-tsc@2.1.6(typescript@5.6.2)): + mkdist@1.6.0(sass@1.78.0)(typescript@5.6.3)(vue-tsc@2.1.6(typescript@5.6.3)): dependencies: autoprefixer: 10.4.20(postcss@8.4.47) citty: 0.1.6 cssnano: 7.0.6(postcss@8.4.47) defu: 6.1.4 - esbuild: 0.23.1 - fast-glob: 3.3.2 - jiti: 2.0.0-beta.3 - mlly: 1.7.1 + esbuild: 0.24.0 + jiti: 2.3.3 + mlly: 1.7.2 pathe: 1.1.2 - pkg-types: 1.2.0 + pkg-types: 1.2.1 postcss: 8.4.47 postcss-nested: 6.2.0(postcss@8.4.47) semver: 7.6.3 + tinyglobby: 0.2.9 optionalDependencies: sass: 1.78.0 - typescript: 5.6.2 - vue-tsc: 2.1.6(typescript@5.6.2) + typescript: 5.6.3 + vue-tsc: 2.1.6(typescript@5.6.3) - mlly@1.7.1: + mlly@1.7.2: dependencies: acorn: 8.12.1 pathe: 1.1.2 - pkg-types: 1.2.0 + pkg-types: 1.2.1 ufo: 1.5.4 mri@1.2.0: {} @@ -12334,27 +13178,27 @@ snapshots: neo-async@2.6.2: {} - nitro-nightly@3.0.0-beta-28665895.e727afda(typescript@5.6.2)(webpack-sources@3.2.3): + nitro-nightly@3.0.0-beta-28665895.e727afda(typescript@5.6.3)(webpack-sources@3.2.3): dependencies: '@cloudflare/kv-asset-handler': 0.3.4 '@netlify/functions': 2.8.1 - '@rollup/plugin-alias': 5.1.0(rollup@4.21.3) - '@rollup/plugin-commonjs': 26.0.1(rollup@4.21.3) - '@rollup/plugin-inject': 5.0.5(rollup@4.21.3) - '@rollup/plugin-json': 6.1.0(rollup@4.21.3) - '@rollup/plugin-node-resolve': 15.2.3(rollup@4.21.3) - '@rollup/plugin-replace': 5.0.7(rollup@4.21.3) - '@rollup/plugin-terser': 0.4.4(rollup@4.21.3) - '@rollup/pluginutils': 5.1.0(rollup@4.21.3) + '@rollup/plugin-alias': 5.1.1(rollup@4.24.0) + '@rollup/plugin-commonjs': 26.0.1(rollup@4.24.0) + '@rollup/plugin-inject': 5.0.5(rollup@4.24.0) + '@rollup/plugin-json': 6.1.0(rollup@4.24.0) + '@rollup/plugin-node-resolve': 15.3.0(rollup@4.24.0) + '@rollup/plugin-replace': 5.0.7(rollup@4.24.0) + '@rollup/plugin-terser': 0.4.4(rollup@4.24.0) + '@rollup/pluginutils': 5.1.2(rollup@4.24.0) '@types/http-proxy': 1.17.15 '@vercel/nft': 0.27.4 archiver: 7.0.1 - c12: 2.0.0-beta.2(magicast@0.3.5) + c12: 2.0.1(magicast@0.3.5) chalk: 5.3.0 chokidar: 3.6.0 citty: 0.1.6 compatx: 0.1.8 - confbox: 0.1.7 + confbox: 0.1.8 consola: 3.2.3 cookie-es: 1.2.2 croner: 8.1.1 @@ -12373,26 +13217,26 @@ snapshots: hookable: 5.5.3 httpxy: 0.1.5 ioredis: 5.4.1 - jiti: 2.0.0-beta.3 + jiti: 2.3.3 klona: 2.0.6 knitwork: 1.1.0 listhen: 1.7.2 magic-string: 0.30.11 magicast: 0.3.5 mime: 4.0.4 - mlly: 1.7.1 + mlly: 1.7.2 mri: 1.2.0 node-fetch-native: 1.6.4 - ofetch: 1.3.4(patch_hash=nxc3eojzwynarpj453xzxqr2f4) - ohash: 1.1.3 - openapi-typescript: 7.4.0(typescript@5.6.2) + ofetch: 1.4.1 + ohash: 1.1.4 + openapi-typescript: 7.4.0(typescript@5.6.3) pathe: 1.1.2 perfect-debounce: 1.0.0 - pkg-types: 1.2.0 + pkg-types: 1.2.1 pretty-bytes: 6.1.1 radix3: 1.1.2 - rollup: 4.21.3 - rollup-plugin-visualizer: 5.12.0(rollup@4.21.3) + rollup: 4.24.0 + rollup-plugin-visualizer: 5.12.0(rollup@4.24.0) scule: 1.3.0 semver: 7.6.3 serve-placeholder: 2.0.2 @@ -12402,9 +13246,9 @@ snapshots: uncrypto: 0.1.3 unctx: 2.3.1(webpack-sources@3.2.3) unenv: 1.10.0 - unimport: 3.12.0(rollup@4.21.3)(webpack-sources@3.2.3) + unimport: 3.13.1(rollup@4.24.0)(webpack-sources@3.2.3) unstorage: 1.12.0(ioredis@5.4.1) - untyped: 1.4.2 + untyped: 1.5.1 unwasm: 0.3.9(webpack-sources@3.2.3) transitivePeerDependencies: - '@azure/app-configuration' @@ -12432,18 +13276,18 @@ snapshots: dependencies: '@cloudflare/kv-asset-handler': 0.3.4 '@netlify/functions': 2.8.1 - '@rollup/plugin-alias': 5.1.0(rollup@4.21.3) - '@rollup/plugin-commonjs': 25.0.8(rollup@4.21.3) - '@rollup/plugin-inject': 5.0.5(rollup@4.21.3) - '@rollup/plugin-json': 6.1.0(rollup@4.21.3) - '@rollup/plugin-node-resolve': 15.2.3(rollup@4.21.3) - '@rollup/plugin-replace': 5.0.7(rollup@4.21.3) - '@rollup/plugin-terser': 0.4.4(rollup@4.21.3) - '@rollup/pluginutils': 5.1.0(rollup@4.21.3) + '@rollup/plugin-alias': 5.1.1(rollup@4.24.0) + '@rollup/plugin-commonjs': 25.0.8(rollup@4.24.0) + '@rollup/plugin-inject': 5.0.5(rollup@4.24.0) + '@rollup/plugin-json': 6.1.0(rollup@4.24.0) + '@rollup/plugin-node-resolve': 15.3.0(rollup@4.24.0) + '@rollup/plugin-replace': 5.0.7(rollup@4.24.0) + '@rollup/plugin-terser': 0.4.4(rollup@4.24.0) + '@rollup/pluginutils': 5.1.2(rollup@4.24.0) '@types/http-proxy': 1.17.15 '@vercel/nft': 0.26.5 archiver: 7.0.1 - c12: 2.0.0-beta.2(magicast@0.3.5) + c12: 2.0.1(magicast@0.3.5) chalk: 5.3.0 chokidar: 3.6.0 citty: 0.1.6 @@ -12465,25 +13309,25 @@ snapshots: hookable: 5.5.3 httpxy: 0.1.5 ioredis: 5.4.1 - jiti: 2.0.0-beta.3 + jiti: 2.3.3 klona: 2.0.6 knitwork: 1.1.0 listhen: 1.7.2 magic-string: 0.30.11 mime: 4.0.4 - mlly: 1.7.1 + mlly: 1.7.2 mri: 1.2.0 node-fetch-native: 1.6.4 - ofetch: 1.3.4(patch_hash=nxc3eojzwynarpj453xzxqr2f4) + ofetch: 1.4.1 ohash: 1.1.4 openapi-typescript: 6.7.6 pathe: 1.1.2 perfect-debounce: 1.0.0 - pkg-types: 1.2.0 + pkg-types: 1.2.1 pretty-bytes: 6.1.1 radix3: 1.1.2 - rollup: 4.21.3 - rollup-plugin-visualizer: 5.12.0(rollup@4.21.3) + rollup: 4.24.0 + rollup-plugin-visualizer: 5.12.0(rollup@4.24.0) scule: 1.3.0 semver: 7.6.3 serve-placeholder: 2.0.2 @@ -12493,7 +13337,7 @@ snapshots: uncrypto: 0.1.3 unctx: 2.3.1(webpack-sources@3.2.3) unenv: 1.10.0 - unimport: 3.12.0(rollup@4.21.3)(webpack-sources@3.2.3) + unimport: 3.13.1(rollup@4.24.0)(webpack-sources@3.2.3) unstorage: 1.12.0(ioredis@5.4.1) unwasm: 0.3.9(webpack-sources@3.2.3) transitivePeerDependencies: @@ -12579,37 +13423,35 @@ snapshots: dependencies: boolbase: 1.0.0 - nuxi@3.13.2: - optionalDependencies: - fsevents: 2.3.3 + nuxi@3.14.0: {} nuxt-content-twoslash@0.1.1(@nuxtjs/mdc@0.8.3(webpack-sources@3.2.3)): dependencies: '@nuxt/kit': link:packages/kit '@nuxt/schema': link:packages/schema '@nuxtjs/mdc': 0.8.3(webpack-sources@3.2.3) - '@shikijs/vitepress-twoslash': 1.17.0(@nuxt/kit@packages+kit)(typescript@5.6.2) + '@shikijs/vitepress-twoslash': 1.17.0(@nuxt/kit@packages+kit)(typescript@5.6.3) cac: 6.7.14 chokidar: 3.6.0 fast-glob: 3.3.2 pathe: 1.1.2 picocolors: 1.1.0 remark-parse: 11.0.0 - shiki: 1.17.6 - twoslash: 0.2.11(typescript@5.6.2) - typescript: 5.6.2 + shiki: 1.20.0 + twoslash: 0.2.12(typescript@5.6.3) + typescript: 5.6.3 unified: 11.0.5 unist-util-visit: 5.0.0 transitivePeerDependencies: - supports-color - nypm@0.3.11: + nypm@0.3.12: dependencies: citty: 0.1.6 consola: 3.2.3 execa: 8.0.1 pathe: 1.1.2 - pkg-types: 1.2.0 + pkg-types: 1.2.1 ufo: 1.5.4 object-assign@4.1.1: {} @@ -12630,14 +13472,12 @@ snapshots: has-symbols: 1.0.3 object-keys: 1.1.1 - ofetch@1.3.4(patch_hash=nxc3eojzwynarpj453xzxqr2f4): + ofetch@1.4.1: dependencies: destr: 2.0.3 node-fetch-native: 1.6.4 ufo: 1.5.4 - ohash@1.1.3: {} - ohash@1.1.4: {} on-finished@2.4.1: @@ -12648,10 +13488,6 @@ snapshots: dependencies: wrappy: 1.0.2 - onetime@5.1.2: - dependencies: - mimic-fn: 2.1.0 - onetime@6.0.0: dependencies: mimic-fn: 4.0.0 @@ -12675,13 +13511,6 @@ snapshots: is-docker: 2.2.1 is-wsl: 2.2.0 - open@9.1.0: - dependencies: - default-browser: 4.0.0 - define-lazy-prop: 3.0.0 - is-inside-container: 1.0.0 - is-wsl: 2.2.0 - openapi-typescript@6.7.6: dependencies: ansi-colors: 4.1.3 @@ -12691,14 +13520,14 @@ snapshots: undici: 5.28.4 yargs-parser: 21.1.1 - openapi-typescript@7.4.0(typescript@5.6.2): + openapi-typescript@7.4.0(typescript@5.6.3): dependencies: '@redocly/openapi-core': 1.25.0(supports-color@9.4.0) ansi-colors: 4.1.3 change-case: 5.4.4 parse-json: 8.1.0 supports-color: 9.4.0 - typescript: 5.6.2 + typescript: 5.6.3 yargs-parser: 21.1.1 transitivePeerDependencies: - encoding @@ -12767,14 +13596,14 @@ snapshots: parse-json@5.2.0: dependencies: - '@babel/code-frame': 7.24.7 + '@babel/code-frame': 7.25.7 error-ex: 1.3.2 json-parse-even-better-errors: 2.3.1 lines-and-columns: 1.2.4 parse-json@8.1.0: dependencies: - '@babel/code-frame': 7.24.7 + '@babel/code-frame': 7.25.7 index-to-position: 0.1.2 type-fest: 4.26.1 @@ -12836,13 +13665,13 @@ snapshots: pify@6.1.0: {} - pkg-types@1.2.0: + pkg-types@1.2.1: dependencies: - confbox: 0.1.7 - mlly: 1.7.1 + confbox: 0.1.8 + mlly: 1.7.2 pathe: 1.1.2 - playwright-core@1.47.1: {} + playwright-core@1.48.0: {} pluralize@8.0.0: {} @@ -12856,7 +13685,7 @@ snapshots: postcss-colormin@7.0.2(postcss@8.4.47): dependencies: - browserslist: 4.23.3 + browserslist: 4.24.0 caniuse-api: 3.0.0 colord: 2.9.3 postcss: 8.4.47 @@ -12864,7 +13693,7 @@ snapshots: postcss-convert-values@7.0.4(postcss@8.4.47): dependencies: - browserslist: 4.23.3 + browserslist: 4.24.0 postcss: 8.4.47 postcss-value-parser: 4.2.0 @@ -12896,14 +13725,15 @@ snapshots: read-cache: 1.0.0 resolve: 1.22.8 - postcss-loader@8.1.1(postcss@8.4.47)(typescript@5.6.2)(webpack@5.94.0): + postcss-loader@8.1.1(@rspack/core@1.0.8)(postcss@8.4.47)(typescript@5.6.3)(webpack@5.95.0): dependencies: - cosmiconfig: 9.0.0(typescript@5.6.2) - jiti: 2.0.0-beta.3 + cosmiconfig: 9.0.0(typescript@5.6.3) + jiti: 2.3.3 postcss: 8.4.47 semver: 7.6.3 optionalDependencies: - webpack: 5.94.0 + '@rspack/core': 1.0.8 + webpack: 5.95.0 transitivePeerDependencies: - typescript @@ -12917,7 +13747,7 @@ snapshots: postcss-merge-rules@7.0.4(postcss@8.4.47): dependencies: - browserslist: 4.23.3 + browserslist: 4.24.0 caniuse-api: 3.0.0 cssnano-utils: 5.0.0(postcss@8.4.47) postcss: 8.4.47 @@ -12937,7 +13767,7 @@ snapshots: postcss-minify-params@7.0.2(postcss@8.4.47): dependencies: - browserslist: 4.23.3 + browserslist: 4.24.0 cssnano-utils: 5.0.0(postcss@8.4.47) postcss: 8.4.47 postcss-value-parser: 4.2.0 @@ -13005,7 +13835,7 @@ snapshots: postcss-normalize-unicode@7.0.2(postcss@8.4.47): dependencies: - browserslist: 4.23.3 + browserslist: 4.24.0 postcss: 8.4.47 postcss-value-parser: 4.2.0 @@ -13027,7 +13857,7 @@ snapshots: postcss-reduce-initial@7.0.2(postcss@8.4.47): dependencies: - browserslist: 4.23.3 + browserslist: 4.24.0 caniuse-api: 3.0.0 postcss: 8.4.47 @@ -13268,6 +14098,8 @@ snapshots: dependencies: picomatch: 2.3.1 + readdirp@4.0.1: {} + redis-errors@1.2.0: {} redis-parser@3.0.0: @@ -13433,49 +14265,45 @@ snapshots: glob: 11.0.0 package-json-from-dist: 1.0.0 - rollup-plugin-dts@6.1.1(rollup@4.21.3)(typescript@5.6.2): + rollup-plugin-dts@6.1.1(rollup@4.24.0)(typescript@5.6.3): dependencies: magic-string: 0.30.11 - rollup: 4.21.3 - typescript: 5.6.2 + rollup: 4.24.0 + typescript: 5.6.3 optionalDependencies: - '@babel/code-frame': 7.24.7 + '@babel/code-frame': 7.25.7 - rollup-plugin-visualizer@5.12.0(rollup@4.21.3): + rollup-plugin-visualizer@5.12.0(rollup@4.24.0): dependencies: open: 8.4.2 picomatch: 2.3.1 source-map: 0.7.4 yargs: 17.7.2 optionalDependencies: - rollup: 4.21.3 + rollup: 4.24.0 - rollup@4.21.3: + rollup@4.24.0: dependencies: - '@types/estree': 1.0.5 + '@types/estree': 1.0.6 optionalDependencies: - '@rollup/rollup-android-arm-eabi': 4.21.3 - '@rollup/rollup-android-arm64': 4.21.3 - '@rollup/rollup-darwin-arm64': 4.21.3 - '@rollup/rollup-darwin-x64': 4.21.3 - '@rollup/rollup-linux-arm-gnueabihf': 4.21.3 - '@rollup/rollup-linux-arm-musleabihf': 4.21.3 - '@rollup/rollup-linux-arm64-gnu': 4.21.3 - '@rollup/rollup-linux-arm64-musl': 4.21.3 - '@rollup/rollup-linux-powerpc64le-gnu': 4.21.3 - '@rollup/rollup-linux-riscv64-gnu': 4.21.3 - '@rollup/rollup-linux-s390x-gnu': 4.21.3 - '@rollup/rollup-linux-x64-gnu': 4.21.3 - '@rollup/rollup-linux-x64-musl': 4.21.3 - '@rollup/rollup-win32-arm64-msvc': 4.21.3 - '@rollup/rollup-win32-ia32-msvc': 4.21.3 - '@rollup/rollup-win32-x64-msvc': 4.21.3 + '@rollup/rollup-android-arm-eabi': 4.24.0 + '@rollup/rollup-android-arm64': 4.24.0 + '@rollup/rollup-darwin-arm64': 4.24.0 + '@rollup/rollup-darwin-x64': 4.24.0 + '@rollup/rollup-linux-arm-gnueabihf': 4.24.0 + '@rollup/rollup-linux-arm-musleabihf': 4.24.0 + '@rollup/rollup-linux-arm64-gnu': 4.24.0 + '@rollup/rollup-linux-arm64-musl': 4.24.0 + '@rollup/rollup-linux-powerpc64le-gnu': 4.24.0 + '@rollup/rollup-linux-riscv64-gnu': 4.24.0 + '@rollup/rollup-linux-s390x-gnu': 4.24.0 + '@rollup/rollup-linux-x64-gnu': 4.24.0 + '@rollup/rollup-linux-x64-musl': 4.24.0 + '@rollup/rollup-win32-arm64-msvc': 4.24.0 + '@rollup/rollup-win32-ia32-msvc': 4.24.0 + '@rollup/rollup-win32-x64-msvc': 4.24.0 fsevents: 2.3.3 - run-applescript@5.0.0: - dependencies: - execa: 5.1.1 - run-applescript@7.0.0: {} run-con@1.3.2: @@ -13620,16 +14448,16 @@ snapshots: dependencies: '@shikijs/core': 1.17.0 '@shikijs/types': 1.17.0 - '@shikijs/vscode-textmate': 9.2.2 + '@shikijs/vscode-textmate': 9.3.0 '@types/hast': 3.0.4 - shiki@1.17.6: + shiki@1.20.0: dependencies: - '@shikijs/core': 1.17.6 - '@shikijs/engine-javascript': 1.17.6 - '@shikijs/engine-oniguruma': 1.17.6 - '@shikijs/types': 1.17.6 - '@shikijs/vscode-textmate': 9.2.2 + '@shikijs/core': 1.20.0 + '@shikijs/engine-javascript': 1.20.0 + '@shikijs/engine-oniguruma': 1.20.0 + '@shikijs/types': 1.20.0 + '@shikijs/vscode-textmate': 9.3.0 '@types/hast': 3.0.4 side-channel@1.0.6: @@ -13645,7 +14473,7 @@ snapshots: signal-exit@4.1.0: {} - simple-git@3.26.0: + simple-git@3.27.0: dependencies: '@kwsites/file-exists': 1.1.1 '@kwsites/promise-deferred': 1.1.1 @@ -13665,15 +14493,13 @@ snapshots: dependencies: unicode-emoji-modifier-base: 1.0.0 - slash@4.0.0: {} - slash@5.1.0: {} slashes@3.0.12: {} smob@1.5.0: {} - smol-toml@1.2.2: {} + smol-toml@1.3.0: {} source-list-map@2.0.1: {} @@ -13770,8 +14596,6 @@ snapshots: dependencies: ansi-regex: 6.1.0 - strip-final-newline@2.0.0: {} - strip-final-newline@3.0.0: {} strip-indent@3.0.0: @@ -13786,7 +14610,7 @@ snapshots: stylehacks@7.0.4(postcss@8.4.47): dependencies: - browserslist: 4.23.3 + browserslist: 4.24.0 postcss: 8.4.47 postcss-selector-parser: 6.1.2 @@ -13850,25 +14674,25 @@ snapshots: mkdirp: 1.0.4 yallist: 4.0.0 - terser-webpack-plugin@5.3.10(esbuild@0.23.1)(webpack@5.94.0(esbuild@0.23.1)): + terser-webpack-plugin@5.3.10(esbuild@0.24.0)(webpack@5.95.0(esbuild@0.24.0)): dependencies: '@jridgewell/trace-mapping': 0.3.25 jest-worker: 27.5.1 schema-utils: 3.3.0 serialize-javascript: 6.0.2 terser: 5.32.0 - webpack: 5.94.0(esbuild@0.23.1) + webpack: 5.95.0(esbuild@0.24.0) optionalDependencies: - esbuild: 0.23.1 + esbuild: 0.24.0 - terser-webpack-plugin@5.3.10(webpack@5.94.0): + terser-webpack-plugin@5.3.10(webpack@5.95.0): dependencies: '@jridgewell/trace-mapping': 0.3.25 jest-worker: 27.5.1 schema-utils: 3.3.0 serialize-javascript: 6.0.2 terser: 5.32.0 - webpack: 5.94.0 + webpack: 5.95.0 terser@5.32.0: dependencies: @@ -13897,9 +14721,9 @@ snapshots: dependencies: semver: 7.6.3 - time-fix-plugin@2.0.7(webpack@5.94.0): + time-fix-plugin@2.0.7(webpack@5.95.0): dependencies: - webpack: 5.94.0 + webpack: 5.95.0 timsort@0.3.0: {} @@ -13909,9 +14733,9 @@ snapshots: tinyexec@0.3.0: {} - tinyglobby@0.2.6: + tinyglobby@0.2.9: dependencies: - fdir: 6.3.0(picomatch@4.0.2) + fdir: 6.4.0(picomatch@4.0.2) picomatch: 4.0.2 tinypool@0.8.4: {} @@ -13924,8 +14748,6 @@ snapshots: tinyspy@3.0.2: {} - titleize@3.0.0: {} - to-fast-properties@2.0.0: {} to-regex-range@5.0.1: @@ -13948,13 +14770,13 @@ snapshots: trough@2.2.0: {} - ts-api-utils@1.3.0(typescript@5.6.2): + ts-api-utils@1.3.0(typescript@5.6.3): dependencies: - typescript: 5.6.2 + typescript: 5.6.3 tslib@2.7.0: {} - tsx@4.19.0: + tsx@4.19.1: dependencies: esbuild: 0.23.1 get-tsconfig: 4.8.0 @@ -13963,20 +14785,30 @@ snapshots: twoslash-protocol@0.2.11: {} - twoslash-vue@0.2.11(typescript@5.6.2): + twoslash-protocol@0.2.12: {} + + twoslash-vue@0.2.11(typescript@5.6.3): dependencies: - '@vue/language-core': 2.1.6(typescript@5.6.2) - twoslash: 0.2.11(typescript@5.6.2) + '@vue/language-core': 2.1.6(typescript@5.6.3) + twoslash: 0.2.11(typescript@5.6.3) twoslash-protocol: 0.2.11 - typescript: 5.6.2 + typescript: 5.6.3 transitivePeerDependencies: - supports-color - twoslash@0.2.11(typescript@5.6.2): + twoslash@0.2.11(typescript@5.6.3): dependencies: - '@typescript/vfs': 1.6.0(typescript@5.6.2) + '@typescript/vfs': 1.6.0(typescript@5.6.3) twoslash-protocol: 0.2.11 - typescript: 5.6.2 + typescript: 5.6.3 + transitivePeerDependencies: + - supports-color + + twoslash@0.2.12(typescript@5.6.3): + dependencies: + '@typescript/vfs': 1.6.0(typescript@5.6.3) + twoslash-protocol: 0.2.12 + typescript: 5.6.3 transitivePeerDependencies: - supports-color @@ -13998,7 +14830,7 @@ snapshots: type-fest@4.26.1: {} - typescript@5.6.2: {} + typescript@5.6.3: {} uc.micro@2.1.0: {} @@ -14006,34 +14838,34 @@ snapshots: ultrahtml@1.5.3: {} - unbuild@3.0.0-rc.7(sass@1.78.0)(typescript@5.6.2)(vue-tsc@2.1.6(typescript@5.6.2)): + unbuild@3.0.0-rc.11(sass@1.78.0)(typescript@5.6.3)(vue-tsc@2.1.6(typescript@5.6.3)): dependencies: - '@rollup/plugin-alias': 5.1.0(rollup@4.21.3) - '@rollup/plugin-commonjs': 26.0.1(rollup@4.21.3) - '@rollup/plugin-json': 6.1.0(rollup@4.21.3) - '@rollup/plugin-node-resolve': 15.2.3(rollup@4.21.3) - '@rollup/plugin-replace': 5.0.7(rollup@4.21.3) - '@rollup/pluginutils': 5.1.0(rollup@4.21.3) + '@rollup/plugin-alias': 5.1.1(rollup@4.24.0) + '@rollup/plugin-commonjs': 28.0.0(rollup@4.24.0) + '@rollup/plugin-json': 6.1.0(rollup@4.24.0) + '@rollup/plugin-node-resolve': 15.3.0(rollup@4.24.0) + '@rollup/plugin-replace': 6.0.1(rollup@4.24.0) + '@rollup/pluginutils': 5.1.2(rollup@4.24.0) citty: 0.1.6 consola: 3.2.3 defu: 6.1.4 - esbuild: 0.23.1 - fast-glob: 3.3.2 + esbuild: 0.24.0 hookable: 5.5.3 - jiti: 2.0.0-beta.3 + jiti: 2.3.3 magic-string: 0.30.11 - mkdist: 1.5.9(sass@1.78.0)(typescript@5.6.2)(vue-tsc@2.1.6(typescript@5.6.2)) - mlly: 1.7.1 + mkdist: 1.6.0(sass@1.78.0)(typescript@5.6.3)(vue-tsc@2.1.6(typescript@5.6.3)) + mlly: 1.7.2 pathe: 1.1.2 - pkg-types: 1.2.0 + pkg-types: 1.2.1 pretty-bytes: 6.1.1 - rollup: 4.21.3 - rollup-plugin-dts: 6.1.1(rollup@4.21.3)(typescript@5.6.2) + rollup: 4.24.0 + rollup-plugin-dts: 6.1.1(rollup@4.24.0)(typescript@5.6.3) scule: 1.3.0 + tinyglobby: 0.2.9 ufo: 1.5.4 - untyped: 1.4.2 + untyped: 1.5.1 optionalDependencies: - typescript: 5.6.2 + typescript: 5.6.3 transitivePeerDependencies: - sass - supports-color @@ -14072,11 +14904,11 @@ snapshots: node-fetch-native: 1.6.4 pathe: 1.1.2 - unhead@1.11.6: + unhead@1.11.7: dependencies: - '@unhead/dom': 1.11.6 - '@unhead/schema': 1.11.6 - '@unhead/shared': 1.11.6 + '@unhead/dom': 1.11.7 + '@unhead/schema': 1.11.7 + '@unhead/shared': 1.11.7 hookable: 5.5.3 unicode-emoji-modifier-base@1.0.0: {} @@ -14093,18 +14925,18 @@ snapshots: trough: 2.2.0 vfile: 6.0.3 - unimport@3.12.0(rollup@4.21.3)(webpack-sources@3.2.3): + unimport@3.13.1(rollup@4.24.0)(webpack-sources@3.2.3): dependencies: - '@rollup/pluginutils': 5.1.0(rollup@4.21.3) + '@rollup/pluginutils': 5.1.2(rollup@4.24.0) acorn: 8.12.1 escape-string-regexp: 5.0.0 estree-walker: 3.0.3 fast-glob: 3.3.2 local-pkg: 0.5.0 magic-string: 0.30.11 - mlly: 1.7.1 + mlly: 1.7.2 pathe: 1.1.2 - pkg-types: 1.2.0 + pkg-types: 1.2.1 scule: 1.3.0 strip-literal: 2.1.0 unplugin: 1.14.1(webpack-sources@3.2.3) @@ -14141,54 +14973,77 @@ snapshots: universalify@2.0.1: {} - unocss@0.62.3(@unocss/webpack@0.62.3(rollup@4.21.3)(webpack@5.94.0(esbuild@0.23.1)))(postcss@8.4.47)(rollup@4.21.3)(vite@5.4.5(@types/node@20.16.5)(sass@1.78.0)(terser@5.32.0)): + unocss@0.62.4(@unocss/webpack@0.62.4(rollup@4.24.0)(webpack@5.95.0(esbuild@0.24.0)))(postcss@8.4.47)(rollup@4.24.0)(vite@5.4.8(@types/node@20.16.11)(sass@1.78.0)(terser@5.32.0)): dependencies: - '@unocss/astro': 0.62.3(rollup@4.21.3)(vite@5.4.5(@types/node@20.16.5)(sass@1.78.0)(terser@5.32.0)) - '@unocss/cli': 0.62.3(rollup@4.21.3) - '@unocss/core': 0.62.3 - '@unocss/extractor-arbitrary-variants': 0.62.3 - '@unocss/postcss': 0.62.3(postcss@8.4.47) - '@unocss/preset-attributify': 0.62.3 - '@unocss/preset-icons': 0.62.3 - '@unocss/preset-mini': 0.62.3 - '@unocss/preset-tagify': 0.62.3 - '@unocss/preset-typography': 0.62.3 - '@unocss/preset-uno': 0.62.3 - '@unocss/preset-web-fonts': 0.62.3 - '@unocss/preset-wind': 0.62.3 - '@unocss/reset': 0.62.3 - '@unocss/transformer-attributify-jsx': 0.62.3 - '@unocss/transformer-attributify-jsx-babel': 0.62.3 - '@unocss/transformer-compile-class': 0.62.3 - '@unocss/transformer-directives': 0.62.3 - '@unocss/transformer-variant-group': 0.62.3 - '@unocss/vite': 0.62.3(rollup@4.21.3)(vite@5.4.5(@types/node@20.16.5)(sass@1.78.0)(terser@5.32.0)) + '@unocss/astro': 0.62.4(rollup@4.24.0)(vite@5.4.8(@types/node@20.16.11)(sass@1.78.0)(terser@5.32.0)) + '@unocss/cli': 0.62.4(rollup@4.24.0) + '@unocss/core': 0.62.4 + '@unocss/postcss': 0.62.4(postcss@8.4.47) + '@unocss/preset-attributify': 0.62.4 + '@unocss/preset-icons': 0.62.4 + '@unocss/preset-mini': 0.62.4 + '@unocss/preset-tagify': 0.62.4 + '@unocss/preset-typography': 0.62.4 + '@unocss/preset-uno': 0.62.4 + '@unocss/preset-web-fonts': 0.62.4 + '@unocss/preset-wind': 0.62.4 + '@unocss/transformer-attributify-jsx': 0.62.4 + '@unocss/transformer-compile-class': 0.62.4 + '@unocss/transformer-directives': 0.62.4 + '@unocss/transformer-variant-group': 0.62.4 + '@unocss/vite': 0.62.4(rollup@4.24.0)(vite@5.4.8(@types/node@20.16.11)(sass@1.78.0)(terser@5.32.0)) optionalDependencies: - '@unocss/webpack': 0.62.3(rollup@4.21.3)(webpack@5.94.0(esbuild@0.23.1)) - vite: 5.4.5(@types/node@20.16.5)(sass@1.78.0)(terser@5.32.0) + '@unocss/webpack': 0.62.4(rollup@4.24.0)(webpack@5.95.0(esbuild@0.24.0)) + vite: 5.4.8(@types/node@20.16.11)(sass@1.78.0)(terser@5.32.0) transitivePeerDependencies: - postcss - rollup - supports-color - unplugin-vue-router@0.10.8(rollup@4.21.3)(vue-router@4.4.5(vue@3.5.5(typescript@5.6.2)))(vue@3.5.5(typescript@5.6.2))(webpack-sources@3.2.3): + unocss@0.63.4(postcss@8.4.47)(rollup@4.24.0)(vite@5.4.8(@types/node@20.16.11)(sass@1.78.0)(terser@5.32.0)): dependencies: - '@babel/types': 7.25.6 - '@rollup/pluginutils': 5.1.0(rollup@4.21.3) - '@vue-macros/common': 1.12.3(rollup@4.21.3)(vue@3.5.5(typescript@5.6.2)) + '@unocss/astro': 0.63.4(rollup@4.24.0)(vite@5.4.8(@types/node@20.16.11)(sass@1.78.0)(terser@5.32.0)) + '@unocss/cli': 0.63.4(rollup@4.24.0) + '@unocss/core': 0.63.4 + '@unocss/postcss': 0.63.4(postcss@8.4.47) + '@unocss/preset-attributify': 0.63.4 + '@unocss/preset-icons': 0.63.4 + '@unocss/preset-mini': 0.63.4 + '@unocss/preset-tagify': 0.63.4 + '@unocss/preset-typography': 0.63.4 + '@unocss/preset-uno': 0.63.4 + '@unocss/preset-web-fonts': 0.63.4 + '@unocss/preset-wind': 0.63.4 + '@unocss/transformer-attributify-jsx': 0.63.4 + '@unocss/transformer-compile-class': 0.63.4 + '@unocss/transformer-directives': 0.63.4 + '@unocss/transformer-variant-group': 0.63.4 + '@unocss/vite': 0.63.4(rollup@4.24.0)(vite@5.4.8(@types/node@20.16.11)(sass@1.78.0)(terser@5.32.0)) + optionalDependencies: + vite: 5.4.8(@types/node@20.16.11)(sass@1.78.0)(terser@5.32.0) + transitivePeerDependencies: + - postcss + - rollup + - supports-color + + unplugin-vue-router@0.10.8(rollup@4.24.0)(vue-router@4.4.5(vue@3.5.11(typescript@5.6.3)))(vue@3.5.11(typescript@5.6.3))(webpack-sources@3.2.3): + dependencies: + '@babel/types': 7.25.7 + '@rollup/pluginutils': 5.1.2(rollup@4.24.0) + '@vue-macros/common': 1.12.3(rollup@4.24.0)(vue@3.5.11(typescript@5.6.3)) ast-walker-scope: 0.6.2 chokidar: 3.6.0 fast-glob: 3.3.2 json5: 2.2.3 local-pkg: 0.5.0 magic-string: 0.30.11 - mlly: 1.7.1 + mlly: 1.7.2 pathe: 1.1.2 scule: 1.3.0 unplugin: 1.14.1(webpack-sources@3.2.3) yaml: 2.5.1 optionalDependencies: - vue-router: 4.4.5(vue@3.5.5(typescript@5.6.2)) + vue-router: 4.4.5(vue@3.5.11(typescript@5.6.3)) transitivePeerDependencies: - rollup - vue @@ -14211,28 +15066,26 @@ snapshots: lru-cache: 10.4.3 mri: 1.2.0 node-fetch-native: 1.6.4 - ofetch: 1.3.4(patch_hash=nxc3eojzwynarpj453xzxqr2f4) + ofetch: 1.4.1 ufo: 1.5.4 optionalDependencies: ioredis: 5.4.1 transitivePeerDependencies: - uWebSockets.js - untildify@4.0.0: {} - untun@0.1.3: dependencies: citty: 0.1.6 consola: 3.2.3 pathe: 1.1.2 - untyped@1.4.2: + untyped@1.5.1: dependencies: - '@babel/core': 7.25.2 - '@babel/standalone': 7.25.6 - '@babel/types': 7.25.6 + '@babel/core': 7.25.7 + '@babel/standalone': 7.25.7 + '@babel/types': 7.25.7 defu: 6.1.4 - jiti: 2.0.0-beta.3 + jiti: 2.3.3 mri: 1.2.0 scule: 1.3.0 transitivePeerDependencies: @@ -14242,16 +15095,16 @@ snapshots: dependencies: knitwork: 1.1.0 magic-string: 0.30.11 - mlly: 1.7.1 + mlly: 1.7.2 pathe: 1.1.2 - pkg-types: 1.2.0 + pkg-types: 1.2.1 unplugin: 1.14.1(webpack-sources@3.2.3) transitivePeerDependencies: - webpack-sources - update-browserslist-db@1.1.0(browserslist@4.23.3): + update-browserslist-db@1.1.0(browserslist@4.24.0): dependencies: - browserslist: 4.23.3 + browserslist: 4.24.0 escalade: 3.2.0 picocolors: 1.1.0 @@ -14263,26 +15116,26 @@ snapshots: dependencies: punycode: 2.3.1 - url-loader@4.1.1(file-loader@6.2.0(webpack@5.94.0))(webpack@5.94.0): + url-loader@4.1.1(file-loader@6.2.0(webpack@5.95.0))(webpack@5.95.0): dependencies: loader-utils: 2.0.4 mime-types: 2.1.35 schema-utils: 3.3.0 - webpack: 5.94.0 + webpack: 5.95.0 optionalDependencies: - file-loader: 6.2.0(webpack@5.94.0) + file-loader: 6.2.0(webpack@5.95.0) urlpattern-polyfill@8.0.2: {} util-deprecate@1.0.2: {} - v-lazy-show@0.2.4(@vue/compiler-core@3.5.5): + v-lazy-show@0.2.4(@vue/compiler-core@3.5.11): dependencies: - '@vue/compiler-core': 3.5.5 + '@vue/compiler-core': 3.5.11 - valibot@0.42.0(typescript@5.6.2): + valibot@0.42.1(typescript@5.6.3): optionalDependencies: - typescript: 5.6.2 + typescript: 5.6.3 validate-npm-package-license@3.0.4: dependencies: @@ -14304,17 +15157,17 @@ snapshots: '@types/unist': 3.0.3 vfile-message: 4.0.2 - vite-hot-client@0.2.3(vite@5.4.5(@types/node@20.16.5)(sass@1.78.0)(terser@5.32.0)): + vite-hot-client@0.2.3(vite@5.4.8(@types/node@20.16.11)(sass@1.78.0)(terser@5.32.0)): dependencies: - vite: 5.4.5(@types/node@20.16.5)(sass@1.78.0)(terser@5.32.0) + vite: 5.4.8(@types/node@20.16.11)(sass@1.78.0)(terser@5.32.0) - vite-node@1.6.0(@types/node@20.16.5)(sass@1.78.0)(terser@5.32.0): + vite-node@1.6.0(@types/node@20.16.11)(sass@1.78.0)(terser@5.32.0): dependencies: cac: 6.7.14 debug: 4.3.7(supports-color@9.4.0) pathe: 1.1.2 picocolors: 1.1.0 - vite: 5.4.5(@types/node@20.16.5)(sass@1.78.0)(terser@5.32.0) + vite: 5.4.8(@types/node@20.16.11)(sass@1.78.0)(terser@5.32.0) transitivePeerDependencies: - '@types/node' - less @@ -14326,12 +15179,12 @@ snapshots: - supports-color - terser - vite-node@2.1.1(@types/node@20.16.5)(sass@1.78.0)(terser@5.32.0): + vite-node@2.1.2(@types/node@20.16.11)(sass@1.78.0)(terser@5.32.0): dependencies: cac: 6.7.14 debug: 4.3.7(supports-color@9.4.0) pathe: 1.1.2 - vite: 5.4.5(@types/node@20.16.5)(sass@1.78.0)(terser@5.32.0) + vite: 5.4.8(@types/node@20.16.11)(sass@1.78.0)(terser@5.32.0) transitivePeerDependencies: - '@types/node' - less @@ -14343,9 +15196,9 @@ snapshots: - supports-color - terser - vite-plugin-checker@0.8.0(eslint@9.10.0(jiti@2.0.0-beta.3))(optionator@0.9.4)(typescript@5.6.2)(vite@5.4.5(@types/node@20.16.5)(sass@1.78.0)(terser@5.32.0))(vue-tsc@2.1.6(typescript@5.6.2)): + vite-plugin-checker@0.8.0(eslint@9.12.0(jiti@2.3.3))(optionator@0.9.4)(typescript@5.6.3)(vite@5.4.8(@types/node@20.16.11)(sass@1.78.0)(terser@5.32.0))(vue-tsc@2.1.6(typescript@5.6.3)): dependencies: - '@babel/code-frame': 7.24.7 + '@babel/code-frame': 7.25.7 ansi-escapes: 4.3.2 chalk: 4.1.2 chokidar: 3.6.0 @@ -14355,21 +15208,21 @@ snapshots: npm-run-path: 4.0.1 strip-ansi: 6.0.1 tiny-invariant: 1.3.3 - vite: 5.4.5(@types/node@20.16.5)(sass@1.78.0)(terser@5.32.0) + vite: 5.4.8(@types/node@20.16.11)(sass@1.78.0)(terser@5.32.0) vscode-languageclient: 7.0.0 vscode-languageserver: 7.0.0 vscode-languageserver-textdocument: 1.0.12 vscode-uri: 3.0.8 optionalDependencies: - eslint: 9.10.0(jiti@2.0.0-beta.3) + eslint: 9.12.0(jiti@2.3.3) optionator: 0.9.4 - typescript: 5.6.2 - vue-tsc: 2.1.6(typescript@5.6.2) + typescript: 5.6.3 + vue-tsc: 2.1.6(typescript@5.6.3) - vite-plugin-inspect@0.8.7(@nuxt/kit@packages+kit)(rollup@4.21.3)(vite@5.4.5(@types/node@20.16.5)(sass@1.78.0)(terser@5.32.0)): + vite-plugin-inspect@0.8.7(@nuxt/kit@packages+kit)(rollup@4.24.0)(vite@5.4.8(@types/node@20.16.11)(sass@1.78.0)(terser@5.32.0)): dependencies: '@antfu/utils': 0.7.10 - '@rollup/pluginutils': 5.1.0(rollup@4.21.3) + '@rollup/pluginutils': 5.1.2(rollup@4.24.0) debug: 4.3.7(supports-color@9.4.0) error-stack-parser-es: 0.1.5 fs-extra: 11.2.0 @@ -14377,42 +15230,42 @@ snapshots: perfect-debounce: 1.0.0 picocolors: 1.1.0 sirv: 2.0.4 - vite: 5.4.5(@types/node@20.16.5)(sass@1.78.0)(terser@5.32.0) + vite: 5.4.8(@types/node@20.16.11)(sass@1.78.0)(terser@5.32.0) optionalDependencies: '@nuxt/kit': link:packages/kit transitivePeerDependencies: - rollup - supports-color - vite-plugin-vue-inspector@5.2.0(vite@5.4.5(@types/node@20.16.5)(sass@1.78.0)(terser@5.32.0)): + vite-plugin-vue-inspector@5.1.3(vite@5.4.8(@types/node@20.16.11)(sass@1.78.0)(terser@5.32.0)): dependencies: - '@babel/core': 7.25.2 - '@babel/plugin-proposal-decorators': 7.24.7(@babel/core@7.25.2) - '@babel/plugin-syntax-import-attributes': 7.25.6(@babel/core@7.25.2) - '@babel/plugin-syntax-import-meta': 7.10.4(@babel/core@7.25.2) - '@babel/plugin-transform-typescript': 7.25.2(@babel/core@7.25.2) - '@vue/babel-plugin-jsx': 1.2.5(@babel/core@7.25.2) - '@vue/compiler-dom': 3.5.5 + '@babel/core': 7.25.7 + '@babel/plugin-proposal-decorators': 7.24.7(@babel/core@7.25.7) + '@babel/plugin-syntax-import-attributes': 7.25.6(@babel/core@7.25.7) + '@babel/plugin-syntax-import-meta': 7.10.4(@babel/core@7.25.7) + '@babel/plugin-transform-typescript': 7.25.2(@babel/core@7.25.7) + '@vue/babel-plugin-jsx': 1.2.5(@babel/core@7.25.7) + '@vue/compiler-dom': 3.5.11 kolorist: 1.8.0 magic-string: 0.30.11 - vite: 5.4.5(@types/node@20.16.5)(sass@1.78.0)(terser@5.32.0) + vite: 5.4.8(@types/node@20.16.11)(sass@1.78.0)(terser@5.32.0) transitivePeerDependencies: - supports-color - vite@5.4.5(@types/node@20.16.5)(sass@1.78.0)(terser@5.32.0): + vite@5.4.8(@types/node@20.16.11)(sass@1.78.0)(terser@5.32.0): dependencies: esbuild: 0.21.5 postcss: 8.4.47 - rollup: 4.21.3 + rollup: 4.24.0 optionalDependencies: - '@types/node': 20.16.5 + '@types/node': 20.16.11 fsevents: 2.3.3 sass: 1.78.0 terser: 5.32.0 - vitest-environment-nuxt@1.0.1(@testing-library/vue@8.1.0(@vue/compiler-sfc@3.5.5)(vue@3.5.5(typescript@5.6.2)))(@vue/test-utils@2.4.6)(h3-nightly@2.0.0-1718872656.6765a6e)(happy-dom@15.7.4)(magicast@0.3.5)(nitropack@2.9.7(magicast@0.3.5)(webpack-sources@3.2.3))(playwright-core@1.47.1)(vite@5.4.5(@types/node@20.16.5)(sass@1.78.0)(terser@5.32.0))(vitest@2.1.1(@types/node@20.16.5)(happy-dom@15.7.4)(sass@1.78.0)(terser@5.32.0))(vue-router@4.4.5(vue@3.5.5(typescript@5.6.2)))(vue@3.5.5(typescript@5.6.2))(webpack-sources@3.2.3): + vitest-environment-nuxt@1.0.1(@testing-library/vue@8.1.0(@vue/compiler-sfc@3.5.11)(vue@3.5.11(typescript@5.6.3)))(@vue/test-utils@2.4.6)(h3-nightly@2.0.0-1718872656.6765a6e)(happy-dom@15.7.4)(magicast@0.3.5)(nitropack@2.9.7(magicast@0.3.5)(webpack-sources@3.2.3))(playwright-core@1.48.0)(vite@5.4.8(@types/node@20.16.11)(sass@1.78.0)(terser@5.32.0))(vitest@2.1.2(@types/node@20.16.11)(happy-dom@15.7.4)(sass@1.78.0)(terser@5.32.0))(vue-router@4.4.5(vue@3.5.11(typescript@5.6.3)))(vue@3.5.11(typescript@5.6.3))(webpack-sources@3.2.3): dependencies: - '@nuxt/test-utils': 3.14.2(@testing-library/vue@8.1.0(@vue/compiler-sfc@3.5.5)(vue@3.5.5(typescript@5.6.2)))(@vue/test-utils@2.4.6)(h3-nightly@2.0.0-1718872656.6765a6e)(happy-dom@15.7.4)(magicast@0.3.5)(nitropack@2.9.7(magicast@0.3.5)(webpack-sources@3.2.3))(playwright-core@1.47.1)(vite@5.4.5(@types/node@20.16.5)(sass@1.78.0)(terser@5.32.0))(vitest@2.1.1(@types/node@20.16.5)(happy-dom@15.7.4)(sass@1.78.0)(terser@5.32.0))(vue-router@4.4.5(vue@3.5.5(typescript@5.6.2)))(vue@3.5.5(typescript@5.6.2))(webpack-sources@3.2.3) + '@nuxt/test-utils': 3.14.3(@testing-library/vue@8.1.0(@vue/compiler-sfc@3.5.11)(vue@3.5.11(typescript@5.6.3)))(@vue/test-utils@2.4.6)(h3-nightly@2.0.0-1718872656.6765a6e)(happy-dom@15.7.4)(magicast@0.3.5)(nitropack@2.9.7(magicast@0.3.5)(webpack-sources@3.2.3))(playwright-core@1.48.0)(vite@5.4.8(@types/node@20.16.11)(sass@1.78.0)(terser@5.32.0))(vitest@2.1.2(@types/node@20.16.11)(happy-dom@15.7.4)(sass@1.78.0)(terser@5.32.0))(vue-router@4.4.5(vue@3.5.11(typescript@5.6.3)))(vue@3.5.11(typescript@5.6.3))(webpack-sources@3.2.3) transitivePeerDependencies: - '@cucumber/cucumber' - '@jest/globals' @@ -14432,7 +15285,7 @@ snapshots: - vue-router - webpack-sources - vitest@1.6.0(@types/node@20.16.5)(happy-dom@15.7.4)(sass@1.78.0)(terser@5.32.0): + vitest@1.6.0(@types/node@20.16.11)(happy-dom@15.7.4)(sass@1.78.0)(terser@5.32.0): dependencies: '@vitest/expect': 1.6.0 '@vitest/runner': 1.6.0 @@ -14451,11 +15304,11 @@ snapshots: strip-literal: 2.1.0 tinybench: 2.9.0 tinypool: 0.8.4 - vite: 5.4.5(@types/node@20.16.5)(sass@1.78.0)(terser@5.32.0) - vite-node: 1.6.0(@types/node@20.16.5)(sass@1.78.0)(terser@5.32.0) + vite: 5.4.8(@types/node@20.16.11)(sass@1.78.0)(terser@5.32.0) + vite-node: 1.6.0(@types/node@20.16.11)(sass@1.78.0)(terser@5.32.0) why-is-node-running: 2.3.0 optionalDependencies: - '@types/node': 20.16.5 + '@types/node': 20.16.11 happy-dom: 15.7.4 transitivePeerDependencies: - less @@ -14467,15 +15320,15 @@ snapshots: - supports-color - terser - vitest@2.1.1(@types/node@20.16.5)(happy-dom@15.7.4)(sass@1.78.0)(terser@5.32.0): + vitest@2.1.2(@types/node@20.16.11)(happy-dom@15.7.4)(sass@1.78.0)(terser@5.32.0): dependencies: - '@vitest/expect': 2.1.1 - '@vitest/mocker': 2.1.1(@vitest/spy@2.1.1)(vite@5.4.5(@types/node@20.16.5)(sass@1.78.0)(terser@5.32.0)) - '@vitest/pretty-format': 2.1.1 - '@vitest/runner': 2.1.1 - '@vitest/snapshot': 2.1.1 - '@vitest/spy': 2.1.1 - '@vitest/utils': 2.1.1 + '@vitest/expect': 2.1.2 + '@vitest/mocker': 2.1.2(@vitest/spy@2.1.2)(vite@5.4.8(@types/node@20.16.11)(sass@1.78.0)(terser@5.32.0)) + '@vitest/pretty-format': 2.1.2 + '@vitest/runner': 2.1.2 + '@vitest/snapshot': 2.1.2 + '@vitest/spy': 2.1.2 + '@vitest/utils': 2.1.2 chai: 5.1.1 debug: 4.3.7(supports-color@9.4.0) magic-string: 0.30.11 @@ -14485,11 +15338,11 @@ snapshots: tinyexec: 0.3.0 tinypool: 1.0.1 tinyrainbow: 1.2.0 - vite: 5.4.5(@types/node@20.16.5)(sass@1.78.0)(terser@5.32.0) - vite-node: 2.1.1(@types/node@20.16.5)(sass@1.78.0)(terser@5.32.0) + vite: 5.4.8(@types/node@20.16.11)(sass@1.78.0)(terser@5.32.0) + vite-node: 2.1.2(@types/node@20.16.11)(sass@1.78.0)(terser@5.32.0) why-is-node-running: 2.3.0 optionalDependencies: - '@types/node': 20.16.5 + '@types/node': 20.16.11 happy-dom: 15.7.4 transitivePeerDependencies: - less @@ -14527,22 +15380,22 @@ snapshots: vscode-uri@3.0.8: {} - vue-bundle-renderer@2.1.0: + vue-bundle-renderer@2.1.1: dependencies: ufo: 1.5.4 vue-component-type-helpers@2.1.6: {} - vue-demi@0.14.10(vue@3.5.5(typescript@5.6.2)): + vue-demi@0.14.10(vue@3.5.11(typescript@5.6.3)): dependencies: - vue: 3.5.5(typescript@5.6.2) + vue: 3.5.11(typescript@5.6.3) vue-devtools-stub@0.1.0: {} - vue-eslint-parser@9.4.3(eslint@9.10.0(jiti@2.0.0-beta.3)): + vue-eslint-parser@9.4.3(eslint@9.12.0(jiti@2.3.3)): dependencies: debug: 4.3.7(supports-color@9.4.0) - eslint: 9.10.0(jiti@2.0.0-beta.3) + eslint: 9.12.0(jiti@2.3.3) eslint-scope: 7.2.2 eslint-visitor-keys: 3.4.3 espree: 9.6.1 @@ -14552,41 +15405,41 @@ snapshots: transitivePeerDependencies: - supports-color - vue-loader@17.4.2(@vue/compiler-sfc@3.5.5)(vue@3.5.5(typescript@5.6.2))(webpack@5.94.0): + vue-loader@17.4.2(@vue/compiler-sfc@3.5.11)(vue@3.5.11(typescript@5.6.3))(webpack@5.95.0): dependencies: chalk: 4.1.2 hash-sum: 2.0.0 watchpack: 2.4.2 - webpack: 5.94.0 + webpack: 5.95.0 optionalDependencies: - '@vue/compiler-sfc': 3.5.5 - vue: 3.5.5(typescript@5.6.2) + '@vue/compiler-sfc': 3.5.11 + vue: 3.5.11(typescript@5.6.3) - vue-resize@2.0.0-alpha.1(vue@3.5.5(typescript@5.6.2)): + vue-resize@2.0.0-alpha.1(vue@3.5.11(typescript@5.6.3)): dependencies: - vue: 3.5.5(typescript@5.6.2) + vue: 3.5.11(typescript@5.6.3) - vue-router@4.4.5(vue@3.5.5(typescript@5.6.2)): + vue-router@4.4.5(vue@3.5.11(typescript@5.6.3)): dependencies: '@vue/devtools-api': 6.6.4 - vue: 3.5.5(typescript@5.6.2) + vue: 3.5.11(typescript@5.6.3) - vue-tsc@2.1.6(typescript@5.6.2): + vue-tsc@2.1.6(typescript@5.6.3): dependencies: '@volar/typescript': 2.4.4 - '@vue/language-core': 2.1.6(typescript@5.6.2) + '@vue/language-core': 2.1.6(typescript@5.6.3) semver: 7.6.3 - typescript: 5.6.2 + typescript: 5.6.3 - vue@3.5.5(typescript@5.6.2): + vue@3.5.11(typescript@5.6.3): dependencies: - '@vue/compiler-dom': 3.5.5 - '@vue/compiler-sfc': 3.5.5 - '@vue/runtime-dom': 3.5.5 - '@vue/server-renderer': 3.5.5(vue@3.5.5(typescript@5.6.2)) - '@vue/shared': 3.5.5 + '@vue/compiler-dom': 3.5.11 + '@vue/compiler-sfc': 3.5.11 + '@vue/runtime-dom': 3.5.11 + '@vue/server-renderer': 3.5.11(vue@3.5.11(typescript@5.6.3)) + '@vue/shared': 3.5.11 optionalDependencies: - typescript: 5.6.2 + typescript: 5.6.3 watchpack@2.4.2: dependencies: @@ -14617,16 +15470,16 @@ snapshots: - bufferutil - utf-8-validate - webpack-dev-middleware@7.4.2(webpack@5.94.0): + webpack-dev-middleware@7.4.2(webpack@5.95.0): dependencies: colorette: 2.0.20 - memfs: 4.11.1 + memfs: 4.13.0 mime-types: 2.1.35 on-finished: 2.4.1 range-parser: 1.2.1 schema-utils: 4.2.0 optionalDependencies: - webpack: 5.94.0 + webpack: 5.95.0 webpack-hot-middleware@2.26.1: dependencies: @@ -14643,15 +15496,15 @@ snapshots: webpack-virtual-modules@0.6.2: {} - webpack@5.94.0: + webpack@5.95.0: dependencies: - '@types/estree': 1.0.5 + '@types/estree': 1.0.6 '@webassemblyjs/ast': 1.12.1 '@webassemblyjs/wasm-edit': 1.12.1 '@webassemblyjs/wasm-parser': 1.12.1 acorn: 8.12.1 acorn-import-attributes: 1.9.5(acorn@8.12.1) - browserslist: 4.23.3 + browserslist: 4.24.0 chrome-trace-event: 1.0.4 enhanced-resolve: 5.17.1 es-module-lexer: 1.5.4 @@ -14665,7 +15518,7 @@ snapshots: neo-async: 2.6.2 schema-utils: 3.3.0 tapable: 2.2.1 - terser-webpack-plugin: 5.3.10(webpack@5.94.0) + terser-webpack-plugin: 5.3.10(webpack@5.95.0) watchpack: 2.4.2 webpack-sources: 3.2.3 transitivePeerDependencies: @@ -14673,15 +15526,15 @@ snapshots: - esbuild - uglify-js - webpack@5.94.0(esbuild@0.23.1): + webpack@5.95.0(esbuild@0.24.0): dependencies: - '@types/estree': 1.0.5 + '@types/estree': 1.0.6 '@webassemblyjs/ast': 1.12.1 '@webassemblyjs/wasm-edit': 1.12.1 '@webassemblyjs/wasm-parser': 1.12.1 acorn: 8.12.1 acorn-import-attributes: 1.9.5(acorn@8.12.1) - browserslist: 4.23.3 + browserslist: 4.24.0 chrome-trace-event: 1.0.4 enhanced-resolve: 5.17.1 es-module-lexer: 1.5.4 @@ -14695,7 +15548,7 @@ snapshots: neo-async: 2.6.2 schema-utils: 3.3.0 tapable: 2.2.1 - terser-webpack-plugin: 5.3.10(esbuild@0.23.1)(webpack@5.94.0(esbuild@0.23.1)) + terser-webpack-plugin: 5.3.10(esbuild@0.24.0)(webpack@5.95.0(esbuild@0.24.0)) watchpack: 2.4.2 webpack-sources: 3.2.3 transitivePeerDependencies: @@ -14703,7 +15556,7 @@ snapshots: - esbuild - uglify-js - webpackbar@6.0.1(webpack@5.94.0): + webpackbar@6.0.1(webpack@5.95.0): dependencies: ansi-escapes: 4.3.2 chalk: 4.1.2 @@ -14712,7 +15565,7 @@ snapshots: markdown-table: 2.0.0 pretty-time: 1.1.0 std-env: 3.7.0 - webpack: 5.94.0 + webpack: 5.95.0 wrap-ansi: 7.0.0 whatwg-mimetype@3.0.0: {} @@ -14764,8 +15617,8 @@ snapshots: with@7.0.2: dependencies: - '@babel/parser': 7.25.6 - '@babel/types': 7.25.6 + '@babel/parser': 7.25.7 + '@babel/types': 7.25.7 assert-never: 1.3.0 babel-walk: 3.0.0-canary-5 diff --git a/test/basic.test.ts b/test/basic.test.ts index 9b9100f07e..01a135223e 100644 --- a/test/basic.test.ts +++ b/test/basic.test.ts @@ -15,7 +15,7 @@ import type { NuxtIslandResponse } from '#app' // TODO: update @nuxt/test-utils const $fetch = _$fetch as import('nitro/types').$Fetch<unknown, import('nitro/types').NitroFetchRequest> -const isWebpack = process.env.TEST_BUILDER === 'webpack' +const isWebpack = process.env.TEST_BUILDER === 'webpack' || process.env.TEST_BUILDER === 'rspack' const isTestingAppManifest = process.env.TEST_MANIFEST !== 'manifest-off' await setup({ @@ -193,15 +193,15 @@ describe('pages', () => { }) it('validates routes', async () => { - const { status, headers } = await fetch('/forbidden') + const { status, headers } = await fetch('/catchall/forbidden') expect(status).toEqual(404) expect(headers.get('Set-Cookie')).toBe('set-in-plugin=true; Path=/') const { page } = await renderPage('/navigate-to-forbidden') await page.getByText('should throw a 404 error').click() - expect(await page.getByRole('heading').textContent()).toMatchInlineSnapshot('"Page Not Found: /forbidden"') - expect(await page.getByTestId('path').textContent()).toMatchInlineSnapshot('" Path: /forbidden"') + expect(await page.getByRole('heading').textContent()).toMatchInlineSnapshot('"Page Not Found: /catchall/forbidden"') + expect(await page.getByTestId('path').textContent()).toMatchInlineSnapshot('" Path: /catchall/forbidden"') await gotoPath(page, '/navigate-to-forbidden') await page.getByText('should be caught by catchall').click() @@ -249,13 +249,13 @@ describe('pages', () => { await serverPage.close() }) - it('returns 500 when there is an infinite redirect', async () => { - const { status } = await fetch('/redirect-infinite', { redirect: 'manual' }) + it.runIf(isDev())('returns 500 when there is an infinite redirect', async () => { + const { status } = await fetch('/catchall/redirect-infinite', { redirect: 'manual' }) expect(status).toEqual(500) }) it('render catchall page', async () => { - const res = await fetch('/not-found') + const res = await fetch('/catchall/not-found') expect(res.status).toEqual(200) const html = await res.text() @@ -269,7 +269,7 @@ describe('pages', () => { // Middleware still runs after validation: https://github.com/nuxt/nuxt/issues/15650 expect(html).toContain('Middleware ran: true') - await expectNoClientErrors('/not-found') + await expectNoClientErrors('/catchall/not-found') }) it('should render correctly when loaded on a different path', async () => { @@ -620,6 +620,11 @@ describe('pages', () => { expect(status).toBe(200) } }) + + it.skipIf(isDev() || isWebpack /* TODO: fix bug with import.meta.prerender being undefined in webpack build */)('prerenders pages hinted with a route rule', async () => { + const html = await $fetch('/prerender/test') + expect(html).toContain('should be prerendered: true') + }) }) describe('nuxt composables', () => { @@ -1270,6 +1275,13 @@ describe('middlewares', () => { expect(html).toContain('Hello Nuxt 3!') }) + it('should allow redirection from a non-existent route with `ssr: false`', async () => { + const page = await createPage('/redirect/catchall') + + expect(await page.getByRole('heading').textContent()).toMatchInlineSnapshot('"[...slug].vue"') + await page.close() + }) + it('should allow aborting navigation on server-side', async () => { const res = await fetch('/?abort', { headers: { @@ -1387,12 +1399,12 @@ describe('ignore list', () => { expect(html).toContain('was import ignored: true') }) it('should ignore scanned nitro handlers in .nuxtignore', async () => { - const html = await $fetch<string>('/ignore/scanned') - expect(html).not.toContain('this should be ignored') + const { status } = await fetch('/ignore/scanned') + expect(status).toBe(404) }) it.skipIf(isDev())('should ignore public assets in .nuxtignore', async () => { - const html = await $fetch<string>('/ignore/public-asset') - expect(html).not.toContain('this should be ignored') + const { status } = await fetch('/ignore/public-asset') + expect(status).toBe(404) }) }) @@ -1459,7 +1471,7 @@ describe('extends support', () => { expect(html).toContain('Middleware | override: Injected by extended middleware from bar') }) it('global middlewares sorting', async () => { - const html = await $fetch<string>('/middleware/ordering') + const html = await $fetch<string>('/catchall/middleware/ordering') expect(html).toContain('catchall at middleware') }) }) @@ -1482,7 +1494,7 @@ describe('extends support', () => { }) it('respects plugin ordering within layers', async () => { - const html = await $fetch<string>('/plugins/ordering') + const html = await $fetch<string>('/catchall/plugins/ordering') expect(html).toContain('catchall at plugins') }) }) @@ -1810,7 +1822,7 @@ describe.skipIf(isDev() || isWebpack)('inlining component styles', () => { it('should not include inlined CSS in generated CSS file', async () => { const html: string = await $fetch<string>('/styles') - const cssFiles = new Set([...html.matchAll(/<link [^>]*href="([^"]*\.css)">/g)].map(m => m[1]!)) + const cssFiles = new Set([...html.matchAll(/<link [^>]*href="([^"]*\.css)"(?: crossorigin)?>/g)].map(m => m[1]!)) let css = '' for (const file of cssFiles || []) { css += await $fetch<string>(file) @@ -1831,9 +1843,11 @@ describe.skipIf(isDev() || isWebpack)('inlining component styles', () => { it('does not load stylesheet for page styles', async () => { const html: string = await $fetch<string>('/styles') - expect(html.match(/<link [^>]*href="[^"]*\.css">/g)?.filter(m => m.includes('entry'))?.map(m => m.replace(/\.[^.]*\.css/, '.css'))).toMatchInlineSnapshot(` + const cssFiles = html.match(/<link [^>]*href="[^"]*\.css"/g) + expect(cssFiles?.length).toBeGreaterThan(0) + expect(cssFiles?.filter(m => m.includes('entry'))?.map(m => m.replace(/\.[^.]*\.css/, '.css'))).toMatchInlineSnapshot(` [ - "<link rel="stylesheet" href="/_nuxt/entry.css">", + "<link rel="stylesheet" href="/_nuxt/entry.css"", ] `) }) @@ -2365,6 +2379,7 @@ describe('component islands', () => { { "link": [ { + "crossorigin": "", "href": "/_nuxt/components/islands/PureComponent.vue?vue&type=style&index=0&scoped=c0c0cf89&lang.css", "rel": "stylesheet", }, @@ -2455,7 +2470,7 @@ describe.runIf(isDev() && !isWebpack)('vite plugins', () => { expect(await $fetch<string>('/__nuxt-test')).toBe('vite-plugin with __nuxt prefix') }) it('does not allow direct access to nuxt source folder', async () => { - expect(await $fetch<string>('/app.config')).toContain('catchall at') + expect(await fetch('/app.config').then(r => r.status)).toBe(404) }) }) diff --git a/test/bundle.test.ts b/test/bundle.test.ts index bcf0113d53..b70e53c765 100644 --- a/test/bundle.test.ts +++ b/test/bundle.test.ts @@ -18,13 +18,13 @@ describe.skipIf(process.env.SKIP_BUNDLE_SIZE === 'true' || process.env.ECOSYSTEM // Identical behaviour between inline/external vue options as this should only affect the server build it('default client bundle size', async () => { - const [clientStats, clientStatsInlined] = await Promise.all(['.output', '.output-inline'] + const [clientStats, clientStatsInlined] = await Promise.all((['.output', '.output-inline']) .map(outputDir => analyzeSizes(['**/*.js'], join(rootDir, outputDir, 'public')))) - expect.soft(roundToKilobytes(clientStats.totalBytes)).toMatchInlineSnapshot(`"114k"`) - expect.soft(roundToKilobytes(clientStatsInlined.totalBytes)).toMatchInlineSnapshot(`"114k"`) + expect.soft(roundToKilobytes(clientStats!.totalBytes)).toMatchInlineSnapshot(`"116k"`) + expect.soft(roundToKilobytes(clientStatsInlined!.totalBytes)).toMatchInlineSnapshot(`"116k"`) - const files = new Set([...clientStats.files, ...clientStatsInlined.files].map(f => f.replace(/\..*\.js/, '.js'))) + const files = new Set([...clientStats!.files, ...clientStatsInlined!.files].map(f => f.replace(/\..*\.js/, '.js'))) expect([...files]).toMatchInlineSnapshot(` [ @@ -37,10 +37,10 @@ describe.skipIf(process.env.SKIP_BUNDLE_SIZE === 'true' || process.env.ECOSYSTEM const serverDir = join(rootDir, '.output/server') const serverStats = await analyzeSizes(['**/*.mjs', '!node_modules'], serverDir) - expect.soft(roundToKilobytes(serverStats.totalBytes)).toMatchInlineSnapshot(`"206k"`) + expect.soft(roundToKilobytes(serverStats.totalBytes)).toMatchInlineSnapshot(`"208k"`) const modules = await analyzeSizes(['node_modules/**/*'], serverDir) - expect.soft(roundToKilobytes(modules.totalBytes)).toMatchInlineSnapshot(`"1386k"`) + expect.soft(roundToKilobytes(modules.totalBytes)).toMatchInlineSnapshot(`"1394k"`) const packages = modules.files .filter(m => m.endsWith('package.json')) @@ -78,10 +78,10 @@ describe.skipIf(process.env.SKIP_BUNDLE_SIZE === 'true' || process.env.ECOSYSTEM const serverDir = join(rootDir, '.output-inline/server') const serverStats = await analyzeSizes(['**/*.mjs', '!node_modules'], serverDir) - expect.soft(roundToKilobytes(serverStats.totalBytes)).toMatchInlineSnapshot(`"553k"`) + expect.soft(roundToKilobytes(serverStats.totalBytes)).toMatchInlineSnapshot(`"558k"`) const modules = await analyzeSizes(['node_modules/**/*'], serverDir) - expect.soft(roundToKilobytes(modules.totalBytes)).toMatchInlineSnapshot(`"88.2k"`) + expect.soft(roundToKilobytes(modules.totalBytes)).toMatchInlineSnapshot(`"93.8k"`) const packages = modules.files .filter(m => m.endsWith('package.json')) diff --git a/test/fixtures/basic-types/nuxt.config.ts b/test/fixtures/basic-types/nuxt.config.ts index ffa2356e3a..ea5a0d9cf5 100644 --- a/test/fixtures/basic-types/nuxt.config.ts +++ b/test/fixtures/basic-types/nuxt.config.ts @@ -9,7 +9,7 @@ export default defineNuxtConfig({ future: { typescriptBundlerResolution: process.env.MODULE_RESOLUTION === 'bundler', }, - builder: process.env.TEST_BUILDER as 'webpack' | 'vite' ?? 'vite', + builder: process.env.TEST_BUILDER as 'webpack' | 'rspack' | 'vite' ?? 'vite', theme: './extends/bar', extends: [ './extends/node_modules/foo', diff --git a/test/fixtures/basic/components/ServerOnlyComponent.server.vue b/test/fixtures/basic/components/ServerOnlyComponent.server.vue index ff3b40a1ba..c4085eb133 100644 --- a/test/fixtures/basic/components/ServerOnlyComponent.server.vue +++ b/test/fixtures/basic/components/ServerOnlyComponent.server.vue @@ -1,5 +1,5 @@ <script setup> -prerenderRoutes(['/some/url/from/server-only/component']) +prerenderRoutes(['/catchall/some/url/from/server-only/component']) </script> <template> diff --git a/test/fixtures/basic/middleware/redirect.global.ts b/test/fixtures/basic/middleware/redirect.global.ts index 9ca90920ff..9638eb41cc 100644 --- a/test/fixtures/basic/middleware/redirect.global.ts +++ b/test/fixtures/basic/middleware/redirect.global.ts @@ -9,9 +9,9 @@ export default defineNuxtRouteMiddleware(async (to) => { await new Promise(resolve => setTimeout(resolve, 100)) return navigateTo(to.path.slice('/redirect/'.length - 1)) } - if (to.path === '/redirect-infinite') { + if (to.path === '/catchall/redirect-infinite') { // the path will be the same in this new route and vue-router should send a 500 response - return navigateTo('/redirect-infinite?test=true') + return navigateTo('/catchall/redirect-infinite?test=true') } if (to.path === '/navigate-to-external') { return navigateTo('/', { external: true }) diff --git a/test/fixtures/basic/nuxt.config.ts b/test/fixtures/basic/nuxt.config.ts index 767f3008b2..3e41835bf2 100644 --- a/test/fixtures/basic/nuxt.config.ts +++ b/test/fixtures/basic/nuxt.config.ts @@ -31,7 +31,7 @@ export default defineNuxtConfig({ include: ['keepalive-in-config', 'not-keepalive-in-nuxtpage'], }, }, - builder: process.env.TEST_BUILDER as 'webpack' | 'vite' ?? 'vite', + builder: process.env.TEST_BUILDER as 'webpack' | 'rspack' | 'vite' ?? 'vite', appId: 'nuxt-app-basic', build: { transpile: [ @@ -62,10 +62,12 @@ export default defineNuxtConfig({ }, routeRules: { '/route-rules/spa': { ssr: false }, + '/redirect/catchall': { ssr: false }, '/head-spa': { ssr: false }, '/route-rules/middleware': { appMiddleware: 'route-rules-middleware' }, '/hydration/spa-redirection/**': { ssr: false }, '/no-scripts': { experimentalNoScripts: true }, + '/prerender/**': { prerender: true }, }, prerender: { routes: [ @@ -121,7 +123,7 @@ export default defineNuxtConfig({ if (id === 'virtual.css') { return 'virtual.css' } }, load (id) { - if (id === 'virtual.css') { return ':root { --virtual: red }' } + if (id.includes('virtual.css')) { return ':root { --virtual: red }' } }, })) addBuildPlugin(plugin) diff --git a/test/fixtures/basic/package.json b/test/fixtures/basic/package.json index 5eceaeb30d..b4103147af 100644 --- a/test/fixtures/basic/package.json +++ b/test/fixtures/basic/package.json @@ -5,6 +5,7 @@ "build": "nuxi build" }, "dependencies": { + "@nuxt/rspack-builder": "workspace:*", "@nuxt/webpack-builder": "workspace:*", "nuxt": "workspace:*" }, diff --git a/test/fixtures/basic/pages/[...slug].vue b/test/fixtures/basic/pages/catchall/[...slug].vue similarity index 81% rename from test/fixtures/basic/pages/[...slug].vue rename to test/fixtures/basic/pages/catchall/[...slug].vue index 22f81cd64f..1af000b72b 100644 --- a/test/fixtures/basic/pages/[...slug].vue +++ b/test/fixtures/basic/pages/catchall/[...slug].vue @@ -9,9 +9,9 @@ <script setup lang="ts"> definePageMeta({ middleware: ['override'], - validate: to => to.path !== '/forbidden', + validate: to => to.path !== '/catchall/forbidden', }) -const route = useRoute('slug') +const route = useRoute('catchall-slug') if (route.path.includes('navigate-some-path')) { throw createError('navigate-some-path setup running') } diff --git a/test/fixtures/basic/pages/navigate-to-forbidden.vue b/test/fixtures/basic/pages/navigate-to-forbidden.vue index 9d12cc7d19..264923e65a 100644 --- a/test/fixtures/basic/pages/navigate-to-forbidden.vue +++ b/test/fixtures/basic/pages/navigate-to-forbidden.vue @@ -1,10 +1,10 @@ <template> <div> <div>navigate-to-forbidden.vue</div> - <NuxtLink to="/forbidden"> + <NuxtLink to="/catchall/forbidden"> should throw a 404 error </NuxtLink> - <NuxtLink to="/some-404"> + <NuxtLink to="/catchall/some-404"> should be caught by catchall </NuxtLink> </div> diff --git a/test/fixtures/basic/pages/prerender/test.vue b/test/fixtures/basic/pages/prerender/test.vue new file mode 100644 index 0000000000..8da7b99a6b --- /dev/null +++ b/test/fixtures/basic/pages/prerender/test.vue @@ -0,0 +1,9 @@ +<script setup lang="ts"> +const wasPrerendered = useState(() => import.meta.prerender) +</script> + +<template> + <div> + should be prerendered: {{ wasPrerendered }} + </div> +</template> diff --git a/test/fixtures/runtime-compiler/nuxt.config.ts b/test/fixtures/runtime-compiler/nuxt.config.ts index b61d642360..202a2e6630 100644 --- a/test/fixtures/runtime-compiler/nuxt.config.ts +++ b/test/fixtures/runtime-compiler/nuxt.config.ts @@ -7,5 +7,5 @@ export default defineNuxtConfig({ vue: { runtimeCompiler: true, }, - builder: process.env.TEST_BUILDER as 'webpack' | 'vite' ?? 'vite', + builder: process.env.TEST_BUILDER as 'webpack' | 'rspack' | 'vite' ?? 'vite', }) diff --git a/test/hmr.test.ts b/test/hmr.test.ts index 1789c37ed9..ff2783cb66 100644 --- a/test/hmr.test.ts +++ b/test/hmr.test.ts @@ -10,7 +10,7 @@ import { expectWithPolling, renderPage } from './utils' // TODO: update @nuxt/test-utils const $fetch = _$fetch as import('nitro/types').$Fetch<unknown, import('nitro/types').NitroFetchRequest> -const isWebpack = process.env.TEST_BUILDER === 'webpack' +const isWebpack = process.env.TEST_BUILDER === 'webpack' || process.env.TEST_BUILDER === 'rspack' // TODO: fix HMR on Windows if (process.env.TEST_ENV !== 'built' && !isWindows) { @@ -72,16 +72,16 @@ if (process.env.TEST_ENV !== 'built' && !isWindows) { it('should detect new routes', async () => { await expectWithPolling( - () => $fetch<string>('/some-404').then(r => r.includes('catchall at some-404')).catch(() => null), + () => $fetch<string>('/catchall/some-404').then(r => r.includes('catchall at some-404')).catch(() => null), true, ) // write new page route const indexVue = await fsp.readFile(join(fixturePath, 'pages/index.vue'), 'utf8') - await fsp.writeFile(join(fixturePath, 'pages/some-404.vue'), indexVue) + await fsp.writeFile(join(fixturePath, 'pages/catchall/some-404.vue'), indexVue) await expectWithPolling( - () => $fetch<string>('/some-404').then(r => r.includes('Hello Nuxt 3')).catch(() => null), + () => $fetch<string>('/catchall/some-404').then(r => r.includes('Hello Nuxt 3')).catch(() => null), true, ) }) diff --git a/test/nuxt/composables.test.ts b/test/nuxt/composables.test.ts index 8eeaf1d914..1e56ce4902 100644 --- a/test/nuxt/composables.test.ts +++ b/test/nuxt/composables.test.ts @@ -12,7 +12,7 @@ import * as composables from '#app/composables' import { clearNuxtData, refreshNuxtData, useAsyncData, useNuxtData } from '#app/composables/asyncData' import { clearError, createError, isNuxtError, showError, useError } from '#app/composables/error' import { onNuxtReady } from '#app/composables/ready' -import { setResponseStatus, useRequestEvent, useRequestFetch, useRequestHeaders } from '#app/composables/ssr' +import { setResponseStatus, useRequestEvent, useRequestFetch, useRequestHeaders, useResponseHeader } from '#app/composables/ssr' import { clearNuxtState, useState } from '#app/composables/state' import { useRequestURL } from '#app/composables/url' import { getAppManifest, getRouteRules } from '#app/composables/manifest' @@ -83,6 +83,7 @@ describe('composables', () => { 'useRequestFetch', 'isPrerendered', 'useRequestHeaders', + 'useResponseHeader', 'useCookie', 'clearNuxtState', 'useState', @@ -394,6 +395,7 @@ describe('ssr composables', () => { expect(useRequestFetch()).toEqual($fetch) expect(useRequestHeaders()).toEqual({}) expect(prerenderRoutes('/')).toBeUndefined() + expect(useResponseHeader('x-test').value).toBeUndefined() }) }) diff --git a/test/runtime-compiler.test.ts b/test/runtime-compiler.test.ts index 7ab8944d09..d90b618d2e 100644 --- a/test/runtime-compiler.test.ts +++ b/test/runtime-compiler.test.ts @@ -4,7 +4,7 @@ import { $fetch, createPage, setup } from '@nuxt/test-utils/e2e' import { isWindows } from 'std-env' import { expectNoClientErrors } from './utils' -const isWebpack = process.env.TEST_BUILDER === 'webpack' +const isWebpack = process.env.TEST_BUILDER === 'webpack' || process.env.TEST_BUILDER === 'rspack' await setup({ rootDir: fileURLToPath(new URL('./fixtures/runtime-compiler', import.meta.url)), diff --git a/test/suspense.test.ts b/test/suspense.test.ts index 859a934817..6fb55edc7c 100644 --- a/test/suspense.test.ts +++ b/test/suspense.test.ts @@ -4,7 +4,7 @@ import { isWindows } from 'std-env' import { setup } from '@nuxt/test-utils' import { renderPage } from './utils' -const isWebpack = process.env.TEST_BUILDER === 'webpack' +const isWebpack = process.env.TEST_BUILDER === 'webpack' || process.env.TEST_BUILDER === 'rspack' await setup({ rootDir: fileURLToPath(new URL('./fixtures/suspense', import.meta.url)), diff --git a/tsconfig.json b/tsconfig.json index c912996aa5..6763732a3f 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -12,8 +12,7 @@ "verbatimModuleSyntax": true, /* Strictness */ "strict": true, - // TODO: enable noUncheckedIndexedAccess - // "noUncheckedIndexedAccess": true, + "noUncheckedIndexedAccess": true, "noUncheckedSideEffectImports": true, "forceConsistentCasingInFileNames": true, "noImplicitOverride": true,