diff --git a/.changeset/bright-eels-cross.md b/.changeset/bright-eels-cross.md new file mode 100644 index 0000000000..638a5d7c19 --- /dev/null +++ b/.changeset/bright-eels-cross.md @@ -0,0 +1,23 @@ +--- +'astro': minor +--- + +Exposes extra APIs for scripting and testing. + +### Config helpers + +Two new helper functions exported from `astro/config`: + +- `mergeConfig()` allows users to merge partially defined Astro configurations on top of a base config while following the merge rules of `updateConfig()` available for integrations. +- `validateConfig()` allows users to validate that a given value is a valid Astro configuration and fills in default values as necessary. + +These helpers are particularly useful for integration authors and for developers writing scripts that need to manipulate Astro configurations programmatically. + +### Programmatic build + +The `build` API now receives a second optional `BuildOptions` argument where users can specify: + +- `devOutput` (default `false`): output a development-based build similar to code transformed in `astro dev`. +- `teardownCompiler` (default `true`): teardown the compiler WASM instance after build. + +These options provide more control when running Astro builds programmatically, especially for testing scenarios or custom build pipelines. diff --git a/.changeset/clever-rice-compete.md b/.changeset/clever-rice-compete.md new file mode 100644 index 0000000000..59897964db --- /dev/null +++ b/.changeset/clever-rice-compete.md @@ -0,0 +1,23 @@ +--- +'astro': patch +--- + +Adds experimental responsive image support in Markdown + +Previously, the `experimental.responsiveImages` feature could only provide responsive images when using the `` and `` components. + +Now, images written with the `![]()` Markdown syntax in Markdown and MDX files will generate responsive images by default when using this experimental feature. + +To try this experimental feature, set `experimental.responsiveImages` to true in your `astro.config.mjs` file: + +```js +{ + experimental: { + responsiveImages: true, + }, +} +``` + +Learn more about using this feature in the [experimental responsive images feature reference](https://docs.astro.build/en/reference/experimental-flags/responsive-images/). + +For a complete overview, and to give feedback on this experimental API, see the [Responsive Images RFC](https://github.com/withastro/roadmap/blob/responsive-images/proposals/0053-responsive-images.md). \ No newline at end of file diff --git a/.changeset/grumpy-sloths-fail.md b/.changeset/grumpy-sloths-fail.md new file mode 100644 index 0000000000..1a5e9b272b --- /dev/null +++ b/.changeset/grumpy-sloths-fail.md @@ -0,0 +1,30 @@ +--- +'astro': minor +--- + +Adds a new configuration option `server.allowedHosts` and CLI option `--allowed-hosts`. + +Now you can specify the hostnames that the dev and preview servers are allowed to respond to. This is useful for allowing additional subdomains, or running the dev server in a web container. + +`allowedHosts` checks the Host header on HTTP requests from browsers and if it doesn't match, it will reject the request to prevent CSRF and XSS attacks. + +```shell +astro dev --allowed-hosts=foo.bar.example.com,bar.example.com +``` + +```shell +astro preview --allowed-hosts=foo.bar.example.com,bar.example.com +``` + +```js +// astro.config.mjs +import {defineConfig} from "astro/config"; + +export default defineConfig({ + server: { + allowedHosts: ['foo.bar.example.com', 'bar.example.com'] + } +}) +``` + +This feature is the same as [Vite's `server.allowHosts` configuration](https://vite.dev/config/server-options.html#server-allowedhosts). diff --git a/.changeset/itchy-buckets-dream.md b/.changeset/itchy-buckets-dream.md deleted file mode 100644 index 3c26324bf2..0000000000 --- a/.changeset/itchy-buckets-dream.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@astrojs/vue': patch ---- - -Fixes a case where the compiler could not be resolved automatically diff --git a/.changeset/late-mails-beam.md b/.changeset/late-mails-beam.md new file mode 100644 index 0000000000..9858996366 --- /dev/null +++ b/.changeset/late-mails-beam.md @@ -0,0 +1,5 @@ +--- +'@astrojs/db': patch +--- + +Expose `ilike` function from `drizzle-orm` diff --git a/.changeset/purple-jokes-pay.md b/.changeset/purple-jokes-pay.md new file mode 100644 index 0000000000..ddb641371b --- /dev/null +++ b/.changeset/purple-jokes-pay.md @@ -0,0 +1,5 @@ +--- +'astro': patch +--- + +Fixes an issue where a form field named "attributes" shadows the form.attributes property. diff --git a/.changeset/quiet-birds-joke.md b/.changeset/quiet-birds-joke.md new file mode 100644 index 0000000000..37b1758509 --- /dev/null +++ b/.changeset/quiet-birds-joke.md @@ -0,0 +1,7 @@ +--- +'@astrojs/internal-helpers': minor +--- + +Adds remote URL filtering utilities + +This adds logic to filter remote URLs so that it can be used by both `astro` and `@astrojs/markdown-remark`. diff --git a/.changeset/shy-bats-exist.md b/.changeset/shy-bats-exist.md new file mode 100644 index 0000000000..25ac954ef2 --- /dev/null +++ b/.changeset/shy-bats-exist.md @@ -0,0 +1,11 @@ +--- +'astro': minor +--- + +Adds the ability to process and optimize remote images in Markdown files + +Previously, Astro only allowed local images to be optimized when included using `![]()` syntax in plain Markdown files. Astro's image service could only display remote images without any processing. + +Now, Astro's image service can also optimize remote images written in standard Markdown syntax. This allows you to enjoy the benefits of Astro's image processing when your images are stored externally, for example in a CMS or digital asset manager. + +No additional configuration is required to use this feature! Any existing remote images written in Markdown will now automatically be optimized. To opt-out of this processing, write your images in Markdown using the HTML `` tag instead. Note that images located in your `public/` folder are still never processed. diff --git a/.changeset/slimy-cougars-worry.md b/.changeset/slimy-cougars-worry.md new file mode 100644 index 0000000000..3182f83b73 --- /dev/null +++ b/.changeset/slimy-cougars-worry.md @@ -0,0 +1,7 @@ +--- +'astro': patch +--- + +Fixes incorrect config update when calling `updateConfig` from `astro:build:setup` hook. + +The function previously called a custom update config function made for merging an Astro config. Now it calls the appropriate `mergeConfig()` utility exported by Vite that updates functional options correctly. diff --git a/.changeset/stale-oranges-call.md b/.changeset/stale-oranges-call.md new file mode 100644 index 0000000000..dd21fc4927 --- /dev/null +++ b/.changeset/stale-oranges-call.md @@ -0,0 +1,5 @@ +--- +'astro': patch +--- + +Fixes an issue where the dev server was applying second decoding of the URL of the incoming request, causing issues for certain URLs. diff --git a/.changeset/tiny-cows-march.md b/.changeset/tiny-cows-march.md new file mode 100644 index 0000000000..95682c85b0 --- /dev/null +++ b/.changeset/tiny-cows-march.md @@ -0,0 +1,11 @@ +--- +'@astrojs/mdx': minor +--- + +Adds the ability to process and optimize remote images in Markdown syntax in MDX files. + +Previously, Astro only allowed local images to be optimized when included using `![]()` syntax. Astro's image service could only display remote images without any processing. + +Now, Astro's image service can also optimize remote images written in standard Markdown syntax. This allows you to enjoy the benefits of Astro's image processing when your images are stored externally, for example in a CMS or digital asset manager. + +No additional configuration is required to use this feature! Any existing remote images written in Markdown will now automatically be optimized. To opt-out of this processing, write your images in Markdown using the JSX `` tag instead. Note that images located in your `public/` folder are still never processed. diff --git a/.changeset/tiny-gifts-drum.md b/.changeset/tiny-gifts-drum.md new file mode 100644 index 0000000000..ca943476b5 --- /dev/null +++ b/.changeset/tiny-gifts-drum.md @@ -0,0 +1,27 @@ +--- +'@astrojs/vercel': minor +--- + +Adds support for regular expressions in ISR exclude list + +Previously, excluding a page from ISR required explicitly listing it in `isr.exclude`. As websites grew larger, maintaining this list became increasingly difficult, especially for multiple API routes and pages that needed server-side rendering. + +To address this, ISR exclusions now support regular expressions, allowing for more flexible and scalable configurations. + +```js +// astro.config.mjs +import vercel from '@astrojs/vercel/serverless'; + +export default defineConfig({ + output: 'server', + adapter: vercel({ + isr: { + exclude: [ + '/preview', // Excludes a specific route (e.g., pages/preview.astro) + '/auth/[page]', // Excludes a dynamic route (e.g., pages/auth/[page].astro) + /^\/api\/.+/, // Excludes all routes starting with /api/ + ] + } + }) +}); +``` diff --git a/.changeset/warm-planes-swim.md b/.changeset/warm-planes-swim.md new file mode 100644 index 0000000000..f710f1a6e3 --- /dev/null +++ b/.changeset/warm-planes-swim.md @@ -0,0 +1,11 @@ +--- +'@astrojs/markdown-remark': minor +--- + +Adds remote image optimization in Markdown + +Previously, an internal remark plugin only looked for images in `![]()` syntax that referred to a relative file path. This meant that only local images stored in `src/` were passed through to an internal rehype plugin that would transform them for later processing by Astro's image service. + +Now, the plugins recognize and transform both local and remote images using this syntax. Only [authorized remote images specified in your config](https://docs.astro.build/en/guides/images/#authorizing-remote-images) are transformed; remote images from other sources will not be processed. + +While not configurable at this time, this process outputs two separate metadata fields (`localImagePaths` and `remoteImagePaths`) which allow for the possibility of controlling the behavior of each type of image separately in the future. diff --git a/.github/scripts/announce.mjs b/.github/scripts/announce.mjs index df73040372..9a50dbd1d0 100755 --- a/.github/scripts/announce.mjs +++ b/.github/scripts/announce.mjs @@ -1,6 +1,6 @@ import { readFile } from 'node:fs/promises'; import { fileURLToPath } from 'node:url'; -import { globby as glob } from 'globby'; +import { glob } from 'tinyglobby'; import { setOutput } from './utils.mjs'; const { GITHUB_REF = 'main' } = process.env; @@ -85,6 +85,8 @@ async function generatePackageMap() { const packageRoot = new URL('../../packages/', import.meta.url); const packages = await glob(['*/package.json', '*/*/package.json'], { cwd: fileURLToPath(packageRoot), + expandDirectories: false, + ignore: ['**/node_modules/**'], }); await Promise.all( packages.map(async (pkg) => { diff --git a/.github/workflows/preview-comment.yml b/.github/workflows/preview-comment.yml deleted file mode 100644 index 9fb0f48c39..0000000000 --- a/.github/workflows/preview-comment.yml +++ /dev/null @@ -1,26 +0,0 @@ -name: Add continuous release label - -on: - issue_comment: - types: [created] - -permissions: - pull-requests: write - -jobs: - label: - if: ${{ github.repository_owner == 'withastro' && startsWith(github.event.comment.body, '!preview') }} - runs-on: ubuntu-latest - - steps: - - name: Check if user has write access - uses: lannonbr/repo-permission-check-action@2.0.2 - with: - permission: write - env: - GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} - - - run: | - gh issue edit ${{ github.event.issue.number }} --add-label "pr: preview" --repo ${{ github.repository }} - env: - GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} diff --git a/.github/workflows/preview-release.yml b/.github/workflows/preview-release.yml index 7b21124b0f..88d0563b3f 100644 --- a/.github/workflows/preview-release.yml +++ b/.github/workflows/preview-release.yml @@ -24,8 +24,7 @@ env: jobs: preview: - if: | - ${{ github.repository_owner == 'withastro' && contains(github.event.pull_request.labels.*.name, 'pr: preview') }} + if: ${{ github.repository_owner == 'withastro' && github.event.label.name == 'pr preview' }} runs-on: ubuntu-latest permissions: contents: read @@ -54,28 +53,12 @@ jobs: - name: Build Packages run: pnpm run build + + - name: Remove Preview Label + uses: actions-ecosystem/action-remove-labels@v1 + with: + labels: "pr: preview" -# - name: Changesets status -# run: pnpm changeset status --output=changesets.json -# -# - name: Retrieve packages to publish -# uses: actions/github-script@v7 -# id: packages -# with: -# script: | -# const fs = require('fs'); -# let packages = JSON.parse(fs.readFileSync('changesets.json', 'utf8')); -# const releases = packages.releases -# .filter(p => { -# return p.changesets.length > 0; -# }) -# .map(p => p.name); -# if (releases.length > 0) { -# return releases.join(' '); -# } -# return "" -# result-encoding: string - - name: Publish packages run: | - pnpx pkg-pr-new publish --pnpm --compact --no-template 'packages/astro' 'packages/integrations/node' 'packages/integrations/cloudflare' 'packages/integrations/netlify' 'packages/integrations/vercel' + pnpm dlx pkg-pr-new publish --pnpm --compact --no-template 'packages/astro' 'packages/integrations/node' 'packages/integrations/cloudflare' 'packages/integrations/netlify' 'packages/integrations/vercel' diff --git a/.github/workflows/snapshot-release.yml b/.github/workflows/snapshot-release.yml deleted file mode 100644 index 483e72e0f9..0000000000 --- a/.github/workflows/snapshot-release.yml +++ /dev/null @@ -1,206 +0,0 @@ -name: Create a Snapshot Release - -on: - workflow_dispatch: - issue_comment: - types: [created] - -defaults: - run: - shell: bash - -env: - TURBO_TOKEN: ${{ secrets.TURBO_TOKEN }} - TURBO_TEAM: ${{ secrets.TURBO_TEAM }} - FORCE_COLOR: 1 - -jobs: - snapshot-release: - name: Create a snapshot release of a pull request - if: ${{ github.repository_owner == 'withastro' && github.event.issue.pull_request && (contains(github.event.comment.body, '!preview') || contains(github.event.comment.body, '/preview') || contains(github.event.comment.body, '!snapshot') || contains(github.event.comment.body, '/snapshot')) }} - runs-on: ubuntu-latest - permissions: - contents: read - id-token: write - issues: write - pull-requests: write - steps: - - name: Check if user has write access - uses: lannonbr/repo-permission-check-action@2.0.2 - with: - permission: write - env: - GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} - - - name: Extract the snapshot name from comment body - id: getSnapshotName - uses: actions/github-script@v7 - with: - script: | - const { body } = context.payload.comment; - const PREVIEW_RE = /^[!\/](?:preview|snapshot)\s+(\S*)\s*$/gim; - const [_, name] = PREVIEW_RE.exec(body) ?? []; - if (name) return name; - - const error = 'Invalid command. Expected: "/preview "' - github.rest.issues.createComment({ - issue_number: context.issue.number, - owner: context.repo.owner, - repo: context.repo.repo, - body: error, - }) - core.setFailed(error) - result-encoding: string - - - name: resolve pr refs - id: refs - uses: eficode/resolve-pr-refs@main - with: - token: ${{ secrets.GITHUB_TOKEN }} - - - uses: actions/checkout@v4 - with: - ref: ${{ steps.refs.outputs.head_ref }} - fetch-depth: 0 - - - name: Extract base branch from .changeset/config.json - id: getBaseBranch - run: | - baseBranch=$(jq -r '.baseBranch' .changeset/config.json) - echo "baseBranch=${baseBranch}" >> $GITHUB_OUTPUT - - - run: git fetch origin ${{ steps.getBaseBranch.outputs.baseBranch }}:${{ steps.getBaseBranch.outputs.baseBranch }} - - - name: Setup PNPM - uses: pnpm/action-setup@v3 - - - name: Setup Node - uses: actions/setup-node@v4 - with: - node-version: 22 - registry-url: "https://registry.npmjs.org" - cache: "pnpm" - - - name: Install dependencies - run: pnpm install - - - name: Build Packages - run: pnpm run build - - - name: Bump Package Versions - id: changesets - run: | - pnpm exec changeset status --output status.output.json 2>&1 - # Snapshots don't work in pre mode. See https://github.com/changesets/changesets/issues/1195 - pnpm exec changeset pre exit || true - pnpm exec changeset version --snapshot ${{ steps.getSnapshotName.outputs.result }} - - EOF=$(dd if=/dev/urandom bs=15 count=1 status=none | base64) - echo "status<<$EOF" >> $GITHUB_OUTPUT - echo "$(cat status.output.json)" >> $GITHUB_OUTPUT - echo "$EOF" >> $GITHUB_OUTPUT - env: - # Needs access to run the script - GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} - # Disable color - FORCE_COLOR: 0 - NO_COLOR: 1 - - - name: Publish Release - id: publish - run: | - set -o pipefail - GITHUB_ACTIONS=0 pnpm run build 2>&1 | tee build.output.txt - BUILD_EXIT_CODE=$? - - if [ $BUILD_EXIT_CODE -ne 0 ]; then - echo "::error::Build failed. See output above." - # Store the build output for the notification step before exiting - EOF=$(dd if=/dev/urandom bs=15 count=1 status=none | base64) - echo "build<<$EOF" >> $GITHUB_OUTPUT - echo "$(cat build.output.txt)" >> $GITHUB_OUTPUT - echo "$EOF" >> $GITHUB_OUTPUT - exit 1 - fi - - pnpm exec changeset publish --tag experimental--${{ steps.getSnapshotName.outputs.result }} 2>&1 | tee publish.output.txt - PUBLISH_EXIT_CODE=$? - - if [ $PUBLISH_EXIT_CODE -ne 0 ]; then - echo "::error::Publish failed. See output above." - fi - - EOF=$(dd if=/dev/urandom bs=15 count=1 status=none | base64) - - echo "build<<$EOF" >> $GITHUB_OUTPUT - echo "$(cat build.output.txt)" >> $GITHUB_OUTPUT - echo "$EOF" >> $GITHUB_OUTPUT - - echo "publish<<$EOF" >> $GITHUB_OUTPUT - echo "$(cat publish.output.txt)" >> $GITHUB_OUTPUT - echo "$EOF" >> $GITHUB_OUTPUT - - # Exit with error if publish failed - exit $PUBLISH_EXIT_CODE - env: - # Needs access to publish to npm - NPM_TOKEN: ${{ secrets.NPM_TOKEN }} - NODE_AUTH_TOKEN: ${{ secrets.NPM_TOKEN }} - # Disable color - FORCE_COLOR: 0 - NO_COLOR: 1 - - - name: Pull Request Notification - uses: actions/github-script@v7 - if: always() - env: - TAG: ${{ steps.getSnapshotName.outputs.result }} - STATUS_DATA: ${{ steps.changesets.outputs.status }} - BUILD_LOG: ${{ steps.publish.outputs.build }} - PUBLISH_LOG: ${{ steps.publish.outputs.publish }} - JOB_STATUS: ${{ job.status }} - with: - script: | - let changeset = { releases: [] }; - try { - changeset = JSON.parse(process.env.STATUS_DATA); - } catch (e) {} - - let message = ''; - - if (process.env.JOB_STATUS === 'success') { - message = 'Snapshots have been released for the following packages:'; - for (const release of changeset.releases) { - if (release.type === 'none') continue; - message += `\n- \`${release.name}@experimental--${process.env.TAG}\``; - } - } else { - message = '❌ Snapshot release failed.'; - } - - function details(title, body, failed = false) { - if (!body) return; - message += '\n'; - const icon = failed ? '❌ ' : ''; - message += `
${icon}${title}`; - message += '\n\n```\n'; - message += body; - message += '\n```\n\n
'; - } - - // Show build log first if it exists - if (process.env.BUILD_LOG) { - details('Build Log', process.env.BUILD_LOG, process.env.JOB_STATUS !== 'success'); - } - - // Only show publish log if it exists (might not if build failed) - if (process.env.PUBLISH_LOG) { - details('Publish Log', process.env.PUBLISH_LOG, process.env.JOB_STATUS !== 'success'); - } - - github.rest.issues.createComment({ - issue_number: context.issue.number, - owner: context.repo.owner, - repo: context.repo.repo, - body: message, - }) diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index d44be03b8c..db4c42d4b4 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -283,6 +283,12 @@ Assigning labels isn't always easy and many times the distinction between the di - In case the number of reactions of an issue grows, the number of users affected grows, or a discussion uncovers some insights that weren't clear before, it's OK to change the priority of the issue. The maintainer **should** provide an explanation when assigning a different label. As with any other contribution, triaging is voluntary and best-efforts. We welcome and appreciate all the help you're happy to give (including reading this!) and nothing more. If you are not confident about an issue, you are welcome to leave an issue untriaged for someone who would have more context, or to bring it to their attention. +### Preview releases + +You can trigger a preview release **from a PR** anytime by using the label `pr preview`. Add this label, and a workflow will trigger, which at the end will add a comment with the instructions of how to install the preview release. + +If you're in need to trigger multiple preview releases from the same PR, remove the label and add it again. + ## Code Structure Server-side rendering (SSR) can be complicated. The Astro package (`packages/astro`) is structured in a way to help think about the different systems. diff --git a/benchmark/package.json b/benchmark/package.json index 345c2aba00..64e3699f98 100644 --- a/benchmark/package.json +++ b/benchmark/package.json @@ -11,7 +11,7 @@ }, "dependencies": { "@astrojs/mdx": "workspace:*", - "@astrojs/node": "^9.0.2", + "@astrojs/node": "workspace:*", "@benchmark/timer": "workspace:*", "@benchmark/adapter": "workspace:*", "astro": "workspace:*", diff --git a/examples/basics/package.json b/examples/basics/package.json index ddc72560a8..e8e25f82b0 100644 --- a/examples/basics/package.json +++ b/examples/basics/package.json @@ -10,6 +10,6 @@ "astro": "astro" }, "dependencies": { - "astro": "^5.3.0" + "astro": "^5.3.1" } } diff --git a/examples/blog/package.json b/examples/blog/package.json index 80a9232a81..24354aa6f8 100644 --- a/examples/blog/package.json +++ b/examples/blog/package.json @@ -13,6 +13,6 @@ "@astrojs/mdx": "^4.0.8", "@astrojs/rss": "^4.0.11", "@astrojs/sitemap": "^3.2.1", - "astro": "^5.3.0" + "astro": "^5.3.1" } } diff --git a/examples/component/package.json b/examples/component/package.json index a174511762..f962d0dd3c 100644 --- a/examples/component/package.json +++ b/examples/component/package.json @@ -15,7 +15,7 @@ ], "scripts": {}, "devDependencies": { - "astro": "^5.3.0" + "astro": "^5.3.1" }, "peerDependencies": { "astro": "^4.0.0 || ^5.0.0" diff --git a/examples/container-with-vitest/package.json b/examples/container-with-vitest/package.json index 7210301bb7..1df03f11b6 100644 --- a/examples/container-with-vitest/package.json +++ b/examples/container-with-vitest/package.json @@ -12,7 +12,7 @@ }, "dependencies": { "@astrojs/react": "^4.2.0", - "astro": "^5.3.0", + "astro": "^5.3.1", "react": "^18.3.1", "react-dom": "^18.3.1", "vitest": "^3.0.5" diff --git a/examples/framework-alpine/package.json b/examples/framework-alpine/package.json index 422f927296..82415dad51 100644 --- a/examples/framework-alpine/package.json +++ b/examples/framework-alpine/package.json @@ -13,6 +13,6 @@ "@astrojs/alpinejs": "^0.4.3", "@types/alpinejs": "^3.13.11", "alpinejs": "^3.14.8", - "astro": "^5.3.0" + "astro": "^5.3.1" } } diff --git a/examples/framework-multiple/package.json b/examples/framework-multiple/package.json index 571b47b2e5..f429275bf0 100644 --- a/examples/framework-multiple/package.json +++ b/examples/framework-multiple/package.json @@ -14,10 +14,10 @@ "@astrojs/react": "^4.2.0", "@astrojs/solid-js": "^5.0.4", "@astrojs/svelte": "^7.0.4", - "@astrojs/vue": "^5.0.6", + "@astrojs/vue": "^5.0.7", "@types/react": "^18.3.18", "@types/react-dom": "^18.3.5", - "astro": "^5.3.0", + "astro": "^5.3.1", "preact": "^10.25.4", "react": "^18.3.1", "react-dom": "^18.3.1", diff --git a/examples/framework-preact/package.json b/examples/framework-preact/package.json index 67a41c78b4..b76a1c2d5e 100644 --- a/examples/framework-preact/package.json +++ b/examples/framework-preact/package.json @@ -12,7 +12,7 @@ "dependencies": { "@astrojs/preact": "^4.0.4", "@preact/signals": "^2.0.1", - "astro": "^5.3.0", + "astro": "^5.3.1", "preact": "^10.25.4" } } diff --git a/examples/framework-react/package.json b/examples/framework-react/package.json index 871759c751..e34457936a 100644 --- a/examples/framework-react/package.json +++ b/examples/framework-react/package.json @@ -13,7 +13,7 @@ "@astrojs/react": "^4.2.0", "@types/react": "^18.3.18", "@types/react-dom": "^18.3.5", - "astro": "^5.3.0", + "astro": "^5.3.1", "react": "^18.3.1", "react-dom": "^18.3.1" } diff --git a/examples/framework-solid/package.json b/examples/framework-solid/package.json index f957330295..fcdb79b83d 100644 --- a/examples/framework-solid/package.json +++ b/examples/framework-solid/package.json @@ -11,7 +11,7 @@ }, "dependencies": { "@astrojs/solid-js": "^5.0.4", - "astro": "^5.3.0", + "astro": "^5.3.1", "solid-js": "^1.9.4" } } diff --git a/examples/framework-svelte/package.json b/examples/framework-svelte/package.json index 3ce9e94bfb..a9646a800c 100644 --- a/examples/framework-svelte/package.json +++ b/examples/framework-svelte/package.json @@ -11,7 +11,7 @@ }, "dependencies": { "@astrojs/svelte": "^7.0.4", - "astro": "^5.3.0", + "astro": "^5.3.1", "svelte": "^5.19.7" } } diff --git a/examples/framework-vue/package.json b/examples/framework-vue/package.json index 279712ecbe..9643a3426b 100644 --- a/examples/framework-vue/package.json +++ b/examples/framework-vue/package.json @@ -10,8 +10,8 @@ "astro": "astro" }, "dependencies": { - "@astrojs/vue": "^5.0.6", - "astro": "^5.3.0", + "@astrojs/vue": "^5.0.7", + "astro": "^5.3.1", "vue": "^3.5.13" } } diff --git a/examples/hackernews/package.json b/examples/hackernews/package.json index c4c628ea15..ac564e17c8 100644 --- a/examples/hackernews/package.json +++ b/examples/hackernews/package.json @@ -10,7 +10,7 @@ "astro": "astro" }, "dependencies": { - "@astrojs/node": "^9.1.0", - "astro": "^5.3.0" + "@astrojs/node": "^9.1.1", + "astro": "^5.3.1" } } diff --git a/examples/integration/package.json b/examples/integration/package.json index 5737dd0249..0b147de027 100644 --- a/examples/integration/package.json +++ b/examples/integration/package.json @@ -15,7 +15,7 @@ ], "scripts": {}, "devDependencies": { - "astro": "^5.3.0" + "astro": "^5.3.1" }, "peerDependencies": { "astro": "^4.0.0" diff --git a/examples/minimal/package.json b/examples/minimal/package.json index ad1145f2e1..ee25b518e8 100644 --- a/examples/minimal/package.json +++ b/examples/minimal/package.json @@ -10,6 +10,6 @@ "astro": "astro" }, "dependencies": { - "astro": "^5.3.0" + "astro": "^5.3.1" } } diff --git a/examples/portfolio/package.json b/examples/portfolio/package.json index 95bff2c559..794692032f 100644 --- a/examples/portfolio/package.json +++ b/examples/portfolio/package.json @@ -10,6 +10,6 @@ "astro": "astro" }, "dependencies": { - "astro": "^5.3.0" + "astro": "^5.3.1" } } diff --git a/examples/ssr/package.json b/examples/ssr/package.json index 554cbbc320..f18ac814bc 100644 --- a/examples/ssr/package.json +++ b/examples/ssr/package.json @@ -11,9 +11,9 @@ "server": "node dist/server/entry.mjs" }, "dependencies": { - "@astrojs/node": "^9.1.0", + "@astrojs/node": "^9.1.1", "@astrojs/svelte": "^7.0.4", - "astro": "^5.3.0", + "astro": "^5.3.1", "svelte": "^5.19.7" } } diff --git a/examples/starlog/package.json b/examples/starlog/package.json index edb201ac27..addd00814e 100644 --- a/examples/starlog/package.json +++ b/examples/starlog/package.json @@ -9,7 +9,7 @@ "astro": "astro" }, "dependencies": { - "astro": "^5.3.0", + "astro": "^5.3.1", "sass": "^1.83.4", "sharp": "^0.33.3" } diff --git a/examples/toolbar-app/package.json b/examples/toolbar-app/package.json index 3edec99c13..463af0292e 100644 --- a/examples/toolbar-app/package.json +++ b/examples/toolbar-app/package.json @@ -16,6 +16,6 @@ }, "devDependencies": { "@types/node": "^18.17.8", - "astro": "^5.3.0" + "astro": "^5.3.1" } } diff --git a/examples/with-markdoc/package.json b/examples/with-markdoc/package.json index b27aaadc67..b0e190fad1 100644 --- a/examples/with-markdoc/package.json +++ b/examples/with-markdoc/package.json @@ -11,6 +11,6 @@ }, "dependencies": { "@astrojs/markdoc": "^0.12.9", - "astro": "^5.3.0" + "astro": "^5.3.1" } } diff --git a/examples/with-mdx/package.json b/examples/with-mdx/package.json index c2e6bb8783..ce69e6d5cd 100644 --- a/examples/with-mdx/package.json +++ b/examples/with-mdx/package.json @@ -12,7 +12,7 @@ "dependencies": { "@astrojs/mdx": "^4.0.8", "@astrojs/preact": "^4.0.4", - "astro": "^5.3.0", + "astro": "^5.3.1", "preact": "^10.25.4" } } diff --git a/examples/with-nanostores/package.json b/examples/with-nanostores/package.json index 0f8c3687a7..c4ab506bf0 100644 --- a/examples/with-nanostores/package.json +++ b/examples/with-nanostores/package.json @@ -12,7 +12,7 @@ "dependencies": { "@astrojs/preact": "^4.0.4", "@nanostores/preact": "^0.5.2", - "astro": "^5.3.0", + "astro": "^5.3.1", "nanostores": "^0.11.3", "preact": "^10.25.4" } diff --git a/examples/with-tailwindcss/package.json b/examples/with-tailwindcss/package.json index 7eca55315f..978532602c 100644 --- a/examples/with-tailwindcss/package.json +++ b/examples/with-tailwindcss/package.json @@ -13,7 +13,7 @@ "@astrojs/mdx": "^4.0.8", "@tailwindcss/vite": "^4.0.3", "@types/canvas-confetti": "^1.9.0", - "astro": "^5.3.0", + "astro": "^5.3.1", "canvas-confetti": "^1.9.3", "tailwindcss": "^4.0.3" } diff --git a/examples/with-vitest/package.json b/examples/with-vitest/package.json index 684eedb304..e586f54698 100644 --- a/examples/with-vitest/package.json +++ b/examples/with-vitest/package.json @@ -11,7 +11,7 @@ "test": "vitest" }, "dependencies": { - "astro": "^5.3.0", + "astro": "^5.3.1", "vitest": "^3.0.5" } } diff --git a/package.json b/package.json index aadc2eb9c6..3b6ffbfc81 100644 --- a/package.json +++ b/package.json @@ -62,11 +62,11 @@ "esbuild": "^0.24.2", "eslint": "^9.19.0", "eslint-plugin-regexp": "^2.7.0", - "globby": "^14.0.2", "only-allow": "^1.2.1", "prettier": "^3.4.2", "prettier-plugin-astro": "^0.14.1", "publint": "^0.3.2", + "tinyglobby": "^0.2.12", "turbo": "^2.4.0", "typescript": "~5.7.3", "typescript-eslint": "^8.23.0" diff --git a/packages/astro/CHANGELOG.md b/packages/astro/CHANGELOG.md index 0b4eadbc8c..01e1e7fde1 100644 --- a/packages/astro/CHANGELOG.md +++ b/packages/astro/CHANGELOG.md @@ -1,5 +1,23 @@ # astro +## 5.3.1 + +### Patch Changes + +- [#13233](https://github.com/withastro/astro/pull/13233) [`32fafeb`](https://github.com/withastro/astro/commit/32fafeb874cc4b6312eb50d54d9f0ca6b83aedbc) Thanks [@joshmkennedy](https://github.com/joshmkennedy)! - Ensures consistent behaviour of `Astro.rewrite`/`ctx.rewrite` when using `base` and `trailingSlash` options. + +- [#13003](https://github.com/withastro/astro/pull/13003) [`ea79054`](https://github.com/withastro/astro/commit/ea790542e186b0d2d2e828cb3ebd23bde4d04879) Thanks [@chaegumi](https://github.com/chaegumi)! - Fixes a bug that caused the `vite.base` value to be ignored when running `astro dev` + +- [#13299](https://github.com/withastro/astro/pull/13299) [`2e1321e`](https://github.com/withastro/astro/commit/2e1321e9d5b27da3e86bc4021e4136661a8055aa) Thanks [@bluwy](https://github.com/bluwy)! - Uses `tinyglobby` for globbing files + +- [#13233](https://github.com/withastro/astro/pull/13233) [`32fafeb`](https://github.com/withastro/astro/commit/32fafeb874cc4b6312eb50d54d9f0ca6b83aedbc) Thanks [@joshmkennedy](https://github.com/joshmkennedy)! - Ensures that `Astro.url`/`ctx.url` is correctly updated with the `base` path after rewrites. + + This change fixes an issue where `Astro.url`/`ctx.url` did not include the configured base path after Astro.rewrite was called. Now, the base path is correctly reflected in Astro.url. + + Previously, any rewrites performed through `Astro.rewrite`/`ctx.rewrite` failed to append the base path to `Astro.url`/`ctx.rewrite`, which could lead to incorrect URL handling in downstream logic. By fixing this, we ensure that all routes remain consistent and predictable after a rewrite. + + If you were relying on the work around of including the base path in astro.rewrite you can now remove it from the path. + ## 5.3.0 ### Minor Changes diff --git a/packages/astro/components/Image.astro b/packages/astro/components/Image.astro index a74c40332e..709e4fe681 100644 --- a/packages/astro/components/Image.astro +++ b/packages/astro/components/Image.astro @@ -1,7 +1,6 @@ --- import { type LocalImageProps, type RemoteImageProps, getImage, imageConfig } from 'astro:assets'; import type { UnresolvedImageTransform } from '../dist/assets/types'; -import { applyResponsiveAttributes } from '../dist/assets/utils/imageAttributes.js'; import { AstroError, AstroErrorData } from '../dist/core/errors/index.js'; import type { HTMLAttributes } from '../types'; @@ -46,14 +45,7 @@ if (import.meta.env.DEV) { additionalAttributes['data-image-component'] = 'true'; } -const { class: className, ...attributes } = useResponsive - ? applyResponsiveAttributes({ - layout, - image, - props, - additionalAttributes, - }) - : { ...additionalAttributes, ...image.attributes }; +const { class: className, ...attributes } = { ...additionalAttributes, ...image.attributes }; --- {/* Applying class outside of the spread prevents it from applying unnecessary astro-* classes */} diff --git a/packages/astro/components/Picture.astro b/packages/astro/components/Picture.astro index 139681b51a..08d7e1cd3b 100644 --- a/packages/astro/components/Picture.astro +++ b/packages/astro/components/Picture.astro @@ -1,8 +1,7 @@ --- import { type LocalImageProps, type RemoteImageProps, getImage, imageConfig } from 'astro:assets'; import * as mime from 'mrmime'; -import { applyResponsiveAttributes } from '../dist/assets/utils/imageAttributes'; -import { isESMImportedImage, resolveSrc } from '../dist/assets/utils/imageKind'; +import { isESMImportedImage, resolveSrc } from '../dist/assets/utils/imageKind.js'; import { AstroError, AstroErrorData } from '../dist/core/errors/index.js'; import type { GetImageResult, @@ -101,18 +100,14 @@ if (fallbackImage.srcSet.values.length > 0) { imgAdditionalAttributes.srcset = fallbackImage.srcSet.attribute; } -const { class: className, ...attributes } = useResponsive - ? applyResponsiveAttributes({ - layout, - image: fallbackImage, - props, - additionalAttributes: imgAdditionalAttributes, - }) - : { ...imgAdditionalAttributes, ...fallbackImage.attributes }; - if (import.meta.env.DEV) { imgAdditionalAttributes['data-image-component'] = 'true'; } + +const { class: className, ...attributes } = { + ...imgAdditionalAttributes, + ...fallbackImage.attributes, +}; --- diff --git a/packages/astro/e2e/fixtures/actions-blog/package.json b/packages/astro/e2e/fixtures/actions-blog/package.json index f6bd12d0e4..4f5b2ae57d 100644 --- a/packages/astro/e2e/fixtures/actions-blog/package.json +++ b/packages/astro/e2e/fixtures/actions-blog/package.json @@ -12,7 +12,7 @@ "dependencies": { "@astrojs/check": "^0.9.4", "@astrojs/db": "workspace:*", - "@astrojs/node": "^9.0.2", + "@astrojs/node": "workspace:*", "@astrojs/react": "workspace:*", "@types/react": "^18.3.18", "@types/react-dom": "^18.3.5", diff --git a/packages/astro/e2e/fixtures/actions-react-19/package.json b/packages/astro/e2e/fixtures/actions-react-19/package.json index 8c6f980ea4..beef3a1100 100644 --- a/packages/astro/e2e/fixtures/actions-react-19/package.json +++ b/packages/astro/e2e/fixtures/actions-react-19/package.json @@ -12,7 +12,7 @@ "dependencies": { "@astrojs/check": "^0.9.4", "@astrojs/db": "workspace:*", - "@astrojs/node": "^9.0.2", + "@astrojs/node": "workspace:*", "@astrojs/react": "workspace:*", "@types/react": "npm:types-react", "@types/react-dom": "npm:types-react-dom", diff --git a/packages/astro/e2e/fixtures/i18n/package.json b/packages/astro/e2e/fixtures/i18n/package.json index 010ea3864e..775984e48d 100644 --- a/packages/astro/e2e/fixtures/i18n/package.json +++ b/packages/astro/e2e/fixtures/i18n/package.json @@ -4,6 +4,6 @@ "private": true, "dependencies": { "astro": "workspace:*", - "@astrojs/node": "^9.0.2" + "@astrojs/node": "workspace:*" } } diff --git a/packages/astro/e2e/fixtures/server-islands-key/package.json b/packages/astro/e2e/fixtures/server-islands-key/package.json index 34708f54ad..b0ae17501d 100644 --- a/packages/astro/e2e/fixtures/server-islands-key/package.json +++ b/packages/astro/e2e/fixtures/server-islands-key/package.json @@ -7,6 +7,6 @@ }, "dependencies": { "astro": "workspace:*", - "@astrojs/node": "^9.0.2" + "@astrojs/node": "workspace:*" } } diff --git a/packages/astro/e2e/fixtures/server-islands/package.json b/packages/astro/e2e/fixtures/server-islands/package.json index e4b5047f7b..9958ee2878 100644 --- a/packages/astro/e2e/fixtures/server-islands/package.json +++ b/packages/astro/e2e/fixtures/server-islands/package.json @@ -9,7 +9,7 @@ "@astrojs/react": "workspace:*", "astro": "workspace:*", "@astrojs/mdx": "workspace:*", - "@astrojs/node": "^9.0.2", + "@astrojs/node": "workspace:*", "react": "^18.3.1", "react-dom": "^18.3.1" } diff --git a/packages/astro/e2e/fixtures/view-transitions/package.json b/packages/astro/e2e/fixtures/view-transitions/package.json index 41eef0e5e3..480e4a29c9 100644 --- a/packages/astro/e2e/fixtures/view-transitions/package.json +++ b/packages/astro/e2e/fixtures/view-transitions/package.json @@ -3,7 +3,7 @@ "version": "0.0.0", "private": true, "dependencies": { - "@astrojs/node": "^9.0.2", + "@astrojs/node": "workspace:*", "@astrojs/react": "workspace:*", "@astrojs/solid-js": "workspace:*", "@astrojs/svelte": "workspace:*", diff --git a/packages/astro/e2e/fixtures/view-transitions/src/pages/form-one.astro b/packages/astro/e2e/fixtures/view-transitions/src/pages/form-one.astro index ca5e4cb825..21ac979ff2 100644 --- a/packages/astro/e2e/fixtures/view-transitions/src/pages/form-one.astro +++ b/packages/astro/e2e/fixtures/view-transitions/src/pages/form-one.astro @@ -12,5 +12,6 @@ export const prerender = false; {postShowThrow ? : ''} + diff --git a/packages/astro/package.json b/packages/astro/package.json index fceb1e0ee8..4c027b648e 100644 --- a/packages/astro/package.json +++ b/packages/astro/package.json @@ -1,6 +1,6 @@ { "name": "astro", - "version": "5.3.0", + "version": "5.3.1", "description": "Astro is a modern site builder with web best practices, performance, and DX front-of-mind.", "type": "module", "author": "withastro", @@ -144,7 +144,6 @@ "es-module-lexer": "^1.6.0", "esbuild": "^0.24.2", "estree-walker": "^3.0.3", - "fast-glob": "^3.3.3", "flattie": "^1.1.1", "github-slugger": "^2.0.0", "html-escaper": "3.0.3", @@ -153,17 +152,18 @@ "kleur": "^4.1.5", "magic-string": "^0.30.17", "magicast": "^0.3.5", - "micromatch": "^4.0.8", "mrmime": "^2.0.0", "neotraverse": "^0.6.18", "p-limit": "^6.2.0", "p-queue": "^8.1.0", + "picomatch": "^4.0.2", "preferred-pm": "^4.1.1", "prompts": "^2.4.2", "rehype": "^13.0.2", "semver": "^7.7.1", "shiki": "^1.29.2", "tinyexec": "^0.3.2", + "tinyglobby": "^0.2.12", "tsconfck": "^3.1.4", "ultrahtml": "^1.5.3", "unifont": "^0.1.7", @@ -196,7 +196,7 @@ "@types/html-escaper": "3.0.4", "@types/http-cache-semantics": "^4.0.4", "@types/js-yaml": "^4.0.9", - "@types/micromatch": "^4.0.9", + "@types/picomatch": "^3.0.2", "@types/prompts": "^2.4.9", "@types/semver": "^7.5.8", "@types/yargs-parser": "^21.0.3", diff --git a/packages/astro/src/assets/endpoint/generic.ts b/packages/astro/src/assets/endpoint/generic.ts index f8924134b2..d71d069870 100644 --- a/packages/astro/src/assets/endpoint/generic.ts +++ b/packages/astro/src/assets/endpoint/generic.ts @@ -1,11 +1,11 @@ // @ts-expect-error import { imageConfig } from 'astro:assets'; import { isRemotePath } from '@astrojs/internal-helpers/path'; +import { isRemoteAllowed } from '@astrojs/internal-helpers/remote'; import * as mime from 'mrmime'; import type { APIRoute } from '../../types/public/common.js'; import { getConfiguredImageService } from '../internal.js'; import { etag } from '../utils/etag.js'; -import { isRemoteAllowed } from '../utils/remotePattern.js'; async function loadRemoteImage(src: URL, headers: Headers) { try { diff --git a/packages/astro/src/assets/endpoint/node.ts b/packages/astro/src/assets/endpoint/node.ts index 4b18deb382..991d7171f3 100644 --- a/packages/astro/src/assets/endpoint/node.ts +++ b/packages/astro/src/assets/endpoint/node.ts @@ -6,11 +6,11 @@ import { fileURLToPath, pathToFileURL } from 'node:url'; // @ts-expect-error import { assetsDir, imageConfig, outDir } from 'astro:assets'; import { isRemotePath, removeQueryString } from '@astrojs/internal-helpers/path'; +import { isRemoteAllowed } from '@astrojs/internal-helpers/remote'; import * as mime from 'mrmime'; import type { APIRoute } from '../../types/public/common.js'; import { getConfiguredImageService } from '../internal.js'; import { etag } from '../utils/etag.js'; -import { isRemoteAllowed } from '../utils/remotePattern.js'; function replaceFileSystemReferences(src: string) { return os.platform().includes('win32') ? src.replace(/^\/@fs\//, '') : src.replace(/^\/@fs/, ''); diff --git a/packages/astro/src/assets/internal.ts b/packages/astro/src/assets/internal.ts index d9c2db5a05..334fb38daf 100644 --- a/packages/astro/src/assets/internal.ts +++ b/packages/astro/src/assets/internal.ts @@ -16,6 +16,7 @@ import { type UnresolvedImageTransform, isImageMetadata, } from './types.js'; +import { addCSSVarsToStyle, cssFitValues } from './utils/imageAttributes.js'; import { isESMImportedImage, isRemoteImage, resolveSrc } from './utils/imageKind.js'; import { inferRemoteSize } from './utils/remoteProbe.js'; @@ -151,6 +152,19 @@ export async function getImage( } delete resolvedOptions.priority; delete resolvedOptions.densities; + + if (layout !== 'none') { + resolvedOptions.style = addCSSVarsToStyle( + { + w: String(resolvedOptions.width), + h: String(resolvedOptions.height), + fit: cssFitValues.includes(resolvedOptions.fit ?? '') && resolvedOptions.fit, + pos: resolvedOptions.position, + }, + resolvedOptions.style, + ); + resolvedOptions['data-astro-image'] = layout; + } } const validatedOptions = service.validateOptions diff --git a/packages/astro/src/assets/services/service.ts b/packages/astro/src/assets/services/service.ts index ee3bcb587f..4bb643a9cd 100644 --- a/packages/astro/src/assets/services/service.ts +++ b/packages/astro/src/assets/services/service.ts @@ -1,3 +1,4 @@ +import { isRemoteAllowed } from '@astrojs/internal-helpers/remote'; import { AstroError, AstroErrorData } from '../../core/errors/index.js'; import { isRemotePath, joinPaths } from '../../core/path.js'; import type { AstroConfig } from '../../types/public/config.js'; @@ -9,7 +10,6 @@ import type { UnresolvedSrcSetValue, } from '../types.js'; import { isESMImportedImage, isRemoteImage } from '../utils/imageKind.js'; -import { isRemoteAllowed } from '../utils/remotePattern.js'; export type ImageService = LocalImageService | ExternalImageService; diff --git a/packages/astro/src/assets/utils/imageAttributes.ts b/packages/astro/src/assets/utils/imageAttributes.ts index aa67b528f2..e7d1b69493 100644 --- a/packages/astro/src/assets/utils/imageAttributes.ts +++ b/packages/astro/src/assets/utils/imageAttributes.ts @@ -1,5 +1,6 @@ import { toStyleString } from '../../runtime/server/render/util.js'; -import type { GetImageResult, ImageLayout, LocalImageProps, RemoteImageProps } from '../types.js'; + +export const cssFitValues = ['fill', 'contain', 'cover', 'scale-down']; export function addCSSVarsToStyle( vars: Record, @@ -17,32 +18,3 @@ export function addCSSVarsToStyle( return `${cssVars} ${style}`; } - -const cssFitValues = ['fill', 'contain', 'cover', 'scale-down']; - -export function applyResponsiveAttributes< - T extends LocalImageProps | RemoteImageProps, ->({ - layout, - image, - props, - additionalAttributes, -}: { - layout: Exclude; - image: GetImageResult; - additionalAttributes: Record; - props: T; -}) { - const attributes = { ...additionalAttributes, ...image.attributes }; - attributes.style = addCSSVarsToStyle( - { - w: image.attributes.width ?? props.width ?? image.options.width, - h: image.attributes.height ?? props.height ?? image.options.height, - fit: cssFitValues.includes(props.fit ?? '') && props.fit, - pos: props.position, - }, - attributes.style, - ); - attributes['data-astro-image'] = layout; - return attributes; -} diff --git a/packages/astro/src/assets/utils/index.ts b/packages/astro/src/assets/utils/index.ts index 3fae182000..d937048b5f 100644 --- a/packages/astro/src/assets/utils/index.ts +++ b/packages/astro/src/assets/utils/index.ts @@ -2,15 +2,6 @@ export { emitESMImage } from './node/emitAsset.js'; export { isESMImportedImage, isRemoteImage } from './imageKind.js'; export { imageMetadata } from './metadata.js'; export { getOrigQueryParams } from './queryParams.js'; -export { - isRemoteAllowed, - matchHostname, - matchPathname, - matchPattern, - matchPort, - matchProtocol, - type RemotePattern, -} from './remotePattern.js'; export { hashTransform, propsToFilename } from './transformToPath.js'; export { inferRemoteSize } from './remoteProbe.js'; export { makeSvgComponent } from './svg.js'; diff --git a/packages/astro/src/cli/dev/index.ts b/packages/astro/src/cli/dev/index.ts index 4bf888c430..1ff7bbdeae 100644 --- a/packages/astro/src/cli/dev/index.ts +++ b/packages/astro/src/cli/dev/index.ts @@ -20,6 +20,10 @@ export async function dev({ flags }: DevOptions) { ['--host ', `Expose on a network IP address at `], ['--open', 'Automatically open the app in the browser on server start'], ['--force', 'Clear the content layer cache, forcing a full rebuild.'], + [ + '--allowed-hosts', + 'Specify a comma-separated list of allowed hosts or allow any hostname.', + ], ['--help (-h)', 'See all available flags.'], ], }, diff --git a/packages/astro/src/cli/flags.ts b/packages/astro/src/cli/flags.ts index 7466fdda7a..c283ec85e0 100644 --- a/packages/astro/src/cli/flags.ts +++ b/packages/astro/src/cli/flags.ts @@ -25,6 +25,12 @@ export function flagsToAstroInlineConfig(flags: Flags): AstroInlineConfig { typeof flags.host === 'string' || typeof flags.host === 'boolean' ? flags.host : undefined, open: typeof flags.open === 'string' || typeof flags.open === 'boolean' ? flags.open : undefined, + allowedHosts: + typeof flags.allowedHosts === 'string' + ? flags.allowedHosts.split(',') + : typeof flags.allowedHosts === 'boolean' && flags.allowedHosts === true + ? flags.allowedHosts + : [], }, }; } diff --git a/packages/astro/src/cli/preview/index.ts b/packages/astro/src/cli/preview/index.ts index 468332ce3b..b7af0ea1a3 100644 --- a/packages/astro/src/cli/preview/index.ts +++ b/packages/astro/src/cli/preview/index.ts @@ -18,6 +18,10 @@ export async function preview({ flags }: PreviewOptions) { ['--host', `Listen on all addresses, including LAN and public addresses.`], ['--host ', `Expose on a network IP address at `], ['--open', 'Automatically open the app in the browser on server start'], + [ + '--allowed-hosts', + 'Specify a comma-separated list of allowed hosts or allow any hostname.', + ], ['--help (-h)', 'See all available flags.'], ], }, diff --git a/packages/astro/src/config/entrypoint.ts b/packages/astro/src/config/entrypoint.ts index 2ea036fc91..5540efa368 100644 --- a/packages/astro/src/config/entrypoint.ts +++ b/packages/astro/src/config/entrypoint.ts @@ -5,6 +5,8 @@ import type { ImageServiceConfig } from '../types/public/index.js'; export { defineConfig, getViteConfig } from './index.js'; export { envField } from '../env/config.js'; +export { mergeConfig } from '../core/config/merge.js'; +export { validateConfig } from '../core/config/validate.js'; export { fontProviders, defineFontProvider } from '../assets/fonts/providers/index.js'; /** diff --git a/packages/astro/src/container/index.ts b/packages/astro/src/container/index.ts index 3c927ec4d0..0a1b854d10 100644 --- a/packages/astro/src/container/index.ts +++ b/packages/astro/src/container/index.ts @@ -157,6 +157,7 @@ function createManifest( clientDirectives: manifest?.clientDirectives ?? getDefaultClientDirectives(), renderers: renderers ?? manifest?.renderers ?? [], base: manifest?.base ?? ASTRO_CONFIG_DEFAULTS.base, + userAssetsBase: manifest?.userAssetsBase ?? '', componentMetadata: manifest?.componentMetadata ?? new Map(), inlinedScripts: manifest?.inlinedScripts ?? new Map(), i18n: manifest?.i18n, @@ -234,6 +235,7 @@ type AstroContainerManifest = Pick< | 'renderers' | 'assetsPrefix' | 'base' + | 'userAssetsBase' | 'routes' | 'assets' | 'entryModules' diff --git a/packages/astro/src/content/loaders/glob.ts b/packages/astro/src/content/loaders/glob.ts index 7299c7ca30..9727ccc08e 100644 --- a/packages/astro/src/content/loaders/glob.ts +++ b/packages/astro/src/content/loaders/glob.ts @@ -1,10 +1,10 @@ import { promises as fs, existsSync } from 'node:fs'; import { relative } from 'node:path'; import { fileURLToPath, pathToFileURL } from 'node:url'; -import fastGlob from 'fast-glob'; import { bold, green } from 'kleur/colors'; -import micromatch from 'micromatch'; import pLimit from 'p-limit'; +import picomatch from 'picomatch'; +import { glob as tinyglobby } from 'tinyglobby'; import type { ContentEntryRenderFunction, ContentEntryType } from '../../types/public/content.js'; import type { RenderedContent } from '../data-store.js'; import { getContentEntryIdAndSlug, posixRelative } from '../utils.js'; @@ -236,8 +236,9 @@ export function glob(globOptions: GlobOptions): Loader { logger.warn(`The base directory "${fileURLToPath(baseDir)}" does not exist.`); } - const files = await fastGlob(globOptions.pattern, { + const files = await tinyglobby(globOptions.pattern, { cwd: fileURLToPath(baseDir), + expandDirectories: false, }); if (exists && files.length === 0) { @@ -321,7 +322,7 @@ export function glob(globOptions: GlobOptions): Loader { watcher.add(filePath); const matchesGlob = (entry: string) => - !entry.startsWith('../') && micromatch.isMatch(entry, globOptions.pattern); + !entry.startsWith('../') && picomatch.isMatch(entry, globOptions.pattern); const basePath = fileURLToPath(baseDir); diff --git a/packages/astro/src/content/runtime.ts b/packages/astro/src/content/runtime.ts index 019a4c8b12..52aaec642a 100644 --- a/packages/astro/src/content/runtime.ts +++ b/packages/astro/src/content/runtime.ts @@ -414,13 +414,23 @@ async function updateImageReferencesInBody(html: string, fileName: string) { for (const [_full, imagePath] of html.matchAll(CONTENT_LAYER_IMAGE_REGEX)) { try { const decodedImagePath = JSON.parse(imagePath.replaceAll('"', '"')); - const id = imageSrcToImportId(decodedImagePath.src, fileName); - const imported = imageAssetMap.get(id); - if (!id || imageObjects.has(id) || !imported) { - continue; + let image: GetImageResult; + if (URL.canParse(decodedImagePath.src)) { + // Remote image, pass through without resolving import + // We know we should resolve this remote image because either: + // 1. It was collected with the remark-collect-images plugin, which respects the astro image configuration, + // 2. OR it was manually injected by another plugin, and we should respect that. + image = await getImage(decodedImagePath); + } else { + const id = imageSrcToImportId(decodedImagePath.src, fileName); + + const imported = imageAssetMap.get(id); + if (!id || imageObjects.has(id) || !imported) { + continue; + } + image = await getImage({ ...decodedImagePath, src: imported }); } - const image: GetImageResult = await getImage({ ...decodedImagePath, src: imported }); imageObjects.set(imagePath, image); } catch { throw new Error(`Failed to parse image reference: ${imagePath}`); diff --git a/packages/astro/src/content/types-generator.ts b/packages/astro/src/content/types-generator.ts index 92a83367cf..c6a362a24c 100644 --- a/packages/astro/src/content/types-generator.ts +++ b/packages/astro/src/content/types-generator.ts @@ -1,8 +1,8 @@ import type fsMod from 'node:fs'; import * as path from 'node:path'; import { fileURLToPath, pathToFileURL } from 'node:url'; -import glob from 'fast-glob'; import { bold, cyan } from 'kleur/colors'; +import { glob } from 'tinyglobby'; import { type ViteDevServer, normalizePath } from 'vite'; import { type ZodSchema, z } from 'zod'; import { zodToJsonSchema } from 'zod-to-json-schema'; @@ -94,21 +94,16 @@ export async function createContentTypesGenerator({ } const globResult = await glob('**', { cwd: fileURLToPath(contentPaths.contentDir), - fs: { - readdir: fs.readdir.bind(fs), - readdirSync: fs.readdirSync.bind(fs), - }, - onlyFiles: false, - objectMode: true, + absolute: true, }); - for (const entry of globResult) { - const fullPath = path.join(fileURLToPath(contentPaths.contentDir), entry.path); + for (const fullPath of globResult) { const entryURL = pathToFileURL(fullPath); if (entryURL.href.startsWith(contentPaths.config.url.href)) continue; - if (entry.dirent.isFile()) { + const stat = fs.statSync(fullPath); + if (stat.isFile()) { events.push({ name: 'add', entry: entryURL }); - } else if (entry.dirent.isDirectory()) { + } else if (stat.isDirectory()) { events.push({ name: 'addDir', entry: entryURL }); } } diff --git a/packages/astro/src/content/vite-plugin-content-virtual-mod.ts b/packages/astro/src/content/vite-plugin-content-virtual-mod.ts index fcb6c4371e..7a9295ba5d 100644 --- a/packages/astro/src/content/vite-plugin-content-virtual-mod.ts +++ b/packages/astro/src/content/vite-plugin-content-virtual-mod.ts @@ -2,8 +2,8 @@ import nodeFs from 'node:fs'; import { extname } from 'node:path'; import { fileURLToPath, pathToFileURL } from 'node:url'; import { dataToEsm } from '@rollup/pluginutils'; -import glob from 'fast-glob'; import pLimit from 'p-limit'; +import { glob } from 'tinyglobby'; import type { Plugin, ViteDevServer } from 'vite'; import { AstroError, AstroErrorData } from '../core/errors/index.js'; import { rootRelativePath } from '../core/viteUtils.js'; @@ -280,7 +280,7 @@ export async function generateLookupMap({ { absolute: true, cwd: fileURLToPath(root), - fs, + expandDirectories: false, }, ); diff --git a/packages/astro/src/core/app/index.ts b/packages/astro/src/core/app/index.ts index 543d82d0fd..f76408078a 100644 --- a/packages/astro/src/core/app/index.ts +++ b/packages/astro/src/core/app/index.ts @@ -177,7 +177,7 @@ export class App { if (!pathname) { pathname = prependForwardSlash(this.removeBase(url.pathname)); } - let routeData = matchRoute(pathname, this.#manifestData); + let routeData = matchRoute(decodeURI(pathname), this.#manifestData); // missing routes fall-through, pre rendered are handled by static layer if (!routeData || routeData.prerender) return undefined; diff --git a/packages/astro/src/core/app/types.ts b/packages/astro/src/core/app/types.ts index a052307033..09e6fe4365 100644 --- a/packages/astro/src/core/app/types.ts +++ b/packages/astro/src/core/app/types.ts @@ -48,6 +48,13 @@ export type SSRManifest = { routes: RouteInfo[]; site?: string; base: string; + /** + * The base of the assets generated **by the user**. For example, scripts created by the user falls under this category. + * + * The value of this field comes from `vite.base`. We aren't usually this tight to vite in our code base, so probably + * this should be refactored somehow. + */ + userAssetsBase: string | undefined; trailingSlash: AstroConfig['trailingSlash']; buildFormat: NonNullable['format']; compressHTML: boolean; diff --git a/packages/astro/src/core/build/generate.ts b/packages/astro/src/core/build/generate.ts index fefeeafe20..fe840c9473 100644 --- a/packages/astro/src/core/build/generate.ts +++ b/packages/astro/src/core/build/generate.ts @@ -360,7 +360,7 @@ async function getPathsForRoute( // NOTE: The same URL may match multiple routes in the manifest. // Routing priority needs to be verified here for any duplicate // paths to ensure routing priority rules are enforced in the final build. - const matchedRoute = matchRoute(staticPath, options.routesList); + const matchedRoute = matchRoute(decodeURI(staticPath), options.routesList); return matchedRoute === route; }); @@ -630,6 +630,7 @@ function createBuildManifest( compressHTML: settings.config.compressHTML, renderers, base: settings.config.base, + userAssetsBase: settings.config?.vite?.base, assetsPrefix: settings.config.build.assetsPrefix, site: settings.config.site, componentMetadata: internals.componentMetadata, diff --git a/packages/astro/src/core/build/index.ts b/packages/astro/src/core/build/index.ts index c3d91196ac..61da8a7823 100644 --- a/packages/astro/src/core/build/index.ts +++ b/packages/astro/src/core/build/index.ts @@ -45,7 +45,9 @@ export interface BuildOptions { * Teardown the compiler WASM instance after build. This can improve performance when * building once, but may cause a performance hit if building multiple times in a row. * - * @internal only used for testing + * When building multiple projects in the same execution (e.g. during tests), disabling + * this option can greatly improve performance at the cost of some extra memory usage. + * * @default true */ teardownCompiler?: boolean; diff --git a/packages/astro/src/core/build/plugins/plugin-manifest.ts b/packages/astro/src/core/build/plugins/plugin-manifest.ts index f051b12877..5c3fa6f4f9 100644 --- a/packages/astro/src/core/build/plugins/plugin-manifest.ts +++ b/packages/astro/src/core/build/plugins/plugin-manifest.ts @@ -1,6 +1,6 @@ import { fileURLToPath } from 'node:url'; -import glob from 'fast-glob'; import type { OutputChunk } from 'rollup'; +import { glob } from 'tinyglobby'; import type { Plugin as VitePlugin } from 'vite'; import { getAssetsPrefix } from '../../../assets/utils/getAssetsPrefix.js'; import { normalizeTheLocale } from '../../../i18n/index.js'; @@ -287,6 +287,7 @@ function buildManifest( routes, site: settings.config.site, base: settings.config.base, + userAssetsBase: settings.config?.vite?.base, trailingSlash: settings.config.trailingSlash, compressHTML: settings.config.compressHTML, assetsPrefix: settings.config.build.assetsPrefix, diff --git a/packages/astro/src/core/build/static-build.ts b/packages/astro/src/core/build/static-build.ts index 0353d03237..955acf7d8e 100644 --- a/packages/astro/src/core/build/static-build.ts +++ b/packages/astro/src/core/build/static-build.ts @@ -2,8 +2,8 @@ import fs from 'node:fs'; import path from 'node:path'; import { fileURLToPath, pathToFileURL } from 'node:url'; import { teardown } from '@astrojs/compiler'; -import glob from 'fast-glob'; import { bgGreen, black, green } from 'kleur/colors'; +import { glob } from 'tinyglobby'; import * as vite from 'vite'; import { type BuildInternals, createBuildInternals } from '../../core/build/internal.js'; import { emptyDir, removeEmptyDirs } from '../../core/fs/index.js'; @@ -247,8 +247,8 @@ async function clientBuild( // Nothing to do if there is no client-side JS. if (!input.size) { // If SSR, copy public over - if (ssr) { - await copyFiles(settings.config.publicDir, out, true); + if (ssr && fs.existsSync(settings.config.publicDir)) { + await fs.promises.cp(settings.config.publicDir, out, { recursive: true, force: true }); } return null; @@ -384,31 +384,12 @@ async function cleanServerOutput( .map((fileName) => fs.promises.rm(new URL(fileName, out))), ); // Copy assets before cleaning directory if outside root - await copyFiles(out, opts.settings.config.outDir, true); + await fs.promises.cp(out, opts.settings.config.outDir, { recursive: true, force: true }); await fs.promises.rm(out, { recursive: true }); return; } } -export async function copyFiles(fromFolder: URL, toFolder: URL, includeDotfiles = false) { - const files = await glob('**/*', { - cwd: fileURLToPath(fromFolder), - dot: includeDotfiles, - }); - if (files.length === 0) return; - return await Promise.all( - files.map(async function copyFile(filename) { - const from = new URL(filename, fromFolder); - const to = new URL(filename, toFolder); - const lastFolder = new URL('./', to); - return fs.promises.mkdir(lastFolder, { recursive: true }).then(async function fsCopyFile() { - const p = await fs.promises.copyFile(from, to, fs.constants.COPYFILE_FICLONE); - return p; - }); - }), - ); -} - async function ssrMoveAssets(opts: StaticBuildOptions) { opts.logger.info('build', 'Rearranging server assets...'); const serverRoot = diff --git a/packages/astro/src/core/config/merge.ts b/packages/astro/src/core/config/merge.ts index c897c1441a..3699d968b2 100644 --- a/packages/astro/src/core/config/merge.ts +++ b/packages/astro/src/core/config/merge.ts @@ -1,4 +1,6 @@ import { mergeConfig as mergeViteConfig } from 'vite'; +import type { DeepPartial } from '../../type-utils.js'; +import type { AstroConfig, AstroInlineConfig } from '../../types/public/index.js'; import { arraify, isObject, isURL } from '../util.js'; function mergeConfigRecursively( @@ -64,10 +66,9 @@ function mergeConfigRecursively( return merged; } -export function mergeConfig( - defaults: Record, - overrides: Record, - isRoot = true, -): Record { - return mergeConfigRecursively(defaults, overrides, isRoot ? '' : '.'); +export function mergeConfig( + defaults: C, + overrides: DeepPartial, +): C { + return mergeConfigRecursively(defaults, overrides, '') as C; } diff --git a/packages/astro/src/core/config/schema.ts b/packages/astro/src/core/config/schema.ts index 14f5f05997..dca82436f5 100644 --- a/packages/astro/src/core/config/schema.ts +++ b/packages/astro/src/core/config/schema.ts @@ -81,6 +81,7 @@ export const ASTRO_CONFIG_DEFAULTS = { host: false, port: 4321, open: false, + allowedHosts: [], }, integrations: [], markdown: markdownConfigDefaults, @@ -218,6 +219,10 @@ export const AstroConfigSchema = z.object({ .default(ASTRO_CONFIG_DEFAULTS.server.host), port: z.number().optional().default(ASTRO_CONFIG_DEFAULTS.server.port), headers: z.custom().optional(), + allowedHosts: z + .union([z.array(z.string()), z.literal(true)]) + .optional() + .default(ASTRO_CONFIG_DEFAULTS.server.allowedHosts), }) .default({}), ), @@ -801,6 +806,10 @@ export function createRelativeSchema(cmd: string, fileProtocolRoot: string) { port: z.number().optional().default(ASTRO_CONFIG_DEFAULTS.server.port), headers: z.custom().optional(), streaming: z.boolean().optional().default(true), + allowedHosts: z + .union([z.array(z.string()), z.literal(true)]) + .optional() + .default(ASTRO_CONFIG_DEFAULTS.server.allowedHosts), }) .optional() .default({}), diff --git a/packages/astro/src/core/create-vite.ts b/packages/astro/src/core/create-vite.ts index dc1eb177d5..33beb8dd68 100644 --- a/packages/astro/src/core/create-vite.ts +++ b/packages/astro/src/core/create-vite.ts @@ -1,6 +1,6 @@ import nodeFs from 'node:fs'; import { fileURLToPath } from 'node:url'; -import glob from 'fast-glob'; +import { convertPathToPattern } from 'tinyglobby'; import * as vite from 'vite'; import { crawlFrameworkPkgs } from 'vitefu'; import { vitePluginActions, vitePluginUserActions } from '../actions/plugins.js'; @@ -124,7 +124,7 @@ export async function createVite( }, }); - const srcDirPattern = glob.convertPathToPattern(fileURLToPath(settings.config.srcDir)); + const srcDirPattern = convertPathToPattern(fileURLToPath(settings.config.srcDir)); const envLoader = createEnvLoader(mode, settings.config); // Start with the Vite configuration that Astro core needs diff --git a/packages/astro/src/core/dev/container.ts b/packages/astro/src/core/dev/container.ts index d1570f4920..c984fae7d2 100644 --- a/packages/astro/src/core/dev/container.ts +++ b/packages/astro/src/core/dev/container.ts @@ -56,7 +56,7 @@ export async function createContainer({ const { base, - server: { host, headers, open: serverOpen }, + server: { host, headers, open: serverOpen, allowedHosts }, } = settings.config; // serverOpen = true, isRestart = false @@ -92,7 +92,7 @@ export async function createContainer({ const mode = inlineConfig?.mode ?? 'development'; const viteConfig = await createVite( { - server: { host, headers, open }, + server: { host, headers, open, allowedHosts }, optimizeDeps: { include: rendererClientEntries, }, diff --git a/packages/astro/src/core/index.ts b/packages/astro/src/core/index.ts index 14a8c2f99a..91cec209d6 100644 --- a/packages/astro/src/core/index.ts +++ b/packages/astro/src/core/index.ts @@ -1,21 +1,12 @@ // This is the main entrypoint when importing the `astro` package. import type { AstroInlineConfig } from '../types/public/config.js'; -import { default as _build } from './build/index.js'; import { default as _sync } from './sync/index.js'; +export { default as build } from './build/index.js'; export { default as dev } from './dev/index.js'; export { default as preview } from './preview/index.js'; -/** - * Builds your site for deployment. By default, this will generate static files and place them in a dist/ directory. - * If SSR is enabled, this will generate the necessary server files to serve your site. - * - * @experimental The JavaScript API is experimental - */ -// Wrap `_build` to prevent exposing the second internal options parameter -export const build = (inlineConfig: AstroInlineConfig) => _build(inlineConfig); - /** * Generates TypeScript types for all Astro modules. This sets up a `src/env.d.ts` file for type inferencing, * and defines the `astro:content` module for the Content Collections API. diff --git a/packages/astro/src/core/preview/static-preview-server.ts b/packages/astro/src/core/preview/static-preview-server.ts index 855506ef91..814566161e 100644 --- a/packages/astro/src/core/preview/static-preview-server.ts +++ b/packages/astro/src/core/preview/static-preview-server.ts @@ -36,6 +36,7 @@ export default async function createStaticPreviewServer( port: settings.config.server.port, headers: settings.config.server.headers, open: settings.config.server.open, + allowedHosts: settings.config.server.allowedHosts, }, plugins: [vitePluginAstroPreview(settings)], }); diff --git a/packages/astro/src/core/render-context.ts b/packages/astro/src/core/render-context.ts index 2509c82abe..15ccba4962 100644 --- a/packages/astro/src/core/render-context.ts +++ b/packages/astro/src/core/render-context.ts @@ -394,6 +394,7 @@ export class RenderContext { // calling the render() function will populate the object with scripts, styles, etc. const result: SSRResult = { base: manifest.base, + userAssetsBase: manifest.userAssetsBase, cancelled: false, clientDirectives, inlinedScripts, diff --git a/packages/astro/src/core/routing/match.ts b/packages/astro/src/core/routing/match.ts index 45ad8f595b..caa3ae7431 100644 --- a/packages/astro/src/core/routing/match.ts +++ b/packages/astro/src/core/routing/match.ts @@ -5,18 +5,17 @@ import { SERVER_ISLAND_BASE_PREFIX, SERVER_ISLAND_COMPONENT } from '../server-is /** Find matching route from pathname */ export function matchRoute(pathname: string, manifest: RoutesList): RouteData | undefined { - const decodedPathname = decodeURI(pathname); return manifest.routes.find((route) => { return ( - route.pattern.test(decodedPathname) || - route.fallbackRoutes.some((fallbackRoute) => fallbackRoute.pattern.test(decodedPathname)) + route.pattern.test(pathname) || + route.fallbackRoutes.some((fallbackRoute) => fallbackRoute.pattern.test(pathname)) ); }); } /** Finds all matching routes from pathname */ export function matchAllRoutes(pathname: string, manifest: RoutesList): RouteData[] { - return manifest.routes.filter((route) => route.pattern.test(decodeURI(pathname))); + return manifest.routes.filter((route) => route.pattern.test(pathname)); } const ROUTE404_RE = /^\/404\/?$/; diff --git a/packages/astro/src/core/routing/rewrite.ts b/packages/astro/src/core/routing/rewrite.ts index 78f70e8473..df6ae48450 100644 --- a/packages/astro/src/core/routing/rewrite.ts +++ b/packages/astro/src/core/routing/rewrite.ts @@ -5,7 +5,12 @@ import { shouldAppendForwardSlash } from '../build/util.js'; import { originPathnameSymbol } from '../constants.js'; import { AstroError, AstroErrorData } from '../errors/index.js'; import type { Logger } from '../logger/core.js'; -import { appendForwardSlash, removeTrailingForwardSlash } from '../path.js'; +import { + appendForwardSlash, + joinPaths, + prependForwardSlash, + removeTrailingForwardSlash, +} from '../path.js'; import { createRequest } from '../request.js'; import { DEFAULT_404_ROUTE } from './astro-designed-error-pages.js'; @@ -45,14 +50,31 @@ export function findRouteToRewrite({ } else { newUrl = new URL(payload, new URL(request.url).origin); } + let pathname = newUrl.pathname; + + const shouldAppendSlash = shouldAppendForwardSlash(trailingSlash, buildFormat); + if (base !== '/' && newUrl.pathname.startsWith(base)) { - pathname = shouldAppendForwardSlash(trailingSlash, buildFormat) + pathname = shouldAppendSlash ? appendForwardSlash(newUrl.pathname) : removeTrailingForwardSlash(newUrl.pathname); pathname = pathname.slice(base.length); } + if (!pathname.startsWith('/') && shouldAppendSlash && newUrl.pathname.endsWith('/')) { + // when base is in the rewrite call and trailingSlash is 'always' this is needed or it will 404. + pathname = prependForwardSlash(pathname); + } + + if (pathname === '/' && base !== '/' && !shouldAppendSlash) { + // when rewriting to index and trailingSlash is 'never' this is needed or it will 404 + // in this case the pattern will look for '/^$/' so '/' will never match + pathname = ''; + } + + newUrl.pathname = joinPaths(...[base, pathname].filter(Boolean)); + const decodedPathname = decodeURI(pathname); let foundRoute; for (const route of routes) { diff --git a/packages/astro/src/integrations/hooks.ts b/packages/astro/src/integrations/hooks.ts index 1963f62edb..efb568b3f1 100644 --- a/packages/astro/src/integrations/hooks.ts +++ b/packages/astro/src/integrations/hooks.ts @@ -3,6 +3,7 @@ import type { AddressInfo } from 'node:net'; import { fileURLToPath } from 'node:url'; import { bold } from 'kleur/colors'; import type { InlineConfig, ViteDevServer } from 'vite'; +import { mergeConfig as mergeViteConfig } from 'vite'; import astroIntegrationActionsRouteHandler from '../actions/integration.js'; import { isActionsFilePresent } from '../actions/utils.js'; import { CONTENT_LAYER_TYPE } from '../content/consts.js'; @@ -197,7 +198,7 @@ export async function runHookConfigSetup({ updatedSettings.scripts.push({ stage, content }); }, updateConfig: (newConfig) => { - updatedConfig = mergeConfig(updatedConfig, newConfig) as AstroConfig; + updatedConfig = mergeConfig(updatedConfig, newConfig); return { ...updatedConfig }; }, injectRoute: (injectRoute) => { @@ -511,7 +512,7 @@ export async function runHookBuildSetup({ pages, target, updateConfig: (newConfig) => { - updatedConfig = mergeConfig(updatedConfig, newConfig); + updatedConfig = mergeViteConfig(updatedConfig, newConfig); return { ...updatedConfig }; }, logger: getLogger(integration, logger), diff --git a/packages/astro/src/runtime/server/render/head.ts b/packages/astro/src/runtime/server/render/head.ts index 01f11f21e7..79edc96218 100644 --- a/packages/astro/src/runtime/server/render/head.ts +++ b/packages/astro/src/runtime/server/render/head.ts @@ -27,6 +27,10 @@ export function renderAllHeadContent(result: SSRResult) { const scripts = Array.from(result.scripts) .filter(uniqueElements) .map((script) => { + if (result.userAssetsBase) { + script.props.src = + (result.base === '/' ? '' : result.base) + result.userAssetsBase + script.props.src; + } return renderElement('script', script, false); }); const links = Array.from(result.links) diff --git a/packages/astro/src/runtime/server/render/script.ts b/packages/astro/src/runtime/server/render/script.ts index 6d9283790a..85feee1631 100644 --- a/packages/astro/src/runtime/server/render/script.ts +++ b/packages/astro/src/runtime/server/render/script.ts @@ -20,5 +20,7 @@ export async function renderScript(result: SSRResult, id: string) { } const resolved = await result.resolve(id); - return markHTMLString(``); + return markHTMLString( + ``, + ); } diff --git a/packages/astro/src/transitions/router.ts b/packages/astro/src/transitions/router.ts index 925aab0a6b..adc6bef16a 100644 --- a/packages/astro/src/transitions/router.ts +++ b/packages/astro/src/transitions/router.ts @@ -398,7 +398,9 @@ async function transition( // Note: getNamedItem can return null in real life, even if TypeScript doesn't think so, hence // the ?. init.body = - form?.attributes.getNamedItem('enctype')?.value === 'application/x-www-form-urlencoded' + from !== undefined && + Reflect.get(HTMLFormElement.prototype, 'attributes', form).getNamedItem('enctype') + ?.value === 'application/x-www-form-urlencoded' ? new URLSearchParams(preparationEvent.formData as any) : preparationEvent.formData; } diff --git a/packages/astro/src/types/public/config.ts b/packages/astro/src/types/public/config.ts index e39e72e38d..db1531500a 100644 --- a/packages/astro/src/types/public/config.ts +++ b/packages/astro/src/types/public/config.ts @@ -1,4 +1,5 @@ import type { OutgoingHttpHeaders } from 'node:http'; +import type { RemotePattern } from '@astrojs/internal-helpers/remote'; import type { RehypePlugins, RemarkPlugins, @@ -8,7 +9,6 @@ import type { import type { BuiltinDriverName, BuiltinDriverOptions, Driver, Storage } from 'unstorage'; import type { UserConfig as OriginalViteUserConfig, SSROptions as ViteSSROptions } from 'vite'; import type { ImageFit, ImageLayout } from '../../assets/types.js'; -import type { RemotePattern } from '../../assets/utils/remotePattern.js'; import type { SvgRenderMode } from '../../assets/utils/svg.js'; import type { AssetsPrefix } from '../../core/app/types.js'; import type { AstroConfigType } from '../../core/config/schema.js'; @@ -72,6 +72,26 @@ export type ServerConfig = { */ port?: number; + /** + * @name server.allowedHosts + * @type {string[] | true} + * @default `[]` + * @version 5.4.0 + * @description + * + * A list of hostnames that Astro is allowed to respond to. When the value is set to `true`, any + * hostname is allowed. + * + * ```js + * { + * server: { + * allowedHosts: ['staging.example.com', 'qa.example.com'] + * } + * } + * ``` + */ + allowedHosts?: string[] | true; + /** * @name server.headers * @typeraw {OutgoingHttpHeaders} diff --git a/packages/astro/src/types/public/index.ts b/packages/astro/src/types/public/index.ts index fae134bbeb..09469ae583 100644 --- a/packages/astro/src/types/public/index.ts +++ b/packages/astro/src/types/public/index.ts @@ -14,6 +14,7 @@ export type * from './manifest.js'; export type { AstroIntegrationLogger } from '../../core/logger/core.js'; export type { ToolbarServerHelpers } from '../../runtime/client/dev-toolbar/helpers.js'; +export type { RemotePattern } from '@astrojs/internal-helpers/remote'; export type { MarkdownHeading, RehypePlugins, @@ -35,7 +36,6 @@ export type { ImageTransform, UnresolvedImageTransform, } from '../../assets/types.js'; -export type { RemotePattern } from '../../assets/utils/remotePattern.js'; export type { AssetsPrefix, SSRManifest } from '../../core/app/types.js'; export type { AstroCookieGetOptions, diff --git a/packages/astro/src/types/public/internal.ts b/packages/astro/src/types/public/internal.ts index a17ee76506..a2c1b01d6e 100644 --- a/packages/astro/src/types/public/internal.ts +++ b/packages/astro/src/types/public/internal.ts @@ -214,6 +214,7 @@ export interface SSRResult { */ cancelled: boolean; base: string; + userAssetsBase: string | undefined; styles: Set; scripts: Set; links: Set; diff --git a/packages/astro/src/vite-plugin-astro-server/plugin.ts b/packages/astro/src/vite-plugin-astro-server/plugin.ts index 42146d856a..283c40d45b 100644 --- a/packages/astro/src/vite-plugin-astro-server/plugin.ts +++ b/packages/astro/src/vite-plugin-astro-server/plugin.ts @@ -190,6 +190,7 @@ export function createDevelopmentManifest(settings: AstroSettings): SSRManifest clientDirectives: settings.clientDirectives, renderers: [], base: settings.config.base, + userAssetsBase: settings.config?.vite?.base, assetsPrefix: settings.config.build.assetsPrefix, site: settings.config.site, componentMetadata: new Map(), diff --git a/packages/astro/src/vite-plugin-markdown/content-entry-type.ts b/packages/astro/src/vite-plugin-markdown/content-entry-type.ts index 6f248853f5..a8832ef356 100644 --- a/packages/astro/src/vite-plugin-markdown/content-entry-type.ts +++ b/packages/astro/src/vite-plugin-markdown/content-entry-type.ts @@ -18,7 +18,10 @@ export const markdownContentEntryType: ContentEntryType = { handlePropagation: true, async getRenderFunction(config) { - const processor = await createMarkdownProcessor(config.markdown); + const processor = await createMarkdownProcessor({ + image: config.image, + ...config.markdown, + }); return async function renderToString(entry) { // Process markdown even if it's empty as remark/rehype plugins may add content or frontmatter dynamically const result = await processor.render(entry.body ?? '', { @@ -28,7 +31,10 @@ export const markdownContentEntryType: ContentEntryType = { }); return { html: result.code, - metadata: result.metadata, + metadata: { + ...result.metadata, + imagePaths: result.metadata.localImagePaths.concat(result.metadata.remoteImagePaths), + }, }; }; }, diff --git a/packages/astro/src/vite-plugin-markdown/images.ts b/packages/astro/src/vite-plugin-markdown/images.ts index d0ed625358..b99d1af233 100644 --- a/packages/astro/src/vite-plugin-markdown/images.ts +++ b/packages/astro/src/vite-plugin-markdown/images.ts @@ -1,15 +1,19 @@ export type MarkdownImagePath = { raw: string; safeName: string }; -export function getMarkdownCodeForImages(imagePaths: MarkdownImagePath[], html: string) { +export function getMarkdownCodeForImages( + localImagePaths: MarkdownImagePath[], + remoteImagePaths: string[], + html: string, +) { return ` import { getImage } from "astro:assets"; - ${imagePaths + ${localImagePaths .map((entry) => `import Astro__${entry.safeName} from ${JSON.stringify(entry.raw)};`) .join('\n')} const images = async function(html) { const imageSources = {}; - ${imagePaths + ${localImagePaths .map((entry) => { const rawUrl = JSON.stringify(entry.raw); return `{ @@ -29,6 +33,25 @@ export function getMarkdownCodeForImages(imagePaths: MarkdownImagePath[], html: }`; }) .join('\n')} + ${remoteImagePaths + .map((raw) => { + const rawUrl = JSON.stringify(raw); + return `{ + const regex = new RegExp('__ASTRO_IMAGE_="([^"]*' + ${rawUrl.replace( + /[.*+?^${}()|[\]\\]/g, + '\\\\$&', + )} + '[^"]*)"', 'g'); + let match; + let occurrenceCounter = 0; + while ((match = regex.exec(html)) !== null) { + const matchKey = ${rawUrl} + '_' + occurrenceCounter; + const props = JSON.parse(match[1].replace(/"/g, '"')); + imageSources[matchKey] = await getImage(props); + occurrenceCounter++; + } + }`; + }) + .join('\n')} return imageSources; }; diff --git a/packages/astro/src/vite-plugin-markdown/index.ts b/packages/astro/src/vite-plugin-markdown/index.ts index 8876250f97..9cd080a030 100644 --- a/packages/astro/src/vite-plugin-markdown/index.ts +++ b/packages/astro/src/vite-plugin-markdown/index.ts @@ -60,7 +60,10 @@ export default function markdown({ settings, logger }: AstroPluginOptions): Plug // Lazily initialize the Markdown processor if (!processor) { - processor = createMarkdownProcessor(settings.config.markdown); + processor = createMarkdownProcessor({ + image: settings.config.image, + ...settings.config.markdown, + }); } const renderResult = await (await processor).render(raw.content, { @@ -75,16 +78,21 @@ export default function markdown({ settings, logger }: AstroPluginOptions): Plug } let html = renderResult.code; - const { headings, imagePaths: rawImagePaths, frontmatter } = renderResult.metadata; + const { + headings, + localImagePaths: rawLocalImagePaths, + remoteImagePaths, + frontmatter, + } = renderResult.metadata; // Add default charset for markdown pages const isMarkdownPage = isPage(fileURL, settings); const charset = isMarkdownPage ? '' : ''; // Resolve all the extracted images from the content - const imagePaths: MarkdownImagePath[] = []; - for (const imagePath of rawImagePaths) { - imagePaths.push({ + const localImagePaths: MarkdownImagePath[] = []; + for (const imagePath of rawLocalImagePaths) { + localImagePaths.push({ raw: imagePath, safeName: shorthash(imagePath), }); @@ -108,8 +116,8 @@ export default function markdown({ settings, logger }: AstroPluginOptions): Plug ${ // Only include the code relevant to `astro:assets` if there's images in the file - imagePaths.length > 0 - ? getMarkdownCodeForImages(imagePaths, html) + localImagePaths.length > 0 || remoteImagePaths.length > 0 + ? getMarkdownCodeForImages(localImagePaths, remoteImagePaths, html) : `const html = () => ${JSON.stringify(html)};` } diff --git a/packages/astro/test/astro-dev-headers.test.js b/packages/astro/test/astro-dev-headers.test.js index ec7999c33d..3e490ebbc4 100644 --- a/packages/astro/test/astro-dev-headers.test.js +++ b/packages/astro/test/astro-dev-headers.test.js @@ -1,5 +1,6 @@ import assert from 'node:assert/strict'; import { after, before, describe, it } from 'node:test'; +import { load as cheerioLoad } from 'cheerio'; import { loadFixture } from './test-utils.js'; describe('Astro dev headers', () => { @@ -38,3 +39,36 @@ describe('Astro dev headers', () => { }); }); }); + +describe('Astro dev with vite.base path', () => { + let fixture; + let devServer; + const headers = { + 'x-astro': 'test', + }; + + before(async () => { + fixture = await loadFixture({ + root: './fixtures/astro-dev-headers/', + server: { + headers, + }, + vite: { + base: '/hello', + }, + }); + await fixture.build(); + devServer = await fixture.startDevServer(); + }); + + after(async () => { + await devServer.stop(); + }); + + it('Generated script src get included with vite.base path', async () => { + const result = await fixture.fetch('/hello'); + const html = await result.text(); + const $ = cheerioLoad(html); + assert.match($('script').attr('src'), /^\/hello\/@vite\/client$/); + }); +}); diff --git a/packages/astro/test/fixtures/client-address-node/package.json b/packages/astro/test/fixtures/client-address-node/package.json index 27efc14c03..4b1c6a5ee0 100644 --- a/packages/astro/test/fixtures/client-address-node/package.json +++ b/packages/astro/test/fixtures/client-address-node/package.json @@ -3,7 +3,7 @@ "version": "0.0.0", "private": true, "dependencies": { - "@astrojs/node": "^9.0.2", + "@astrojs/node": "workspace:*", "astro": "workspace:*" } } diff --git a/packages/astro/test/fixtures/custom-assets-name/package.json b/packages/astro/test/fixtures/custom-assets-name/package.json index 8989df3a71..00237fbddf 100644 --- a/packages/astro/test/fixtures/custom-assets-name/package.json +++ b/packages/astro/test/fixtures/custom-assets-name/package.json @@ -4,6 +4,6 @@ "private": true, "dependencies": { "astro": "workspace:*", - "@astrojs/node": "^9.0.2" + "@astrojs/node": "workspace:*" } } diff --git a/packages/astro/test/fixtures/rewrite-trailing-slash-never/src/pages/bar.astro b/packages/astro/test/fixtures/rewrite-trailing-slash-never/src/pages/bar.astro new file mode 100644 index 0000000000..8d1a33842d --- /dev/null +++ b/packages/astro/test/fixtures/rewrite-trailing-slash-never/src/pages/bar.astro @@ -0,0 +1,4 @@ +--- +return Astro.rewrite("/") +--- +

hi

diff --git a/packages/astro/test/fixtures/rewrite-trailing-slash-never/src/pages/index.astro b/packages/astro/test/fixtures/rewrite-trailing-slash-never/src/pages/index.astro index 575bbde364..def1d1c310 100644 --- a/packages/astro/test/fixtures/rewrite-trailing-slash-never/src/pages/index.astro +++ b/packages/astro/test/fixtures/rewrite-trailing-slash-never/src/pages/index.astro @@ -4,5 +4,6 @@

Index

+

{Astro.url.pathname}

diff --git a/packages/astro/test/fixtures/rewrite-with-base/astro.config.mjs b/packages/astro/test/fixtures/rewrite-with-base/astro.config.mjs new file mode 100644 index 0000000000..273f8aa7e0 --- /dev/null +++ b/packages/astro/test/fixtures/rewrite-with-base/astro.config.mjs @@ -0,0 +1,7 @@ +import {defineConfig} from 'astro/config'; + +// https://astro.build/config +export default defineConfig({ + base: "base", + site: "https://example.com" +}); diff --git a/packages/astro/test/fixtures/rewrite-with-base/package.json b/packages/astro/test/fixtures/rewrite-with-base/package.json new file mode 100644 index 0000000000..f76ed1b86a --- /dev/null +++ b/packages/astro/test/fixtures/rewrite-with-base/package.json @@ -0,0 +1,8 @@ +{ + "name": "@test/rewrite-with-base", + "version": "0.0.0", + "private": true, + "dependencies": { + "astro": "workspace:*" + } +} diff --git a/packages/astro/test/fixtures/rewrite-with-base/src/pages/index.astro b/packages/astro/test/fixtures/rewrite-with-base/src/pages/index.astro new file mode 100644 index 0000000000..fee80ec15a --- /dev/null +++ b/packages/astro/test/fixtures/rewrite-with-base/src/pages/index.astro @@ -0,0 +1,11 @@ + + + + + Index + + +

Index

+

{Astro.url.pathname}

+ + diff --git a/packages/astro/test/fixtures/rewrite-with-base/src/pages/page.astro b/packages/astro/test/fixtures/rewrite-with-base/src/pages/page.astro new file mode 100644 index 0000000000..eb24792b3a --- /dev/null +++ b/packages/astro/test/fixtures/rewrite-with-base/src/pages/page.astro @@ -0,0 +1,11 @@ + + + + + Page + + +

Page

+

{Astro.url.pathname}

+ + diff --git a/packages/astro/test/fixtures/rewrite-with-base/src/pages/rewrite-to-index.astro b/packages/astro/test/fixtures/rewrite-with-base/src/pages/rewrite-to-index.astro new file mode 100644 index 0000000000..cfd2c6b1fb --- /dev/null +++ b/packages/astro/test/fixtures/rewrite-with-base/src/pages/rewrite-to-index.astro @@ -0,0 +1,3 @@ +--- +return Astro.rewrite('/') +--- diff --git a/packages/astro/test/fixtures/rewrite-with-base/src/pages/rewrite-to-subpage-with-slash.astro b/packages/astro/test/fixtures/rewrite-with-base/src/pages/rewrite-to-subpage-with-slash.astro new file mode 100644 index 0000000000..138fe751b4 --- /dev/null +++ b/packages/astro/test/fixtures/rewrite-with-base/src/pages/rewrite-to-subpage-with-slash.astro @@ -0,0 +1,3 @@ +--- +return Astro.rewrite('/page/') +--- diff --git a/packages/astro/test/fixtures/rewrite-with-base/src/pages/rewrite-to-subpage.astro b/packages/astro/test/fixtures/rewrite-with-base/src/pages/rewrite-to-subpage.astro new file mode 100644 index 0000000000..869df73ae4 --- /dev/null +++ b/packages/astro/test/fixtures/rewrite-with-base/src/pages/rewrite-to-subpage.astro @@ -0,0 +1,3 @@ +--- +return Astro.rewrite('/page') +--- diff --git a/packages/astro/test/fixtures/rewrite-with-base/src/pages/rewrite-with-base-to-index-with-slash.astro b/packages/astro/test/fixtures/rewrite-with-base/src/pages/rewrite-with-base-to-index-with-slash.astro new file mode 100644 index 0000000000..aaf2a861ce --- /dev/null +++ b/packages/astro/test/fixtures/rewrite-with-base/src/pages/rewrite-with-base-to-index-with-slash.astro @@ -0,0 +1,3 @@ +--- +return Astro.rewrite('/base/') +--- diff --git a/packages/astro/test/fixtures/rewrite-with-base/src/pages/rewrite-with-base-to-index.astro b/packages/astro/test/fixtures/rewrite-with-base/src/pages/rewrite-with-base-to-index.astro new file mode 100644 index 0000000000..6a2953f521 --- /dev/null +++ b/packages/astro/test/fixtures/rewrite-with-base/src/pages/rewrite-with-base-to-index.astro @@ -0,0 +1,3 @@ +--- +return Astro.rewrite('/base') +--- diff --git a/packages/astro/test/fixtures/rewrite-with-base/src/pages/rewrite-with-base-to-subpage-with-slash.astro b/packages/astro/test/fixtures/rewrite-with-base/src/pages/rewrite-with-base-to-subpage-with-slash.astro new file mode 100644 index 0000000000..df28b421d5 --- /dev/null +++ b/packages/astro/test/fixtures/rewrite-with-base/src/pages/rewrite-with-base-to-subpage-with-slash.astro @@ -0,0 +1,3 @@ +--- +return Astro.rewrite('/base/page/') +--- diff --git a/packages/astro/test/fixtures/rewrite-with-base/src/pages/rewrite-with-base-to-subpage.astro b/packages/astro/test/fixtures/rewrite-with-base/src/pages/rewrite-with-base-to-subpage.astro new file mode 100644 index 0000000000..c4a8638e24 --- /dev/null +++ b/packages/astro/test/fixtures/rewrite-with-base/src/pages/rewrite-with-base-to-subpage.astro @@ -0,0 +1,3 @@ +--- +return Astro.rewrite('/base/page') +--- diff --git a/packages/astro/test/fixtures/ssr-api-route/package.json b/packages/astro/test/fixtures/ssr-api-route/package.json index ed9fecb28e..ab761dd6b1 100644 --- a/packages/astro/test/fixtures/ssr-api-route/package.json +++ b/packages/astro/test/fixtures/ssr-api-route/package.json @@ -3,7 +3,7 @@ "version": "0.0.0", "private": true, "dependencies": { - "@astrojs/node": "^9.0.2", + "@astrojs/node": "workspace:*", "astro": "workspace:*" } } diff --git a/packages/astro/test/fixtures/static-build-ssr/package.json b/packages/astro/test/fixtures/static-build-ssr/package.json index 2e8983f35b..6c8f1e4992 100644 --- a/packages/astro/test/fixtures/static-build-ssr/package.json +++ b/packages/astro/test/fixtures/static-build-ssr/package.json @@ -3,7 +3,7 @@ "version": "0.0.0", "private": true, "dependencies": { - "@astrojs/node": "^9.0.2", + "@astrojs/node": "workspace:*", "@test/static-build-pkg": "workspace:*", "astro": "workspace:*" } diff --git a/packages/astro/test/rewrite.test.js b/packages/astro/test/rewrite.test.js index 7e508593e8..4bcc82b4a0 100644 --- a/packages/astro/test/rewrite.test.js +++ b/packages/astro/test/rewrite.test.js @@ -108,6 +108,16 @@ describe('Dev rewrite, trailing slash -> never, with base', () => { const $ = cheerioLoad(html); assert.equal($('h1').text(), 'Index'); + assert.equal($('p').text(), '/base'); + }); + + it('should rewrite and always inlcude base', async () => { + //rewrite('/') will rewrite to '/base' + const html = await fixture.fetch('/base/bar').then((res) => res.text()); + const $ = cheerioLoad(html); + + assert.equal($('h1').text(), 'Index'); + assert.equal($('p').text(), '/base'); }); }); @@ -189,6 +199,105 @@ describe('Dev rewrite, hybrid/server', () => { }); }); +describe('Dev rewrite URL contains base and has no trailing slash', () => { + /** @type {import('./test-utils').Fixture} */ + let fixture; + let devServer; + + before(async () => { + fixture = await loadFixture({ + root: './fixtures/rewrite-with-base/', + trailingSlash: 'never', + }); + devServer = await fixture.startDevServer(); + }); + + after(async () => { + await devServer.stop(); + }); + + it('should rewrite to homepage & url contains base', async () => { + const html = await fixture.fetch('/base/rewrite-to-index').then((res) => res.text()); + const $ = cheerioLoad(html); + + assert.equal($('h1').text(), 'Index'); + assert.equal($('p').text(), '/base'); + }); + + it('should rewrite to homepage & url contains base when base is in the rewrite call', async () => { + const html = await fixture.fetch('/base/rewrite-with-base-to-index').then((res) => res.text()); + const $ = cheerioLoad(html); + + assert.equal($('h1').text(), 'Index'); + assert.equal($('p').text(), '/base'); + }); + + it('should rewrite to subpage & url contains base', async () => { + const html = await fixture.fetch('/base/rewrite-to-subpage').then((res) => res.text()); + const $ = cheerioLoad(html); + + assert.equal($('h1').text(), 'Page'); + assert.equal($('p').text(), '/base/page'); + }); + + it('should rewrite to page & url contains base when base is in the rewrite call', async () => { + const html = await fixture + .fetch('/base/rewrite-with-base-to-subpage') + .then((res) => res.text()); + const $ = cheerioLoad(html); + + assert.equal($('h1').text(), 'Page'); + assert.equal($('p').text(), '/base/page'); + }); +}); +describe('Dev rewrite URL contains base and has trailing slash', () => { + /** @type {import('./test-utils').Fixture} */ + let fixture; + let devServer; + + before(async () => { + fixture = await loadFixture({ + root: './fixtures/rewrite-with-base/', + trailingSlash: 'always', + }); + devServer = await fixture.startDevServer(); + }); + + after(async () => { + await devServer.stop(); + }); + + it('should rewrite to homepage & url contains base when base is in the rewrite call', async () => { + const html = await fixture + .fetch('/base/rewrite-with-base-to-index-with-slash/') + .then((res) => res.text()); + const $ = cheerioLoad(html); + + assert.equal($('h1').text(), 'Index'); + assert.equal($('p').text(), '/base/'); + }); + + it('should rewrite to subpage & url contains base', async () => { + const html = await fixture + .fetch('/base/rewrite-to-subpage-with-slash/') + .then((res) => res.text()); + const $ = cheerioLoad(html); + + assert.equal($('h1').text(), 'Page'); + assert.equal($('p').text(), '/base/page/'); + }); + + it('should rewrite to page & url contains base when base is in the rewrite call', async () => { + const html = await fixture + .fetch('/base/rewrite-with-base-to-subpage-with-slash/') + .then((res) => res.text()); + const $ = cheerioLoad(html); + + assert.equal($('h1').text(), 'Page'); + assert.equal($('p').text(), '/base/page/'); + }); +}); + describe('Build reroute', () => { /** @type {import('./test-utils').Fixture} */ let fixture; diff --git a/packages/astro/test/test-utils.js b/packages/astro/test/test-utils.js index 5b540a78f5..e0afb4cc03 100644 --- a/packages/astro/test/test-utils.js +++ b/packages/astro/test/test-utils.js @@ -4,7 +4,7 @@ import path from 'node:path'; import { fileURLToPath } from 'node:url'; import { stripVTControlCharacters } from 'node:util'; import { execa } from 'execa'; -import fastGlob from 'fast-glob'; +import { glob } from 'tinyglobby'; import { Agent } from 'undici'; import { check } from '../dist/cli/check/index.js'; import { globalContentLayer } from '../dist/content/content-layer.js'; @@ -252,8 +252,9 @@ export async function loadFixture(inlineConfig) { ), readdir: (fp) => fs.promises.readdir(new URL(fp.replace(/^\//, ''), config.outDir)), glob: (p) => - fastGlob(p, { + glob(p, { cwd: fileURLToPath(config.outDir), + expandDirectories: false, }), clean: async () => { await fs.promises.rm(config.outDir, { diff --git a/packages/astro/test/units/assets/remote-pattern.test.js b/packages/astro/test/units/remote-pattern.test.js similarity index 96% rename from packages/astro/test/units/assets/remote-pattern.test.js rename to packages/astro/test/units/remote-pattern.test.js index 0961ffd052..95879d89b6 100644 --- a/packages/astro/test/units/assets/remote-pattern.test.js +++ b/packages/astro/test/units/remote-pattern.test.js @@ -6,9 +6,9 @@ import { matchPattern, matchPort, matchProtocol, -} from '../../../dist/assets/utils/remotePattern.js'; +} from '@astrojs/internal-helpers/remote'; -describe('astro/src/assets/utils/remotePattern', () => { +describe('remote-pattern', () => { const url1 = new URL('https://docs.astro.build/en/getting-started'); const url2 = new URL('http://preview.docs.astro.build:8080/'); const url3 = new URL('https://astro.build/'); diff --git a/packages/create-astro/CHANGELOG.md b/packages/create-astro/CHANGELOG.md index 9ab723ac5f..825d59aa03 100644 --- a/packages/create-astro/CHANGELOG.md +++ b/packages/create-astro/CHANGELOG.md @@ -1,5 +1,11 @@ # create-astro +## 4.11.1 + +### Patch Changes + +- [#13257](https://github.com/withastro/astro/pull/13257) [`6012e06`](https://github.com/withastro/astro/commit/6012e061cdd07688be73d5d543ad3a055c373475) Thanks [@ADTC](https://github.com/ADTC)! - Modify the template README file to reflect the correct package manager + ## 4.11.0 ### Minor Changes diff --git a/packages/create-astro/package.json b/packages/create-astro/package.json index 16fd3c898f..f39c35e2f3 100644 --- a/packages/create-astro/package.json +++ b/packages/create-astro/package.json @@ -1,6 +1,6 @@ { "name": "create-astro", - "version": "4.11.0", + "version": "4.11.1", "type": "module", "author": "withastro", "license": "MIT", diff --git a/packages/create-astro/src/actions/template.ts b/packages/create-astro/src/actions/template.ts index 512e1f921c..6ac2e5be24 100644 --- a/packages/create-astro/src/actions/template.ts +++ b/packages/create-astro/src/actions/template.ts @@ -103,6 +103,19 @@ export default async function copyTemplate(tmpl: string, ctx: Context) { cwd: ctx.cwd, dir: '.', }); + + // Modify the README file to reflect the correct package manager + if (ctx.packageManager !== 'npm') { + const readmePath = path.resolve(ctx.cwd, 'README.md'); + const readme = fs.readFileSync(readmePath, 'utf8'); + + // `run` is removed since it's optional in other package managers + const updatedReadme = readme + .replace(/\bnpm run\b/g, ctx.packageManager) + .replace(/\bnpm\b/g, ctx.packageManager); + + fs.writeFileSync(readmePath, updatedReadme); + } } catch (err: any) { // Only remove the directory if it's most likely created by us. if (ctx.cwd !== '.' && ctx.cwd !== './' && !ctx.cwd.startsWith('../')) { diff --git a/packages/db/src/runtime/virtual.ts b/packages/db/src/runtime/virtual.ts index 5f17823a85..a44a6ade91 100644 --- a/packages/db/src/runtime/virtual.ts +++ b/packages/db/src/runtime/virtual.ts @@ -68,6 +68,7 @@ export { between, notBetween, like, + ilike, notIlike, not, asc, diff --git a/packages/db/test/fixtures/ticketing-example/package.json b/packages/db/test/fixtures/ticketing-example/package.json index df9e2d437b..74d795d8cf 100644 --- a/packages/db/test/fixtures/ticketing-example/package.json +++ b/packages/db/test/fixtures/ticketing-example/package.json @@ -11,7 +11,7 @@ "dependencies": { "@astrojs/check": "^0.9.4", "@astrojs/db": "workspace:*", - "@astrojs/node": "^9.0.2", + "@astrojs/node": "workspace:*", "@astrojs/react": "workspace:*", "@types/react": "^18.3.18", "@types/react-dom": "^18.3.5", diff --git a/packages/db/virtual.d.ts b/packages/db/virtual.d.ts index beb8266fb4..89fa4d0d50 100644 --- a/packages/db/virtual.d.ts +++ b/packages/db/virtual.d.ts @@ -28,6 +28,7 @@ declare module 'astro:db' { export const between: RuntimeConfig['between']; export const notBetween: RuntimeConfig['notBetween']; export const like: RuntimeConfig['like']; + export const ilike: RuntimeConfig['ilike']; export const notIlike: RuntimeConfig['notIlike']; export const not: RuntimeConfig['not']; export const asc: RuntimeConfig['asc']; diff --git a/packages/integrations/cloudflare/CHANGELOG.md b/packages/integrations/cloudflare/CHANGELOG.md index 3422975350..7c217d6f1d 100644 --- a/packages/integrations/cloudflare/CHANGELOG.md +++ b/packages/integrations/cloudflare/CHANGELOG.md @@ -1,5 +1,18 @@ # @astrojs/cloudflare +## 12.2.2 + +### Patch Changes + +- [#13304](https://github.com/withastro/astro/pull/13304) [`6efd57d`](https://github.com/withastro/astro/commit/6efd57d1747052e9a61d8867dd5941d0bf65ff22) Thanks [@ematipico](https://github.com/ematipico)! - Fixes a small issue where the package was pulling an outdated version of its internal dependencies. + +- [#13201](https://github.com/withastro/astro/pull/13201) [`065157c`](https://github.com/withastro/astro/commit/065157cac73e176cd6da9b8b0a157359a20ebebd) Thanks [@ekwoka](https://github.com/ekwoka)! - Includes onerror passthrough param for Cloudflare Image Service + +- [#13299](https://github.com/withastro/astro/pull/13299) [`2e1321e`](https://github.com/withastro/astro/commit/2e1321e9d5b27da3e86bc4021e4136661a8055aa) Thanks [@bluwy](https://github.com/bluwy)! - Uses `tinyglobby` for globbing files + +- Updated dependencies []: + - @astrojs/underscore-redirects@0.6.0 + ## 12.2.1 ### Patch Changes diff --git a/packages/integrations/cloudflare/package.json b/packages/integrations/cloudflare/package.json index 6f1e6a810a..c57970ee97 100644 --- a/packages/integrations/cloudflare/package.json +++ b/packages/integrations/cloudflare/package.json @@ -1,7 +1,7 @@ { "name": "@astrojs/cloudflare", "description": "Deploy your site to Cloudflare Workers/Pages", - "version": "12.2.1", + "version": "12.2.2", "type": "module", "types": "./dist/index.d.ts", "author": "withastro", @@ -33,14 +33,14 @@ "test": "astro-scripts test \"test/**/*.test.js\"" }, "dependencies": { - "@astrojs/internal-helpers": "0.4.2", - "@astrojs/underscore-redirects": "^0.6.0", + "@astrojs/internal-helpers": "workspace:*", + "@astrojs/underscore-redirects": "workspace:*", "@cloudflare/workers-types": "^4.20250109.0", "esbuild": "^0.24.0", "estree-walker": "^3.0.3", "magic-string": "^0.30.17", "miniflare": "^3.20241230.1", - "tiny-glob": "^0.2.9", + "tinyglobby": "^0.2.12", "vite": "^6.0.7", "wrangler": "^3.101.0" }, @@ -52,7 +52,6 @@ "astro-scripts": "workspace:*", "cheerio": "1.0.0", "execa": "^8.0.1", - "fast-glob": "^3.3.3", "rollup": "^4.30.1", "strip-ansi": "^7.1.0" }, diff --git a/packages/integrations/cloudflare/src/entrypoints/image-service.ts b/packages/integrations/cloudflare/src/entrypoints/image-service.ts index fa970c45fb..d4cf8ff932 100644 --- a/packages/integrations/cloudflare/src/entrypoints/image-service.ts +++ b/packages/integrations/cloudflare/src/entrypoints/image-service.ts @@ -7,7 +7,7 @@ import { isESMImportedImage, isRemoteAllowed } from '../utils/assets.js'; const service: ExternalImageService = { ...baseService, getURL: (options, imageConfig) => { - const resizingParams = []; + const resizingParams = ['onerror=redirect']; if (options.width) resizingParams.push(`width=${options.width}`); if (options.height) resizingParams.push(`height=${options.height}`); if (options.quality) resizingParams.push(`quality=${options.quality}`); diff --git a/packages/integrations/cloudflare/src/utils/generate-routes-json.ts b/packages/integrations/cloudflare/src/utils/generate-routes-json.ts index eea7c38e1c..f1d9e43845 100644 --- a/packages/integrations/cloudflare/src/utils/generate-routes-json.ts +++ b/packages/integrations/cloudflare/src/utils/generate-routes-json.ts @@ -14,7 +14,7 @@ import { removeLeadingForwardSlash, removeTrailingForwardSlash, } from '@astrojs/internal-helpers/path'; -import glob from 'tiny-glob'; +import { glob } from 'tinyglobby'; // Copied from https://github.com/withastro/astro/blob/3776ecf0aa9e08a992d3ae76e90682fd04093721/packages/astro/src/core/routing/manifest/create.ts#L45-L70 // We're not sure how to improve this regex yet @@ -205,9 +205,8 @@ export async function createRoutesFile( } if (existsSync(fileURLToPath(_config.publicDir))) { - const staticFiles = await glob(`${fileURLToPath(_config.publicDir)}/**/*`, { + const staticFiles = await glob(`**/*`, { cwd: fileURLToPath(_config.publicDir), - filesOnly: true, dot: true, }); for (const staticFile of staticFiles) { diff --git a/packages/integrations/cloudflare/test/external-image-service.test.js b/packages/integrations/cloudflare/test/external-image-service.test.js index 80ff2140fc..28ef544ca5 100644 --- a/packages/integrations/cloudflare/test/external-image-service.test.js +++ b/packages/integrations/cloudflare/test/external-image-service.test.js @@ -2,7 +2,7 @@ import * as assert from 'node:assert/strict'; import { readFileSync } from 'node:fs'; import { describe, it } from 'node:test'; import { fileURLToPath } from 'node:url'; -import glob from 'tiny-glob'; +import { glob } from 'tinyglobby'; import { astroCli } from './_test-utils.js'; const root = new URL('./fixtures/external-image-service/', import.meta.url); diff --git a/packages/integrations/mdx/src/rehype-images-to-component.ts b/packages/integrations/mdx/src/rehype-images-to-component.ts index c903ae511b..d6e5308c4b 100644 --- a/packages/integrations/mdx/src/rehype-images-to-component.ts +++ b/packages/integrations/mdx/src/rehype-images-to-component.ts @@ -73,84 +73,105 @@ function getImageComponentAttributes(props: Properties): MdxJsxAttribute[] { export function rehypeImageToComponent() { return function (tree: Root, file: VFile) { - if (!file.data.astro?.imagePaths?.length) return; + if (!file.data.astro?.localImagePaths?.length && !file.data.astro?.remoteImagePaths?.length) + return; const importsStatements: MdxjsEsm[] = []; const importedImages = new Map(); visit(tree, 'element', (node, index, parent) => { - if (!file.data.astro?.imagePaths?.length || node.tagName !== 'img' || !node.properties.src) - return; + if (node.tagName !== 'img' || !node.properties.src) return; const src = decodeURI(String(node.properties.src)); - if (!file.data.astro.imagePaths?.includes(src)) return; + const isLocalImage = file.data.astro?.localImagePaths?.includes(src); + const isRemoteImage = file.data.astro?.remoteImagePaths?.includes(src); - let importName = importedImages.get(src); + let element: MdxJsxFlowElementHast; + if (isLocalImage) { + let importName = importedImages.get(src); - if (!importName) { - importName = `__${importedImages.size}_${src.replace(/\W/g, '_')}__`; + if (!importName) { + importName = `__${importedImages.size}_${src.replace(/\W/g, '_')}__`; - importsStatements.push({ - type: 'mdxjsEsm', - value: '', - data: { - estree: { - type: 'Program', - sourceType: 'module', - body: [ - { - type: 'ImportDeclaration', - source: { - type: 'Literal', - value: src, - raw: JSON.stringify(src), + importsStatements.push({ + type: 'mdxjsEsm', + value: '', + data: { + estree: { + type: 'Program', + sourceType: 'module', + body: [ + { + type: 'ImportDeclaration', + source: { + type: 'Literal', + value: src, + raw: JSON.stringify(src), + }, + specifiers: [ + { + type: 'ImportDefaultSpecifier', + local: { type: 'Identifier', name: importName }, + }, + ], }, - specifiers: [ - { - type: 'ImportDefaultSpecifier', - local: { type: 'Identifier', name: importName }, - }, - ], - }, - ], + ], + }, }, - }, - }); - importedImages.set(src, importName); - } + }); + importedImages.set(src, importName); + } - // Build a component that's equivalent to - const componentElement: MdxJsxFlowElementHast = { - name: ASTRO_IMAGE_ELEMENT, - type: 'mdxJsxFlowElement', - attributes: [ - ...getImageComponentAttributes(node.properties), - { - name: 'src', - type: 'mdxJsxAttribute', - value: { - type: 'mdxJsxAttributeValueExpression', - value: importName, - data: { - estree: { - type: 'Program', - sourceType: 'module', - comments: [], - body: [ - { - type: 'ExpressionStatement', - expression: { type: 'Identifier', name: importName }, - }, - ], + // Build a component that's equivalent to + element = { + name: ASTRO_IMAGE_ELEMENT, + type: 'mdxJsxFlowElement', + attributes: [ + ...getImageComponentAttributes(node.properties), + { + name: 'src', + type: 'mdxJsxAttribute', + value: { + type: 'mdxJsxAttributeValueExpression', + value: importName, + data: { + estree: { + type: 'Program', + sourceType: 'module', + comments: [], + body: [ + { + type: 'ExpressionStatement', + expression: { type: 'Identifier', name: importName }, + }, + ], + }, }, }, }, - }, - ], - children: [], - }; + ], + children: [], + }; + } else if (isRemoteImage) { + // Build a component that's equivalent to + element = { + name: ASTRO_IMAGE_ELEMENT, + type: 'mdxJsxFlowElement', + attributes: [ + ...getImageComponentAttributes(node.properties), + { + name: 'src', + type: 'mdxJsxAttribute', + value: src, + }, + ], + children: [], + }; + } else { + return; + } - parent!.children.splice(index!, 1, componentElement); + parent!.children.splice(index!, 1, element); }); // Add all the import statements to the top of the file for the images diff --git a/packages/integrations/netlify/CHANGELOG.md b/packages/integrations/netlify/CHANGELOG.md index 942792f2e8..e66f678a82 100644 --- a/packages/integrations/netlify/CHANGELOG.md +++ b/packages/integrations/netlify/CHANGELOG.md @@ -1,5 +1,14 @@ # @astrojs/netlify +## 6.2.1 + +### Patch Changes + +- [#13299](https://github.com/withastro/astro/pull/13299) [`2e1321e`](https://github.com/withastro/astro/commit/2e1321e9d5b27da3e86bc4021e4136661a8055aa) Thanks [@bluwy](https://github.com/bluwy)! - Uses `tinyglobby` for globbing files + +- Updated dependencies []: + - @astrojs/underscore-redirects@0.6.0 + ## 6.2.0 ### Minor Changes diff --git a/packages/integrations/netlify/package.json b/packages/integrations/netlify/package.json index 5af65b3a8a..5ee338eb72 100644 --- a/packages/integrations/netlify/package.json +++ b/packages/integrations/netlify/package.json @@ -1,7 +1,7 @@ { "name": "@astrojs/netlify", "description": "Deploy your site to Netlify", - "version": "6.2.0", + "version": "6.2.1", "type": "module", "types": "./dist/index.d.ts", "author": "withastro", @@ -42,6 +42,7 @@ "@netlify/functions": "^2.8.0", "@vercel/nft": "^0.29.0", "esbuild": "^0.24.0", + "tinyglobby": "^0.2.12", "vite": "^6.0.7" }, "peerDependencies": { @@ -56,7 +57,6 @@ "cheerio": "1.0.0", "devalue": "^5.1.1", "execa": "^8.0.1", - "fast-glob": "^3.3.3", "strip-ansi": "^7.1.0", "typescript": "^5.7.3" }, diff --git a/packages/integrations/netlify/src/index.ts b/packages/integrations/netlify/src/index.ts index 3f016a5e1a..3a447f5fd1 100644 --- a/packages/integrations/netlify/src/index.ts +++ b/packages/integrations/netlify/src/index.ts @@ -13,7 +13,7 @@ import type { IntegrationResolvedRoute, } from 'astro'; import { build } from 'esbuild'; -import glob from 'fast-glob'; +import { glob, globSync } from 'tinyglobby'; import { copyDependenciesToFunction } from './lib/nft.js'; import type { Args } from './ssr-function.js'; @@ -283,6 +283,7 @@ export default function netlifyIntegration( cwd: fileURLToPath(rootDir), absolute: true, ignore: exclude, + expandDirectories: false, }); return files.map((file) => pathToFileURL(file)); } @@ -306,7 +307,7 @@ export default function netlifyIntegration( if (_config.vite.assetsInclude) { const mergeGlobbedIncludes = (globPattern: unknown) => { if (typeof globPattern === 'string') { - const entries = glob.sync(globPattern).map((p) => pathToFileURL(p)); + const entries = globSync(globPattern).map((p) => pathToFileURL(p)); extraFilesToInclude.push(...entries); } else if (Array.isArray(globPattern)) { for (const pattern of globPattern) { diff --git a/packages/integrations/netlify/test/functions/include-files.test.js b/packages/integrations/netlify/test/functions/include-files.test.js index f88f1319db..e54e116a78 100644 --- a/packages/integrations/netlify/test/functions/include-files.test.js +++ b/packages/integrations/netlify/test/functions/include-files.test.js @@ -3,7 +3,7 @@ import { existsSync } from 'node:fs'; import { after, before, describe, it } from 'node:test'; import netlify from '@astrojs/netlify'; import * as cheerio from 'cheerio'; -import glob from 'fast-glob'; +import { globSync } from 'tinyglobby'; import { loadFixture } from '../../../../astro/test/test-utils.js'; describe( @@ -32,7 +32,7 @@ describe( it('Emits vite assets files', async () => { for (const pattern of expectedAssetsInclude) { - const files = glob.sync(pattern); + const files = globSync(pattern); for (const file of files) { assert.ok( existsSync(new URL(file, expectedCwd)), @@ -158,7 +158,7 @@ describe( it('Does not include files when excluded', async () => { for (const pattern of includeFiles) { - const files = glob.sync(pattern, { ignore: excludedTxt }); + const files = globSync(pattern, { ignore: excludedTxt }); for (const file of files) { assert.ok( existsSync(new URL(file, expectedCwd)), diff --git a/packages/integrations/node/CHANGELOG.md b/packages/integrations/node/CHANGELOG.md index 661592aba8..9ab01c0de9 100644 --- a/packages/integrations/node/CHANGELOG.md +++ b/packages/integrations/node/CHANGELOG.md @@ -1,5 +1,11 @@ # @astrojs/node +## 9.1.1 + +### Patch Changes + +- [#13190](https://github.com/withastro/astro/pull/13190) [`c6bf6b3`](https://github.com/withastro/astro/commit/c6bf6b3b210d3cfd7a23d42815b1b5c58099736f) Thanks [@lee-arnold](https://github.com/lee-arnold)! - Fixes the image endpoint entrypoint + ## 9.1.0 ### Minor Changes diff --git a/packages/integrations/node/package.json b/packages/integrations/node/package.json index 8ac0450746..cb145377d2 100644 --- a/packages/integrations/node/package.json +++ b/packages/integrations/node/package.json @@ -1,7 +1,7 @@ { "name": "@astrojs/node", "description": "Deploy your site to a Node.js server", - "version": "9.1.0", + "version": "9.1.1", "type": "module", "types": "./dist/index.d.ts", "author": "withastro", diff --git a/packages/integrations/node/src/index.ts b/packages/integrations/node/src/index.ts index a5dccc0c3c..e1cf5e8b52 100644 --- a/packages/integrations/node/src/index.ts +++ b/packages/integrations/node/src/index.ts @@ -50,7 +50,10 @@ export default function createIntegration(userOptions: UserOptions): AstroIntegr updateConfig({ image: { - endpoint: config.image.endpoint ?? 'astro/assets/endpoint/node', + endpoint: { + route: config.image.endpoint.route ?? '_image', + entrypoint: config.image.endpoint.entrypoint ?? 'astro/assets/endpoint/node', + }, }, session, vite: { diff --git a/packages/integrations/sitemap/package.json b/packages/integrations/sitemap/package.json index acb3c7710f..9f3c04c5d3 100644 --- a/packages/integrations/sitemap/package.json +++ b/packages/integrations/sitemap/package.json @@ -38,7 +38,7 @@ "zod": "^3.24.1" }, "devDependencies": { - "@astrojs/node": "^9.1.0", + "@astrojs/node": "workspace:*", "astro": "workspace:*", "astro-scripts": "workspace:*", "xml2js": "0.6.2" diff --git a/packages/integrations/vercel/CHANGELOG.md b/packages/integrations/vercel/CHANGELOG.md index 1f3baf33c7..57fd93bc68 100644 --- a/packages/integrations/vercel/CHANGELOG.md +++ b/packages/integrations/vercel/CHANGELOG.md @@ -1,5 +1,13 @@ # @astrojs/vercel +## 8.0.8 + +### Patch Changes + +- [#13304](https://github.com/withastro/astro/pull/13304) [`6efd57d`](https://github.com/withastro/astro/commit/6efd57d1747052e9a61d8867dd5941d0bf65ff22) Thanks [@ematipico](https://github.com/ematipico)! - Fixes a small issue where the package was pulling an outdated version of its internal dependencies. + +- [#13299](https://github.com/withastro/astro/pull/13299) [`2e1321e`](https://github.com/withastro/astro/commit/2e1321e9d5b27da3e86bc4021e4136661a8055aa) Thanks [@bluwy](https://github.com/bluwy)! - Uses `tinyglobby` for globbing files + ## 8.0.7 ### Patch Changes diff --git a/packages/integrations/vercel/package.json b/packages/integrations/vercel/package.json index c171806dbf..3ad4843114 100644 --- a/packages/integrations/vercel/package.json +++ b/packages/integrations/vercel/package.json @@ -1,7 +1,7 @@ { "name": "@astrojs/vercel", "description": "Deploy your site to Vercel", - "version": "8.0.7", + "version": "8.0.8", "type": "module", "author": "withastro", "license": "MIT", @@ -46,13 +46,13 @@ "test:hosted": "astro-scripts test --timeout 30000 \"test/hosted/*.test.js\"" }, "dependencies": { - "@astrojs/internal-helpers": "^0.5.1", + "@astrojs/internal-helpers": "workspace:*", "@vercel/analytics": "^1.4.1", "@vercel/edge": "^1.2.1", "@vercel/nft": "^0.29.0", "@vercel/routing-utils": "^5.0.4", "esbuild": "^0.24.0", - "fast-glob": "^3.3.3" + "tinyglobby": "^0.2.12" }, "peerDependencies": { "astro": "^5.0.0" diff --git a/packages/integrations/vercel/src/index.ts b/packages/integrations/vercel/src/index.ts index 4aeb3e568d..9db18f95b3 100644 --- a/packages/integrations/vercel/src/index.ts +++ b/packages/integrations/vercel/src/index.ts @@ -12,7 +12,7 @@ import type { IntegrationResolvedRoute, } from 'astro'; import { AstroError } from 'astro/errors'; -import glob from 'fast-glob'; +import { globSync } from 'tinyglobby'; import { type DevImageService, type VercelImageConfig, @@ -157,7 +157,7 @@ interface VercelISRConfig { * * @default `[]` */ - exclude?: string[]; + exclude?: (string | RegExp)[]; } export default function vercelAdapter({ @@ -353,7 +353,7 @@ export default function vercelAdapter({ if (_config.vite.assetsInclude) { const mergeGlobbedIncludes = (globPattern: unknown) => { if (typeof globPattern === 'string') { - const entries = glob.sync(globPattern).map((p) => pathToFileURL(p)); + const entries = globSync(globPattern).map((p) => pathToFileURL(p)); extraFilesToInclude.push(...entries); } else if (Array.isArray(globPattern)) { for (const pattern of globPattern) { @@ -407,20 +407,44 @@ export default function vercelAdapter({ const isrConfig = typeof isr === 'object' ? isr : {}; await builder.buildServerlessFolder(entryFile, NODE_PATH, _config.root); if (isrConfig.exclude?.length) { + const expandedExclusions = isrConfig.exclude.reduce((acc, exclusion) => { + if (exclusion instanceof RegExp) { + return [ + ...acc, + ...routes + .filter((route) => exclusion.test(route.pattern)) + .map((route) => route.pattern), + ]; + } + + return [...acc, exclusion]; + }, []); + const dest = _middlewareEntryPoint ? MIDDLEWARE_PATH : NODE_PATH; - for (const route of isrConfig.exclude) { + for (const route of expandedExclusions) { // vercel interprets src as a regex pattern, so we need to escape it routeDefinitions.push({ src: escapeRegex(route), dest }); } } await builder.buildISRFolder(entryFile, '_isr', isrConfig, _config.root); for (const route of routes) { - const src = route.patternRegex.source; - const dest = - src.startsWith('^\\/_image') || src.startsWith('^\\/_server-islands') - ? NODE_PATH - : ISR_PATH; - if (!route.isPrerendered) routeDefinitions.push({ src, dest }); + // Do not create _isr route entries for excluded routes + const excludeRouteFromIsr = isrConfig.exclude?.some((exclusion) => { + if (exclusion instanceof RegExp) { + return exclusion.test(route.pattern); + } + + return exclusion === route.pattern; + }); + + if (!excludeRouteFromIsr) { + const src = route.patternRegex.source; + const dest = + src.startsWith('^\\/_image') || src.startsWith('^\\/_server-islands') + ? NODE_PATH + : ISR_PATH; + if (!route.isPrerendered) routeDefinitions.push({ src, dest }); + } } } else { await builder.buildServerlessFolder(entryFile, NODE_PATH, _config.root); diff --git a/packages/integrations/vercel/test/fixtures/isr/astro.config.mjs b/packages/integrations/vercel/test/fixtures/isr/astro.config.mjs index 5e2ce82635..3bc1a44b51 100644 --- a/packages/integrations/vercel/test/fixtures/isr/astro.config.mjs +++ b/packages/integrations/vercel/test/fixtures/isr/astro.config.mjs @@ -7,7 +7,7 @@ export default defineConfig({ isr: { bypassToken: "1c9e601d-9943-4e7c-9575-005556d774a8", expiration: 120, - exclude: ["/two", "/excluded/[dynamic]", "/excluded/[...rest]"] + exclude: ["/two", "/excluded/[dynamic]", "/excluded/[...rest]", /^\/api/] } }) }); diff --git a/packages/integrations/vercel/test/fixtures/isr/src/pages/api/[dynamic].ts b/packages/integrations/vercel/test/fixtures/isr/src/pages/api/[dynamic].ts new file mode 100644 index 0000000000..ecbac57c95 --- /dev/null +++ b/packages/integrations/vercel/test/fixtures/isr/src/pages/api/[dynamic].ts @@ -0,0 +1,3 @@ +export async function GET({ params }) { + return new Response(`OK ${params.dynamic}`) +} diff --git a/packages/integrations/vercel/test/fixtures/isr/src/pages/api/index.ts b/packages/integrations/vercel/test/fixtures/isr/src/pages/api/index.ts new file mode 100644 index 0000000000..fd34254521 --- /dev/null +++ b/packages/integrations/vercel/test/fixtures/isr/src/pages/api/index.ts @@ -0,0 +1,3 @@ +export async function GET() { + return new Response("OK") +} diff --git a/packages/integrations/vercel/test/isr.test.js b/packages/integrations/vercel/test/isr.test.js index 1e5b329ef6..25dfe1dba0 100644 --- a/packages/integrations/vercel/test/isr.test.js +++ b/packages/integrations/vercel/test/isr.test.js @@ -41,6 +41,14 @@ describe('ISR', () => { src: '^/excluded(?:/(.*?))?$', dest: '_render', }, + { + src: '^/api/([^/]+?)$', + dest: '_render', + }, + { + src: '^/api$', + dest: '_render', + }, { src: '^/_server-islands/([^/]+?)/?$', dest: '_render', @@ -49,22 +57,10 @@ describe('ISR', () => { src: '^/_image/?$', dest: '_render', }, - { - src: '^/excluded/([^/]+?)/?$', - dest: '/_isr?x_astro_path=$0', - }, - { - src: '^/excluded(?:/(.*?))?/?$', - dest: '/_isr?x_astro_path=$0', - }, { src: '^/one/?$', dest: '/_isr?x_astro_path=$0', }, - { - src: '^/two/?$', - dest: '/_isr?x_astro_path=$0', - }, ]); }); }); diff --git a/packages/integrations/vue/CHANGELOG.md b/packages/integrations/vue/CHANGELOG.md index 5281434384..e01cb1d0ec 100644 --- a/packages/integrations/vue/CHANGELOG.md +++ b/packages/integrations/vue/CHANGELOG.md @@ -1,5 +1,11 @@ # @astrojs/vue +## 5.0.7 + +### Patch Changes + +- [#13251](https://github.com/withastro/astro/pull/13251) [`3842ce5`](https://github.com/withastro/astro/commit/3842ce5ec9471d358042b3d9ef697cf06c7a91f6) Thanks [@florian-lefebvre](https://github.com/florian-lefebvre)! - Fixes a case where the compiler could not be resolved automatically + ## 5.0.6 ### Patch Changes diff --git a/packages/integrations/vue/package.json b/packages/integrations/vue/package.json index de3a93e514..406cf18ed6 100644 --- a/packages/integrations/vue/package.json +++ b/packages/integrations/vue/package.json @@ -1,6 +1,6 @@ { "name": "@astrojs/vue", - "version": "5.0.6", + "version": "5.0.7", "description": "Use Vue components within Astro", "type": "module", "types": "./dist/index.d.ts", diff --git a/packages/integrations/web-vitals/test/fixtures/basics/package.json b/packages/integrations/web-vitals/test/fixtures/basics/package.json index 6c55734588..25ab0abc1b 100644 --- a/packages/integrations/web-vitals/test/fixtures/basics/package.json +++ b/packages/integrations/web-vitals/test/fixtures/basics/package.json @@ -9,7 +9,7 @@ }, "dependencies": { "@astrojs/db": "workspace:*", - "@astrojs/node": "^9.0.2", + "@astrojs/node": "workspace:*", "@astrojs/web-vitals": "workspace:*", "astro": "workspace:*" } diff --git a/packages/internal-helpers/package.json b/packages/internal-helpers/package.json index 5a3960e06c..aa58997cd2 100644 --- a/packages/internal-helpers/package.json +++ b/packages/internal-helpers/package.json @@ -13,6 +13,7 @@ "bugs": "https://github.com/withastro/astro/issues", "exports": { "./path": "./dist/path.js", + "./remote": "./dist/remote.js", "./fs": "./dist/fs.js" }, "typesVersions": { @@ -20,6 +21,9 @@ "path": [ "./dist/path.d.ts" ], + "remote": [ + "./dist/remote.d.ts" + ], "fs": [ "./dist/fs.d.ts" ] diff --git a/packages/astro/src/assets/utils/remotePattern.ts b/packages/internal-helpers/src/remote.ts similarity index 88% rename from packages/astro/src/assets/utils/remotePattern.ts rename to packages/internal-helpers/src/remote.ts index d3e832573a..68bb864fd5 100644 --- a/packages/astro/src/assets/utils/remotePattern.ts +++ b/packages/internal-helpers/src/remote.ts @@ -1,6 +1,3 @@ -import { isRemotePath } from '@astrojs/internal-helpers/path'; -import type { AstroConfig } from '../../types/public/config.js'; - export type RemotePattern = { hostname?: string; pathname?: string; @@ -68,11 +65,16 @@ export function matchPathname(url: URL, pathname?: string, allowWildcard?: boole export function isRemoteAllowed( src: string, { - domains = [], - remotePatterns = [], - }: Partial>, + domains, + remotePatterns, + }: { + domains: string[]; + remotePatterns: RemotePattern[]; + }, ): boolean { - if (!isRemotePath(src)) return false; + if (!URL.canParse(src)) { + return false; + } const url = new URL(src); return ( diff --git a/packages/markdown/remark/package.json b/packages/markdown/remark/package.json index 8e9e142a62..5ad883a735 100644 --- a/packages/markdown/remark/package.json +++ b/packages/markdown/remark/package.json @@ -32,6 +32,7 @@ "test": "astro-scripts test \"test/**/*.test.js\"" }, "dependencies": { + "@astrojs/internal-helpers": "workspace:*", "@astrojs/prism": "workspace:*", "github-slugger": "^2.0.0", "hast-util-from-html": "^2.0.3", diff --git a/packages/markdown/remark/src/index.ts b/packages/markdown/remark/src/index.ts index de13523fe1..d1b6035e4a 100644 --- a/packages/markdown/remark/src/index.ts +++ b/packages/markdown/remark/src/index.ts @@ -1,4 +1,8 @@ -import type { AstroMarkdownOptions, MarkdownProcessor } from './types.js'; +import type { + AstroMarkdownOptions, + AstroMarkdownProcessorOptions, + MarkdownProcessor, +} from './types.js'; import { loadPlugins } from './load-plugins.js'; import { rehypeHeadingIds } from './rehype-collect-headings.js'; @@ -59,7 +63,7 @@ const isPerformanceBenchmark = Boolean(process.env.ASTRO_PERFORMANCE_BENCHMARK); * Create a markdown preprocessor to render multiple markdown files */ export async function createMarkdownProcessor( - opts?: AstroMarkdownOptions, + opts?: AstroMarkdownProcessorOptions, ): Promise { const { syntaxHighlight = markdownConfigDefaults.syntaxHighlight, @@ -93,7 +97,7 @@ export async function createMarkdownProcessor( if (!isPerformanceBenchmark) { // Apply later in case user plugins resolve relative image paths - parser.use(remarkCollectImages); + parser.use(remarkCollectImages, opts?.image); } // Remark -> Rehype @@ -118,7 +122,7 @@ export async function createMarkdownProcessor( } // Images / Assets support - parser.use(rehypeImages()); + parser.use(rehypeImages); // Headings if (!isPerformanceBenchmark) { @@ -152,7 +156,8 @@ export async function createMarkdownProcessor( code: String(result.value), metadata: { headings: result.data.astro?.headings ?? [], - imagePaths: result.data.astro?.imagePaths ?? [], + localImagePaths: result.data.astro?.localImagePaths ?? [], + remoteImagePaths: result.data.astro?.remoteImagePaths ?? [], frontmatter: result.data.astro?.frontmatter ?? {}, }, }; diff --git a/packages/markdown/remark/src/rehype-images.ts b/packages/markdown/remark/src/rehype-images.ts index 11d33df9c1..92043b5e3a 100644 --- a/packages/markdown/remark/src/rehype-images.ts +++ b/packages/markdown/remark/src/rehype-images.ts @@ -1,32 +1,44 @@ +import type { Properties, Root } from 'hast'; import { visit } from 'unist-util-visit'; import type { VFile } from 'vfile'; export function rehypeImages() { - return () => - function (tree: any, file: VFile) { - const imageOccurrenceMap = new Map(); + return function (tree: Root, file: VFile) { + if (!file.data.astro?.localImagePaths?.length && !file.data.astro?.remoteImagePaths?.length) { + // No images to transform, nothing to do. + return; + } - visit(tree, (node) => { - if (node.type !== 'element') return; - if (node.tagName !== 'img') return; + const imageOccurrenceMap = new Map(); - if (node.properties?.src) { - node.properties.src = decodeURI(node.properties.src); + visit(tree, 'element', (node) => { + if (node.tagName !== 'img') return; + if (typeof node.properties?.src !== 'string') return; - if (file.data.astro?.imagePaths?.includes(node.properties.src)) { - const { ...props } = node.properties; + const src = decodeURI(node.properties.src); + let newProperties: Properties; - // Initialize or increment occurrence count for this image - const index = imageOccurrenceMap.get(node.properties.src) || 0; - imageOccurrenceMap.set(node.properties.src, index + 1); + if (file.data.astro?.localImagePaths?.includes(src)) { + // Override the original `src` with the new, decoded `src` that Astro will better understand. + newProperties = { ...node.properties, src }; + } else if (file.data.astro?.remoteImagePaths?.includes(src)) { + newProperties = { + // By default, markdown images won't have width and height set. However, just in case another user plugin does set these, we should respect them. + inferSize: 'width' in node.properties && 'height' in node.properties ? undefined : true, + ...node.properties, + src, + }; + } else { + // Not in localImagePaths or remoteImagePaths, we should not transform. + return; + } - node.properties['__ASTRO_IMAGE_'] = JSON.stringify({ ...props, index }); + // Initialize or increment occurrence count for this image + const index = imageOccurrenceMap.get(node.properties.src) || 0; + imageOccurrenceMap.set(node.properties.src, index + 1); - Object.keys(props).forEach((prop) => { - delete node.properties[prop]; - }); - } - } - }); - }; + // Set a special property on the image so later Astro code knows to process this image. + node.properties = { __ASTRO_IMAGE_: JSON.stringify({ ...newProperties, index }) }; + }); + }; } diff --git a/packages/markdown/remark/src/remark-collect-images.ts b/packages/markdown/remark/src/remark-collect-images.ts index f09f1c580a..0fa9466708 100644 --- a/packages/markdown/remark/src/remark-collect-images.ts +++ b/packages/markdown/remark/src/remark-collect-images.ts @@ -1,42 +1,48 @@ -import type { Image, ImageReference } from 'mdast'; +import { isRemoteAllowed } from '@astrojs/internal-helpers/remote'; +import type { Root } from 'mdast'; import { definitions } from 'mdast-util-definitions'; import { visit } from 'unist-util-visit'; import type { VFile } from 'vfile'; +import type { AstroMarkdownProcessorOptions } from './types.js'; -export function remarkCollectImages() { - return function (tree: any, vfile: VFile) { +export function remarkCollectImages(opts: AstroMarkdownProcessorOptions['image']) { + const domains = opts?.domains ?? []; + const remotePatterns = opts?.remotePatterns ?? []; + + return function (tree: Root, vfile: VFile) { if (typeof vfile?.path !== 'string') return; const definition = definitions(tree); - const imagePaths = new Set(); - visit(tree, ['image', 'imageReference'], (node: Image | ImageReference) => { + const localImagePaths = new Set(); + const remoteImagePaths = new Set(); + visit(tree, (node) => { + let url: string | undefined; if (node.type === 'image') { - if (shouldOptimizeImage(node.url)) imagePaths.add(decodeURI(node.url)); - } - if (node.type === 'imageReference') { + url = decodeURI(node.url); + } else if (node.type === 'imageReference') { const imageDefinition = definition(node.identifier); if (imageDefinition) { - if (shouldOptimizeImage(imageDefinition.url)) - imagePaths.add(decodeURI(imageDefinition.url)); + url = decodeURI(imageDefinition.url); } } + + if (!url) return; + + if (URL.canParse(url)) { + if (isRemoteAllowed(url, { domains, remotePatterns })) { + remoteImagePaths.add(url); + } + } else if (!url.startsWith('/')) { + // If: + // + not a valid URL + // + AND not an absolute path + // Then it's a local image. + localImagePaths.add(url); + } }); vfile.data.astro ??= {}; - vfile.data.astro.imagePaths = Array.from(imagePaths); + vfile.data.astro.localImagePaths = Array.from(localImagePaths); + vfile.data.astro.remoteImagePaths = Array.from(remoteImagePaths); }; } - -function shouldOptimizeImage(src: string) { - // Optimize anything that is NOT external or an absolute path to `public/` - return !isValidUrl(src) && !src.startsWith('/'); -} - -function isValidUrl(str: string): boolean { - try { - new URL(str); - return true; - } catch { - return false; - } -} diff --git a/packages/markdown/remark/src/types.ts b/packages/markdown/remark/src/types.ts index e6a9d362bc..24f5f6c4d6 100644 --- a/packages/markdown/remark/src/types.ts +++ b/packages/markdown/remark/src/types.ts @@ -1,3 +1,4 @@ +import type { RemotePattern } from '@astrojs/internal-helpers/remote'; import type * as hast from 'hast'; import type * as mdast from 'mdast'; import type { Options as RemarkRehypeOptions } from 'remark-rehype'; @@ -11,7 +12,8 @@ declare module 'vfile' { interface DataMap { astro: { headings?: MarkdownHeading[]; - imagePaths?: string[]; + localImagePaths?: string[]; + remoteImagePaths?: string[]; frontmatter?: Record; }; } @@ -39,6 +41,9 @@ export interface ShikiConfig extends Pick, Pick {} +/** + * Configuration options that end up in the markdown section of AstroConfig + */ export interface AstroMarkdownOptions { syntaxHighlight?: 'shiki' | 'prism' | false; shikiConfig?: ShikiConfig; @@ -49,6 +54,16 @@ export interface AstroMarkdownOptions { smartypants?: boolean; } +/** + * Extra configuration options from other parts of AstroConfig that get injected into this plugin + */ +export interface AstroMarkdownProcessorOptions extends AstroMarkdownOptions { + image?: { + domains?: string[]; + remotePatterns?: RemotePattern[]; + }; +} + export interface MarkdownProcessor { render: ( content: string, @@ -67,7 +82,8 @@ export interface MarkdownProcessorRenderResult { code: string; metadata: { headings: MarkdownHeading[]; - imagePaths: string[]; + localImagePaths: string[]; + remoteImagePaths: string[]; frontmatter: Record; }; } diff --git a/packages/markdown/remark/test/remark-collect-images.test.js b/packages/markdown/remark/test/remark-collect-images.test.js index 669bee595f..e7ac08918d 100644 --- a/packages/markdown/remark/test/remark-collect-images.test.js +++ b/packages/markdown/remark/test/remark-collect-images.test.js @@ -6,7 +6,7 @@ describe('collect images', async () => { let processor; before(async () => { - processor = await createMarkdownProcessor(); + processor = await createMarkdownProcessor({ image: { domains: ['example.com'] } }); }); it('should collect inline image paths', async () => { @@ -15,7 +15,7 @@ describe('collect images', async () => { const { code, - metadata: { imagePaths }, + metadata: { localImagePaths, remoteImagePaths }, } = await processor.render(markdown, { fileURL }); assert.equal( @@ -23,20 +23,56 @@ describe('collect images', async () => { '

Hello

', ); - assert.deepEqual(imagePaths, ['./img.png']); + assert.deepEqual(localImagePaths, ['./img.png']); + assert.deepEqual(remoteImagePaths, []); + }); + + it('should collect allowed remote image paths', async () => { + const markdown = `Hello ![inline remote image url](https://example.com/example.png)`; + const fileURL = 'file.md'; + + const { + code, + metadata: { localImagePaths, remoteImagePaths }, + } = await processor.render(markdown, { fileURL }); + assert.equal( + code, + `

Hello

`, + ); + + assert.deepEqual(localImagePaths, []); + assert.deepEqual(remoteImagePaths, ['https://example.com/example.png']); + }); + + it('should not collect other remote image paths', async () => { + const markdown = `Hello ![inline remote image url](https://google.com/google.png)`; + const fileURL = 'file.md'; + + const { + code, + metadata: { localImagePaths, remoteImagePaths }, + } = await processor.render(markdown, { fileURL }); + assert.equal( + code, + `

Hello inline remote image url

`, + ); + + assert.deepEqual(localImagePaths, []); + assert.deepEqual(remoteImagePaths, []); }); it('should add image paths from definition', async () => { - const markdown = `Hello ![image ref][img-ref]\n\n[img-ref]: ./img.webp`; + const markdown = `Hello ![image ref][img-ref] ![remote image ref][remote-img-ref]\n\n[img-ref]: ./img.webp\n[remote-img-ref]: https://example.com/example.jpg`; const fileURL = 'file.md'; const { code, metadata } = await processor.render(markdown, { fileURL }); assert.equal( code, - '

Hello

', + '

Hello

', ); - assert.deepEqual(metadata.imagePaths, ['./img.webp']); + assert.deepEqual(metadata.localImagePaths, ['./img.webp']); + assert.deepEqual(metadata.remoteImagePaths, ['https://example.com/example.jpg']); }); }); diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index e0c93edb4a..14dcb1a864 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -32,13 +32,10 @@ importers: version: 0.24.2 eslint: specifier: ^9.19.0 - version: 9.19.0(jiti@2.4.2) + version: 9.20.0(jiti@2.4.2) eslint-plugin-regexp: specifier: ^2.7.0 - version: 2.7.0(eslint@9.19.0(jiti@2.4.2)) - globby: - specifier: ^14.0.2 - version: 14.0.2 + version: 2.7.0(eslint@9.20.0(jiti@2.4.2)) only-allow: specifier: ^1.2.1 version: 1.2.1 @@ -51,15 +48,18 @@ importers: publint: specifier: ^0.3.2 version: 0.3.2 + tinyglobby: + specifier: ^0.2.12 + version: 0.2.12 turbo: specifier: ^2.4.0 - version: 2.4.0 + version: 2.4.1 typescript: specifier: ~5.7.3 version: 5.7.3 typescript-eslint: specifier: ^8.23.0 - version: 8.23.0(eslint@9.19.0(jiti@2.4.2))(typescript@5.7.3) + version: 8.24.0(eslint@9.20.0(jiti@2.4.2))(typescript@5.7.3) benchmark: dependencies: @@ -67,7 +67,7 @@ importers: specifier: workspace:* version: link:../packages/integrations/mdx '@astrojs/node': - specifier: ^9.0.2 + specifier: workspace:* version: link:../packages/integrations/node '@benchmark/adapter': specifier: workspace:* @@ -102,10 +102,10 @@ importers: devDependencies: '@codspeed/vitest-plugin': specifier: 4.0.0 - version: 4.0.0(vite@6.0.11(@types/node@22.13.1)(jiti@2.4.2)(lightningcss@1.29.1)(sass@1.83.4)(yaml@2.5.1))(vitest@3.0.5(@types/debug@4.1.12)(@types/node@22.13.1)(jiti@2.4.2)(jsdom@23.2.0)(lightningcss@1.29.1)(sass@1.83.4)(yaml@2.5.1)) + version: 4.0.0(vite@6.1.0(@types/node@22.13.1)(jiti@2.4.2)(lightningcss@1.29.1)(sass@1.84.0)(yaml@2.5.1))(vitest@3.0.5(@types/debug@4.1.12)(@types/node@22.13.1)(jiti@2.4.2)(jsdom@23.2.0)(lightningcss@1.29.1)(sass@1.84.0)(yaml@2.5.1)) vitest: specifier: ^3.0.5 - version: 3.0.5(@types/debug@4.1.12)(@types/node@22.13.1)(jiti@2.4.2)(jsdom@23.2.0)(lightningcss@1.29.1)(sass@1.83.4)(yaml@2.5.1) + version: 3.0.5(@types/debug@4.1.12)(@types/node@22.13.1)(jiti@2.4.2)(jsdom@23.2.0)(lightningcss@1.29.1)(sass@1.84.0)(yaml@2.5.1) benchmark/packages/adapter: dependencies: @@ -142,7 +142,7 @@ importers: examples/basics: dependencies: astro: - specifier: ^5.3.0 + specifier: ^5.3.1 version: link:../../packages/astro examples/blog: @@ -157,13 +157,13 @@ importers: specifier: ^3.2.1 version: link:../../packages/integrations/sitemap astro: - specifier: ^5.3.0 + specifier: ^5.3.1 version: link:../../packages/astro examples/component: devDependencies: astro: - specifier: ^5.3.0 + specifier: ^5.3.1 version: link:../../packages/astro examples/container-with-vitest: @@ -172,7 +172,7 @@ importers: specifier: ^4.2.0 version: link:../../packages/integrations/react astro: - specifier: ^5.3.0 + specifier: ^5.3.1 version: link:../../packages/astro react: specifier: ^18.3.1 @@ -182,7 +182,7 @@ importers: version: 18.3.1(react@18.3.1) vitest: specifier: ^3.0.5 - version: 3.0.5(@types/debug@4.1.12)(@types/node@22.13.1)(jiti@2.4.2)(jsdom@23.2.0)(lightningcss@1.29.1)(sass@1.83.4)(yaml@2.5.1) + version: 3.0.5(@types/debug@4.1.12)(@types/node@22.13.1)(jiti@2.4.2)(jsdom@23.2.0)(lightningcss@1.29.1)(sass@1.84.0)(yaml@2.5.1) devDependencies: '@types/react': specifier: ^18.3.18 @@ -203,7 +203,7 @@ importers: specifier: ^3.14.8 version: 3.14.8 astro: - specifier: ^5.3.0 + specifier: ^5.3.1 version: link:../../packages/astro examples/framework-multiple: @@ -221,7 +221,7 @@ importers: specifier: ^7.0.4 version: link:../../packages/integrations/svelte '@astrojs/vue': - specifier: ^5.0.6 + specifier: ^5.0.7 version: link:../../packages/integrations/vue '@types/react': specifier: ^18.3.18 @@ -230,7 +230,7 @@ importers: specifier: ^18.3.5 version: 18.3.5(@types/react@18.3.18) astro: - specifier: ^5.3.0 + specifier: ^5.3.1 version: link:../../packages/astro preact: specifier: ^10.25.4 @@ -246,7 +246,7 @@ importers: version: 1.9.4 svelte: specifier: ^5.19.7 - version: 5.19.7 + version: 5.19.9 vue: specifier: ^3.5.13 version: 3.5.13(typescript@5.7.3) @@ -260,7 +260,7 @@ importers: specifier: ^2.0.1 version: 2.0.1(preact@10.25.4) astro: - specifier: ^5.3.0 + specifier: ^5.3.1 version: link:../../packages/astro preact: specifier: ^10.25.4 @@ -278,7 +278,7 @@ importers: specifier: ^18.3.5 version: 18.3.5(@types/react@18.3.18) astro: - specifier: ^5.3.0 + specifier: ^5.3.1 version: link:../../packages/astro react: specifier: ^18.3.1 @@ -293,7 +293,7 @@ importers: specifier: ^5.0.4 version: link:../../packages/integrations/solid astro: - specifier: ^5.3.0 + specifier: ^5.3.1 version: link:../../packages/astro solid-js: specifier: ^1.9.4 @@ -305,19 +305,19 @@ importers: specifier: ^7.0.4 version: link:../../packages/integrations/svelte astro: - specifier: ^5.3.0 + specifier: ^5.3.1 version: link:../../packages/astro svelte: specifier: ^5.19.7 - version: 5.19.7 + version: 5.19.9 examples/framework-vue: dependencies: '@astrojs/vue': - specifier: ^5.0.6 + specifier: ^5.0.7 version: link:../../packages/integrations/vue astro: - specifier: ^5.3.0 + specifier: ^5.3.1 version: link:../../packages/astro vue: specifier: ^3.5.13 @@ -326,53 +326,53 @@ importers: examples/hackernews: dependencies: '@astrojs/node': - specifier: ^9.1.0 + specifier: ^9.1.1 version: link:../../packages/integrations/node astro: - specifier: ^5.3.0 + specifier: ^5.3.1 version: link:../../packages/astro examples/integration: devDependencies: astro: - specifier: ^5.3.0 + specifier: ^5.3.1 version: link:../../packages/astro examples/minimal: dependencies: astro: - specifier: ^5.3.0 + specifier: ^5.3.1 version: link:../../packages/astro examples/portfolio: dependencies: astro: - specifier: ^5.3.0 + specifier: ^5.3.1 version: link:../../packages/astro examples/ssr: dependencies: '@astrojs/node': - specifier: ^9.1.0 + specifier: ^9.1.1 version: link:../../packages/integrations/node '@astrojs/svelte': specifier: ^7.0.4 version: link:../../packages/integrations/svelte astro: - specifier: ^5.3.0 + specifier: ^5.3.1 version: link:../../packages/astro svelte: specifier: ^5.19.7 - version: 5.19.7 + version: 5.19.9 examples/starlog: dependencies: astro: - specifier: ^5.3.0 + specifier: ^5.3.1 version: link:../../packages/astro sass: specifier: ^1.83.4 - version: 1.83.4 + version: 1.84.0 sharp: specifier: ^0.33.3 version: 0.33.3 @@ -383,7 +383,7 @@ importers: specifier: ^18.17.8 version: 18.19.50 astro: - specifier: ^5.3.0 + specifier: ^5.3.1 version: link:../../packages/astro examples/with-markdoc: @@ -392,7 +392,7 @@ importers: specifier: ^0.12.9 version: link:../../packages/integrations/markdoc astro: - specifier: ^5.3.0 + specifier: ^5.3.1 version: link:../../packages/astro examples/with-mdx: @@ -404,7 +404,7 @@ importers: specifier: ^4.0.4 version: link:../../packages/integrations/preact astro: - specifier: ^5.3.0 + specifier: ^5.3.1 version: link:../../packages/astro preact: specifier: ^10.25.4 @@ -419,7 +419,7 @@ importers: specifier: ^0.5.2 version: 0.5.2(nanostores@0.11.3)(preact@10.25.4) astro: - specifier: ^5.3.0 + specifier: ^5.3.1 version: link:../../packages/astro nanostores: specifier: ^0.11.3 @@ -435,28 +435,28 @@ importers: version: link:../../packages/integrations/mdx '@tailwindcss/vite': specifier: ^4.0.3 - version: 4.0.3(vite@6.0.11(@types/node@22.13.1)(jiti@2.4.2)(lightningcss@1.29.1)(sass@1.83.4)(yaml@2.5.1)) + version: 4.0.6(vite@6.1.0(@types/node@22.13.1)(jiti@2.4.2)(lightningcss@1.29.1)(sass@1.84.0)(yaml@2.5.1)) '@types/canvas-confetti': specifier: ^1.9.0 version: 1.9.0 astro: - specifier: ^5.3.0 + specifier: ^5.3.1 version: link:../../packages/astro canvas-confetti: specifier: ^1.9.3 version: 1.9.3 tailwindcss: specifier: ^4.0.3 - version: 4.0.3 + version: 4.0.6 examples/with-vitest: dependencies: astro: - specifier: ^5.3.0 + specifier: ^5.3.1 version: link:../../packages/astro vitest: specifier: ^3.0.5 - version: 3.0.5(@types/debug@4.1.12)(@types/node@22.13.1)(jiti@2.4.2)(jsdom@23.2.0)(lightningcss@1.29.1)(sass@1.83.4)(yaml@2.5.1) + version: 3.0.5(@types/debug@4.1.12)(@types/node@22.13.1)(jiti@2.4.2)(jsdom@23.2.0)(lightningcss@1.29.1)(sass@1.84.0)(yaml@2.5.1) packages/astro: dependencies: @@ -477,7 +477,7 @@ importers: version: 1.1.0 '@rollup/pluginutils': specifier: ^5.1.4 - version: 5.1.4(rollup@4.34.2) + version: 5.1.4(rollup@4.34.6) '@types/cookie': specifier: ^0.6.0 version: 0.6.0 @@ -535,9 +535,6 @@ importers: estree-walker: specifier: ^3.0.3 version: 3.0.3 - fast-glob: - specifier: ^3.3.3 - version: 3.3.3 flattie: specifier: ^1.1.1 version: 1.1.1 @@ -562,9 +559,6 @@ importers: magicast: specifier: ^0.3.5 version: 0.3.5 - micromatch: - specifier: ^4.0.8 - version: 4.0.8 mrmime: specifier: ^2.0.0 version: 2.0.0 @@ -577,6 +571,9 @@ importers: p-queue: specifier: ^8.1.0 version: 8.1.0 + picomatch: + specifier: ^4.0.2 + version: 4.0.2 preferred-pm: specifier: ^4.1.1 version: 4.1.1 @@ -595,6 +592,9 @@ importers: tinyexec: specifier: ^0.3.2 version: 0.3.2 + tinyglobby: + specifier: ^0.2.12 + version: 0.2.12 tsconfck: specifier: ^3.1.4 version: 3.1.4(typescript@5.7.3) @@ -615,10 +615,10 @@ importers: version: 6.0.3 vite: specifier: ^6.0.11 - version: 6.0.11(@types/node@22.13.1)(jiti@2.4.2)(lightningcss@1.29.1)(sass@1.83.4)(yaml@2.5.1) + version: 6.1.0(@types/node@22.13.1)(jiti@2.4.2)(lightningcss@1.29.1)(sass@1.84.0)(yaml@2.5.1) vitefu: specifier: ^1.0.5 - version: 1.0.5(vite@6.0.11(@types/node@22.13.1)(jiti@2.4.2)(lightningcss@1.29.1)(sass@1.83.4)(yaml@2.5.1)) + version: 1.0.5(vite@6.1.0(@types/node@22.13.1)(jiti@2.4.2)(lightningcss@1.29.1)(sass@1.84.0)(yaml@2.5.1)) which-pm: specifier: ^3.0.1 version: 3.0.1 @@ -681,9 +681,9 @@ importers: '@types/js-yaml': specifier: ^4.0.9 version: 4.0.9 - '@types/micromatch': - specifier: ^4.0.9 - version: 4.0.9 + '@types/picomatch': + specifier: ^3.0.2 + version: 3.0.2 '@types/prompts': specifier: ^2.4.9 version: 2.4.9 @@ -737,10 +737,10 @@ importers: version: 0.1.2 rollup: specifier: ^4.34.2 - version: 4.34.2 + version: 4.34.6 sass: specifier: ^1.83.4 - version: 1.83.4 + version: 1.84.0 undici: specifier: ^7.3.0 version: 7.3.0 @@ -749,7 +749,7 @@ importers: version: 11.0.5 vitest: specifier: ^3.0.5 - version: 3.0.5(@types/debug@4.1.12)(@types/node@22.13.1)(jiti@2.4.2)(jsdom@23.2.0)(lightningcss@1.29.1)(sass@1.83.4)(yaml@2.5.1) + version: 3.0.5(@types/debug@4.1.12)(@types/node@22.13.1)(jiti@2.4.2)(jsdom@23.2.0)(lightningcss@1.29.1)(sass@1.84.0)(yaml@2.5.1) packages/astro-prism: dependencies: @@ -801,7 +801,7 @@ importers: specifier: workspace:* version: link:../../../../db '@astrojs/node': - specifier: ^9.0.2 + specifier: workspace:* version: link:../../../../integrations/node '@astrojs/react': specifier: workspace:* @@ -834,7 +834,7 @@ importers: specifier: workspace:* version: link:../../../../db '@astrojs/node': - specifier: ^9.0.2 + specifier: workspace:* version: link:../../../../integrations/node '@astrojs/react': specifier: workspace:* @@ -917,7 +917,7 @@ importers: version: 1.9.4 svelte: specifier: ^5.19.7 - version: 5.19.7 + version: 5.19.9 vue: specifier: ^3.5.13 version: 3.5.13(typescript@5.7.3) @@ -1002,7 +1002,7 @@ importers: version: link:../../.. sass: specifier: ^1.83.4 - version: 1.83.4 + version: 1.84.0 packages/astro/e2e/fixtures/errors: dependencies: @@ -1035,13 +1035,13 @@ importers: version: 18.3.1(react@18.3.1) sass: specifier: ^1.83.4 - version: 1.83.4 + version: 1.84.0 solid-js: specifier: ^1.9.4 version: 1.9.4 svelte: specifier: ^5.19.7 - version: 5.19.7 + version: 5.19.9 vue: specifier: ^3.5.13 version: 3.5.13(typescript@5.7.3) @@ -1053,7 +1053,7 @@ importers: version: link:../../.. sass: specifier: ^1.83.4 - version: 1.83.4 + version: 1.84.0 packages/astro/e2e/fixtures/hydration-race: dependencies: @@ -1070,7 +1070,7 @@ importers: packages/astro/e2e/fixtures/i18n: dependencies: '@astrojs/node': - specifier: ^9.0.2 + specifier: workspace:* version: link:../../../../integrations/node astro: specifier: workspace:* @@ -1098,7 +1098,7 @@ importers: version: 1.9.4 svelte: specifier: ^5.19.7 - version: 5.19.7 + version: 5.19.9 vue: specifier: ^3.5.13 version: 3.5.13(typescript@5.7.3) @@ -1154,7 +1154,7 @@ importers: version: 1.9.4 svelte: specifier: ^5.19.7 - version: 5.19.7 + version: 5.19.9 vue: specifier: ^3.5.13 version: 3.5.13(typescript@5.7.3) @@ -1194,7 +1194,7 @@ importers: version: 1.9.4 svelte: specifier: ^5.19.7 - version: 5.19.7 + version: 5.19.9 vue: specifier: ^3.5.13 version: 3.5.13(typescript@5.7.3) @@ -1234,7 +1234,7 @@ importers: version: 1.9.4 svelte: specifier: ^5.19.7 - version: 5.19.7 + version: 5.19.9 vue: specifier: ^3.5.13 version: 3.5.13(typescript@5.7.3) @@ -1274,7 +1274,7 @@ importers: version: 1.9.4 svelte: specifier: ^5.19.7 - version: 5.19.7 + version: 5.19.9 vue: specifier: ^3.5.13 version: 3.5.13(typescript@5.7.3) @@ -1314,7 +1314,7 @@ importers: version: 1.9.4 svelte: specifier: ^5.19.7 - version: 5.19.7 + version: 5.19.9 vue: specifier: ^3.5.13 version: 3.5.13(typescript@5.7.3) @@ -1354,7 +1354,7 @@ importers: version: 1.9.4 svelte: specifier: ^5.19.7 - version: 5.19.7 + version: 5.19.9 vue: specifier: ^3.5.13 version: 3.5.13(typescript@5.7.3) @@ -1472,7 +1472,7 @@ importers: specifier: workspace:* version: link:../../../../integrations/mdx '@astrojs/node': - specifier: ^9.0.2 + specifier: workspace:* version: link:../../../../integrations/node '@astrojs/react': specifier: workspace:* @@ -1490,7 +1490,7 @@ importers: packages/astro/e2e/fixtures/server-islands-key: dependencies: '@astrojs/node': - specifier: ^9.0.2 + specifier: workspace:* version: link:../../../../integrations/node astro: specifier: workspace:* @@ -1550,7 +1550,7 @@ importers: version: link:../../.. svelte: specifier: ^5.19.7 - version: 5.19.7 + version: 5.19.9 packages/astro/e2e/fixtures/tailwindcss: dependencies: @@ -1559,13 +1559,13 @@ importers: version: link:../../../../integrations/tailwind '@tailwindcss/vite': specifier: ^4.0.3 - version: 4.0.3(vite@6.0.11(@types/node@22.13.1)(jiti@2.4.2)(lightningcss@1.29.1)(sass@1.83.4)(yaml@2.5.1)) + version: 4.0.6(vite@6.1.0(@types/node@22.13.1)(jiti@2.4.2)(lightningcss@1.29.1)(sass@1.84.0)(yaml@2.5.1)) astro: specifier: workspace:* version: link:../../.. tailwindcss: specifier: ^4.0.3 - version: 4.0.3 + version: 4.0.6 packages/astro/e2e/fixtures/ts-resolution: dependencies: @@ -1585,7 +1585,7 @@ importers: packages/astro/e2e/fixtures/view-transitions: dependencies: '@astrojs/node': - specifier: ^9.0.2 + specifier: workspace:* version: link:../../../../integrations/node '@astrojs/react': specifier: workspace:* @@ -1613,7 +1613,7 @@ importers: version: 1.9.4 svelte: specifier: ^5.19.7 - version: 5.19.7 + version: 5.19.9 vue: specifier: ^3.5.13 version: 3.5.13(typescript@5.7.3) @@ -1751,7 +1751,7 @@ importers: version: 18.3.1(react@18.3.1) svelte: specifier: ^5.19.7 - version: 5.19.7 + version: 5.19.9 vue: specifier: ^3.5.13 version: 3.5.13(typescript@5.7.3) @@ -1772,7 +1772,7 @@ importers: version: link:../../.. svelte: specifier: ^5.19.7 - version: 5.19.7 + version: 5.19.9 packages/astro/test/fixtures/alias-tsconfig: dependencies: @@ -1787,7 +1787,7 @@ importers: version: link:../../.. svelte: specifier: ^5.19.7 - version: 5.19.7 + version: 5.19.9 packages/astro/test/fixtures/alias-tsconfig-baseurl-only: dependencies: @@ -1799,7 +1799,7 @@ importers: version: link:../../.. svelte: specifier: ^5.19.7 - version: 5.19.7 + version: 5.19.9 packages/astro/test/fixtures/alias-tsconfig/deps/namespace-package: {} @@ -1924,7 +1924,7 @@ importers: version: 10.25.4 svelte: specifier: ^5.19.7 - version: 5.19.7 + version: 5.19.9 vue: specifier: ^3.5.13 version: 3.5.13(typescript@5.7.3) @@ -1957,7 +1957,7 @@ importers: version: 18.3.1(react@18.3.1) svelte: specifier: ^5.19.7 - version: 5.19.7 + version: 5.19.9 packages/astro/test/fixtures/astro-client-only/pkg: {} @@ -2049,7 +2049,7 @@ importers: version: 18.3.1(react@18.3.1) svelte: specifier: ^5.19.7 - version: 5.19.7 + version: 5.19.9 packages/astro/test/fixtures/astro-env: dependencies: @@ -2331,13 +2331,13 @@ importers: dependencies: '@tailwindcss/vite': specifier: ^4.0.3 - version: 4.0.3(vite@6.0.11(@types/node@22.13.1)(jiti@2.4.2)(lightningcss@1.29.1)(sass@1.83.4)(yaml@2.5.1)) + version: 4.0.6(vite@6.1.0(@types/node@22.13.1)(jiti@2.4.2)(lightningcss@1.29.1)(sass@1.84.0)(yaml@2.5.1)) astro: specifier: workspace:* version: link:../../.. tailwindcss: specifier: ^4.0.3 - version: 4.0.3 + version: 4.0.6 packages/astro/test/fixtures/astro-sitemap-rss: dependencies: @@ -2397,7 +2397,7 @@ importers: version: 1.9.4 svelte: specifier: ^5.19.7 - version: 5.19.7 + version: 5.19.9 vue: specifier: ^3.5.13 version: 3.5.13(typescript@5.7.3) @@ -2441,7 +2441,7 @@ importers: packages/astro/test/fixtures/client-address-node: dependencies: '@astrojs/node': - specifier: ^9.0.2 + specifier: workspace:* version: link:../../../../integrations/node astro: specifier: workspace:* @@ -2481,7 +2481,7 @@ importers: version: 18.3.1(react@18.3.1) svelte: specifier: ^5.19.7 - version: 5.19.7 + version: 5.19.9 packages/astro/test/fixtures/component-library-shared: dependencies: @@ -2817,7 +2817,7 @@ importers: version: link:../../.. svelte: specifier: ^5.19.7 - version: 5.19.7 + version: 5.19.9 packages/astro/test/fixtures/css-import-as-inline: dependencies: @@ -2972,7 +2972,7 @@ importers: packages/astro/test/fixtures/custom-assets-name: dependencies: '@astrojs/node': - specifier: ^9.0.2 + specifier: workspace:* version: link:../../../../integrations/node astro: specifier: workspace:* @@ -3081,7 +3081,7 @@ importers: version: 10.25.4 svelte: specifier: ^5.19.7 - version: 5.19.7 + version: 5.19.9 vue: specifier: ^3.5.13 version: 3.5.13(typescript@5.7.3) @@ -3297,7 +3297,7 @@ importers: version: 1.9.4 svelte: specifier: ^5.19.7 - version: 5.19.7 + version: 5.19.9 vue: specifier: ^3.5.13 version: 3.5.13(typescript@5.7.3) @@ -3394,13 +3394,13 @@ importers: dependencies: '@tailwindcss/vite': specifier: ^4.0.3 - version: 4.0.3(vite@6.0.11(@types/node@22.13.1)(jiti@2.4.2)(lightningcss@1.29.1)(sass@1.83.4)(yaml@2.5.1)) + version: 4.0.6(vite@6.1.0(@types/node@22.13.1)(jiti@2.4.2)(lightningcss@1.29.1)(sass@1.84.0)(yaml@2.5.1)) astro: specifier: workspace:* version: link:../../.. tailwindcss: specifier: ^4.0.3 - version: 4.0.3 + version: 4.0.6 packages/astro/test/fixtures/middleware-virtual: dependencies: @@ -3485,23 +3485,23 @@ importers: version: link:../../.. autoprefixer: specifier: ^10.4.20 - version: 10.4.20(postcss@8.5.1) + version: 10.4.20(postcss@8.5.2) postcss: specifier: ^8.5.1 - version: 8.5.1 + version: 8.5.2 solid-js: specifier: ^1.9.4 version: 1.9.4 svelte: specifier: ^5.19.7 - version: 5.19.7 + version: 5.19.9 vue: specifier: ^3.5.13 version: 3.5.13(typescript@5.7.3) devDependencies: postcss-preset-env: specifier: ^10.1.3 - version: 10.1.3(postcss@8.5.1) + version: 10.1.3(postcss@8.5.2) packages/astro/test/fixtures/preact-compat-component: dependencies: @@ -3666,6 +3666,12 @@ importers: specifier: workspace:* version: link:../../.. + packages/astro/test/fixtures/rewrite-with-base: + dependencies: + astro: + specifier: workspace:* + version: link:../../.. + packages/astro/test/fixtures/root-srcdir-css: dependencies: astro: @@ -3700,7 +3706,7 @@ importers: version: link:../../../.. svelte: specifier: ^5.19.7 - version: 5.19.7 + version: 5.19.9 packages/astro/test/fixtures/server-islands/ssr: dependencies: @@ -3712,7 +3718,7 @@ importers: version: link:../../../.. svelte: specifier: ^5.19.7 - version: 5.19.7 + version: 5.19.9 packages/astro/test/fixtures/sessions: dependencies: @@ -3787,7 +3793,7 @@ importers: version: link:../../.. svelte: specifier: ^5.19.7 - version: 5.19.7 + version: 5.19.9 packages/astro/test/fixtures/slots-vue: dependencies: @@ -3870,7 +3876,7 @@ importers: packages/astro/test/fixtures/ssr-api-route: dependencies: '@astrojs/node': - specifier: ^9.0.2 + specifier: workspace:* version: link:../../../../integrations/node astro: specifier: workspace:* @@ -4082,7 +4088,7 @@ importers: packages/astro/test/fixtures/static-build-ssr: dependencies: '@astrojs/node': - specifier: ^9.0.2 + specifier: workspace:* version: link:../../../../integrations/node '@test/static-build-pkg': specifier: workspace:* @@ -4118,7 +4124,7 @@ importers: version: link:../../.. svelte: specifier: ^5.19.7 - version: 5.19.7 + version: 5.19.9 packages/astro/test/fixtures/tailwindcss: dependencies: @@ -4127,13 +4133,13 @@ importers: version: link:../../../../integrations/mdx '@tailwindcss/vite': specifier: ^4.0.3 - version: 4.0.3(vite@6.0.11(@types/node@22.13.1)(jiti@2.4.2)(lightningcss@1.29.1)(sass@1.83.4)(yaml@2.5.1)) + version: 4.0.6(vite@6.1.0(@types/node@22.13.1)(jiti@2.4.2)(lightningcss@1.29.1)(sass@1.84.0)(yaml@2.5.1)) astro: specifier: workspace:* version: link:../../.. tailwindcss: specifier: ^4.0.3 - version: 4.0.3 + version: 4.0.6 packages/astro/test/fixtures/third-party-astro: dependencies: @@ -4190,7 +4196,7 @@ importers: version: link:../../.. vitest: specifier: ^3.0.5 - version: 3.0.5(@types/debug@4.1.12)(@types/node@22.13.1)(jiti@2.4.2)(jsdom@23.2.0)(lightningcss@1.29.1)(sass@1.83.4)(yaml@2.5.1) + version: 3.0.5(@types/debug@4.1.12)(@types/node@22.13.1)(jiti@2.4.2)(jsdom@23.2.0)(lightningcss@1.29.1)(sass@1.84.0)(yaml@2.5.1) packages/astro/test/fixtures/vue-component: dependencies: @@ -4229,7 +4235,7 @@ importers: version: link:../../.. svelte: specifier: ^5.19.7 - version: 5.19.7 + version: 5.19.9 vue: specifier: ^3.5.13 version: 3.5.13(typescript@5.7.3) @@ -4347,7 +4353,7 @@ importers: version: 5.7.3 vite: specifier: ^6.0.11 - version: 6.0.11(@types/node@22.13.1)(jiti@2.4.2)(lightningcss@1.29.1)(sass@1.83.4)(yaml@2.5.1) + version: 6.1.0(@types/node@22.13.1)(jiti@2.4.2)(lightningcss@1.29.1)(sass@1.84.0)(yaml@2.5.1) packages/db/test/fixtures/basics: dependencies: @@ -4457,7 +4463,7 @@ importers: specifier: workspace:* version: link:../../.. '@astrojs/node': - specifier: ^9.0.2 + specifier: workspace:* version: link:../../../../integrations/node '@astrojs/react': specifier: workspace:* @@ -4503,7 +4509,7 @@ importers: version: link:../../../scripts vite: specifier: ^6.0.11 - version: 6.0.11(@types/node@22.13.1)(jiti@2.4.2)(lightningcss@1.29.1)(sass@1.83.4)(yaml@2.5.1) + version: 6.1.0(@types/node@22.13.1)(jiti@2.4.2)(lightningcss@1.29.1)(sass@1.84.0)(yaml@2.5.1) packages/integrations/alpinejs/test/fixtures/basics: dependencies: @@ -4553,10 +4559,10 @@ importers: packages/integrations/cloudflare: dependencies: '@astrojs/internal-helpers': - specifier: 0.4.2 - version: 0.4.2 + specifier: workspace:* + version: link:../../internal-helpers '@astrojs/underscore-redirects': - specifier: ^0.6.0 + specifier: workspace:* version: link:../../underscore-redirects '@cloudflare/workers-types': specifier: ^4.20250109.0 @@ -4573,12 +4579,12 @@ importers: miniflare: specifier: ^3.20241230.1 version: 3.20250129.0 - tiny-glob: - specifier: ^0.2.9 - version: 0.2.9 + tinyglobby: + specifier: ^0.2.12 + version: 0.2.12 vite: specifier: ^6.0.7 - version: 6.0.11(@types/node@22.13.1)(jiti@2.4.2)(lightningcss@1.29.1)(sass@1.83.4)(yaml@2.5.1) + version: 6.1.0(@types/node@22.13.1)(jiti@2.4.2)(lightningcss@1.29.1)(sass@1.84.0)(yaml@2.5.1) wrangler: specifier: ^3.101.0 version: 3.107.3(@cloudflare/workers-types@4.20250204.0) @@ -4595,12 +4601,9 @@ importers: execa: specifier: ^8.0.1 version: 8.0.1 - fast-glob: - specifier: ^3.3.3 - version: 3.3.3 rollup: specifier: ^4.30.1 - version: 4.34.2 + version: 4.34.6 strip-ansi: specifier: ^7.1.0 version: 7.1.0 @@ -4704,7 +4707,7 @@ importers: version: link:../../../../../astro svelte: specifier: ^5.17.4 - version: 5.19.7 + version: 5.19.9 packages/integrations/cloudflare/test/fixtures/with-vue: dependencies: @@ -4768,10 +4771,10 @@ importers: version: 5.1.1 linkedom: specifier: ^0.18.7 - version: 0.18.7 + version: 0.18.9 vite: specifier: ^6.0.11 - version: 6.0.11(@types/node@22.13.1)(jiti@2.4.2)(lightningcss@1.29.1)(sass@1.83.4)(yaml@2.5.1) + version: 6.1.0(@types/node@22.13.1)(jiti@2.4.2)(lightningcss@1.29.1)(sass@1.84.0)(yaml@2.5.1) packages/integrations/markdoc/test/fixtures/content-collections: dependencies: @@ -4985,7 +4988,7 @@ importers: version: 1.0.0 linkedom: specifier: ^0.18.7 - version: 0.18.7 + version: 0.18.9 mdast-util-mdx: specifier: ^3.0.0 version: 3.0.0 @@ -5021,7 +5024,7 @@ importers: version: 11.0.5 vite: specifier: ^6.0.11 - version: 6.0.11(@types/node@22.13.1)(jiti@2.4.2)(lightningcss@1.29.1)(sass@1.83.4)(yaml@2.5.1) + version: 6.1.0(@types/node@22.13.1)(jiti@2.4.2)(lightningcss@1.29.1)(sass@1.84.0)(yaml@2.5.1) packages/integrations/mdx/test/fixtures/css-head-mdx: dependencies: @@ -5195,13 +5198,16 @@ importers: version: 2.8.2 '@vercel/nft': specifier: ^0.29.0 - version: 0.29.1(rollup@4.34.2) + version: 0.29.1(rollup@4.34.6) esbuild: specifier: ^0.24.0 version: 0.24.2 + tinyglobby: + specifier: ^0.2.12 + version: 0.2.12 vite: specifier: ^6.0.7 - version: 6.0.11(@types/node@22.13.1)(jiti@2.4.2)(lightningcss@1.29.1)(sass@1.83.4)(yaml@2.5.1) + version: 6.1.0(@types/node@22.13.1)(jiti@2.4.2)(lightningcss@1.29.1)(sass@1.84.0)(yaml@2.5.1) devDependencies: '@netlify/edge-functions': specifier: ^2.11.1 @@ -5227,9 +5233,6 @@ importers: execa: specifier: ^8.0.1 version: 8.0.1 - fast-glob: - specifier: ^3.3.3 - version: 3.3.3 strip-ansi: specifier: ^7.1.0 version: 7.1.0 @@ -5493,7 +5496,7 @@ importers: version: 7.25.9(@babel/core@7.26.0) '@preact/preset-vite': specifier: ^2.10.1 - version: 2.10.1(@babel/core@7.26.0)(preact@10.25.4)(vite@6.0.11(@types/node@22.13.1)(jiti@2.4.2)(lightningcss@1.29.1)(sass@1.83.4)(yaml@2.5.1)) + version: 2.10.1(@babel/core@7.26.0)(preact@10.25.4)(vite@6.1.0(@types/node@22.13.1)(jiti@2.4.2)(lightningcss@1.29.1)(sass@1.84.0)(yaml@2.5.1)) '@preact/signals': specifier: ^2.0.1 version: 2.0.1(preact@10.25.4) @@ -5505,7 +5508,7 @@ importers: version: 6.5.13(preact@10.25.4) vite: specifier: ^6.0.11 - version: 6.0.11(@types/node@22.13.1)(jiti@2.4.2)(lightningcss@1.29.1)(sass@1.83.4)(yaml@2.5.1) + version: 6.1.0(@types/node@22.13.1)(jiti@2.4.2)(lightningcss@1.29.1)(sass@1.84.0)(yaml@2.5.1) devDependencies: astro: specifier: workspace:* @@ -5521,13 +5524,13 @@ importers: dependencies: '@vitejs/plugin-react': specifier: ^4.3.4 - version: 4.3.4(vite@6.0.11(@types/node@22.13.1)(jiti@2.4.2)(lightningcss@1.29.1)(sass@1.83.4)(yaml@2.5.1)) + version: 4.3.4(vite@6.1.0(@types/node@22.13.1)(jiti@2.4.2)(lightningcss@1.29.1)(sass@1.84.0)(yaml@2.5.1)) ultrahtml: specifier: ^1.5.3 version: 1.5.3 vite: specifier: ^6.0.11 - version: 6.0.11(@types/node@22.13.1)(jiti@2.4.2)(lightningcss@1.29.1)(sass@1.83.4)(yaml@2.5.1) + version: 6.1.0(@types/node@22.13.1)(jiti@2.4.2)(lightningcss@1.29.1)(sass@1.84.0)(yaml@2.5.1) devDependencies: '@types/react': specifier: ^18.3.18 @@ -5585,7 +5588,7 @@ importers: version: 3.24.1 devDependencies: '@astrojs/node': - specifier: ^9.1.0 + specifier: workspace:* version: link:../node astro: specifier: workspace:* @@ -5637,10 +5640,10 @@ importers: dependencies: vite: specifier: ^6.0.11 - version: 6.0.11(@types/node@22.13.1)(jiti@2.4.2)(lightningcss@1.29.1)(sass@1.83.4)(yaml@2.5.1) + version: 6.1.0(@types/node@22.13.1)(jiti@2.4.2)(lightningcss@1.29.1)(sass@1.84.0)(yaml@2.5.1) vite-plugin-solid: specifier: ^2.11.1 - version: 2.11.1(solid-js@1.9.4)(vite@6.0.11(@types/node@22.13.1)(jiti@2.4.2)(lightningcss@1.29.1)(sass@1.83.4)(yaml@2.5.1)) + version: 2.11.1(solid-js@1.9.4)(vite@6.1.0(@types/node@22.13.1)(jiti@2.4.2)(lightningcss@1.29.1)(sass@1.84.0)(yaml@2.5.1)) devDependencies: astro: specifier: workspace:* @@ -5656,13 +5659,13 @@ importers: dependencies: '@sveltejs/vite-plugin-svelte': specifier: ^5.0.3 - version: 5.0.3(svelte@5.19.7)(vite@6.0.11(@types/node@22.13.1)(jiti@2.4.2)(lightningcss@1.29.1)(sass@1.83.4)(yaml@2.5.1)) + version: 5.0.3(svelte@5.19.9)(vite@6.1.0(@types/node@22.13.1)(jiti@2.4.2)(lightningcss@1.29.1)(sass@1.84.0)(yaml@2.5.1)) svelte2tsx: specifier: ^0.7.34 - version: 0.7.34(svelte@5.19.7)(typescript@5.7.3) + version: 0.7.34(svelte@5.19.9)(typescript@5.7.3) vite: specifier: ^6.0.11 - version: 6.0.11(@types/node@22.13.1)(jiti@2.4.2)(lightningcss@1.29.1)(sass@1.83.4)(yaml@2.5.1) + version: 6.1.0(@types/node@22.13.1)(jiti@2.4.2)(lightningcss@1.29.1)(sass@1.84.0)(yaml@2.5.1) devDependencies: astro: specifier: workspace:* @@ -5672,19 +5675,19 @@ importers: version: link:../../../scripts svelte: specifier: ^5.19.7 - version: 5.19.7 + version: 5.19.9 packages/integrations/tailwind: dependencies: autoprefixer: specifier: ^10.4.20 - version: 10.4.20(postcss@8.5.1) + version: 10.4.20(postcss@8.5.2) postcss: specifier: ^8.5.1 - version: 8.5.1 + version: 8.5.2 postcss-load-config: specifier: ^4.0.2 - version: 4.0.2(postcss@8.5.1) + version: 4.0.2(postcss@8.5.2) devDependencies: astro: specifier: workspace:* @@ -5697,7 +5700,7 @@ importers: version: 3.4.17 vite: specifier: ^6.0.11 - version: 6.0.11(@types/node@22.13.1)(jiti@2.4.2)(lightningcss@1.29.1)(sass@1.83.4)(yaml@2.5.1) + version: 6.1.0(@types/node@22.13.1)(jiti@2.4.2)(lightningcss@1.29.1)(sass@1.84.0)(yaml@2.5.1) packages/integrations/tailwind/test/fixtures/basic: dependencies: @@ -5711,26 +5714,26 @@ importers: packages/integrations/vercel: dependencies: '@astrojs/internal-helpers': - specifier: ^0.5.1 + specifier: workspace:* version: link:../../internal-helpers '@vercel/analytics': specifier: ^1.4.1 - version: 1.4.1(react@19.0.0)(svelte@5.19.7)(vue@3.5.13(typescript@5.7.3)) + version: 1.5.0(react@19.0.0)(svelte@5.19.9)(vue@3.5.13(typescript@5.7.3)) '@vercel/edge': specifier: ^1.2.1 version: 1.2.1 '@vercel/nft': specifier: ^0.29.0 - version: 0.29.1(rollup@4.34.2) + version: 0.29.1(rollup@4.34.6) '@vercel/routing-utils': specifier: ^5.0.4 version: 5.0.4 esbuild: specifier: ^0.24.0 version: 0.24.2 - fast-glob: - specifier: ^3.3.3 - version: 3.3.3 + tinyglobby: + specifier: ^0.2.12 + version: 0.2.12 devDependencies: astro: specifier: workspace:* @@ -5920,19 +5923,19 @@ importers: dependencies: '@vitejs/plugin-vue': specifier: ^5.2.1 - version: 5.2.1(vite@6.0.11(@types/node@22.13.1)(jiti@2.4.2)(lightningcss@1.29.1)(sass@1.83.4)(yaml@2.5.1))(vue@3.5.13(typescript@5.7.3)) + version: 5.2.1(vite@6.1.0(@types/node@22.13.1)(jiti@2.4.2)(lightningcss@1.29.1)(sass@1.84.0)(yaml@2.5.1))(vue@3.5.13(typescript@5.7.3)) '@vitejs/plugin-vue-jsx': specifier: ^4.1.1 - version: 4.1.1(vite@6.0.11(@types/node@22.13.1)(jiti@2.4.2)(lightningcss@1.29.1)(sass@1.83.4)(yaml@2.5.1))(vue@3.5.13(typescript@5.7.3)) + version: 4.1.1(vite@6.1.0(@types/node@22.13.1)(jiti@2.4.2)(lightningcss@1.29.1)(sass@1.84.0)(yaml@2.5.1))(vue@3.5.13(typescript@5.7.3)) '@vue/compiler-sfc': specifier: ^3.5.13 version: 3.5.13 vite: specifier: ^6.0.11 - version: 6.0.11(@types/node@22.13.1)(jiti@2.4.2)(lightningcss@1.29.1)(sass@1.83.4)(yaml@2.5.1) + version: 6.1.0(@types/node@22.13.1)(jiti@2.4.2)(lightningcss@1.29.1)(sass@1.84.0)(yaml@2.5.1) vite-plugin-vue-devtools: specifier: ^7.7.1 - version: 7.7.1(rollup@4.34.2)(vite@6.0.11(@types/node@22.13.1)(jiti@2.4.2)(lightningcss@1.29.1)(sass@1.83.4)(yaml@2.5.1))(vue@3.5.13(typescript@5.7.3)) + version: 7.7.1(rollup@4.34.6)(vite@6.1.0(@types/node@22.13.1)(jiti@2.4.2)(lightningcss@1.29.1)(sass@1.84.0)(yaml@2.5.1))(vue@3.5.13(typescript@5.7.3)) devDependencies: astro: specifier: workspace:* @@ -5945,7 +5948,7 @@ importers: version: 1.0.0 linkedom: specifier: ^0.18.7 - version: 0.18.7 + version: 0.18.9 vue: specifier: ^3.5.13 version: 3.5.13(typescript@5.7.3) @@ -6048,7 +6051,7 @@ importers: version: link:../../../scripts linkedom: specifier: ^0.18.7 - version: 0.18.7 + version: 0.18.9 packages/integrations/web-vitals/test/fixtures/basics: dependencies: @@ -6056,7 +6059,7 @@ importers: specifier: workspace:* version: link:../../../../../db '@astrojs/node': - specifier: ^9.0.2 + specifier: workspace:* version: link:../../../../node '@astrojs/web-vitals': specifier: workspace:* @@ -6073,6 +6076,9 @@ importers: packages/markdown/remark: dependencies: + '@astrojs/internal-helpers': + specifier: workspace:* + version: link:../../internal-helpers '@astrojs/prism': specifier: workspace:* version: link:../../astro-prism @@ -6182,7 +6188,7 @@ importers: version: 5.7.3 vite: specifier: ^6.0.11 - version: 6.0.11(@types/node@22.13.1)(jiti@2.4.2)(lightningcss@1.29.1)(sass@1.83.4)(yaml@2.5.1) + version: 6.1.0(@types/node@22.13.1)(jiti@2.4.2)(lightningcss@1.29.1)(sass@1.84.0)(yaml@2.5.1) packages/telemetry: dependencies: @@ -6263,12 +6269,6 @@ importers: esbuild: specifier: ^0.24.2 version: 0.24.2 - esbuild-plugin-copy: - specifier: ^2.1.1 - version: 2.1.1(esbuild@0.24.2) - fast-glob: - specifier: ^3.3.3 - version: 3.3.3 kleur: specifier: ^4.1.5 version: 4.1.5 @@ -6278,6 +6278,9 @@ importers: tinyexec: specifier: ^0.3.2 version: 0.3.2 + tinyglobby: + specifier: ^0.2.12 + version: 0.2.12 tsconfck: specifier: ^3.1.4 version: 3.1.4(typescript@5.7.3) @@ -6345,9 +6348,6 @@ packages: '@astrojs/compiler@2.10.3': resolution: {integrity: sha512-bL/O7YBxsFt55YHU021oL+xz+B/9HvGNId3F9xURN16aeqDK9juHGktdkCSXz+U4nqFACq6ZFvWomOzhV+zfPw==} - '@astrojs/internal-helpers@0.4.2': - resolution: {integrity: sha512-EdDWkC3JJVcpGpqJAU/5hSk2LKXyG3mNGkzGoAuyK+xoPHbaVdSuIWoN1QTnmK3N/gGfaaAfM8gO2KDCAW7S3w==} - '@astrojs/language-server@2.15.0': resolution: {integrity: sha512-wJHSjGApm5X8Rg1GvkevoatZBfvaFizY4kCPvuSYgs3jGCobuY3KstJGKC1yNLsRJlDweHruP+J54iKn9vEKoA==} hasBin: true @@ -7300,12 +7300,16 @@ packages: resolution: {integrity: sha512-gFHJ+xBOo4G3WRlR1e/3G8A6/KZAH6zcE/hkLRCZTi/B9avAG365QhFA8uOGzTMqgTghpn7/fSnscW++dpMSAw==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + '@eslint/core@0.11.0': + resolution: {integrity: sha512-DWUB2pksgNEb6Bz2fggIy1wh6fGgZP4Xyy/Mt0QZPiloKKXerbqq9D3SBQTlCRYOrcRPu4vuz+CGjwdfqxnoWA==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + '@eslint/eslintrc@3.2.0': resolution: {integrity: sha512-grOjVNN8P3hjJn/eIETF1wwd12DdnwFDoyceUJLYYdkpbwq3nLi+4fqrTAONx7XDALqlL220wC/RHSC/QTI/0w==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - '@eslint/js@9.19.0': - resolution: {integrity: sha512-rbq9/g38qjfqFLOVPvwjIvFFdNziEC5S65jmjPw5r6A//QH+W91akh9irMwjDN8zKUTak6W9EsAv4m/7Wnw0UQ==} + '@eslint/js@9.20.0': + resolution: {integrity: sha512-iZA07H9io9Wn836aVTytRaNqh00Sad+EamwOVJT12GTLw1VGMFV/4JaME+JjLtr9fiGaoWgYnS54wrfWsSs4oQ==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} '@eslint/object-schema@2.1.5': @@ -7868,98 +7872,98 @@ packages: rollup: optional: true - '@rollup/rollup-android-arm-eabi@4.34.2': - resolution: {integrity: sha512-6Fyg9yQbwJR+ykVdT9sid1oc2ewejS6h4wzQltmJfSW53N60G/ah9pngXGANdy9/aaE/TcUFpWosdm7JXS1WTQ==} + '@rollup/rollup-android-arm-eabi@4.34.6': + resolution: {integrity: sha512-+GcCXtOQoWuC7hhX1P00LqjjIiS/iOouHXhMdiDSnq/1DGTox4SpUvO52Xm+div6+106r+TcvOeo/cxvyEyTgg==} cpu: [arm] os: [android] - '@rollup/rollup-android-arm64@4.34.2': - resolution: {integrity: sha512-K5GfWe+vtQ3kyEbihrimM38UgX57UqHp+oME7X/EX9Im6suwZfa7Hsr8AtzbJvukTpwMGs+4s29YMSO3rwWtsw==} + '@rollup/rollup-android-arm64@4.34.6': + resolution: {integrity: sha512-E8+2qCIjciYUnCa1AiVF1BkRgqIGW9KzJeesQqVfyRITGQN+dFuoivO0hnro1DjT74wXLRZ7QF8MIbz+luGaJA==} cpu: [arm64] os: [android] - '@rollup/rollup-darwin-arm64@4.34.2': - resolution: {integrity: sha512-PSN58XG/V/tzqDb9kDGutUruycgylMlUE59f40ny6QIRNsTEIZsrNQTJKUN2keMMSmlzgunMFqyaGLmly39sug==} + '@rollup/rollup-darwin-arm64@4.34.6': + resolution: {integrity: sha512-z9Ib+OzqN3DZEjX7PDQMHEhtF+t6Mi2z/ueChQPLS/qUMKY7Ybn5A2ggFoKRNRh1q1T03YTQfBTQCJZiepESAg==} cpu: [arm64] os: [darwin] - '@rollup/rollup-darwin-x64@4.34.2': - resolution: {integrity: sha512-gQhK788rQJm9pzmXyfBB84VHViDERhAhzGafw+E5mUpnGKuxZGkMVDa3wgDFKT6ukLC5V7QTifzsUKdNVxp5qQ==} + '@rollup/rollup-darwin-x64@4.34.6': + resolution: {integrity: sha512-PShKVY4u0FDAR7jskyFIYVyHEPCPnIQY8s5OcXkdU8mz3Y7eXDJPdyM/ZWjkYdR2m0izD9HHWA8sGcXn+Qrsyg==} cpu: [x64] os: [darwin] - '@rollup/rollup-freebsd-arm64@4.34.2': - resolution: {integrity: sha512-eiaHgQwGPpxLC3+zTAcdKl4VsBl3r0AiJOd1Um/ArEzAjN/dbPK1nROHrVkdnoE6p7Svvn04w3f/jEZSTVHunA==} + '@rollup/rollup-freebsd-arm64@4.34.6': + resolution: {integrity: sha512-YSwyOqlDAdKqs0iKuqvRHLN4SrD2TiswfoLfvYXseKbL47ht1grQpq46MSiQAx6rQEN8o8URtpXARCpqabqxGQ==} cpu: [arm64] os: [freebsd] - '@rollup/rollup-freebsd-x64@4.34.2': - resolution: {integrity: sha512-lhdiwQ+jf8pewYOTG4bag0Qd68Jn1v2gO1i0mTuiD+Qkt5vNfHVK/jrT7uVvycV8ZchlzXp5HDVmhpzjC6mh0g==} + '@rollup/rollup-freebsd-x64@4.34.6': + resolution: {integrity: sha512-HEP4CgPAY1RxXwwL5sPFv6BBM3tVeLnshF03HMhJYCNc6kvSqBgTMmsEjb72RkZBAWIqiPUyF1JpEBv5XT9wKQ==} cpu: [x64] os: [freebsd] - '@rollup/rollup-linux-arm-gnueabihf@4.34.2': - resolution: {integrity: sha512-lfqTpWjSvbgQP1vqGTXdv+/kxIznKXZlI109WkIFPbud41bjigjNmOAAKoazmRGx+k9e3rtIdbq2pQZPV1pMig==} + '@rollup/rollup-linux-arm-gnueabihf@4.34.6': + resolution: {integrity: sha512-88fSzjC5xeH9S2Vg3rPgXJULkHcLYMkh8faix8DX4h4TIAL65ekwuQMA/g2CXq8W+NJC43V6fUpYZNjaX3+IIg==} cpu: [arm] os: [linux] - '@rollup/rollup-linux-arm-musleabihf@4.34.2': - resolution: {integrity: sha512-RGjqULqIurqqv+NJTyuPgdZhka8ImMLB32YwUle2BPTDqDoXNgwFjdjQC59FbSk08z0IqlRJjrJ0AvDQ5W5lpw==} + '@rollup/rollup-linux-arm-musleabihf@4.34.6': + resolution: {integrity: sha512-wM4ztnutBqYFyvNeR7Av+reWI/enK9tDOTKNF+6Kk2Q96k9bwhDDOlnCUNRPvromlVXo04riSliMBs/Z7RteEg==} cpu: [arm] os: [linux] - '@rollup/rollup-linux-arm64-gnu@4.34.2': - resolution: {integrity: sha512-ZvkPiheyXtXlFqHpsdgscx+tZ7hoR59vOettvArinEspq5fxSDSgfF+L5wqqJ9R4t+n53nyn0sKxeXlik7AY9Q==} + '@rollup/rollup-linux-arm64-gnu@4.34.6': + resolution: {integrity: sha512-9RyprECbRa9zEjXLtvvshhw4CMrRa3K+0wcp3KME0zmBe1ILmvcVHnypZ/aIDXpRyfhSYSuN4EPdCCj5Du8FIA==} cpu: [arm64] os: [linux] - '@rollup/rollup-linux-arm64-musl@4.34.2': - resolution: {integrity: sha512-UlFk+E46TZEoxD9ufLKDBzfSG7Ki03fo6hsNRRRHF+KuvNZ5vd1RRVQm8YZlGsjcJG8R252XFK0xNPay+4WV7w==} + '@rollup/rollup-linux-arm64-musl@4.34.6': + resolution: {integrity: sha512-qTmklhCTyaJSB05S+iSovfo++EwnIEZxHkzv5dep4qoszUMX5Ca4WM4zAVUMbfdviLgCSQOu5oU8YoGk1s6M9Q==} cpu: [arm64] os: [linux] - '@rollup/rollup-linux-loongarch64-gnu@4.34.2': - resolution: {integrity: sha512-hJhfsD9ykx59jZuuoQgYT1GEcNNi3RCoEmbo5OGfG8RlHOiVS7iVNev9rhLKh7UBYq409f4uEw0cclTXx8nh8Q==} + '@rollup/rollup-linux-loongarch64-gnu@4.34.6': + resolution: {integrity: sha512-4Qmkaps9yqmpjY5pvpkfOerYgKNUGzQpFxV6rnS7c/JfYbDSU0y6WpbbredB5cCpLFGJEqYX40WUmxMkwhWCjw==} cpu: [loong64] os: [linux] - '@rollup/rollup-linux-powerpc64le-gnu@4.34.2': - resolution: {integrity: sha512-g/O5IpgtrQqPegvqopvmdCF9vneLE7eqYfdPWW8yjPS8f63DNam3U4ARL1PNNB64XHZDHKpvO2Giftf43puB8Q==} + '@rollup/rollup-linux-powerpc64le-gnu@4.34.6': + resolution: {integrity: sha512-Zsrtux3PuaxuBTX/zHdLaFmcofWGzaWW1scwLU3ZbW/X+hSsFbz9wDIp6XvnT7pzYRl9MezWqEqKy7ssmDEnuQ==} cpu: [ppc64] os: [linux] - '@rollup/rollup-linux-riscv64-gnu@4.34.2': - resolution: {integrity: sha512-bSQijDC96M6PuooOuXHpvXUYiIwsnDmqGU8+br2U7iPoykNi9JtMUpN7K6xml29e0evK0/g0D1qbAUzWZFHY5Q==} + '@rollup/rollup-linux-riscv64-gnu@4.34.6': + resolution: {integrity: sha512-aK+Zp+CRM55iPrlyKiU3/zyhgzWBxLVrw2mwiQSYJRobCURb781+XstzvA8Gkjg/hbdQFuDw44aUOxVQFycrAg==} cpu: [riscv64] os: [linux] - '@rollup/rollup-linux-s390x-gnu@4.34.2': - resolution: {integrity: sha512-49TtdeVAsdRuiUHXPrFVucaP4SivazetGUVH8CIxVsNsaPHV4PFkpLmH9LeqU/R4Nbgky9lzX5Xe1NrzLyraVA==} + '@rollup/rollup-linux-s390x-gnu@4.34.6': + resolution: {integrity: sha512-WoKLVrY9ogmaYPXwTH326+ErlCIgMmsoRSx6bO+l68YgJnlOXhygDYSZe/qbUJCSiCiZAQ+tKm88NcWuUXqOzw==} cpu: [s390x] os: [linux] - '@rollup/rollup-linux-x64-gnu@4.34.2': - resolution: {integrity: sha512-j+jFdfOycLIQ7FWKka9Zd3qvsIyugg5LeZuHF6kFlXo6MSOc6R1w37YUVy8VpAKd81LMWGi5g9J25P09M0SSIw==} + '@rollup/rollup-linux-x64-gnu@4.34.6': + resolution: {integrity: sha512-Sht4aFvmA4ToHd2vFzwMFaQCiYm2lDFho5rPcvPBT5pCdC+GwHG6CMch4GQfmWTQ1SwRKS0dhDYb54khSrjDWw==} cpu: [x64] os: [linux] - '@rollup/rollup-linux-x64-musl@4.34.2': - resolution: {integrity: sha512-aDPHyM/D2SpXfSNCVWCxyHmOqN9qb7SWkY1+vaXqMNMXslZYnwh9V/UCudl6psyG0v6Ukj7pXanIpfZwCOEMUg==} + '@rollup/rollup-linux-x64-musl@4.34.6': + resolution: {integrity: sha512-zmmpOQh8vXc2QITsnCiODCDGXFC8LMi64+/oPpPx5qz3pqv0s6x46ps4xoycfUiVZps5PFn1gksZzo4RGTKT+A==} cpu: [x64] os: [linux] - '@rollup/rollup-win32-arm64-msvc@4.34.2': - resolution: {integrity: sha512-LQRkCyUBnAo7r8dbEdtNU08EKLCJMgAk2oP5H3R7BnUlKLqgR3dUjrLBVirmc1RK6U6qhtDw29Dimeer8d5hzQ==} + '@rollup/rollup-win32-arm64-msvc@4.34.6': + resolution: {integrity: sha512-3/q1qUsO/tLqGBaD4uXsB6coVGB3usxw3qyeVb59aArCgedSF66MPdgRStUd7vbZOsko/CgVaY5fo2vkvPLWiA==} cpu: [arm64] os: [win32] - '@rollup/rollup-win32-ia32-msvc@4.34.2': - resolution: {integrity: sha512-wt8OhpQUi6JuPFkm1wbVi1BByeag87LDFzeKSXzIdGcX4bMLqORTtKxLoCbV57BHYNSUSOKlSL4BYYUghainYA==} + '@rollup/rollup-win32-ia32-msvc@4.34.6': + resolution: {integrity: sha512-oLHxuyywc6efdKVTxvc0135zPrRdtYVjtVD5GUm55I3ODxhU/PwkQFD97z16Xzxa1Fz0AEe4W/2hzRtd+IfpOA==} cpu: [ia32] os: [win32] - '@rollup/rollup-win32-x64-msvc@4.34.2': - resolution: {integrity: sha512-rUrqINax0TvrPBXrFKg0YbQx18NpPN3NNrgmaao9xRNbTwek7lOXObhx8tQy8gelmQ/gLaGy1WptpU2eKJZImg==} + '@rollup/rollup-win32-x64-msvc@4.34.6': + resolution: {integrity: sha512-0PVwmgzZ8+TZ9oGBmdZoQVXflbvuwzN/HRclujpl4N/q3i+y0lqLw8n1bXA8ru3sApDjlmONaNAuYr38y1Kr9w==} cpu: [x64] os: [win32] @@ -7987,10 +7991,6 @@ packages: '@shikijs/vscode-textmate@10.0.1': resolution: {integrity: sha512-fTIQwLF+Qhuws31iw7Ncl1R3HUDtGwIipiJ9iU+UsDUwMhegFcQKQHd51nZjb7CArq0MvON8rbgCGQYWHUKAdg==} - '@sindresorhus/merge-streams@2.3.0': - resolution: {integrity: sha512-LtoMMhxAlorcGhmFYI+LhPgbPZCkgP6ra1YL604EeF6U98pLlQ3iWIGMdWSC+vWmPBWBNgmDBAhnAobLROJmwg==} - engines: {node: '>=18'} - '@sindresorhus/merge-streams@4.0.0': resolution: {integrity: sha512-tlqY9xq5ukxTUZBmoOp+m61cqwQD5pHJtFY3Mn8CA8ps6yghLH/Hw8UPdqg4OLmFW3IFlcXnQNmo/dh8HzXYIQ==} engines: {node: '>=18'} @@ -8015,81 +8015,81 @@ packages: svelte: ^5.0.0 vite: ^6.0.0 - '@tailwindcss/node@4.0.3': - resolution: {integrity: sha512-QsVJokOl0pJ4AbJV33D2npvLcHGPWi5MOSZtrtE0GT3tSx+3D0JE2lokLA8yHS1x3oCY/3IyRyy7XX6tmzid7A==} + '@tailwindcss/node@4.0.6': + resolution: {integrity: sha512-jb6E0WeSq7OQbVYcIJ6LxnZTeC4HjMvbzFBMCrQff4R50HBlo/obmYNk6V2GCUXDeqiXtvtrQgcIbT+/boB03Q==} - '@tailwindcss/oxide-android-arm64@4.0.3': - resolution: {integrity: sha512-S8XOTQuMnpijZRlPm5HBzPJjZ28quB+40LSRHjRnQF6rRYKsvpr1qkY7dfwsetNdd+kMLOMDsvmuT8WnqqETvg==} + '@tailwindcss/oxide-android-arm64@4.0.6': + resolution: {integrity: sha512-xDbym6bDPW3D2XqQqX3PjqW3CKGe1KXH7Fdkc60sX5ZLVUbzPkFeunQaoP+BuYlLc2cC1FoClrIRYnRzof9Sow==} engines: {node: '>= 10'} cpu: [arm64] os: [android] - '@tailwindcss/oxide-darwin-arm64@4.0.3': - resolution: {integrity: sha512-smrY2DpzhXvgDhZtQlYAl8+vxJ04lv2/64C1eiRxvsRT2nkw/q+zA1/eAYKvUHat6cIuwqDku3QucmrUT6pCeg==} + '@tailwindcss/oxide-darwin-arm64@4.0.6': + resolution: {integrity: sha512-1f71/ju/tvyGl5c2bDkchZHy8p8EK/tDHCxlpYJ1hGNvsYihZNurxVpZ0DefpN7cNc9RTT8DjrRoV8xXZKKRjg==} engines: {node: '>= 10'} cpu: [arm64] os: [darwin] - '@tailwindcss/oxide-darwin-x64@4.0.3': - resolution: {integrity: sha512-NTz8x/LcGUjpZAWUxz0ZuzHao90Wj9spoQgomwB+/hgceh5gcJDfvaBYqxLFpKzVglpnbDSq1Fg0p0zI4oa5Pg==} + '@tailwindcss/oxide-darwin-x64@4.0.6': + resolution: {integrity: sha512-s/hg/ZPgxFIrGMb0kqyeaqZt505P891buUkSezmrDY6lxv2ixIELAlOcUVTkVh245SeaeEiUVUPiUN37cwoL2g==} engines: {node: '>= 10'} cpu: [x64] os: [darwin] - '@tailwindcss/oxide-freebsd-x64@4.0.3': - resolution: {integrity: sha512-yQc9Q0JCOp3kkAV8gKgDctXO60IkQhHpqGB+KgOccDtD5UmN6Q5+gd+lcsDyQ7N8dRuK1fAud51xQpZJgKfm7g==} + '@tailwindcss/oxide-freebsd-x64@4.0.6': + resolution: {integrity: sha512-Z3Wo8FWZnmio8+xlcbb7JUo/hqRMSmhQw8IGIRoRJ7GmLR0C+25Wq+bEX/135xe/yEle2lFkhu9JBHd4wZYiig==} engines: {node: '>= 10'} cpu: [x64] os: [freebsd] - '@tailwindcss/oxide-linux-arm-gnueabihf@4.0.3': - resolution: {integrity: sha512-e1ivVMLSnxTOU1O3npnxN16FEyWM/g3SuH2pP6udxXwa0/SnSAijRwcAYRpqIlhVKujr158S8UeHxQjC4fGl4w==} + '@tailwindcss/oxide-linux-arm-gnueabihf@4.0.6': + resolution: {integrity: sha512-SNSwkkim1myAgmnbHs4EjXsPL7rQbVGtjcok5EaIzkHkCAVK9QBQsWeP2Jm2/JJhq4wdx8tZB9Y7psMzHYWCkA==} engines: {node: '>= 10'} cpu: [arm] os: [linux] - '@tailwindcss/oxide-linux-arm64-gnu@4.0.3': - resolution: {integrity: sha512-PLrToqQqX6sdJ9DmMi8IxZWWrfjc9pdi9AEEPTrtMts3Jm9HBi1WqEeF1VwZZ2aW9TXloE5OwA35zuuq1Bhb/Q==} + '@tailwindcss/oxide-linux-arm64-gnu@4.0.6': + resolution: {integrity: sha512-tJ+mevtSDMQhKlwCCuhsFEFg058kBiSy4TkoeBG921EfrHKmexOaCyFKYhVXy4JtkaeeOcjJnCLasEeqml4i+Q==} engines: {node: '>= 10'} cpu: [arm64] os: [linux] - '@tailwindcss/oxide-linux-arm64-musl@4.0.3': - resolution: {integrity: sha512-YlzRxx7N1ampfgSKzEDw0iwDkJXUInR4cgNEqmR4TzHkU2Vhg59CGPJrTI7dxOBofD8+O35R13Nk9Ytyv0JUFg==} + '@tailwindcss/oxide-linux-arm64-musl@4.0.6': + resolution: {integrity: sha512-IoArz1vfuTR4rALXMUXI/GWWfx2EaO4gFNtBNkDNOYhlTD4NVEwE45nbBoojYiTulajI4c2XH8UmVEVJTOJKxA==} engines: {node: '>= 10'} cpu: [arm64] os: [linux] - '@tailwindcss/oxide-linux-x64-gnu@4.0.3': - resolution: {integrity: sha512-Xfc3z/li6XkuD7Hs+Uk6pjyCXnfnd9zuQTKOyDTZJ544xc2yoMKUkuDw6Et9wb31MzU2/c0CIUpTDa71lL9KHw==} + '@tailwindcss/oxide-linux-x64-gnu@4.0.6': + resolution: {integrity: sha512-QtsUfLkEAeWAC3Owx9Kg+7JdzE+k9drPhwTAXbXugYB9RZUnEWWx5x3q/au6TvUYcL+n0RBqDEO2gucZRvRFgQ==} engines: {node: '>= 10'} cpu: [x64] os: [linux] - '@tailwindcss/oxide-linux-x64-musl@4.0.3': - resolution: {integrity: sha512-ugKVqKzwa/cjmqSQG17aS9DYrEcQ/a5NITcgmOr3JLW4Iz64C37eoDlkC8tIepD3S/Td/ywKAolTQ8fKbjEL4g==} + '@tailwindcss/oxide-linux-x64-musl@4.0.6': + resolution: {integrity: sha512-QthvJqIji2KlGNwLcK/PPYo7w1Wsi/8NK0wAtRGbv4eOPdZHkQ9KUk+oCoP20oPO7i2a6X1aBAFQEL7i08nNMA==} engines: {node: '>= 10'} cpu: [x64] os: [linux] - '@tailwindcss/oxide-win32-arm64-msvc@4.0.3': - resolution: {integrity: sha512-qHPDMl+UUwsk1RMJMgAXvhraWqUUT+LR/tkXix5RA39UGxtTrHwsLIN1AhNxI5i2RFXAXfmFXDqZCdyQ4dWmAQ==} + '@tailwindcss/oxide-win32-arm64-msvc@4.0.6': + resolution: {integrity: sha512-+oka+dYX8jy9iP00DJ9Y100XsqvbqR5s0yfMZJuPR1H/lDVtDfsZiSix1UFBQ3X1HWxoEEl6iXNJHWd56TocVw==} engines: {node: '>= 10'} cpu: [arm64] os: [win32] - '@tailwindcss/oxide-win32-x64-msvc@4.0.3': - resolution: {integrity: sha512-+ujwN4phBGyOsPyLgGgeCyUm4Mul+gqWVCIGuSXWgrx9xVUnf6LVXrw0BDBc9Aq1S2qMyOTX4OkCGbZeoIo8Qw==} + '@tailwindcss/oxide-win32-x64-msvc@4.0.6': + resolution: {integrity: sha512-+o+juAkik4p8Ue/0LiflQXPmVatl6Av3LEZXpBTfg4qkMIbZdhCGWFzHdt2NjoMiLOJCFDddoV6GYaimvK1Olw==} engines: {node: '>= 10'} cpu: [x64] os: [win32] - '@tailwindcss/oxide@4.0.3': - resolution: {integrity: sha512-FFcp3VNvRjjmFA39ORM27g2mbflMQljhvM7gxBAujHxUy4LXlKa6yMF9wbHdTbPqTONiCyyOYxccvJyVyI/XBg==} + '@tailwindcss/oxide@4.0.6': + resolution: {integrity: sha512-lVyKV2y58UE9CeKVcYykULe9QaE1dtKdxDEdrTPIdbzRgBk6bdxHNAoDqvcqXbIGXubn3VOl1O/CFF77v/EqSA==} engines: {node: '>= 10'} - '@tailwindcss/vite@4.0.3': - resolution: {integrity: sha512-Qj6rSO+EvXnNDymloKZ11D54JJTnDrkRWJBzNHENDxjt0HtrCZJbSLIrcJ/WdaoU4othrel/oFqHpO/doxIS/Q==} + '@tailwindcss/vite@4.0.6': + resolution: {integrity: sha512-O25vZ/URWbZ2JHdk2o8wH7jOKqEGCsYmX3GwGmYS5DjE4X3mpf93a72Rn7VRnefldNauBzr5z2hfZptmBNtTUQ==} peerDependencies: vite: ^5.2.0 || ^6 @@ -8118,9 +8118,6 @@ packages: '@types/babel__traverse@7.20.6': resolution: {integrity: sha512-r1bzfrm0tomOI8g1SzvCaQHo6Lcv6zu0EA+W2kHrt8dyrHQxGzBBL4kdkzIS+jBMV+EYcMAEAqXqYaLJq5rOZg==} - '@types/braces@3.0.4': - resolution: {integrity: sha512-0WR3b8eaISjEW7RpZnclONaLFDf7buaowRHdqLp4vLj54AsSAYWfh3DRbfiYJY9XDxMgx1B4sE1Afw2PGpuHOA==} - '@types/canvas-confetti@1.9.0': resolution: {integrity: sha512-aBGj/dULrimR1XDZLtG9JwxX1b4HPRF6CX9Yfwh3NvstZEm1ZL7RBnel4keCPSqs1ANRu1u2Aoz9R+VmtjYuTg==} @@ -8190,9 +8187,6 @@ packages: '@types/mdx@2.0.13': resolution: {integrity: sha512-+OWZQfAYyio6YkJb3HLxDrvnx6SWWDbC0zVPfBRzUk0/nqoDyf6dNxQi3eArPe8rJ473nobTMQ/8Zk+LxJ+Yuw==} - '@types/micromatch@4.0.9': - resolution: {integrity: sha512-7V+8ncr22h4UoYRLnLXSpTxjQrNUXtWHGeMPRJt1nULXI57G9bIcpyrHlmrQ7QK24EyyuXvYcSSWAM8GA9nqCg==} - '@types/mime@1.3.5': resolution: {integrity: sha512-/pyBZWSLD2n0dcHE3hq8s8ZvcETHtEuF+3E7XVt0Ig2nvsVQXdghHVcEkIWjy9A0wKfTn97a/PSDYohKIlnP/w==} @@ -8214,6 +8208,9 @@ packages: '@types/node@22.13.1': resolution: {integrity: sha512-jK8uzQlrvXqEU91UxiK5J7pKHyzgnI1Qnl0QDHIgVGuolJhRb9EEl28Cj9b3rGR8B2lhFCtvIm5os8lFnO/1Ew==} + '@types/picomatch@3.0.2': + resolution: {integrity: sha512-n0i8TD3UDB7paoMMxA3Y65vUncFJXjcUf7lQY7YyKGl6031FNjfsLs6pdLFCy2GNFxItPJG8GvvpbZc2skH7WA==} + '@types/prismjs@1.26.5': resolution: {integrity: sha512-AUZTa7hQ2KY5L7AmtSiqxlhWxb4ina0yd8hNbl4TWuqnv/pFP0nDMb3YrfSBf4hJVGLh2YEIBfKaBW/9UEl6IQ==} @@ -8267,51 +8264,51 @@ packages: '@types/yargs-parser@21.0.3': resolution: {integrity: sha512-I4q9QU9MQv4oEOz4tAHJtNz1cwuLxn2F3xcc2iV5WdqLPpUnj30aUuxt1mAxYTG+oe8CZMV/+6rU4S4gRDzqtQ==} - '@typescript-eslint/eslint-plugin@8.23.0': - resolution: {integrity: sha512-vBz65tJgRrA1Q5gWlRfvoH+w943dq9K1p1yDBY2pc+a1nbBLZp7fB9+Hk8DaALUbzjqlMfgaqlVPT1REJdkt/w==} + '@typescript-eslint/eslint-plugin@8.24.0': + resolution: {integrity: sha512-aFcXEJJCI4gUdXgoo/j9udUYIHgF23MFkg09LFz2dzEmU0+1Plk4rQWv/IYKvPHAtlkkGoB3m5e6oUp+JPsNaQ==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: '@typescript-eslint/parser': ^8.0.0 || ^8.0.0-alpha.0 eslint: ^8.57.0 || ^9.0.0 typescript: '>=4.8.4 <5.8.0' - '@typescript-eslint/parser@8.23.0': - resolution: {integrity: sha512-h2lUByouOXFAlMec2mILeELUbME5SZRN/7R9Cw2RD2lRQQY08MWMM+PmVVKKJNK1aIwqTo9t/0CvOxwPbRIE2Q==} + '@typescript-eslint/parser@8.24.0': + resolution: {integrity: sha512-MFDaO9CYiard9j9VepMNa9MTcqVvSny2N4hkY6roquzj8pdCBRENhErrteaQuu7Yjn1ppk0v1/ZF9CG3KIlrTA==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: eslint: ^8.57.0 || ^9.0.0 typescript: '>=4.8.4 <5.8.0' - '@typescript-eslint/scope-manager@8.23.0': - resolution: {integrity: sha512-OGqo7+dXHqI7Hfm+WqkZjKjsiRtFUQHPdGMXzk5mYXhJUedO7e/Y7i8AK3MyLMgZR93TX4bIzYrfyVjLC+0VSw==} + '@typescript-eslint/scope-manager@8.24.0': + resolution: {integrity: sha512-HZIX0UByphEtdVBKaQBgTDdn9z16l4aTUz8e8zPQnyxwHBtf5vtl1L+OhH+m1FGV9DrRmoDuYKqzVrvWDcDozw==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - '@typescript-eslint/type-utils@8.23.0': - resolution: {integrity: sha512-iIuLdYpQWZKbiH+RkCGc6iu+VwscP5rCtQ1lyQ7TYuKLrcZoeJVpcLiG8DliXVkUxirW/PWlmS+d6yD51L9jvA==} + '@typescript-eslint/type-utils@8.24.0': + resolution: {integrity: sha512-8fitJudrnY8aq0F1wMiPM1UUgiXQRJ5i8tFjq9kGfRajU+dbPyOuHbl0qRopLEidy0MwqgTHDt6CnSeXanNIwA==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: eslint: ^8.57.0 || ^9.0.0 typescript: '>=4.8.4 <5.8.0' - '@typescript-eslint/types@8.23.0': - resolution: {integrity: sha512-1sK4ILJbCmZOTt9k4vkoulT6/y5CHJ1qUYxqpF1K/DBAd8+ZUL4LlSCxOssuH5m4rUaaN0uS0HlVPvd45zjduQ==} + '@typescript-eslint/types@8.24.0': + resolution: {integrity: sha512-VacJCBTyje7HGAw7xp11q439A+zeGG0p0/p2zsZwpnMzjPB5WteaWqt4g2iysgGFafrqvyLWqq6ZPZAOCoefCw==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - '@typescript-eslint/typescript-estree@8.23.0': - resolution: {integrity: sha512-LcqzfipsB8RTvH8FX24W4UUFk1bl+0yTOf9ZA08XngFwMg4Kj8A+9hwz8Cr/ZS4KwHrmo9PJiLZkOt49vPnuvQ==} + '@typescript-eslint/typescript-estree@8.24.0': + resolution: {integrity: sha512-ITjYcP0+8kbsvT9bysygfIfb+hBj6koDsu37JZG7xrCiy3fPJyNmfVtaGsgTUSEuTzcvME5YI5uyL5LD1EV5ZQ==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: typescript: '>=4.8.4 <5.8.0' - '@typescript-eslint/utils@8.23.0': - resolution: {integrity: sha512-uB/+PSo6Exu02b5ZEiVtmY6RVYO7YU5xqgzTIVZwTHvvK3HsL8tZZHFaTLFtRG3CsV4A5mhOv+NZx5BlhXPyIA==} + '@typescript-eslint/utils@8.24.0': + resolution: {integrity: sha512-07rLuUBElvvEb1ICnafYWr4hk8/U7X9RDCOqd9JcAMtjh/9oRmcfN4yGzbPVirgMR0+HLVHehmu19CWeh7fsmQ==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: eslint: ^8.57.0 || ^9.0.0 typescript: '>=4.8.4 <5.8.0' - '@typescript-eslint/visitor-keys@8.23.0': - resolution: {integrity: sha512-oWWhcWDLwDfu++BGTZcmXWqpwtkwb5o7fxUIGksMQQDSdPW9prsSnfIOZMlsj4vBOSrcnjIUZMiIjODgGosFhQ==} + '@typescript-eslint/visitor-keys@8.24.0': + resolution: {integrity: sha512-kArLq83QxGLbuHrTMoOEWO+l2MwsNS2TGISEdx8xgqpkbytB07XmlQyQdNDrCc1ecSqx0cnmhGvpX+VBwqqSkg==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} '@typescript/twoslash@3.1.0': @@ -8326,8 +8323,8 @@ packages: '@ungap/structured-clone@1.2.0': resolution: {integrity: sha512-zuVdFrMJiuCDQUMCzQaD6KL28MjnqqN8XnAqiEq9PNm/hCPTSGfrXCOfwj1ow4LFb/tNymJPwsNbVePc1xFqrQ==} - '@vercel/analytics@1.4.1': - resolution: {integrity: sha512-ekpL4ReX2TH3LnrRZTUKjHHNpNy9S1I7QmS+g/RQXoSUQ8ienzosuX7T9djZ/s8zPhBx1mpHP/Rw5875N+zQIQ==} + '@vercel/analytics@1.5.0': + resolution: {integrity: sha512-MYsBzfPki4gthY5HnYN7jgInhAZ7Ac1cYDoRWFomwGHWEX7odTEzbtg9kf/QSo7XEsEAqlQugA6gJ2WS2DEa3g==} peerDependencies: '@remix-run/react': ^2 '@sveltejs/kit': ^1 || ^2 @@ -9343,8 +9340,8 @@ packages: encoding-sniffer@0.2.0: resolution: {integrity: sha512-ju7Wq1kg04I3HtiYIOrUrdfdDvkyO9s5XM8QAj/bN61Yo/Vb4vgJxy5vi4Yxk01gWHbrofpPtpxM8bKger9jhg==} - enhanced-resolve@5.18.0: - resolution: {integrity: sha512-0/r0MySGYG8YqlayBZ6MuCfECmHFdJ5qyPh8s8wa5Hnm6SaFLSK1VYCbj+NKp090Nm1caZhD+QTnmxO7esYGyQ==} + enhanced-resolve@5.18.1: + resolution: {integrity: sha512-ZSW3ma5GkcQBIpwZTSRAI8N71Uuwgs93IezB7mf7R60tC8ZbJideoDNKjHn2O9KIlx6rkGTTEk1xUCK2E1Y2Yg==} engines: {node: '>=10.13.0'} enquirer@2.4.1: @@ -9386,11 +9383,6 @@ packages: esast-util-from-js@2.0.1: resolution: {integrity: sha512-8Ja+rNJ0Lt56Pcf3TAmpBZjmx8ZcK5Ts4cAzIOjsjevg9oSXJnl6SUQ2EevU8tv3h6ZLWmoKL5H4fgWvdvfETw==} - esbuild-plugin-copy@2.1.1: - resolution: {integrity: sha512-Bk66jpevTcV8KMFzZI1P7MZKZ+uDcrZm2G2egZ2jNIvVnivDpodZI+/KnpL3Jnap0PBdIHU7HwFGB8r+vV5CVw==} - peerDependencies: - esbuild: '>= 0.14.0' - esbuild@0.17.19: resolution: {integrity: sha512-XQ0jAPFkK/u3LcVRcvVHQcTIqD6E2H1fvZMA5dQPSOWb3suUbWbfbRf94pjc0bNzRYLfIrDRQXr7X+LHIm5oHw==} engines: {node: '>=12'} @@ -9434,8 +9426,8 @@ packages: resolution: {integrity: sha512-UyLnSehNt62FFhSwjZlHmeokpRK59rcz29j+F1/aDgbkbRTk7wIc9XzdoasMUbRNKDM0qQt/+BJ4BrpFeABemw==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - eslint@9.19.0: - resolution: {integrity: sha512-ug92j0LepKlbbEv6hD911THhoRHmbdXt2gX+VDABAW/Ir7D3nqKdv5Pf5vtlyY6HQMTEP2skXY43ueqTCWssEA==} + eslint@9.20.0: + resolution: {integrity: sha512-aL4F8167Hg4IvsW89ejnpTwx+B/UQRzJPGgbIOl+4XqffWsahVVsLEWoZvnrVuwpWmnRd7XeXmQI1zlKcFDteA==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} hasBin: true peerDependencies: @@ -9566,6 +9558,14 @@ packages: fastq@1.17.1: resolution: {integrity: sha512-sRVD3lWVIXWg6By68ZN7vho9a1pQcN/WBFaAAsDDFzlJjvoGx0P8z7V1t72grFJfJhu3YPZBuu25f7Kaw2jN1w==} + fdir@6.4.3: + resolution: {integrity: sha512-PMXmW2y1hDDfTSRc9gaXIuCCRpuoz3Kaz8cUelp3smouvfT632ozg2vrT6lJsHKKOF59YLbOGfAWGUcKEfRMQw==} + peerDependencies: + picomatch: ^3 || ^4 + peerDependenciesMeta: + picomatch: + optional: true + fenceparser@1.1.1: resolution: {integrity: sha512-VdkTsK7GWLT0VWMK5S5WTAPn61wJ98WPFwJiRHumhg4ESNUO/tnkU8bzzzc62o6Uk1SVhuZFLnakmDA4SGV7wA==} engines: {node: '>=12'} @@ -9655,10 +9655,6 @@ packages: resolution: {integrity: sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==} engines: {node: '>= 0.6'} - fs-extra@10.1.0: - resolution: {integrity: sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ==} - engines: {node: '>=12'} - fs-extra@11.2.0: resolution: {integrity: sha512-PmDi3uwK5nFuXh7XDTlVnS17xJS7vW36is2+w3xcv8SVxiB4NyATf4ctkVY5bkSjX0Y4nbvZCq1/EjtEyr9ktw==} engines: {node: '>=14.14'} @@ -9760,20 +9756,10 @@ packages: resolution: {integrity: sha512-oahGvuMGQlPw/ivIYBjVSrWAfWLBeku5tpPE2fOPLi+WHffIWbuh2tCjhyQhTBPMf5E9jDEH4FOmTYgYwbKwtQ==} engines: {node: '>=18'} - globalyzer@0.1.0: - resolution: {integrity: sha512-40oNTM9UfG6aBmuKxk/giHn5nQ8RVz/SS4Ir6zgzOv9/qC3kKZ9v4etGTcJbEl/NyVQH7FGU7d+X1egr57Md2Q==} - globby@11.1.0: resolution: {integrity: sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==} engines: {node: '>=10'} - globby@14.0.2: - resolution: {integrity: sha512-s3Fq41ZVh7vbbe2PN3nrW7yC7U7MFVc5c98/iTl9c2GawNMKx/J648KQRW6WKkuU8GIbbh2IXfIRQjOZnXcTnw==} - engines: {node: '>=18'} - - globrex@0.1.2: - resolution: {integrity: sha512-uHJgbwAMwNFf5mLst7IWLNg14x1CkeqglJb/K3doi4dw6q2IvAAmM/Y81kevy83wP+Sst+nutFTYOGg3d1lsxg==} - gopd@1.2.0: resolution: {integrity: sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==} engines: {node: '>= 0.4'} @@ -9991,8 +9977,8 @@ packages: resolution: {integrity: sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==} engines: {node: '>=8'} - is-core-module@2.16.1: - resolution: {integrity: sha512-UfoeMA6fIJ8wTYFEUjelnaGI67v6+N7qXJEvQuIGa99l4xsCruSYOVSQ0uPANn4dAzm8lkYPaKLrrijLq7x23w==} + is-core-module@2.15.1: + resolution: {integrity: sha512-z0vtXSwucUJtANQWldhbtbt7BnL0vxiFjIdDLAatwhDYty2bad6s+rijD6Ri4YuYJubLzIJLUidCh09e1djEVQ==} engines: {node: '>= 0.4'} is-decimal@2.0.1: @@ -10079,8 +10065,8 @@ packages: jackspeak@3.4.3: resolution: {integrity: sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw==} - jiti@1.21.7: - resolution: {integrity: sha512-/imKNG4EbWNrVjoNC/1H5/9GFy+tqjGBHCaSsN+P2RnPqjsLmv6UD3Ej+Kj8nBWaRAwyk7kK5ZUc+OEatnTR3A==} + jiti@1.21.6: + resolution: {integrity: sha512-2yTgeWTWzMWkHu6Jp9NKgePDaYHbntiwvYuuJLbbN9vl7DC9DvXKOB2BC3ZZ92D3cvV/aflH0osDfwpHepQ53w==} hasBin: true jiti@2.4.2: @@ -10252,8 +10238,8 @@ packages: linkedom@0.14.26: resolution: {integrity: sha512-mK6TrydfFA7phrnp+1j57ycBwFI5bGSW6YXlw9acHoqF+mP/y+FooEYYyniOt5Ot57FSKB3iwmnuQ1UUyNLm5A==} - linkedom@0.18.7: - resolution: {integrity: sha512-M8XBnWzYG5YckEQgySyIb1Cjh9QarGVxCm+ihTUgcvfbuiLG23748Om6da910yzLMff3wKEvPnZyFo/rhsmFhg==} + linkedom@0.18.9: + resolution: {integrity: sha512-Pfvhwjs46nBrcQdauQjMXDJZqj6VwN7KStT84xQqmIgD9bPH6UVJ/ESW8y4VHVF2h7di0/P+f4Iln4U5emRcmg==} lit-element@4.1.0: resolution: {integrity: sha512-gSejRUQJuMQjV2Z59KAS/D4iElUhwKpIyJvZ9w+DIagIQjfJnhR20h2Q5ddpzXGS+fF0tMZ/xEYGMnKmaI/iww==} @@ -10816,8 +10802,8 @@ packages: resolution: {integrity: sha512-1FlR+gjXK7X+AsAHso35MnyN5KqGwJRi/31ft6x0M194ht7S+rWAvd7PHss9xSKMzE0asv1pyIHaJYq+BbacAQ==} engines: {node: '>=12'} - oniguruma-to-es@2.2.0: - resolution: {integrity: sha512-EEsso27ri0sf+t4uRFEj5C5gvXQj0d0w1Y2qq06b+hDLBnvzO1rWTwEW4C7ytan6nhg4WPwE26eLoiPhHUbvKg==} + oniguruma-to-es@2.3.0: + resolution: {integrity: sha512-bwALDxriqfKGfUufKGGepCzu9x7nJQuoRoAFp4AnwehhC2crqrDIAP/uN2qdlsAvSMpeRC3+Yzhqc7hLmle5+g==} only-allow@1.2.1: resolution: {integrity: sha512-M7CJbmv7UCopc0neRKdzfoGWaVZC+xC1925GitKH9EAqYFzX9//25Q7oX4+jw0tiCCj+t5l6VZh8UPH23NZkMA==} @@ -10889,8 +10875,8 @@ packages: resolution: {integrity: sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==} engines: {node: '>=6'} - package-json-from-dist@1.0.1: - resolution: {integrity: sha512-UEZIS3/by4OC8vL3P2dTXRETpebLI2NiI5vIrjaD/5UtrkFX/tNbwjTSRAGC/+7CAo2pIcBaRgWmcBBHcsaCIw==} + package-json-from-dist@1.0.0: + resolution: {integrity: sha512-dATvCeZN/8wQsGywez1mzHtTlP22H8OEfPrVMLNr4/eGa+ijtLn/6M5f0dY8UKNrC2O9UCU6SSoG3qRKnt7STw==} package-manager-detector@0.2.8: resolution: {integrity: sha512-ts9KSdroZisdvKMWVAVCXiKqnqNfXz4+IbrBG8/BWx/TR5le+jfenvoBuIZ6UWM9nz47W7AbD9qYfAwfWMIwzA==} @@ -10977,13 +10963,12 @@ packages: resolution: {integrity: sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==} engines: {node: '>=8'} - path-type@5.0.0: - resolution: {integrity: sha512-5HviZNaZcfqP95rwpv+1HDgUamezbqdSYTyzjTvwtJSnIH+3vnbmWsItli8OFEndS984VT55M3jduxZbX351gg==} - engines: {node: '>=12'} - pathe@1.1.2: resolution: {integrity: sha512-whLdWMYL2TwI08hn8/ZqAbrVemu0LNaNNJZX73O6qaIdCTfXutsLhMkjdENX0qhsQ9uIimo4/aQOmXkoon2nDQ==} + pathe@2.0.1: + resolution: {integrity: sha512-6jpjMpOth5S9ITVu5clZ7NOgHNsv5vRQdheL9ztp2vZmM6fRbLvyua1tiBIL4lk8SAe3ARzeXEly6siXCjDHDw==} + pathe@2.0.2: resolution: {integrity: sha512-15Ztpk+nov8DR524R4BF7uEuzESgzUEAV4Ah7CUMNGXdE5ELuvxElxGXndBl32vMSsWa1jpNf22Z+Er3sKwq+w==} @@ -11231,8 +11216,8 @@ packages: postcss-value-parser@4.2.0: resolution: {integrity: sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==} - postcss@8.5.1: - resolution: {integrity: sha512-6oz2beyjc5VMn/KV1pPw8fliQkhBXrVn1Z3TVyqZxU8kZpzEKhBdmCFqI6ZbmGtamQvQGuU1sgPTk8ZrXDD7jQ==} + postcss@8.5.2: + resolution: {integrity: sha512-MjOadfU3Ys9KYoX0AdkBlFEF1Vx37uCCeN4ZHnmwm9FfpbsGWMZeBLMmmpY+6Ocqod7mkdZ0DT31OlbsFrLlkA==} engines: {node: ^10 || ^12 || >=14} preact-render-to-string@6.5.13: @@ -11516,9 +11501,8 @@ packages: resolution: {integrity: sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==} engines: {node: '>=8'} - resolve@1.22.10: - resolution: {integrity: sha512-NPRy+/ncIMeDlTAsuqwKIiferiawhefFJtkNSW0qZJEqMEb+qBt/77B/jGeeek+F0uOeN05CDa6HXbbIgtVX4w==} - engines: {node: '>= 0.4'} + resolve@1.22.8: + resolution: {integrity: sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==} hasBin: true restore-cursor@4.0.0: @@ -11561,8 +11545,8 @@ packages: rollup-pluginutils@2.8.2: resolution: {integrity: sha512-EEp9NhnUkwY8aif6bxgovPHMoMoNr2FulJziTndpt5H9RdwC47GSGuII9XxpSdzVGM0GWrNPHV6ie1LTNJPaLQ==} - rollup@4.34.2: - resolution: {integrity: sha512-sBDUoxZEaqLu9QeNalL8v3jw6WjPku4wfZGyTU7l7m1oC+rpRihXc/n/H+4148ZkGz5Xli8CHMns//fFGKvpIQ==} + rollup@4.34.6: + resolution: {integrity: sha512-wc2cBWqJgkU3Iz5oztRkQbfVkbxoz5EhnCGOrnJvnLnQ7O0WhQUYyv18qQI79O8L7DdHrrlJNeCHd4VGpnaXKQ==} engines: {node: '>=18.0.0', npm: '>=8.0.0'} hasBin: true @@ -11592,8 +11576,8 @@ packages: sass-formatter@0.7.9: resolution: {integrity: sha512-CWZ8XiSim+fJVG0cFLStwDvft1VI7uvXdCNJYXhDvowiv+DsbD1nXLiQ4zrE5UBvj5DWZJ93cwN0NX5PMsr1Pw==} - sass@1.83.4: - resolution: {integrity: sha512-B1bozCeNQiOgDcLd33e2Cs2U60wZwjUUXzh900ZyQF5qUasvMdDZYbQ566LJu7cqR+sAHlAfO6RMkaID5s6qpA==} + sass@1.84.0: + resolution: {integrity: sha512-XDAbhEPJRxi7H0SxrnOpiXFQoUJHwkR2u3Zc4el+fK/Tt5Hpzw5kkQ59qVDfvdaUq6gCrEZIbySFBM2T9DNKHg==} engines: {node: '>=14.0.0'} hasBin: true @@ -11618,6 +11602,11 @@ packages: resolution: {integrity: sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==} hasBin: true + semver@7.6.3: + resolution: {integrity: sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==} + engines: {node: '>=10'} + hasBin: true + semver@7.7.1: resolution: {integrity: sha512-hlq8tAfn0m/61p4BVRcPzIGr6LKiMwo4VM6dGi6pt4qcRkmNzTcWq6eCEjEh+qXjkMDvPlOFFSGwQjoEa6gyMA==} engines: {node: '>=10'} @@ -11736,10 +11725,6 @@ packages: resolution: {integrity: sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==} engines: {node: '>=8'} - slash@5.1.0: - resolution: {integrity: sha512-ZA6oR3T/pEyuqwMgAKT0/hAv8oAXckzbkmR0UkUosQ+Mc4RxGoJkRmwHgHufaenlyAgE1Mxgpdcrf75y6XcnDg==} - engines: {node: '>=14.16'} - slice-ansi@5.0.0: resolution: {integrity: sha512-FC+lgizVPfie0kkhqUScwRu1O/lF6NOgJmlCgK+/LYxDCTk8sGelYaHDhFcDN+Sn3Cv+3VSa4Byeo+IMCzpMgQ==} engines: {node: '>=12'} @@ -11914,8 +11899,8 @@ packages: svelte: ^3.55 || ^4.0.0-next.0 || ^4.0 || ^5.0.0-next.0 typescript: ^4.9.4 || ^5.0.0 - svelte@5.19.7: - resolution: {integrity: sha512-I0UUp2MpB5gF8aqHJVklOcRcoLgQNnBolSwLMMqDepE9gVwmGeYBmJp1/obzae72QpxdPIymA4AunIm2x70LBg==} + svelte@5.19.9: + resolution: {integrity: sha512-860s752/ZZxHIsii31ELkdKBOCeAuDsfb/AGUXJyQyzUVLRSt4oqEw/BV5+2+mNg8mbqmD3OK+vMvwWMPM6f8A==} engines: {node: '>=18'} svg-tags@1.0.0: @@ -11934,8 +11919,8 @@ packages: engines: {node: '>=14.0.0'} hasBin: true - tailwindcss@4.0.3: - resolution: {integrity: sha512-ImmZF0Lon5RrQpsEAKGxRvHwCvMgSC4XVlFRqmbzTEDb/3wvin9zfEZrMwgsa3yqBbPqahYcVI6lulM2S7IZAA==} + tailwindcss@4.0.6: + resolution: {integrity: sha512-mysewHYJKaXgNOW6pp5xon/emCsfAMnO8WMaGKZZ35fomnR/T5gYnRg2/yRTTrtXiEl1tiVkeRt0eMO6HxEZqw==} tapable@2.2.1: resolution: {integrity: sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==} @@ -11968,15 +11953,16 @@ packages: resolution: {integrity: sha512-wMctrWD2HZZLuIlchlkE2dfXJh7J2KDI9Dwl+2abPYg0mswQHfOAyQW3jJg1pY5VfttSINZuKcXoB3FGypVklA==} engines: {node: '>=8'} - tiny-glob@0.2.9: - resolution: {integrity: sha512-g/55ssRPUjShh+xkfx9UPDXqhckHEsHr4Vd9zX55oSdGZc/MD0m3sferOkwWtp98bv+kcVfEHtRJgBVJzelrzg==} - tinybench@2.9.0: resolution: {integrity: sha512-0+DUvqWMValLmha6lr4kD8iAMK1HzV0/aKnCtWb9v9641TnP/MFb7Pc2bxoxQjTXAErryXVgUOfv2YqNllqGeg==} tinyexec@0.3.2: resolution: {integrity: sha512-KQQR9yN7R5+OSwaK0XQoj22pwHoTlgYqmUscPYoknOoWCWfj/5/ABTMRi69FrKU5ffPVh5QcFikpWJI/P1ocHA==} + tinyglobby@0.2.12: + resolution: {integrity: sha512-qkf4trmKSIiMTs/E63cxH+ojC2unam7rJ0WrauAzpT3ECNTxGRMlaXxVbfxMUC/w0LaYk6jQ4y/nGR9uBO3tww==} + engines: {node: '>=12.0.0'} + tinypool@1.0.2: resolution: {integrity: sha512-al6n+QEANGFOMf/dmUMsuS5/r9B06uwlyNjZZql/zv8J7ybHCgoihBNORZCY2mzUuAnomQa2JdhyHKzZxPCrFA==} engines: {node: ^18.0.0 || >=20.0.0} @@ -12050,38 +12036,38 @@ packages: tslib@2.6.2: resolution: {integrity: sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==} - turbo-darwin-64@2.4.0: - resolution: {integrity: sha512-kVMScnPUa3R4n7woNmkR15kOY0aUwCLJcUyH5UC59ggKqr5HIHwweKYK8N1pwBQso0LQF4I9i93hIzfJguCcwQ==} + turbo-darwin-64@2.4.1: + resolution: {integrity: sha512-oos3Gz5N6ol2/7+ys0wPENhl7ZzeVKIumn2BR7X2oE5dEPxNPDMOpKBwreU9ToCxM94e+uFTzKgjcUJpBqpTHA==} cpu: [x64] os: [darwin] - turbo-darwin-arm64@2.4.0: - resolution: {integrity: sha512-8JObIpfun1guA7UlFR5jC/SOVm49lRscxMxfg5jZ5ABft79rhFC+ygN9AwAhGKv6W2DUhIh2xENkSgu4EDmUyg==} + turbo-darwin-arm64@2.4.1: + resolution: {integrity: sha512-NoIQsSSvCJDTShgX+v+doSP/g0kAhHhq5p2fpsEAlougs2wcQvwv/LndeqojzkHbxB39lOQmqBYHJcki46Q3oQ==} cpu: [arm64] os: [darwin] - turbo-linux-64@2.4.0: - resolution: {integrity: sha512-xWDGGcRlBuGV7HXWAVuTY6vsQi4aZxGMAnuiuNDg8Ij1aHGohOM0RUsWMXjxz4vuJmjk9+/D6NQqHH3AJEXezg==} + turbo-linux-64@2.4.1: + resolution: {integrity: sha512-iXIeG8YhluaJF/5KQEudRf8ECBWND8X0yxXDrFIq2wmLLCg4A7gSSzVcBq30rYYeyyU4xMj/sm3HbsAaao3jjg==} cpu: [x64] os: [linux] - turbo-linux-arm64@2.4.0: - resolution: {integrity: sha512-c3En99xMguc/Pdtk/rZP53LnDdw0W6lgUc04he8r8F+UHYSNvgzHh0WGXXmCC6lGbBH72kPhhGx4bAwyvi7dug==} + turbo-linux-arm64@2.4.1: + resolution: {integrity: sha512-jd5apBV7lBGn3CnkQN/hEMbwazNgZcrwLt6DIkWy/TSi5xfSQEqcR3k9HxviQ7hKMcr1Q1hN6FHWm8Vw90Ej4A==} cpu: [arm64] os: [linux] - turbo-windows-64@2.4.0: - resolution: {integrity: sha512-/gOORuOlyA8JDPzyA16CD3wvyRcuBFePa1URAnFUof9hXQmKxK0VvSDO79cYZFsJSchCKNJpckUS0gYxGsWwoA==} + turbo-windows-64@2.4.1: + resolution: {integrity: sha512-4RYRAijohyQ7uetZY4SSikSgGccq+7tmnljdm/XezpK9t0+3gldKA2vHF0++yLZeZr+CFgqmBeGSFi7B+vhc2g==} cpu: [x64] os: [win32] - turbo-windows-arm64@2.4.0: - resolution: {integrity: sha512-/DJIdTFijEMM5LSiEpSfarDOMOlYqJV+EzmppqWtHqDsOLF4hbbIBH9sJR6OOp5dURAu5eURBYdmvBRz9Lo6TA==} + turbo-windows-arm64@2.4.1: + resolution: {integrity: sha512-4lZB0+AxWB01Adx5xHZhO746FgaHR0T3qzEDF2nf/nx8LAUtN3iwaZQgAsTsblaAKjiM7lxWDI0s/Q3fektsPg==} cpu: [arm64] os: [win32] - turbo@2.4.0: - resolution: {integrity: sha512-ah/yQp2oMif1X0u7fBJ4MLMygnkbKnW5O8SG6pJvloPCpHfFoZctkSVQiJ3VnvNTq71V2JJIdwmOeu1i34OQyg==} + turbo@2.4.1: + resolution: {integrity: sha512-XIIHXAhvD3sv34WLaN/969WTHCHYmm3zf0XQ+CrEP1A7ffIQG50cwNcp7Gh96CaGyjEXMh9odoHyggoZQ3Prvw==} hasBin: true type-check@0.4.0: @@ -12112,8 +12098,8 @@ packages: typescript-auto-import-cache@0.3.3: resolution: {integrity: sha512-ojEC7+Ci1ij9eE6hp8Jl9VUNnsEKzztktP5gtYNRMrTmfXVwA1PITYYAkpxCvvupdSYa/Re51B6KMcv1CTZEUA==} - typescript-eslint@8.23.0: - resolution: {integrity: sha512-/LBRo3HrXr5LxmrdYSOCvoAMm7p2jNizNfbIpCgvG4HMsnoprRUOce/+8VJ9BDYWW68rqIENE/haVLWPeFZBVQ==} + typescript-eslint@8.24.0: + resolution: {integrity: sha512-/lmv4366en/qbB32Vz5+kCNZEMf6xYHwh1z48suBwZvAtnXKbP+YhGe8OLE2BqC67LMqKkCNLtjejdwsdW6uOQ==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: eslint: ^8.57.0 || ^9.0.0 @@ -12160,10 +12146,6 @@ packages: unenv@2.0.0-rc.1: resolution: {integrity: sha512-PU5fb40H8X149s117aB4ytbORcCvlASdtF97tfls4BPIyj4PeVxvpSuy1jAptqYHqB0vb2w2sHvzM0XWcp2OKg==} - unicorn-magic@0.1.0: - resolution: {integrity: sha512-lRfVq8fE8gz6QMBuDM6a+LO3IAzTi05H6gCVaUpir2E1Rwpo4ZUog45KpNXKC/Mn3Yb9UDuHumeFTo9iV/D9FQ==} - engines: {node: '>=18'} - unicorn-magic@0.3.0: resolution: {integrity: sha512-+QBBXBCvifc56fsbuxZQ6Sic3wqqc3WWaqxs58gvJrcOuN83HGTCwz3oS5phzU9LthRNE9VrJCFCLUgHeeFnfA==} engines: {node: '>=18'} @@ -12386,16 +12368,16 @@ packages: peerDependencies: vite: ^3.0.0-0 || ^4.0.0-0 || ^5.0.0-0 || ^6.0.0-0 - vite-prerender-plugin@0.5.5: - resolution: {integrity: sha512-WUXn08rPL8CkbEeLYQI/O/IAD2ggsy5Fp5tA5QMDOpiGi7J4vNBZW/gqYRmCd1ap3XdeobFCFBYEA5mqv39lAQ==} + vite-prerender-plugin@0.5.6: + resolution: {integrity: sha512-ELG0pflVXWNVGaHme8g0rZB7xFnytf1U6fYLep3NUC4knGmOHtEc2R7DIlnCKeYGUGkzfMcvJOasK4C0dulKbQ==} vite-svg-loader@5.1.0: resolution: {integrity: sha512-M/wqwtOEjgb956/+m5ZrYT/Iq6Hax0OakWbokj8+9PXOnB7b/4AxESHieEtnNEy7ZpjsjYW1/5nK8fATQMmRxw==} peerDependencies: vue: '>=3.2.13' - vite@6.0.11: - resolution: {integrity: sha512-4VL9mQPKoHy4+FE0NnRE/kbY51TOfaknxAjt3fJbGJxhIpBZiqVzlZDEesWWsuREXHwNdAoOFZ9MkPEVXczHwg==} + vite@6.1.0: + resolution: {integrity: sha512-RjjMipCKVoR4hVfPY6GQTgveinjNuyLw+qruksLDvA5ktI1150VmcMBKmQaEWJhg/j6Uaf6dNCNA0AfdzUb/hQ==} engines: {node: ^18.0.0 || ^20.0.0 || >=22.0.0} hasBin: true peerDependencies: @@ -12903,8 +12885,6 @@ snapshots: '@astrojs/compiler@2.10.3': {} - '@astrojs/internal-helpers@0.4.2': {} - '@astrojs/language-server@2.15.0(prettier-plugin-astro@0.14.1)(prettier@3.4.2)(typescript@5.7.3)': dependencies: '@astrojs/compiler': 2.10.3 @@ -13397,11 +13377,11 @@ snapshots: transitivePeerDependencies: - debug - '@codspeed/vitest-plugin@4.0.0(vite@6.0.11(@types/node@22.13.1)(jiti@2.4.2)(lightningcss@1.29.1)(sass@1.83.4)(yaml@2.5.1))(vitest@3.0.5(@types/debug@4.1.12)(@types/node@22.13.1)(jiti@2.4.2)(jsdom@23.2.0)(lightningcss@1.29.1)(sass@1.83.4)(yaml@2.5.1))': + '@codspeed/vitest-plugin@4.0.0(vite@6.1.0(@types/node@22.13.1)(jiti@2.4.2)(lightningcss@1.29.1)(sass@1.84.0)(yaml@2.5.1))(vitest@3.0.5(@types/debug@4.1.12)(@types/node@22.13.1)(jiti@2.4.2)(jsdom@23.2.0)(lightningcss@1.29.1)(sass@1.84.0)(yaml@2.5.1))': dependencies: '@codspeed/core': 4.0.0 - vite: 6.0.11(@types/node@22.13.1)(jiti@2.4.2)(lightningcss@1.29.1)(sass@1.83.4)(yaml@2.5.1) - vitest: 3.0.5(@types/debug@4.1.12)(@types/node@22.13.1)(jiti@2.4.2)(jsdom@23.2.0)(lightningcss@1.29.1)(sass@1.83.4)(yaml@2.5.1) + vite: 6.1.0(@types/node@22.13.1)(jiti@2.4.2)(lightningcss@1.29.1)(sass@1.84.0)(yaml@2.5.1) + vitest: 3.0.5(@types/debug@4.1.12)(@types/node@22.13.1)(jiti@2.4.2)(jsdom@23.2.0)(lightningcss@1.29.1)(sass@1.84.0)(yaml@2.5.1) transitivePeerDependencies: - debug @@ -13442,215 +13422,215 @@ snapshots: '@csstools/css-parser-algorithms': 3.0.4(@csstools/css-tokenizer@3.0.3) '@csstools/css-tokenizer': 3.0.3 - '@csstools/postcss-cascade-layers@5.0.1(postcss@8.5.1)': + '@csstools/postcss-cascade-layers@5.0.1(postcss@8.5.2)': dependencies: '@csstools/selector-specificity': 5.0.0(postcss-selector-parser@7.0.0) - postcss: 8.5.1 + postcss: 8.5.2 postcss-selector-parser: 7.0.0 - '@csstools/postcss-color-function@4.0.7(postcss@8.5.1)': + '@csstools/postcss-color-function@4.0.7(postcss@8.5.2)': dependencies: '@csstools/css-color-parser': 3.0.7(@csstools/css-parser-algorithms@3.0.4(@csstools/css-tokenizer@3.0.3))(@csstools/css-tokenizer@3.0.3) '@csstools/css-parser-algorithms': 3.0.4(@csstools/css-tokenizer@3.0.3) '@csstools/css-tokenizer': 3.0.3 - '@csstools/postcss-progressive-custom-properties': 4.0.0(postcss@8.5.1) - '@csstools/utilities': 2.0.0(postcss@8.5.1) - postcss: 8.5.1 + '@csstools/postcss-progressive-custom-properties': 4.0.0(postcss@8.5.2) + '@csstools/utilities': 2.0.0(postcss@8.5.2) + postcss: 8.5.2 - '@csstools/postcss-color-mix-function@3.0.7(postcss@8.5.1)': + '@csstools/postcss-color-mix-function@3.0.7(postcss@8.5.2)': dependencies: '@csstools/css-color-parser': 3.0.7(@csstools/css-parser-algorithms@3.0.4(@csstools/css-tokenizer@3.0.3))(@csstools/css-tokenizer@3.0.3) '@csstools/css-parser-algorithms': 3.0.4(@csstools/css-tokenizer@3.0.3) '@csstools/css-tokenizer': 3.0.3 - '@csstools/postcss-progressive-custom-properties': 4.0.0(postcss@8.5.1) - '@csstools/utilities': 2.0.0(postcss@8.5.1) - postcss: 8.5.1 + '@csstools/postcss-progressive-custom-properties': 4.0.0(postcss@8.5.2) + '@csstools/utilities': 2.0.0(postcss@8.5.2) + postcss: 8.5.2 - '@csstools/postcss-content-alt-text@2.0.4(postcss@8.5.1)': + '@csstools/postcss-content-alt-text@2.0.4(postcss@8.5.2)': dependencies: '@csstools/css-parser-algorithms': 3.0.4(@csstools/css-tokenizer@3.0.3) '@csstools/css-tokenizer': 3.0.3 - '@csstools/postcss-progressive-custom-properties': 4.0.0(postcss@8.5.1) - '@csstools/utilities': 2.0.0(postcss@8.5.1) - postcss: 8.5.1 + '@csstools/postcss-progressive-custom-properties': 4.0.0(postcss@8.5.2) + '@csstools/utilities': 2.0.0(postcss@8.5.2) + postcss: 8.5.2 - '@csstools/postcss-exponential-functions@2.0.6(postcss@8.5.1)': + '@csstools/postcss-exponential-functions@2.0.6(postcss@8.5.2)': dependencies: '@csstools/css-calc': 2.1.1(@csstools/css-parser-algorithms@3.0.4(@csstools/css-tokenizer@3.0.3))(@csstools/css-tokenizer@3.0.3) '@csstools/css-parser-algorithms': 3.0.4(@csstools/css-tokenizer@3.0.3) '@csstools/css-tokenizer': 3.0.3 - postcss: 8.5.1 + postcss: 8.5.2 - '@csstools/postcss-font-format-keywords@4.0.0(postcss@8.5.1)': + '@csstools/postcss-font-format-keywords@4.0.0(postcss@8.5.2)': dependencies: - '@csstools/utilities': 2.0.0(postcss@8.5.1) - postcss: 8.5.1 + '@csstools/utilities': 2.0.0(postcss@8.5.2) + postcss: 8.5.2 postcss-value-parser: 4.2.0 - '@csstools/postcss-gamut-mapping@2.0.7(postcss@8.5.1)': + '@csstools/postcss-gamut-mapping@2.0.7(postcss@8.5.2)': dependencies: '@csstools/css-color-parser': 3.0.7(@csstools/css-parser-algorithms@3.0.4(@csstools/css-tokenizer@3.0.3))(@csstools/css-tokenizer@3.0.3) '@csstools/css-parser-algorithms': 3.0.4(@csstools/css-tokenizer@3.0.3) '@csstools/css-tokenizer': 3.0.3 - postcss: 8.5.1 + postcss: 8.5.2 - '@csstools/postcss-gradients-interpolation-method@5.0.7(postcss@8.5.1)': + '@csstools/postcss-gradients-interpolation-method@5.0.7(postcss@8.5.2)': dependencies: '@csstools/css-color-parser': 3.0.7(@csstools/css-parser-algorithms@3.0.4(@csstools/css-tokenizer@3.0.3))(@csstools/css-tokenizer@3.0.3) '@csstools/css-parser-algorithms': 3.0.4(@csstools/css-tokenizer@3.0.3) '@csstools/css-tokenizer': 3.0.3 - '@csstools/postcss-progressive-custom-properties': 4.0.0(postcss@8.5.1) - '@csstools/utilities': 2.0.0(postcss@8.5.1) - postcss: 8.5.1 + '@csstools/postcss-progressive-custom-properties': 4.0.0(postcss@8.5.2) + '@csstools/utilities': 2.0.0(postcss@8.5.2) + postcss: 8.5.2 - '@csstools/postcss-hwb-function@4.0.7(postcss@8.5.1)': + '@csstools/postcss-hwb-function@4.0.7(postcss@8.5.2)': dependencies: '@csstools/css-color-parser': 3.0.7(@csstools/css-parser-algorithms@3.0.4(@csstools/css-tokenizer@3.0.3))(@csstools/css-tokenizer@3.0.3) '@csstools/css-parser-algorithms': 3.0.4(@csstools/css-tokenizer@3.0.3) '@csstools/css-tokenizer': 3.0.3 - '@csstools/postcss-progressive-custom-properties': 4.0.0(postcss@8.5.1) - '@csstools/utilities': 2.0.0(postcss@8.5.1) - postcss: 8.5.1 + '@csstools/postcss-progressive-custom-properties': 4.0.0(postcss@8.5.2) + '@csstools/utilities': 2.0.0(postcss@8.5.2) + postcss: 8.5.2 - '@csstools/postcss-ic-unit@4.0.0(postcss@8.5.1)': + '@csstools/postcss-ic-unit@4.0.0(postcss@8.5.2)': dependencies: - '@csstools/postcss-progressive-custom-properties': 4.0.0(postcss@8.5.1) - '@csstools/utilities': 2.0.0(postcss@8.5.1) - postcss: 8.5.1 + '@csstools/postcss-progressive-custom-properties': 4.0.0(postcss@8.5.2) + '@csstools/utilities': 2.0.0(postcss@8.5.2) + postcss: 8.5.2 postcss-value-parser: 4.2.0 - '@csstools/postcss-initial@2.0.0(postcss@8.5.1)': + '@csstools/postcss-initial@2.0.0(postcss@8.5.2)': dependencies: - postcss: 8.5.1 + postcss: 8.5.2 - '@csstools/postcss-is-pseudo-class@5.0.1(postcss@8.5.1)': + '@csstools/postcss-is-pseudo-class@5.0.1(postcss@8.5.2)': dependencies: '@csstools/selector-specificity': 5.0.0(postcss-selector-parser@7.0.0) - postcss: 8.5.1 + postcss: 8.5.2 postcss-selector-parser: 7.0.0 - '@csstools/postcss-light-dark-function@2.0.7(postcss@8.5.1)': + '@csstools/postcss-light-dark-function@2.0.7(postcss@8.5.2)': dependencies: '@csstools/css-parser-algorithms': 3.0.4(@csstools/css-tokenizer@3.0.3) '@csstools/css-tokenizer': 3.0.3 - '@csstools/postcss-progressive-custom-properties': 4.0.0(postcss@8.5.1) - '@csstools/utilities': 2.0.0(postcss@8.5.1) - postcss: 8.5.1 + '@csstools/postcss-progressive-custom-properties': 4.0.0(postcss@8.5.2) + '@csstools/utilities': 2.0.0(postcss@8.5.2) + postcss: 8.5.2 - '@csstools/postcss-logical-float-and-clear@3.0.0(postcss@8.5.1)': + '@csstools/postcss-logical-float-and-clear@3.0.0(postcss@8.5.2)': dependencies: - postcss: 8.5.1 + postcss: 8.5.2 - '@csstools/postcss-logical-overflow@2.0.0(postcss@8.5.1)': + '@csstools/postcss-logical-overflow@2.0.0(postcss@8.5.2)': dependencies: - postcss: 8.5.1 + postcss: 8.5.2 - '@csstools/postcss-logical-overscroll-behavior@2.0.0(postcss@8.5.1)': + '@csstools/postcss-logical-overscroll-behavior@2.0.0(postcss@8.5.2)': dependencies: - postcss: 8.5.1 + postcss: 8.5.2 - '@csstools/postcss-logical-resize@3.0.0(postcss@8.5.1)': + '@csstools/postcss-logical-resize@3.0.0(postcss@8.5.2)': dependencies: - postcss: 8.5.1 + postcss: 8.5.2 postcss-value-parser: 4.2.0 - '@csstools/postcss-logical-viewport-units@3.0.3(postcss@8.5.1)': + '@csstools/postcss-logical-viewport-units@3.0.3(postcss@8.5.2)': dependencies: '@csstools/css-tokenizer': 3.0.3 - '@csstools/utilities': 2.0.0(postcss@8.5.1) - postcss: 8.5.1 + '@csstools/utilities': 2.0.0(postcss@8.5.2) + postcss: 8.5.2 - '@csstools/postcss-media-minmax@2.0.6(postcss@8.5.1)': + '@csstools/postcss-media-minmax@2.0.6(postcss@8.5.2)': dependencies: '@csstools/css-calc': 2.1.1(@csstools/css-parser-algorithms@3.0.4(@csstools/css-tokenizer@3.0.3))(@csstools/css-tokenizer@3.0.3) '@csstools/css-parser-algorithms': 3.0.4(@csstools/css-tokenizer@3.0.3) '@csstools/css-tokenizer': 3.0.3 '@csstools/media-query-list-parser': 4.0.2(@csstools/css-parser-algorithms@3.0.4(@csstools/css-tokenizer@3.0.3))(@csstools/css-tokenizer@3.0.3) - postcss: 8.5.1 + postcss: 8.5.2 - '@csstools/postcss-media-queries-aspect-ratio-number-values@3.0.4(postcss@8.5.1)': + '@csstools/postcss-media-queries-aspect-ratio-number-values@3.0.4(postcss@8.5.2)': dependencies: '@csstools/css-parser-algorithms': 3.0.4(@csstools/css-tokenizer@3.0.3) '@csstools/css-tokenizer': 3.0.3 '@csstools/media-query-list-parser': 4.0.2(@csstools/css-parser-algorithms@3.0.4(@csstools/css-tokenizer@3.0.3))(@csstools/css-tokenizer@3.0.3) - postcss: 8.5.1 + postcss: 8.5.2 - '@csstools/postcss-nested-calc@4.0.0(postcss@8.5.1)': + '@csstools/postcss-nested-calc@4.0.0(postcss@8.5.2)': dependencies: - '@csstools/utilities': 2.0.0(postcss@8.5.1) - postcss: 8.5.1 + '@csstools/utilities': 2.0.0(postcss@8.5.2) + postcss: 8.5.2 postcss-value-parser: 4.2.0 - '@csstools/postcss-normalize-display-values@4.0.0(postcss@8.5.1)': + '@csstools/postcss-normalize-display-values@4.0.0(postcss@8.5.2)': dependencies: - postcss: 8.5.1 + postcss: 8.5.2 postcss-value-parser: 4.2.0 - '@csstools/postcss-oklab-function@4.0.7(postcss@8.5.1)': + '@csstools/postcss-oklab-function@4.0.7(postcss@8.5.2)': dependencies: '@csstools/css-color-parser': 3.0.7(@csstools/css-parser-algorithms@3.0.4(@csstools/css-tokenizer@3.0.3))(@csstools/css-tokenizer@3.0.3) '@csstools/css-parser-algorithms': 3.0.4(@csstools/css-tokenizer@3.0.3) '@csstools/css-tokenizer': 3.0.3 - '@csstools/postcss-progressive-custom-properties': 4.0.0(postcss@8.5.1) - '@csstools/utilities': 2.0.0(postcss@8.5.1) - postcss: 8.5.1 + '@csstools/postcss-progressive-custom-properties': 4.0.0(postcss@8.5.2) + '@csstools/utilities': 2.0.0(postcss@8.5.2) + postcss: 8.5.2 - '@csstools/postcss-progressive-custom-properties@4.0.0(postcss@8.5.1)': + '@csstools/postcss-progressive-custom-properties@4.0.0(postcss@8.5.2)': dependencies: - postcss: 8.5.1 + postcss: 8.5.2 postcss-value-parser: 4.2.0 - '@csstools/postcss-random-function@1.0.2(postcss@8.5.1)': + '@csstools/postcss-random-function@1.0.2(postcss@8.5.2)': dependencies: '@csstools/css-calc': 2.1.1(@csstools/css-parser-algorithms@3.0.4(@csstools/css-tokenizer@3.0.3))(@csstools/css-tokenizer@3.0.3) '@csstools/css-parser-algorithms': 3.0.4(@csstools/css-tokenizer@3.0.3) '@csstools/css-tokenizer': 3.0.3 - postcss: 8.5.1 + postcss: 8.5.2 - '@csstools/postcss-relative-color-syntax@3.0.7(postcss@8.5.1)': + '@csstools/postcss-relative-color-syntax@3.0.7(postcss@8.5.2)': dependencies: '@csstools/css-color-parser': 3.0.7(@csstools/css-parser-algorithms@3.0.4(@csstools/css-tokenizer@3.0.3))(@csstools/css-tokenizer@3.0.3) '@csstools/css-parser-algorithms': 3.0.4(@csstools/css-tokenizer@3.0.3) '@csstools/css-tokenizer': 3.0.3 - '@csstools/postcss-progressive-custom-properties': 4.0.0(postcss@8.5.1) - '@csstools/utilities': 2.0.0(postcss@8.5.1) - postcss: 8.5.1 + '@csstools/postcss-progressive-custom-properties': 4.0.0(postcss@8.5.2) + '@csstools/utilities': 2.0.0(postcss@8.5.2) + postcss: 8.5.2 - '@csstools/postcss-scope-pseudo-class@4.0.1(postcss@8.5.1)': + '@csstools/postcss-scope-pseudo-class@4.0.1(postcss@8.5.2)': dependencies: - postcss: 8.5.1 + postcss: 8.5.2 postcss-selector-parser: 7.0.0 - '@csstools/postcss-sign-functions@1.1.1(postcss@8.5.1)': + '@csstools/postcss-sign-functions@1.1.1(postcss@8.5.2)': dependencies: '@csstools/css-calc': 2.1.1(@csstools/css-parser-algorithms@3.0.4(@csstools/css-tokenizer@3.0.3))(@csstools/css-tokenizer@3.0.3) '@csstools/css-parser-algorithms': 3.0.4(@csstools/css-tokenizer@3.0.3) '@csstools/css-tokenizer': 3.0.3 - postcss: 8.5.1 + postcss: 8.5.2 - '@csstools/postcss-stepped-value-functions@4.0.6(postcss@8.5.1)': + '@csstools/postcss-stepped-value-functions@4.0.6(postcss@8.5.2)': dependencies: '@csstools/css-calc': 2.1.1(@csstools/css-parser-algorithms@3.0.4(@csstools/css-tokenizer@3.0.3))(@csstools/css-tokenizer@3.0.3) '@csstools/css-parser-algorithms': 3.0.4(@csstools/css-tokenizer@3.0.3) '@csstools/css-tokenizer': 3.0.3 - postcss: 8.5.1 + postcss: 8.5.2 - '@csstools/postcss-text-decoration-shorthand@4.0.1(postcss@8.5.1)': + '@csstools/postcss-text-decoration-shorthand@4.0.1(postcss@8.5.2)': dependencies: '@csstools/color-helpers': 5.0.1 - postcss: 8.5.1 + postcss: 8.5.2 postcss-value-parser: 4.2.0 - '@csstools/postcss-trigonometric-functions@4.0.6(postcss@8.5.1)': + '@csstools/postcss-trigonometric-functions@4.0.6(postcss@8.5.2)': dependencies: '@csstools/css-calc': 2.1.1(@csstools/css-parser-algorithms@3.0.4(@csstools/css-tokenizer@3.0.3))(@csstools/css-tokenizer@3.0.3) '@csstools/css-parser-algorithms': 3.0.4(@csstools/css-tokenizer@3.0.3) '@csstools/css-tokenizer': 3.0.3 - postcss: 8.5.1 + postcss: 8.5.2 - '@csstools/postcss-unset-value@4.0.0(postcss@8.5.1)': + '@csstools/postcss-unset-value@4.0.0(postcss@8.5.2)': dependencies: - postcss: 8.5.1 + postcss: 8.5.2 '@csstools/selector-resolve-nested@3.0.0(postcss-selector-parser@7.0.0)': dependencies: @@ -13660,9 +13640,9 @@ snapshots: dependencies: postcss-selector-parser: 7.0.0 - '@csstools/utilities@2.0.0(postcss@8.5.1)': + '@csstools/utilities@2.0.0(postcss@8.5.2)': dependencies: - postcss: 8.5.1 + postcss: 8.5.2 '@emmetio/abbreviation@2.3.3': dependencies: @@ -13848,9 +13828,9 @@ snapshots: '@esbuild/win32-x64@0.24.2': optional: true - '@eslint-community/eslint-utils@4.4.0(eslint@9.19.0(jiti@2.4.2))': + '@eslint-community/eslint-utils@4.4.0(eslint@9.20.0(jiti@2.4.2))': dependencies: - eslint: 9.19.0(jiti@2.4.2) + eslint: 9.20.0(jiti@2.4.2) eslint-visitor-keys: 3.4.3 '@eslint-community/regexpp@4.12.1': {} @@ -13867,6 +13847,10 @@ snapshots: dependencies: '@types/json-schema': 7.0.15 + '@eslint/core@0.11.0': + dependencies: + '@types/json-schema': 7.0.15 + '@eslint/eslintrc@3.2.0': dependencies: ajv: 6.12.6 @@ -13881,7 +13865,7 @@ snapshots: transitivePeerDependencies: - supports-color - '@eslint/js@9.19.0': {} + '@eslint/js@9.20.0': {} '@eslint/object-schema@2.1.5': {} @@ -14329,18 +14313,18 @@ snapshots: '@polka/url@1.0.0-next.25': {} - '@preact/preset-vite@2.10.1(@babel/core@7.26.0)(preact@10.25.4)(vite@6.0.11(@types/node@22.13.1)(jiti@2.4.2)(lightningcss@1.29.1)(sass@1.83.4)(yaml@2.5.1))': + '@preact/preset-vite@2.10.1(@babel/core@7.26.0)(preact@10.25.4)(vite@6.1.0(@types/node@22.13.1)(jiti@2.4.2)(lightningcss@1.29.1)(sass@1.84.0)(yaml@2.5.1))': dependencies: '@babel/core': 7.26.0 '@babel/plugin-transform-react-jsx': 7.25.9(@babel/core@7.26.0) '@babel/plugin-transform-react-jsx-development': 7.25.9(@babel/core@7.26.0) - '@prefresh/vite': 2.4.5(preact@10.25.4)(vite@6.0.11(@types/node@22.13.1)(jiti@2.4.2)(lightningcss@1.29.1)(sass@1.83.4)(yaml@2.5.1)) + '@prefresh/vite': 2.4.5(preact@10.25.4)(vite@6.1.0(@types/node@22.13.1)(jiti@2.4.2)(lightningcss@1.29.1)(sass@1.84.0)(yaml@2.5.1)) '@rollup/pluginutils': 4.2.1 babel-plugin-transform-hook-names: 1.0.2(@babel/core@7.26.0) debug: 4.4.0 kolorist: 1.8.0 - vite: 6.0.11(@types/node@22.13.1)(jiti@2.4.2)(lightningcss@1.29.1)(sass@1.83.4)(yaml@2.5.1) - vite-prerender-plugin: 0.5.5 + vite: 6.1.0(@types/node@22.13.1)(jiti@2.4.2)(lightningcss@1.29.1)(sass@1.84.0)(yaml@2.5.1) + vite-prerender-plugin: 0.5.6 transitivePeerDependencies: - preact - supports-color @@ -14360,7 +14344,7 @@ snapshots: '@prefresh/utils@1.2.0': {} - '@prefresh/vite@2.4.5(preact@10.25.4)(vite@6.0.11(@types/node@22.13.1)(jiti@2.4.2)(lightningcss@1.29.1)(sass@1.83.4)(yaml@2.5.1))': + '@prefresh/vite@2.4.5(preact@10.25.4)(vite@6.1.0(@types/node@22.13.1)(jiti@2.4.2)(lightningcss@1.29.1)(sass@1.84.0)(yaml@2.5.1))': dependencies: '@babel/core': 7.26.0 '@prefresh/babel-plugin': 0.5.1 @@ -14368,7 +14352,7 @@ snapshots: '@prefresh/utils': 1.2.0 '@rollup/pluginutils': 4.2.1 preact: 10.25.4 - vite: 6.0.11(@types/node@22.13.1)(jiti@2.4.2)(lightningcss@1.29.1)(sass@1.83.4)(yaml@2.5.1) + vite: 6.1.0(@types/node@22.13.1)(jiti@2.4.2)(lightningcss@1.29.1)(sass@1.84.0)(yaml@2.5.1) transitivePeerDependencies: - supports-color @@ -14383,69 +14367,69 @@ snapshots: estree-walker: 2.0.2 picomatch: 2.3.1 - '@rollup/pluginutils@5.1.4(rollup@4.34.2)': + '@rollup/pluginutils@5.1.4(rollup@4.34.6)': dependencies: '@types/estree': 1.0.6 estree-walker: 2.0.2 picomatch: 4.0.2 optionalDependencies: - rollup: 4.34.2 + rollup: 4.34.6 - '@rollup/rollup-android-arm-eabi@4.34.2': + '@rollup/rollup-android-arm-eabi@4.34.6': optional: true - '@rollup/rollup-android-arm64@4.34.2': + '@rollup/rollup-android-arm64@4.34.6': optional: true - '@rollup/rollup-darwin-arm64@4.34.2': + '@rollup/rollup-darwin-arm64@4.34.6': optional: true - '@rollup/rollup-darwin-x64@4.34.2': + '@rollup/rollup-darwin-x64@4.34.6': optional: true - '@rollup/rollup-freebsd-arm64@4.34.2': + '@rollup/rollup-freebsd-arm64@4.34.6': optional: true - '@rollup/rollup-freebsd-x64@4.34.2': + '@rollup/rollup-freebsd-x64@4.34.6': optional: true - '@rollup/rollup-linux-arm-gnueabihf@4.34.2': + '@rollup/rollup-linux-arm-gnueabihf@4.34.6': optional: true - '@rollup/rollup-linux-arm-musleabihf@4.34.2': + '@rollup/rollup-linux-arm-musleabihf@4.34.6': optional: true - '@rollup/rollup-linux-arm64-gnu@4.34.2': + '@rollup/rollup-linux-arm64-gnu@4.34.6': optional: true - '@rollup/rollup-linux-arm64-musl@4.34.2': + '@rollup/rollup-linux-arm64-musl@4.34.6': optional: true - '@rollup/rollup-linux-loongarch64-gnu@4.34.2': + '@rollup/rollup-linux-loongarch64-gnu@4.34.6': optional: true - '@rollup/rollup-linux-powerpc64le-gnu@4.34.2': + '@rollup/rollup-linux-powerpc64le-gnu@4.34.6': optional: true - '@rollup/rollup-linux-riscv64-gnu@4.34.2': + '@rollup/rollup-linux-riscv64-gnu@4.34.6': optional: true - '@rollup/rollup-linux-s390x-gnu@4.34.2': + '@rollup/rollup-linux-s390x-gnu@4.34.6': optional: true - '@rollup/rollup-linux-x64-gnu@4.34.2': + '@rollup/rollup-linux-x64-gnu@4.34.6': optional: true - '@rollup/rollup-linux-x64-musl@4.34.2': + '@rollup/rollup-linux-x64-musl@4.34.6': optional: true - '@rollup/rollup-win32-arm64-msvc@4.34.2': + '@rollup/rollup-win32-arm64-msvc@4.34.6': optional: true - '@rollup/rollup-win32-ia32-msvc@4.34.2': + '@rollup/rollup-win32-ia32-msvc@4.34.6': optional: true - '@rollup/rollup-win32-x64-msvc@4.34.2': + '@rollup/rollup-win32-x64-msvc@4.34.6': optional: true '@sec-ant/readable-stream@0.4.1': {} @@ -14463,7 +14447,7 @@ snapshots: dependencies: '@shikijs/types': 1.29.2 '@shikijs/vscode-textmate': 10.0.1 - oniguruma-to-es: 2.2.0 + oniguruma-to-es: 2.3.0 '@shikijs/engine-oniguruma@1.29.2': dependencies: @@ -14485,96 +14469,94 @@ snapshots: '@shikijs/vscode-textmate@10.0.1': {} - '@sindresorhus/merge-streams@2.3.0': {} - '@sindresorhus/merge-streams@4.0.0': {} '@solidjs/router@0.15.3(solid-js@1.9.4)': dependencies: solid-js: 1.9.4 - '@sveltejs/vite-plugin-svelte-inspector@4.0.1(@sveltejs/vite-plugin-svelte@5.0.3(svelte@5.19.7)(vite@6.0.11(@types/node@22.13.1)(jiti@2.4.2)(lightningcss@1.29.1)(sass@1.83.4)(yaml@2.5.1)))(svelte@5.19.7)(vite@6.0.11(@types/node@22.13.1)(jiti@2.4.2)(lightningcss@1.29.1)(sass@1.83.4)(yaml@2.5.1))': + '@sveltejs/vite-plugin-svelte-inspector@4.0.1(@sveltejs/vite-plugin-svelte@5.0.3(svelte@5.19.9)(vite@6.1.0(@types/node@22.13.1)(jiti@2.4.2)(lightningcss@1.29.1)(sass@1.84.0)(yaml@2.5.1)))(svelte@5.19.9)(vite@6.1.0(@types/node@22.13.1)(jiti@2.4.2)(lightningcss@1.29.1)(sass@1.84.0)(yaml@2.5.1))': dependencies: - '@sveltejs/vite-plugin-svelte': 5.0.3(svelte@5.19.7)(vite@6.0.11(@types/node@22.13.1)(jiti@2.4.2)(lightningcss@1.29.1)(sass@1.83.4)(yaml@2.5.1)) + '@sveltejs/vite-plugin-svelte': 5.0.3(svelte@5.19.9)(vite@6.1.0(@types/node@22.13.1)(jiti@2.4.2)(lightningcss@1.29.1)(sass@1.84.0)(yaml@2.5.1)) debug: 4.4.0 - svelte: 5.19.7 - vite: 6.0.11(@types/node@22.13.1)(jiti@2.4.2)(lightningcss@1.29.1)(sass@1.83.4)(yaml@2.5.1) + svelte: 5.19.9 + vite: 6.1.0(@types/node@22.13.1)(jiti@2.4.2)(lightningcss@1.29.1)(sass@1.84.0)(yaml@2.5.1) transitivePeerDependencies: - supports-color - '@sveltejs/vite-plugin-svelte@5.0.3(svelte@5.19.7)(vite@6.0.11(@types/node@22.13.1)(jiti@2.4.2)(lightningcss@1.29.1)(sass@1.83.4)(yaml@2.5.1))': + '@sveltejs/vite-plugin-svelte@5.0.3(svelte@5.19.9)(vite@6.1.0(@types/node@22.13.1)(jiti@2.4.2)(lightningcss@1.29.1)(sass@1.84.0)(yaml@2.5.1))': dependencies: - '@sveltejs/vite-plugin-svelte-inspector': 4.0.1(@sveltejs/vite-plugin-svelte@5.0.3(svelte@5.19.7)(vite@6.0.11(@types/node@22.13.1)(jiti@2.4.2)(lightningcss@1.29.1)(sass@1.83.4)(yaml@2.5.1)))(svelte@5.19.7)(vite@6.0.11(@types/node@22.13.1)(jiti@2.4.2)(lightningcss@1.29.1)(sass@1.83.4)(yaml@2.5.1)) + '@sveltejs/vite-plugin-svelte-inspector': 4.0.1(@sveltejs/vite-plugin-svelte@5.0.3(svelte@5.19.9)(vite@6.1.0(@types/node@22.13.1)(jiti@2.4.2)(lightningcss@1.29.1)(sass@1.84.0)(yaml@2.5.1)))(svelte@5.19.9)(vite@6.1.0(@types/node@22.13.1)(jiti@2.4.2)(lightningcss@1.29.1)(sass@1.84.0)(yaml@2.5.1)) debug: 4.4.0 deepmerge: 4.3.1 kleur: 4.1.5 magic-string: 0.30.17 - svelte: 5.19.7 - vite: 6.0.11(@types/node@22.13.1)(jiti@2.4.2)(lightningcss@1.29.1)(sass@1.83.4)(yaml@2.5.1) - vitefu: 1.0.5(vite@6.0.11(@types/node@22.13.1)(jiti@2.4.2)(lightningcss@1.29.1)(sass@1.83.4)(yaml@2.5.1)) + svelte: 5.19.9 + vite: 6.1.0(@types/node@22.13.1)(jiti@2.4.2)(lightningcss@1.29.1)(sass@1.84.0)(yaml@2.5.1) + vitefu: 1.0.5(vite@6.1.0(@types/node@22.13.1)(jiti@2.4.2)(lightningcss@1.29.1)(sass@1.84.0)(yaml@2.5.1)) transitivePeerDependencies: - supports-color - '@tailwindcss/node@4.0.3': + '@tailwindcss/node@4.0.6': dependencies: - enhanced-resolve: 5.18.0 + enhanced-resolve: 5.18.1 jiti: 2.4.2 - tailwindcss: 4.0.3 + tailwindcss: 4.0.6 - '@tailwindcss/oxide-android-arm64@4.0.3': + '@tailwindcss/oxide-android-arm64@4.0.6': optional: true - '@tailwindcss/oxide-darwin-arm64@4.0.3': + '@tailwindcss/oxide-darwin-arm64@4.0.6': optional: true - '@tailwindcss/oxide-darwin-x64@4.0.3': + '@tailwindcss/oxide-darwin-x64@4.0.6': optional: true - '@tailwindcss/oxide-freebsd-x64@4.0.3': + '@tailwindcss/oxide-freebsd-x64@4.0.6': optional: true - '@tailwindcss/oxide-linux-arm-gnueabihf@4.0.3': + '@tailwindcss/oxide-linux-arm-gnueabihf@4.0.6': optional: true - '@tailwindcss/oxide-linux-arm64-gnu@4.0.3': + '@tailwindcss/oxide-linux-arm64-gnu@4.0.6': optional: true - '@tailwindcss/oxide-linux-arm64-musl@4.0.3': + '@tailwindcss/oxide-linux-arm64-musl@4.0.6': optional: true - '@tailwindcss/oxide-linux-x64-gnu@4.0.3': + '@tailwindcss/oxide-linux-x64-gnu@4.0.6': optional: true - '@tailwindcss/oxide-linux-x64-musl@4.0.3': + '@tailwindcss/oxide-linux-x64-musl@4.0.6': optional: true - '@tailwindcss/oxide-win32-arm64-msvc@4.0.3': + '@tailwindcss/oxide-win32-arm64-msvc@4.0.6': optional: true - '@tailwindcss/oxide-win32-x64-msvc@4.0.3': + '@tailwindcss/oxide-win32-x64-msvc@4.0.6': optional: true - '@tailwindcss/oxide@4.0.3': + '@tailwindcss/oxide@4.0.6': optionalDependencies: - '@tailwindcss/oxide-android-arm64': 4.0.3 - '@tailwindcss/oxide-darwin-arm64': 4.0.3 - '@tailwindcss/oxide-darwin-x64': 4.0.3 - '@tailwindcss/oxide-freebsd-x64': 4.0.3 - '@tailwindcss/oxide-linux-arm-gnueabihf': 4.0.3 - '@tailwindcss/oxide-linux-arm64-gnu': 4.0.3 - '@tailwindcss/oxide-linux-arm64-musl': 4.0.3 - '@tailwindcss/oxide-linux-x64-gnu': 4.0.3 - '@tailwindcss/oxide-linux-x64-musl': 4.0.3 - '@tailwindcss/oxide-win32-arm64-msvc': 4.0.3 - '@tailwindcss/oxide-win32-x64-msvc': 4.0.3 + '@tailwindcss/oxide-android-arm64': 4.0.6 + '@tailwindcss/oxide-darwin-arm64': 4.0.6 + '@tailwindcss/oxide-darwin-x64': 4.0.6 + '@tailwindcss/oxide-freebsd-x64': 4.0.6 + '@tailwindcss/oxide-linux-arm-gnueabihf': 4.0.6 + '@tailwindcss/oxide-linux-arm64-gnu': 4.0.6 + '@tailwindcss/oxide-linux-arm64-musl': 4.0.6 + '@tailwindcss/oxide-linux-x64-gnu': 4.0.6 + '@tailwindcss/oxide-linux-x64-musl': 4.0.6 + '@tailwindcss/oxide-win32-arm64-msvc': 4.0.6 + '@tailwindcss/oxide-win32-x64-msvc': 4.0.6 - '@tailwindcss/vite@4.0.3(vite@6.0.11(@types/node@22.13.1)(jiti@2.4.2)(lightningcss@1.29.1)(sass@1.83.4)(yaml@2.5.1))': + '@tailwindcss/vite@4.0.6(vite@6.1.0(@types/node@22.13.1)(jiti@2.4.2)(lightningcss@1.29.1)(sass@1.84.0)(yaml@2.5.1))': dependencies: - '@tailwindcss/node': 4.0.3 - '@tailwindcss/oxide': 4.0.3 + '@tailwindcss/node': 4.0.6 + '@tailwindcss/oxide': 4.0.6 lightningcss: 1.29.1 - tailwindcss: 4.0.3 - vite: 6.0.11(@types/node@22.13.1)(jiti@2.4.2)(lightningcss@1.29.1)(sass@1.83.4)(yaml@2.5.1) + tailwindcss: 4.0.6 + vite: 6.1.0(@types/node@22.13.1)(jiti@2.4.2)(lightningcss@1.29.1)(sass@1.84.0)(yaml@2.5.1) '@trysound/sax@0.2.0': {} @@ -14607,8 +14589,6 @@ snapshots: dependencies: '@babel/types': 7.26.0 - '@types/braces@3.0.4': {} - '@types/canvas-confetti@1.9.0': {} '@types/common-ancestor-path@1.0.2': {} @@ -14670,10 +14650,6 @@ snapshots: '@types/mdx@2.0.13': {} - '@types/micromatch@4.0.9': - dependencies: - '@types/braces': 3.0.4 - '@types/mime@1.3.5': {} '@types/ms@0.7.34': {} @@ -14694,6 +14670,8 @@ snapshots: dependencies: undici-types: 6.20.0 + '@types/picomatch@3.0.2': {} + '@types/prismjs@1.26.5': {} '@types/prompts@2.4.9': @@ -14714,7 +14692,7 @@ snapshots: '@types/sax@1.2.7': dependencies: - '@types/node': 22.13.1 + '@types/node': 18.19.50 '@types/semver@7.5.8': {} @@ -14739,7 +14717,7 @@ snapshots: '@types/ws@8.5.12': dependencies: - '@types/node': 22.13.1 + '@types/node': 18.19.50 '@types/xml2js@0.4.14': dependencies: @@ -14747,15 +14725,15 @@ snapshots: '@types/yargs-parser@21.0.3': {} - '@typescript-eslint/eslint-plugin@8.23.0(@typescript-eslint/parser@8.23.0(eslint@9.19.0(jiti@2.4.2))(typescript@5.7.3))(eslint@9.19.0(jiti@2.4.2))(typescript@5.7.3)': + '@typescript-eslint/eslint-plugin@8.24.0(@typescript-eslint/parser@8.24.0(eslint@9.20.0(jiti@2.4.2))(typescript@5.7.3))(eslint@9.20.0(jiti@2.4.2))(typescript@5.7.3)': dependencies: '@eslint-community/regexpp': 4.12.1 - '@typescript-eslint/parser': 8.23.0(eslint@9.19.0(jiti@2.4.2))(typescript@5.7.3) - '@typescript-eslint/scope-manager': 8.23.0 - '@typescript-eslint/type-utils': 8.23.0(eslint@9.19.0(jiti@2.4.2))(typescript@5.7.3) - '@typescript-eslint/utils': 8.23.0(eslint@9.19.0(jiti@2.4.2))(typescript@5.7.3) - '@typescript-eslint/visitor-keys': 8.23.0 - eslint: 9.19.0(jiti@2.4.2) + '@typescript-eslint/parser': 8.24.0(eslint@9.20.0(jiti@2.4.2))(typescript@5.7.3) + '@typescript-eslint/scope-manager': 8.24.0 + '@typescript-eslint/type-utils': 8.24.0(eslint@9.20.0(jiti@2.4.2))(typescript@5.7.3) + '@typescript-eslint/utils': 8.24.0(eslint@9.20.0(jiti@2.4.2))(typescript@5.7.3) + '@typescript-eslint/visitor-keys': 8.24.0 + eslint: 9.20.0(jiti@2.4.2) graphemer: 1.4.0 ignore: 5.3.2 natural-compare: 1.4.0 @@ -14764,40 +14742,40 @@ snapshots: transitivePeerDependencies: - supports-color - '@typescript-eslint/parser@8.23.0(eslint@9.19.0(jiti@2.4.2))(typescript@5.7.3)': + '@typescript-eslint/parser@8.24.0(eslint@9.20.0(jiti@2.4.2))(typescript@5.7.3)': dependencies: - '@typescript-eslint/scope-manager': 8.23.0 - '@typescript-eslint/types': 8.23.0 - '@typescript-eslint/typescript-estree': 8.23.0(typescript@5.7.3) - '@typescript-eslint/visitor-keys': 8.23.0 + '@typescript-eslint/scope-manager': 8.24.0 + '@typescript-eslint/types': 8.24.0 + '@typescript-eslint/typescript-estree': 8.24.0(typescript@5.7.3) + '@typescript-eslint/visitor-keys': 8.24.0 debug: 4.4.0 - eslint: 9.19.0(jiti@2.4.2) + eslint: 9.20.0(jiti@2.4.2) typescript: 5.7.3 transitivePeerDependencies: - supports-color - '@typescript-eslint/scope-manager@8.23.0': + '@typescript-eslint/scope-manager@8.24.0': dependencies: - '@typescript-eslint/types': 8.23.0 - '@typescript-eslint/visitor-keys': 8.23.0 + '@typescript-eslint/types': 8.24.0 + '@typescript-eslint/visitor-keys': 8.24.0 - '@typescript-eslint/type-utils@8.23.0(eslint@9.19.0(jiti@2.4.2))(typescript@5.7.3)': + '@typescript-eslint/type-utils@8.24.0(eslint@9.20.0(jiti@2.4.2))(typescript@5.7.3)': dependencies: - '@typescript-eslint/typescript-estree': 8.23.0(typescript@5.7.3) - '@typescript-eslint/utils': 8.23.0(eslint@9.19.0(jiti@2.4.2))(typescript@5.7.3) + '@typescript-eslint/typescript-estree': 8.24.0(typescript@5.7.3) + '@typescript-eslint/utils': 8.24.0(eslint@9.20.0(jiti@2.4.2))(typescript@5.7.3) debug: 4.4.0 - eslint: 9.19.0(jiti@2.4.2) + eslint: 9.20.0(jiti@2.4.2) ts-api-utils: 2.0.1(typescript@5.7.3) typescript: 5.7.3 transitivePeerDependencies: - supports-color - '@typescript-eslint/types@8.23.0': {} + '@typescript-eslint/types@8.24.0': {} - '@typescript-eslint/typescript-estree@8.23.0(typescript@5.7.3)': + '@typescript-eslint/typescript-estree@8.24.0(typescript@5.7.3)': dependencies: - '@typescript-eslint/types': 8.23.0 - '@typescript-eslint/visitor-keys': 8.23.0 + '@typescript-eslint/types': 8.24.0 + '@typescript-eslint/visitor-keys': 8.24.0 debug: 4.4.0 fast-glob: 3.3.3 is-glob: 4.0.3 @@ -14808,20 +14786,20 @@ snapshots: transitivePeerDependencies: - supports-color - '@typescript-eslint/utils@8.23.0(eslint@9.19.0(jiti@2.4.2))(typescript@5.7.3)': + '@typescript-eslint/utils@8.24.0(eslint@9.20.0(jiti@2.4.2))(typescript@5.7.3)': dependencies: - '@eslint-community/eslint-utils': 4.4.0(eslint@9.19.0(jiti@2.4.2)) - '@typescript-eslint/scope-manager': 8.23.0 - '@typescript-eslint/types': 8.23.0 - '@typescript-eslint/typescript-estree': 8.23.0(typescript@5.7.3) - eslint: 9.19.0(jiti@2.4.2) + '@eslint-community/eslint-utils': 4.4.0(eslint@9.20.0(jiti@2.4.2)) + '@typescript-eslint/scope-manager': 8.24.0 + '@typescript-eslint/types': 8.24.0 + '@typescript-eslint/typescript-estree': 8.24.0(typescript@5.7.3) + eslint: 9.20.0(jiti@2.4.2) typescript: 5.7.3 transitivePeerDependencies: - supports-color - '@typescript-eslint/visitor-keys@8.23.0': + '@typescript-eslint/visitor-keys@8.24.0': dependencies: - '@typescript-eslint/types': 8.23.0 + '@typescript-eslint/types': 8.24.0 eslint-visitor-keys: 4.2.0 '@typescript/twoslash@3.1.0': @@ -14846,18 +14824,18 @@ snapshots: '@ungap/structured-clone@1.2.0': {} - '@vercel/analytics@1.4.1(react@19.0.0)(svelte@5.19.7)(vue@3.5.13(typescript@5.7.3))': + '@vercel/analytics@1.5.0(react@19.0.0)(svelte@5.19.9)(vue@3.5.13(typescript@5.7.3))': optionalDependencies: react: 19.0.0 - svelte: 5.19.7 + svelte: 5.19.9 vue: 3.5.13(typescript@5.7.3) '@vercel/edge@1.2.1': {} - '@vercel/nft@0.29.1(rollup@4.34.2)': + '@vercel/nft@0.29.1(rollup@4.34.6)': dependencies: '@mapbox/node-pre-gyp': 2.0.0 - '@rollup/pluginutils': 5.1.4(rollup@4.34.2) + '@rollup/pluginutils': 5.1.4(rollup@4.34.6) acorn: 8.14.0 acorn-import-attributes: 1.9.5(acorn@8.14.0) async-sema: 3.1.1 @@ -14880,30 +14858,30 @@ snapshots: optionalDependencies: ajv: 6.12.6 - '@vitejs/plugin-react@4.3.4(vite@6.0.11(@types/node@22.13.1)(jiti@2.4.2)(lightningcss@1.29.1)(sass@1.83.4)(yaml@2.5.1))': + '@vitejs/plugin-react@4.3.4(vite@6.1.0(@types/node@22.13.1)(jiti@2.4.2)(lightningcss@1.29.1)(sass@1.84.0)(yaml@2.5.1))': dependencies: '@babel/core': 7.26.0 '@babel/plugin-transform-react-jsx-self': 7.25.9(@babel/core@7.26.0) '@babel/plugin-transform-react-jsx-source': 7.25.9(@babel/core@7.26.0) '@types/babel__core': 7.20.5 react-refresh: 0.14.2 - vite: 6.0.11(@types/node@22.13.1)(jiti@2.4.2)(lightningcss@1.29.1)(sass@1.83.4)(yaml@2.5.1) + vite: 6.1.0(@types/node@22.13.1)(jiti@2.4.2)(lightningcss@1.29.1)(sass@1.84.0)(yaml@2.5.1) transitivePeerDependencies: - supports-color - '@vitejs/plugin-vue-jsx@4.1.1(vite@6.0.11(@types/node@22.13.1)(jiti@2.4.2)(lightningcss@1.29.1)(sass@1.83.4)(yaml@2.5.1))(vue@3.5.13(typescript@5.7.3))': + '@vitejs/plugin-vue-jsx@4.1.1(vite@6.1.0(@types/node@22.13.1)(jiti@2.4.2)(lightningcss@1.29.1)(sass@1.84.0)(yaml@2.5.1))(vue@3.5.13(typescript@5.7.3))': dependencies: '@babel/core': 7.26.0 '@babel/plugin-transform-typescript': 7.26.3(@babel/core@7.26.0) '@vue/babel-plugin-jsx': 1.2.5(@babel/core@7.26.0) - vite: 6.0.11(@types/node@22.13.1)(jiti@2.4.2)(lightningcss@1.29.1)(sass@1.83.4)(yaml@2.5.1) + vite: 6.1.0(@types/node@22.13.1)(jiti@2.4.2)(lightningcss@1.29.1)(sass@1.84.0)(yaml@2.5.1) vue: 3.5.13(typescript@5.7.3) transitivePeerDependencies: - supports-color - '@vitejs/plugin-vue@5.2.1(vite@6.0.11(@types/node@22.13.1)(jiti@2.4.2)(lightningcss@1.29.1)(sass@1.83.4)(yaml@2.5.1))(vue@3.5.13(typescript@5.7.3))': + '@vitejs/plugin-vue@5.2.1(vite@6.1.0(@types/node@22.13.1)(jiti@2.4.2)(lightningcss@1.29.1)(sass@1.84.0)(yaml@2.5.1))(vue@3.5.13(typescript@5.7.3))': dependencies: - vite: 6.0.11(@types/node@22.13.1)(jiti@2.4.2)(lightningcss@1.29.1)(sass@1.83.4)(yaml@2.5.1) + vite: 6.1.0(@types/node@22.13.1)(jiti@2.4.2)(lightningcss@1.29.1)(sass@1.84.0)(yaml@2.5.1) vue: 3.5.13(typescript@5.7.3) '@vitest/expect@3.0.5': @@ -14913,13 +14891,13 @@ snapshots: chai: 5.1.2 tinyrainbow: 2.0.0 - '@vitest/mocker@3.0.5(vite@6.0.11(@types/node@22.13.1)(jiti@2.4.2)(lightningcss@1.29.1)(sass@1.83.4)(yaml@2.5.1))': + '@vitest/mocker@3.0.5(vite@6.1.0(@types/node@22.13.1)(jiti@2.4.2)(lightningcss@1.29.1)(sass@1.84.0)(yaml@2.5.1))': dependencies: '@vitest/spy': 3.0.5 estree-walker: 3.0.3 magic-string: 0.30.17 optionalDependencies: - vite: 6.0.11(@types/node@22.13.1)(jiti@2.4.2)(lightningcss@1.29.1)(sass@1.83.4)(yaml@2.5.1) + vite: 6.1.0(@types/node@22.13.1)(jiti@2.4.2)(lightningcss@1.29.1)(sass@1.84.0)(yaml@2.5.1) '@vitest/pretty-format@3.0.5': dependencies: @@ -15048,7 +15026,7 @@ snapshots: '@vue/shared': 3.5.13 estree-walker: 2.0.2 magic-string: 0.30.17 - postcss: 8.5.1 + postcss: 8.5.2 source-map-js: 1.2.1 '@vue/compiler-ssr@3.5.13': @@ -15056,14 +15034,14 @@ snapshots: '@vue/compiler-dom': 3.5.13 '@vue/shared': 3.5.13 - '@vue/devtools-core@7.7.1(vite@6.0.11(@types/node@22.13.1)(jiti@2.4.2)(lightningcss@1.29.1)(sass@1.83.4)(yaml@2.5.1))(vue@3.5.13(typescript@5.7.3))': + '@vue/devtools-core@7.7.1(vite@6.1.0(@types/node@22.13.1)(jiti@2.4.2)(lightningcss@1.29.1)(sass@1.84.0)(yaml@2.5.1))(vue@3.5.13(typescript@5.7.3))': dependencies: '@vue/devtools-kit': 7.7.1 '@vue/devtools-shared': 7.7.1 mitt: 3.0.1 nanoid: 5.0.9 pathe: 2.0.2 - vite-hot-client: 0.2.4(vite@6.0.11(@types/node@22.13.1)(jiti@2.4.2)(lightningcss@1.29.1)(sass@1.83.4)(yaml@2.5.1)) + vite-hot-client: 0.2.4(vite@6.1.0(@types/node@22.13.1)(jiti@2.4.2)(lightningcss@1.29.1)(sass@1.84.0)(yaml@2.5.1)) vue: 3.5.13(typescript@5.7.3) transitivePeerDependencies: - vite @@ -15270,18 +15248,18 @@ snapshots: progress: 2.0.3 reinterval: 1.1.0 retimer: 3.0.0 - semver: 7.7.1 + semver: 7.6.3 subarg: 1.0.0 timestring: 6.0.0 - autoprefixer@10.4.20(postcss@8.5.1): + autoprefixer@10.4.20(postcss@8.5.2): dependencies: browserslist: 4.24.0 caniuse-lite: 1.0.30001667 fraction.js: 4.3.7 normalize-range: 0.1.2 picocolors: 1.1.1 - postcss: 8.5.1 + postcss: 8.5.2 postcss-value-parser: 4.2.0 axios@1.7.7: @@ -15612,21 +15590,21 @@ snapshots: dependencies: uncrypto: 0.1.3 - css-blank-pseudo@7.0.1(postcss@8.5.1): + css-blank-pseudo@7.0.1(postcss@8.5.2): dependencies: - postcss: 8.5.1 + postcss: 8.5.2 postcss-selector-parser: 7.0.0 - css-has-pseudo@7.0.2(postcss@8.5.1): + css-has-pseudo@7.0.2(postcss@8.5.2): dependencies: '@csstools/selector-specificity': 5.0.0(postcss-selector-parser@7.0.0) - postcss: 8.5.1 + postcss: 8.5.2 postcss-selector-parser: 7.0.0 postcss-value-parser: 4.2.0 - css-prefers-color-scheme@10.0.0(postcss@8.5.1): + css-prefers-color-scheme@10.0.0(postcss@8.5.2): dependencies: - postcss: 8.5.1 + postcss: 8.5.2 css-select@5.1.0: dependencies: @@ -15828,7 +15806,7 @@ snapshots: iconv-lite: 0.6.3 whatwg-encoding: 3.1.1 - enhanced-resolve@5.18.0: + enhanced-resolve@5.18.1: dependencies: graceful-fs: 4.2.11 tapable: 2.2.1 @@ -15870,14 +15848,6 @@ snapshots: esast-util-from-estree: 2.0.0 vfile-message: 4.0.2 - esbuild-plugin-copy@2.1.1(esbuild@0.24.2): - dependencies: - chalk: 4.1.2 - chokidar: 3.6.0 - esbuild: 0.24.2 - fs-extra: 10.1.0 - globby: 11.1.0 - esbuild@0.17.19: optionalDependencies: '@esbuild/android-arm': 0.17.19 @@ -15939,12 +15909,12 @@ snapshots: escape-string-regexp@5.0.0: {} - eslint-plugin-regexp@2.7.0(eslint@9.19.0(jiti@2.4.2)): + eslint-plugin-regexp@2.7.0(eslint@9.20.0(jiti@2.4.2)): dependencies: - '@eslint-community/eslint-utils': 4.4.0(eslint@9.19.0(jiti@2.4.2)) + '@eslint-community/eslint-utils': 4.4.0(eslint@9.20.0(jiti@2.4.2)) '@eslint-community/regexpp': 4.12.1 comment-parser: 1.4.1 - eslint: 9.19.0(jiti@2.4.2) + eslint: 9.20.0(jiti@2.4.2) jsdoc-type-pratt-parser: 4.1.0 refa: 0.12.1 regexp-ast-analysis: 0.7.1 @@ -15959,14 +15929,14 @@ snapshots: eslint-visitor-keys@4.2.0: {} - eslint@9.19.0(jiti@2.4.2): + eslint@9.20.0(jiti@2.4.2): dependencies: - '@eslint-community/eslint-utils': 4.4.0(eslint@9.19.0(jiti@2.4.2)) + '@eslint-community/eslint-utils': 4.4.0(eslint@9.20.0(jiti@2.4.2)) '@eslint-community/regexpp': 4.12.1 '@eslint/config-array': 0.19.1 - '@eslint/core': 0.10.0 + '@eslint/core': 0.11.0 '@eslint/eslintrc': 3.2.0 - '@eslint/js': 9.19.0 + '@eslint/js': 9.20.0 '@eslint/plugin-kit': 0.2.5 '@humanfs/node': 0.16.6 '@humanwhocodes/module-importer': 1.0.1 @@ -16170,6 +16140,10 @@ snapshots: dependencies: reusify: 1.0.4 + fdir@6.4.3(picomatch@4.0.2): + optionalDependencies: + picomatch: 4.0.2 + fenceparser@1.1.1: {} fetch-blob@3.2.0: @@ -16257,12 +16231,6 @@ snapshots: fresh@0.5.2: {} - fs-extra@10.1.0: - dependencies: - graceful-fs: 4.2.11 - jsonfile: 6.1.0 - universalify: 2.0.1 - fs-extra@11.2.0: dependencies: graceful-fs: 4.2.11 @@ -16353,7 +16321,7 @@ snapshots: jackspeak: 3.4.3 minimatch: 9.0.5 minipass: 7.1.2 - package-json-from-dist: 1.0.1 + package-json-from-dist: 1.0.0 path-scurry: 1.11.1 glob@7.2.3: @@ -16369,8 +16337,6 @@ snapshots: globals@14.0.0: {} - globalyzer@0.1.0: {} - globby@11.1.0: dependencies: array-union: 2.1.0 @@ -16380,17 +16346,6 @@ snapshots: merge2: 1.4.1 slash: 3.0.0 - globby@14.0.2: - dependencies: - '@sindresorhus/merge-streams': 2.3.0 - fast-glob: 3.3.3 - ignore: 5.3.2 - path-type: 5.0.0 - slash: 5.1.0 - unicorn-magic: 0.1.0 - - globrex@0.1.2: {} - gopd@1.2.0: {} graceful-fs@4.2.11: {} @@ -16725,7 +16680,7 @@ snapshots: dependencies: binary-extensions: 2.3.0 - is-core-module@2.16.1: + is-core-module@2.15.1: dependencies: hasown: 2.0.2 @@ -16787,7 +16742,7 @@ snapshots: optionalDependencies: '@pkgjs/parseargs': 0.11.0 - jiti@1.21.7: {} + jiti@1.21.6: {} jiti@2.4.2: {} @@ -16951,12 +16906,12 @@ snapshots: htmlparser2: 8.0.2 uhyphen: 0.2.0 - linkedom@0.18.7: + linkedom@0.18.9: dependencies: css-select: 5.1.0 cssom: 0.5.0 html-escaper: 3.0.3 - htmlparser2: 9.1.0 + htmlparser2: 10.0.0 uhyphen: 0.2.0 lit-element@4.1.0: @@ -17641,7 +17596,7 @@ snapshots: mlly@1.7.4: dependencies: acorn: 8.14.0 - pathe: 2.0.2 + pathe: 2.0.1 pkg-types: 1.3.1 ufo: 1.5.4 @@ -17778,7 +17733,7 @@ snapshots: dependencies: mimic-fn: 4.0.0 - oniguruma-to-es@2.2.0: + oniguruma-to-es@2.3.0: dependencies: emoji-regex-xs: 1.0.0 regex: 5.1.1 @@ -17853,7 +17808,7 @@ snapshots: p-try@2.2.0: {} - package-json-from-dist@1.0.1: {} + package-json-from-dist@1.0.0: {} package-manager-detector@0.2.8: {} @@ -17936,10 +17891,10 @@ snapshots: path-type@4.0.0: {} - path-type@5.0.0: {} - pathe@1.1.2: {} + pathe@2.0.1: {} + pathe@2.0.2: {} pathval@2.0.0: {} @@ -17966,7 +17921,7 @@ snapshots: dependencies: confbox: 0.1.8 mlly: 1.7.4 - pathe: 2.0.2 + pathe: 2.0.1 playwright-core@1.50.1: {} @@ -17978,240 +17933,240 @@ snapshots: port-authority@2.0.1: {} - postcss-attribute-case-insensitive@7.0.1(postcss@8.5.1): + postcss-attribute-case-insensitive@7.0.1(postcss@8.5.2): dependencies: - postcss: 8.5.1 + postcss: 8.5.2 postcss-selector-parser: 7.0.0 - postcss-clamp@4.1.0(postcss@8.5.1): + postcss-clamp@4.1.0(postcss@8.5.2): dependencies: - postcss: 8.5.1 + postcss: 8.5.2 postcss-value-parser: 4.2.0 - postcss-color-functional-notation@7.0.7(postcss@8.5.1): + postcss-color-functional-notation@7.0.7(postcss@8.5.2): dependencies: '@csstools/css-color-parser': 3.0.7(@csstools/css-parser-algorithms@3.0.4(@csstools/css-tokenizer@3.0.3))(@csstools/css-tokenizer@3.0.3) '@csstools/css-parser-algorithms': 3.0.4(@csstools/css-tokenizer@3.0.3) '@csstools/css-tokenizer': 3.0.3 - '@csstools/postcss-progressive-custom-properties': 4.0.0(postcss@8.5.1) - '@csstools/utilities': 2.0.0(postcss@8.5.1) - postcss: 8.5.1 + '@csstools/postcss-progressive-custom-properties': 4.0.0(postcss@8.5.2) + '@csstools/utilities': 2.0.0(postcss@8.5.2) + postcss: 8.5.2 - postcss-color-hex-alpha@10.0.0(postcss@8.5.1): + postcss-color-hex-alpha@10.0.0(postcss@8.5.2): dependencies: - '@csstools/utilities': 2.0.0(postcss@8.5.1) - postcss: 8.5.1 + '@csstools/utilities': 2.0.0(postcss@8.5.2) + postcss: 8.5.2 postcss-value-parser: 4.2.0 - postcss-color-rebeccapurple@10.0.0(postcss@8.5.1): + postcss-color-rebeccapurple@10.0.0(postcss@8.5.2): dependencies: - '@csstools/utilities': 2.0.0(postcss@8.5.1) - postcss: 8.5.1 + '@csstools/utilities': 2.0.0(postcss@8.5.2) + postcss: 8.5.2 postcss-value-parser: 4.2.0 - postcss-custom-media@11.0.5(postcss@8.5.1): + postcss-custom-media@11.0.5(postcss@8.5.2): dependencies: '@csstools/cascade-layer-name-parser': 2.0.4(@csstools/css-parser-algorithms@3.0.4(@csstools/css-tokenizer@3.0.3))(@csstools/css-tokenizer@3.0.3) '@csstools/css-parser-algorithms': 3.0.4(@csstools/css-tokenizer@3.0.3) '@csstools/css-tokenizer': 3.0.3 '@csstools/media-query-list-parser': 4.0.2(@csstools/css-parser-algorithms@3.0.4(@csstools/css-tokenizer@3.0.3))(@csstools/css-tokenizer@3.0.3) - postcss: 8.5.1 + postcss: 8.5.2 - postcss-custom-properties@14.0.4(postcss@8.5.1): + postcss-custom-properties@14.0.4(postcss@8.5.2): dependencies: '@csstools/cascade-layer-name-parser': 2.0.4(@csstools/css-parser-algorithms@3.0.4(@csstools/css-tokenizer@3.0.3))(@csstools/css-tokenizer@3.0.3) '@csstools/css-parser-algorithms': 3.0.4(@csstools/css-tokenizer@3.0.3) '@csstools/css-tokenizer': 3.0.3 - '@csstools/utilities': 2.0.0(postcss@8.5.1) - postcss: 8.5.1 + '@csstools/utilities': 2.0.0(postcss@8.5.2) + postcss: 8.5.2 postcss-value-parser: 4.2.0 - postcss-custom-selectors@8.0.4(postcss@8.5.1): + postcss-custom-selectors@8.0.4(postcss@8.5.2): dependencies: '@csstools/cascade-layer-name-parser': 2.0.4(@csstools/css-parser-algorithms@3.0.4(@csstools/css-tokenizer@3.0.3))(@csstools/css-tokenizer@3.0.3) '@csstools/css-parser-algorithms': 3.0.4(@csstools/css-tokenizer@3.0.3) '@csstools/css-tokenizer': 3.0.3 - postcss: 8.5.1 + postcss: 8.5.2 postcss-selector-parser: 7.0.0 - postcss-dir-pseudo-class@9.0.1(postcss@8.5.1): + postcss-dir-pseudo-class@9.0.1(postcss@8.5.2): dependencies: - postcss: 8.5.1 + postcss: 8.5.2 postcss-selector-parser: 7.0.0 - postcss-double-position-gradients@6.0.0(postcss@8.5.1): + postcss-double-position-gradients@6.0.0(postcss@8.5.2): dependencies: - '@csstools/postcss-progressive-custom-properties': 4.0.0(postcss@8.5.1) - '@csstools/utilities': 2.0.0(postcss@8.5.1) - postcss: 8.5.1 + '@csstools/postcss-progressive-custom-properties': 4.0.0(postcss@8.5.2) + '@csstools/utilities': 2.0.0(postcss@8.5.2) + postcss: 8.5.2 postcss-value-parser: 4.2.0 - postcss-focus-visible@10.0.1(postcss@8.5.1): + postcss-focus-visible@10.0.1(postcss@8.5.2): dependencies: - postcss: 8.5.1 + postcss: 8.5.2 postcss-selector-parser: 7.0.0 - postcss-focus-within@9.0.1(postcss@8.5.1): + postcss-focus-within@9.0.1(postcss@8.5.2): dependencies: - postcss: 8.5.1 + postcss: 8.5.2 postcss-selector-parser: 7.0.0 - postcss-font-variant@5.0.0(postcss@8.5.1): + postcss-font-variant@5.0.0(postcss@8.5.2): dependencies: - postcss: 8.5.1 + postcss: 8.5.2 - postcss-gap-properties@6.0.0(postcss@8.5.1): + postcss-gap-properties@6.0.0(postcss@8.5.2): dependencies: - postcss: 8.5.1 + postcss: 8.5.2 - postcss-image-set-function@7.0.0(postcss@8.5.1): + postcss-image-set-function@7.0.0(postcss@8.5.2): dependencies: - '@csstools/utilities': 2.0.0(postcss@8.5.1) - postcss: 8.5.1 + '@csstools/utilities': 2.0.0(postcss@8.5.2) + postcss: 8.5.2 postcss-value-parser: 4.2.0 - postcss-import@15.1.0(postcss@8.5.1): + postcss-import@15.1.0(postcss@8.5.2): dependencies: - postcss: 8.5.1 + postcss: 8.5.2 postcss-value-parser: 4.2.0 read-cache: 1.0.0 - resolve: 1.22.10 + resolve: 1.22.8 - postcss-js@4.0.1(postcss@8.5.1): + postcss-js@4.0.1(postcss@8.5.2): dependencies: camelcase-css: 2.0.1 - postcss: 8.5.1 + postcss: 8.5.2 - postcss-lab-function@7.0.7(postcss@8.5.1): + postcss-lab-function@7.0.7(postcss@8.5.2): dependencies: '@csstools/css-color-parser': 3.0.7(@csstools/css-parser-algorithms@3.0.4(@csstools/css-tokenizer@3.0.3))(@csstools/css-tokenizer@3.0.3) '@csstools/css-parser-algorithms': 3.0.4(@csstools/css-tokenizer@3.0.3) '@csstools/css-tokenizer': 3.0.3 - '@csstools/postcss-progressive-custom-properties': 4.0.0(postcss@8.5.1) - '@csstools/utilities': 2.0.0(postcss@8.5.1) - postcss: 8.5.1 + '@csstools/postcss-progressive-custom-properties': 4.0.0(postcss@8.5.2) + '@csstools/utilities': 2.0.0(postcss@8.5.2) + postcss: 8.5.2 - postcss-load-config@4.0.2(postcss@8.5.1): + postcss-load-config@4.0.2(postcss@8.5.2): dependencies: lilconfig: 3.1.3 yaml: 2.5.1 optionalDependencies: - postcss: 8.5.1 + postcss: 8.5.2 - postcss-logical@8.0.0(postcss@8.5.1): + postcss-logical@8.0.0(postcss@8.5.2): dependencies: - postcss: 8.5.1 + postcss: 8.5.2 postcss-value-parser: 4.2.0 - postcss-nested@6.2.0(postcss@8.5.1): + postcss-nested@6.2.0(postcss@8.5.2): dependencies: - postcss: 8.5.1 + postcss: 8.5.2 postcss-selector-parser: 6.1.2 - postcss-nesting@13.0.1(postcss@8.5.1): + postcss-nesting@13.0.1(postcss@8.5.2): dependencies: '@csstools/selector-resolve-nested': 3.0.0(postcss-selector-parser@7.0.0) '@csstools/selector-specificity': 5.0.0(postcss-selector-parser@7.0.0) - postcss: 8.5.1 + postcss: 8.5.2 postcss-selector-parser: 7.0.0 - postcss-opacity-percentage@3.0.0(postcss@8.5.1): + postcss-opacity-percentage@3.0.0(postcss@8.5.2): dependencies: - postcss: 8.5.1 + postcss: 8.5.2 - postcss-overflow-shorthand@6.0.0(postcss@8.5.1): + postcss-overflow-shorthand@6.0.0(postcss@8.5.2): dependencies: - postcss: 8.5.1 + postcss: 8.5.2 postcss-value-parser: 4.2.0 - postcss-page-break@3.0.4(postcss@8.5.1): + postcss-page-break@3.0.4(postcss@8.5.2): dependencies: - postcss: 8.5.1 + postcss: 8.5.2 - postcss-place@10.0.0(postcss@8.5.1): + postcss-place@10.0.0(postcss@8.5.2): dependencies: - postcss: 8.5.1 + postcss: 8.5.2 postcss-value-parser: 4.2.0 - postcss-preset-env@10.1.3(postcss@8.5.1): + postcss-preset-env@10.1.3(postcss@8.5.2): dependencies: - '@csstools/postcss-cascade-layers': 5.0.1(postcss@8.5.1) - '@csstools/postcss-color-function': 4.0.7(postcss@8.5.1) - '@csstools/postcss-color-mix-function': 3.0.7(postcss@8.5.1) - '@csstools/postcss-content-alt-text': 2.0.4(postcss@8.5.1) - '@csstools/postcss-exponential-functions': 2.0.6(postcss@8.5.1) - '@csstools/postcss-font-format-keywords': 4.0.0(postcss@8.5.1) - '@csstools/postcss-gamut-mapping': 2.0.7(postcss@8.5.1) - '@csstools/postcss-gradients-interpolation-method': 5.0.7(postcss@8.5.1) - '@csstools/postcss-hwb-function': 4.0.7(postcss@8.5.1) - '@csstools/postcss-ic-unit': 4.0.0(postcss@8.5.1) - '@csstools/postcss-initial': 2.0.0(postcss@8.5.1) - '@csstools/postcss-is-pseudo-class': 5.0.1(postcss@8.5.1) - '@csstools/postcss-light-dark-function': 2.0.7(postcss@8.5.1) - '@csstools/postcss-logical-float-and-clear': 3.0.0(postcss@8.5.1) - '@csstools/postcss-logical-overflow': 2.0.0(postcss@8.5.1) - '@csstools/postcss-logical-overscroll-behavior': 2.0.0(postcss@8.5.1) - '@csstools/postcss-logical-resize': 3.0.0(postcss@8.5.1) - '@csstools/postcss-logical-viewport-units': 3.0.3(postcss@8.5.1) - '@csstools/postcss-media-minmax': 2.0.6(postcss@8.5.1) - '@csstools/postcss-media-queries-aspect-ratio-number-values': 3.0.4(postcss@8.5.1) - '@csstools/postcss-nested-calc': 4.0.0(postcss@8.5.1) - '@csstools/postcss-normalize-display-values': 4.0.0(postcss@8.5.1) - '@csstools/postcss-oklab-function': 4.0.7(postcss@8.5.1) - '@csstools/postcss-progressive-custom-properties': 4.0.0(postcss@8.5.1) - '@csstools/postcss-random-function': 1.0.2(postcss@8.5.1) - '@csstools/postcss-relative-color-syntax': 3.0.7(postcss@8.5.1) - '@csstools/postcss-scope-pseudo-class': 4.0.1(postcss@8.5.1) - '@csstools/postcss-sign-functions': 1.1.1(postcss@8.5.1) - '@csstools/postcss-stepped-value-functions': 4.0.6(postcss@8.5.1) - '@csstools/postcss-text-decoration-shorthand': 4.0.1(postcss@8.5.1) - '@csstools/postcss-trigonometric-functions': 4.0.6(postcss@8.5.1) - '@csstools/postcss-unset-value': 4.0.0(postcss@8.5.1) - autoprefixer: 10.4.20(postcss@8.5.1) + '@csstools/postcss-cascade-layers': 5.0.1(postcss@8.5.2) + '@csstools/postcss-color-function': 4.0.7(postcss@8.5.2) + '@csstools/postcss-color-mix-function': 3.0.7(postcss@8.5.2) + '@csstools/postcss-content-alt-text': 2.0.4(postcss@8.5.2) + '@csstools/postcss-exponential-functions': 2.0.6(postcss@8.5.2) + '@csstools/postcss-font-format-keywords': 4.0.0(postcss@8.5.2) + '@csstools/postcss-gamut-mapping': 2.0.7(postcss@8.5.2) + '@csstools/postcss-gradients-interpolation-method': 5.0.7(postcss@8.5.2) + '@csstools/postcss-hwb-function': 4.0.7(postcss@8.5.2) + '@csstools/postcss-ic-unit': 4.0.0(postcss@8.5.2) + '@csstools/postcss-initial': 2.0.0(postcss@8.5.2) + '@csstools/postcss-is-pseudo-class': 5.0.1(postcss@8.5.2) + '@csstools/postcss-light-dark-function': 2.0.7(postcss@8.5.2) + '@csstools/postcss-logical-float-and-clear': 3.0.0(postcss@8.5.2) + '@csstools/postcss-logical-overflow': 2.0.0(postcss@8.5.2) + '@csstools/postcss-logical-overscroll-behavior': 2.0.0(postcss@8.5.2) + '@csstools/postcss-logical-resize': 3.0.0(postcss@8.5.2) + '@csstools/postcss-logical-viewport-units': 3.0.3(postcss@8.5.2) + '@csstools/postcss-media-minmax': 2.0.6(postcss@8.5.2) + '@csstools/postcss-media-queries-aspect-ratio-number-values': 3.0.4(postcss@8.5.2) + '@csstools/postcss-nested-calc': 4.0.0(postcss@8.5.2) + '@csstools/postcss-normalize-display-values': 4.0.0(postcss@8.5.2) + '@csstools/postcss-oklab-function': 4.0.7(postcss@8.5.2) + '@csstools/postcss-progressive-custom-properties': 4.0.0(postcss@8.5.2) + '@csstools/postcss-random-function': 1.0.2(postcss@8.5.2) + '@csstools/postcss-relative-color-syntax': 3.0.7(postcss@8.5.2) + '@csstools/postcss-scope-pseudo-class': 4.0.1(postcss@8.5.2) + '@csstools/postcss-sign-functions': 1.1.1(postcss@8.5.2) + '@csstools/postcss-stepped-value-functions': 4.0.6(postcss@8.5.2) + '@csstools/postcss-text-decoration-shorthand': 4.0.1(postcss@8.5.2) + '@csstools/postcss-trigonometric-functions': 4.0.6(postcss@8.5.2) + '@csstools/postcss-unset-value': 4.0.0(postcss@8.5.2) + autoprefixer: 10.4.20(postcss@8.5.2) browserslist: 4.24.0 - css-blank-pseudo: 7.0.1(postcss@8.5.1) - css-has-pseudo: 7.0.2(postcss@8.5.1) - css-prefers-color-scheme: 10.0.0(postcss@8.5.1) + css-blank-pseudo: 7.0.1(postcss@8.5.2) + css-has-pseudo: 7.0.2(postcss@8.5.2) + css-prefers-color-scheme: 10.0.0(postcss@8.5.2) cssdb: 8.2.3 - postcss: 8.5.1 - postcss-attribute-case-insensitive: 7.0.1(postcss@8.5.1) - postcss-clamp: 4.1.0(postcss@8.5.1) - postcss-color-functional-notation: 7.0.7(postcss@8.5.1) - postcss-color-hex-alpha: 10.0.0(postcss@8.5.1) - postcss-color-rebeccapurple: 10.0.0(postcss@8.5.1) - postcss-custom-media: 11.0.5(postcss@8.5.1) - postcss-custom-properties: 14.0.4(postcss@8.5.1) - postcss-custom-selectors: 8.0.4(postcss@8.5.1) - postcss-dir-pseudo-class: 9.0.1(postcss@8.5.1) - postcss-double-position-gradients: 6.0.0(postcss@8.5.1) - postcss-focus-visible: 10.0.1(postcss@8.5.1) - postcss-focus-within: 9.0.1(postcss@8.5.1) - postcss-font-variant: 5.0.0(postcss@8.5.1) - postcss-gap-properties: 6.0.0(postcss@8.5.1) - postcss-image-set-function: 7.0.0(postcss@8.5.1) - postcss-lab-function: 7.0.7(postcss@8.5.1) - postcss-logical: 8.0.0(postcss@8.5.1) - postcss-nesting: 13.0.1(postcss@8.5.1) - postcss-opacity-percentage: 3.0.0(postcss@8.5.1) - postcss-overflow-shorthand: 6.0.0(postcss@8.5.1) - postcss-page-break: 3.0.4(postcss@8.5.1) - postcss-place: 10.0.0(postcss@8.5.1) - postcss-pseudo-class-any-link: 10.0.1(postcss@8.5.1) - postcss-replace-overflow-wrap: 4.0.0(postcss@8.5.1) - postcss-selector-not: 8.0.1(postcss@8.5.1) + postcss: 8.5.2 + postcss-attribute-case-insensitive: 7.0.1(postcss@8.5.2) + postcss-clamp: 4.1.0(postcss@8.5.2) + postcss-color-functional-notation: 7.0.7(postcss@8.5.2) + postcss-color-hex-alpha: 10.0.0(postcss@8.5.2) + postcss-color-rebeccapurple: 10.0.0(postcss@8.5.2) + postcss-custom-media: 11.0.5(postcss@8.5.2) + postcss-custom-properties: 14.0.4(postcss@8.5.2) + postcss-custom-selectors: 8.0.4(postcss@8.5.2) + postcss-dir-pseudo-class: 9.0.1(postcss@8.5.2) + postcss-double-position-gradients: 6.0.0(postcss@8.5.2) + postcss-focus-visible: 10.0.1(postcss@8.5.2) + postcss-focus-within: 9.0.1(postcss@8.5.2) + postcss-font-variant: 5.0.0(postcss@8.5.2) + postcss-gap-properties: 6.0.0(postcss@8.5.2) + postcss-image-set-function: 7.0.0(postcss@8.5.2) + postcss-lab-function: 7.0.7(postcss@8.5.2) + postcss-logical: 8.0.0(postcss@8.5.2) + postcss-nesting: 13.0.1(postcss@8.5.2) + postcss-opacity-percentage: 3.0.0(postcss@8.5.2) + postcss-overflow-shorthand: 6.0.0(postcss@8.5.2) + postcss-page-break: 3.0.4(postcss@8.5.2) + postcss-place: 10.0.0(postcss@8.5.2) + postcss-pseudo-class-any-link: 10.0.1(postcss@8.5.2) + postcss-replace-overflow-wrap: 4.0.0(postcss@8.5.2) + postcss-selector-not: 8.0.1(postcss@8.5.2) - postcss-pseudo-class-any-link@10.0.1(postcss@8.5.1): + postcss-pseudo-class-any-link@10.0.1(postcss@8.5.2): dependencies: - postcss: 8.5.1 + postcss: 8.5.2 postcss-selector-parser: 7.0.0 - postcss-replace-overflow-wrap@4.0.0(postcss@8.5.1): + postcss-replace-overflow-wrap@4.0.0(postcss@8.5.2): dependencies: - postcss: 8.5.1 + postcss: 8.5.2 - postcss-selector-not@8.0.1(postcss@8.5.1): + postcss-selector-not@8.0.1(postcss@8.5.2): dependencies: - postcss: 8.5.1 + postcss: 8.5.2 postcss-selector-parser: 7.0.0 postcss-selector-parser@6.1.2: @@ -18226,7 +18181,7 @@ snapshots: postcss-value-parser@4.2.0: {} - postcss@8.5.1: + postcss@8.5.2: dependencies: nanoid: 3.3.8 picocolors: 1.1.1 @@ -18590,9 +18545,9 @@ snapshots: resolve-from@5.0.0: {} - resolve@1.22.10: + resolve@1.22.8: dependencies: - is-core-module: 2.16.1 + is-core-module: 2.15.1 path-parse: 1.0.7 supports-preserve-symlinks-flag: 1.0.0 @@ -18650,29 +18605,29 @@ snapshots: dependencies: estree-walker: 0.6.1 - rollup@4.34.2: + rollup@4.34.6: dependencies: '@types/estree': 1.0.6 optionalDependencies: - '@rollup/rollup-android-arm-eabi': 4.34.2 - '@rollup/rollup-android-arm64': 4.34.2 - '@rollup/rollup-darwin-arm64': 4.34.2 - '@rollup/rollup-darwin-x64': 4.34.2 - '@rollup/rollup-freebsd-arm64': 4.34.2 - '@rollup/rollup-freebsd-x64': 4.34.2 - '@rollup/rollup-linux-arm-gnueabihf': 4.34.2 - '@rollup/rollup-linux-arm-musleabihf': 4.34.2 - '@rollup/rollup-linux-arm64-gnu': 4.34.2 - '@rollup/rollup-linux-arm64-musl': 4.34.2 - '@rollup/rollup-linux-loongarch64-gnu': 4.34.2 - '@rollup/rollup-linux-powerpc64le-gnu': 4.34.2 - '@rollup/rollup-linux-riscv64-gnu': 4.34.2 - '@rollup/rollup-linux-s390x-gnu': 4.34.2 - '@rollup/rollup-linux-x64-gnu': 4.34.2 - '@rollup/rollup-linux-x64-musl': 4.34.2 - '@rollup/rollup-win32-arm64-msvc': 4.34.2 - '@rollup/rollup-win32-ia32-msvc': 4.34.2 - '@rollup/rollup-win32-x64-msvc': 4.34.2 + '@rollup/rollup-android-arm-eabi': 4.34.6 + '@rollup/rollup-android-arm64': 4.34.6 + '@rollup/rollup-darwin-arm64': 4.34.6 + '@rollup/rollup-darwin-x64': 4.34.6 + '@rollup/rollup-freebsd-arm64': 4.34.6 + '@rollup/rollup-freebsd-x64': 4.34.6 + '@rollup/rollup-linux-arm-gnueabihf': 4.34.6 + '@rollup/rollup-linux-arm-musleabihf': 4.34.6 + '@rollup/rollup-linux-arm64-gnu': 4.34.6 + '@rollup/rollup-linux-arm64-musl': 4.34.6 + '@rollup/rollup-linux-loongarch64-gnu': 4.34.6 + '@rollup/rollup-linux-powerpc64le-gnu': 4.34.6 + '@rollup/rollup-linux-riscv64-gnu': 4.34.6 + '@rollup/rollup-linux-s390x-gnu': 4.34.6 + '@rollup/rollup-linux-x64-gnu': 4.34.6 + '@rollup/rollup-linux-x64-musl': 4.34.6 + '@rollup/rollup-win32-arm64-msvc': 4.34.6 + '@rollup/rollup-win32-ia32-msvc': 4.34.6 + '@rollup/rollup-win32-x64-msvc': 4.34.6 fsevents: 2.3.3 rrweb-cssom@0.6.0: {} @@ -18697,7 +18652,7 @@ snapshots: dependencies: suf-log: 2.5.3 - sass@1.83.4: + sass@1.84.0: dependencies: chokidar: 4.0.1 immutable: 5.0.3 @@ -18725,6 +18680,8 @@ snapshots: semver@6.3.1: {} + semver@7.6.3: {} + semver@7.7.1: {} send@0.19.0: @@ -18787,7 +18744,7 @@ snapshots: dependencies: color: 4.2.3 detect-libc: 2.0.3 - semver: 7.7.1 + semver: 7.6.3 optionalDependencies: '@img/sharp-darwin-arm64': 0.33.3 '@img/sharp-darwin-x64': 0.33.3 @@ -18936,8 +18893,6 @@ snapshots: slash@3.0.0: {} - slash@5.1.0: {} - slice-ansi@5.0.0: dependencies: ansi-styles: 6.2.1 @@ -19099,14 +19054,14 @@ snapshots: supports-preserve-symlinks-flag@1.0.0: {} - svelte2tsx@0.7.34(svelte@5.19.7)(typescript@5.7.3): + svelte2tsx@0.7.34(svelte@5.19.9)(typescript@5.7.3): dependencies: dedent-js: 1.0.1 pascal-case: 3.1.2 - svelte: 5.19.7 + svelte: 5.19.9 typescript: 5.7.3 - svelte@5.19.7: + svelte@5.19.9: dependencies: '@ampproject/remapping': 2.3.0 '@jridgewell/sourcemap-codec': 1.5.0 @@ -19147,24 +19102,24 @@ snapshots: fast-glob: 3.3.3 glob-parent: 6.0.2 is-glob: 4.0.3 - jiti: 1.21.7 + jiti: 1.21.6 lilconfig: 3.1.3 micromatch: 4.0.8 normalize-path: 3.0.0 object-hash: 3.0.0 picocolors: 1.1.1 - postcss: 8.5.1 - postcss-import: 15.1.0(postcss@8.5.1) - postcss-js: 4.0.1(postcss@8.5.1) - postcss-load-config: 4.0.2(postcss@8.5.1) - postcss-nested: 6.2.0(postcss@8.5.1) + postcss: 8.5.2 + postcss-import: 15.1.0(postcss@8.5.2) + postcss-js: 4.0.1(postcss@8.5.2) + postcss-load-config: 4.0.2(postcss@8.5.2) + postcss-nested: 6.2.0(postcss@8.5.2) postcss-selector-parser: 6.1.2 - resolve: 1.22.10 + resolve: 1.22.8 sucrase: 3.35.0 transitivePeerDependencies: - ts-node - tailwindcss@4.0.3: {} + tailwindcss@4.0.6: {} tapable@2.2.1: {} @@ -19203,15 +19158,15 @@ snapshots: timestring@6.0.0: {} - tiny-glob@0.2.9: - dependencies: - globalyzer: 0.1.0 - globrex: 0.1.2 - tinybench@2.9.0: {} tinyexec@0.3.2: {} + tinyglobby@0.2.12: + dependencies: + fdir: 6.4.3(picomatch@4.0.2) + picomatch: 4.0.2 + tinypool@1.0.2: {} tinyrainbow@2.0.0: {} @@ -19263,32 +19218,32 @@ snapshots: tslib@2.6.2: {} - turbo-darwin-64@2.4.0: + turbo-darwin-64@2.4.1: optional: true - turbo-darwin-arm64@2.4.0: + turbo-darwin-arm64@2.4.1: optional: true - turbo-linux-64@2.4.0: + turbo-linux-64@2.4.1: optional: true - turbo-linux-arm64@2.4.0: + turbo-linux-arm64@2.4.1: optional: true - turbo-windows-64@2.4.0: + turbo-windows-64@2.4.1: optional: true - turbo-windows-arm64@2.4.0: + turbo-windows-arm64@2.4.1: optional: true - turbo@2.4.0: + turbo@2.4.1: optionalDependencies: - turbo-darwin-64: 2.4.0 - turbo-darwin-arm64: 2.4.0 - turbo-linux-64: 2.4.0 - turbo-linux-arm64: 2.4.0 - turbo-windows-64: 2.4.0 - turbo-windows-arm64: 2.4.0 + turbo-darwin-64: 2.4.1 + turbo-darwin-arm64: 2.4.1 + turbo-linux-64: 2.4.1 + turbo-linux-arm64: 2.4.1 + turbo-windows-64: 2.4.1 + turbo-windows-arm64: 2.4.1 type-check@0.4.0: dependencies: @@ -19317,12 +19272,12 @@ snapshots: dependencies: semver: 7.7.1 - typescript-eslint@8.23.0(eslint@9.19.0(jiti@2.4.2))(typescript@5.7.3): + typescript-eslint@8.24.0(eslint@9.20.0(jiti@2.4.2))(typescript@5.7.3): dependencies: - '@typescript-eslint/eslint-plugin': 8.23.0(@typescript-eslint/parser@8.23.0(eslint@9.19.0(jiti@2.4.2))(typescript@5.7.3))(eslint@9.19.0(jiti@2.4.2))(typescript@5.7.3) - '@typescript-eslint/parser': 8.23.0(eslint@9.19.0(jiti@2.4.2))(typescript@5.7.3) - '@typescript-eslint/utils': 8.23.0(eslint@9.19.0(jiti@2.4.2))(typescript@5.7.3) - eslint: 9.19.0(jiti@2.4.2) + '@typescript-eslint/eslint-plugin': 8.24.0(@typescript-eslint/parser@8.24.0(eslint@9.20.0(jiti@2.4.2))(typescript@5.7.3))(eslint@9.20.0(jiti@2.4.2))(typescript@5.7.3) + '@typescript-eslint/parser': 8.24.0(eslint@9.20.0(jiti@2.4.2))(typescript@5.7.3) + '@typescript-eslint/utils': 8.24.0(eslint@9.20.0(jiti@2.4.2))(typescript@5.7.3) + eslint: 9.20.0(jiti@2.4.2) typescript: 5.7.3 transitivePeerDependencies: - supports-color @@ -19365,8 +19320,6 @@ snapshots: pathe: 1.1.2 ufo: 1.5.4 - unicorn-magic@0.1.0: {} - unicorn-magic@0.3.0: {} unified@11.0.5: @@ -19525,17 +19478,17 @@ snapshots: '@types/unist': 3.0.3 vfile-message: 4.0.2 - vite-hot-client@0.2.4(vite@6.0.11(@types/node@22.13.1)(jiti@2.4.2)(lightningcss@1.29.1)(sass@1.83.4)(yaml@2.5.1)): + vite-hot-client@0.2.4(vite@6.1.0(@types/node@22.13.1)(jiti@2.4.2)(lightningcss@1.29.1)(sass@1.84.0)(yaml@2.5.1)): dependencies: - vite: 6.0.11(@types/node@22.13.1)(jiti@2.4.2)(lightningcss@1.29.1)(sass@1.83.4)(yaml@2.5.1) + vite: 6.1.0(@types/node@22.13.1)(jiti@2.4.2)(lightningcss@1.29.1)(sass@1.84.0)(yaml@2.5.1) - vite-node@3.0.5(@types/node@22.13.1)(jiti@2.4.2)(lightningcss@1.29.1)(sass@1.83.4)(yaml@2.5.1): + vite-node@3.0.5(@types/node@22.13.1)(jiti@2.4.2)(lightningcss@1.29.1)(sass@1.84.0)(yaml@2.5.1): dependencies: cac: 6.7.14 debug: 4.4.0 es-module-lexer: 1.6.0 pathe: 2.0.2 - vite: 6.0.11(@types/node@22.13.1)(jiti@2.4.2)(lightningcss@1.29.1)(sass@1.83.4)(yaml@2.5.1) + vite: 6.1.0(@types/node@22.13.1)(jiti@2.4.2)(lightningcss@1.29.1)(sass@1.84.0)(yaml@2.5.1) transitivePeerDependencies: - '@types/node' - jiti @@ -19550,10 +19503,10 @@ snapshots: - tsx - yaml - vite-plugin-inspect@0.8.9(rollup@4.34.2)(vite@6.0.11(@types/node@22.13.1)(jiti@2.4.2)(lightningcss@1.29.1)(sass@1.83.4)(yaml@2.5.1)): + vite-plugin-inspect@0.8.9(rollup@4.34.6)(vite@6.1.0(@types/node@22.13.1)(jiti@2.4.2)(lightningcss@1.29.1)(sass@1.84.0)(yaml@2.5.1)): dependencies: '@antfu/utils': 0.7.10 - '@rollup/pluginutils': 5.1.4(rollup@4.34.2) + '@rollup/pluginutils': 5.1.4(rollup@4.34.6) debug: 4.4.0 error-stack-parser-es: 0.1.5 fs-extra: 11.2.0 @@ -19561,12 +19514,12 @@ snapshots: perfect-debounce: 1.0.0 picocolors: 1.1.1 sirv: 3.0.0 - vite: 6.0.11(@types/node@22.13.1)(jiti@2.4.2)(lightningcss@1.29.1)(sass@1.83.4)(yaml@2.5.1) + vite: 6.1.0(@types/node@22.13.1)(jiti@2.4.2)(lightningcss@1.29.1)(sass@1.84.0)(yaml@2.5.1) transitivePeerDependencies: - rollup - supports-color - vite-plugin-solid@2.11.1(solid-js@1.9.4)(vite@6.0.11(@types/node@22.13.1)(jiti@2.4.2)(lightningcss@1.29.1)(sass@1.83.4)(yaml@2.5.1)): + vite-plugin-solid@2.11.1(solid-js@1.9.4)(vite@6.1.0(@types/node@22.13.1)(jiti@2.4.2)(lightningcss@1.29.1)(sass@1.84.0)(yaml@2.5.1)): dependencies: '@babel/core': 7.26.0 '@types/babel__core': 7.20.5 @@ -19574,28 +19527,28 @@ snapshots: merge-anything: 5.1.7 solid-js: 1.9.4 solid-refresh: 0.6.3(solid-js@1.9.4) - vite: 6.0.11(@types/node@22.13.1)(jiti@2.4.2)(lightningcss@1.29.1)(sass@1.83.4)(yaml@2.5.1) - vitefu: 1.0.5(vite@6.0.11(@types/node@22.13.1)(jiti@2.4.2)(lightningcss@1.29.1)(sass@1.83.4)(yaml@2.5.1)) + vite: 6.1.0(@types/node@22.13.1)(jiti@2.4.2)(lightningcss@1.29.1)(sass@1.84.0)(yaml@2.5.1) + vitefu: 1.0.5(vite@6.1.0(@types/node@22.13.1)(jiti@2.4.2)(lightningcss@1.29.1)(sass@1.84.0)(yaml@2.5.1)) transitivePeerDependencies: - supports-color - vite-plugin-vue-devtools@7.7.1(rollup@4.34.2)(vite@6.0.11(@types/node@22.13.1)(jiti@2.4.2)(lightningcss@1.29.1)(sass@1.83.4)(yaml@2.5.1))(vue@3.5.13(typescript@5.7.3)): + vite-plugin-vue-devtools@7.7.1(rollup@4.34.6)(vite@6.1.0(@types/node@22.13.1)(jiti@2.4.2)(lightningcss@1.29.1)(sass@1.84.0)(yaml@2.5.1))(vue@3.5.13(typescript@5.7.3)): dependencies: - '@vue/devtools-core': 7.7.1(vite@6.0.11(@types/node@22.13.1)(jiti@2.4.2)(lightningcss@1.29.1)(sass@1.83.4)(yaml@2.5.1))(vue@3.5.13(typescript@5.7.3)) + '@vue/devtools-core': 7.7.1(vite@6.1.0(@types/node@22.13.1)(jiti@2.4.2)(lightningcss@1.29.1)(sass@1.84.0)(yaml@2.5.1))(vue@3.5.13(typescript@5.7.3)) '@vue/devtools-kit': 7.7.1 '@vue/devtools-shared': 7.7.1 execa: 9.5.2 sirv: 3.0.0 - vite: 6.0.11(@types/node@22.13.1)(jiti@2.4.2)(lightningcss@1.29.1)(sass@1.83.4)(yaml@2.5.1) - vite-plugin-inspect: 0.8.9(rollup@4.34.2)(vite@6.0.11(@types/node@22.13.1)(jiti@2.4.2)(lightningcss@1.29.1)(sass@1.83.4)(yaml@2.5.1)) - vite-plugin-vue-inspector: 5.3.1(vite@6.0.11(@types/node@22.13.1)(jiti@2.4.2)(lightningcss@1.29.1)(sass@1.83.4)(yaml@2.5.1)) + vite: 6.1.0(@types/node@22.13.1)(jiti@2.4.2)(lightningcss@1.29.1)(sass@1.84.0)(yaml@2.5.1) + vite-plugin-inspect: 0.8.9(rollup@4.34.6)(vite@6.1.0(@types/node@22.13.1)(jiti@2.4.2)(lightningcss@1.29.1)(sass@1.84.0)(yaml@2.5.1)) + vite-plugin-vue-inspector: 5.3.1(vite@6.1.0(@types/node@22.13.1)(jiti@2.4.2)(lightningcss@1.29.1)(sass@1.84.0)(yaml@2.5.1)) transitivePeerDependencies: - '@nuxt/kit' - rollup - supports-color - vue - vite-plugin-vue-inspector@5.3.1(vite@6.0.11(@types/node@22.13.1)(jiti@2.4.2)(lightningcss@1.29.1)(sass@1.83.4)(yaml@2.5.1)): + vite-plugin-vue-inspector@5.3.1(vite@6.1.0(@types/node@22.13.1)(jiti@2.4.2)(lightningcss@1.29.1)(sass@1.84.0)(yaml@2.5.1)): dependencies: '@babel/core': 7.26.0 '@babel/plugin-proposal-decorators': 7.24.7(@babel/core@7.26.0) @@ -19606,11 +19559,11 @@ snapshots: '@vue/compiler-dom': 3.5.13 kolorist: 1.8.0 magic-string: 0.30.17 - vite: 6.0.11(@types/node@22.13.1)(jiti@2.4.2)(lightningcss@1.29.1)(sass@1.83.4)(yaml@2.5.1) + vite: 6.1.0(@types/node@22.13.1)(jiti@2.4.2)(lightningcss@1.29.1)(sass@1.84.0)(yaml@2.5.1) transitivePeerDependencies: - supports-color - vite-prerender-plugin@0.5.5: + vite-prerender-plugin@0.5.6: dependencies: magic-string: 0.30.17 node-html-parser: 6.1.13 @@ -19623,27 +19576,27 @@ snapshots: svgo: 3.3.2 vue: 3.5.13(typescript@5.7.3) - vite@6.0.11(@types/node@22.13.1)(jiti@2.4.2)(lightningcss@1.29.1)(sass@1.83.4)(yaml@2.5.1): + vite@6.1.0(@types/node@22.13.1)(jiti@2.4.2)(lightningcss@1.29.1)(sass@1.84.0)(yaml@2.5.1): dependencies: esbuild: 0.24.2 - postcss: 8.5.1 - rollup: 4.34.2 + postcss: 8.5.2 + rollup: 4.34.6 optionalDependencies: '@types/node': 22.13.1 fsevents: 2.3.3 jiti: 2.4.2 lightningcss: 1.29.1 - sass: 1.83.4 + sass: 1.84.0 yaml: 2.5.1 - vitefu@1.0.5(vite@6.0.11(@types/node@22.13.1)(jiti@2.4.2)(lightningcss@1.29.1)(sass@1.83.4)(yaml@2.5.1)): + vitefu@1.0.5(vite@6.1.0(@types/node@22.13.1)(jiti@2.4.2)(lightningcss@1.29.1)(sass@1.84.0)(yaml@2.5.1)): optionalDependencies: - vite: 6.0.11(@types/node@22.13.1)(jiti@2.4.2)(lightningcss@1.29.1)(sass@1.83.4)(yaml@2.5.1) + vite: 6.1.0(@types/node@22.13.1)(jiti@2.4.2)(lightningcss@1.29.1)(sass@1.84.0)(yaml@2.5.1) - vitest@3.0.5(@types/debug@4.1.12)(@types/node@22.13.1)(jiti@2.4.2)(jsdom@23.2.0)(lightningcss@1.29.1)(sass@1.83.4)(yaml@2.5.1): + vitest@3.0.5(@types/debug@4.1.12)(@types/node@22.13.1)(jiti@2.4.2)(jsdom@23.2.0)(lightningcss@1.29.1)(sass@1.84.0)(yaml@2.5.1): dependencies: '@vitest/expect': 3.0.5 - '@vitest/mocker': 3.0.5(vite@6.0.11(@types/node@22.13.1)(jiti@2.4.2)(lightningcss@1.29.1)(sass@1.83.4)(yaml@2.5.1)) + '@vitest/mocker': 3.0.5(vite@6.1.0(@types/node@22.13.1)(jiti@2.4.2)(lightningcss@1.29.1)(sass@1.84.0)(yaml@2.5.1)) '@vitest/pretty-format': 3.0.5 '@vitest/runner': 3.0.5 '@vitest/snapshot': 3.0.5 @@ -19659,8 +19612,8 @@ snapshots: tinyexec: 0.3.2 tinypool: 1.0.2 tinyrainbow: 2.0.0 - vite: 6.0.11(@types/node@22.13.1)(jiti@2.4.2)(lightningcss@1.29.1)(sass@1.83.4)(yaml@2.5.1) - vite-node: 3.0.5(@types/node@22.13.1)(jiti@2.4.2)(lightningcss@1.29.1)(sass@1.83.4)(yaml@2.5.1) + vite: 6.1.0(@types/node@22.13.1)(jiti@2.4.2)(lightningcss@1.29.1)(sass@1.84.0)(yaml@2.5.1) + vite-node: 3.0.5(@types/node@22.13.1)(jiti@2.4.2)(lightningcss@1.29.1)(sass@1.84.0)(yaml@2.5.1) why-is-node-running: 2.3.0 optionalDependencies: '@types/debug': 4.1.12 diff --git a/scripts/cmd/build.js b/scripts/cmd/build.js index 2cc99b7d30..3eb982e105 100644 --- a/scripts/cmd/build.js +++ b/scripts/cmd/build.js @@ -1,7 +1,7 @@ import fs from 'node:fs/promises'; import esbuild from 'esbuild'; -import glob from 'fast-glob'; import { dim, green, red, yellow } from 'kleur/colors'; +import { glob } from 'tinyglobby'; import prebuild from './prebuild.js'; /** @type {import('esbuild').BuildOptions} */ @@ -38,10 +38,13 @@ export default async function build(...args) { const prebuilds = getPrebuilds(isDev, args); const patterns = args .filter((f) => !!f) // remove empty args + .filter((f) => !f.startsWith('--')) // remove flags .map((f) => f.replace(/^'/, '').replace(/'$/, '')); // Needed for Windows: glob strings contain surrounding string chars??? remove these let entryPoints = [].concat( ...(await Promise.all( - patterns.map((pattern) => glob(pattern, { filesOnly: true, absolute: true })), + patterns.map((pattern) => + glob(pattern, { filesOnly: true, expandDirectories: false, absolute: true }), + ), )), ); @@ -115,7 +118,12 @@ export default async function build(...args) { } async function clean(outdir) { - const files = await glob([`${outdir}/**`, `!${outdir}/**/*.d.ts`], { filesOnly: true }); + const files = await glob('**', { + cwd: outdir, + filesOnly: true, + ignore: ['**/*.d.ts'], + absolute: true, + }); await Promise.all(files.map((file) => fs.rm(file, { force: true }))); } diff --git a/scripts/cmd/prebuild.js b/scripts/cmd/prebuild.js index 7c4174abf3..1c62e81354 100644 --- a/scripts/cmd/prebuild.js +++ b/scripts/cmd/prebuild.js @@ -2,8 +2,8 @@ import fs from 'node:fs'; import path from 'node:path'; import { fileURLToPath, pathToFileURL } from 'node:url'; import esbuild from 'esbuild'; -import glob from 'fast-glob'; import { red } from 'kleur/colors'; +import { glob } from 'tinyglobby'; function escapeTemplateLiterals(str) { return str.replace(/\`/g, '\\`').replace(/\$\{/g, '\\${'); diff --git a/scripts/cmd/test.js b/scripts/cmd/test.js index 3b266ff1ca..ed8d0e45ef 100644 --- a/scripts/cmd/test.js +++ b/scripts/cmd/test.js @@ -4,7 +4,7 @@ import { run } from 'node:test'; import { spec } from 'node:test/reporters'; import { pathToFileURL } from 'node:url'; import { parseArgs } from 'node:util'; -import glob from 'fast-glob'; +import { glob } from 'tinyglobby'; const isCI = !!process.env.CI; const defaultTimeout = isCI ? 1400000 : 600000; diff --git a/scripts/deps/update-example-versions.js b/scripts/deps/update-example-versions.js index 93b8b71406..7cbde9a0a2 100644 --- a/scripts/deps/update-example-versions.js +++ b/scripts/deps/update-example-versions.js @@ -1,6 +1,8 @@ +// @ts-check import fs from 'node:fs/promises'; import path from 'node:path'; -import { globby as glob } from 'globby'; +import { fileURLToPath } from 'node:url'; +import { glob } from 'tinyglobby'; /* This file updates the dependencies' versions in `examples/*` to match the workspace packages' versions. @@ -19,7 +21,7 @@ const packageToVersions = new Map(); // published through this field, so this file also respects this field when updating the versions. const workspaceDirs = await glob(rootPackageJson.workspaces, { onlyDirectories: true, - cwd: rootUrl, + cwd: fileURLToPath(rootUrl), }); for (const workspaceDir of workspaceDirs) { const packageJsonPath = path.join(workspaceDir, './package.json'); @@ -41,7 +43,7 @@ for (const workspaceDir of workspaceDirs) { // Update all examples' package.json const exampleDirs = await glob('examples/*', { onlyDirectories: true, - cwd: rootUrl, + cwd: fileURLToPath(rootUrl), }); for (const exampleDir of exampleDirs) { const packageJsonPath = path.join(exampleDir, './package.json'); diff --git a/scripts/package.json b/scripts/package.json index 0071119c84..1ac98c2e42 100644 --- a/scripts/package.json +++ b/scripts/package.json @@ -9,11 +9,10 @@ }, "dependencies": { "esbuild": "^0.24.2", - "esbuild-plugin-copy": "^2.1.1", - "fast-glob": "^3.3.3", "kleur": "^4.1.5", "p-limit": "^6.2.0", "tinyexec": "^0.3.2", + "tinyglobby": "^0.2.12", "tsconfck": "^3.1.4" } }