diff --git a/.github/ISSUE_TEMPLATE/bug_report.yml b/.github/ISSUE_TEMPLATE/bug_report.yml
index 4e09ca1dd13b0e..778fa0bd7df5e0 100644
--- a/.github/ISSUE_TEMPLATE/bug_report.yml
+++ b/.github/ISSUE_TEMPLATE/bug_report.yml
@@ -1,5 +1,5 @@
-name: "\U0001F41E Bug report"
-description: Report an issue with Vite
+name: "\U0001F41E General Bug report"
+description: Report an issue with `rolldown-vite`
labels: [pending triage]
type: Bug
body:
@@ -19,7 +19,7 @@ body:
id: reproduction
attributes:
label: Reproduction
- description: Please provide a link via [vite.new](https://vite.new/) or a link to a repo that can reproduce the problem you ran into. `npm create vite@latest` and `npm create vite-extra@latest` (for SSR or library repros) can be used as a starter template. A [minimal reproduction](https://stackoverflow.com/help/minimal-reproducible-example) is required ([Why?](https://antfu.me/posts/why-reproductions-are-required)). If a report is vague (e.g. just a generic error message) and has no reproduction, it will receive a "needs reproduction" label. If no reproduction is provided after 3 days, it will be auto-closed.
+ description: Please provide a link via [StackBlitz](https://stackblitz.com/fork/github/vitejs/rolldown-vite/tree/rolldown-vite/packages/create-vite/template-vanilla) or a link to a repo that can reproduce the problem you ran into. `npm create vite@latest` and `npm create vite-extra@latest` (for SSR or library repros) can be used as a starter template (don't forget to alias `vite` to `rolldown-vite`). A [minimal reproduction](https://stackoverflow.com/help/minimal-reproducible-example) is required ([Why?](https://antfu.me/posts/why-reproductions-are-required)). If a report is vague (e.g. just a generic error message) and has no reproduction, it will receive a "needs reproduction" label. If no reproduction is provided after 3 days, it will be auto-closed.
placeholder: Reproduction URL
validations:
required: true
@@ -33,7 +33,7 @@ body:
id: system-info
attributes:
label: System Info
- description: Output of `npx envinfo --system --npmPackages '{vite,@vitejs/*,rollup}' --binaries --browsers`
+ description: Output of `npx envinfo --system --npmPackages '{vite,rolldown-vite,@vitejs/*,rollup,rolldown}' --binaries --browsers`
render: shell
placeholder: System, Binaries, Browsers
validations:
@@ -75,17 +75,15 @@ body:
label: Validations
description: Before submitting the issue, please make sure you do the following
options:
- - label: Follow our [Code of Conduct](https://github.com/vitejs/vite/blob/main/CODE_OF_CONDUCT.md)
+ - label: Follow our [Code of Conduct](https://github.com/vitejs/rolldown-vite/blob/main/CODE_OF_CONDUCT.md)
required: true
- - label: Read the [Contributing Guidelines](https://github.com/vitejs/vite/blob/main/CONTRIBUTING.md).
+ - label: Read the [Contributing Guidelines](https://github.com/vitejs/rolldown-vite/blob/main/CONTRIBUTING.md).
required: true
- - label: Read the [docs](https://vite.dev/guide).
+ - label: Read the [docs](https://vite.dev/guide) and the [Rolldown-related guide](https://main.vite.dev/guide/rolldown.html).
required: true
- - label: Check that there isn't [already an issue](https://github.com/vitejs/vite/issues) that reports the same bug to avoid creating a duplicate.
+ - label: Check that there isn't [already an issue](https://github.com/vitejs/rolldown-vite/issues) that reports the same bug to avoid creating a duplicate.
required: true
- - label: Make sure this is a Vite issue and not a framework-specific issue. For example, if it's a Vue SFC related bug, it should likely be reported to [vuejs/core](https://github.com/vuejs/core) instead.
- required: true
- - label: Check that this is a concrete bug. For Q&A open a [GitHub Discussion](https://github.com/vitejs/vite/discussions) or join our [Discord Chat Server](https://chat.vite.dev/).
+ - label: Check that this is a concrete bug. For Q&A open a [GitHub Discussion](https://github.com/vitejs/rolldown-vite/discussions) or join our [Discord Chat Server](https://chat.vite.dev/).
required: true
- label: The provided reproduction is a [minimal reproducible example](https://stackoverflow.com/help/minimal-reproducible-example) of the bug.
required: true
diff --git a/.github/ISSUE_TEMPLATE/config.yml b/.github/ISSUE_TEMPLATE/config.yml
index e36d5d53edcd7f..22db5717f32282 100644
--- a/.github/ISSUE_TEMPLATE/config.yml
+++ b/.github/ISSUE_TEMPLATE/config.yml
@@ -1,14 +1,11 @@
blank_issues_enabled: false
contact_links:
- - name: Vite Plugin React Issues
- url: https://github.com/vitejs/vite-plugin-react/issues/new/choose
- about: React related issues should be reported on the vite-plugin-react repository.
- - name: Vite Plugin Vue Issues
- url: https://github.com/vitejs/vite-plugin-vue/issues/new/choose
- about: Vue related issues should be reported on the vite-plugin-vue repository.
- - name: Discord Chat
- url: https://chat.vite.dev
- about: Ask questions and discuss with other Vite users in real time.
+ - name: Vite Discord
+ url: https://chat.vite.dev/
+ about: Do you have questions around Vite? Then join the Discord to discuss them with other Vite users.
+ - name: Rolldown Discord
+ url: https://chat.rolldown.rs/
+ about: Ask questions and discuss with other Rolldown users in real time.
- name: Questions & Discussions
- url: https://github.com/vitejs/vite/discussions
+ url: https://github.com/vitejs/rolldown-vite/discussions
about: Use GitHub discussions for message-board style questions and discussions.
diff --git a/.github/ISSUE_TEMPLATE/docs.yml b/.github/ISSUE_TEMPLATE/docs.yml
deleted file mode 100644
index ef629b96596663..00000000000000
--- a/.github/ISSUE_TEMPLATE/docs.yml
+++ /dev/null
@@ -1,43 +0,0 @@
-name: "\U0001F4DA Documentation"
-description: Suggest a change or new page to be added to vite.dev
-labels: [documentation]
-body:
- - type: markdown
- attributes:
- value: |
- Thanks for taking the time to fill out this issue!
- - type: checkboxes
- id: documentation_is
- attributes:
- label: Documentation is
- options:
- - label: Missing
- - label: Outdated
- - label: Confusing
- - label: Not sure?
- - type: textarea
- id: description
- attributes:
- label: Explain in Detail
- description: A clear and concise description of your suggestion. If you intend to submit a PR for this issue, tell us in the description. Thanks!
- placeholder: The description of ... page is not clear. I thought it meant ... but it wasn't.
- validations:
- required: true
- - type: textarea
- id: suggestion
- attributes:
- label: Your Suggestion for Changes
- validations:
- required: true
- - type: input
- id: reproduction
- attributes:
- label: Reproduction
- description: If you have a reproduction, please provide a link via [vite.new](https://vite.new/) or a link to a repo that can reproduce the problem you ran into. `npm create vite@latest` and `npm create vite-extra@latest` (for SSR or library repros) can be used as a starter template.
- placeholder: Reproduction URL
- - type: textarea
- id: reproduction-steps
- attributes:
- label: Steps to reproduce
- description: Please provide any reproduction steps that may need to be described. E.g. if it happens only when running the dev or build script make sure it's clear which one to use.
- placeholder: Run `npm install` followed by `npm run dev`
diff --git a/.github/ISSUE_TEMPLATE/feature-regression.yml b/.github/ISSUE_TEMPLATE/feature-regression.yml
new file mode 100644
index 00000000000000..36258724728547
--- /dev/null
+++ b/.github/ISSUE_TEMPLATE/feature-regression.yml
@@ -0,0 +1,105 @@
+name: "\U0001F4A5 Feature Regression"
+description: Report a feature regression issue with `rolldown-vite`
+labels: ["c: regression", pending triage]
+type: Bug
+body:
+ - type: markdown
+ attributes:
+ value: |
+ Thanks for taking the time to report a feature regression. A regression is when a feature that works as expected when using `vite` no longer behaves correctly.
+ - type: textarea
+ id: regression-description
+ attributes:
+ label: Describe the regression
+ description: A clear and concise description of the regression. If you intend to submit a PR for this issue, let us know in the description. Thanks!
+ placeholder: The feature used to work like ... Now it behaves like ...
+ validations:
+ required: true
+ - type: input
+ id: reproduction
+ attributes:
+ label: Reproduction
+ description: Please provide a link via [StackBlitz](https://stackblitz.com/fork/github/vitejs/rolldown-vite/tree/rolldown-vite/packages/create-vite/template-vanilla) or a link to a repo that can reproduce the regression issue. A [minimal reproduction](https://stackoverflow.com/help/minimal-reproducible-example) is required ([Why?](https://antfu.me/posts/why-reproductions-are-required)). If no reproduction is provided after 3 days, the issue may be auto-closed.
+ placeholder: Reproduction URL
+ validations:
+ required: true
+ - type: textarea
+ id: expected-behavior
+ attributes:
+ label: Expected Behavior
+ description: Describe what you expected to happen when using the feature.
+ placeholder: I expected the feature to ...
+ validations:
+ required: true
+ - type: textarea
+ id: actual-behavior
+ attributes:
+ label: Actual Behavior
+ description: Describe what actually happens when using the feature.
+ placeholder: The feature currently behaves like ...
+ validations:
+ required: true
+ - type: textarea
+ id: reproduction-steps
+ attributes:
+ label: Steps to Reproduce
+ description: Please provide any reproduction steps that may need to be described. E.g., if it happens only when running the dev or build script, make sure it's clear which one to use.
+ placeholder: Run `npm install` followed by `npm run dev`
+ - type: textarea
+ id: system-info
+ attributes:
+ label: System Info
+ description: Output of `npx envinfo --system --npmPackages '{vite,rolldown-vite,@vitejs/*,rollup,rolldown}' --binaries --browsers`
+ render: shell
+ placeholder: System, Binaries, Browsers
+ validations:
+ required: true
+ - type: dropdown
+ id: package-manager
+ attributes:
+ label: Used Package Manager
+ description: Select the used package manager
+ options:
+ - npm
+ - yarn
+ - pnpm
+ - bun
+ validations:
+ required: true
+ - type: textarea
+ id: logs
+ attributes:
+ label: Logs
+ description: |
+ Optional if provided reproduction. Please try not to insert an image but copy paste the log text.
+
+ 1. Run `vite` or `vite build` with the `--debug` flag.
+ 2. Provide the error log here in the format below.
+
+ ````
+
+ Click to expand!
+
+ ```shell
+ // paste the log text here
+ ```
+
+ ````
+ - type: checkboxes
+ id: checkboxes
+ attributes:
+ label: Validations
+ description: Before submitting the issue, please make sure you do the following
+ options:
+ - label: Follow our [Code of Conduct](https://github.com/vitejs/rolldown-vite/blob/main/CODE_OF_CONDUCT.md)
+ required: true
+ - label: Read the [Contributing Guidelines](https://github.com/vitejs/rolldown-vite/blob/main/CONTRIBUTING.md).
+ required: true
+ - label: Read the [docs](https://vite.dev/guide) and the [Rolldown-related guide](https://main.vite.dev/guide/rolldown.html).
+ required: true
+ - label: Check that there isn't [already an issue](https://github.com/vitejs/rolldown-vite/issues) that reports the same regression to avoid creating a duplicate.
+ required: true
+ - label: Check that this is a concrete regression. For Q&A open a [GitHub Discussion](https://github.com/vitejs/rolldown-vite/discussions) or join our [Discord Chat Server](https://chat.vite.dev/).
+ required: true
+ - label: The provided reproduction is a [minimal reproducible example](https://stackoverflow.com/help/minimal-reproducible-example) of the regression.
+ required: true
diff --git a/.github/ISSUE_TEMPLATE/feature_request.yml b/.github/ISSUE_TEMPLATE/feature_request.yml
deleted file mode 100644
index 0563374253b6f3..00000000000000
--- a/.github/ISSUE_TEMPLATE/feature_request.yml
+++ /dev/null
@@ -1,48 +0,0 @@
-name: "\U0001F680 New feature proposal"
-description: Propose a new feature to be added to Vite
-labels: ["pending triage"]
-type: Feature
-body:
- - type: markdown
- attributes:
- value: |
- Thanks for your interest in the project and taking the time to fill out this feature report!
- - type: textarea
- id: feature-description
- attributes:
- label: Description
- description: "Clear and concise description of the problem. Please make the reason and usecases as detailed as possible. If you intend to submit a PR for this issue, tell us in the description. Thanks!"
- placeholder: As a developer using Vite I want [goal / wish] so that [benefit].
- validations:
- required: true
- - type: textarea
- id: suggested-solution
- attributes:
- label: Suggested solution
- description: "In module [xy] we could provide following implementation..."
- validations:
- required: true
- - type: textarea
- id: alternative
- attributes:
- label: Alternative
- description: Clear and concise description of any alternative solutions or features you've considered.
- - type: textarea
- id: additional-context
- attributes:
- label: Additional context
- description: Any other context or screenshots about the feature request here.
- - type: checkboxes
- id: checkboxes
- attributes:
- label: Validations
- description: Before submitting the issue, please make sure you do the following
- options:
- - label: Follow our [Code of Conduct](https://github.com/vitejs/vite/blob/main/CODE_OF_CONDUCT.md)
- required: true
- - label: Read the [Contributing Guidelines](https://github.com/vitejs/vite/blob/main/CONTRIBUTING.md).
- required: true
- - label: Read the [docs](https://vite.dev/guide).
- required: true
- - label: Check that there isn't already an issue that request the same feature to avoid creating a duplicate.
- required: true
diff --git a/.github/ISSUE_TEMPLATE/performance.yml b/.github/ISSUE_TEMPLATE/performance.yml
new file mode 100644
index 00000000000000..dfc279adb10b37
--- /dev/null
+++ b/.github/ISSUE_TEMPLATE/performance.yml
@@ -0,0 +1,97 @@
+name: "\U0001F3C3 Performance Degradation"
+description: Report a performance issue with `rolldown-vite`
+labels: ["c: performance", pending triage]
+type: Bug
+body:
+ - type: markdown
+ attributes:
+ value: |
+ Thanks for taking the time to report a performance issue, such as a slow build or a slow dev server compared to using the main `vite` package.
+ - type: textarea
+ id: performance-description
+ attributes:
+ label: Describe the performance issue
+ description: A clear and concise description of the performance issue. If you intend to submit a PR for this issue, let us know in the description. Thanks!
+ placeholder: I am doing ... What I expect is ... What actually happening is ...
+ validations:
+ required: true
+ - type: input
+ id: reproduction
+ attributes:
+ label: Reproduction
+ description: Please provide a link via [StackBlitz](https://stackblitz.com/fork/github/vitejs/rolldown-vite/tree/rolldown-vite/packages/create-vite/template-vanilla) or a link to a repo that can reproduce the performance issue. A [minimal reproduction](https://stackoverflow.com/help/minimal-reproducible-example) is required ([Why?](https://antfu.me/posts/why-reproductions-are-required)). If no reproduction is provided after 3 days, the issue may be auto-closed.
+ placeholder: Reproduction URL
+ validations:
+ required: true
+ - type: textarea
+ id: performance-metrics
+ attributes:
+ label: Performance Metrics
+ description: Provide any relevant performance metrics (e.g., build time, memory usage, CPU usage). Include before/after comparisons if applicable.
+ placeholder: "Build time with `rolldown-vite`: X seconds, build time with plain `vite`: X seconds, etc."
+ validations:
+ required: true
+ - type: textarea
+ id: reproduction-steps
+ attributes:
+ label: Steps to reproduce
+ description: Please provide any reproduction steps that may need to be described. E.g., if it happens only when running the dev or build script, make sure it's clear which one to use.
+ placeholder: Run `npm install` followed by `npm run dev`
+ - type: textarea
+ id: system-info
+ attributes:
+ label: System Info
+ description: Output of `npx envinfo --system --npmPackages '{vite,rolldown-vite,@vitejs/*,rollup,rolldown}' --binaries --browsers`
+ render: shell
+ placeholder: System, Binaries, Browsers
+ validations:
+ required: true
+ - type: dropdown
+ id: package-manager
+ attributes:
+ label: Used Package Manager
+ description: Select the used package manager
+ options:
+ - npm
+ - yarn
+ - pnpm
+ - bun
+ validations:
+ required: true
+ - type: textarea
+ id: logs
+ attributes:
+ label: Logs
+ description: |
+ Optional if provided reproduction. Please try not to insert an image but copy paste the log text.
+
+ 1. Run `vite` or `vite build` with the `--debug` flag.
+ 2. Provide the error log here in the format below.
+
+ ````
+
+ Click to expand!
+
+ ```shell
+ // paste the log text here
+ ```
+
+ ````
+ - type: checkboxes
+ id: checkboxes
+ attributes:
+ label: Validations
+ description: Before submitting the issue, please make sure you do the following
+ options:
+ - label: Follow our [Code of Conduct](https://github.com/vitejs/rolldown-vite/blob/main/CODE_OF_CONDUCT.md)
+ required: true
+ - label: Read the [Contributing Guidelines](https://github.com/vitejs/rolldown-vite/blob/main/CONTRIBUTING.md).
+ required: true
+ - label: Read the [docs](https://vite.dev/guide) and the [Rolldown-related guide](https://main.vite.dev/guide/rolldown.html).
+ required: true
+ - label: Check that there isn't [already an issue](https://github.com/vitejs/rolldown-vite/issues) that reports the same bug to avoid creating a duplicate.
+ required: true
+ - label: Check that this is a concrete bug. For Q&A open a [GitHub Discussion](https://github.com/vitejs/rolldown-vite/discussions) or join our [Discord Chat Server](https://chat.vite.dev/).
+ required: true
+ - label: The provided reproduction is a [minimal reproducible example](https://stackoverflow.com/help/minimal-reproducible-example) of the bug.
+ required: true
diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml
index aa4675f3c323cc..358de7f864e806 100644
--- a/.github/workflows/ci.yml
+++ b/.github/workflows/ci.yml
@@ -143,6 +143,78 @@ jobs:
steps:
- run: echo "Build & Test Failed"
+ test-js-plugins:
+ needs: changed
+ if: needs.changed.outputs.should_skip != 'true'
+ timeout-minutes: 20
+ runs-on: ${{ matrix.os }}
+ strategy:
+ matrix:
+ os: [ubuntu-latest, macos-latest, windows-latest]
+ node_version: [22]
+ fail-fast: false
+
+ name: "Build&Test: node-${{ matrix.node_version }}, ${{ matrix.os }} (js plugins)"
+ steps:
+ - name: Checkout
+ uses: actions/checkout@v4
+
+ - name: Install pnpm
+ uses: pnpm/action-setup@a7487c7e89a18df4991f7f222e4898a00d66ddda # v4.1.0
+
+ - name: Set node version to ${{ matrix.node_version }}
+ uses: actions/setup-node@v4
+ with:
+ node-version: ${{ matrix.node_version }}
+ cache: "pnpm"
+
+ - name: Install deps
+ run: pnpm install
+
+ # Install playwright's binary under custom directory to cache
+ - name: (non-windows) Set Playwright path and Get playwright version
+ if: runner.os != 'Windows'
+ run: |
+ echo "PLAYWRIGHT_BROWSERS_PATH=$HOME/.cache/playwright-bin" >> $GITHUB_ENV
+ PLAYWRIGHT_VERSION="$(pnpm ls --depth 0 --json -w playwright-chromium | jq --raw-output '.[0].devDependencies["playwright-chromium"].version')"
+ echo "PLAYWRIGHT_VERSION=$PLAYWRIGHT_VERSION" >> $GITHUB_ENV
+ - name: (windows) Set Playwright path and Get playwright version
+ if: runner.os == 'Windows'
+ run: |
+ echo "PLAYWRIGHT_BROWSERS_PATH=$HOME\.cache\playwright-bin" >> $env:GITHUB_ENV
+ $env:PLAYWRIGHT_VERSION="$(pnpm ls --depth 0 --json -w playwright-chromium | jq --raw-output '.[0].devDependencies["playwright-chromium"].version')"
+ echo "PLAYWRIGHT_VERSION=$env:PLAYWRIGHT_VERSION" >> $env:GITHUB_ENV
+
+ - name: Cache Playwright's binary
+ uses: actions/cache@v4
+ with:
+ key: ${{ runner.os }}-playwright-bin-v1-${{ env.PLAYWRIGHT_VERSION }}
+ path: ${{ env.PLAYWRIGHT_BROWSERS_PATH }}
+ restore-keys: |
+ ${{ runner.os }}-playwright-bin-v1-
+
+ - name: Install Playwright
+ # does not need to explicitly set chromium after https://github.com/microsoft/playwright/issues/14862 is solved
+ run: pnpm playwright install chromium
+
+ - name: Build
+ run: pnpm run build
+
+ - name: Test unit
+ run: pnpm run test-unit
+ env:
+ _VITE_TEST_JS_PLUGIN: 1
+
+ - name: Test serve
+ run: pnpm run test-serve
+ env:
+ _VITE_TEST_JS_PLUGIN: 1
+
+ - name: Test build
+ run: pnpm run test-build
+ env:
+ _VITE_TEST_JS_PLUGIN: 1
+
lint:
timeout-minutes: 10
runs-on: ubuntu-latest
diff --git a/.github/workflows/issue-close-require.yml b/.github/workflows/issue-close-require.yml
index 33f64d8a64f95d..98acae377f4991 100644
--- a/.github/workflows/issue-close-require.yml
+++ b/.github/workflows/issue-close-require.yml
@@ -6,7 +6,7 @@ on:
jobs:
close-issues:
- if: github.repository == 'vitejs/vite'
+ if: github.repository == 'vitejs/rolldown-vite'
runs-on: ubuntu-latest
permissions:
issues: write # for actions-cool/issues-helper to update issues
diff --git a/.github/workflows/issue-labeled.yml b/.github/workflows/issue-labeled.yml
index 50f09ab58b7584..505b7c71c0a145 100644
--- a/.github/workflows/issue-labeled.yml
+++ b/.github/workflows/issue-labeled.yml
@@ -6,7 +6,7 @@ on:
jobs:
reply-labeled:
- if: github.repository == 'vitejs/vite'
+ if: github.repository == 'vitejs/rolldown-vite'
runs-on: ubuntu-latest
permissions:
issues: write # for actions-cool/issues-helper to update issues
@@ -38,5 +38,5 @@ jobs:
token: ${{ secrets.GITHUB_TOKEN }}
issue-number: ${{ github.event.issue.number }}
body: |
- Hello @${{ github.event.issue.user.login }}. Please provide a [minimal reproduction](https://stackoverflow.com/help/minimal-reproducible-example) using a GitHub repository or [StackBlitz](https://vite.new). Issues marked with `needs reproduction` will be closed if they have no activity within 3 days.
+ Hello @${{ github.event.issue.user.login }}. Please provide a [minimal reproduction](https://stackoverflow.com/help/minimal-reproducible-example) using a GitHub repository or [StackBlitz](https://stackblitz.com/fork/github/vitejs/rolldown-vite/tree/rolldown-vite/packages/create-vite/template-vanilla). Issues marked with `needs reproduction` will be closed if they have no activity within 3 days.
labels: "pending triage"
diff --git a/.github/workflows/preview-release.yml b/.github/workflows/preview-release.yml
index 287d8b680d4307..3c7c8e79be2e35 100644
--- a/.github/workflows/preview-release.yml
+++ b/.github/workflows/preview-release.yml
@@ -10,14 +10,14 @@ permissions:
on:
push:
branches:
- - main
+ - rolldown-vite
pull_request:
types: [opened, synchronize, labeled]
jobs:
preview:
if: >
- github.repository == 'vitejs/vite' &&
+ github.repository == 'vitejs/rolldown-vite' &&
(github.event_name == 'push' ||
(github.event_name == 'pull_request' && contains(github.event.pull_request.labels.*.name, 'trigger: preview')))
runs-on: ubuntu-latest
@@ -44,8 +44,12 @@ jobs:
env:
PLAYWRIGHT_SKIP_BROWSER_DOWNLOAD: "1"
- - name: Build
+ - name: Build Vite core
working-directory: ./packages/vite
run: pnpm build
- - run: pnpm dlx pkg-pr-new@0.0 publish --compact --pnpm ./packages/vite
+ - name: Build plugin-legacy
+ working-directory: ./packages/plugin-legacy
+ run: pnpm build
+
+ - run: pnpm dlx pkg-pr-new@0.0 publish --pnpm './packages/vite' './packages/plugin-legacy'
diff --git a/.github/workflows/publish.yml b/.github/workflows/publish.yml
index 49c492ec687f5b..c67f846dae8b67 100644
--- a/.github/workflows/publish.yml
+++ b/.github/workflows/publish.yml
@@ -10,7 +10,7 @@ on:
jobs:
publish:
# prevents this action from running on forks
- if: github.repository == 'vitejs/vite'
+ if: github.repository == 'vitejs/rolldown-vite'
runs-on: ubuntu-latest
permissions:
contents: read
diff --git a/.github/workflows/release-tag.yml b/.github/workflows/release-tag.yml
index a8a0029de2c415..330bc2534deb73 100644
--- a/.github/workflows/release-tag.yml
+++ b/.github/workflows/release-tag.yml
@@ -11,7 +11,7 @@ on:
jobs:
release:
- if: github.repository == 'vitejs/vite'
+ if: github.repository == 'vitejs/rolldown-vite'
runs-on: ubuntu-latest
permissions:
contents: write # for yyx990803/release-tag to create a release tag
@@ -47,4 +47,4 @@ jobs:
with:
tag_name: ${{ github.ref }}
body: |
- Please refer to [CHANGELOG.md](https://github.com/vitejs/vite/blob/${{ github.ref_name }}/packages/${{ steps.tag.outputs.pkgName }}/CHANGELOG.md) for details.
+ Please refer to [CHANGELOG.md](https://github.com/vitejs/rolldown-vite/blob/${{ github.ref_name }}/packages/${{ steps.tag.outputs.pkgName }}/CHANGELOG.md) for details.
diff --git a/.github/workflows/semantic-pull-request.yml b/.github/workflows/semantic-pull-request.yml
index 5e629577aa8739..8a05b82587577b 100644
--- a/.github/workflows/semantic-pull-request.yml
+++ b/.github/workflows/semantic-pull-request.yml
@@ -9,7 +9,7 @@ on:
jobs:
main:
- if: github.repository == 'vitejs/vite'
+ if: github.repository == 'vitejs/rolldown-vite'
runs-on: ubuntu-latest
name: Semantic Pull Request
permissions:
diff --git a/README.md b/README.md
index 205c4701a52e4f..da52a8b4ee7e3c 100644
--- a/README.md
+++ b/README.md
@@ -1,50 +1,28 @@
-
+
+
-
-
-
-
+
+
+
+
-# Vite ⚡
+# rolldown-vite ⚡
-> Next Generation Frontend Tooling
+> Vite with Rolldown as bundler. Temporary package.
-- 💡 Instant Server Start
-- ⚡️ Lightning Fast HMR
-- 🛠️ Rich Features
-- 📦 Optimized Build
-- 🔩 Universal Plugin Interface
-- 🔑 Fully Typed APIs
+`rolldown-vite` is a fork of Vite that uses [Rolldown](https://github.com/rolldown-rs/rolldown) instead of Rollup & esbuild. Rolldown is a Rust-based JavaScript bundler designed for maximum performance.
-Vite (French word for "quick", pronounced [`/vit/`](https://cdn.jsdelivr.net/gh/vitejs/vite@main/docs/public/vite.mp3), like "veet") is a new breed of frontend build tooling that significantly improves the frontend development experience. It consists of two major parts:
+It can be used as a drop-in replacement to test out Rolldown with Vite. Eventually, this package is not needed anymore as all changes will be merged into the main Vite repository.
-- A dev server that serves your source files over [native ES modules](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Modules), with [rich built-in features](https://vite.dev/guide/features.html) and astonishingly fast [Hot Module Replacement (HMR)](https://vite.dev/guide/features.html#hot-module-replacement).
-
-- A [build command](https://vite.dev/guide/build.html) that bundles your code with [Rollup](https://rollupjs.org), pre-configured to output highly optimized static assets for production.
-
-In addition, Vite is highly extensible via its [Plugin API](https://vite.dev/guide/api-plugin.html) and [JavaScript API](https://vite.dev/guide/api-javascript.html) with full typing support.
-
-[Read the Docs to Learn More](https://vite.dev).
-
-## Packages
-
-| Package | Version (click for changelogs) |
-| ----------------------------------------------- | :-------------------------------------------------------------------------------------------------------------------------------- |
-| [vite](packages/vite) | [](packages/vite/CHANGELOG.md) |
-| [@vitejs/plugin-legacy](packages/plugin-legacy) | [](packages/plugin-legacy/CHANGELOG.md) |
-| [create-vite](packages/create-vite) | [](packages/create-vite/CHANGELOG.md) |
-
-## Contribution
-
-See [Contributing Guide](CONTRIBUTING.md).
+[Read the Docs to Learn More](https://vite.dev/guide/rolldown.html).
## License
diff --git a/docs/package.json b/docs/package.json
index 8cbb94daa469a7..1295d0b21e0309 100644
--- a/docs/package.json
+++ b/docs/package.json
@@ -14,6 +14,7 @@
"feed": "^5.1.0",
"gsap": "^3.13.0",
"markdown-it-image-size": "^14.8.0",
+ "oxc-minify": "^0.87.0",
"vitepress": "^2.0.0-alpha.12",
"vitepress-plugin-group-icons": "^1.6.3",
"vitepress-plugin-llms": "^1.7.5",
diff --git a/eslint.config.js b/eslint.config.js
index 59c0a2e086ce0e..9e69a7b6237f85 100644
--- a/eslint.config.js
+++ b/eslint.config.js
@@ -98,6 +98,8 @@ export default defineConfig(
{
allowModules: [
'vite',
+ 'esbuild',
+ 'rolldown',
'less',
'sass',
'sass-embedded',
diff --git a/packages/create-vite/template-lit-ts/package.json b/packages/create-vite/template-lit-ts/package.json
index 8f7ccc2a91c669..531d4507db56db 100644
--- a/packages/create-vite/template-lit-ts/package.json
+++ b/packages/create-vite/template-lit-ts/package.json
@@ -13,6 +13,6 @@
},
"devDependencies": {
"typescript": "~5.9.3",
- "vite": "^7.1.7"
+ "vite": "npm:rolldown-vite@^7.1.16"
}
}
diff --git a/packages/create-vite/template-lit/package.json b/packages/create-vite/template-lit/package.json
index 236bf1ea47fa58..275b246306d995 100644
--- a/packages/create-vite/template-lit/package.json
+++ b/packages/create-vite/template-lit/package.json
@@ -12,6 +12,6 @@
"lit": "^3.3.1"
},
"devDependencies": {
- "vite": "^7.1.7"
+ "vite": "npm:rolldown-vite@^7.1.16"
}
}
diff --git a/packages/create-vite/template-preact-ts/package.json b/packages/create-vite/template-preact-ts/package.json
index baa15e9a8fe86d..4df6b266c8fb15 100644
--- a/packages/create-vite/template-preact-ts/package.json
+++ b/packages/create-vite/template-preact-ts/package.json
@@ -15,6 +15,6 @@
"@preact/preset-vite": "^2.10.2",
"@types/node": "^24.6.0",
"typescript": "~5.9.3",
- "vite": "^7.1.7"
+ "vite": "npm:rolldown-vite@^7.1.16"
}
}
diff --git a/packages/create-vite/template-preact/package.json b/packages/create-vite/template-preact/package.json
index 6015e82184c610..10ed0d87ae59df 100644
--- a/packages/create-vite/template-preact/package.json
+++ b/packages/create-vite/template-preact/package.json
@@ -13,6 +13,6 @@
},
"devDependencies": {
"@preact/preset-vite": "^2.10.2",
- "vite": "^7.1.7"
+ "vite": "npm:rolldown-vite@^7.1.16"
}
}
diff --git a/packages/create-vite/template-qwik-ts/package.json b/packages/create-vite/template-qwik-ts/package.json
index 9caae41ea34486..8b962315f75977 100644
--- a/packages/create-vite/template-qwik-ts/package.json
+++ b/packages/create-vite/template-qwik-ts/package.json
@@ -12,7 +12,7 @@
"@types/node": "^24.6.0",
"serve": "^14.2.5",
"typescript": "~5.9.3",
- "vite": "^7.1.7"
+ "vite": "npm:rolldown-vite@^7.1.16"
},
"dependencies": {
"@builder.io/qwik": "^1.16.1"
diff --git a/packages/create-vite/template-qwik/package.json b/packages/create-vite/template-qwik/package.json
index 18da4b35450fda..7a298f7e297f98 100644
--- a/packages/create-vite/template-qwik/package.json
+++ b/packages/create-vite/template-qwik/package.json
@@ -10,7 +10,7 @@
},
"devDependencies": {
"serve": "^14.2.5",
- "vite": "^7.1.7"
+ "vite": "npm:rolldown-vite@^7.1.16"
},
"dependencies": {
"@builder.io/qwik": "^1.16.1"
diff --git a/packages/create-vite/template-react-ts/package.json b/packages/create-vite/template-react-ts/package.json
index d2626b00807836..220eb3dfe146fd 100644
--- a/packages/create-vite/template-react-ts/package.json
+++ b/packages/create-vite/template-react-ts/package.json
@@ -25,6 +25,6 @@
"globals": "^16.4.0",
"typescript": "~5.9.3",
"typescript-eslint": "^8.45.0",
- "vite": "^7.1.7"
+ "vite": "npm:rolldown-vite@^7.1.16"
}
}
diff --git a/packages/create-vite/template-react/package.json b/packages/create-vite/template-react/package.json
index 7f0d113a1d18fc..e448b7b39da2a2 100644
--- a/packages/create-vite/template-react/package.json
+++ b/packages/create-vite/template-react/package.json
@@ -22,6 +22,6 @@
"eslint-plugin-react-hooks": "^5.2.0",
"eslint-plugin-react-refresh": "^0.4.22",
"globals": "^16.4.0",
- "vite": "^7.1.7"
+ "vite": "npm:rolldown-vite@^7.1.16"
}
}
diff --git a/packages/create-vite/template-solid-ts/package.json b/packages/create-vite/template-solid-ts/package.json
index 39f575a93d3a5f..7c665fa2b821b5 100644
--- a/packages/create-vite/template-solid-ts/package.json
+++ b/packages/create-vite/template-solid-ts/package.json
@@ -14,7 +14,7 @@
"devDependencies": {
"@types/node": "^24.6.0",
"typescript": "~5.9.3",
- "vite": "^7.1.7",
+ "vite": "npm:rolldown-vite@^7.1.16",
"vite-plugin-solid": "^2.11.8"
}
}
diff --git a/packages/create-vite/template-solid/package.json b/packages/create-vite/template-solid/package.json
index e2c9d3b85f6476..4e422894d594be 100644
--- a/packages/create-vite/template-solid/package.json
+++ b/packages/create-vite/template-solid/package.json
@@ -12,7 +12,7 @@
"solid-js": "^1.9.9"
},
"devDependencies": {
- "vite": "^7.1.7",
+ "vite": "npm:rolldown-vite@^7.1.16",
"vite-plugin-solid": "^2.11.8"
}
}
diff --git a/packages/create-vite/template-svelte-ts/package.json b/packages/create-vite/template-svelte-ts/package.json
index 4e10d4702c8944..57eca0533df03e 100644
--- a/packages/create-vite/template-svelte-ts/package.json
+++ b/packages/create-vite/template-svelte-ts/package.json
@@ -16,6 +16,6 @@
"svelte": "^5.39.6",
"svelte-check": "^4.3.2",
"typescript": "~5.9.3",
- "vite": "^7.1.7"
+ "vite": "npm:rolldown-vite@^7.1.16"
}
}
diff --git a/packages/create-vite/template-svelte/package.json b/packages/create-vite/template-svelte/package.json
index 24fcf59ace4fde..9e2356928f8561 100644
--- a/packages/create-vite/template-svelte/package.json
+++ b/packages/create-vite/template-svelte/package.json
@@ -11,6 +11,6 @@
"devDependencies": {
"@sveltejs/vite-plugin-svelte": "^6.2.1",
"svelte": "^5.39.6",
- "vite": "^7.1.7"
+ "vite": "npm:rolldown-vite@^7.1.16"
}
}
diff --git a/packages/create-vite/template-vanilla-ts/package.json b/packages/create-vite/template-vanilla-ts/package.json
index 9ab28a65c746b7..eb3269f2caad40 100644
--- a/packages/create-vite/template-vanilla-ts/package.json
+++ b/packages/create-vite/template-vanilla-ts/package.json
@@ -10,6 +10,6 @@
},
"devDependencies": {
"typescript": "~5.9.3",
- "vite": "^7.1.7"
+ "vite": "npm:rolldown-vite@^7.1.16"
}
}
diff --git a/packages/create-vite/template-vanilla/package.json b/packages/create-vite/template-vanilla/package.json
index 0995c38b77cce3..ddd686ff39af0f 100644
--- a/packages/create-vite/template-vanilla/package.json
+++ b/packages/create-vite/template-vanilla/package.json
@@ -9,6 +9,6 @@
"preview": "vite preview"
},
"devDependencies": {
- "vite": "^7.1.7"
+ "vite": "npm:rolldown-vite@^7.1.16"
}
}
diff --git a/packages/create-vite/template-vue-ts/package.json b/packages/create-vite/template-vue-ts/package.json
index 544572027f7cf4..7b038d0a7c450f 100644
--- a/packages/create-vite/template-vue-ts/package.json
+++ b/packages/create-vite/template-vue-ts/package.json
@@ -16,7 +16,7 @@
"@vitejs/plugin-vue": "^6.0.1",
"@vue/tsconfig": "^0.8.1",
"typescript": "~5.9.3",
- "vite": "^7.1.7",
+ "vite": "npm:rolldown-vite@^7.1.16",
"vue-tsc": "^3.1.0"
}
}
diff --git a/packages/create-vite/template-vue/package.json b/packages/create-vite/template-vue/package.json
index 5ac575fbad9558..b9e2f9b8b859f9 100644
--- a/packages/create-vite/template-vue/package.json
+++ b/packages/create-vite/template-vue/package.json
@@ -13,6 +13,6 @@
},
"devDependencies": {
"@vitejs/plugin-vue": "^6.0.1",
- "vite": "^7.1.7"
+ "vite": "npm:rolldown-vite@^7.1.16"
}
}
diff --git a/packages/plugin-legacy/src/index.ts b/packages/plugin-legacy/src/index.ts
index 676e213372b5ca..c993f6a4c576bd 100644
--- a/packages/plugin-legacy/src/index.ts
+++ b/packages/plugin-legacy/src/index.ts
@@ -3,7 +3,6 @@ import crypto from 'node:crypto'
import { createRequire } from 'node:module'
import { fileURLToPath } from 'node:url'
import { build, normalizePath } from 'vite'
-import * as vite from 'vite'
import MagicString from 'magic-string'
import type {
BuildOptions,
@@ -139,14 +138,10 @@ const modernTargetsEsbuild = [
const modernTargetsBabel =
'edge>=79, firefox>=67, chrome>=64, safari>=12, chromeAndroid>=64, iOS>=12'
-function viteLegacyPlugin(options: Options = {}): Plugin[] {
- if ('rolldownVersion' in vite) {
- const { default: viteLegacyPluginForRolldownVite } = _require(
- '#legacy-for-rolldown-vite',
- )
- return viteLegacyPluginForRolldownVite(options)
- }
+const outputOptionsForLegacyChunks =
+ new WeakSet()
+function viteLegacyPlugin(options: Options = {}): Plugin[] {
let config: ResolvedConfig
let targets: Options['targets']
const modernTargets: Options['modernTargets'] =
@@ -306,7 +301,7 @@ function viteLegacyPlugin(options: Options = {}): Plugin[] {
)
}
- if (!isLegacyBundle(bundle, opts)) {
+ if (!isLegacyBundle(bundle)) {
// Merge discovered modern polyfills to `modernPolyfills`
for (const { modern } of chunkFileNameToPolyfills.values()) {
modern.forEach((p) => modernPolyfills.add(p))
@@ -321,6 +316,7 @@ function viteLegacyPlugin(options: Options = {}): Plugin[] {
)
}
await buildPolyfillChunk(
+ this,
config.mode,
modernPolyfills,
bundle,
@@ -364,6 +360,7 @@ function viteLegacyPlugin(options: Options = {}): Plugin[] {
}
await buildPolyfillChunk(
+ this,
config.mode,
legacyPolyfills,
bundle,
@@ -450,9 +447,10 @@ function viteLegacyPlugin(options: Options = {}): Plugin[] {
): Rollup.OutputOptions => {
return {
...options,
- format: 'system',
+ format: 'esm',
entryFileNames: getLegacyOutputFileName(options.entryFileNames),
chunkFileNames: getLegacyOutputFileName(options.chunkFileNames),
+ minify: false, // minify with terser instead
}
}
@@ -469,6 +467,11 @@ function viteLegacyPlugin(options: Options = {}): Plugin[] {
...(genModern ? [output || {}] : []),
]
}
+
+ // @ts-expect-error is readonly but should be injected here
+ _config.isOutputOptionsForLegacyChunks = (
+ opts: Rollup.NormalizedOutputOptions,
+ ): boolean => outputOptionsForLegacyChunks.has(opts)
},
async renderChunk(raw, chunk, opts, { chunks }) {
@@ -495,7 +498,7 @@ function viteLegacyPlugin(options: Options = {}): Plugin[] {
)
}
- if (!isLegacyChunk(chunk, opts)) {
+ if (!isLegacyChunk(chunk)) {
if (
options.modernPolyfills &&
!Array.isArray(options.modernPolyfills) &&
@@ -544,20 +547,7 @@ function viteLegacyPlugin(options: Options = {}): Plugin[] {
return null
}
- // @ts-expect-error avoid esbuild transform on legacy chunks since it produces
- // legacy-unsafe code - e.g. rewriting object properties into shorthands
- opts.__vite_skip_esbuild__ = true
-
- // @ts-expect-error force terser for legacy chunks. This only takes effect if
- // minification isn't disabled, because that leaves out the terser plugin
- // entirely.
- opts.__vite_force_terser__ = true
-
- // @ts-expect-error In the `generateBundle` hook,
- // we'll delete the assets from the legacy bundle to avoid emitting duplicate assets.
- // But that's still a waste of computing resource.
- // So we add this flag to avoid emitting the asset in the first place whenever possible.
- opts.__vite_skip_asset_emit__ = true
+ outputOptionsForLegacyChunks.add(opts)
// avoid emitting assets for legacy bundle
const needPolyfills =
@@ -566,9 +556,27 @@ function viteLegacyPlugin(options: Options = {}): Plugin[] {
// transform the legacy chunk with @babel/preset-env
const sourceMaps = !!config.build.sourcemap
const babel = await loadBabel()
- const result = babel.transform(raw, {
+
+ // need to transform into systemjs separately from other plugins
+ // for preset-env polyfill detection and removal
+ const resultSystem = babel.transform(raw, {
babelrc: false,
configFile: false,
+ ast: true,
+ code: false,
+ sourceMaps,
+ plugins: [
+ // @ts-expect-error -- not typed
+ (await import('@babel/plugin-transform-dynamic-import')).default,
+ // @ts-expect-error -- not typed
+ (await import('@babel/plugin-transform-modules-systemjs')).default,
+ ],
+ })
+
+ const babelTransformOptions: babel.TransformOptions = {
+ babelrc: false,
+ configFile: false,
+ cloneInputAst: false,
compact: !!config.build.minify,
sourceMaps,
inputSourceMap: undefined,
@@ -603,8 +611,17 @@ function viteLegacyPlugin(options: Options = {}): Plugin[] {
},
],
],
- })
-
+ }
+ let result: babel.BabelFileResult | null
+ if (resultSystem) {
+ result = babel.transformFromAstSync(
+ resultSystem.ast!,
+ undefined,
+ babelTransformOptions,
+ )
+ } else {
+ result = babel.transform(raw, babelTransformOptions)
+ }
if (result) return { code: result.code!, map: result.map }
return null
},
@@ -744,15 +761,19 @@ function viteLegacyPlugin(options: Options = {}): Plugin[] {
}
},
- generateBundle(opts, bundle) {
+ generateBundle(_opts, bundle) {
if (config.build.ssr) {
return
}
- if (isLegacyBundle(bundle, opts) && genModern) {
+ if (isLegacyBundle(bundle) && genModern) {
// avoid emitting duplicate assets
for (const name in bundle) {
- if (bundle[name].type === 'asset' && !name.endsWith('.map')) {
+ if (
+ bundle[name].type === 'asset' &&
+ !name.endsWith('.map') &&
+ !name.includes('-legacy') // legacy chunks
+ ) {
delete bundle[name]
}
}
@@ -810,6 +831,7 @@ export async function detectPolyfills(
}
async function buildPolyfillChunk(
+ ctx: Rollup.PluginContext,
mode: string,
imports: Set,
bundle: Rollup.OutputBundle,
@@ -845,7 +867,7 @@ async function buildPolyfillChunk(
format,
hashCharacters: rollupOutputOptions.hashCharacters,
entryFileNames: rollupOutputOptions.entryFileNames,
- sourcemapBaseUrl: rollupOutputOptions.sourcemapBaseUrl,
+ // sourcemapBaseUrl: rollupOutputOptions.sourcemapBaseUrl,
},
},
},
@@ -878,7 +900,11 @@ async function buildPolyfillChunk(
}
// add the chunk to the bundle
- bundle[polyfillChunk.fileName] = polyfillChunk
+ ctx.emitFile({
+ type: 'asset',
+ fileName: polyfillChunk.fileName,
+ source: polyfillChunk.code,
+ })
if (polyfillChunk.sourcemapFileName) {
const polyfillChunkMapAsset = _polyfillChunk.output.find(
(chunk) =>
@@ -886,7 +912,11 @@ async function buildPolyfillChunk(
chunk.fileName === polyfillChunk.sourcemapFileName,
) as Rollup.OutputAsset | undefined
if (polyfillChunkMapAsset) {
- bundle[polyfillChunk.sourcemapFileName] = polyfillChunkMapAsset
+ ctx.emitFile({
+ type: 'asset',
+ fileName: polyfillChunkMapAsset.fileName,
+ source: polyfillChunkMapAsset.source,
+ })
}
}
}
@@ -937,26 +967,16 @@ function prependModenChunkLegacyGuardPlugin(): Plugin {
}
}
-function isLegacyChunk(
- chunk: Rollup.RenderedChunk,
- options: Rollup.NormalizedOutputOptions,
-) {
- return options.format === 'system' && chunk.fileName.includes('-legacy')
+function isLegacyChunk(chunk: Rollup.RenderedChunk) {
+ return chunk.fileName.includes('-legacy')
}
-function isLegacyBundle(
- bundle: Rollup.OutputBundle,
- options: Rollup.NormalizedOutputOptions,
-) {
- if (options.format === 'system') {
- const entryChunk = Object.values(bundle).find(
- (output) => output.type === 'chunk' && output.isEntry,
- )
-
- return !!entryChunk && entryChunk.fileName.includes('-legacy')
- }
+function isLegacyBundle(bundle: Rollup.OutputBundle) {
+ const entryChunk = Object.values(bundle).find(
+ (output) => output.type === 'chunk' && output.isEntry,
+ )
- return false
+ return !!entryChunk && entryChunk.fileName.includes('-legacy')
}
function recordAndRemovePolyfillBabelPlugin(
diff --git a/packages/vite/CHANGELOG.md b/packages/vite/CHANGELOG.md
index aa42a1bd1e78dc..99107395c174f4 100644
--- a/packages/vite/CHANGELOG.md
+++ b/packages/vite/CHANGELOG.md
@@ -1,296 +1,547 @@
-## [7.1.9](https://github.com/vitejs/vite/compare/v7.1.8...v7.1.9) (2025-10-03)
+## [7.1.16](https://github.com/vitejs/rolldown-vite/compare/v7.1.15...v7.1.16) (2025-10-07)
+### Features
+
+* update rolldown ([#443](https://github.com/vitejs/rolldown-vite/issues/443)) ([4eb7418](https://github.com/vitejs/rolldown-vite/commit/4eb7418726d99899b66c95ecb3049055464a6a5f))
+
+### Bug Fixes
+
+* set transform target ([#441](https://github.com/vitejs/rolldown-vite/issues/441)) ([80ec52c](https://github.com/vitejs/rolldown-vite/commit/80ec52cd696352b14dde6e8a4361edb11a9d4e77))
+
### Reverts
-* **server:** drain stdin when not interactive ([#20885](https://github.com/vitejs/vite/issues/20885)) ([12d72b0](https://github.com/vitejs/vite/commit/12d72b0538ef1540bfb0f1dd8a44b75deaa3464e))
+* **server:** drain stdin when not interactive ([#20885](https://github.com/vitejs/rolldown-vite/issues/20885)) ([12d72b0](https://github.com/vitejs/rolldown-vite/commit/12d72b0538ef1540bfb0f1dd8a44b75deaa3464e))
+
+## [7.1.15](https://github.com/vitejs/rolldown-vite/compare/v7.1.14...v7.1.15) (2025-10-02)
+### Bug Fixes
+
+* **css:** improve url escape characters handling ([#20847](https://github.com/vitejs/rolldown-vite/issues/20847)) ([24a61a3](https://github.com/vitejs/rolldown-vite/commit/24a61a3f5404279e91f7ceebf7449a5e874f9d56))
+* **deps:** update all non-major dependencies ([#20855](https://github.com/vitejs/rolldown-vite/issues/20855)) ([788a183](https://github.com/vitejs/rolldown-vite/commit/788a183afce57de13f5656f0cf42cdf6fdc3ebaa))
+* **deps:** update artichokie to 0.4.2 ([#20864](https://github.com/vitejs/rolldown-vite/issues/20864)) ([e670799](https://github.com/vitejs/rolldown-vite/commit/e670799e123dca78e1a63aeb06dbadade3d5ab51))
+* **dev:** skip JS responses for document requests ([#20866](https://github.com/vitejs/rolldown-vite/issues/20866)) ([6bc6c4d](https://github.com/vitejs/rolldown-vite/commit/6bc6c4dbc23501577d3919dc841454eb2eb14a54))
+* **glob:** fix HMR for array patterns with exclusions ([#20872](https://github.com/vitejs/rolldown-vite/issues/20872)) ([63e040f](https://github.com/vitejs/rolldown-vite/commit/63e040f1ca6b635a007eb40aa7c8b891e8cc5799))
+* keep ids for virtual modules as-is ([#20808](https://github.com/vitejs/rolldown-vite/issues/20808)) ([d4eca98](https://github.com/vitejs/rolldown-vite/commit/d4eca986d679c77bd449db20fd99d8255985b550))
+* **oxc:** set typescript jsx options ([9afe6f6](https://github.com/vitejs/rolldown-vite/commit/9afe6f6daaa097f3dc60dff9f9aa09a21e5d377d))
+* **server:** drain stdin when not interactive ([#20837](https://github.com/vitejs/rolldown-vite/issues/20837)) ([bb950e9](https://github.com/vitejs/rolldown-vite/commit/bb950e92b372f9a52245e9542cf9d9700d23ef8c))
+* **server:** improve malformed URL handling in middlewares ([#20830](https://github.com/vitejs/rolldown-vite/issues/20830)) ([d65a983](https://github.com/vitejs/rolldown-vite/commit/d65a9831c984e562c5bf2b5f427de16f6e1bd931))
+
+### Miscellaneous Chores
+
+* **deps:** update rolldown-related dependencies ([#20854](https://github.com/vitejs/rolldown-vite/issues/20854)) ([4dd06fd](https://github.com/vitejs/rolldown-vite/commit/4dd06fdc8d643059c2abf88188eae7c4877aab6e))
+* update url of `create-react-app` license ([#20865](https://github.com/vitejs/rolldown-vite/issues/20865)) ([166a178](https://github.com/vitejs/rolldown-vite/commit/166a178f45b6e48db27b5626559f5ec3358c2fb4))
+
+## [7.1.14](https://github.com/vitejs/rolldown-vite/compare/v7.1.13...v7.1.14) (2025-09-30)
+### Features
+
+* set `generatedCode: 'es2015'` ([4cfe8e1](https://github.com/vitejs/rolldown-vite/commit/4cfe8e1d2e0d75e47ac58de9c382efc7786cd023))
+* update rolldown ([bac2c1b](https://github.com/vitejs/rolldown-vite/commit/bac2c1b10fc39350eba46925ed87e5fa8e944b7d))
-## [7.1.8](https://github.com/vitejs/vite/compare/v7.1.7...v7.1.8) (2025-10-02)
### Bug Fixes
-* **css:** improve url escape characters handling ([#20847](https://github.com/vitejs/vite/issues/20847)) ([24a61a3](https://github.com/vitejs/vite/commit/24a61a3f5404279e91f7ceebf7449a5e874f9d56))
-* **deps:** update all non-major dependencies ([#20855](https://github.com/vitejs/vite/issues/20855)) ([788a183](https://github.com/vitejs/vite/commit/788a183afce57de13f5656f0cf42cdf6fdc3ebaa))
-* **deps:** update artichokie to 0.4.2 ([#20864](https://github.com/vitejs/vite/issues/20864)) ([e670799](https://github.com/vitejs/vite/commit/e670799e123dca78e1a63aeb06dbadade3d5ab51))
-* **dev:** skip JS responses for document requests ([#20866](https://github.com/vitejs/vite/issues/20866)) ([6bc6c4d](https://github.com/vitejs/vite/commit/6bc6c4dbc23501577d3919dc841454eb2eb14a54))
-* **glob:** fix HMR for array patterns with exclusions ([#20872](https://github.com/vitejs/vite/issues/20872)) ([63e040f](https://github.com/vitejs/vite/commit/63e040f1ca6b635a007eb40aa7c8b891e8cc5799))
-* keep ids for virtual modules as-is ([#20808](https://github.com/vitejs/vite/issues/20808)) ([d4eca98](https://github.com/vitejs/vite/commit/d4eca986d679c77bd449db20fd99d8255985b550))
-* **server:** drain stdin when not interactive ([#20837](https://github.com/vitejs/vite/issues/20837)) ([bb950e9](https://github.com/vitejs/vite/commit/bb950e92b372f9a52245e9542cf9d9700d23ef8c))
-* **server:** improve malformed URL handling in middlewares ([#20830](https://github.com/vitejs/vite/issues/20830)) ([d65a983](https://github.com/vitejs/vite/commit/d65a9831c984e562c5bf2b5f427de16f6e1bd931))
+* use readFileSync to avoid "too many open files" ([7c7ffdc](https://github.com/vitejs/rolldown-vite/commit/7c7ffdc2536f39a0ae7a04fe384aa59cc1b5a7e7))
+
+### Performance Improvements
+
+* use single regex for `isEntirelyImport` ([ac1ceaf](https://github.com/vitejs/rolldown-vite/commit/ac1ceaf804d52360f94312a6602046da72c4fb03))
### Documentation
-* **create-vite:** provide deno example ([#20747](https://github.com/vitejs/vite/issues/20747)) ([fdb758a](https://github.com/vitejs/vite/commit/fdb758a51796b1ab605437b2eee778a84e87e169))
+* **create-vite:** provide deno example ([#20747](https://github.com/vitejs/rolldown-vite/issues/20747)) ([fdb758a](https://github.com/vitejs/rolldown-vite/commit/fdb758a51796b1ab605437b2eee778a84e87e169))
### Miscellaneous Chores
-* **deps:** update rolldown-related dependencies ([#20810](https://github.com/vitejs/vite/issues/20810)) ([ea68a88](https://github.com/vitejs/vite/commit/ea68a8868c7ee249213057f8a81c3f92a9839dde))
-* **deps:** update rolldown-related dependencies ([#20854](https://github.com/vitejs/vite/issues/20854)) ([4dd06fd](https://github.com/vitejs/vite/commit/4dd06fdc8d643059c2abf88188eae7c4877aab6e))
-* update url of `create-react-app` license ([#20865](https://github.com/vitejs/vite/issues/20865)) ([166a178](https://github.com/vitejs/vite/commit/166a178f45b6e48db27b5626559f5ec3358c2fb4))
+* **deps:** update rolldown-related dependencies ([#20810](https://github.com/vitejs/rolldown-vite/issues/20810)) ([ea68a88](https://github.com/vitejs/rolldown-vite/commit/ea68a8868c7ee249213057f8a81c3f92a9839dde))
+
+## [7.1.13](https://github.com/vitejs/rolldown-vite/compare/v7.1.12...v7.1.13) (2025-09-24)
+### Features
+
+* **hmr:** skip self-imports for `import.meta.hot.invalidate` ([ebd134f](https://github.com/vitejs/rolldown-vite/commit/ebd134faefd60e8716543b6b765763b6fa7b5371))
+* update rolldown ([007e115](https://github.com/vitejs/rolldown-vite/commit/007e115a714772524db97c3bde1d23acce1179dd))
+
+## [7.1.12](https://github.com/vitejs/rolldown-vite/compare/v7.1.11...v7.1.12) (2025-09-22)
+### Features
+
+* update rolldown ([#423](https://github.com/vitejs/rolldown-vite/issues/423)) ([6713908](https://github.com/vitejs/rolldown-vite/commit/671390887f7dd2d091ba14ecf7c40fb6af4c65a0))
-## [7.1.7](https://github.com/vitejs/vite/compare/v7.1.6...v7.1.7) (2025-09-22)
### Bug Fixes
-* **build:** fix ssr environment `emitAssets: true` when `sharedConfigBuild: true` ([#20787](https://github.com/vitejs/vite/issues/20787)) ([4c4583c](https://github.com/vitejs/vite/commit/4c4583ce7a13306e0853901570c5d95517fe81da))
-* **client:** use CSP nonce when rendering error overlay ([#20791](https://github.com/vitejs/vite/issues/20791)) ([9bc9d12](https://github.com/vitejs/vite/commit/9bc9d1258f550e9d8f5e530cd27aecb1bee32bdb))
-* **deps:** update all non-major dependencies ([#20811](https://github.com/vitejs/vite/issues/20811)) ([9f2247c](https://github.com/vitejs/vite/commit/9f2247c066cac75746356c9391845235445a154b))
-* **glob:** handle glob imports from folders starting with dot ([#20800](https://github.com/vitejs/vite/issues/20800)) ([105abe8](https://github.com/vitejs/vite/commit/105abe87c412cf0f83859ba41fed869221cbb3e0))
-* **hmr:** trigger prune event when import is removed from non hmr module ([#20768](https://github.com/vitejs/vite/issues/20768)) ([9f32b1d](https://github.com/vitejs/vite/commit/9f32b1dc710991c53a9f665c8d0d6945f342bf92))
-* **hmr:** wait for `import.meta.hot.prune` callbacks to complete before running other HMRs ([#20698](https://github.com/vitejs/vite/issues/20698)) ([98a3484](https://github.com/vitejs/vite/commit/98a3484733443ee529870477a6ab6a03572e3cbc))
+* **build:** fix ssr environment `emitAssets: true` when `sharedConfigBuild: true` ([#20787](https://github.com/vitejs/rolldown-vite/issues/20787)) ([4c4583c](https://github.com/vitejs/rolldown-vite/commit/4c4583ce7a13306e0853901570c5d95517fe81da))
+* **client:** use CSP nonce when rendering error overlay ([#20791](https://github.com/vitejs/rolldown-vite/issues/20791)) ([9bc9d12](https://github.com/vitejs/rolldown-vite/commit/9bc9d1258f550e9d8f5e530cd27aecb1bee32bdb))
+* **deps:** update all non-major dependencies ([#20811](https://github.com/vitejs/rolldown-vite/issues/20811)) ([9f2247c](https://github.com/vitejs/rolldown-vite/commit/9f2247c066cac75746356c9391845235445a154b))
+* **glob:** handle glob imports from folders starting with dot ([#20800](https://github.com/vitejs/rolldown-vite/issues/20800)) ([105abe8](https://github.com/vitejs/rolldown-vite/commit/105abe87c412cf0f83859ba41fed869221cbb3e0))
+* **hmr:** trigger prune event when import is removed from non hmr module ([#20768](https://github.com/vitejs/rolldown-vite/issues/20768)) ([9f32b1d](https://github.com/vitejs/rolldown-vite/commit/9f32b1dc710991c53a9f665c8d0d6945f342bf92))
+* **hmr:** wait for `import.meta.hot.prune` callbacks to complete before running other HMRs ([#20698](https://github.com/vitejs/rolldown-vite/issues/20698)) ([98a3484](https://github.com/vitejs/rolldown-vite/commit/98a3484733443ee529870477a6ab6a03572e3cbc))
-## [7.1.6](https://github.com/vitejs/vite/compare/v7.1.5...v7.1.6) (2025-09-18)
+## [7.1.11](https://github.com/vitejs/rolldown-vite/compare/v7.1.10...v7.1.11) (2025-09-18)
### Bug Fixes
-* **deps:** update all non-major dependencies ([#20773](https://github.com/vitejs/vite/issues/20773)) ([88af2ae](https://github.com/vitejs/vite/commit/88af2ae7df77160e7d11a9fa147a4967c8499f13))
-* **esbuild:** inject esbuild helper functions with minified `$` variables correctly ([#20761](https://github.com/vitejs/vite/issues/20761)) ([7e8e004](https://github.com/vitejs/vite/commit/7e8e0043d60379e11da481d9cc3c3556c9756ac0))
-* fallback terser to main thread when nameCache is provided ([#20750](https://github.com/vitejs/vite/issues/20750)) ([a679a64](https://github.com/vitejs/vite/commit/a679a643404c95556dda2670643e14eca9c585bd))
-* **types:** strict env typings fail when `skipLibCheck` is `false` ([#20755](https://github.com/vitejs/vite/issues/20755)) ([cc54e29](https://github.com/vitejs/vite/commit/cc54e294746d3eac868de96f85d98dd0fa0cda11))
+* **deps:** update all non-major dependencies ([#20773](https://github.com/vitejs/rolldown-vite/issues/20773)) ([88af2ae](https://github.com/vitejs/rolldown-vite/commit/88af2ae7df77160e7d11a9fa147a4967c8499f13))
+* **esbuild:** inject esbuild helper functions with minified `$` variables correctly ([#20761](https://github.com/vitejs/rolldown-vite/issues/20761)) ([7e8e004](https://github.com/vitejs/rolldown-vite/commit/7e8e0043d60379e11da481d9cc3c3556c9756ac0))
+* fallback terser to main thread when nameCache is provided ([#20750](https://github.com/vitejs/rolldown-vite/issues/20750)) ([a679a64](https://github.com/vitejs/rolldown-vite/commit/a679a643404c95556dda2670643e14eca9c585bd))
+* **optimizer:** avoid mutating `optimizeDeps.rollupOptions.transforms` for stable optimizer hash ([#417](https://github.com/vitejs/rolldown-vite/issues/417)) ([efed40f](https://github.com/vitejs/rolldown-vite/commit/efed40fe328019dcf6989ea7d19ead0393d9689f))
+* **types:** strict env typings fail when `skipLibCheck` is `false` ([#20755](https://github.com/vitejs/rolldown-vite/issues/20755)) ([cc54e29](https://github.com/vitejs/rolldown-vite/commit/cc54e294746d3eac868de96f85d98dd0fa0cda11))
### Miscellaneous Chores
-* **deps:** update rolldown-related dependencies ([#20675](https://github.com/vitejs/vite/issues/20675)) ([a67bb5f](https://github.com/vitejs/vite/commit/a67bb5fbec5f3e42151dc7e3166858d0d33533de))
-* **deps:** update rolldown-related dependencies ([#20772](https://github.com/vitejs/vite/issues/20772)) ([d785e72](https://github.com/vitejs/vite/commit/d785e72f2ead705e8b2416c0a5097878fced3435))
+* **deps:** update rolldown-related dependencies ([#20772](https://github.com/vitejs/rolldown-vite/issues/20772)) ([d785e72](https://github.com/vitejs/rolldown-vite/commit/d785e72f2ead705e8b2416c0a5097878fced3435))
+* fix typecheck ([438fee4](https://github.com/vitejs/rolldown-vite/commit/438fee4b17a91c7fa678f0385e40cf3d81d615a4))
+
+## [7.1.10](https://github.com/vitejs/rolldown-vite/compare/v7.1.9...v7.1.10) (2025-09-16)
+### Features
+
+* update rolldown ([#415](https://github.com/vitejs/rolldown-vite/issues/415)) ([854436b](https://github.com/vitejs/rolldown-vite/commit/854436b145843a192fcb62598af8bd9f21b67102))
+
+## [7.1.9](https://github.com/vitejs/rolldown-vite/compare/v7.1.8...v7.1.9) (2025-09-11)
+### Features
+
+* update rolldown ([d14afd7](https://github.com/vitejs/rolldown-vite/commit/d14afd72acd25bf2cbc84030552a7a556b769486))
-## [7.1.5](https://github.com/vitejs/vite/compare/v7.1.4...v7.1.5) (2025-09-08)
### Bug Fixes
-* apply `fs.strict` check to HTML files ([#20736](https://github.com/vitejs/vite/issues/20736)) ([14015d7](https://github.com/vitejs/vite/commit/14015d794f69accba68798bd0e15135bc51c9c1e))
-* **deps:** update all non-major dependencies ([#20732](https://github.com/vitejs/vite/issues/20732)) ([122bfba](https://github.com/vitejs/vite/commit/122bfbabeb1f095ce7cabd30893e5531e9a007c4))
-* upgrade sirv to 3.0.2 ([#20735](https://github.com/vitejs/vite/issues/20735)) ([09f2b52](https://github.com/vitejs/vite/commit/09f2b52e8d5907f26602653caf41b3a56692600d))
+* enable minify other than codegen for ES lib mode ([ad72fc3](https://github.com/vitejs/rolldown-vite/commit/ad72fc3ec6d5eac24b21c0413566b9eb1551aabd))
-## [7.1.4](https://github.com/vitejs/vite/compare/v7.1.3...v7.1.4) (2025-09-01)
+### Miscellaneous Chores
+
+* bump `rolldown-plugin-dts` ([#409](https://github.com/vitejs/rolldown-vite/issues/409)) ([2fbd7f1](https://github.com/vitejs/rolldown-vite/commit/2fbd7f1654ee01b638c1b7167cd79944e7ef2ad8))
+
+## [7.1.8](https://github.com/vitejs/rolldown-vite/compare/v7.1.7...v7.1.8) (2025-09-08)
+### Features
+
+* enable `optimization.inlineConst: { mode: 'smart' }` by default ([#399](https://github.com/vitejs/rolldown-vite/issues/399)) ([b2b89d7](https://github.com/vitejs/rolldown-vite/commit/b2b89d7cf76ecea8fd538916f84c447a3631cd75))
+* update rolldown ([#400](https://github.com/vitejs/rolldown-vite/issues/400)) ([88a0359](https://github.com/vitejs/rolldown-vite/commit/88a0359b03b65d45760618de77e50c2ed27a84b7))
+
+### Miscellaneous Chores
+
+* **deps:** update rolldown-related dependencies ([#20675](https://github.com/vitejs/rolldown-vite/issues/20675)) ([a67bb5f](https://github.com/vitejs/rolldown-vite/commit/a67bb5fbec5f3e42151dc7e3166858d0d33533de))
+* support ESM rolldown ([80120d6](https://github.com/vitejs/rolldown-vite/commit/80120d6a024ac498a70ea2445616d8632c8c844c))
+* update type build ([762cb49](https://github.com/vitejs/rolldown-vite/commit/762cb49b9bec5f5e66c1f9721eddc8d1c2655118))
+* update typos ([4698941](https://github.com/vitejs/rolldown-vite/commit/4698941ef4d87a93878e6381bf4b8869f5bc6f07))
+
+## [7.1.7](https://github.com/vitejs/rolldown-vite/compare/v7.1.6...v7.1.7) (2025-09-08)
### Bug Fixes
-* add missing awaits ([#20697](https://github.com/vitejs/vite/issues/20697)) ([79d10ed](https://github.com/vitejs/vite/commit/79d10ed6341ba7a751d007b7ad113a9b8be9c853))
-* **deps:** update all non-major dependencies ([#20676](https://github.com/vitejs/vite/issues/20676)) ([5a274b2](https://github.com/vitejs/vite/commit/5a274b29df83744cf0ce4dafd94029d2a9e01135))
-* **deps:** update all non-major dependencies ([#20709](https://github.com/vitejs/vite/issues/20709)) ([0401feb](https://github.com/vitejs/vite/commit/0401feba17e60bd7e976c5643128a0da49670a83))
-* pass rollup watch options when building in watch mode ([#20674](https://github.com/vitejs/vite/issues/20674)) ([f367453](https://github.com/vitejs/vite/commit/f367453ca2825bc8a390d41c5d13b161756f2b41))
+* add missing awaits ([#20697](https://github.com/vitejs/rolldown-vite/issues/20697)) ([79d10ed](https://github.com/vitejs/rolldown-vite/commit/79d10ed6341ba7a751d007b7ad113a9b8be9c853))
+* apply `fs.strict` check to HTML files ([#20736](https://github.com/vitejs/rolldown-vite/issues/20736)) ([14015d7](https://github.com/vitejs/rolldown-vite/commit/14015d794f69accba68798bd0e15135bc51c9c1e))
+* **deps:** update all non-major dependencies ([#20676](https://github.com/vitejs/rolldown-vite/issues/20676)) ([5a274b2](https://github.com/vitejs/rolldown-vite/commit/5a274b29df83744cf0ce4dafd94029d2a9e01135))
+* **deps:** update all non-major dependencies ([#20709](https://github.com/vitejs/rolldown-vite/issues/20709)) ([0401feb](https://github.com/vitejs/rolldown-vite/commit/0401feba17e60bd7e976c5643128a0da49670a83))
+* **deps:** update all non-major dependencies ([#20732](https://github.com/vitejs/rolldown-vite/issues/20732)) ([122bfba](https://github.com/vitejs/rolldown-vite/commit/122bfbabeb1f095ce7cabd30893e5531e9a007c4))
+* pass rollup watch options when building in watch mode ([#20674](https://github.com/vitejs/rolldown-vite/issues/20674)) ([f367453](https://github.com/vitejs/rolldown-vite/commit/f367453ca2825bc8a390d41c5d13b161756f2b41))
+* upgrade sirv to 3.0.2 ([#20735](https://github.com/vitejs/rolldown-vite/issues/20735)) ([09f2b52](https://github.com/vitejs/rolldown-vite/commit/09f2b52e8d5907f26602653caf41b3a56692600d))
### Miscellaneous Chores
-* remove unused constants entry from rolldown.config.ts ([#20710](https://github.com/vitejs/vite/issues/20710)) ([537fcf9](https://github.com/vitejs/vite/commit/537fcf91862a1bf51e70ce6fe9b414319dd3a675))
+* remove unused constants entry from rolldown.config.ts ([#20710](https://github.com/vitejs/rolldown-vite/issues/20710)) ([537fcf9](https://github.com/vitejs/rolldown-vite/commit/537fcf91862a1bf51e70ce6fe9b414319dd3a675))
### Code Refactoring
-* remove unnecessary `minify` parameter from `finalizeCss` ([#20701](https://github.com/vitejs/vite/issues/20701)) ([8099582](https://github.com/vitejs/vite/commit/8099582e5364f907f2bc6cb8e2d52ae0c4d937e4))
+* remove unnecessary `minify` parameter from `finalizeCss` ([#20701](https://github.com/vitejs/rolldown-vite/issues/20701)) ([8099582](https://github.com/vitejs/rolldown-vite/commit/8099582e5364f907f2bc6cb8e2d52ae0c4d937e4))
+
+## [7.1.6](https://github.com/vitejs/rolldown-vite/compare/v7.1.5...v7.1.6) (2025-09-08)
+### Features
+
+* enable `output.topLevelVar` by default ([#380](https://github.com/vitejs/rolldown-vite/issues/380)) ([7ea4f54](https://github.com/vitejs/rolldown-vite/commit/7ea4f5457ffb68b7238613060941e97cdf63c6fe))
+* update rolldown ([6ea9918](https://github.com/vitejs/rolldown-vite/commit/6ea991806f5b9c9d383d5fcb6c8e0eb6cad78eb9))
+
+### Bug Fixes
+
+* `build.minify: 'esbuild'` + native plugins were not working ([#397](https://github.com/vitejs/rolldown-vite/issues/397)) ([1a05fc4](https://github.com/vitejs/rolldown-vite/commit/1a05fc4bca1ab6f56c6c31ba1115cb1846174bb7))
+* **oxc:** respect `oxc.typescript.onlyRemoveTypeImports` if it's set ([#394](https://github.com/vitejs/rolldown-vite/issues/394)) ([dd64f89](https://github.com/vitejs/rolldown-vite/commit/dd64f89c8b2ef7bf2f40fe4a692fa037a3fd33c0))
+
+## [7.1.5](https://github.com/vitejs/rolldown-vite/compare/v7.1.4...v7.1.5) (2025-08-25)
+### Features
+
+* update rolldown ([#389](https://github.com/vitejs/rolldown-vite/issues/389)) ([6db67e5](https://github.com/vitejs/rolldown-vite/commit/6db67e5ed45e6a2ffc5b5e5799b79a0ef006e032))
+
+### Bug Fixes
-## [7.1.3](https://github.com/vitejs/vite/compare/v7.1.2...v7.1.3) (2025-08-19)
+* **native-plugin:** generate a more readable manifest ([#388](https://github.com/vitejs/rolldown-vite/issues/388)) ([e76ad17](https://github.com/vitejs/rolldown-vite/commit/e76ad172ab66c545ae4a2508b512f817adbff255))
+
+## [7.1.4](https://github.com/vitejs/rolldown-vite/compare/v7.1.3...v7.1.4) (2025-08-19)
### Features
-* **cli:** add Node.js version warning for unsupported versions ([#20638](https://github.com/vitejs/vite/issues/20638)) ([a1be1bf](https://github.com/vitejs/vite/commit/a1be1bf0905b9086e5f1370c63d76a7fa4a195ec))
-* generate code frame for parse errors thrown by terser ([#20642](https://github.com/vitejs/vite/issues/20642)) ([a9ba017](https://github.com/vitejs/vite/commit/a9ba0174a58b949373d6b4240bc69180dff0b780))
-* support long lines in `generateCodeFrame` ([#20640](https://github.com/vitejs/vite/issues/20640)) ([1559577](https://github.com/vitejs/vite/commit/15595773170c2a07f2efdccee05964fb87c19ae6))
+* **cli:** add Node.js version warning for unsupported versions ([#20638](https://github.com/vitejs/rolldown-vite/issues/20638)) ([a1be1bf](https://github.com/vitejs/rolldown-vite/commit/a1be1bf0905b9086e5f1370c63d76a7fa4a195ec))
+* generate code frame for parse errors thrown by terser ([#20642](https://github.com/vitejs/rolldown-vite/issues/20642)) ([a9ba017](https://github.com/vitejs/rolldown-vite/commit/a9ba0174a58b949373d6b4240bc69180dff0b780))
+* support long lines in `generateCodeFrame` ([#20640](https://github.com/vitejs/rolldown-vite/issues/20640)) ([1559577](https://github.com/vitejs/rolldown-vite/commit/15595773170c2a07f2efdccee05964fb87c19ae6))
### Bug Fixes
-* **deps:** update all non-major dependencies ([#20634](https://github.com/vitejs/vite/issues/20634)) ([4851cab](https://github.com/vitejs/vite/commit/4851cab3ba818b5f0f82eef3796b61d4b12768f1))
-* **optimizer:** incorrect incompatible error ([#20439](https://github.com/vitejs/vite/issues/20439)) ([446fe83](https://github.com/vitejs/vite/commit/446fe83033686dd38d13b786a217b8277b5c5f09))
-* support multiline new URL(..., import.meta.url) expressions ([#20644](https://github.com/vitejs/vite/issues/20644)) ([9ccf142](https://github.com/vitejs/vite/commit/9ccf142764d48292aa33e5ca6f020a7d55b97f61))
+* **deps:** update all non-major dependencies ([#20634](https://github.com/vitejs/rolldown-vite/issues/20634)) ([4851cab](https://github.com/vitejs/rolldown-vite/commit/4851cab3ba818b5f0f82eef3796b61d4b12768f1))
+* **optimizer:** incorrect incompatible error ([#20439](https://github.com/vitejs/rolldown-vite/issues/20439)) ([446fe83](https://github.com/vitejs/rolldown-vite/commit/446fe83033686dd38d13b786a217b8277b5c5f09))
+* support multiline new URL(..., import.meta.url) expressions ([#20644](https://github.com/vitejs/rolldown-vite/issues/20644)) ([9ccf142](https://github.com/vitejs/rolldown-vite/commit/9ccf142764d48292aa33e5ca6f020a7d55b97f61))
### Performance Improvements
-* **cli:** dynamically import `resolveConfig` ([#20646](https://github.com/vitejs/vite/issues/20646)) ([f691f57](https://github.com/vitejs/vite/commit/f691f57e46118328e00174160ceab2101b7256ca))
+* **cli:** dynamically import `resolveConfig` ([#20646](https://github.com/vitejs/rolldown-vite/issues/20646)) ([f691f57](https://github.com/vitejs/rolldown-vite/commit/f691f57e46118328e00174160ceab2101b7256ca))
### Miscellaneous Chores
-* **deps:** update rolldown-related dependencies ([#20633](https://github.com/vitejs/vite/issues/20633)) ([98b92e8](https://github.com/vitejs/vite/commit/98b92e8c4b10ae87c48292a8ac09b01ca81a02cf))
+* **deps:** update rolldown-related dependencies ([#20633](https://github.com/vitejs/rolldown-vite/issues/20633)) ([98b92e8](https://github.com/vitejs/rolldown-vite/commit/98b92e8c4b10ae87c48292a8ac09b01ca81a02cf))
### Code Refactoring
-* replace startsWith with strict equality ([#20603](https://github.com/vitejs/vite/issues/20603)) ([42816de](https://github.com/vitejs/vite/commit/42816dee0e177dded1c9de4d9099089ec4acef96))
-* use `import` in worker threads ([#20641](https://github.com/vitejs/vite/issues/20641)) ([530687a](https://github.com/vitejs/vite/commit/530687a344c51daf3115d1c134586bbde58356e0))
+* replace startsWith with strict equality ([#20603](https://github.com/vitejs/rolldown-vite/issues/20603)) ([42816de](https://github.com/vitejs/rolldown-vite/commit/42816dee0e177dded1c9de4d9099089ec4acef96))
+* use `import` in worker threads ([#20641](https://github.com/vitejs/rolldown-vite/issues/20641)) ([530687a](https://github.com/vitejs/rolldown-vite/commit/530687a344c51daf3115d1c134586bbde58356e0))
### Tests
-* remove `checkNodeVersion` test ([#20647](https://github.com/vitejs/vite/issues/20647)) ([731d3e6](https://github.com/vitejs/vite/commit/731d3e61f444f6c5e611f67b531416ed6450f90f))
+* remove `checkNodeVersion` test ([#20647](https://github.com/vitejs/rolldown-vite/issues/20647)) ([731d3e6](https://github.com/vitejs/rolldown-vite/commit/731d3e61f444f6c5e611f67b531416ed6450f90f))
+
+## [7.1.3](https://github.com/vitejs/rolldown-vite/compare/v7.1.2...v7.1.3) (2025-08-18)
+### Features
+
+* update rolldown ([#379](https://github.com/vitejs/rolldown-vite/issues/379)) ([4056cc6](https://github.com/vitejs/rolldown-vite/commit/4056cc655d1f46585413bf1663d8bb3c319a1131))
+* warn if a plugin specified both `rollupOptions` and `rolldownOptions` ([#377](https://github.com/vitejs/rolldown-vite/issues/377)) ([07da856](https://github.com/vitejs/rolldown-vite/commit/07da85623d9dce8d0a8b1cf83fe9e97f7b623f3f))
-## [7.1.2](https://github.com/vitejs/vite/compare/v7.1.1...v7.1.2) (2025-08-12)
### Bug Fixes
-* **client:** add `[vite]` prefixes to debug logs ([#20595](https://github.com/vitejs/vite/issues/20595)) ([7cdef61](https://github.com/vitejs/vite/commit/7cdef612a65da5363905723f77516b6745ac9a94))
-* **config:** make debugger work with bundle loader ([#20573](https://github.com/vitejs/vite/issues/20573)) ([c583927](https://github.com/vitejs/vite/commit/c583927bee657f15f63fdf80468fbe6a74eacdec))
-* **deps:** update all non-major dependencies ([#20587](https://github.com/vitejs/vite/issues/20587)) ([20d4817](https://github.com/vitejs/vite/commit/20d48172a0352d32f766b3c878d52a8944fdbf6e))
-* don't consider ids with `npm:` prefix as a built-in module ([#20558](https://github.com/vitejs/vite/issues/20558)) ([ab33803](https://github.com/vitejs/vite/commit/ab33803f2c831a82ddee637ad62e0c4ceeb663f1))
-* **hmr:** watch non-inlined assets referenced by CSS ([#20581](https://github.com/vitejs/vite/issues/20581)) ([b7d494b](https://github.com/vitejs/vite/commit/b7d494bf60af3ef7316d87266bb3ebf56617d5fd))
-* **module-runner:** prevent crash when sourceMappingURL pattern appears in string literals ([#20554](https://github.com/vitejs/vite/issues/20554)) ([2770478](https://github.com/vitejs/vite/commit/2770478d1c190d3e3de34ef9a3d2c493c06e9933))
+* merge tsconfig jsx options even when `oxc.jsx.runtime` is set ([#376](https://github.com/vitejs/rolldown-vite/issues/376)) ([e6eb30a](https://github.com/vitejs/rolldown-vite/commit/e6eb30a1b713b8b6c29480533fe8c9ec487cd2c3))
-### Miscellaneous Chores
+## [7.1.2](https://github.com/vitejs/rolldown-vite/compare/v7.1.1...v7.1.2) (2025-08-12)
+### Features
+
+* enable all native plugins by default ([#168](https://github.com/vitejs/rolldown-vite/issues/168)) ([7ad2330](https://github.com/vitejs/rolldown-vite/commit/7ad23302e63b1402fb0295111464cd0f2f86b9c4))
-* **deps:** migrate to `@jridgewell/remapping` from `@ampproject/remapping` ([#20577](https://github.com/vitejs/vite/issues/20577)) ([0a6048a](https://github.com/vitejs/vite/commit/0a6048aba4523f451edf29ae4037d252cc963815))
-* **deps:** update rolldown-related dependencies ([#20586](https://github.com/vitejs/vite/issues/20586)) ([77632c5](https://github.com/vitejs/vite/commit/77632c55db51cd6d03bcf24a1cef8d21058100a3))
+## [7.1.1](https://github.com/vitejs/rolldown-vite/compare/v7.1.0...v7.1.1) (2025-08-12)
+### Features
+
+* update rolldown ([#366](https://github.com/vitejs/rolldown-vite/issues/366)) ([f51756e](https://github.com/vitejs/rolldown-vite/commit/f51756e8e9404b12a0c1bfde01c3663c64e5d337))
-## [7.1.1](https://github.com/vitejs/vite/compare/v7.1.0...v7.1.1) (2025-08-08)
### Bug Fixes
-* **deps:** update `launch-editor-middleware` ([#20569](https://github.com/vitejs/vite/issues/20569)) ([826b394](https://github.com/vitejs/vite/commit/826b394e0efd033d2fe88126fe9a28da9573bd8f))
+* **client:** add `[vite]` prefixes to debug logs ([#20595](https://github.com/vitejs/rolldown-vite/issues/20595)) ([7cdef61](https://github.com/vitejs/rolldown-vite/commit/7cdef612a65da5363905723f77516b6745ac9a94))
+* **config:** make debugger work with bundle loader ([#20573](https://github.com/vitejs/rolldown-vite/issues/20573)) ([c583927](https://github.com/vitejs/rolldown-vite/commit/c583927bee657f15f63fdf80468fbe6a74eacdec))
+* **deps:** update `launch-editor-middleware` ([#20569](https://github.com/vitejs/rolldown-vite/issues/20569)) ([826b394](https://github.com/vitejs/rolldown-vite/commit/826b394e0efd033d2fe88126fe9a28da9573bd8f))
+* **deps:** update all non-major dependencies ([#20587](https://github.com/vitejs/rolldown-vite/issues/20587)) ([20d4817](https://github.com/vitejs/rolldown-vite/commit/20d48172a0352d32f766b3c878d52a8944fdbf6e))
+* don't consider ids with `npm:` prefix as a built-in module ([#20558](https://github.com/vitejs/rolldown-vite/issues/20558)) ([ab33803](https://github.com/vitejs/rolldown-vite/commit/ab33803f2c831a82ddee637ad62e0c4ceeb663f1))
+* **hmr:** watch non-inlined assets referenced by CSS ([#20581](https://github.com/vitejs/rolldown-vite/issues/20581)) ([b7d494b](https://github.com/vitejs/rolldown-vite/commit/b7d494bf60af3ef7316d87266bb3ebf56617d5fd))
+* **module-runner:** prevent crash when sourceMappingURL pattern appears in string literals ([#20554](https://github.com/vitejs/rolldown-vite/issues/20554)) ([2770478](https://github.com/vitejs/rolldown-vite/commit/2770478d1c190d3e3de34ef9a3d2c493c06e9933))
+* respect `rollupOptions.platform` options ([#361](https://github.com/vitejs/rolldown-vite/issues/361)) ([2603932](https://github.com/vitejs/rolldown-vite/commit/2603932b9e6bb4b9e1f9a1f070111e14eeff846c))
### Miscellaneous Chores
-* fix changelog beta links ([#20561](https://github.com/vitejs/vite/issues/20561)) ([2e0c21a](https://github.com/vitejs/vite/commit/2e0c21a07ec5ca7ed5eaa1b6a7d44682fa467a06))
-* update 7.1 changelog ([#20560](https://github.com/vitejs/vite/issues/20560)) ([d8869b8](https://github.com/vitejs/vite/commit/d8869b84208879c7aa6a0268ec073a34760c0d80))
-
-## [7.1.0](https://github.com/vitejs/vite/compare/v7.1.0-beta.1...v7.1.0) (2025-08-07)
-### Features
-
-* support files with more than 1000 lines by `generateCodeFrame` ([#20508](https://github.com/vitejs/vite/issues/20508)) ([e7d0b2a](https://github.com/vitejs/vite/commit/e7d0b2afa56840dabbbad10015dc04083caaf248))
-* add `import.meta.main` support in config (bundle config loader) ([#20516](https://github.com/vitejs/vite/issues/20516)) ([5d3e3c2](https://github.com/vitejs/vite/commit/5d3e3c2ae5a2174941fd09fd7842794a287c3ab7))
-* **optimizer:** improve dependency optimization error messages with esbuild formatMessages ([#20525](https://github.com/vitejs/vite/issues/20525)) ([d17cfed](https://github.com/vitejs/vite/commit/d17cfeda0741e4476570700a00b7b37917c97700))
-* **ssr:** add `import.meta.main` support for Node.js module runner ([#20517](https://github.com/vitejs/vite/issues/20517)) ([794a8f2](https://github.com/vitejs/vite/commit/794a8f230218a3b1e148defc5a2d7a67409177ff))
-* add `future: 'warn'` ([#20473](https://github.com/vitejs/vite/issues/20473)) ([e6aaf17](https://github.com/vitejs/vite/commit/e6aaf17ca21544572941957ce71bd8dbdc94e402))
-* add `removeServerPluginContainer` future deprecation ([#20437](https://github.com/vitejs/vite/issues/20437)) ([c1279e7](https://github.com/vitejs/vite/commit/c1279e75401ac6ea1d0678da88414a76ff36b6fe))
-* add `removeServerReloadModule` future deprecation ([#20436](https://github.com/vitejs/vite/issues/20436)) ([6970d17](https://github.com/vitejs/vite/commit/6970d1740cebd56af696abf60f30adb0c060f578))
-* add `server.warmupRequest` to future deprecation ([#20431](https://github.com/vitejs/vite/issues/20431)) ([8ad388a](https://github.com/vitejs/vite/commit/8ad388aeab0dc79e4bc14859b91174427805a46b))
-* add `ssrFixStacktrace` / `ssrRewriteStacktrace` to `removeSsrLoadModule` future deprecation ([#20435](https://github.com/vitejs/vite/issues/20435)) ([8c8f587](https://github.com/vitejs/vite/commit/8c8f5879ead251705c2c363f5b8b94f618fbf374))
-* **client:** ping from SharedWorker ([#19057](https://github.com/vitejs/vite/issues/19057)) ([5c97c22](https://github.com/vitejs/vite/commit/5c97c22548476e5f80856ece1d80b9234a7e6ecb))
-* **dev:** add `this.fs` support ([#20301](https://github.com/vitejs/vite/issues/20301)) ([0fe3f2f](https://github.com/vitejs/vite/commit/0fe3f2f7c325c5990f1059c28b66b24e1b8fd5d3))
-* export `defaultExternalConditions` ([#20279](https://github.com/vitejs/vite/issues/20279)) ([344d302](https://github.com/vitejs/vite/commit/344d30243b107852b133175e947a0410ea703f00))
-* implement `removePluginHookSsrArgument` future deprecation ([#20433](https://github.com/vitejs/vite/issues/20433)) ([95927d9](https://github.com/vitejs/vite/commit/95927d9c0ba1cb0b3bd8c900f039c099f8e29f90))
-* implement `removeServerHot` future deprecation ([#20434](https://github.com/vitejs/vite/issues/20434)) ([259f45d](https://github.com/vitejs/vite/commit/259f45d0698a184d6ecc352b610001fa1acdcee1))
-* resolve server URLs before calling other listeners ([#19981](https://github.com/vitejs/vite/issues/19981)) ([45f6443](https://github.com/vitejs/vite/commit/45f6443a935258d8eee62874f0695b8c1c60a481))
-* **ssr:** resolve externalized packages with `resolve.externalConditions` and add `module-sync` to default external condition ([#20409](https://github.com/vitejs/vite/issues/20409)) ([c669c52](https://github.com/vitejs/vite/commit/c669c524e6008a4902169f4b2f865e892297acf3))
-* **ssr:** support `import.meta.resolve` in module runner ([#20260](https://github.com/vitejs/vite/issues/20260)) ([62835f7](https://github.com/vitejs/vite/commit/62835f7c06d37802f0bc2abbf58bbaeaa8c73ce5))
-
-### Bug Fixes
-
-* **css:** avoid warnings for `image-set` containing `__VITE_ASSET__` ([#20520](https://github.com/vitejs/vite/issues/20520)) ([f1a2635](https://github.com/vitejs/vite/commit/f1a2635e6977a3eda681bec036f64f07686dad0d))
-* **css:** empty CSS entry points should generate CSS files, not JS files ([#20518](https://github.com/vitejs/vite/issues/20518)) ([bac9f3e](https://github.com/vitejs/vite/commit/bac9f3ecf84ae5c5add6ef224ae057508247f89e))
-* **dev:** denied request stalled when requested concurrently ([#20503](https://github.com/vitejs/vite/issues/20503)) ([64a52e7](https://github.com/vitejs/vite/commit/64a52e70d9250b16aa81ce2df27c23fe56907257))
-* **manifest:** initialize `entryCssAssetFileNames` as an empty Set ([#20542](https://github.com/vitejs/vite/issues/20542)) ([6a46cda](https://github.com/vitejs/vite/commit/6a46cdac5dece70296d1179640958deeeb2e6c19))
-* skip prepareOutDirPlugin in workers ([#20556](https://github.com/vitejs/vite/issues/20556)) ([97d5111](https://github.com/vitejs/vite/commit/97d5111645a395dae48b16b110bc76c1ee8956c8))
-* **asset:** only watch existing files for `new URL(, import.meta.url)` ([#20507](https://github.com/vitejs/vite/issues/20507)) ([1b211fd](https://github.com/vitejs/vite/commit/1b211fd1beccd0fc13bec700815abaa9f54147e8))
-* **client:** keep ping on WS constructor error ([#20512](https://github.com/vitejs/vite/issues/20512)) ([3676da5](https://github.com/vitejs/vite/commit/3676da5bc5b2b69b28619b8521fca94d30468fe5))
-* **deps:** update all non-major dependencies ([#20537](https://github.com/vitejs/vite/issues/20537)) ([fc9a9d3](https://github.com/vitejs/vite/commit/fc9a9d3f1493caa3d614f64e0a61fd5684f0928b))
-* don't resolve as relative for specifiers starting with a dot ([#20528](https://github.com/vitejs/vite/issues/20528)) ([c5a10ec](https://github.com/vitejs/vite/commit/c5a10ec004130bec17cf42760b76d1d404008fa3))
-* **html:** allow control character in input stream ([#20483](https://github.com/vitejs/vite/issues/20483)) ([c12a4a7](https://github.com/vitejs/vite/commit/c12a4a76a299237a0a13b885c72fdda6e4a3c9b7))
-* merge old and new `noExternal: true` correctly ([#20502](https://github.com/vitejs/vite/issues/20502)) ([9ebe4a5](https://github.com/vitejs/vite/commit/9ebe4a514a2e48e3fe194f16b0556a45ff38077a))
-* **deps:** update all non-major dependencies ([#20489](https://github.com/vitejs/vite/issues/20489)) ([f6aa04a](https://github.com/vitejs/vite/commit/f6aa04a52d486c8881f666c450caa3dab3c6bba1))
-* **dev:** denied requests overly ([#20410](https://github.com/vitejs/vite/issues/20410)) ([4be5270](https://github.com/vitejs/vite/commit/4be5270b27f7e6323f1771974b4b3520d86600e4))
-* **hmr:** register css deps as `type: asset` ([#20391](https://github.com/vitejs/vite/issues/20391)) ([7eac8dd](https://github.com/vitejs/vite/commit/7eac8ddb65033b8c001d6c6bc46aaeeefb79680a))
-* **optimizer:** discover correct jsx runtime during scan ([#20495](https://github.com/vitejs/vite/issues/20495)) ([10d48bb](https://github.com/vitejs/vite/commit/10d48bb2e30824d217e415a58cea9e69c2820c2a))
-* **preview:** set correct host for `resolvedUrls` ([#20496](https://github.com/vitejs/vite/issues/20496)) ([62b3e0d](https://github.com/vitejs/vite/commit/62b3e0d95c143e2f8b4e88d99c381d23663025ee))
-* **worker:** resolve WebKit compat with inline workers by deferring blob URL revocation ([#20460](https://github.com/vitejs/vite/issues/20460)) ([8033e5b](https://github.com/vitejs/vite/commit/8033e5bf8d3ff43995d0620490ed8739c59171dd))
+* **deps:** migrate to `@jridgewell/remapping` from `@ampproject/remapping` ([#20577](https://github.com/vitejs/rolldown-vite/issues/20577)) ([0a6048a](https://github.com/vitejs/rolldown-vite/commit/0a6048aba4523f451edf29ae4037d252cc963815))
+* **deps:** update rolldown-related dependencies ([#20586](https://github.com/vitejs/rolldown-vite/issues/20586)) ([77632c5](https://github.com/vitejs/rolldown-vite/commit/77632c55db51cd6d03bcf24a1cef8d21058100a3))
+* fix changelog beta links ([#20561](https://github.com/vitejs/rolldown-vite/issues/20561)) ([2e0c21a](https://github.com/vitejs/rolldown-vite/commit/2e0c21a07ec5ca7ed5eaa1b6a7d44682fa467a06))
+* fix typecheck ([aa8f700](https://github.com/vitejs/rolldown-vite/commit/aa8f700641bc7871f973774a15269abbf575db35))
+* update 7.1 changelog ([#20560](https://github.com/vitejs/rolldown-vite/issues/20560)) ([d8869b8](https://github.com/vitejs/rolldown-vite/commit/d8869b84208879c7aa6a0268ec073a34760c0d80))
-### Performance Improvements
+## [7.1.0](https://github.com/vitejs/rolldown-vite/compare/v7.1.0-beta.2...v7.1.0) (2025-08-07)
+### Features
+
+* support files with more than 1000 lines by `generateCodeFrame` ([#20508](https://github.com/vitejs/rolldown-vite/issues/20508)) ([e7d0b2a](https://github.com/vitejs/rolldown-vite/commit/e7d0b2afa56840dabbbad10015dc04083caaf248))
-* **client:** reduce reload debounce ([#20429](https://github.com/vitejs/vite/issues/20429)) ([22ad43b](https://github.com/vitejs/vite/commit/22ad43b4bf2435efe78a65b84e8469b23521900a))
+### Bug Fixes
+
+* **css:** avoid warnings for `image-set` containing `__VITE_ASSET__` ([#20520](https://github.com/vitejs/rolldown-vite/issues/20520)) ([f1a2635](https://github.com/vitejs/rolldown-vite/commit/f1a2635e6977a3eda681bec036f64f07686dad0d))
+* **css:** empty CSS entry points should generate CSS files, not JS files ([#20518](https://github.com/vitejs/rolldown-vite/issues/20518)) ([bac9f3e](https://github.com/vitejs/rolldown-vite/commit/bac9f3ecf84ae5c5add6ef224ae057508247f89e))
+* **dev:** denied request stalled when requested concurrently ([#20503](https://github.com/vitejs/rolldown-vite/issues/20503)) ([64a52e7](https://github.com/vitejs/rolldown-vite/commit/64a52e70d9250b16aa81ce2df27c23fe56907257))
+* **manifest:** initialize `entryCssAssetFileNames` as an empty Set ([#20542](https://github.com/vitejs/rolldown-vite/issues/20542)) ([6a46cda](https://github.com/vitejs/rolldown-vite/commit/6a46cdac5dece70296d1179640958deeeb2e6c19))
+* skip prepareOutDirPlugin in workers ([#20556](https://github.com/vitejs/rolldown-vite/issues/20556)) ([97d5111](https://github.com/vitejs/rolldown-vite/commit/97d5111645a395dae48b16b110bc76c1ee8956c8))
### Miscellaneous Chores
-* **deps:** update rolldown-related dependencies ([#20536](https://github.com/vitejs/vite/issues/20536)) ([8be2787](https://github.com/vitejs/vite/commit/8be278748a92b128c49a24619d8d537dd2b08ceb))
-* **deps:** update dependency parse5 to v8 ([#20490](https://github.com/vitejs/vite/issues/20490)) ([744582d](https://github.com/vitejs/vite/commit/744582d0187c50045fb6cf229e3fab13093af08e))
-* format ([f20addc](https://github.com/vitejs/vite/commit/f20addc5363058f5fd797e5bc71fab3877ed0a76))
-* stablize `cssScopeTo` ([#19592](https://github.com/vitejs/vite/issues/19592)) ([ced1343](https://github.com/vitejs/vite/commit/ced13433fb71e2101850a4da1b0ef70cbc38b804))
+* update JSDoc of `experimental.enableNativePlugin` option ([2008da5](https://github.com/vitejs/rolldown-vite/commit/2008da53895a9925e7bc3220c603378f429b4942))
### Code Refactoring
-* use hook filters in the worker plugin ([#20527](https://github.com/vitejs/vite/issues/20527)) ([958cdf2](https://github.com/vitejs/vite/commit/958cdf24f882be6953ca20912dd30c84213b069b))
-* extract prepareOutDir as a plugin ([#20373](https://github.com/vitejs/vite/issues/20373)) ([2c4af1f](https://github.com/vitejs/vite/commit/2c4af1f90b3ac98df6f4585a329528e6bd850462))
-* extract resolve rollup options ([#20375](https://github.com/vitejs/vite/issues/20375)) ([61a9778](https://github.com/vitejs/vite/commit/61a97780e6c54adb87345cb8c1f5f0d8e9ca5c05))
-* rewrite openchrome.applescript to JXA ([#20424](https://github.com/vitejs/vite/issues/20424)) ([7979f9d](https://github.com/vitejs/vite/commit/7979f9da555aa16bd221b32ea78ce8cb5292fac4))
-* use `http-proxy-3` ([#20402](https://github.com/vitejs/vite/issues/20402)) ([26d9872](https://github.com/vitejs/vite/commit/26d987232aad389733a7635b92122bb1d78dfcad))
-* use hook filters in internal plugins ([#20358](https://github.com/vitejs/vite/issues/20358)) ([f19c4d7](https://github.com/vitejs/vite/commit/f19c4d72de142814994e30120aa4ad57552cb874))
-* use hook filters in internal resolve plugin ([#20480](https://github.com/vitejs/vite/issues/20480)) ([acd2a13](https://github.com/vitejs/vite/commit/acd2a13c2d80e8c5c721bcf9738dfc03346cbfe1))
+* deprecate esbuild / optimizeDeps.esbuild options ([#355](https://github.com/vitejs/rolldown-vite/issues/355)) ([4dab15e](https://github.com/vitejs/rolldown-vite/commit/4dab15e92bd312be4b3b237dd999b4a5bf4c4537))
### Tests
-* detect ts support via `process.features` ([#20544](https://github.com/vitejs/vite/issues/20544)) ([856d3f0](https://github.com/vitejs/vite/commit/856d3f06e6889979f630c8453fa385f01d8adaba))
-* fix unimportant errors in test-unit ([#20545](https://github.com/vitejs/vite/issues/20545)) ([1f23554](https://github.com/vitejs/vite/commit/1f235545b14a51d41b19a49da4a7e3a8e8eb5d10))
+* detect ts support via `process.features` ([#20544](https://github.com/vitejs/rolldown-vite/issues/20544)) ([856d3f0](https://github.com/vitejs/rolldown-vite/commit/856d3f06e6889979f630c8453fa385f01d8adaba))
+* fix unimportant errors in test-unit ([#20545](https://github.com/vitejs/rolldown-vite/issues/20545)) ([1f23554](https://github.com/vitejs/rolldown-vite/commit/1f235545b14a51d41b19a49da4a7e3a8e8eb5d10))
-### Beta Changelogs
+## [7.1.0-beta.2](https://github.com/vitejs/rolldown-vite/compare/v7.1.0-beta.1...v7.1.0-beta.2) (2025-08-05)
+### Features
+
+* add `import.meta.main` support in config (bundle config loader) ([#20516](https://github.com/vitejs/rolldown-vite/issues/20516)) ([5d3e3c2](https://github.com/vitejs/rolldown-vite/commit/5d3e3c2ae5a2174941fd09fd7842794a287c3ab7))
+* **optimizer:** improve dependency optimization error messages with esbuild formatMessages ([#20525](https://github.com/vitejs/rolldown-vite/issues/20525)) ([d17cfed](https://github.com/vitejs/rolldown-vite/commit/d17cfeda0741e4476570700a00b7b37917c97700))
+* **ssr:** add `import.meta.main` support for Node.js module runner ([#20517](https://github.com/vitejs/rolldown-vite/issues/20517)) ([794a8f2](https://github.com/vitejs/rolldown-vite/commit/794a8f230218a3b1e148defc5a2d7a67409177ff))
+
+### Bug Fixes
+
+* **asset:** only watch existing files for `new URL(, import.meta.url)` ([#20507](https://github.com/vitejs/rolldown-vite/issues/20507)) ([1b211fd](https://github.com/vitejs/rolldown-vite/commit/1b211fd1beccd0fc13bec700815abaa9f54147e8))
+* **client:** keep ping on WS constructor error ([#20512](https://github.com/vitejs/rolldown-vite/issues/20512)) ([3676da5](https://github.com/vitejs/rolldown-vite/commit/3676da5bc5b2b69b28619b8521fca94d30468fe5))
+* **deps:** update all non-major dependencies ([#20537](https://github.com/vitejs/rolldown-vite/issues/20537)) ([fc9a9d3](https://github.com/vitejs/rolldown-vite/commit/fc9a9d3f1493caa3d614f64e0a61fd5684f0928b))
+* don't resolve as relative for specifiers starting with a dot ([#20528](https://github.com/vitejs/rolldown-vite/issues/20528)) ([c5a10ec](https://github.com/vitejs/rolldown-vite/commit/c5a10ec004130bec17cf42760b76d1d404008fa3))
+* **html:** allow control character in input stream ([#20483](https://github.com/vitejs/rolldown-vite/issues/20483)) ([c12a4a7](https://github.com/vitejs/rolldown-vite/commit/c12a4a76a299237a0a13b885c72fdda6e4a3c9b7))
+* merge old and new `noExternal: true` correctly ([#20502](https://github.com/vitejs/rolldown-vite/issues/20502)) ([9ebe4a5](https://github.com/vitejs/rolldown-vite/commit/9ebe4a514a2e48e3fe194f16b0556a45ff38077a))
+
+### Miscellaneous Chores
+
+* **deps:** update rolldown-related dependencies ([#20536](https://github.com/vitejs/rolldown-vite/issues/20536)) ([8be2787](https://github.com/vitejs/rolldown-vite/commit/8be278748a92b128c49a24619d8d537dd2b08ceb))
+
+### Code Refactoring
+
+* use hook filters in the worker plugin ([#20527](https://github.com/vitejs/rolldown-vite/issues/20527)) ([958cdf2](https://github.com/vitejs/rolldown-vite/commit/958cdf24f882be6953ca20912dd30c84213b069b))
+
+## [7.1.0-beta.1](https://github.com/vitejs/rolldown-vite/compare/v7.1.0-beta.0...v7.1.0-beta.1) (2025-08-05)
+### Features
+
+* enable native resolver by default ([#346](https://github.com/vitejs/rolldown-vite/issues/346)) ([793cf71](https://github.com/vitejs/rolldown-vite/commit/793cf716df2e38995012c0cdd68c651b4fd881c2))
+
+### Bug Fixes
-#### [7.1.0-beta.1](https://github.com/vitejs/vite/compare/v7.1.0-beta.0...v7.1.0-beta.1) (2025-08-05)
+* watch the config file itself ([#354](https://github.com/vitejs/rolldown-vite/issues/354)) ([6958a48](https://github.com/vitejs/rolldown-vite/commit/6958a484d0857953744c13d17094c996bec30c75))
-See [7.1.0-beta.1 changelog](https://github.com/vitejs/vite/blob/v7.1.0-beta.1/packages/vite/CHANGELOG.md)
+### Code Refactoring
-#### [7.1.0-beta.0](https://github.com/vitejs/vite/compare/v7.0.6...v7.1.0-beta.0) (2025-07-30)
+* introduce `*.rolldownOptions` and deprecate `*.rollupOptions` ([#348](https://github.com/vitejs/rolldown-vite/issues/348)) ([80dc4d6](https://github.com/vitejs/rolldown-vite/commit/80dc4d6a11c32fef7cb5fe3048ff8c2a22d90203))
-See [7.1.0-beta.0 changelog](https://github.com/vitejs/vite/blob/v7.1.0-beta.0/packages/vite/CHANGELOG.md)
+## [7.1.0-beta.0](https://github.com/vitejs/rolldown-vite/compare/v7.0.12...v7.1.0-beta.0) (2025-08-04)
+### Features
+* add `future: 'warn'` ([#20473](https://github.com/vitejs/rolldown-vite/issues/20473)) ([e6aaf17](https://github.com/vitejs/rolldown-vite/commit/e6aaf17ca21544572941957ce71bd8dbdc94e402))
+* add `removeServerPluginContainer` future deprecation ([#20437](https://github.com/vitejs/rolldown-vite/issues/20437)) ([c1279e7](https://github.com/vitejs/rolldown-vite/commit/c1279e75401ac6ea1d0678da88414a76ff36b6fe))
+* add `removeServerReloadModule` future deprecation ([#20436](https://github.com/vitejs/rolldown-vite/issues/20436)) ([6970d17](https://github.com/vitejs/rolldown-vite/commit/6970d1740cebd56af696abf60f30adb0c060f578))
+* add `server.warmupRequest` to future deprecation ([#20431](https://github.com/vitejs/rolldown-vite/issues/20431)) ([8ad388a](https://github.com/vitejs/rolldown-vite/commit/8ad388aeab0dc79e4bc14859b91174427805a46b))
+* add `ssrFixStacktrace` / `ssrRewriteStacktrace` to `removeSsrLoadModule` future deprecation ([#20435](https://github.com/vitejs/rolldown-vite/issues/20435)) ([8c8f587](https://github.com/vitejs/rolldown-vite/commit/8c8f5879ead251705c2c363f5b8b94f618fbf374))
+* bump rolldown ([16fa088](https://github.com/vitejs/rolldown-vite/commit/16fa088ed2ba7cba3dd02f20e5aea115ab8c38db))
+* **client:** ping from SharedWorker ([#19057](https://github.com/vitejs/rolldown-vite/issues/19057)) ([5c97c22](https://github.com/vitejs/rolldown-vite/commit/5c97c22548476e5f80856ece1d80b9234a7e6ecb))
+* **dev:** add `this.fs` support ([#20301](https://github.com/vitejs/rolldown-vite/issues/20301)) ([0fe3f2f](https://github.com/vitejs/rolldown-vite/commit/0fe3f2f7c325c5990f1059c28b66b24e1b8fd5d3))
+* export `defaultExternalConditions` ([#20279](https://github.com/vitejs/rolldown-vite/issues/20279)) ([344d302](https://github.com/vitejs/rolldown-vite/commit/344d30243b107852b133175e947a0410ea703f00))
+* implement `removePluginHookSsrArgument` future deprecation ([#20433](https://github.com/vitejs/rolldown-vite/issues/20433)) ([95927d9](https://github.com/vitejs/rolldown-vite/commit/95927d9c0ba1cb0b3bd8c900f039c099f8e29f90))
+* implement `removeServerHot` future deprecation ([#20434](https://github.com/vitejs/rolldown-vite/issues/20434)) ([259f45d](https://github.com/vitejs/rolldown-vite/commit/259f45d0698a184d6ecc352b610001fa1acdcee1))
+* resolve server URLs before calling other listeners ([#19981](https://github.com/vitejs/rolldown-vite/issues/19981)) ([45f6443](https://github.com/vitejs/rolldown-vite/commit/45f6443a935258d8eee62874f0695b8c1c60a481))
+* **ssr:** resolve externalized packages with `resolve.externalConditions` and add `module-sync` to default external condition ([#20409](https://github.com/vitejs/rolldown-vite/issues/20409)) ([c669c52](https://github.com/vitejs/rolldown-vite/commit/c669c524e6008a4902169f4b2f865e892297acf3))
+* **ssr:** support `import.meta.resolve` in module runner ([#20260](https://github.com/vitejs/rolldown-vite/issues/20260)) ([62835f7](https://github.com/vitejs/rolldown-vite/commit/62835f7c06d37802f0bc2abbf58bbaeaa8c73ce5))
-## [7.0.6](https://github.com/vitejs/vite/compare/v7.0.5...v7.0.6) (2025-07-24)
### Bug Fixes
-* **deps:** update all non-major dependencies ([#20442](https://github.com/vitejs/vite/issues/20442)) ([e49f505](https://github.com/vitejs/vite/commit/e49f50599d852eec644e79b074b4648e2dff1e5d))
-* **dev:** incorrect sourcemap when optimized CJS is imported ([#20458](https://github.com/vitejs/vite/issues/20458)) ([ead2dec](https://github.com/vitejs/vite/commit/ead2dec74170ad26db8a18bbd68f075efaceb0e3))
-* **module-runner:** normalize file:// on windows ([#20449](https://github.com/vitejs/vite/issues/20449)) ([1c9cb49](https://github.com/vitejs/vite/commit/1c9cb493f0467c463113d301b00ce07cbe4b6f58))
-* respond with correct headers and status code for HEAD requests ([#20421](https://github.com/vitejs/vite/issues/20421)) ([23d04fc](https://github.com/vitejs/vite/commit/23d04fc2d8a4fcf7c2011418693d6000748aa655))
+* apply https://github.com/vitejs/vite/pull/20503 ([a7b6ce0](https://github.com/vitejs/rolldown-vite/commit/a7b6ce01da56f948100491b0c9d3097e205a95e7))
+* **deps:** update all non-major dependencies ([#20489](https://github.com/vitejs/rolldown-vite/issues/20489)) ([f6aa04a](https://github.com/vitejs/rolldown-vite/commit/f6aa04a52d486c8881f666c450caa3dab3c6bba1))
+* **dev:** denied requests overly ([#20410](https://github.com/vitejs/rolldown-vite/issues/20410)) ([4be5270](https://github.com/vitejs/rolldown-vite/commit/4be5270b27f7e6323f1771974b4b3520d86600e4))
+* **hmr:** register css deps as `type: asset` ([#20391](https://github.com/vitejs/rolldown-vite/issues/20391)) ([7eac8dd](https://github.com/vitejs/rolldown-vite/commit/7eac8ddb65033b8c001d6c6bc46aaeeefb79680a))
+* **optimizer:** discover correct jsx runtime during scan ([#20495](https://github.com/vitejs/rolldown-vite/issues/20495)) ([10d48bb](https://github.com/vitejs/rolldown-vite/commit/10d48bb2e30824d217e415a58cea9e69c2820c2a))
+* **preview:** set correct host for `resolvedUrls` ([#20496](https://github.com/vitejs/rolldown-vite/issues/20496)) ([62b3e0d](https://github.com/vitejs/rolldown-vite/commit/62b3e0d95c143e2f8b4e88d99c381d23663025ee))
+* **worker:** resolve WebKit compat with inline workers by deferring blob URL revocation ([#20460](https://github.com/vitejs/rolldown-vite/issues/20460)) ([8033e5b](https://github.com/vitejs/rolldown-vite/commit/8033e5bf8d3ff43995d0620490ed8739c59171dd))
+
+### Performance Improvements
+
+* **client:** reduce reload debounce ([#20429](https://github.com/vitejs/rolldown-vite/issues/20429)) ([22ad43b](https://github.com/vitejs/rolldown-vite/commit/22ad43b4bf2435efe78a65b84e8469b23521900a))
### Miscellaneous Chores
-* **deps:** update rolldown-related dependencies ([#20441](https://github.com/vitejs/vite/issues/20441)) ([f689d61](https://github.com/vitejs/vite/commit/f689d613429ae9452c74f8bc482d8cc2584ea6b8))
-* remove some files from prettier ignore ([#20459](https://github.com/vitejs/vite/issues/20459)) ([8403f69](https://github.com/vitejs/vite/commit/8403f69551131b5c39bfaf242ffac2e5efcd1dd6))
+* **deps:** update dependency parse5 to v8 ([#20490](https://github.com/vitejs/rolldown-vite/issues/20490)) ([744582d](https://github.com/vitejs/rolldown-vite/commit/744582d0187c50045fb6cf229e3fab13093af08e))
+* fix type error ([f2f4529](https://github.com/vitejs/rolldown-vite/commit/f2f45292366a68a7e6f7477d136f9dc3b9bae6a8))
+* format ([f20addc](https://github.com/vitejs/rolldown-vite/commit/f20addc5363058f5fd797e5bc71fab3877ed0a76))
+* stablize `cssScopeTo` ([#19592](https://github.com/vitejs/rolldown-vite/issues/19592)) ([ced1343](https://github.com/vitejs/rolldown-vite/commit/ced13433fb71e2101850a4da1b0ef70cbc38b804))
### Code Refactoring
-* use environment transform request ([#20430](https://github.com/vitejs/vite/issues/20430)) ([24e6a0c](https://github.com/vitejs/vite/commit/24e6a0c3165557396db6ab59d3001e037c76ce32))
+* extract prepareOutDir as a plugin ([#20373](https://github.com/vitejs/rolldown-vite/issues/20373)) ([2c4af1f](https://github.com/vitejs/rolldown-vite/commit/2c4af1f90b3ac98df6f4585a329528e6bd850462))
+* extract resolve rollup options ([#20375](https://github.com/vitejs/rolldown-vite/issues/20375)) ([61a9778](https://github.com/vitejs/rolldown-vite/commit/61a97780e6c54adb87345cb8c1f5f0d8e9ca5c05))
+* rewrite openchrome.applescript to JXA ([#20424](https://github.com/vitejs/rolldown-vite/issues/20424)) ([7979f9d](https://github.com/vitejs/rolldown-vite/commit/7979f9da555aa16bd221b32ea78ce8cb5292fac4))
+* use `http-proxy-3` ([#20402](https://github.com/vitejs/rolldown-vite/issues/20402)) ([26d9872](https://github.com/vitejs/rolldown-vite/commit/26d987232aad389733a7635b92122bb1d78dfcad))
+* use hook filters in internal plugins ([#20358](https://github.com/vitejs/rolldown-vite/issues/20358)) ([f19c4d7](https://github.com/vitejs/rolldown-vite/commit/f19c4d72de142814994e30120aa4ad57552cb874))
+* use hook filters in internal resolve plugin ([#20480](https://github.com/vitejs/rolldown-vite/issues/20480)) ([acd2a13](https://github.com/vitejs/rolldown-vite/commit/acd2a13c2d80e8c5c721bcf9738dfc03346cbfe1))
+
+## [7.0.12](https://github.com/vitejs/rolldown-vite/compare/v7.0.11...v7.0.12) (2025-07-30)
+### Features
+
+* bump rolldown ([#344](https://github.com/vitejs/rolldown-vite/issues/344)) ([56f94c7](https://github.com/vitejs/rolldown-vite/commit/56f94c7c1c1a23188f3ac41925b3bd7e52240c2d))
+* **native-plugin:** output warn / debug logs from resolver ([#343](https://github.com/vitejs/rolldown-vite/issues/343)) ([2ea6194](https://github.com/vitejs/rolldown-vite/commit/2ea61943c4a1934d3268ef5c42655a98c54b7130))
+
+### Bug Fixes
+
+* reset viteMetadata in watch mode ([#342](https://github.com/vitejs/rolldown-vite/issues/342)) ([e2bb54e](https://github.com/vitejs/rolldown-vite/commit/e2bb54e794947c45e2a438c2df187e953ac5916c))
+
+### Miscellaneous Chores
+
+* update rolldown-plugin-dts ([2c4159e](https://github.com/vitejs/rolldown-vite/commit/2c4159e516d63fd8f180b507fc2c561fbb3ee52e))
+
+## [7.0.11](https://github.com/vitejs/rolldown-vite/compare/v7.0.10...v7.0.11) (2025-07-25)
+### Features
+
+* **native-plugin:** inject css and assets for native manifest plugin ([#335](https://github.com/vitejs/rolldown-vite/issues/335)) ([f16e598](https://github.com/vitejs/rolldown-vite/commit/f16e598e0ed6a5316cb8a5f8f3b47acd68c1ef4d))
+
+### Bug Fixes
+
+* **deps:** update all non-major dependencies ([#20442](https://github.com/vitejs/rolldown-vite/issues/20442)) ([e49f505](https://github.com/vitejs/rolldown-vite/commit/e49f50599d852eec644e79b074b4648e2dff1e5d))
+* **dev:** incorrect sourcemap when optimized CJS is imported ([#20458](https://github.com/vitejs/rolldown-vite/issues/20458)) ([ead2dec](https://github.com/vitejs/rolldown-vite/commit/ead2dec74170ad26db8a18bbd68f075efaceb0e3))
+* **lib:** keep annotation comments for es output ([#337](https://github.com/vitejs/rolldown-vite/issues/337)) ([c252dee](https://github.com/vitejs/rolldown-vite/commit/c252dee98a0195a13d83b3fd51f8ac3f15c85e32))
+* **module-runner:** normalize file:// on windows ([#20449](https://github.com/vitejs/rolldown-vite/issues/20449)) ([1c9cb49](https://github.com/vitejs/rolldown-vite/commit/1c9cb493f0467c463113d301b00ce07cbe4b6f58))
+* respond with correct headers and status code for HEAD requests ([#20421](https://github.com/vitejs/rolldown-vite/issues/20421)) ([23d04fc](https://github.com/vitejs/rolldown-vite/commit/23d04fc2d8a4fcf7c2011418693d6000748aa655))
+* **worker:** match worker import meta more quickly ([#336](https://github.com/vitejs/rolldown-vite/issues/336)) ([8cab72c](https://github.com/vitejs/rolldown-vite/commit/8cab72c3dac6ac3203c0b90c4b47673b88100071))
+
+### Miscellaneous Chores
+
+* **deps:** update rolldown-related dependencies ([#20441](https://github.com/vitejs/rolldown-vite/issues/20441)) ([f689d61](https://github.com/vitejs/rolldown-vite/commit/f689d613429ae9452c74f8bc482d8cc2584ea6b8))
+* remove some files from prettier ignore ([#20459](https://github.com/vitejs/rolldown-vite/issues/20459)) ([8403f69](https://github.com/vitejs/rolldown-vite/commit/8403f69551131b5c39bfaf242ffac2e5efcd1dd6))
+
+## [7.0.10](https://github.com/vitejs/rolldown-vite/compare/v7.0.9...v7.0.10) (2025-07-22)
+### Features
+
+* update rolldown ([2bbf424](https://github.com/vitejs/rolldown-vite/commit/2bbf424be20ff7f234b23af1b17bf6b3de5b01ed))
+* warn when `esbuild: false` is set but `oxc: false` is not set ([24c0417](https://github.com/vitejs/rolldown-vite/commit/24c04177c3df865349734ca8c665458a5699da8f))
-## [7.0.5](https://github.com/vitejs/vite/compare/v7.0.4...v7.0.5) (2025-07-17)
### Bug Fixes
-* **deps:** update all non-major dependencies ([#20406](https://github.com/vitejs/vite/issues/20406)) ([1a1cc8a](https://github.com/vitejs/vite/commit/1a1cc8a435a21996255b3e5cc75ed4680de2a7f3))
-* remove special handling for `Accept: text/html` ([#20376](https://github.com/vitejs/vite/issues/20376)) ([c9614b9](https://github.com/vitejs/vite/commit/c9614b9c378be4a32e84f37be71a8becce52af7b))
-* watch assets referenced by `new URL(, import.meta.url)` ([#20382](https://github.com/vitejs/vite/issues/20382)) ([6bc8bf6](https://github.com/vitejs/vite/commit/6bc8bf634d4a2c9915da9813963dd80a4186daeb))
+* **deps:** update all non-major dependencies ([#20406](https://github.com/vitejs/rolldown-vite/issues/20406)) ([1a1cc8a](https://github.com/vitejs/rolldown-vite/commit/1a1cc8a435a21996255b3e5cc75ed4680de2a7f3))
+* remove special handling for `Accept: text/html` ([#20376](https://github.com/vitejs/rolldown-vite/issues/20376)) ([c9614b9](https://github.com/vitejs/rolldown-vite/commit/c9614b9c378be4a32e84f37be71a8becce52af7b))
+* watch assets referenced by `new URL(, import.meta.url)` ([#20382](https://github.com/vitejs/rolldown-vite/issues/20382)) ([6bc8bf6](https://github.com/vitejs/rolldown-vite/commit/6bc8bf634d4a2c9915da9813963dd80a4186daeb))
### Miscellaneous Chores
-* **deps:** update dependency rolldown to ^1.0.0-beta.27 ([#20405](https://github.com/vitejs/vite/issues/20405)) ([1165667](https://github.com/vitejs/vite/commit/1165667b271fb1fb76584278e72a85d564c9bb09))
+* **deps:** update dependency rolldown to ^1.0.0-beta.27 ([#20405](https://github.com/vitejs/rolldown-vite/issues/20405)) ([1165667](https://github.com/vitejs/rolldown-vite/commit/1165667b271fb1fb76584278e72a85d564c9bb09))
### Code Refactoring
-* use `foo.endsWith("bar")` instead of `/bar$/.test(foo)` ([#20413](https://github.com/vitejs/vite/issues/20413)) ([862e192](https://github.com/vitejs/vite/commit/862e192d21f66039635a998724bdc6b94fd293a0))
+* use `foo.endsWith("bar")` instead of `/bar$/.test(foo)` ([#20413](https://github.com/vitejs/rolldown-vite/issues/20413)) ([862e192](https://github.com/vitejs/rolldown-vite/commit/862e192d21f66039635a998724bdc6b94fd293a0))
+* use environment transform request ([#20430](https://github.com/vitejs/rolldown-vite/issues/20430)) ([24e6a0c](https://github.com/vitejs/rolldown-vite/commit/24e6a0c3165557396db6ab59d3001e037c76ce32))
+
+## [7.0.9](https://github.com/vitejs/rolldown-vite/compare/v7.0.8...v7.0.9) (2025-07-14)
+### Features
+
+* update rolldown ([722cbf8](https://github.com/vitejs/rolldown-vite/commit/722cbf82a1603040bfeb7830eb4ee59f528f908c))
+
+### Miscellaneous Chores
+
+* update some "rollup" -> "rolldown" ([ce60f95](https://github.com/vitejs/rolldown-vite/commit/ce60f955e14966f9276d68683fe76bfee4a911ec))
+
+## [7.0.8](https://github.com/vitejs/rolldown-vite/compare/v7.0.7...v7.0.8) (2025-07-11)
+### Features
+
+* update rolldown ([98ca5e3](https://github.com/vitejs/rolldown-vite/commit/98ca5e3cbd97718e05d53c617069db35378ce83e))
+
+### Bug Fixes
+
+* allow resolving bare specifiers to relative paths for entries ([#20379](https://github.com/vitejs/rolldown-vite/issues/20379)) ([324669c](https://github.com/vitejs/rolldown-vite/commit/324669c2d84966a822b1b2c134c9830a90bed271))
+
+## [7.0.7](https://github.com/vitejs/rolldown-vite/compare/v7.0.6...v7.0.7) (2025-07-10)
+### Features
+
+* enable `output.minifyInternalExports` by default ([#322](https://github.com/vitejs/rolldown-vite/issues/322)) ([287a36e](https://github.com/vitejs/rolldown-vite/commit/287a36e85a6ea5076e78de8170ed524ee24dca10))
+* update rolldown ([949076c](https://github.com/vitejs/rolldown-vite/commit/949076c086c3edd8728bfcf4e464d34c8685cdda))
-## [7.0.4](https://github.com/vitejs/vite/compare/v7.0.3...v7.0.4) (2025-07-10)
### Bug Fixes
-* allow resolving bare specifiers to relative paths for entries ([#20379](https://github.com/vitejs/vite/issues/20379)) ([324669c](https://github.com/vitejs/vite/commit/324669c2d84966a822b1b2c134c9830a90bed271))
+* disable refresh for non-jsx without react import ([#318](https://github.com/vitejs/rolldown-vite/issues/318)) ([de24b6b](https://github.com/vitejs/rolldown-vite/commit/de24b6bd8c3c5825ae72d3b8a7d95212245837b3))
+
+### Code Refactoring
+
+* use Rolldown's `@oxc-project/runtime` ([#321](https://github.com/vitejs/rolldown-vite/issues/321)) ([d352c1b](https://github.com/vitejs/rolldown-vite/commit/d352c1b5153056c4ff1b85ba5a4690763ae8158a))
### Build System
-* remove `@oxc-project/runtime` devDep ([#20389](https://github.com/vitejs/vite/issues/20389)) ([5e29602](https://github.com/vitejs/vite/commit/5e29602f6fe4bf28f6e7c869a214dee6957f855c))
+* remove `@oxc-project/runtime` devDep ([#20389](https://github.com/vitejs/rolldown-vite/issues/20389)) ([5e29602](https://github.com/vitejs/rolldown-vite/commit/5e29602f6fe4bf28f6e7c869a214dee6957f855c))
+
+## [7.0.6](https://github.com/vitejs/rolldown-vite/compare/v7.0.5...v7.0.6) (2025-07-08)
+### Features
+
+* enable `treeshake.commonjs` by default ([#313](https://github.com/vitejs/rolldown-vite/issues/313)) ([d1efdd0](https://github.com/vitejs/rolldown-vite/commit/d1efdd02340661f031afc3f5953d95f03503f573))
+* enable decorator-metadata transform automatically ([#315](https://github.com/vitejs/rolldown-vite/issues/315)) ([36a8ca4](https://github.com/vitejs/rolldown-vite/commit/36a8ca464e3f46f338080fd3ceac026b48008343))
-## [7.0.3](https://github.com/vitejs/vite/compare/v7.0.2...v7.0.3) (2025-07-08)
### Bug Fixes
-* **client:** protect against window being defined but addEv undefined ([#20359](https://github.com/vitejs/vite/issues/20359)) ([31d1467](https://github.com/vitejs/vite/commit/31d1467cf0da1e1dca623e6df0d345b30fae0c3d))
-* **define:** replace optional values ([#20338](https://github.com/vitejs/vite/issues/20338)) ([9465ae1](https://github.com/vitejs/vite/commit/9465ae1378b456e08659a22286bee6bce8edeedc))
-* **deps:** update all non-major dependencies ([#20366](https://github.com/vitejs/vite/issues/20366)) ([43ac73d](https://github.com/vitejs/vite/commit/43ac73da27b3907c701e95e6a7d28fde659729ec))
+* **client:** protect against window being defined but addEv undefined ([#20359](https://github.com/vitejs/rolldown-vite/issues/20359)) ([31d1467](https://github.com/vitejs/rolldown-vite/commit/31d1467cf0da1e1dca623e6df0d345b30fae0c3d))
+* **define:** replace optional values ([#20338](https://github.com/vitejs/rolldown-vite/issues/20338)) ([9465ae1](https://github.com/vitejs/rolldown-vite/commit/9465ae1378b456e08659a22286bee6bce8edeedc))
+* **deps:** update all non-major dependencies ([#20366](https://github.com/vitejs/rolldown-vite/issues/20366)) ([43ac73d](https://github.com/vitejs/rolldown-vite/commit/43ac73da27b3907c701e95e6a7d28fde659729ec))
+* **legacy:** fix remaining issues ([#312](https://github.com/vitejs/rolldown-vite/issues/312)) ([5d7dc73](https://github.com/vitejs/rolldown-vite/commit/5d7dc73cdbed9a7daae2390b4372be724e220372))
### Miscellaneous Chores
-* **deps:** update dependency dotenv to v17 ([#20325](https://github.com/vitejs/vite/issues/20325)) ([45040d4](https://github.com/vitejs/vite/commit/45040d48076302eeb101f8d07bbcd04758fde8a4))
-* **deps:** update dependency rolldown to ^1.0.0-beta.24 ([#20365](https://github.com/vitejs/vite/issues/20365)) ([5ab25e7](https://github.com/vitejs/vite/commit/5ab25e73a2ea2a2e2c0469350288a183dfb57030))
-* use `n/prefer-node-protocol` rule ([#20368](https://github.com/vitejs/vite/issues/20368)) ([38bb268](https://github.com/vitejs/vite/commit/38bb268cde15541321f36016e77d61eecb707298))
+* **deps:** update dependency dotenv to v17 ([#20325](https://github.com/vitejs/rolldown-vite/issues/20325)) ([45040d4](https://github.com/vitejs/rolldown-vite/commit/45040d48076302eeb101f8d07bbcd04758fde8a4))
+* **deps:** update dependency rolldown to ^1.0.0-beta.24 ([#20365](https://github.com/vitejs/rolldown-vite/issues/20365)) ([5ab25e7](https://github.com/vitejs/rolldown-vite/commit/5ab25e73a2ea2a2e2c0469350288a183dfb57030))
+* use `n/prefer-node-protocol` rule ([#20368](https://github.com/vitejs/rolldown-vite/issues/20368)) ([38bb268](https://github.com/vitejs/rolldown-vite/commit/38bb268cde15541321f36016e77d61eecb707298))
### Code Refactoring
-* minor changes to reduce diff between normal Vite and rolldown-vite ([#20354](https://github.com/vitejs/vite/issues/20354)) ([2e8050e](https://github.com/vitejs/vite/commit/2e8050e4cd8835673baf07375b7db35128144222))
+* minor changes to reduce diff between normal Vite and rolldown-vite ([#20354](https://github.com/vitejs/rolldown-vite/issues/20354)) ([2e8050e](https://github.com/vitejs/rolldown-vite/commit/2e8050e4cd8835673baf07375b7db35128144222))
+
+## [7.0.5](https://github.com/vitejs/rolldown-vite/compare/v7.0.4...v7.0.5) (2025-07-07)
+### Features
+
+* make oxc runtime helpers name mangle-able ([#306](https://github.com/vitejs/rolldown-vite/issues/306)) ([d9627ee](https://github.com/vitejs/rolldown-vite/commit/d9627ee1f2f048e1c51cb70c3d69c848de07b5f5))
+* plugin legacy ([#293](https://github.com/vitejs/rolldown-vite/issues/293)) ([e1ef2e5](https://github.com/vitejs/rolldown-vite/commit/e1ef2e58068a1185e1af10d076a7bb4b5514f21b))
+* update rolldown and support custom configs for native dynamic import vars plugin ([#310](https://github.com/vitejs/rolldown-vite/issues/310)) ([3f07670](https://github.com/vitejs/rolldown-vite/commit/3f076704917b468bbc87083d5bd562828330af06))
-## [7.0.2](https://github.com/vitejs/vite/compare/v7.0.1...v7.0.2) (2025-07-04)
### Bug Fixes
-* **css:** resolve relative paths in sass, revert [#20300](https://github.com/vitejs/vite/issues/20300) ([#20349](https://github.com/vitejs/vite/issues/20349)) ([db8bd41](https://github.com/vitejs/vite/commit/db8bd412a8b783fe8e9f82d1a822b0534abbf5a3))
+* accept umd with only default export ([#305](https://github.com/vitejs/rolldown-vite/issues/305)) ([12f8197](https://github.com/vitejs/rolldown-vite/commit/12f81973e359a707e75bc5cf70a2e1c0132d1ce7))
+* correct "Unexpected IIFE format" shown for UMD output ([139d016](https://github.com/vitejs/rolldown-vite/commit/139d016b6750e938e4b2923d677975556eb34c87))
+* **css:** resolve relative paths in sass, revert [#20300](https://github.com/vitejs/rolldown-vite/issues/20300) ([#20349](https://github.com/vitejs/rolldown-vite/issues/20349)) ([db8bd41](https://github.com/vitejs/rolldown-vite/commit/db8bd412a8b783fe8e9f82d1a822b0534abbf5a3))
+* inject oxc runtime helpers correctly when multiple helpers are required ([#311](https://github.com/vitejs/rolldown-vite/issues/311)) ([6c5f468](https://github.com/vitejs/rolldown-vite/commit/6c5f46863c625e2ee7508cd02acd5de37c64be70))
+
+### Miscellaneous Chores
+
+* fix typos and grammatical errors across documentation and comments ([#20337](https://github.com/vitejs/rolldown-vite/issues/20337)) ([c1c951d](https://github.com/vitejs/rolldown-vite/commit/c1c951dcc32ec9f133b03ebbceddd749fc14f1e9))
+* group commits by category in changelog ([#20310](https://github.com/vitejs/rolldown-vite/issues/20310)) ([41e83f6](https://github.com/vitejs/rolldown-vite/commit/41e83f62b1adb65f5af4c1ec006de1c845437edc))
+* reduce diff ([a657265](https://github.com/vitejs/rolldown-vite/commit/a6572654bea3942e3bbc5eca3fd35f7cbbb773f0))
+
+## [7.0.4](https://github.com/vitejs/rolldown-vite/compare/v7.0.3...v7.0.4) (2025-07-02)
+### Features
+
+* **native-plugin:** avoid presetting `process.env.NODE_ENV` when platform is `browser` ([#290](https://github.com/vitejs/rolldown-vite/issues/290)) ([6058493](https://github.com/vitejs/rolldown-vite/commit/605849358d50400d70aa0e3c8e64f42d80f8fe59))
+* **native-plugin:** pass `decodedBase` to `nativeWasmHelperPlugin` ([#300](https://github.com/vitejs/rolldown-vite/issues/300)) ([2d7ce9a](https://github.com/vitejs/rolldown-vite/commit/2d7ce9a18585536da9d3835584da557d86a68153))
+* **native-plugin:** use js define plugin in dev environment ([#298](https://github.com/vitejs/rolldown-vite/issues/298)) ([c45adb3](https://github.com/vitejs/rolldown-vite/commit/c45adb3fa0b0c53756a6910e0073409d2dec6bf5))
+* update rolldown and support `resolveSubpathImports` for `oxcResolvePlugin` ([#287](https://github.com/vitejs/rolldown-vite/issues/287)) ([5c0dddb](https://github.com/vitejs/rolldown-vite/commit/5c0dddbf30db0edc2e9017a3ab4973ba0938c544))
-## [7.0.1](https://github.com/vitejs/vite/compare/v7.0.0...v7.0.1) (2025-07-03)
### Bug Fixes
-* **css:** skip resolving resolved paths in sass ([#20300](https://github.com/vitejs/vite/issues/20300)) ([ac528a4](https://github.com/vitejs/vite/commit/ac528a44c384fefb6f10c3f531df93b5ac39324c))
-* **deps:** update all non-major dependencies ([#20324](https://github.com/vitejs/vite/issues/20324)) ([3e81af3](https://github.com/vitejs/vite/commit/3e81af38a80c7617aba6bf3300d8b4267570f9cf))
-* **types:** add a global interface for Worker ([#20243](https://github.com/vitejs/vite/issues/20243)) ([37bdfc1](https://github.com/vitejs/vite/commit/37bdfc18f4c5bed053a38c5d717df33036acdd62))
+* **deps:** update all non-major dependencies ([#20324](https://github.com/vitejs/rolldown-vite/issues/20324)) ([3e81af3](https://github.com/vitejs/rolldown-vite/commit/3e81af38a80c7617aba6bf3300d8b4267570f9cf))
### Miscellaneous Chores
-* **deps:** update rolldown-related dependencies ([#20323](https://github.com/vitejs/vite/issues/20323)) ([30d2f1b](https://github.com/vitejs/vite/commit/30d2f1b38c72387ffdca3ee4746730959a020b59))
-* fix typos and grammatical errors across documentation and comments ([#20337](https://github.com/vitejs/vite/issues/20337)) ([c1c951d](https://github.com/vitejs/vite/commit/c1c951dcc32ec9f133b03ebbceddd749fc14f1e9))
-* group commits by category in changelog ([#20310](https://github.com/vitejs/vite/issues/20310)) ([41e83f6](https://github.com/vitejs/vite/commit/41e83f62b1adb65f5af4c1ec006de1c845437edc))
-* rearrange 7.0 changelog ([#20280](https://github.com/vitejs/vite/issues/20280)) ([eafd28a](https://github.com/vitejs/vite/commit/eafd28ac88d5908cbc3e0a047ed7a12094386436))
+* **deps:** update rolldown-related dependencies ([#20323](https://github.com/vitejs/rolldown-vite/issues/20323)) ([30d2f1b](https://github.com/vitejs/rolldown-vite/commit/30d2f1b38c72387ffdca3ee4746730959a020b59))
-## [7.0.0](https://github.com/vitejs/vite/compare/v7.0.0-beta.2...v7.0.0) (2025-06-24)
+## [7.0.3](https://github.com/vitejs/rolldown-vite/compare/v7.0.2...v7.0.3) (2025-06-27)
+### Features
-
+* add `resolve.tsconfigPaths` option to resolve with tsconfig paths ([#277](https://github.com/vitejs/rolldown-vite/issues/277)) ([5f3ce8b](https://github.com/vitejs/rolldown-vite/commit/5f3ce8b142a76d912ee5fd617ebb3492058c2fc3))
+* update rolldown ([d499b50](https://github.com/vitejs/rolldown-vite/commit/d499b505114d31586c5e885ac5e210a31e17e641))
-Today, we're excited to announce the release of the next Vite major:
+### Bug Fixes
-- **[Vite 7.0 announcement blog post](https://vite.dev/blog/announcing-vite7.html)**
-- [Docs](https://vite.dev/) (translations: [简体中文](https://cn.vite.dev/), [日本語](https://ja.vite.dev/), [Español](https://es.vite.dev/), [Português](https://pt.vite.dev/), [한국어](https://ko.vite.dev/), [Deutsch](https://de.vite.dev/), [فارسی](https://fa.vite.dev/))
-- [Migration Guide](https://vite.dev/guide/migration.html)
+* **css:** skip resolving resolved paths in sass ([#20300](https://github.com/vitejs/rolldown-vite/issues/20300)) ([ac528a4](https://github.com/vitejs/rolldown-vite/commit/ac528a44c384fefb6f10c3f531df93b5ac39324c))
+* **types:** add a global interface for Worker ([#20243](https://github.com/vitejs/rolldown-vite/issues/20243)) ([37bdfc1](https://github.com/vitejs/rolldown-vite/commit/37bdfc18f4c5bed053a38c5d717df33036acdd62))
+
+## [7.0.2](https://github.com/vitejs/rolldown-vite/compare/v7.0.1...v7.0.2) (2025-06-26)
+### Features
+
+* update rolldown ([0100764](https://github.com/vitejs/rolldown-vite/commit/01007646e4be4c483d13889f93ed86b06e305d22))
+
+## [7.0.1](https://github.com/vitejs/rolldown-vite/compare/v7.0.0...v7.0.1) (2025-06-25)
+### Features
+
+* update rolldown ([#279](https://github.com/vitejs/rolldown-vite/issues/279)) ([0b5708b](https://github.com/vitejs/rolldown-vite/commit/0b5708bde2f675bee2f28dc5616083c3b47da4f3))
+
+## [7.0.0](https://github.com/vitejs/rolldown-vite/compare/v7.0.0-beta.0...v7.0.0) (2025-06-24)
+### Features
+
+* apply some middlewares before `configurePreviewServer` hook ([#20224](https://github.com/vitejs/rolldown-vite/issues/20224)) ([b989c42](https://github.com/vitejs/rolldown-vite/commit/b989c42cf84378e6cb93970de739941f0d56d6f6))
+* apply some middlewares before `configureServer` hook ([#20222](https://github.com/vitejs/rolldown-vite/issues/20222)) ([f5cc4c0](https://github.com/vitejs/rolldown-vite/commit/f5cc4c0ded337670b439e51bc95f173e2b5cf9ad))
+* **native-plugin:** fallback to js alias plugin when alias entries include `customResolver` ([#280](https://github.com/vitejs/rolldown-vite/issues/280)) ([de9074c](https://github.com/vitejs/rolldown-vite/commit/de9074c5299fccd6e37bd0d47c623ea654d66036))
+* **types:** use terser types from terser package ([#20274](https://github.com/vitejs/rolldown-vite/issues/20274)) ([a5799fa](https://github.com/vitejs/rolldown-vite/commit/a5799fa74c6190ecbb2da3d280136ff32463afc6))
+
+### Bug Fixes
+
+* **deps:** update all non-major dependencies ([#20271](https://github.com/vitejs/rolldown-vite/issues/20271)) ([6b64d63](https://github.com/vitejs/rolldown-vite/commit/6b64d63d700154de2c00270300b671cef8863708))
+* keep `import.meta.url` in bundled Vite ([#20235](https://github.com/vitejs/rolldown-vite/issues/20235)) ([3bf3a8a](https://github.com/vitejs/rolldown-vite/commit/3bf3a8ab00e5a0dfab0bb5741cb871ea30b72651))
+* **module-runner:** export `ssrExportNameKey` ([#20266](https://github.com/vitejs/rolldown-vite/issues/20266)) ([ac302a7](https://github.com/vitejs/rolldown-vite/commit/ac302a729062dbfc67f762b3c4af46b7893c214f))
+* **module-runner:** expose `normalizeModuleId` ([#20277](https://github.com/vitejs/rolldown-vite/issues/20277)) ([9b98dcb](https://github.com/vitejs/rolldown-vite/commit/9b98dcbf75546240e1609185828e18a77bac8c8d))
+
+### Performance Improvements
+
+* **utils:** improve performance of `numberToPos` ([#20244](https://github.com/vitejs/rolldown-vite/issues/20244)) ([3f46901](https://github.com/vitejs/rolldown-vite/commit/3f469012ad38e3cb330adc74a8b3ec88561c822e))
+
+### Miscellaneous Chores
+
+* "indentity" → "identity" in test description ([#20225](https://github.com/vitejs/rolldown-vite/issues/20225)) ([ea9aed7](https://github.com/vitejs/rolldown-vite/commit/ea9aed7ebcb7f4be542bd2a384cbcb5a1e7b31bd))
+* **deps:** update rolldown-related dependencies ([#20270](https://github.com/vitejs/rolldown-vite/issues/20270)) ([f7377c3](https://github.com/vitejs/rolldown-vite/commit/f7377c3eae6323bd3237ff5de5ae55c879fe7325))
+* typos in comments ([#20259](https://github.com/vitejs/rolldown-vite/issues/20259)) ([b135918](https://github.com/vitejs/rolldown-vite/commit/b135918b91e8381c50bd2d076d40e9a65fe68bfe))
+
+## [7.0.0-beta.0](https://github.com/vitejs/rolldown-vite/compare/v7.0.0-alpha.0...v7.0.0-beta.0) (2025-06-19)
+### Features
+* update rolldown ([b292707](https://github.com/vitejs/rolldown-vite/commit/b2927076a747ca0777c90b72929aa82e7ccb15cf))
+
+### Bug Fixes
+
+* **css:** set moduleType in css-post plugin ([#272](https://github.com/vitejs/rolldown-vite/issues/272)) ([8638a59](https://github.com/vitejs/rolldown-vite/commit/8638a59de12cfcd7c675e9f1867f0e5851e004b9))
+* **json:** require(json) should return the content ([#268](https://github.com/vitejs/rolldown-vite/issues/268)) ([bdd4d29](https://github.com/vitejs/rolldown-vite/commit/bdd4d297f3e6f1ed3cc02a26d66146a6eedab62b))
+* resolve oxc runtime from Vite directory correctly ([#269](https://github.com/vitejs/rolldown-vite/issues/269)) ([d6369f3](https://github.com/vitejs/rolldown-vite/commit/d6369f30b3ac908350db375e43bf32a7c3f29d1c))
+
+## [7.0.0-alpha.0](https://github.com/vitejs/rolldown-vite/compare/v6.3.21...v7.0.0-alpha.0) (2025-06-18)
### ⚠ BREAKING CHANGES
* **ssr:** don't access `Object` variable in ssr transformed code (#19996)
@@ -308,276 +559,556 @@ Today, we're excited to announce the release of the next Vite major:
### Features
-* **types:** use terser types from terser package ([#20274](https://github.com/vitejs/vite/issues/20274)) ([a5799fa](https://github.com/vitejs/vite/commit/a5799fa74c6190ecbb2da3d280136ff32463afc6))
-* apply some middlewares before `configurePreviewServer` hook ([#20224](https://github.com/vitejs/vite/issues/20224)) ([b989c42](https://github.com/vitejs/vite/commit/b989c42cf84378e6cb93970de739941f0d56d6f6))
-* apply some middlewares before `configureServer` hook ([#20222](https://github.com/vitejs/vite/issues/20222)) ([f5cc4c0](https://github.com/vitejs/vite/commit/f5cc4c0ded337670b439e51bc95f173e2b5cf9ad))
-* add base option to import.meta.glob ([#20163](https://github.com/vitejs/vite/issues/20163)) ([253d6c6](https://github.com/vitejs/vite/commit/253d6c6df2ebe3c4a88dabb6cec000128681561f))
-* add `this.meta.viteVersion` ([#20088](https://github.com/vitejs/vite/issues/20088)) ([f55bf41](https://github.com/vitejs/vite/commit/f55bf41e91f8dfe829a46e58f0035b19c8ab6a25))
-* allow passing down resolved config to vite's `createServer` ([#19894](https://github.com/vitejs/vite/issues/19894)) ([c1ae9bd](https://github.com/vitejs/vite/commit/c1ae9bd4a0542b4703ae7766ad61d072e8b833bd))
-* buildApp hook ([#19971](https://github.com/vitejs/vite/issues/19971)) ([5da659d](https://github.com/vitejs/vite/commit/5da659de902f0a2d6d8beefbf269128383b63887))
-* **build:** provide names for asset entrypoints ([#19912](https://github.com/vitejs/vite/issues/19912)) ([c4e01dc](https://github.com/vitejs/vite/commit/c4e01dc5ab0f1708383c39d28ce62e12b8f374fc))
-* bump `build.target` and name it `baseline-widely-available` ([#20007](https://github.com/vitejs/vite/issues/20007)) ([4a8aa82](https://github.com/vitejs/vite/commit/4a8aa82556eb2b9e54673a6aac77873e0eb27fa9))
-* **client:** support opening fileURL in editor ([#20040](https://github.com/vitejs/vite/issues/20040)) ([1bde4d2](https://github.com/vitejs/vite/commit/1bde4d25243cd9beaadb01413e896fef562626ef))
-* make PluginContext available for Vite-specific hooks ([#19936](https://github.com/vitejs/vite/issues/19936)) ([7063839](https://github.com/vitejs/vite/commit/7063839d47dfd4ac6be1247ba68e414ffe287b00))
-* resolve environments plugins at config time ([#20120](https://github.com/vitejs/vite/issues/20120)) ([f6a28d5](https://github.com/vitejs/vite/commit/f6a28d5f792ba5cc4dc236e3e6edd05199cabcc8))
-* stabilize `css.preprocessorMaxWorkers` and default to `true` ([#19992](https://github.com/vitejs/vite/issues/19992)) ([70aee13](https://github.com/vitejs/vite/commit/70aee139ea802478bad56e5e441f187140bcf0cc))
-* stabilize `optimizeDeps.noDiscovery` ([#19984](https://github.com/vitejs/vite/issues/19984)) ([6d2dcb4](https://github.com/vitejs/vite/commit/6d2dcb494db9f40565f11b50bdbb8c1b7245697d))
-
-### Bug Fixes
-
-* **deps:** update all non-major dependencies ([#20271](https://github.com/vitejs/vite/issues/20271)) ([6b64d63](https://github.com/vitejs/vite/commit/6b64d63d700154de2c00270300b671cef8863708))
-* keep `import.meta.url` in bundled Vite ([#20235](https://github.com/vitejs/vite/issues/20235)) ([3bf3a8a](https://github.com/vitejs/vite/commit/3bf3a8ab00e5a0dfab0bb5741cb871ea30b72651))
-* **module-runner:** export `ssrExportNameKey` ([#20266](https://github.com/vitejs/vite/issues/20266)) ([ac302a7](https://github.com/vitejs/vite/commit/ac302a729062dbfc67f762b3c4af46b7893c214f))
-* **module-runner:** expose `normalizeModuleId` ([#20277](https://github.com/vitejs/vite/issues/20277)) ([9b98dcb](https://github.com/vitejs/vite/commit/9b98dcbf75546240e1609185828e18a77bac8c8d))
-* **deps:** update all non-major dependencies ([#20181](https://github.com/vitejs/vite/issues/20181)) ([d91d4f7](https://github.com/vitejs/vite/commit/d91d4f7ad55edbcb4a51fc23376cbff89f776d30))
-* **deps:** update all non-major dependencies ([#20212](https://github.com/vitejs/vite/issues/20212)) ([a80339b](https://github.com/vitejs/vite/commit/a80339b1798607dd7389f42964272181cf9eb453))
-* align dynamic import detection ([#20115](https://github.com/vitejs/vite/issues/20115)) ([1ea2222](https://github.com/vitejs/vite/commit/1ea2222302f128c4000289683480d8311ea34223))
-* applyToEnvironment after configResolved ([#20170](https://github.com/vitejs/vite/issues/20170)) ([a330b80](https://github.com/vitejs/vite/commit/a330b805b0733fadd1f7d586218c2aafcbb41a7f))
-* **deps:** update all non-major dependencies ([#20141](https://github.com/vitejs/vite/issues/20141)) ([89ca65b](https://github.com/vitejs/vite/commit/89ca65ba1d849046dccdea52e9eca980f331be26))
-* handle dynamic import with `.then(m => m.a)` ([#20117](https://github.com/vitejs/vite/issues/20117)) ([7b7410a](https://github.com/vitejs/vite/commit/7b7410abab7c95880d943e46bd1a16dcb1a893fc))
-* **hmr:** use monotonicDateNow for timestamp ([#20158](https://github.com/vitejs/vite/issues/20158)) ([8d26785](https://github.com/vitejs/vite/commit/8d26785b8c3f5295ca0c1519dda1ddae9096fc73))
-* **optimizer:** align relative `build.rollupOptions.input` resolution with rollup ([#20080](https://github.com/vitejs/vite/issues/20080)) ([9759c29](https://github.com/vitejs/vite/commit/9759c29a8985da1a51de452d741850f0bf2ef7ef))
-* **ssr:** don't access `Object` variable in ssr transformed code ([#19996](https://github.com/vitejs/vite/issues/19996)) ([fceff60](https://github.com/vitejs/vite/commit/fceff60dc81730f7768b57f14e7a112facff387d))
-* **types:** prefer sass-embedded types over sass types for `preprocessorOptions.sass` (fix [#20150](https://github.com/vitejs/vite/issues/20150)) ([#20166](https://github.com/vitejs/vite/issues/20166)) ([7db56be](https://github.com/vitejs/vite/commit/7db56be237dd1e1e875518475421d5c90cf950da))
-* virtual svg module ([#20144](https://github.com/vitejs/vite/issues/20144)) ([7dfcb31](https://github.com/vitejs/vite/commit/7dfcb316ee64aca0a98a1d2905deb1dfd113ae6d))
-* **client:** render the last part of the stacktrace ([#20039](https://github.com/vitejs/vite/issues/20039)) ([c7c1743](https://github.com/vitejs/vite/commit/c7c17434968848f1471179c10a5fc9d2804add8b))
-* **cli:** make `cleanGlobalCLIOptions()` clean `--force` ([#19999](https://github.com/vitejs/vite/issues/19999)) ([d4a171a](https://github.com/vitejs/vite/commit/d4a171afd387000789172a94c94a1c33c0856f85))
-* **css:** remove alias exclude logic from rebaseUrl ([#20100](https://github.com/vitejs/vite/issues/20100)) ([44c6d01](https://github.com/vitejs/vite/commit/44c6d0111f95c8aa44d6a09a768e8cf02232ed29))
-* **css:** sass rebase url in relative imported modules ([#20067](https://github.com/vitejs/vite/issues/20067)) ([261fad9](https://github.com/vitejs/vite/commit/261fad9b8e6380c84b8692b3fbe18d6f37d367bd))
-* **css:** should not wrap with double quote when the url rebase feature bailed out ([#20068](https://github.com/vitejs/vite/issues/20068)) ([a33d0c7](https://github.com/vitejs/vite/commit/a33d0c7d65d9fff9acd5de0cf3c4d371297b3990))
-* **deps:** update all non-major dependencies ([#19953](https://github.com/vitejs/vite/issues/19953)) ([ac8e1fb](https://github.com/vitejs/vite/commit/ac8e1fb289a06fc0671dab1f4ef68e508e34360e))
-* **deps:** update all non-major dependencies ([#20061](https://github.com/vitejs/vite/issues/20061)) ([7b58856](https://github.com/vitejs/vite/commit/7b588563636a6f735a6e25832f33fc08572b25d9))
-* importing an optional peer dep should throw an runtime error ([#20029](https://github.com/vitejs/vite/issues/20029)) ([d0221cd](https://github.com/vitejs/vite/commit/d0221cd7383c18d67a5ef594da52e6aa5fc4d87b))
-* merge `environments.*.resolve.noExternal` properly ([#20077](https://github.com/vitejs/vite/issues/20077)) ([daf4a25](https://github.com/vitejs/vite/commit/daf4a25a1c0a37c992606e6ae159e13190c2e101))
-* merge `server.allowedHosts: true` correctly ([#20138](https://github.com/vitejs/vite/issues/20138)) ([2ade756](https://github.com/vitejs/vite/commit/2ade756c9549a52d804797d45da37c8429a51fd3))
-* **optimizer:** non object module.exports for Node builtin modules in CJS external facade ([#20048](https://github.com/vitejs/vite/issues/20048)) ([00ac6e4](https://github.com/vitejs/vite/commit/00ac6e410eeb15719fe020fd497f0336e7fd1aa8))
-* **optimizer:** show error when `computeEntries` failed ([#20079](https://github.com/vitejs/vite/issues/20079)) ([b742b46](https://github.com/vitejs/vite/commit/b742b46f8308a71c1d2aa426eade0c50cbf1480f))
-* treat all `optimizeDeps.entries` values as globs ([#20045](https://github.com/vitejs/vite/issues/20045)) ([1422395](https://github.com/vitejs/vite/commit/142239588d6752c5b91d435aee9b4a6c00b7f924))
-* **types:** expose additional PluginContext types ([#20129](https://github.com/vitejs/vite/issues/20129)) ([b6df9aa](https://github.com/vitejs/vite/commit/b6df9aac3320cd953f6d45ad9245a7b564f67cc1))
+* add `this.meta.viteVersion` ([#20088](https://github.com/vitejs/rolldown-vite/issues/20088)) ([f55bf41](https://github.com/vitejs/rolldown-vite/commit/f55bf41e91f8dfe829a46e58f0035b19c8ab6a25))
+* add base option to import.meta.glob ([#20163](https://github.com/vitejs/rolldown-vite/issues/20163)) ([253d6c6](https://github.com/vitejs/rolldown-vite/commit/253d6c6df2ebe3c4a88dabb6cec000128681561f))
+* allow passing down resolved config to vite's `createServer` ([#19894](https://github.com/vitejs/rolldown-vite/issues/19894)) ([c1ae9bd](https://github.com/vitejs/rolldown-vite/commit/c1ae9bd4a0542b4703ae7766ad61d072e8b833bd))
+* buildApp hook ([#19971](https://github.com/vitejs/rolldown-vite/issues/19971)) ([5da659d](https://github.com/vitejs/rolldown-vite/commit/5da659de902f0a2d6d8beefbf269128383b63887))
+* **build:** provide names for asset entrypoints ([#19912](https://github.com/vitejs/rolldown-vite/issues/19912)) ([c4e01dc](https://github.com/vitejs/rolldown-vite/commit/c4e01dc5ab0f1708383c39d28ce62e12b8f374fc))
+* bump `build.target` and name it `baseline-widely-available` ([#20007](https://github.com/vitejs/rolldown-vite/issues/20007)) ([4a8aa82](https://github.com/vitejs/rolldown-vite/commit/4a8aa82556eb2b9e54673a6aac77873e0eb27fa9))
+* **client:** support opening fileURL in editor ([#20040](https://github.com/vitejs/rolldown-vite/issues/20040)) ([1bde4d2](https://github.com/vitejs/rolldown-vite/commit/1bde4d25243cd9beaadb01413e896fef562626ef))
+* make PluginContext available for Vite-specific hooks ([#19936](https://github.com/vitejs/rolldown-vite/issues/19936)) ([7063839](https://github.com/vitejs/rolldown-vite/commit/7063839d47dfd4ac6be1247ba68e414ffe287b00))
+* resolve environments plugins at config time ([#20120](https://github.com/vitejs/rolldown-vite/issues/20120)) ([f6a28d5](https://github.com/vitejs/rolldown-vite/commit/f6a28d5f792ba5cc4dc236e3e6edd05199cabcc8))
+* stabilize `css.preprocessorMaxWorkers` and default to `true` ([#19992](https://github.com/vitejs/rolldown-vite/issues/19992)) ([70aee13](https://github.com/vitejs/rolldown-vite/commit/70aee139ea802478bad56e5e441f187140bcf0cc))
+* stabilize `optimizeDeps.noDiscovery` ([#19984](https://github.com/vitejs/rolldown-vite/issues/19984)) ([6d2dcb4](https://github.com/vitejs/rolldown-vite/commit/6d2dcb494db9f40565f11b50bdbb8c1b7245697d))
+* update rolldown ([6f8287b](https://github.com/vitejs/rolldown-vite/commit/6f8287bcf7c27854f7cb653ff6697baf98fd5cb8))
+
+### Bug Fixes
+
+* align dynamic import detection ([#20115](https://github.com/vitejs/rolldown-vite/issues/20115)) ([1ea2222](https://github.com/vitejs/rolldown-vite/commit/1ea2222302f128c4000289683480d8311ea34223))
+* applyToEnvironment after configResolved ([#20170](https://github.com/vitejs/rolldown-vite/issues/20170)) ([a330b80](https://github.com/vitejs/rolldown-vite/commit/a330b805b0733fadd1f7d586218c2aafcbb41a7f))
+* **css:** remove alias exclude logic from rebaseUrl ([#20100](https://github.com/vitejs/rolldown-vite/issues/20100)) ([44c6d01](https://github.com/vitejs/rolldown-vite/commit/44c6d0111f95c8aa44d6a09a768e8cf02232ed29))
+* **css:** sass rebase url in relative imported modules ([#20067](https://github.com/vitejs/rolldown-vite/issues/20067)) ([261fad9](https://github.com/vitejs/rolldown-vite/commit/261fad9b8e6380c84b8692b3fbe18d6f37d367bd))
+* **css:** should not wrap with double quote when the url rebase feature bailed out ([#20068](https://github.com/vitejs/rolldown-vite/issues/20068)) ([a33d0c7](https://github.com/vitejs/rolldown-vite/commit/a33d0c7d65d9fff9acd5de0cf3c4d371297b3990))
+* **deps:** update all non-major dependencies ([#20061](https://github.com/vitejs/rolldown-vite/issues/20061)) ([7b58856](https://github.com/vitejs/rolldown-vite/commit/7b588563636a6f735a6e25832f33fc08572b25d9))
+* **deps:** update all non-major dependencies ([#20141](https://github.com/vitejs/rolldown-vite/issues/20141)) ([89ca65b](https://github.com/vitejs/rolldown-vite/commit/89ca65ba1d849046dccdea52e9eca980f331be26))
+* **deps:** update all non-major dependencies ([#20181](https://github.com/vitejs/rolldown-vite/issues/20181)) ([d91d4f7](https://github.com/vitejs/rolldown-vite/commit/d91d4f7ad55edbcb4a51fc23376cbff89f776d30))
+* **deps:** update all non-major dependencies ([#20212](https://github.com/vitejs/rolldown-vite/issues/20212)) ([a80339b](https://github.com/vitejs/rolldown-vite/commit/a80339b1798607dd7389f42964272181cf9eb453))
+* handle dynamic import with `.then(m => m.a)` ([#20117](https://github.com/vitejs/rolldown-vite/issues/20117)) ([7b7410a](https://github.com/vitejs/rolldown-vite/commit/7b7410abab7c95880d943e46bd1a16dcb1a893fc))
+* **hmr:** use monotonicDateNow for timestamp ([#20158](https://github.com/vitejs/rolldown-vite/issues/20158)) ([8d26785](https://github.com/vitejs/rolldown-vite/commit/8d26785b8c3f5295ca0c1519dda1ddae9096fc73))
+* importing an optional peer dep should throw an runtime error ([#167](https://github.com/vitejs/rolldown-vite/issues/167)) ([b53667a](https://github.com/vitejs/rolldown-vite/commit/b53667a64168c2a68a06458aceabae5ae5cf74bd))
+* importing an optional peer dep should throw an runtime error ([#20029](https://github.com/vitejs/rolldown-vite/issues/20029)) ([d0221cd](https://github.com/vitejs/rolldown-vite/commit/d0221cd7383c18d67a5ef594da52e6aa5fc4d87b))
+* merge `environments.*.resolve.noExternal` properly ([#20077](https://github.com/vitejs/rolldown-vite/issues/20077)) ([daf4a25](https://github.com/vitejs/rolldown-vite/commit/daf4a25a1c0a37c992606e6ae159e13190c2e101))
+* merge `server.allowedHosts: true` correctly ([#20138](https://github.com/vitejs/rolldown-vite/issues/20138)) ([2ade756](https://github.com/vitejs/rolldown-vite/commit/2ade756c9549a52d804797d45da37c8429a51fd3))
+* merge conflict mistake ([bf77840](https://github.com/vitejs/rolldown-vite/commit/bf77840122a3e2e49efc3c47795eccbbffb6d368))
+* merge conflict mistake ([b77bcfe](https://github.com/vitejs/rolldown-vite/commit/b77bcfea3d00284c43556ee0d9fa87ba1a8f44b3))
+* **native-plugin:** run optimizer correctly ([#265](https://github.com/vitejs/rolldown-vite/issues/265)) ([2588f03](https://github.com/vitejs/rolldown-vite/commit/2588f03df771368821eb995bc6c087fcdd3a2f31))
+* **optimizer:** align relative `build.rollupOptions.input` resolution with rollup ([#20080](https://github.com/vitejs/rolldown-vite/issues/20080)) ([9759c29](https://github.com/vitejs/rolldown-vite/commit/9759c29a8985da1a51de452d741850f0bf2ef7ef))
+* **optimizer:** non object module.exports for Node builtin modules in CJS external facade ([#20048](https://github.com/vitejs/rolldown-vite/issues/20048)) ([00ac6e4](https://github.com/vitejs/rolldown-vite/commit/00ac6e410eeb15719fe020fd497f0336e7fd1aa8))
+* **optimizer:** show error when `computeEntries` failed ([#20079](https://github.com/vitejs/rolldown-vite/issues/20079)) ([b742b46](https://github.com/vitejs/rolldown-vite/commit/b742b46f8308a71c1d2aa426eade0c50cbf1480f))
+* set viteMetadata for `writeBundle` hook ([#263](https://github.com/vitejs/rolldown-vite/issues/263)) ([973087f](https://github.com/vitejs/rolldown-vite/commit/973087f600402abb3a6fc0d9a13e7f36189d2907))
+* **ssr:** don't access `Object` variable in ssr transformed code ([#19996](https://github.com/vitejs/rolldown-vite/issues/19996)) ([fceff60](https://github.com/vitejs/rolldown-vite/commit/fceff60dc81730f7768b57f14e7a112facff387d))
+* treat all `optimizeDeps.entries` values as globs ([#20045](https://github.com/vitejs/rolldown-vite/issues/20045)) ([1422395](https://github.com/vitejs/rolldown-vite/commit/142239588d6752c5b91d435aee9b4a6c00b7f924))
+* **types:** expose additional PluginContext types ([#20129](https://github.com/vitejs/rolldown-vite/issues/20129)) ([b6df9aa](https://github.com/vitejs/rolldown-vite/commit/b6df9aac3320cd953f6d45ad9245a7b564f67cc1))
+* **types:** prefer sass-embedded types over sass types for `preprocessorOptions.sass` (fix [#20150](https://github.com/vitejs/rolldown-vite/issues/20150)) ([#20166](https://github.com/vitejs/rolldown-vite/issues/20166)) ([7db56be](https://github.com/vitejs/rolldown-vite/commit/7db56be237dd1e1e875518475421d5c90cf950da))
+* virtual svg module ([#20144](https://github.com/vitejs/rolldown-vite/issues/20144)) ([7dfcb31](https://github.com/vitejs/rolldown-vite/commit/7dfcb316ee64aca0a98a1d2905deb1dfd113ae6d))
### Performance Improvements
-* **utils:** improve performance of `numberToPos` ([#20244](https://github.com/vitejs/vite/issues/20244)) ([3f46901](https://github.com/vitejs/vite/commit/3f469012ad38e3cb330adc74a8b3ec88561c822e))
+* set filter for import analysis build plugin ([#266](https://github.com/vitejs/rolldown-vite/issues/266)) ([e418d5e](https://github.com/vitejs/rolldown-vite/commit/e418d5ec450e77553b9815bf94a6e24dbde87240))
### Documentation
-* tiny typo ([#20110](https://github.com/vitejs/vite/issues/20110)) ([d20fc2c](https://github.com/vitejs/vite/commit/d20fc2cdc9700513425b18b625e01224f61e4eab))
+* tiny typo ([#20110](https://github.com/vitejs/rolldown-vite/issues/20110)) ([d20fc2c](https://github.com/vitejs/rolldown-vite/commit/d20fc2cdc9700513425b18b625e01224f61e4eab))
### Miscellaneous Chores
-* "indentity" → "identity" in test description ([#20225](https://github.com/vitejs/vite/issues/20225)) ([ea9aed7](https://github.com/vitejs/vite/commit/ea9aed7ebcb7f4be542bd2a384cbcb5a1e7b31bd))
-* **deps:** update rolldown-related dependencies ([#20270](https://github.com/vitejs/vite/issues/20270)) ([f7377c3](https://github.com/vitejs/vite/commit/f7377c3eae6323bd3237ff5de5ae55c879fe7325))
-* typos in comments ([#20259](https://github.com/vitejs/vite/issues/20259)) ([b135918](https://github.com/vitejs/vite/commit/b135918b91e8381c50bd2d076d40e9a65fe68bfe))
-* **deps:** update rolldown-related dependencies ([#20182](https://github.com/vitejs/vite/issues/20182)) ([6172f41](https://github.com/vitejs/vite/commit/6172f410b44cbae8d052997bb1819a6197a4d397))
-* **deps:** update rolldown-related dependencies ([#20211](https://github.com/vitejs/vite/issues/20211)) ([b13b7f5](https://github.com/vitejs/vite/commit/b13b7f5e21fe05c3214766b3de584a026fbfe144))
-* add a way to disable source maps when developing Vite ([#20168](https://github.com/vitejs/vite/issues/20168)) ([3a30c0a](https://github.com/vitejs/vite/commit/3a30c0a084a1b92a6265f8900df89e5102418e5e))
-* **deps:** update rolldown-related dependencies ([#20140](https://github.com/vitejs/vite/issues/20140)) ([0387447](https://github.com/vitejs/vite/commit/03874471e3de14e7d2f474ecb354499e7f5eb418))
-* fix source map support when developing Vite ([#20167](https://github.com/vitejs/vite/issues/20167)) ([279ab0d](https://github.com/vitejs/vite/commit/279ab0dc954c5e986810b78efa7fe898945f8f21))
-* use destructuring alias in buildEnvironment function ([#19472](https://github.com/vitejs/vite/issues/19472)) ([501572a](https://github.com/vitejs/vite/commit/501572a9a3e1e22ab7e19afb5b13d3f54da67c37))
-* declare version range for peer dependencies ([#19979](https://github.com/vitejs/vite/issues/19979)) ([c9bfd57](https://github.com/vitejs/vite/commit/c9bfd578f4c56314c6c6d6f34e49fe494ae11072))
-* deprecate `ResolvedConfig.createResolver` and recommend `createIdResolver` ([#20031](https://github.com/vitejs/vite/issues/20031)) ([d101d64](https://github.com/vitejs/vite/commit/d101d64722f82ed681b833bfd3fb394eeb496e21))
-* fix comment for `devEnvironmentOptions.moduleRunnerTransform` ([#20035](https://github.com/vitejs/vite/issues/20035)) ([338081d](https://github.com/vitejs/vite/commit/338081df9649f68484416d199113fc67abbb6cd5))
-* generate dts internally by rolldown-plugin-dts ([#20093](https://github.com/vitejs/vite/issues/20093)) ([a66afa3](https://github.com/vitejs/vite/commit/a66afa33bd92e2be6ee1d52b8fffa49da266adab))
-* remove deprecated splitVendorChunkPlugin ([#19255](https://github.com/vitejs/vite/issues/19255)) ([91a92c7](https://github.com/vitejs/vite/commit/91a92c7e1eaf55cd5d5cfa49c546e130045e7dee))
-* remove node 18 support ([#19972](https://github.com/vitejs/vite/issues/19972)) ([00b8a98](https://github.com/vitejs/vite/commit/00b8a98f36376804437e1342265453915ae613de))
-* remove redundant word in comment ([#20139](https://github.com/vitejs/vite/issues/20139)) ([9b2964d](https://github.com/vitejs/vite/commit/9b2964df79d31b17e6b387e7fc082753f8ee5774))
-* remove unused deps ([#20097](https://github.com/vitejs/vite/issues/20097)) ([d11ae6b](https://github.com/vitejs/vite/commit/d11ae6bca808407a9f0fb4f9c1cb8496a705c2d7))
-* rename rollup to rolldown where appropriate ([#20096](https://github.com/vitejs/vite/issues/20096)) ([306e250](https://github.com/vitejs/vite/commit/306e250a94e12584b4182db8ec531750b3d9e3ba))
-* speed up typechecking ([#20131](https://github.com/vitejs/vite/issues/20131)) ([a357c19](https://github.com/vitejs/vite/commit/a357c1987f332519d7bacafebc5620c7ab534d8f))
-* use plugin hooks filter for `patch-types` plugin for bundling vite ([#20089](https://github.com/vitejs/vite/issues/20089)) ([c127955](https://github.com/vitejs/vite/commit/c12795522fd95d3535100293f4cf53c53c3f301f))
-* use rolldown to bundle Vite itself ([#19925](https://github.com/vitejs/vite/issues/19925)) ([7753b02](https://github.com/vitejs/vite/commit/7753b028848d9e23bcea5f00565207f2d1de8291))
-* use rolldown-plugin-dts for dts bundling ([#19990](https://github.com/vitejs/vite/issues/19990)) ([449d7f3](https://github.com/vitejs/vite/commit/449d7f30a85ae70eb0037fdab0b1ebf2e4927a24))
+* add a way to disable source maps when developing Vite ([#20168](https://github.com/vitejs/rolldown-vite/issues/20168)) ([3a30c0a](https://github.com/vitejs/rolldown-vite/commit/3a30c0a084a1b92a6265f8900df89e5102418e5e))
+* declare version range for peer dependencies ([#19979](https://github.com/vitejs/rolldown-vite/issues/19979)) ([c9bfd57](https://github.com/vitejs/rolldown-vite/commit/c9bfd578f4c56314c6c6d6f34e49fe494ae11072))
+* **deps:** update rolldown-related dependencies ([#20140](https://github.com/vitejs/rolldown-vite/issues/20140)) ([0387447](https://github.com/vitejs/rolldown-vite/commit/03874471e3de14e7d2f474ecb354499e7f5eb418))
+* **deps:** update rolldown-related dependencies ([#20182](https://github.com/vitejs/rolldown-vite/issues/20182)) ([6172f41](https://github.com/vitejs/rolldown-vite/commit/6172f410b44cbae8d052997bb1819a6197a4d397))
+* **deps:** update rolldown-related dependencies ([#20211](https://github.com/vitejs/rolldown-vite/issues/20211)) ([b13b7f5](https://github.com/vitejs/rolldown-vite/commit/b13b7f5e21fe05c3214766b3de584a026fbfe144))
+* fix source map support when developing Vite ([#20167](https://github.com/vitejs/rolldown-vite/issues/20167)) ([279ab0d](https://github.com/vitejs/rolldown-vite/commit/279ab0dc954c5e986810b78efa7fe898945f8f21))
+* generate dts internally by rolldown-plugin-dts ([#20093](https://github.com/vitejs/rolldown-vite/issues/20093)) ([a66afa3](https://github.com/vitejs/rolldown-vite/commit/a66afa33bd92e2be6ee1d52b8fffa49da266adab))
+* remove deprecated splitVendorChunkPlugin ([#19255](https://github.com/vitejs/rolldown-vite/issues/19255)) ([91a92c7](https://github.com/vitejs/rolldown-vite/commit/91a92c7e1eaf55cd5d5cfa49c546e130045e7dee))
+* remove node 18 support ([#19972](https://github.com/vitejs/rolldown-vite/issues/19972)) ([00b8a98](https://github.com/vitejs/rolldown-vite/commit/00b8a98f36376804437e1342265453915ae613de))
+* remove redundant word in comment ([#20139](https://github.com/vitejs/rolldown-vite/issues/20139)) ([9b2964d](https://github.com/vitejs/rolldown-vite/commit/9b2964df79d31b17e6b387e7fc082753f8ee5774))
+* remove unused deps ([#20097](https://github.com/vitejs/rolldown-vite/issues/20097)) ([d11ae6b](https://github.com/vitejs/rolldown-vite/commit/d11ae6bca808407a9f0fb4f9c1cb8496a705c2d7))
+* rename rollup to rolldown where appropriate ([#20096](https://github.com/vitejs/rolldown-vite/issues/20096)) ([306e250](https://github.com/vitejs/rolldown-vite/commit/306e250a94e12584b4182db8ec531750b3d9e3ba))
+* speed up typechecking ([#20131](https://github.com/vitejs/rolldown-vite/issues/20131)) ([a357c19](https://github.com/vitejs/rolldown-vite/commit/a357c1987f332519d7bacafebc5620c7ab534d8f))
+* use destructuring alias in buildEnvironment function ([#19472](https://github.com/vitejs/rolldown-vite/issues/19472)) ([501572a](https://github.com/vitejs/rolldown-vite/commit/501572a9a3e1e22ab7e19afb5b13d3f54da67c37))
+* use plugin hooks filter for `patch-types` plugin for bundling vite ([#20089](https://github.com/vitejs/rolldown-vite/issues/20089)) ([c127955](https://github.com/vitejs/rolldown-vite/commit/c12795522fd95d3535100293f4cf53c53c3f301f))
+* use rolldown to bundle Vite itself ([#19925](https://github.com/vitejs/rolldown-vite/issues/19925)) ([7753b02](https://github.com/vitejs/rolldown-vite/commit/7753b028848d9e23bcea5f00565207f2d1de8291))
+* use rolldown-plugin-dts for dts bundling ([#19990](https://github.com/vitejs/rolldown-vite/issues/19990)) ([449d7f3](https://github.com/vitejs/rolldown-vite/commit/449d7f30a85ae70eb0037fdab0b1ebf2e4927a24))
### Code Refactoring
-* **worker:** set virtual file content in load hook ([#20160](https://github.com/vitejs/vite/issues/20160)) ([0d60667](https://github.com/vitejs/vite/commit/0d60667e03d91cc0d48dd2cdbd8154d94e0aba74))
-* bump required node version to 20.19+, 22.12+ and remove cjs build ([#20032](https://github.com/vitejs/vite/issues/20032)) ([2b80243](https://github.com/vitejs/vite/commit/2b80243fada75378e80475028fdcc78f4432bd6f))
-* **css:** always use sass compiler API ([#19978](https://github.com/vitejs/vite/issues/19978)) ([3bfe5c5](https://github.com/vitejs/vite/commit/3bfe5c5ff96af0a0624c8f14503ef87a0c0850ed))
-* **css:** remove sass legacy API support ([#19977](https://github.com/vitejs/vite/issues/19977)) ([6eaccc9](https://github.com/vitejs/vite/commit/6eaccc9009d718a1afcff2af587e81eb959f5b60))
-* merge `src/node/publicUtils.ts` to `src/node/index.ts` ([#20086](https://github.com/vitejs/vite/issues/20086)) ([999a1ed](https://github.com/vitejs/vite/commit/999a1ed8dff5117b2fd205c4e5384b6ac2ede80e))
-* remove `experimental.skipSsrTransform` option ([#20038](https://github.com/vitejs/vite/issues/20038)) ([6c3dd8e](https://github.com/vitejs/vite/commit/6c3dd8e46fa77060603679cda91a4c8d01d095ab))
-* remove `HotBroadcaster` ([#19988](https://github.com/vitejs/vite/issues/19988)) ([cda8c94](https://github.com/vitejs/vite/commit/cda8c947934466da27e874b6c064451cf73f03e5))
-* remove `options?.ssr` support in clientInjectionsPlugin ([#19589](https://github.com/vitejs/vite/issues/19589)) ([88e0076](https://github.com/vitejs/vite/commit/88e00765dbd3de4cb073c722dce3e8ef60c3a50e))
-* remove backward compat for calling internal plugins directly ([#20001](https://github.com/vitejs/vite/issues/20001)) ([9072a72](https://github.com/vitejs/vite/commit/9072a726731eccee32d38f04747fda8793ccc82a))
-* remove deprecated `HotBroadcaster` related types ([#19987](https://github.com/vitejs/vite/issues/19987)) ([86b5e00](https://github.com/vitejs/vite/commit/86b5e0030bf204f8f2db0cf8ee895ab3ecf154b8))
-* remove deprecated env api properties ([#19986](https://github.com/vitejs/vite/issues/19986)) ([52e5a1b](https://github.com/vitejs/vite/commit/52e5a1b32d0ce7604b633f001a352124e3ec623a))
-* remove deprecated hook-level `enforce`/`transform` from `transformIndexHtml` hook ([#19349](https://github.com/vitejs/vite/issues/19349)) ([6198b9d](https://github.com/vitejs/vite/commit/6198b9d2a32f7bd17b3332525a98c06d9a425fb1))
-* remove deprecated no-op type only properties ([#19985](https://github.com/vitejs/vite/issues/19985)) ([9151c24](https://github.com/vitejs/vite/commit/9151c2400f6ab494f73d78aea4435b7c1ef5fc30))
-* remove no-op `legacy.proxySsrExternalModules` ([#20013](https://github.com/vitejs/vite/issues/20013)) ([a37ac83](https://github.com/vitejs/vite/commit/a37ac836ac4da8e854d98c65450f12acb921aa98))
-* **ssr:** remove ssrTransform line offset preservation ([#19829](https://github.com/vitejs/vite/issues/19829)) ([61b6b96](https://github.com/vitejs/vite/commit/61b6b96b191c6071b9c574ad4c795f97f2646f18))
-* use `hostValidationMiddleware` ([#20019](https://github.com/vitejs/vite/issues/20019)) ([83bf90e](https://github.com/vitejs/vite/commit/83bf90edd5856ed6e27051e3e9a6032e02242b18))
-* use `mergeWithDefaults` for experimental option ([#20012](https://github.com/vitejs/vite/issues/20012)) ([98c5741](https://github.com/vitejs/vite/commit/98c57419426201596a962746436e5ad1aeef4eac))
-* use hook filters from rollup ([#19755](https://github.com/vitejs/vite/issues/19755)) ([0d18fc1](https://github.com/vitejs/vite/commit/0d18fc1dc65f5c8d855808f23754c0c4902f07d9))
+* bump required node version to 20.19+, 22.12+ and remove cjs build ([#20032](https://github.com/vitejs/rolldown-vite/issues/20032)) ([2b80243](https://github.com/vitejs/rolldown-vite/commit/2b80243fada75378e80475028fdcc78f4432bd6f))
+* **css:** always use sass compiler API ([#19978](https://github.com/vitejs/rolldown-vite/issues/19978)) ([3bfe5c5](https://github.com/vitejs/rolldown-vite/commit/3bfe5c5ff96af0a0624c8f14503ef87a0c0850ed))
+* **css:** remove sass legacy API support ([#19977](https://github.com/vitejs/rolldown-vite/issues/19977)) ([6eaccc9](https://github.com/vitejs/rolldown-vite/commit/6eaccc9009d718a1afcff2af587e81eb959f5b60))
+* merge `src/node/publicUtils.ts` to `src/node/index.ts` ([#20086](https://github.com/vitejs/rolldown-vite/issues/20086)) ([999a1ed](https://github.com/vitejs/rolldown-vite/commit/999a1ed8dff5117b2fd205c4e5384b6ac2ede80e))
+* remove `experimental.skipSsrTransform` option ([#20038](https://github.com/vitejs/rolldown-vite/issues/20038)) ([6c3dd8e](https://github.com/vitejs/rolldown-vite/commit/6c3dd8e46fa77060603679cda91a4c8d01d095ab))
+* remove `HotBroadcaster` ([#19988](https://github.com/vitejs/rolldown-vite/issues/19988)) ([cda8c94](https://github.com/vitejs/rolldown-vite/commit/cda8c947934466da27e874b6c064451cf73f03e5))
+* remove `options?.ssr` support in clientInjectionsPlugin ([#19589](https://github.com/vitejs/rolldown-vite/issues/19589)) ([88e0076](https://github.com/vitejs/rolldown-vite/commit/88e00765dbd3de4cb073c722dce3e8ef60c3a50e))
+* remove backward compat for calling internal plugins directly ([#20001](https://github.com/vitejs/rolldown-vite/issues/20001)) ([9072a72](https://github.com/vitejs/rolldown-vite/commit/9072a726731eccee32d38f04747fda8793ccc82a))
+* remove deprecated `HotBroadcaster` related types ([#19987](https://github.com/vitejs/rolldown-vite/issues/19987)) ([86b5e00](https://github.com/vitejs/rolldown-vite/commit/86b5e0030bf204f8f2db0cf8ee895ab3ecf154b8))
+* remove deprecated env api properties ([#19986](https://github.com/vitejs/rolldown-vite/issues/19986)) ([52e5a1b](https://github.com/vitejs/rolldown-vite/commit/52e5a1b32d0ce7604b633f001a352124e3ec623a))
+* remove deprecated hook-level `enforce`/`transform` from `transformIndexHtml` hook ([#19349](https://github.com/vitejs/rolldown-vite/issues/19349)) ([6198b9d](https://github.com/vitejs/rolldown-vite/commit/6198b9d2a32f7bd17b3332525a98c06d9a425fb1))
+* remove deprecated no-op type only properties ([#19985](https://github.com/vitejs/rolldown-vite/issues/19985)) ([9151c24](https://github.com/vitejs/rolldown-vite/commit/9151c2400f6ab494f73d78aea4435b7c1ef5fc30))
+* remove no-op `legacy.proxySsrExternalModules` ([#20013](https://github.com/vitejs/rolldown-vite/issues/20013)) ([a37ac83](https://github.com/vitejs/rolldown-vite/commit/a37ac836ac4da8e854d98c65450f12acb921aa98))
+* **ssr:** remove ssrTransform line offset preservation ([#19829](https://github.com/vitejs/rolldown-vite/issues/19829)) ([61b6b96](https://github.com/vitejs/rolldown-vite/commit/61b6b96b191c6071b9c574ad4c795f97f2646f18))
+* use `hostValidationMiddleware` ([#20019](https://github.com/vitejs/rolldown-vite/issues/20019)) ([83bf90e](https://github.com/vitejs/rolldown-vite/commit/83bf90edd5856ed6e27051e3e9a6032e02242b18))
+* use `mergeWithDefaults` for experimental option ([#20012](https://github.com/vitejs/rolldown-vite/issues/20012)) ([98c5741](https://github.com/vitejs/rolldown-vite/commit/98c57419426201596a962746436e5ad1aeef4eac))
+* use hook filters from rollup ([#19755](https://github.com/vitejs/rolldown-vite/issues/19755)) ([0d18fc1](https://github.com/vitejs/rolldown-vite/commit/0d18fc1dc65f5c8d855808f23754c0c4902f07d9))
+* **worker:** set virtual file content in load hook ([#20160](https://github.com/vitejs/rolldown-vite/issues/20160)) ([0d60667](https://github.com/vitejs/rolldown-vite/commit/0d60667e03d91cc0d48dd2cdbd8154d94e0aba74))
### Tests
-* correct esbuild `useDefineForClassFields` test ([#20143](https://github.com/vitejs/vite/issues/20143)) ([d90796e](https://github.com/vitejs/vite/commit/d90796ece7d30d1879d74c422628be30d1c90a7f))
-* skip writing files in build hook filter test ([#20076](https://github.com/vitejs/vite/issues/20076)) ([bf8b07d](https://github.com/vitejs/vite/commit/bf8b07da3e64dc4de446a9b24a33d5822a7736b9))
+* correct esbuild `useDefineForClassFields` test ([#20143](https://github.com/vitejs/rolldown-vite/issues/20143)) ([d90796e](https://github.com/vitejs/rolldown-vite/commit/d90796ece7d30d1879d74c422628be30d1c90a7f))
+* skip writing files in build hook filter test ([#20076](https://github.com/vitejs/rolldown-vite/issues/20076)) ([bf8b07d](https://github.com/vitejs/rolldown-vite/commit/bf8b07da3e64dc4de446a9b24a33d5822a7736b9))
### Continuous Integration
-* run tests on Node 24 as well ([#20049](https://github.com/vitejs/vite/issues/20049)) ([1fe07d3](https://github.com/vitejs/vite/commit/1fe07d3716012992dd7b2e78d8380add0b606a97))
+* run tests on Node 24 as well ([#20049](https://github.com/vitejs/rolldown-vite/issues/20049)) ([1fe07d3](https://github.com/vitejs/rolldown-vite/commit/1fe07d3716012992dd7b2e78d8380add0b606a97))
-### Beta Changelogs
+## [6.3.21](https://github.com/vitejs/rolldown-vite/compare/v6.3.20...v6.3.21) (2025-06-16)
+### Bug Fixes
+
+* make `viteMetadata` and `modules` enumerable ([#261](https://github.com/vitejs/rolldown-vite/issues/261)) ([f44607f](https://github.com/vitejs/rolldown-vite/commit/f44607f39a172bfef8bc313e2d0ebeee2af3adc2))
+* set `viteMetadata` for return value of `build` function ([#262](https://github.com/vitejs/rolldown-vite/issues/262)) ([3a86721](https://github.com/vitejs/rolldown-vite/commit/3a86721a44d376c9755bac839b195b188a4b9325))
+
+## [6.3.20](https://github.com/vitejs/rolldown-vite/compare/v6.3.19...v6.3.20) (2025-06-16)
+### Features
+
+* **native-plugin:** use js modulepreload polyfill plugin in dev environment ([#237](https://github.com/vitejs/rolldown-vite/issues/237)) ([d86c3bd](https://github.com/vitejs/rolldown-vite/commit/d86c3bd849615900d193bde165f184a7e0da798a))
+* update rolldown ([#259](https://github.com/vitejs/rolldown-vite/issues/259)) ([a4a60e9](https://github.com/vitejs/rolldown-vite/commit/a4a60e928e9998de7ab9d67494ce801a2ecf5b77))
+
+## [6.3.19](https://github.com/vitejs/rolldown-vite/compare/v6.3.18...v6.3.19) (2025-06-12)
+### Features
+
+* enable preserveEntrySignatures ([#253](https://github.com/vitejs/rolldown-vite/issues/253)) ([e625289](https://github.com/vitejs/rolldown-vite/commit/e625289629ef3b416377adec63846dc7b6105392))
+* **native-plugin:** use js alias plugin in dev environment ([#231](https://github.com/vitejs/rolldown-vite/issues/231)) ([bf84ccb](https://github.com/vitejs/rolldown-vite/commit/bf84ccb4c78b1dea9842d6c3e975284c4052ede2))
+* **native-plugin:** use js dynamic import vars plugin in dev environment ([#233](https://github.com/vitejs/rolldown-vite/issues/233)) ([f6d1dd5](https://github.com/vitejs/rolldown-vite/commit/f6d1dd526054c20cd499576f29d4d25f45cd38e4))
+* **native-plugin:** use js import glob plugin in dev environment ([#234](https://github.com/vitejs/rolldown-vite/issues/234)) ([a56245e](https://github.com/vitejs/rolldown-vite/commit/a56245e8150cf8d1fe43e1a0ba83a8fc34763e06))
+* **native-plugin:** use js oxc transform plugin in dev environment ([#238](https://github.com/vitejs/rolldown-vite/issues/238)) ([7246509](https://github.com/vitejs/rolldown-vite/commit/72465094edea4f9ad4db0cdd6529d1495f88ff78))
+* **native-plugin:** use js wasm helper in dev environment ([#245](https://github.com/vitejs/rolldown-vite/issues/245)) ([94c97b7](https://github.com/vitejs/rolldown-vite/commit/94c97b7feb5ad4574e5f21a4df19cf1fcee7ada6))
+* **native-plugin:** use js web worker post in dev environment ([#244](https://github.com/vitejs/rolldown-vite/issues/244)) ([420eb32](https://github.com/vitejs/rolldown-vite/commit/420eb32536350a3ace02a51ec6590fe1bca9bf19))
+* update rolldown ([849e744](https://github.com/vitejs/rolldown-vite/commit/849e744f49914ce87031da6585a65316af169adc))
+* update rolldown ([#247](https://github.com/vitejs/rolldown-vite/issues/247)) ([52e2490](https://github.com/vitejs/rolldown-vite/commit/52e24901d155515b3f30cfb877391e9851bb5497))
+* update rolldown ([#252](https://github.com/vitejs/rolldown-vite/issues/252)) ([5d2bba3](https://github.com/vitejs/rolldown-vite/commit/5d2bba33d45b65ab3264f1551a4b36b31b336b4a))
+
+### Bug Fixes
+
+* accept umd without exports ([#240](https://github.com/vitejs/rolldown-vite/issues/240)) ([85f2db0](https://github.com/vitejs/rolldown-vite/commit/85f2db0fa0f4da87985e28dc5578ea8403aabb89))
+
+### Performance Improvements
+
+* always use native plugin for load fallback plugin ([#236](https://github.com/vitejs/rolldown-vite/issues/236)) ([031c41a](https://github.com/vitejs/rolldown-vite/commit/031c41aaaeb9d2557bdc4fbae9517626a024ecf6))
+
+### Code Refactoring
+
+* move the condition related to `enableNativePlugin` to the plugin file side ([#239](https://github.com/vitejs/rolldown-vite/issues/239)) ([a4d8319](https://github.com/vitejs/rolldown-vite/commit/a4d8319ca7df7fff3cc60e6a6b7629acaf873766))
+
+## [6.3.18](https://github.com/vitejs/rolldown-vite/compare/v6.3.17...v6.3.18) (2025-06-06)
+### Features
+
+* update rolldown ([#227](https://github.com/vitejs/rolldown-vite/issues/227)) ([b63345a](https://github.com/vitejs/rolldown-vite/commit/b63345a294c3ec34100e5a22fb43c873d49d028a))
+
+### Tests
+
+* `onTestFinished` instead of `afterEach` for file restoration ([#221](https://github.com/vitejs/rolldown-vite/issues/221)) ([82d9315](https://github.com/vitejs/rolldown-vite/commit/82d9315ddff75df8c1dadd2ab2c7b7c0073ea256))
+
+## [6.3.17](https://github.com/vitejs/rolldown-vite/compare/v6.3.16...v6.3.17) (2025-06-04)
+### Features
+
+* append plugin name to logs ([#205](https://github.com/vitejs/rolldown-vite/issues/205)) ([a6ea3f8](https://github.com/vitejs/rolldown-vite/commit/a6ea3f8f508fdd0f32783c904d8b008cfc2e8ab6))
+* update rolldown ([69d1350](https://github.com/vitejs/rolldown-vite/commit/69d1350086037010a9f5014b323092c77dc6c894))
+
+### Miscellaneous Chores
+
+* tweak `optimizeDeps.esbuildOptions` deprecate message ([#209](https://github.com/vitejs/rolldown-vite/issues/209)) ([6133c97](https://github.com/vitejs/rolldown-vite/commit/6133c97567fb5e3e6affeef928348c87801fc87d))
+* typo in `optimizeDeps.esbuildOptions` deprecated message ([ee1a884](https://github.com/vitejs/rolldown-vite/commit/ee1a88430fd128fd134b57cd09eed507bf7e42f2))
+
+### Tests
+
+* add oxc plugin unit tests ([ab57b3f](https://github.com/vitejs/rolldown-vite/commit/ab57b3fb6fc4ac17da8fe848d047ddd548e80733))
+* correct esbuild `useDefineForClassFields` test ([#206](https://github.com/vitejs/rolldown-vite/issues/206)) ([1e7760e](https://github.com/vitejs/rolldown-vite/commit/1e7760eb78e2f980411461d24fe2d780965b4054))
+
+## [6.3.16](https://github.com/vitejs/rolldown-vite/compare/v6.3.15...v6.3.16) (2025-06-02)
+### Features
+
+* update rolldown ([fdd972b](https://github.com/vitejs/rolldown-vite/commit/fdd972b86edaafbd541bab1c886bb9283a4dbb87))
+
+## [6.3.15](https://github.com/vitejs/rolldown-vite/compare/v6.3.14...v6.3.15) (2025-06-01)
+### Features
+
+* update rolldown ([c024b3d](https://github.com/vitejs/rolldown-vite/commit/c024b3dda7193ad981e57dfc9522860b898e609a))
+
+## [6.3.14](https://github.com/vitejs/rolldown-vite/compare/v6.3.13...v6.3.14) (2025-05-29)
+### Features
+
+* update rolldown ([bbd4728](https://github.com/vitejs/rolldown-vite/commit/bbd472850bc595bc9785c5c21e2727c727c6fa7d))
+
+### Bug Fixes
+
+* **worker:** import.meta should be replaced ([c22ffbc](https://github.com/vitejs/rolldown-vite/commit/c22ffbca79cb4a12012ccf5939355f9318d2408d))
+
+## [6.3.13](https://github.com/vitejs/rolldown-vite/compare/v6.3.12...v6.3.13) (2025-05-28)
+### Features
+
+* **native-plugin:** support `import.meta.env.*` for native define plugin ([#188](https://github.com/vitejs/rolldown-vite/issues/188)) ([8557f7a](https://github.com/vitejs/rolldown-vite/commit/8557f7ad030ff6b2b8661e0f07664451d8debee8))
+* update rolldown ([#190](https://github.com/vitejs/rolldown-vite/issues/190)) ([3e8a826](https://github.com/vitejs/rolldown-vite/commit/3e8a82654db81e97300231cb29584c37894ffc1e))
+
+### Bug Fixes
+
+* **native-plugin:** run output generation hooks of buildImportAnalysisPlugin ([#187](https://github.com/vitejs/rolldown-vite/issues/187)) ([52af0fc](https://github.com/vitejs/rolldown-vite/commit/52af0fcefd10475e13c5c2536dfada3561c5542d))
+
+## [6.3.12](https://github.com/vitejs/rolldown-vite/compare/v6.3.11...v6.3.12) (2025-05-21)
+### Features
+
+* moduleType support in dev ([#172](https://github.com/vitejs/rolldown-vite/issues/172)) ([707778e](https://github.com/vitejs/rolldown-vite/commit/707778e60230bbe71a6ef5debcbdceae4e497840))
+* **native-plugin:** support native `webWorkerPostPlugin` ([#183](https://github.com/vitejs/rolldown-vite/issues/183)) ([f222910](https://github.com/vitejs/rolldown-vite/commit/f2229102dbed0e2843f028d86190b9a080d924c5))
+* update rolldown ([7016327](https://github.com/vitejs/rolldown-vite/commit/7016327de2c7f9c3bf8f3603d36ecf2f91110820))
+
+### Bug Fixes
+
+* **css:** inject CSS correctly when `cssCodesplit: true` and IIFE/UMD ([#181](https://github.com/vitejs/rolldown-vite/issues/181)) ([a31c182](https://github.com/vitejs/rolldown-vite/commit/a31c1828e9bd542a6dee20cfda6e41bf565ebc7f))
+
+## [6.3.11](https://github.com/vitejs/rolldown-vite/compare/v6.3.10...v6.3.11) (2025-05-19)
+### Features
+
+* **types:** allow rollup plugin to be assigned to `plugins` option ([#176](https://github.com/vitejs/rolldown-vite/issues/176)) ([cfc8de8](https://github.com/vitejs/rolldown-vite/commit/cfc8de851ad8fcc411eecb203cf47095c734ceb5))
+* update rolldown ([ddf15a0](https://github.com/vitejs/rolldown-vite/commit/ddf15a0a0eb103774a51bdd1084814658684fd8a))
+
+### Bug Fixes
+
+* apply filter for css-post plugin and json plugin ([b04fee7](https://github.com/vitejs/rolldown-vite/commit/b04fee7c6828134799e17481efed0e7915120814))
+* **native-plugin:** align native reporter plugin with non-native one ([#178](https://github.com/vitejs/rolldown-vite/issues/178)) ([d9c01ec](https://github.com/vitejs/rolldown-vite/commit/d9c01ec5daa1941880ccb13dcda4b80908908d28))
+* use correct self-reference import ([#180](https://github.com/vitejs/rolldown-vite/issues/180)) ([7f1c1dd](https://github.com/vitejs/rolldown-vite/commit/7f1c1dd04ab9c2814aac649029920bf830b8ad65))
+* use filter property set on functions ([9f56a22](https://github.com/vitejs/rolldown-vite/commit/9f56a22cd6423669350e35cbbacd3ca4a0002394))
+
+### Code Refactoring
+
+* **native-plugin:** rename nativeReporterPlugin ([12e9189](https://github.com/vitejs/rolldown-vite/commit/12e918960a28e3b76c1158387ee3543be317a6a2))
+
+## [6.3.10](https://github.com/vitejs/rolldown-vite/compare/v6.3.9...v6.3.10) (2025-05-16)
+### Features
+
+* update rolldown ([cb2e308](https://github.com/vitejs/rolldown-vite/commit/cb2e30845988e0d8089f181bf58c65a2079d0ee2))
+
+### Bug Fixes
+
+* **client:** render the last part of the stacktrace ([#20039](https://github.com/vitejs/rolldown-vite/issues/20039)) ([c7c1743](https://github.com/vitejs/rolldown-vite/commit/c7c17434968848f1471179c10a5fc9d2804add8b))
+* **deps:** update all non-major dependencies ([#19953](https://github.com/vitejs/rolldown-vite/issues/19953)) ([ac8e1fb](https://github.com/vitejs/rolldown-vite/commit/ac8e1fb289a06fc0671dab1f4ef68e508e34360e))
+* **optimizer:** pass define option to optimizer ([#170](https://github.com/vitejs/rolldown-vite/issues/170)) ([b642f48](https://github.com/vitejs/rolldown-vite/commit/b642f483f1284b57e2a8d9ed368807b1335b0428))
+
+### Miscellaneous Chores
+* add deprecation warning for `transformWithEsbuild` ([#173](https://github.com/vitejs/rolldown-vite/issues/173)) ([1ee8ef4](https://github.com/vitejs/rolldown-vite/commit/1ee8ef468510df92cea71a1a61bc69dbeed9e03c))
+* deprecate `ResolvedConfig.createResolver` and recommend `createIdResolver` ([#20031](https://github.com/vitejs/rolldown-vite/issues/20031)) ([d101d64](https://github.com/vitejs/rolldown-vite/commit/d101d64722f82ed681b833bfd3fb394eeb496e21))
+* fix comment for `devEnvironmentOptions.moduleRunnerTransform` ([#20035](https://github.com/vitejs/rolldown-vite/issues/20035)) ([338081d](https://github.com/vitejs/rolldown-vite/commit/338081df9649f68484416d199113fc67abbb6cd5))
+* fix types ([1216e2f](https://github.com/vitejs/rolldown-vite/commit/1216e2fb4f7b2461c7c2178b754b58295e6ae3e5))
-#### [7.0.0-beta.2](https://github.com/vitejs/vite/compare/v7.0.0-beta.1...v7.0.0-beta.2) (2025-06-17)
+## [6.3.9](https://github.com/vitejs/rolldown-vite/compare/v6.3.8...v6.3.9) (2025-05-12)
+### Features
-See [7.0.0-beta.2 changelog](https://github.com/vitejs/vite/blob/v7.0.0-beta.2/packages/vite/CHANGELOG.md)
+* support `useDefineForClassFields=false` with `target>=es2022` ([9933779](https://github.com/vitejs/rolldown-vite/commit/99337793b2f348cb0ce724df23f9dcaabf31dfda))
+* update rolldown ([9ff4513](https://github.com/vitejs/rolldown-vite/commit/9ff4513e138524656791f1207a913d8745a700ab))
+### Bug Fixes
-#### [7.0.0-beta.1](https://github.com/vitejs/vite/compare/v7.0.0-beta.0...v7.0.0-beta.1) (2025-06-10)
+* **cli:** make `cleanGlobalCLIOptions()` clean `--force` ([#19999](https://github.com/vitejs/rolldown-vite/issues/19999)) ([d4a171a](https://github.com/vitejs/rolldown-vite/commit/d4a171afd387000789172a94c94a1c33c0856f85))
+* **optimizer:** suppress warnings for optimizer ([#160](https://github.com/vitejs/rolldown-vite/issues/160)) ([9615b13](https://github.com/vitejs/rolldown-vite/commit/9615b136a8c554b1f0d3308e5e0e352f7d69be62))
+
+### Code Refactoring
-See [7.0.0-beta.1 changelog](https://github.com/vitejs/vite/blob/v7.0.0-beta.1/packages/vite/CHANGELOG.md)
+* use util functions from `@rolldown/pluginutils` ([#166](https://github.com/vitejs/rolldown-vite/issues/166)) ([3903193](https://github.com/vitejs/rolldown-vite/commit/3903193cabbef0a0be89ae6e6884ff68faf53d37))
+### Continuous Integration
-#### [7.0.0-beta.0](https://github.com/vitejs/vite/compare/6.3.5...v7.0.0-beta.0) (2025-06-02)
+* run tests with native resolver ([#163](https://github.com/vitejs/rolldown-vite/issues/163)) ([284487e](https://github.com/vitejs/rolldown-vite/commit/284487e2370586342153548e446dce4aeda464e3))
-See [7.0.0-beta.0 changelog](https://github.com/vitejs/vite/blob/v7.0.0-beta.0/packages/vite/CHANGELOG.md)
+## [6.3.8](https://github.com/vitejs/rolldown-vite/compare/v6.3.7...v6.3.8) (2025-05-07)
+### Features
+* **types:** add `Rollup.RollupWatcherEvent` type ([#152](https://github.com/vitejs/rolldown-vite/issues/152)) ([1b31e92](https://github.com/vitejs/rolldown-vite/commit/1b31e92e263f7d8e2c6eb83ab3f9d412262d08c0))
+* update rolldown ([2fed74f](https://github.com/vitejs/rolldown-vite/commit/2fed74fbd4d2570126181d27e47710306ca0d550))
-## [6.3.5](https://github.com/vitejs/vite/compare/v6.3.4...v6.3.5) (2025-05-05)
### Bug Fixes
-* **ssr:** handle uninitialized export access as undefined ([#19959](https://github.com/vitejs/vite/issues/19959)) ([fd38d07](https://github.com/vitejs/vite/commit/fd38d076fe2455aac1e00a7b15cd51159bf12bb5))
+* **config:** make dynamic import work in config ([#157](https://github.com/vitejs/rolldown-vite/issues/157)) ([6e1d23e](https://github.com/vitejs/rolldown-vite/commit/6e1d23ece97b71e7b8d13eec88eeddaa62840613))
+* **ssr:** handle uninitialized export access as undefined ([#19959](https://github.com/vitejs/rolldown-vite/issues/19959)) ([fd38d07](https://github.com/vitejs/rolldown-vite/commit/fd38d076fe2455aac1e00a7b15cd51159bf12bb5))
+* watch related fixes ([#158](https://github.com/vitejs/rolldown-vite/issues/158)) ([ccfccef](https://github.com/vitejs/rolldown-vite/commit/ccfccef5c6f92cc00ef295faafcaa14ab038dce2))
+
+## [6.3.7](https://github.com/vitejs/rolldown-vite/compare/v6.3.6...v6.3.7) (2025-05-02)
+### Features
+
+* **types:** add `shouldTransformCachedModule` for compat ([#150](https://github.com/vitejs/rolldown-vite/issues/150)) ([f5d2494](https://github.com/vitejs/rolldown-vite/commit/f5d2494b61db5bc29639cda880bdaa3f119758e4))
+* update rolldown ([9b83bd1](https://github.com/vitejs/rolldown-vite/commit/9b83bd1fe699e3d9f49e950b04d7ec30c94e3977))
+* use Rolldown's watch API ([#67](https://github.com/vitejs/rolldown-vite/issues/67)) ([2b287c6](https://github.com/vitejs/rolldown-vite/commit/2b287c6edf49b970b6596b56b628ebaaf12fb581))
+
+## [6.3.6](https://github.com/vitejs/rolldown-vite/compare/v6.3.5...v6.3.6) (2025-05-01)
+### Features
+
+* **types:** make exposed `Rollup` type more compatible with Rollup ([#145](https://github.com/vitejs/rolldown-vite/issues/145)) ([f086663](https://github.com/vitejs/rolldown-vite/commit/f0866633aa99cfbf86746e5d1d50d3913b1a9f90))
+* update rolldown ([b3efa58](https://github.com/vitejs/rolldown-vite/commit/b3efa58b3790fb38ebf659d020ee2b6744785b59))
-## [6.3.4](https://github.com/vitejs/vite/compare/v6.3.3...v6.3.4) (2025-04-30)
### Bug Fixes
-* check static serve file inside sirv ([#19965](https://github.com/vitejs/vite/issues/19965)) ([c22c43d](https://github.com/vitejs/vite/commit/c22c43de612eebb6c182dd67850c24e4fab8cacb))
-* **optimizer:** return plain object when using `require` to import externals in optimized dependencies ([#19940](https://github.com/vitejs/vite/issues/19940)) ([efc5eab](https://github.com/vitejs/vite/commit/efc5eab253419fde0a6a48b8d2f233063d6a9643))
+* **asset:** regex filter should not force query to be included ([#143](https://github.com/vitejs/rolldown-vite/issues/143)) ([265e4d4](https://github.com/vitejs/rolldown-vite/commit/265e4d49ff16f054e38cb3954c0214b7c6ff73ee))
+* check static serve file inside sirv ([#19965](https://github.com/vitejs/rolldown-vite/issues/19965)) ([c22c43d](https://github.com/vitejs/rolldown-vite/commit/c22c43de612eebb6c182dd67850c24e4fab8cacb))
+* **optimizer:** return plain object when using `require` to import externals in optimized dependencies ([#19940](https://github.com/vitejs/rolldown-vite/issues/19940)) ([efc5eab](https://github.com/vitejs/rolldown-vite/commit/efc5eab253419fde0a6a48b8d2f233063d6a9643))
+* set `typescript.removeClassFieldsWithoutInitializer` for `useDefineForClassFields=false` ([#148](https://github.com/vitejs/rolldown-vite/issues/148)) ([fca16ad](https://github.com/vitejs/rolldown-vite/commit/fca16adfd62aef42c0477efaf494984d64f6af78))
+* **types:** add ESBuildOptions type back ([#146](https://github.com/vitejs/rolldown-vite/issues/146)) ([6eccf22](https://github.com/vitejs/rolldown-vite/commit/6eccf22247988c09881f2ef0dd8c08d90b427d57))
+
+### Miscellaneous Chores
+
+* add rolldown-vite indicator ([#141](https://github.com/vitejs/rolldown-vite/issues/141)) ([9c6218e](https://github.com/vitejs/rolldown-vite/commit/9c6218ea4b56eb97b40365b8d617de58c336fc3a))
### Code Refactoring
-* remove duplicate plugin context type ([#19935](https://github.com/vitejs/vite/issues/19935)) ([d6d01c2](https://github.com/vitejs/vite/commit/d6d01c2292fa4f9603e05b95d81c8724314c20e0))
+* remove duplicate plugin context type ([#19935](https://github.com/vitejs/rolldown-vite/issues/19935)) ([d6d01c2](https://github.com/vitejs/rolldown-vite/commit/d6d01c2292fa4f9603e05b95d81c8724314c20e0))
+
+## [6.3.5](https://github.com/vitejs/rolldown-vite/compare/v6.3.4...v6.3.5) (2025-04-24)
+### Features
+
+* **native-plugin:** use native reporter plugin ([#138](https://github.com/vitejs/rolldown-vite/issues/138)) ([5306775](https://github.com/vitejs/rolldown-vite/commit/530677567b2f18839a639c3309c330abab5164b5))
+* update rolldown ([ec8faac](https://github.com/vitejs/rolldown-vite/commit/ec8faac6a45fc53ff1489646c18efab71bab5747))
-## [6.3.3](https://github.com/vitejs/vite/compare/v6.3.2...v6.3.3) (2025-04-24)
### Bug Fixes
-* **assets:** ensure ?no-inline is not included in the asset url in the production environment ([#19496](https://github.com/vitejs/vite/issues/19496)) ([16a73c0](https://github.com/vitejs/vite/commit/16a73c05d35daa34117a173784895546212db5f4))
-* **css:** resolve relative imports in sass properly on Windows ([#19920](https://github.com/vitejs/vite/issues/19920)) ([ffab442](https://github.com/vitejs/vite/commit/ffab44270488f54ae344801024474b597249071b))
-* **deps:** update all non-major dependencies ([#19899](https://github.com/vitejs/vite/issues/19899)) ([a4b500e](https://github.com/vitejs/vite/commit/a4b500ef9ccc9b19a2882156a9ba8397e69bc6b2))
-* ignore malformed uris in tranform middleware ([#19853](https://github.com/vitejs/vite/issues/19853)) ([e4d5201](https://github.com/vitejs/vite/commit/e4d520141bcd83ad61f16767348b4a813bf9340a))
-* **ssr:** fix execution order of re-export ([#19841](https://github.com/vitejs/vite/issues/19841)) ([ed29dee](https://github.com/vitejs/vite/commit/ed29dee2eb2e3573b2bc337e1a9124c65222a1e5))
-* **ssr:** fix live binding of default export declaration and hoist exports getter ([#19842](https://github.com/vitejs/vite/issues/19842)) ([80a91ff](https://github.com/vitejs/vite/commit/80a91ff82426a4c88d54b9f5ec9a4205cb13899b))
+* **assets:** ensure ?no-inline is not included in the asset url in the production environment ([#19496](https://github.com/vitejs/rolldown-vite/issues/19496)) ([16a73c0](https://github.com/vitejs/rolldown-vite/commit/16a73c05d35daa34117a173784895546212db5f4))
+* **css:** resolve relative imports in sass properly on Windows ([#19920](https://github.com/vitejs/rolldown-vite/issues/19920)) ([ffab442](https://github.com/vitejs/rolldown-vite/commit/ffab44270488f54ae344801024474b597249071b))
+* **deps:** update all non-major dependencies ([#19899](https://github.com/vitejs/rolldown-vite/issues/19899)) ([a4b500e](https://github.com/vitejs/rolldown-vite/commit/a4b500ef9ccc9b19a2882156a9ba8397e69bc6b2))
+* ignore malformed uris in tranform middleware ([#19853](https://github.com/vitejs/rolldown-vite/issues/19853)) ([e4d5201](https://github.com/vitejs/rolldown-vite/commit/e4d520141bcd83ad61f16767348b4a813bf9340a))
+* **ssr:** fix execution order of re-export ([#19841](https://github.com/vitejs/rolldown-vite/issues/19841)) ([ed29dee](https://github.com/vitejs/rolldown-vite/commit/ed29dee2eb2e3573b2bc337e1a9124c65222a1e5))
+* **ssr:** fix live binding of default export declaration and hoist exports getter ([#19842](https://github.com/vitejs/rolldown-vite/issues/19842)) ([80a91ff](https://github.com/vitejs/rolldown-vite/commit/80a91ff82426a4c88d54b9f5ec9a4205cb13899b))
### Performance Improvements
-* skip sourcemap generation for renderChunk hook of import-analysis-build plugin ([#19921](https://github.com/vitejs/vite/issues/19921)) ([55cfd04](https://github.com/vitejs/vite/commit/55cfd04b10f98cde7a96814a69b9813543ea79c2))
+* skip sourcemap generation for renderChunk hook of import-analysis-build plugin ([#19921](https://github.com/vitejs/rolldown-vite/issues/19921)) ([55cfd04](https://github.com/vitejs/rolldown-vite/commit/55cfd04b10f98cde7a96814a69b9813543ea79c2))
### Tests
-* **ssr:** test `ssrTransform` re-export deps and test stacktrace with first line ([#19629](https://github.com/vitejs/vite/issues/19629)) ([9399cda](https://github.com/vitejs/vite/commit/9399cdaf8c3b2efd5f4015d57dc3b0e4e5b91a9d))
+* **ssr:** test `ssrTransform` re-export deps and test stacktrace with first line ([#19629](https://github.com/vitejs/rolldown-vite/issues/19629)) ([9399cda](https://github.com/vitejs/rolldown-vite/commit/9399cdaf8c3b2efd5f4015d57dc3b0e4e5b91a9d))
+
+## [6.3.4](https://github.com/vitejs/rolldown-vite/compare/v6.3.3...v6.3.4) (2025-04-23)
+### Features
+
+* **native-plugin:** adapt to the new native `transformPlugin` ([#136](https://github.com/vitejs/rolldown-vite/issues/136)) ([e5fa092](https://github.com/vitejs/rolldown-vite/commit/e5fa092c8d8eff2f4aca603094fd27ccd04431c3))
+* update rolldown ([233b7bf](https://github.com/vitejs/rolldown-vite/commit/233b7bff5c4ce9c554722c9915c2a7877ccb2711))
+
+## [6.3.3](https://github.com/vitejs/rolldown-vite/compare/v6.3.2...v6.3.3) (2025-04-22)
+### Features
+
+* add backward compat and warning for esbuild.banner/footer ([#135](https://github.com/vitejs/rolldown-vite/issues/135)) ([702b6ac](https://github.com/vitejs/rolldown-vite/commit/702b6acefa0f62458bb2c23814a816fe511afe01))
+* update rolldown ([cd8aa76](https://github.com/vitejs/rolldown-vite/commit/cd8aa7610685855ffe835b026f028273487cce9b))
+
+## [6.3.2](https://github.com/vitejs/rolldown-vite/compare/v6.3.1...v6.3.2) (2025-04-21)
+### Features
+
+* update rolldown ([c655b43](https://github.com/vitejs/rolldown-vite/commit/c655b431db1067be224f3c16b36da0e2b199e9b3))
+
+### Bug Fixes
+
+* **oxc:** correctly type oxc options ([#131](https://github.com/vitejs/rolldown-vite/issues/131)) ([bc90a9e](https://github.com/vitejs/rolldown-vite/commit/bc90a9ef6cd01783e429d1bf17f2a61636685501))
+
+### Performance Improvements
+
+* add filter to asset plugin ([#118](https://github.com/vitejs/rolldown-vite/issues/118)) ([1f0f755](https://github.com/vitejs/rolldown-vite/commit/1f0f75507b6df50b5ed8a880af6bccb0fa753932))
+* remove data uri plugin ([#130](https://github.com/vitejs/rolldown-vite/issues/130)) ([33ba886](https://github.com/vitejs/rolldown-vite/commit/33ba88663e518773dc1151c103e90a1bed2acf1b))
+
+## [6.3.1](https://github.com/vitejs/rolldown-vite/compare/v6.3.0...v6.3.1) (2025-04-18)
+### Features
+
+* **css:** improve lightningcss messages ([#19880](https://github.com/vitejs/rolldown-vite/issues/19880)) ([c713f79](https://github.com/vitejs/rolldown-vite/commit/c713f79b5a4bd98542d8dbe4c85ba4cce9b1f358))
+* update rolldown ([4c2f7db](https://github.com/vitejs/rolldown-vite/commit/4c2f7db159b6f4986036978d0a9d5844c1618f1e))
+
+### Bug Fixes
+
+* **css:** respect `css.lightningcss` option in css minification process ([#19879](https://github.com/vitejs/rolldown-vite/issues/19879)) ([b5055e0](https://github.com/vitejs/rolldown-vite/commit/b5055e0dd4c0e084115c3dbfead5736a54807e0c))
+* **deps:** update all non-major dependencies ([#19698](https://github.com/vitejs/rolldown-vite/issues/19698)) ([bab4cb9](https://github.com/vitejs/rolldown-vite/commit/bab4cb92248adf6b9b18df12b2bf03889b0bd1eb))
+* match default asserts case insensitive ([#19852](https://github.com/vitejs/rolldown-vite/issues/19852)) ([cbdab1d](https://github.com/vitejs/rolldown-vite/commit/cbdab1d6a30e07263ec51b2ca042369e736adec6))
+* open first url if host does not match any urls ([#19886](https://github.com/vitejs/rolldown-vite/issues/19886)) ([6abbdce](https://github.com/vitejs/rolldown-vite/commit/6abbdce3d77990409e12380e72c7ec9dd3f8bec5))
-## [6.3.2](https://github.com/vitejs/vite/compare/v6.3.1...v6.3.2) (2025-04-18)
+## [6.3.0](https://github.com/vitejs/rolldown-vite/compare/v6.3.0-beta.8...v6.3.0) (2025-04-17)
### Features
-* **css:** improve lightningcss messages ([#19880](https://github.com/vitejs/vite/issues/19880)) ([c713f79](https://github.com/vitejs/vite/commit/c713f79b5a4bd98542d8dbe4c85ba4cce9b1f358))
+* reexport `withFilter` from rolldown ([#122](https://github.com/vitejs/rolldown-vite/issues/122)) ([f2d0354](https://github.com/vitejs/rolldown-vite/commit/f2d0354b02881f35e97b95fcf7328ddb597e3b64))
+* update rolldown ([752d7f6](https://github.com/vitejs/rolldown-vite/commit/752d7f646cb16f9731b8bc9592dd539bbfc9bf86))
### Bug Fixes
-* **css:** respect `css.lightningcss` option in css minification process ([#19879](https://github.com/vitejs/vite/issues/19879)) ([b5055e0](https://github.com/vitejs/vite/commit/b5055e0dd4c0e084115c3dbfead5736a54807e0c))
-* **deps:** update all non-major dependencies ([#19698](https://github.com/vitejs/vite/issues/19698)) ([bab4cb9](https://github.com/vitejs/vite/commit/bab4cb92248adf6b9b18df12b2bf03889b0bd1eb))
-* match default asserts case insensitive ([#19852](https://github.com/vitejs/vite/issues/19852)) ([cbdab1d](https://github.com/vitejs/vite/commit/cbdab1d6a30e07263ec51b2ca042369e736adec6))
-* open first url if host does not match any urls ([#19886](https://github.com/vitejs/vite/issues/19886)) ([6abbdce](https://github.com/vitejs/vite/commit/6abbdce3d77990409e12380e72c7ec9dd3f8bec5))
+* avoid using `Promise.allSettled` in preload function ([#19805](https://github.com/vitejs/rolldown-vite/issues/19805)) ([35c7f35](https://github.com/vitejs/rolldown-vite/commit/35c7f35e2b67f2158ededf2af58ecec53b3f16c5))
+* backward compat for internal plugin `transform` calls ([#19878](https://github.com/vitejs/rolldown-vite/issues/19878)) ([a152b7c](https://github.com/vitejs/rolldown-vite/commit/a152b7cbac72e05668f8fc23074d531ecebb77a5))
+* **hmr:** avoid infinite loop happening with `hot.invalidate` in circular deps ([#19870](https://github.com/vitejs/rolldown-vite/issues/19870)) ([d4ee5e8](https://github.com/vitejs/rolldown-vite/commit/d4ee5e8655a85f4d6bebc695b063d69406ab53ac))
+* **native-plugin:** disable optimizerResolvePlugin correctly ([#116](https://github.com/vitejs/rolldown-vite/issues/116)) ([bf2b441](https://github.com/vitejs/rolldown-vite/commit/bf2b4416f7cbf8c154e7bb07bf7472ca6714c183))
+* **optimizer:** include rollupOptions in config hash ([#115](https://github.com/vitejs/rolldown-vite/issues/115)) ([732a8e4](https://github.com/vitejs/rolldown-vite/commit/732a8e4867e1646fdfd78948bc3f8fcd5864945a))
+
+## [6.3.0-beta.8](https://github.com/vitejs/rolldown-vite/compare/v6.3.0-beta.7...v6.3.0-beta.8) (2025-04-15)
+### Features
+
+* update rolldown ([e996d54](https://github.com/vitejs/rolldown-vite/commit/e996d54d06b67cb1773e299ea6598debccc7712c))
-## [6.3.1](https://github.com/vitejs/vite/compare/v6.3.0...v6.3.1) (2025-04-17)
### Bug Fixes
-* avoid using `Promise.allSettled` in preload function ([#19805](https://github.com/vitejs/vite/issues/19805)) ([35c7f35](https://github.com/vitejs/vite/commit/35c7f35e2b67f2158ededf2af58ecec53b3f16c5))
-* backward compat for internal plugin `transform` calls ([#19878](https://github.com/vitejs/vite/issues/19878)) ([a152b7c](https://github.com/vitejs/vite/commit/a152b7cbac72e05668f8fc23074d531ecebb77a5))
+* update oxc esbuild option warning message ([#111](https://github.com/vitejs/rolldown-vite/issues/111)) ([aa29797](https://github.com/vitejs/rolldown-vite/commit/aa29797d3d421355a96e73d0cfe339f43abbdf88))
+
+### Miscellaneous Chores
+
+* oxc esbuild option warning message grammar ([#112](https://github.com/vitejs/rolldown-vite/issues/112)) ([892cf34](https://github.com/vitejs/rolldown-vite/commit/892cf3470b30346ad077395ee712d7a10d5901bf))
+
+## [6.3.0-beta.7](https://github.com/vitejs/rolldown-vite/compare/v6.3.0-beta.6...v6.3.0-beta.7) (2025-04-12)
+### Features
+
+* **optimizer:** improve esbuild plugin conversion compat ([#110](https://github.com/vitejs/rolldown-vite/issues/110)) ([6ec06b6](https://github.com/vitejs/rolldown-vite/commit/6ec06b648a0f0dc4441fff63bce39905e8f23b89))
-## [6.3.0](https://github.com/vitejs/vite/compare/v6.3.0-beta.2...v6.3.0) (2025-04-16)
### Bug Fixes
-* **hmr:** avoid infinite loop happening with `hot.invalidate` in circular deps ([#19870](https://github.com/vitejs/vite/issues/19870)) ([d4ee5e8](https://github.com/vitejs/vite/commit/d4ee5e8655a85f4d6bebc695b063d69406ab53ac))
-* **preview:** use host url to open browser ([#19836](https://github.com/vitejs/vite/issues/19836)) ([5003434](https://github.com/vitejs/vite/commit/50034340401b4043bb0b158f18ffb7ae1b7f5c86))
+* addWatchFile doesn't work if base is specified (fixes [#19792](https://github.com/vitejs/rolldown-vite/issues/19792)) ([#19794](https://github.com/vitejs/rolldown-vite/issues/19794)) ([8bed1de](https://github.com/vitejs/rolldown-vite/commit/8bed1de5710f2a097af0e22a196545446d98f988))
+* export `rolldownVersion` ([#109](https://github.com/vitejs/rolldown-vite/issues/109)) ([698cbea](https://github.com/vitejs/rolldown-vite/commit/698cbea07d7708331bd46becaf97400b20050a51))
+* **hmr:** run HMR handler sequentially ([#19793](https://github.com/vitejs/rolldown-vite/issues/19793)) ([380c10e](https://github.com/vitejs/rolldown-vite/commit/380c10e665e78ef732a8d7b6c8f60a1226fc4c3b))
+* **preview:** use host url to open browser ([#19836](https://github.com/vitejs/rolldown-vite/issues/19836)) ([5003434](https://github.com/vitejs/rolldown-vite/commit/50034340401b4043bb0b158f18ffb7ae1b7f5c86))
+
+### Code Refactoring
+
+* simplify pluginFilter implementation ([#19828](https://github.com/vitejs/rolldown-vite/issues/19828)) ([0a0c50a](https://github.com/vitejs/rolldown-vite/commit/0a0c50a7ed38017469ed6dcec941c2d8d0efd0d0))
+
+## [6.3.0-beta.6](https://github.com/vitejs/rolldown-vite/compare/v6.3.0-beta.5...v6.3.0-beta.6) (2025-04-10)
+### Features
+
+* update rolldown ([e28b1c0](https://github.com/vitejs/rolldown-vite/commit/e28b1c0b988a37fbe56068dab3a5cf58fa3bbfba))
+* update rolldown ([c7e3e04](https://github.com/vitejs/rolldown-vite/commit/c7e3e040627e0d9db19cb665950452b5295053c6))
-## [6.3.0-beta.2](https://github.com/vitejs/vite/compare/v6.3.0-beta.1...v6.3.0-beta.2) (2025-04-11)
### Bug Fixes
-* addWatchFile doesn't work if base is specified (fixes [#19792](https://github.com/vitejs/vite/issues/19792)) ([#19794](https://github.com/vitejs/vite/issues/19794)) ([8bed1de](https://github.com/vitejs/vite/commit/8bed1de5710f2a097af0e22a196545446d98f988))
-* correct the behavior when multiple transform filter options are specified ([#19818](https://github.com/vitejs/vite/issues/19818)) ([7200dee](https://github.com/vitejs/vite/commit/7200deec91a501fb84734e23906f80808734540c))
-* **css:** remove empty chunk imports correctly when chunk file name contained special characters ([#19814](https://github.com/vitejs/vite/issues/19814)) ([b125172](https://github.com/vitejs/vite/commit/b1251720d47f15615ea354991cdaa90d9a94aae5))
-* **dev:** make query selector regexes more inclusive (fix [#19213](https://github.com/vitejs/vite/issues/19213)) ([#19767](https://github.com/vitejs/vite/issues/19767)) ([f530a72](https://github.com/vitejs/vite/commit/f530a72246ec8e73b1f2ba767f6c108e9ac9712a))
-* fs check with svg and relative paths ([#19782](https://github.com/vitejs/vite/issues/19782)) ([62d7e81](https://github.com/vitejs/vite/commit/62d7e81ee189d65899bb65f3263ddbd85247b647))
-* **hmr:** run HMR handler sequentially ([#19793](https://github.com/vitejs/vite/issues/19793)) ([380c10e](https://github.com/vitejs/vite/commit/380c10e665e78ef732a8d7b6c8f60a1226fc4c3b))
-* keep entry asset files imported by other files ([#19779](https://github.com/vitejs/vite/issues/19779)) ([2fa1495](https://github.com/vitejs/vite/commit/2fa149580118a6b7988593dea9e2bf2ee679506c))
-* **module-runner:** allow already resolved id as entry ([#19768](https://github.com/vitejs/vite/issues/19768)) ([e2e11b1](https://github.com/vitejs/vite/commit/e2e11b15a6083777ee521e26a3f79c3859abd411))
-* reject requests with `#` in request-target ([#19830](https://github.com/vitejs/vite/issues/19830)) ([175a839](https://github.com/vitejs/vite/commit/175a83909f02d3b554452a7bd02b9f340cdfef70))
-* **types:** remove the `keepProcessEnv` from the `DefaultEnvironmentOptions` type ([#19796](https://github.com/vitejs/vite/issues/19796)) ([36935b5](https://github.com/vitejs/vite/commit/36935b58eabde46ab845e121e21525df5ad65ff1))
-* unbundle `fdir` to fix `commonjsOptions.dynamicRequireTargets` ([#19791](https://github.com/vitejs/vite/issues/19791)) ([71227be](https://github.com/vitejs/vite/commit/71227be9aab52c1c5df59afba4539646204eff74))
+* correct the behavior when multiple transform filter options are specified ([#19818](https://github.com/vitejs/rolldown-vite/issues/19818)) ([7200dee](https://github.com/vitejs/rolldown-vite/commit/7200deec91a501fb84734e23906f80808734540c))
+* **css:** remove empty chunk imports correctly when chunk file name contained special characters ([#19814](https://github.com/vitejs/rolldown-vite/issues/19814)) ([b125172](https://github.com/vitejs/rolldown-vite/commit/b1251720d47f15615ea354991cdaa90d9a94aae5))
+* **dev:** make query selector regexes more inclusive (fix [#19213](https://github.com/vitejs/rolldown-vite/issues/19213)) ([#19767](https://github.com/vitejs/rolldown-vite/issues/19767)) ([f530a72](https://github.com/vitejs/rolldown-vite/commit/f530a72246ec8e73b1f2ba767f6c108e9ac9712a))
+* **module-runner:** allow already resolved id as entry ([#19768](https://github.com/vitejs/rolldown-vite/issues/19768)) ([e2e11b1](https://github.com/vitejs/rolldown-vite/commit/e2e11b15a6083777ee521e26a3f79c3859abd411))
+* reject requests with `#` in request-target ([#19830](https://github.com/vitejs/rolldown-vite/issues/19830)) ([175a839](https://github.com/vitejs/rolldown-vite/commit/175a83909f02d3b554452a7bd02b9f340cdfef70))
+* **types:** remove the `keepProcessEnv` from the `DefaultEnvironmentOptions` type ([#19796](https://github.com/vitejs/rolldown-vite/issues/19796)) ([36935b5](https://github.com/vitejs/rolldown-vite/commit/36935b58eabde46ab845e121e21525df5ad65ff1))
+* unbundle `fdir` to fix `commonjsOptions.dynamicRequireTargets` ([#19791](https://github.com/vitejs/rolldown-vite/issues/19791)) ([71227be](https://github.com/vitejs/rolldown-vite/commit/71227be9aab52c1c5df59afba4539646204eff74))
### Performance Improvements
-* **css:** avoid constructing `renderedModules` ([#19775](https://github.com/vitejs/vite/issues/19775)) ([59d0b35](https://github.com/vitejs/vite/commit/59d0b35b30f3a38be33c0a9bdc177945b6f7eb1b))
+* **css:** avoid constructing `renderedModules` ([#19775](https://github.com/vitejs/rolldown-vite/issues/19775)) ([59d0b35](https://github.com/vitejs/rolldown-vite/commit/59d0b35b30f3a38be33c0a9bdc177945b6f7eb1b))
+* define viteMetadata instead of assign ([#106](https://github.com/vitejs/rolldown-vite/issues/106)) ([7912459](https://github.com/vitejs/rolldown-vite/commit/7912459239d438570eb21ef71a05cc8c3579ff72))
### Documentation
-* **vite:** fix description of `transformIndexHtml` hook ([#19799](https://github.com/vitejs/vite/issues/19799)) ([a0e1a04](https://github.com/vitejs/vite/commit/a0e1a0402648e0df60fb928ffd97b0230999990d))
+* **vite:** fix description of `transformIndexHtml` hook ([#19799](https://github.com/vitejs/rolldown-vite/issues/19799)) ([a0e1a04](https://github.com/vitejs/rolldown-vite/commit/a0e1a0402648e0df60fb928ffd97b0230999990d))
### Miscellaneous Chores
-* remove unused eslint directive ([#19781](https://github.com/vitejs/vite/issues/19781)) ([cb4f5b4](https://github.com/vitejs/vite/commit/cb4f5b4b6bb7dc96812b126ccc475d1e2c3f7f92))
+* bump rolldown ([#105](https://github.com/vitejs/rolldown-vite/issues/105)) ([8646e4e](https://github.com/vitejs/rolldown-vite/commit/8646e4e68b432c8197c3f138dbe65356ac73fe16))
-### Code Refactoring
+### Tests
-* simplify pluginFilter implementation ([#19828](https://github.com/vitejs/vite/issues/19828)) ([0a0c50a](https://github.com/vitejs/vite/commit/0a0c50a7ed38017469ed6dcec941c2d8d0efd0d0))
+* tweak generateCodeFrame test ([#19812](https://github.com/vitejs/rolldown-vite/issues/19812)) ([8fe3538](https://github.com/vitejs/rolldown-vite/commit/8fe3538d9095384c670815dc42ef67e051f3246f))
-### Tests
+## [6.3.0-beta.5](https://github.com/vitejs/rolldown-vite/compare/v6.3.0-beta.4...v6.3.0-beta.5) (2025-04-03)
+### ⚠ BREAKING CHANGES
+
+* **oxc:** jsxRefresh filter (#101)
-* tweak generateCodeFrame test ([#19812](https://github.com/vitejs/vite/issues/19812)) ([8fe3538](https://github.com/vitejs/vite/commit/8fe3538d9095384c670815dc42ef67e051f3246f))
+### Features
+
+* **oxc:** jsxRefresh filter ([#101](https://github.com/vitejs/rolldown-vite/issues/101)) ([7c6faa6](https://github.com/vitejs/rolldown-vite/commit/7c6faa6b2b8fca039ec4dcc994cdb911caf0adb6))
+
+### Bug Fixes
+
+* fs check with svg and relative paths ([#19782](https://github.com/vitejs/rolldown-vite/issues/19782)) ([62d7e81](https://github.com/vitejs/rolldown-vite/commit/62d7e81ee189d65899bb65f3263ddbd85247b647))
+* **hmr:** throw non-standard error info causes logical error ([#19776](https://github.com/vitejs/rolldown-vite/issues/19776)) ([6b648c7](https://github.com/vitejs/rolldown-vite/commit/6b648c73ae33a57f648af87204a325335afffca8))
+* keep entry asset files imported by other files ([#19779](https://github.com/vitejs/rolldown-vite/issues/19779)) ([2fa1495](https://github.com/vitejs/rolldown-vite/commit/2fa149580118a6b7988593dea9e2bf2ee679506c))
-## [6.3.0-beta.1](https://github.com/vitejs/vite/compare/v6.3.0-beta.0...v6.3.0-beta.1) (2025-04-03)
+### Miscellaneous Chores
+
+* cleanup changelog ([b17bade](https://github.com/vitejs/rolldown-vite/commit/b17bade873dc21240ab60b1c941be4b2253f7581))
+* remove unused eslint directive ([#19781](https://github.com/vitejs/rolldown-vite/issues/19781)) ([cb4f5b4](https://github.com/vitejs/rolldown-vite/commit/cb4f5b4b6bb7dc96812b126ccc475d1e2c3f7f92))
+
+## [6.3.0-beta.4](https://github.com/vitejs/rolldown-vite/compare/v6.3.0-beta.3...v6.3.0-beta.4) (2025-04-02)
### Features
-* **env:** add false option for envDir to disable env loading ([#19503](https://github.com/vitejs/vite/issues/19503)) ([bca89e1](https://github.com/vitejs/vite/commit/bca89e153e58edd2b506807958557a21edacfaf8))
-* **types:** make CustomPluginOptionsVite backward compatible ([#19760](https://github.com/vitejs/vite/issues/19760)) ([821edf1](https://github.com/vitejs/vite/commit/821edf196f281b90af0742647a3feaf3226be439))
+* **env:** add false option for envDir to disable env loading ([#19503](https://github.com/vitejs/rolldown-vite/issues/19503)) ([bca89e1](https://github.com/vitejs/rolldown-vite/commit/bca89e153e58edd2b506807958557a21edacfaf8))
+* **types:** make CustomPluginOptionsVite backward compatible ([#19760](https://github.com/vitejs/rolldown-vite/issues/19760)) ([821edf1](https://github.com/vitejs/rolldown-vite/commit/821edf196f281b90af0742647a3feaf3226be439))
+* update rolldown ([96d9065](https://github.com/vitejs/rolldown-vite/commit/96d906568b867ddd623db98b5239f244947568b0))
### Bug Fixes
-* align plugin hook filter behavior with pluginutils ([#19736](https://github.com/vitejs/vite/issues/19736)) ([0bbdd2c](https://github.com/vitejs/vite/commit/0bbdd2c1338624fa0e76c81648989f8f9a5b36d7))
-* fs check in transform middleware ([#19761](https://github.com/vitejs/vite/issues/19761)) ([5967313](https://github.com/vitejs/vite/commit/59673137c45ac2bcfad1170d954347c1a17ab949))
-* **hmr:** throw non-standard error info causes logical error ([#19776](https://github.com/vitejs/vite/issues/19776)) ([6b648c7](https://github.com/vitejs/vite/commit/6b648c73ae33a57f648af87204a325335afffca8))
+* accept worker iife format ([#94](https://github.com/vitejs/rolldown-vite/issues/94)) ([df12968](https://github.com/vitejs/rolldown-vite/commit/df12968d590e54f6404da737c24a1f3caab21a0e))
+* align plugin hook filter behavior with pluginutils ([#19736](https://github.com/vitejs/rolldown-vite/issues/19736)) ([0bbdd2c](https://github.com/vitejs/rolldown-vite/commit/0bbdd2c1338624fa0e76c81648989f8f9a5b36d7))
+* fs check in transform middleware ([#19761](https://github.com/vitejs/rolldown-vite/issues/19761)) ([5967313](https://github.com/vitejs/rolldown-vite/commit/59673137c45ac2bcfad1170d954347c1a17ab949))
+* make `this.environment` available in outputOptions hook ([efe2728](https://github.com/vitejs/rolldown-vite/commit/efe2728c802073d65933bed609ec29ee9bcc48ab))
+* plugin hook filter ([8dd6f69](https://github.com/vitejs/rolldown-vite/commit/8dd6f6983b18cf6b58f005a11d0a96e8d1d76dfb))
+* **worker:** suppress export related warnings in worker build ([#95](https://github.com/vitejs/rolldown-vite/issues/95)) ([5a6a776](https://github.com/vitejs/rolldown-vite/commit/5a6a7763ffa0a893d19edc103197802286ef255e))
### Performance Improvements
-* only bundle node version `debug` ([#19715](https://github.com/vitejs/vite/issues/19715)) ([e435aae](https://github.com/vitejs/vite/commit/e435aae22ffda441a24332cd79226bfca55326aa))
+* only bundle node version `debug` ([#19715](https://github.com/vitejs/rolldown-vite/issues/19715)) ([e435aae](https://github.com/vitejs/rolldown-vite/commit/e435aae22ffda441a24332cd79226bfca55326aa))
+
+### Miscellaneous Chores
+
+* fix some typos in comment ([#19728](https://github.com/vitejs/rolldown-vite/issues/19728)) ([35ee848](https://github.com/vitejs/rolldown-vite/commit/35ee84808af3a5443019e36cba351af859113695))
+
+## [6.3.0-beta.3](https://github.com/vitejs/rolldown-vite/compare/v6.3.0-beta.2...v6.3.0-beta.3) (2025-03-27)
+### Bug Fixes
+* **optimizer:** derive `resolve.symlinks` option properly ([#91](https://github.com/vitejs/rolldown-vite/issues/91)) ([0fc1af8](https://github.com/vitejs/rolldown-vite/commit/0fc1af82747f77bcad4430f19899d19078c2e81c))
+* **transform:** merge tsconfig jsx options with oxc jsx options correctly ([#90](https://github.com/vitejs/rolldown-vite/issues/90)) ([1851a57](https://github.com/vitejs/rolldown-vite/commit/1851a57ba4a5f5edb6cc1a82ad986a3eb9bbd5b7))
+* use exact regexp filter for virtual module ([#89](https://github.com/vitejs/rolldown-vite/issues/89)) ([fbbfca4](https://github.com/vitejs/rolldown-vite/commit/fbbfca4598fcb276411d3bf1e2f69054a64812fb))
+
+## [6.3.0-beta.2](https://github.com/vitejs/rolldown-vite/compare/v6.3.0-beta.1...v6.3.0-beta.2) (2025-03-26)
### Miscellaneous Chores
-* fix some typos in comment ([#19728](https://github.com/vitejs/vite/issues/19728)) ([35ee848](https://github.com/vitejs/vite/commit/35ee84808af3a5443019e36cba351af859113695))
+* fix publish workflow ([fbaeca3](https://github.com/vitejs/rolldown-vite/commit/fbaeca32d34396cfd4fbdac21552872462704887))
-## [6.3.0-beta.0](https://github.com/vitejs/vite/compare/v6.2.2...v6.3.0-beta.0) (2025-03-26)
+## [6.3.0-beta.1](https://github.com/vitejs/rolldown-vite/compare/v6.3.0-beta.0...v6.3.0-beta.1) (2025-03-26)
### Features
-* **config:** improve bad character warning ([#19683](https://github.com/vitejs/vite/issues/19683)) ([998303b](https://github.com/vitejs/vite/commit/998303b438734e8219715fe6883b97fb10404c16))
-* **css:** support preprocessor with lightningcss ([#19071](https://github.com/vitejs/vite/issues/19071)) ([d3450ca](https://github.com/vitejs/vite/commit/d3450cae614af4c2b866903411b6d765df3e5a48))
-* **experimental:** add fetchable environment interface ([#19664](https://github.com/vitejs/vite/issues/19664)) ([c5b7191](https://github.com/vitejs/vite/commit/c5b71915099cfbc15447a166f35620fa0e05c023))
-* implement hook filters ([#19602](https://github.com/vitejs/vite/issues/19602)) ([04d58b4](https://github.com/vitejs/vite/commit/04d58b42ae69547f04ef8fcd574b1ee1b654dc32))
-* **types:** expose `CustomPluginOptionsVite` type ([#19557](https://github.com/vitejs/vite/issues/19557)) ([15abc01](https://github.com/vitejs/vite/commit/15abc01241b0da5c4af6aa59b0bc936ccab0f0b4))
-* **types:** make ImportMetaEnv strictly available ([#19077](https://github.com/vitejs/vite/issues/19077)) ([6cf5141](https://github.com/vitejs/vite/commit/6cf51417cdfc26f100c00c910e00829e48dec79c))
-* **types:** type hints for hmr events ([#19579](https://github.com/vitejs/vite/issues/19579)) ([95424b2](https://github.com/vitejs/vite/commit/95424b26892b005f438169d0ea426cb1a3176bf2))
-* warn if `define['process.env']` contains `path` key with a value ([#19517](https://github.com/vitejs/vite/issues/19517)) ([832b2c4](https://github.com/vitejs/vite/commit/832b2c409ebbb2ba1480e6ae4630c7f047c160d4))
+* **config:** improve bad character warning ([#19683](https://github.com/vitejs/rolldown-vite/issues/19683)) ([998303b](https://github.com/vitejs/rolldown-vite/commit/998303b438734e8219715fe6883b97fb10404c16))
+* convert `optimizeDep.esbuildOptions` to `optimizeDep.rollupOptions` automatically ([e66d358](https://github.com/vitejs/rolldown-vite/commit/e66d35879f25b434ec23b38f6ffad52c2b393bab))
+* **css:** support preprocessor with lightningcss ([#19071](https://github.com/vitejs/rolldown-vite/issues/19071)) ([d3450ca](https://github.com/vitejs/rolldown-vite/commit/d3450cae614af4c2b866903411b6d765df3e5a48))
+* **experimental:** add fetchable environment interface ([#19664](https://github.com/vitejs/rolldown-vite/issues/19664)) ([c5b7191](https://github.com/vitejs/rolldown-vite/commit/c5b71915099cfbc15447a166f35620fa0e05c023))
+* implement hook filters ([#19602](https://github.com/vitejs/rolldown-vite/issues/19602)) ([04d58b4](https://github.com/vitejs/rolldown-vite/commit/04d58b42ae69547f04ef8fcd574b1ee1b654dc32))
+* **types:** expose `CustomPluginOptionsVite` type ([#19557](https://github.com/vitejs/rolldown-vite/issues/19557)) ([15abc01](https://github.com/vitejs/rolldown-vite/commit/15abc01241b0da5c4af6aa59b0bc936ccab0f0b4))
+* **types:** make ImportMetaEnv strictly available ([#19077](https://github.com/vitejs/rolldown-vite/issues/19077)) ([6cf5141](https://github.com/vitejs/rolldown-vite/commit/6cf51417cdfc26f100c00c910e00829e48dec79c))
+* **types:** type hints for hmr events ([#19579](https://github.com/vitejs/rolldown-vite/issues/19579)) ([95424b2](https://github.com/vitejs/rolldown-vite/commit/95424b26892b005f438169d0ea426cb1a3176bf2))
+* use `parseAst` from rolldown ([aa4739a](https://github.com/vitejs/rolldown-vite/commit/aa4739ab32a22227ff671047520dfe29e7c4fe87))
+* use lightningcss by default for cssMinify ([7572013](https://github.com/vitejs/rolldown-vite/commit/7572013fdc68a03ab3def8f312387618d2199e7f))
+* use OXC for define plugin ([af62e81](https://github.com/vitejs/rolldown-vite/commit/af62e81e4b148082cc889e3f301edade091b29cd))
+* use OXC for transform ([393d1bc](https://github.com/vitejs/rolldown-vite/commit/393d1bc4bd8f124fb2c2b203761d794caaa8f994))
+* use rolldown builtin OXC minifier by default ([e8cbd79](https://github.com/vitejs/rolldown-vite/commit/e8cbd79861586b3a63475b94d03f7b18853b3ad0))
+* use rolldown for build ([47a4d50](https://github.com/vitejs/rolldown-vite/commit/47a4d506998e445e992f671b0fe876de1119c9bc))
+* use rolldown in the dep optimizer ([48c6010](https://github.com/vitejs/rolldown-vite/commit/48c60102705ff8f893828035e7df3bea48ae9363))
+* use rolldown to bundle config ([88077db](https://github.com/vitejs/rolldown-vite/commit/88077db36e6380a772d50668ba9e9508ef561455))
+* warn if `define['process.env']` contains `path` key with a value ([#19517](https://github.com/vitejs/rolldown-vite/issues/19517)) ([832b2c4](https://github.com/vitejs/rolldown-vite/commit/832b2c409ebbb2ba1480e6ae4630c7f047c160d4))
### Bug Fixes
-* add back `.mts` to default `resolve.extensions` ([#19701](https://github.com/vitejs/vite/issues/19701)) ([ae91bd0](https://github.com/vitejs/vite/commit/ae91bd0ad10942898c3d7aa8181249fb9682a4fe))
-* **css:** parse image-set without space after comma correctly ([#19661](https://github.com/vitejs/vite/issues/19661)) ([d0d4c66](https://github.com/vitejs/vite/commit/d0d4c66bd539a5232005ac7ad63ec19f0794f2a5))
-* **css:** scoped css order with non-scoped css ([#19678](https://github.com/vitejs/vite/issues/19678)) ([a3a94ab](https://github.com/vitejs/vite/commit/a3a94abb200c0bb1ed8bc4abb539a9ea27ce1a84))
-* **deps:** update all non-major dependencies ([#19649](https://github.com/vitejs/vite/issues/19649)) ([f4e712f](https://github.com/vitejs/vite/commit/f4e712ff861f8a9504594a4a5e6d35a7547e5a7e))
-* fs raw query with query separators ([#19702](https://github.com/vitejs/vite/issues/19702)) ([262b5ec](https://github.com/vitejs/vite/commit/262b5ec7ae4981208339b7b87fefbd3dd8465851))
-* **optimizer:** fix incorrect picomatch usage in filter() ([#19646](https://github.com/vitejs/vite/issues/19646)) ([300280d](https://github.com/vitejs/vite/commit/300280d52203b6c1d8867d956f7d5c991e2e9dfb))
-* **ssr:** hoist export to handle cyclic import better ([#18983](https://github.com/vitejs/vite/issues/18983)) ([8c04c69](https://github.com/vitejs/vite/commit/8c04c69a52c7b66d551d384ac34bb10ab1522f68))
+* add back `.mts` to default `resolve.extensions` ([#19701](https://github.com/vitejs/rolldown-vite/issues/19701)) ([ae91bd0](https://github.com/vitejs/rolldown-vite/commit/ae91bd0ad10942898c3d7aa8181249fb9682a4fe))
+* buffer full reload messages ([eb642a2](https://github.com/vitejs/rolldown-vite/commit/eb642a23d33d2aeae501ef6b3795a511693af788))
+* **css:** parse image-set without space after comma correctly ([#19661](https://github.com/vitejs/rolldown-vite/issues/19661)) ([d0d4c66](https://github.com/vitejs/rolldown-vite/commit/d0d4c66bd539a5232005ac7ad63ec19f0794f2a5))
+* **css:** scoped css order with non-scoped css ([#19678](https://github.com/vitejs/rolldown-vite/issues/19678)) ([a3a94ab](https://github.com/vitejs/rolldown-vite/commit/a3a94abb200c0bb1ed8bc4abb539a9ea27ce1a84))
+* **deps:** update all non-major dependencies ([#19649](https://github.com/vitejs/rolldown-vite/issues/19649)) ([f4e712f](https://github.com/vitejs/rolldown-vite/commit/f4e712ff861f8a9504594a4a5e6d35a7547e5a7e))
+* fs raw query with query separators ([#19702](https://github.com/vitejs/rolldown-vite/issues/19702)) ([262b5ec](https://github.com/vitejs/rolldown-vite/commit/262b5ec7ae4981208339b7b87fefbd3dd8465851))
+* **optimizer:** externalize as absolute ([de29115](https://github.com/vitejs/rolldown-vite/commit/de29115e9b28215dae80e106084512d1656bc7f7))
+* **optimizer:** fix incorrect picomatch usage in filter() ([#19646](https://github.com/vitejs/rolldown-vite/issues/19646)) ([300280d](https://github.com/vitejs/rolldown-vite/commit/300280d52203b6c1d8867d956f7d5c991e2e9dfb))
+* remove duplicate `createRequire` in optimizer ([#86](https://github.com/vitejs/rolldown-vite/issues/86)) ([d066bed](https://github.com/vitejs/rolldown-vite/commit/d066bed940b5a43049b61a42a15eaffdb588228d))
+* **ssr:** hoist export to handle cyclic import better ([#18983](https://github.com/vitejs/rolldown-vite/issues/18983)) ([8c04c69](https://github.com/vitejs/rolldown-vite/commit/8c04c69a52c7b66d551d384ac34bb10ab1522f68))
+* vite dir ([486a056](https://github.com/vitejs/rolldown-vite/commit/486a056e0b43993b02ddc9d5f01229f17fccb8f3))
+
+### Performance Improvements
+
+* add `experimental.enableNativePlugin` ([ead8ded](https://github.com/vitejs/rolldown-vite/commit/ead8dedc0d3f8e2855c5d1d20499c6e23d6cf225))
+* use filter for plugins ([95f3ce6](https://github.com/vitejs/rolldown-vite/commit/95f3ce60a2e841100951a90beb039daecfa5553d))
### Miscellaneous Chores
-* **deps:** unbundle tinyglobby ([#19487](https://github.com/vitejs/vite/issues/19487)) ([a5ea6f0](https://github.com/vitejs/vite/commit/a5ea6f09ba79f4a5b72117899bccaa43613a777f))
+* add rolldown as dependency ([2716e1e](https://github.com/vitejs/rolldown-vite/commit/2716e1e1f992d89c18b7d64a3435ba671ff711fa))
+* **deps:** unbundle tinyglobby ([#19487](https://github.com/vitejs/rolldown-vite/issues/19487)) ([a5ea6f0](https://github.com/vitejs/rolldown-vite/commit/a5ea6f09ba79f4a5b72117899bccaa43613a777f))
+* enable continuous release ([228a599](https://github.com/vitejs/rolldown-vite/commit/228a59991bcf2c0f618f8970f3a1cc7b8638ad38))
+* update LICENSE ([140ccea](https://github.com/vitejs/rolldown-vite/commit/140ccea0d0ccb519727485a0345205354a3de136))
### Code Refactoring
-* `[hookName].handler` in plugins ([#19586](https://github.com/vitejs/vite/issues/19586)) ([9827df2](https://github.com/vitejs/vite/commit/9827df2195905e5eb04b46dce357d12c3dff4876))
-* **reporter:** only call modulesReporter when logLevel is info ([#19708](https://github.com/vitejs/vite/issues/19708)) ([7249553](https://github.com/vitejs/vite/commit/7249553625b667b6affb448d5acb7d6f457640f6))
+* `[hookName].handler` in plugins ([#19586](https://github.com/vitejs/rolldown-vite/issues/19586)) ([9827df2](https://github.com/vitejs/rolldown-vite/commit/9827df2195905e5eb04b46dce357d12c3dff4876))
+* make esbuild optional peer dependency ([7f44e70](https://github.com/vitejs/rolldown-vite/commit/7f44e7000e8a85b49cf70b66a75a9850c552554c))
+* **reporter:** only call modulesReporter when logLevel is info ([#19708](https://github.com/vitejs/rolldown-vite/issues/19708)) ([7249553](https://github.com/vitejs/rolldown-vite/commit/7249553625b667b6affb448d5acb7d6f457640f6))
+* skip hook filter inject in build ([efbc14b](https://github.com/vitejs/rolldown-vite/commit/efbc14b1cb96a9cd087cbce8f7546963c60d029d))
+
+### Continuous Integration
+
+* update workflows ([af0d4d5](https://github.com/vitejs/rolldown-vite/commit/af0d4d541a53a8b1eafd9ac0d9a5ef1cdf4c093c))
## [6.2.2](https://github.com/vitejs/vite/compare/v6.2.1...v6.2.2) (2025-03-14)
### Features
diff --git a/packages/vite/LICENSE.md b/packages/vite/LICENSE.md
index ed5c85681d20bb..836a056b4b6efd 100644
--- a/packages/vite/LICENSE.md
+++ b/packages/vite/LICENSE.md
@@ -127,15 +127,11 @@ Repository: git+https://github.com/rolldown/rolldown.git
---------------------------------------
-## @rollup/plugin-alias, @rollup/plugin-commonjs, @rollup/plugin-dynamic-import-vars, @rollup/pluginutils
+## @rollup/plugin-alias, @rollup/plugin-dynamic-import-vars, @rollup/pluginutils
License: MIT
By: Johannes Stein
Repository: rollup/plugins
-License: MIT
-By: Rich Harris
-Repository: rollup/plugins
-
License: MIT
By: LarsDenBakker
Repository: rollup/plugins
@@ -351,38 +347,6 @@ Repository: git+https://github.com/paulmillr/chokidar.git
---------------------------------------
-## commondir, shell-quote
-License: MIT
-By: James Halliday
-Repositories: http://github.com/substack/node-commondir.git, http://github.com/ljharb/shell-quote.git
-
-> The MIT License
->
-> Copyright (c) 2013 James Halliday (mail@substack.net)
->
-> Permission is hereby granted, free of charge,
-> to any person obtaining a copy of this software and
-> associated documentation files (the "Software"), to
-> deal in the Software without restriction, including
-> without limitation the rights to use, copy, modify,
-> merge, publish, distribute, sublicense, and/or sell
-> copies of the Software, and to permit persons to whom
-> the Software is furnished to do so,
-> subject to the following conditions:
->
-> The above copyright notice and this permission notice
-> shall be included in all copies or substantial portions of the Software.
->
-> THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
-> EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
-> OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
-> IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR
-> ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
-> TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
-> SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-
----------------------------------------
-
## connect
License: MIT
By: TJ Holowaychuk, Douglas Christopher Wilson, Jonathan Ong, Tim Caswell
@@ -1050,13 +1014,6 @@ Repository: micromatch/is-glob
---------------------------------------
-## is-reference
-License: MIT
-By: Rich Harris
-Repository: git+https://github.com/Rich-Harris/is-reference.git
-
----------------------------------------
-
## isexe, which
License: ISC
By: Isaac Z. Schlueter
@@ -1841,6 +1798,38 @@ Repository: kevva/shebang-command
---------------------------------------
+## shell-quote
+License: MIT
+By: James Halliday
+Repository: http://github.com/ljharb/shell-quote.git
+
+> The MIT License
+>
+> Copyright (c) 2013 James Halliday (mail@substack.net)
+>
+> Permission is hereby granted, free of charge,
+> to any person obtaining a copy of this software and
+> associated documentation files (the "Software"), to
+> deal in the Software without restriction, including
+> without limitation the rights to use, copy, modify,
+> merge, publish, distribute, sublicense, and/or sell
+> copies of the Software, and to permit persons to whom
+> the Software is furnished to do so,
+> subject to the following conditions:
+>
+> The above copyright notice and this permission notice
+> shall be included in all copies or substantial portions of the Software.
+>
+> THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+> EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
+> OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
+> IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR
+> ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
+> TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
+> SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+
+---------------------------------------
+
## sirv
License: MIT
By: Luke Edwards
diff --git a/packages/vite/package.json b/packages/vite/package.json
index 84499dc68ab5ea..12b74057c01aa4 100644
--- a/packages/vite/package.json
+++ b/packages/vite/package.json
@@ -1,10 +1,10 @@
{
- "name": "vite",
- "version": "7.1.9",
+ "name": "rolldown-vite",
+ "version": "7.1.16",
"type": "module",
"license": "MIT",
"author": "Evan You",
- "description": "Native-ESM powered web dev build tool",
+ "description": "Vite on Rolldown preview",
"bin": {
"vite": "bin/vite.js"
},
@@ -24,6 +24,7 @@
"types": "./client.d.ts"
},
"./module-runner": "./dist/node/module-runner.js",
+ "./internal": "./dist/node/internal.js",
"./dist/client/*": "./dist/client/*",
"./types/*": {
"types": "./types/*"
@@ -58,11 +59,11 @@
},
"repository": {
"type": "git",
- "url": "git+https://github.com/vitejs/vite.git",
+ "url": "git+https://github.com/vitejs/rolldown-vite.git",
"directory": "packages/vite"
},
"bugs": {
- "url": "https://github.com/vitejs/vite/issues"
+ "url": "https://github.com/vitejs/rolldown-vite/issues"
},
"homepage": "https://vite.dev",
"funding": "https://github.com/vitejs/vite?sponsor=1",
@@ -81,11 +82,12 @@
},
"//": "READ CONTRIBUTING.md to understand what to put under deps vs. devDeps!",
"dependencies": {
- "esbuild": "^0.25.0",
+ "@oxc-project/runtime": "0.92.0",
"fdir": "^6.5.0",
+ "lightningcss": "^1.30.2",
"picomatch": "^4.0.3",
"postcss": "^8.5.6",
- "rollup": "^4.43.0",
+ "rolldown": "1.0.0-beta.42",
"tinyglobby": "^0.2.15"
},
"optionalDependencies": {
@@ -95,9 +97,9 @@
"@babel/parser": "^7.28.4",
"@jridgewell/remapping": "^2.3.5",
"@jridgewell/trace-mapping": "^0.3.31",
- "@oxc-project/types": "0.90.0",
+ "@oxc-project/types": "0.94.0",
"@polka/compression": "^1.0.0-next.25",
- "@rolldown/pluginutils": "^1.0.0-beta.41",
+ "@rolldown/pluginutils": "^1.0.0-beta.42",
"@rollup/plugin-alias": "^5.1.1",
"@rollup/plugin-commonjs": "^28.0.6",
"@rollup/plugin-dynamic-import-vars": "2.1.4",
@@ -117,13 +119,13 @@
"dotenv": "^17.2.3",
"dotenv-expand": "^12.0.3",
"es-module-lexer": "^1.7.0",
+ "esbuild": "^0.25.0",
"escape-html": "^1.0.3",
"estree-walker": "^3.0.3",
"etag": "^1.8.1",
"host-validation-middleware": "^0.1.1",
"http-proxy-3": "^1.21.1",
"launch-editor-middleware": "^2.11.1",
- "lightningcss": "^1.30.2",
"magic-string": "^0.30.19",
"mlly": "^1.8.0",
"mrmime": "^2.0.1",
@@ -138,8 +140,8 @@
"postcss-modules": "^6.0.1",
"premove": "^4.0.0",
"resolve.exports": "^2.0.3",
- "rolldown": "^1.0.0-beta.41",
"rolldown-plugin-dts": "^0.16.11",
+ "rollup": "^4.43.0",
"rollup-plugin-license": "^3.6.0",
"sass": "^1.93.2",
"sass-embedded": "^1.93.2",
@@ -153,9 +155,9 @@
},
"peerDependencies": {
"@types/node": "^20.19.0 || >=22.12.0",
+ "esbuild": "^0.25.0",
"jiti": ">=1.21.0",
"less": "^4.0.0",
- "lightningcss": "^1.21.0",
"sass": "^1.70.0",
"sass-embedded": "^1.70.0",
"stylus": ">=0.54.8",
@@ -168,6 +170,9 @@
"@types/node": {
"optional": true
},
+ "esbuild": {
+ "optional": true
+ },
"jiti": {
"optional": true
},
@@ -186,9 +191,6 @@
"sugarss": {
"optional": true
},
- "lightningcss": {
- "optional": true
- },
"terser": {
"optional": true
},
diff --git a/packages/vite/rolldown.config.ts b/packages/vite/rolldown.config.ts
index 94a462a81a0786..3891da4d0026d9 100644
--- a/packages/vite/rolldown.config.ts
+++ b/packages/vite/rolldown.config.ts
@@ -74,6 +74,7 @@ const nodeConfig = defineConfig({
input: {
index: path.resolve(__dirname, 'src/node/index.ts'),
cli: path.resolve(__dirname, 'src/node/cli.ts'),
+ internal: path.resolve(__dirname, 'src/node/internalIndex.ts'),
},
resolve: {
alias: {
@@ -82,9 +83,8 @@ const nodeConfig = defineConfig({
},
},
external: [
- /^vite\//,
'fsevents',
- 'rollup/parseAst',
+ /^rolldown\//,
/^tsx\//,
/^#/,
'sugarss', // postcss-import -> sugarss
@@ -95,6 +95,14 @@ const nodeConfig = defineConfig({
...Object.keys(pkg.peerDependencies),
],
plugins: [
+ {
+ name: 'externalize-vite',
+ resolveId(id) {
+ if (id.startsWith('vite/')) {
+ return { id: id.replace(/^vite\//, 'rolldown-vite/'), external: true }
+ }
+ },
+ },
shimDepsPlugin({
'postcss-load-config/src/req.js': [
{
@@ -147,7 +155,7 @@ const moduleRunnerConfig = defineConfig({
external: [
'fsevents',
'lightningcss',
- 'rollup/parseAst',
+ /^rolldown\//,
...Object.keys(pkg.dependencies),
],
plugins: [bundleSizeLimit(54), enableSourceMapsInWatchModePlugin()],
diff --git a/packages/vite/rolldown.dts.config.ts b/packages/vite/rolldown.dts.config.ts
index 49143888179b7a..d0d71d7dee9f0e 100644
--- a/packages/vite/rolldown.dts.config.ts
+++ b/packages/vite/rolldown.dts.config.ts
@@ -27,8 +27,7 @@ const pkg = JSON.parse(
const external = [
/^node:*/,
- /^vite\//,
- 'rollup/parseAst',
+ /^rolldown\//,
...Object.keys(pkg.dependencies),
...Object.keys(pkg.peerDependencies),
]
@@ -37,6 +36,7 @@ export default defineConfig({
input: {
index: './src/node/index.ts',
'module-runner': './src/module-runner/index.ts',
+ internal: './src/node/internalIndex.ts',
},
output: {
dir: './dist/node',
@@ -47,6 +47,20 @@ export default defineConfig({
},
external,
plugins: [
+ {
+ name: 'externalize-vite',
+ resolveId: {
+ order: 'pre',
+ handler(id) {
+ if (id.startsWith('vite/')) {
+ return {
+ id: id.replace(/^vite\//, 'rolldown-vite/'),
+ external: true,
+ }
+ }
+ },
+ },
+ },
patchTypes(),
addNodePrefix(),
dts({
@@ -76,14 +90,16 @@ const identifierWithTrailingDollarRE = /\b(\w+)\$\d+\b/g
* the module that imports the identifier as a named import alias
*/
const identifierReplacements: Record> = {
- rollup: {
- Plugin$2: 'Rollup.Plugin',
- TransformResult$1: 'Rollup.TransformResult',
+ 'rolldown-vite/module-runner': {
+ FetchResult$1: 'moduleRunner_FetchResult',
+ },
+ rolldown: {
+ Plugin$2: 'Rolldown.Plugin',
+ TransformResult$1: 'Rolldown.TransformResult',
},
- esbuild: {
- TransformResult$2: 'esbuild_TransformResult',
- TransformOptions$1: 'esbuild_TransformOptions',
- BuildOptions$1: 'esbuild_BuildOptions',
+ 'rolldown/experimental': {
+ TransformOptions$1: 'rolldown_experimental_TransformOptions',
+ TransformResult$2: 'rolldown_experimental_TransformResult',
},
'node:http': {
Server$1: 'http.Server',
@@ -96,9 +112,6 @@ const identifierReplacements: Record> = {
'node:url': {
URL$1: 'url_URL',
},
- 'vite/module-runner': {
- FetchResult$1: 'moduleRunner_FetchResult',
- },
'../../types/hmrPayload.js': {
CustomPayload$1: 'hmrPayload_CustomPayload',
HotPayload$1: 'hmrPayload_HotPayload',
@@ -106,6 +119,9 @@ const identifierReplacements: Record> = {
'../../types/customEvent.js': {
InferCustomEventPayload$1: 'hmrPayload_InferCustomEventPayload',
},
+ '../../types/internal/esbuildOptions.js': {
+ EsbuildTransformOptions$1: 'esbuildOptions_EsbuildTransformOptions',
+ },
'../../types/internal/lightningcssOptions.js': {
LightningCSSOptions$1: 'lightningcssOptions_LightningCSSOptions',
},
@@ -146,8 +162,11 @@ function patchTypes(): Plugin {
}
// Ambient types are unbundled and externalized
if (id.startsWith('types/')) {
+ const filename = id.replace(/(\.m?js)?$/, (_m, ext) =>
+ ext ? ext : '.js',
+ )
return {
- id: '../../' + (id.endsWith('.js') ? id : id + '.js'),
+ id: '../../' + filename,
external: true,
}
}
@@ -163,8 +182,8 @@ function patchTypes(): Plugin {
const importBindings = getAllImportBindings(ast)
if (
chunk.fileName.startsWith('module-runner') ||
- // index and moduleRunner have a common chunk "moduleRunnerTransport"
- chunk.fileName.startsWith('moduleRunnerTransport') ||
+ // index and moduleRunner have a common chunk "moduleRunnerTransport-"
+ chunk.fileName.startsWith('moduleRunnerTransport-') ||
chunk.fileName.startsWith('types.d-')
) {
validateRunnerChunk.call(this, chunk, importBindings)
@@ -236,7 +255,7 @@ function validateRunnerChunk(
!id.startsWith('./') &&
!id.startsWith('../') &&
// index and moduleRunner have a common chunk "moduleRunnerTransport"
- !id.startsWith('moduleRunnerTransport.d') &&
+ !id.startsWith('moduleRunnerTransport-') &&
!id.startsWith('types.d')
) {
this.warn(
@@ -262,7 +281,7 @@ function validateChunkImports(
!id.startsWith('../') &&
!id.startsWith('node:') &&
!id.startsWith('types.d') &&
- !id.startsWith('vite/') &&
+ !id.startsWith('rolldown-vite/') &&
// index and moduleRunner have a common chunk "moduleRunnerTransport"
!id.startsWith('moduleRunnerTransport.d') &&
!deps.includes(id) &&
@@ -287,43 +306,46 @@ function replaceConfusingTypeNames(
chunk: OutputChunk,
importBindings: ImportBindings[],
) {
- for (const modName in identifierReplacements) {
- const imp = importBindings.filter((imp) => imp.id === modName)
- // Validate that `identifierReplacements` is not outdated if there's no match
- if (imp.length === 0) {
- this.warn(
- `${chunk.fileName} does not import "${modName}" for replacement`,
- )
- process.exitCode = 1
- continue
- }
-
- const replacements = identifierReplacements[modName]
- for (const id in replacements) {
+ const isInternalEntry = chunk.fileName.startsWith('internal.')
+ if (!isInternalEntry) {
+ for (const modName in identifierReplacements) {
+ const imp = importBindings.filter((imp) => imp.id === modName)
// Validate that `identifierReplacements` is not outdated if there's no match
- if (!imp.some((i) => i.locals.includes(id))) {
+ if (imp.length === 0) {
this.warn(
- `${chunk.fileName} does not import "${id}" from "${modName}" for replacement`,
+ `${chunk.fileName} does not import "${modName}" for replacement`,
)
process.exitCode = 1
continue
}
- const betterId = replacements[id]
- const regexEscapedId = escapeRegex(id)
- // If the better id accesses a namespace, the existing `Foo as Foo$1`
- // named import cannot be replaced with `Foo as Namespace.Foo`, so we
- // pre-emptively remove the whole named import
- if (betterId.includes('.')) {
+ const replacements = identifierReplacements[modName]
+ for (const id in replacements) {
+ // Validate that `identifierReplacements` is not outdated if there's no match
+ if (!imp.some((i) => i.locals.includes(id))) {
+ this.warn(
+ `${chunk.fileName} does not import "${id}" from "${modName}" for replacement`,
+ )
+ process.exitCode = 1
+ continue
+ }
+
+ const betterId = replacements[id]
+ const regexEscapedId = escapeRegex(id)
+ // If the better id accesses a namespace, the existing `Foo as Foo$1`
+ // named import cannot be replaced with `Foo as Namespace.Foo`, so we
+ // pre-emptively remove the whole named import
+ if (betterId.includes('.')) {
+ chunk.code = chunk.code.replace(
+ new RegExp(`\\b\\w+\\b as ${regexEscapedId},?\\s?`),
+ '',
+ )
+ }
chunk.code = chunk.code.replace(
- new RegExp(`\\b\\w+\\b as ${regexEscapedId},?\\s?`),
- '',
+ new RegExp(`\\b${regexEscapedId}\\b`, 'g'),
+ betterId,
)
}
- chunk.code = chunk.code.replace(
- new RegExp(`\\b${regexEscapedId}\\b`, 'g'),
- betterId,
- )
}
}
@@ -343,16 +365,21 @@ function replaceConfusingTypeNames(
)
process.exitCode = 1
}
- const notUsedConfusingTypeNames = ignoreConfusingTypeNames.filter(
- (id) => !identifiers.includes(id),
- )
- // Validate that `identifierReplacements` is not outdated if there's no match
- if (notUsedConfusingTypeNames.length) {
- const notUsedStr = notUsedConfusingTypeNames
- .map((id) => `\n- ${id}`)
- .join('')
- this.warn(`${chunk.fileName} contains unused identifier names${notUsedStr}`)
- process.exitCode = 1
+
+ if (!isInternalEntry) {
+ const notUsedConfusingTypeNames = ignoreConfusingTypeNames.filter(
+ (id) => !identifiers.includes(id),
+ )
+ // Validate that `identifierReplacements` is not outdated if there's no match
+ if (notUsedConfusingTypeNames.length) {
+ const notUsedStr = notUsedConfusingTypeNames
+ .map((id) => `\n- ${id}`)
+ .join('')
+ this.warn(
+ `${chunk.fileName} contains unused identifier names${notUsedStr}`,
+ )
+ process.exitCode = 1
+ }
}
}
diff --git a/packages/vite/src/node/__tests__/build.spec.ts b/packages/vite/src/node/__tests__/build.spec.ts
index 0c2edac753fdff..c45d14ae6a50c1 100644
--- a/packages/vite/src/node/__tests__/build.spec.ts
+++ b/packages/vite/src/node/__tests__/build.spec.ts
@@ -8,10 +8,10 @@ import type {
LogLevel,
OutputChunk,
OutputOptions,
+ RolldownOptions,
+ RolldownOutput,
RollupLog,
- RollupOptions,
- RollupOutput,
-} from 'rollup'
+} from 'rolldown'
import type { LibraryFormats, LibraryOptions } from '../build'
import {
build,
@@ -62,7 +62,7 @@ describe('build', () => {
},
},
],
- })) as RollupOutput
+ })) as RolldownOutput
}
const result = await Promise.all([
buildProject('red'),
@@ -121,7 +121,7 @@ describe('build', () => {
},
},
],
- })) as RollupOutput
+ })) as RolldownOutput
}
const result = await Promise.all([
buildProject('yellow'),
@@ -131,13 +131,13 @@ describe('build', () => {
{
"changed": [
"index",
- "_foo",
"_bar",
+ "_foo",
"_baz.css",
],
"unchanged": [
- "_foo.css",
"_bar.css",
+ "_foo.css",
"undefined",
],
}
@@ -198,7 +198,7 @@ describe('build', () => {
},
},
],
- })) as RollupOutput
+ })) as RolldownOutput
const foo = esBundle.output.find(
(chunk) => chunk.type === 'chunk' && chunk.isEntry,
@@ -245,7 +245,7 @@ describe('build', () => {
},
},
],
- })) as RollupOutput[]
+ })) as RolldownOutput[]
const foo = esBundle.output.find(
(chunk) => chunk.fileName === 'foo.js',
@@ -756,7 +756,7 @@ describe('resolveBuildOutputs', () => {
},
})
const result = await builder.build(builder.environments.ssr)
- expect((result as RollupOutput).output[0].code).not.toContain('preload')
+ expect((result as RolldownOutput).output[0].code).not.toContain('preload')
})
test('ssr custom', async () => {
@@ -777,7 +777,7 @@ describe('resolveBuildOutputs', () => {
},
})
const result = await builder.build(builder.environments.custom)
- expect((result as RollupOutput).output[0].code).not.toContain('preload')
+ expect((result as RolldownOutput).output[0].code).not.toContain('preload')
})
})
@@ -858,10 +858,10 @@ test.for([true, false])(
const custom1 = await builder.build(builder.environments.custom1)
const custom2 = await builder.build(builder.environments.custom2)
expect(
- ([client, ssr, custom1, custom2] as RollupOutput[]).map(
+ ([client, ssr, custom1, custom2] as RolldownOutput[]).map(
(o) => o.output[0].code.split('\n').length,
),
- ).toEqual([2, 5, 2, 5])
+ ).toEqual([1, 6, 1, 6])
},
)
@@ -932,7 +932,7 @@ test('sharedConfigBuild and emitAssets', async () => {
])
})
-test('adjust worker build error for worker.format', async () => {
+test.skip('adjust worker build error for worker.format', async () => {
try {
await build({
root: resolve(__dirname, 'fixtures/worker-dynamic'),
@@ -961,7 +961,7 @@ describe('onRollupLog', () => {
level: LogLevel | 'error',
message: string | RollupLog,
logger: Logger,
- options?: Pick,
+ options?: Pick,
) => {
await build({
root: resolve(__dirname, 'packages/build-project'),
@@ -1046,7 +1046,7 @@ describe('onRollupLog', () => {
},
})
expect(onLogInfo).toBeCalledWith(
- expect.objectContaining({ message: `[plugin ${pluginName}] ${msgInfo}` }),
+ expect.objectContaining({ message: msgInfo, plugin: pluginName }),
)
})
@@ -1060,7 +1060,7 @@ describe('onRollupLog', () => {
},
})
expect(onWarn).toBeCalledWith(
- expect.objectContaining({ message: `[plugin ${pluginName}] ${msgWarn}` }),
+ expect.objectContaining({ message: msgWarn, plugin: pluginName }),
)
})
@@ -1071,7 +1071,7 @@ describe('onRollupLog', () => {
code: 'UNRESOLVED_IMPORT',
message: 'test',
}),
- ).rejects.toThrowError(/Rollup failed to resolve import/)
+ ).rejects.toThrowError(/Rolldown failed to resolve import/)
})
test.each([[`Unsupported expression`], [`statically analyzed`]])(
@@ -1126,7 +1126,7 @@ test('watch rebuild manifest', async (ctx) => {
},
})
- function getManifestKeys(output: RollupOutput) {
+ function getManifestKeys(output: RolldownOutput) {
return Object.keys(
JSON.parse(
(output.output.find((o) => o.fileName === '.vite/manifest.json') as any)
@@ -1136,7 +1136,7 @@ test('watch rebuild manifest', async (ctx) => {
}
const result = await builder.build(builder.environments.client)
- expect(getManifestKeys(result as RollupOutput)).toMatchInlineSnapshot(`
+ expect(getManifestKeys(result as RolldownOutput)).toMatchInlineSnapshot(`
[
"dep.js",
"entry.js",
@@ -1154,7 +1154,7 @@ test('watch rebuild manifest', async (ctx) => {
})
const result2 = await builder.build(builder.environments.client)
- expect(getManifestKeys(result2 as RollupOutput)).toMatchInlineSnapshot(`
+ expect(getManifestKeys(result2 as RolldownOutput)).toMatchInlineSnapshot(`
[
"entry.js",
]
@@ -1166,8 +1166,8 @@ test('watch rebuild manifest', async (ctx) => {
* ensure that the chunk code is the same. if not, the chunk hash should have changed.
*/
function assertOutputHashContentChange(
- output1: RollupOutput,
- output2: RollupOutput,
+ output1: RolldownOutput,
+ output2: RolldownOutput,
) {
for (const chunk of output1.output) {
if (chunk.type === 'chunk') {
@@ -1184,7 +1184,10 @@ function assertOutputHashContentChange(
}
}
-function getOutputHashChanges(output1: RollupOutput, output2: RollupOutput) {
+function getOutputHashChanges(
+ output1: RolldownOutput,
+ output2: RolldownOutput,
+) {
const map1 = Object.fromEntries(
output1.output.map((o) => [o.name, o.fileName]),
)
diff --git a/packages/vite/src/node/__tests__/config.spec.ts b/packages/vite/src/node/__tests__/config.spec.ts
index fddf467e130fda..913a20f7d8b13d 100644
--- a/packages/vite/src/node/__tests__/config.spec.ts
+++ b/packages/vite/src/node/__tests__/config.spec.ts
@@ -309,6 +309,311 @@ describe('mergeConfig', () => {
),
).toThrowError('Cannot merge config in form of callback')
})
+
+ test('handles `rollupOptions`', () => {
+ const baseConfig = defineConfig({
+ build: {
+ rollupOptions: {
+ treeshake: false,
+ },
+ },
+ worker: {
+ rollupOptions: {
+ treeshake: false,
+ },
+ },
+ optimizeDeps: {
+ rollupOptions: {
+ treeshake: false,
+ },
+ },
+ ssr: {
+ optimizeDeps: {
+ rollupOptions: {
+ treeshake: false,
+ },
+ },
+ },
+ })
+
+ const newConfig = defineConfig({
+ build: {
+ rollupOptions: {
+ output: {
+ minifyInternalExports: true,
+ },
+ },
+ },
+ worker: {
+ rollupOptions: {
+ output: {
+ minifyInternalExports: true,
+ },
+ },
+ },
+ optimizeDeps: {
+ rollupOptions: {
+ output: {
+ minifyInternalExports: true,
+ },
+ },
+ },
+ ssr: {
+ optimizeDeps: {
+ rollupOptions: {
+ output: {
+ minifyInternalExports: true,
+ },
+ },
+ },
+ },
+ })
+
+ const mergedConfig = mergeConfig(baseConfig, newConfig)
+
+ const expected = {
+ treeshake: false,
+ output: {
+ minifyInternalExports: true,
+ },
+ }
+ expect(mergedConfig.build.rollupOptions).toStrictEqual(expected)
+ expect(mergedConfig.build.rolldownOptions).toStrictEqual(expected)
+ expect(mergedConfig.worker.rollupOptions).toStrictEqual(expected)
+ expect(mergedConfig.worker.rolldownOptions).toStrictEqual(expected)
+ expect(mergedConfig.optimizeDeps.rollupOptions).toStrictEqual(expected)
+ expect(mergedConfig.optimizeDeps.rolldownOptions).toStrictEqual(expected)
+ expect(mergedConfig.ssr.optimizeDeps.rollupOptions).toStrictEqual(expected)
+ expect(mergedConfig.ssr.optimizeDeps.rolldownOptions).toStrictEqual(
+ expected,
+ )
+ })
+
+ test('handles `build.rolldownOptions`', () => {
+ const baseConfig = defineConfig({
+ build: {
+ rolldownOptions: {
+ treeshake: false,
+ },
+ },
+ worker: {
+ rolldownOptions: {
+ treeshake: false,
+ },
+ },
+ optimizeDeps: {
+ rolldownOptions: {
+ treeshake: false,
+ },
+ },
+ ssr: {
+ optimizeDeps: {
+ rolldownOptions: {
+ treeshake: false,
+ },
+ },
+ },
+ })
+
+ const newConfig = defineConfig({
+ build: {
+ rolldownOptions: {
+ output: {
+ minifyInternalExports: true,
+ },
+ },
+ },
+ worker: {
+ rolldownOptions: {
+ output: {
+ minifyInternalExports: true,
+ },
+ },
+ },
+ optimizeDeps: {
+ rolldownOptions: {
+ output: {
+ minifyInternalExports: true,
+ },
+ },
+ },
+ ssr: {
+ optimizeDeps: {
+ rolldownOptions: {
+ output: {
+ minifyInternalExports: true,
+ },
+ },
+ },
+ },
+ })
+
+ const mergedConfig = mergeConfig(baseConfig, newConfig)
+
+ const expected = {
+ treeshake: false,
+ output: {
+ minifyInternalExports: true,
+ },
+ }
+ expect(mergedConfig.build.rollupOptions).toStrictEqual(expected)
+ expect(mergedConfig.build.rolldownOptions).toStrictEqual(expected)
+ expect(mergedConfig.worker.rollupOptions).toStrictEqual(expected)
+ expect(mergedConfig.worker.rolldownOptions).toStrictEqual(expected)
+ expect(mergedConfig.optimizeDeps.rollupOptions).toStrictEqual(expected)
+ expect(mergedConfig.optimizeDeps.rolldownOptions).toStrictEqual(expected)
+ expect(mergedConfig.ssr.optimizeDeps.rollupOptions).toStrictEqual(expected)
+ expect(mergedConfig.ssr.optimizeDeps.rolldownOptions).toStrictEqual(
+ expected,
+ )
+ })
+
+ test('syncs `build.rollupOptions` and `build.rolldownOptions`', () => {
+ const baseConfig = defineConfig({
+ build: {
+ rollupOptions: {
+ treeshake: false,
+ },
+ },
+ worker: {
+ rollupOptions: {
+ treeshake: false,
+ },
+ },
+ optimizeDeps: {
+ rollupOptions: {
+ treeshake: false,
+ },
+ },
+ ssr: {
+ optimizeDeps: {
+ rollupOptions: {
+ treeshake: false,
+ },
+ },
+ },
+ })
+
+ const newConfig = defineConfig({
+ build: {
+ rolldownOptions: {
+ output: {
+ minifyInternalExports: true,
+ },
+ },
+ },
+ worker: {
+ rolldownOptions: {
+ output: {
+ minifyInternalExports: true,
+ },
+ },
+ },
+ optimizeDeps: {
+ rolldownOptions: {
+ output: {
+ minifyInternalExports: true,
+ },
+ },
+ },
+ ssr: {
+ optimizeDeps: {
+ rollupOptions: {
+ output: {
+ minifyInternalExports: true,
+ },
+ },
+ },
+ },
+ })
+
+ const mergedConfig = mergeConfig(baseConfig, newConfig) as UserConfig
+
+ const expected = {
+ treeshake: false,
+ output: {
+ minifyInternalExports: true,
+ },
+ }
+ expect(mergedConfig.build!.rollupOptions).toStrictEqual(expected)
+ expect(mergedConfig.build!.rolldownOptions).toStrictEqual(expected)
+ expect(mergedConfig.worker!.rollupOptions).toStrictEqual(expected)
+ expect(mergedConfig.worker!.rolldownOptions).toStrictEqual(expected)
+ expect(mergedConfig.optimizeDeps!.rollupOptions).toStrictEqual(expected)
+ expect(mergedConfig.optimizeDeps!.rolldownOptions).toStrictEqual(expected)
+ expect(mergedConfig.ssr!.optimizeDeps!.rollupOptions).toStrictEqual(
+ expected,
+ )
+ expect(mergedConfig.ssr!.optimizeDeps!.rolldownOptions).toStrictEqual(
+ expected,
+ )
+
+ const upOutput = mergedConfig.build!.rollupOptions!.output!
+ if (Array.isArray(upOutput)) throw new Error()
+ const downOutput = mergedConfig.build!.rolldownOptions!.output!
+ if (Array.isArray(downOutput)) throw new Error()
+ upOutput.hashCharacters = 'base36'
+ expect(upOutput.hashCharacters).toBe('base36')
+ expect(downOutput.hashCharacters).toBe('base36')
+ })
+
+ test('rollupOptions/rolldownOptions.platform', async () => {
+ const testRollupOptions = await resolveConfig(
+ {
+ plugins: [
+ {
+ name: 'set-rollupOptions-platform',
+ configEnvironment(name) {
+ if (name === 'ssr') {
+ return {
+ build: {
+ rollupOptions: {
+ platform: 'neutral',
+ },
+ },
+ }
+ }
+ },
+ },
+ ],
+ },
+ 'serve',
+ )
+ expect(
+ testRollupOptions.environments.ssr.build.rolldownOptions.platform,
+ ).toBe('neutral')
+ expect(
+ testRollupOptions.environments.client.build.rolldownOptions.platform,
+ ).toBe('browser')
+
+ const testRolldownOptions = await resolveConfig(
+ {
+ plugins: [
+ {
+ name: 'set-rollupOptions-platform',
+ configEnvironment(name) {
+ if (name === 'ssr') {
+ return {
+ build: {
+ rolldownOptions: {
+ platform: 'neutral',
+ },
+ },
+ }
+ }
+ },
+ },
+ ],
+ },
+ 'serve',
+ )
+ expect(
+ testRolldownOptions.environments.ssr.build.rolldownOptions.platform,
+ ).toBe('neutral')
+ expect(
+ testRolldownOptions.environments.client.build.rolldownOptions.platform,
+ ).toBe('browser')
+ })
})
describe('resolveEnvPrefix', () => {
@@ -834,7 +1139,7 @@ describe('loadConfigFromFile', () => {
))!
expect(config).toMatchInlineSnapshot(`
{
- "jsonValue": "vite",
+ "jsonValue": "rolldown-vite",
}
`)
})
diff --git a/packages/vite/src/node/__tests__/environment.spec.ts b/packages/vite/src/node/__tests__/environment.spec.ts
index 08bc215ce11409..0d0bc70d8d6c69 100644
--- a/packages/vite/src/node/__tests__/environment.spec.ts
+++ b/packages/vite/src/node/__tests__/environment.spec.ts
@@ -1,6 +1,6 @@
import path from 'node:path'
import { describe, expect, onTestFinished, test } from 'vitest'
-import type { RollupOutput } from 'rollup'
+import type { RolldownOutput } from 'rolldown'
import { createServer } from '../server'
import type { InlineConfig } from '../config'
import { createBuilder } from '../build'
@@ -169,7 +169,7 @@ describe('custom environment conditions', () => {
const results: Record = {}
for (const key of ['ssr', 'worker', 'custom1', 'custom1_2']) {
const output = await builder.build(builder.environments[key])
- const chunk = (output as RollupOutput).output[0]
+ const chunk = (output as RolldownOutput).output[0]
const mod = await import(
path.join(
import.meta.dirname,
diff --git a/packages/vite/src/node/__tests__/plugins/define.spec.ts b/packages/vite/src/node/__tests__/plugins/define.spec.ts
index ca88a177ff7343..a8f309859c5158 100644
--- a/packages/vite/src/node/__tests__/plugins/define.spec.ts
+++ b/packages/vite/src/node/__tests__/plugins/define.spec.ts
@@ -1,4 +1,5 @@
import { describe, expect, test } from 'vitest'
+import { rolldown } from 'rolldown'
import { definePlugin } from '../../plugins/define'
import { resolveConfig } from '../../config'
import { PartialEnvironment } from '../../baseEnvironment'
@@ -16,26 +17,57 @@ async function createDefinePluginTransform(
const environment = new PartialEnvironment(ssr ? 'ssr' : 'client', config)
return async (code: string) => {
- // @ts-expect-error transform.handler should exist
- const result = await instance.transform.handler.call(
- { environment },
- code,
- 'foo.ts',
- )
- return result?.code || result
+ if (process.env._VITE_TEST_JS_PLUGIN) {
+ // @ts-expect-error transform.handler should exist
+ const result = await instance.transform.handler.call(
+ { environment },
+ code,
+ 'foo.ts',
+ )
+ return result?.code || result
+ } else {
+ const bundler = await rolldown({
+ input: 'entry.js',
+ plugins: [
+ {
+ name: 'test',
+ resolveId(id) {
+ if (id === 'entry.js') {
+ return '\0' + id
+ }
+ },
+ load(id) {
+ if (id === '\0entry.js') {
+ return code
+ }
+ },
+ },
+ {
+ name: 'native:define',
+ options: (definePlugin(config).options! as any).bind({
+ environment,
+ }),
+ },
+ ],
+ experimental: {
+ attachDebugInfo: 'none',
+ },
+ })
+ return (await bundler.generate()).output[0].code
+ }
}
}
-describe('definePlugin', () => {
+describe.skipIf(!process.env._VITE_TEST_JS_PLUGIN)('definePlugin', () => {
test('replaces custom define', async () => {
const transform = await createDefinePluginTransform({
__APP_VERSION__: JSON.stringify('1.0'),
})
- expect(await transform('const version = __APP_VERSION__ ;')).toBe(
- 'const version = "1.0";\n',
+ expect(await transform('export const version = __APP_VERSION__ ;')).toBe(
+ 'export const version = "1.0";\n',
)
- expect(await transform('const version = __APP_VERSION__;')).toBe(
- 'const version = "1.0";\n',
+ expect(await transform('export const version = __APP_VERSION__;')).toBe(
+ 'export const version = "1.0";\n',
)
})
@@ -43,45 +75,47 @@ describe('definePlugin', () => {
const transform = await createDefinePluginTransform({
__APP_VERSION__: JSON.stringify('1.0'),
})
- expect(await transform('const version = "1.0";')).toBe(undefined)
- expect(await transform('const version = import.meta.SOMETHING')).toBe(
- undefined,
- )
+ expect(await transform('export const version = "1.0";')).toBe(undefined)
+ expect(
+ await transform('export const version = import.meta.SOMETHING'),
+ ).toBe(undefined)
})
test('replaces import.meta.env.SSR with false', async () => {
const transform = await createDefinePluginTransform()
- expect(await transform('const isSSR = import.meta.env.SSR;')).toBe(
- 'const isSSR = false;\n',
+ expect(await transform('export const isSSR = import.meta.env.SSR;')).toBe(
+ 'export const isSSR = false;\n',
)
})
test('preserve import.meta.hot with override', async () => {
// assert that the default behavior is to replace import.meta.hot with undefined
const transform = await createDefinePluginTransform()
- expect(await transform('const hot = import.meta.hot;')).toBe(
- 'const hot = void 0;\n',
+ expect(await transform('export const hot = import.meta.hot;')).toBe(
+ 'export const hot = void 0;\n',
)
// assert that we can specify a user define to preserve import.meta.hot
const overrideTransform = await createDefinePluginTransform({
'import.meta.hot': 'import.meta.hot',
})
- expect(await overrideTransform('const hot = import.meta.hot;')).toBe(
- 'const hot = import.meta.hot;\n',
+ expect(await overrideTransform('export const hot = import.meta.hot;')).toBe(
+ 'export const hot = import.meta.hot;\n',
)
})
test('replace import.meta.env.UNKNOWN with undefined', async () => {
const transform = await createDefinePluginTransform()
- expect(await transform('const foo = import.meta.env.UNKNOWN;')).toBe(
- 'const foo = undefined ;\n',
+ expect(await transform('export const foo = import.meta.env.UNKNOWN;')).toBe(
+ 'export const foo = undefined ;\n',
)
})
test('leave import.meta.env["UNKNOWN"] to runtime', async () => {
const transform = await createDefinePluginTransform()
- expect(await transform('const foo = import.meta.env["UNKNOWN"];')).toMatch(
- /const __vite_import_meta_env__ = .*;\nconst foo = __vite_import_meta_env__\["UNKNOWN"\];/,
+ expect(
+ await transform('export const foo = import.meta.env["UNKNOWN"];'),
+ ).toMatch(
+ /const __vite_import_meta_env__ = .*;\nexport const foo = __vite_import_meta_env__\["UNKNOWN"\];/,
)
})
@@ -89,8 +123,8 @@ describe('definePlugin', () => {
const transform = await createDefinePluginTransform({
'import.meta.env.UNKNOWN': 'import.meta.env.UNKNOWN',
})
- expect(await transform('const foo = import.meta.env.UNKNOWN;')).toBe(
- 'const foo = import.meta.env.UNKNOWN;\n',
+ expect(await transform('export const foo = import.meta.env.UNKNOWN;')).toBe(
+ 'export const foo = import.meta.env.UNKNOWN;\n',
)
})
@@ -101,10 +135,10 @@ describe('definePlugin', () => {
expect(
await transform(
- 'const isLegacy = import.meta.env.LEGACY;\nimport.meta.env.UNDEFINED && console.log(import.meta.env.UNDEFINED);',
+ 'export const isLegacy = import.meta.env.LEGACY;\nimport.meta.env.UNDEFINED && console.log(import.meta.env.UNDEFINED);',
),
).toMatchInlineSnapshot(`
- "const isLegacy = __VITE_IS_LEGACY__;
+ "export const isLegacy = __VITE_IS_LEGACY__;
undefined && console.log(undefined );
"
`)
@@ -112,8 +146,8 @@ describe('definePlugin', () => {
test('replace bare import.meta.env', async () => {
const transform = await createDefinePluginTransform()
- expect(await transform('const env = import.meta.env;')).toMatch(
- /const __vite_import_meta_env__ = .*;\nconst env = __vite_import_meta_env__;/,
+ expect(await transform('export const env = import.meta.env;')).toMatch(
+ /const __vite_import_meta_env__ = .*;\nexport const env = __vite_import_meta_env__;/,
)
})
@@ -121,26 +155,143 @@ describe('definePlugin', () => {
const transform = await createDefinePluginTransform()
expect(
await transform(
- 'console.log(__vite_import_meta_env__);\nconst env = import.meta.env;',
+ 'console.log(__vite_import_meta_env__);\nexport const env = import.meta.env;',
+ ),
+ ).toMatch(
+ /const __vite_import_meta_env__1 = .*;\nconsole.log\(__vite_import_meta_env__\);\nexport const env = __vite_import_meta_env__1;/,
+ )
+
+ expect(
+ await transform(
+ 'console.log(__vite_import_meta_env__, __vite_import_meta_env__1);\n export const env = import.meta.env;',
),
).toMatch(
- /const __vite_import_meta_env__1 = .*;\nconsole.log\(__vite_import_meta_env__\);\nconst env = __vite_import_meta_env__1;/,
+ /const __vite_import_meta_env__2 = .*;\nconsole.log\(__vite_import_meta_env__, __vite_import_meta_env__1\);\nexport const env = __vite_import_meta_env__2;/,
+ )
+
+ expect(
+ await transform(
+ 'console.log(__vite_import_meta_env__);\nexport const env = import.meta.env;\nconsole.log(import.meta.env.UNDEFINED);',
+ ),
+ ).toMatch(
+ /const __vite_import_meta_env__1 = .*;\nconsole.log\(__vite_import_meta_env__\);\nexport const env = __vite_import_meta_env__1;\nconsole.log\(undefined {26}\);/,
+ )
+ })
+})
+
+describe.skipIf(process.env._VITE_TEST_JS_PLUGIN)('native definePlugin', () => {
+ test('replaces custom define', async () => {
+ const transform = await createDefinePluginTransform({
+ __APP_VERSION__: JSON.stringify('1.0'),
+ })
+ expect(await transform('export const version = __APP_VERSION__;')).toBe(
+ 'const version = "1.0";\n\nexport { version };',
+ )
+ expect(await transform('export const version = __APP_VERSION__ ;')).toBe(
+ 'const version = "1.0";\n\nexport { version };',
+ )
+ })
+
+ test('should not replace if not defined', async () => {
+ const transform = await createDefinePluginTransform({
+ __APP_VERSION__: JSON.stringify('1.0'),
+ })
+ expect(await transform('export const version = "1.0";')).toBe(
+ 'const version = "1.0";\n\nexport { version };',
+ )
+ expect(
+ await transform('export const version = import.meta.SOMETHING'),
+ ).toBe('const version = import.meta.SOMETHING;\n\nexport { version };')
+ })
+
+ test('replaces import.meta.env.SSR with false', async () => {
+ const transform = await createDefinePluginTransform()
+ expect(await transform('export const isSSR = import.meta.env.SSR;')).toBe(
+ 'const isSSR = false;\n\nexport { isSSR };',
+ )
+ })
+
+ test('preserve import.meta.hot with override', async () => {
+ // assert that the default behavior is to replace import.meta.hot with undefined
+ const transform = await createDefinePluginTransform()
+ expect(await transform('export const hot = import.meta.hot;')).toBe(
+ 'const hot = void 0;\n\nexport { hot };',
)
+ // assert that we can specify a user define to preserve import.meta.hot
+ const overrideTransform = await createDefinePluginTransform({
+ 'import.meta.hot': 'import.meta.hot',
+ })
+ expect(await overrideTransform('export const hot = import.meta.hot;')).toBe(
+ 'const hot = import.meta.hot;\n\nexport { hot };',
+ )
+ })
+
+ test('replace import.meta.env.UNKNOWN with undefined', async () => {
+ const transform = await createDefinePluginTransform()
+ expect(await transform('export const foo = import.meta.env.UNKNOWN;')).toBe(
+ 'const foo = void 0;\n\nexport { foo };',
+ )
+ })
+
+ test('leave import.meta.env["UNKNOWN"] to runtime', async () => {
+ const transform = await createDefinePluginTransform()
+ expect(
+ await transform('export const foo = import.meta.env["UNKNOWN"];'),
+ ).toMatch(/const foo = .*\["UNKNOWN"\];\n\nexport \{ foo \};/s)
+ })
+
+ test('preserve import.meta.env.UNKNOWN with override', async () => {
+ const transform = await createDefinePluginTransform({
+ 'import.meta.env.UNKNOWN': 'import.meta.env.UNKNOWN',
+ })
+ expect(await transform('export const foo = import.meta.env.UNKNOWN;')).toBe(
+ 'const foo = import.meta.env.UNKNOWN;\n\nexport { foo };',
+ )
+ })
+
+ test('replace import.meta.env when it is a invalid json', async () => {
+ const transform = await createDefinePluginTransform({
+ 'import.meta.env.LEGACY': '__VITE_IS_LEGACY__',
+ })
+
+ expect(
+ await transform(
+ 'export const isLegacy = import.meta.env.LEGACY;\nimport.meta.env.UNDEFINED && console.log(import.meta.env.UNDEFINED);',
+ ),
+ ).toMatchInlineSnapshot(
+ `"const isLegacy = __VITE_IS_LEGACY__;\n\nexport { isLegacy };"`,
+ )
+ })
+
+ test('replace bare import.meta.env', async () => {
+ const transform = await createDefinePluginTransform()
+ expect(await transform('export const env = import.meta.env;')).toMatch(
+ /const env = .*;\n\nexport \{ env \};/s,
+ )
+ })
+
+ test('already has marker', async () => {
+ const transform = await createDefinePluginTransform()
+ expect(
+ await transform(
+ 'console.log(__vite_import_meta_env__);\nexport const env = import.meta.env;',
+ ),
+ ).toMatch(/console.log\(__vite_import_meta_env__\);\nconst env = .*/)
expect(
await transform(
- 'console.log(__vite_import_meta_env__, __vite_import_meta_env__1);\n const env = import.meta.env;',
+ 'console.log(__vite_import_meta_env__, __vite_import_meta_env__1);\n export const env = import.meta.env;',
),
).toMatch(
- /const __vite_import_meta_env__2 = .*;\nconsole.log\(__vite_import_meta_env__, __vite_import_meta_env__1\);\nconst env = __vite_import_meta_env__2;/,
+ /console.log\(__vite_import_meta_env__, __vite_import_meta_env__1\);\nconst env = .*/,
)
expect(
await transform(
- 'console.log(__vite_import_meta_env__);\nconst env = import.meta.env;\nconsole.log(import.meta.env.UNDEFINED);',
+ 'console.log(__vite_import_meta_env__);\nexport const env = import.meta.env;\nconsole.log(import.meta.env.UNDEFINED);',
),
).toMatch(
- /const __vite_import_meta_env__1 = .*;\nconsole.log\(__vite_import_meta_env__\);\nconst env = __vite_import_meta_env__1;\nconsole.log\(undefined {26}\);/,
+ /console.log\(__vite_import_meta_env__\);\nconst env = .*;\nconsole.log\(void 0\);/s,
)
})
})
diff --git a/packages/vite/src/node/__tests__/plugins/fixtures/oxc-tsconfigs/decorator-metadata/tsconfig.json b/packages/vite/src/node/__tests__/plugins/fixtures/oxc-tsconfigs/decorator-metadata/tsconfig.json
new file mode 100644
index 00000000000000..6dacb8cc2c548f
--- /dev/null
+++ b/packages/vite/src/node/__tests__/plugins/fixtures/oxc-tsconfigs/decorator-metadata/tsconfig.json
@@ -0,0 +1,6 @@
+{
+ "compilerOptions": {
+ "experimentalDecorators": true,
+ "emitDecoratorMetadata": true
+ }
+}
diff --git a/packages/vite/src/node/__tests__/plugins/fixtures/oxc-tsconfigs/empty/tsconfig.json b/packages/vite/src/node/__tests__/plugins/fixtures/oxc-tsconfigs/empty/tsconfig.json
new file mode 100644
index 00000000000000..0967ef424bce67
--- /dev/null
+++ b/packages/vite/src/node/__tests__/plugins/fixtures/oxc-tsconfigs/empty/tsconfig.json
@@ -0,0 +1 @@
+{}
diff --git a/packages/vite/src/node/__tests__/plugins/fixtures/oxc-tsconfigs/jsx-complex-options/tsconfig.json b/packages/vite/src/node/__tests__/plugins/fixtures/oxc-tsconfigs/jsx-complex-options/tsconfig.json
new file mode 100644
index 00000000000000..a224293f4e48ac
--- /dev/null
+++ b/packages/vite/src/node/__tests__/plugins/fixtures/oxc-tsconfigs/jsx-complex-options/tsconfig.json
@@ -0,0 +1,5 @@
+{
+ "compilerOptions": {
+ "jsx": "react-jsx"
+ }
+}
diff --git a/packages/vite/src/node/__tests__/plugins/fixtures/oxc-tsconfigs/jsx-preserve/tsconfig.json b/packages/vite/src/node/__tests__/plugins/fixtures/oxc-tsconfigs/jsx-preserve/tsconfig.json
new file mode 100644
index 00000000000000..186ad251537010
--- /dev/null
+++ b/packages/vite/src/node/__tests__/plugins/fixtures/oxc-tsconfigs/jsx-preserve/tsconfig.json
@@ -0,0 +1,5 @@
+{
+ "compilerOptions": {
+ "jsx": "preserve"
+ }
+}
diff --git a/packages/vite/src/node/__tests__/plugins/fixtures/oxc-tsconfigs/jsx-react-jsx/tsconfig.json b/packages/vite/src/node/__tests__/plugins/fixtures/oxc-tsconfigs/jsx-react-jsx/tsconfig.json
new file mode 100644
index 00000000000000..a6377dd1adcf1b
--- /dev/null
+++ b/packages/vite/src/node/__tests__/plugins/fixtures/oxc-tsconfigs/jsx-react-jsx/tsconfig.json
@@ -0,0 +1,7 @@
+{
+ "compilerOptions": {
+ "jsxFactory": "g",
+ "jsxFragmentFactory": "foo",
+ "jsxImportSource": "baz"
+ }
+}
diff --git a/packages/vite/src/node/__tests__/plugins/fixtures/oxc-tsconfigs/target-es2021/tsconfig.json b/packages/vite/src/node/__tests__/plugins/fixtures/oxc-tsconfigs/target-es2021/tsconfig.json
new file mode 100644
index 00000000000000..ad0827577c94d1
--- /dev/null
+++ b/packages/vite/src/node/__tests__/plugins/fixtures/oxc-tsconfigs/target-es2021/tsconfig.json
@@ -0,0 +1,5 @@
+{
+ "compilerOptions": {
+ "target": "es2021"
+ }
+}
diff --git a/packages/vite/src/node/__tests__/plugins/fixtures/oxc-tsconfigs/target-es2022/tsconfig.json b/packages/vite/src/node/__tests__/plugins/fixtures/oxc-tsconfigs/target-es2022/tsconfig.json
new file mode 100644
index 00000000000000..f75c15e1d689bb
--- /dev/null
+++ b/packages/vite/src/node/__tests__/plugins/fixtures/oxc-tsconfigs/target-es2022/tsconfig.json
@@ -0,0 +1,5 @@
+{
+ "compilerOptions": {
+ "target": "es2022"
+ }
+}
diff --git a/packages/vite/src/node/__tests__/plugins/fixtures/oxc-tsconfigs/target-esnext/tsconfig.json b/packages/vite/src/node/__tests__/plugins/fixtures/oxc-tsconfigs/target-esnext/tsconfig.json
new file mode 100644
index 00000000000000..07b9f80cb05196
--- /dev/null
+++ b/packages/vite/src/node/__tests__/plugins/fixtures/oxc-tsconfigs/target-esnext/tsconfig.json
@@ -0,0 +1,5 @@
+{
+ "compilerOptions": {
+ "target": "esnext"
+ }
+}
diff --git a/packages/vite/src/node/__tests__/plugins/fixtures/oxc-tsconfigs/use-define-false/tsconfig.json b/packages/vite/src/node/__tests__/plugins/fixtures/oxc-tsconfigs/use-define-false/tsconfig.json
new file mode 100644
index 00000000000000..28eb978d59d0fe
--- /dev/null
+++ b/packages/vite/src/node/__tests__/plugins/fixtures/oxc-tsconfigs/use-define-false/tsconfig.json
@@ -0,0 +1,5 @@
+{
+ "compilerOptions": {
+ "useDefineForClassFields": false
+ }
+}
diff --git a/packages/vite/src/node/__tests__/plugins/fixtures/oxc-tsconfigs/use-define-true/tsconfig.json b/packages/vite/src/node/__tests__/plugins/fixtures/oxc-tsconfigs/use-define-true/tsconfig.json
new file mode 100644
index 00000000000000..de4dca88946c03
--- /dev/null
+++ b/packages/vite/src/node/__tests__/plugins/fixtures/oxc-tsconfigs/use-define-true/tsconfig.json
@@ -0,0 +1,5 @@
+{
+ "compilerOptions": {
+ "useDefineForClassFields": true
+ }
+}
diff --git a/packages/vite/src/node/__tests__/plugins/import.spec.ts b/packages/vite/src/node/__tests__/plugins/import.spec.ts
index 156a61ab283539..7429f6aebc35d1 100644
--- a/packages/vite/src/node/__tests__/plugins/import.spec.ts
+++ b/packages/vite/src/node/__tests__/plugins/import.spec.ts
@@ -60,7 +60,7 @@ describe('runTransform', () => {
test('import all specifier', () => {
expect(runTransformCjsImport('import * as react from "react"')).toBe(
'import __vite__cjsImport0_react from "./node_modules/.vite/deps/react.js"; ' +
- `const react = ((m) => m?.__esModule ? m : { ...typeof m === "object" && !Array.isArray(m) || typeof m === "function" ? m : {}, default: m})(__vite__cjsImport0_react)`,
+ `const react = ((m) => m?.__esModule ? m : {\t...typeof m === "object" && !Array.isArray(m) || typeof m === "function" ? m : {},\tdefault: m})(__vite__cjsImport0_react)`,
)
})
diff --git a/packages/vite/src/node/__tests__/plugins/json.spec.ts b/packages/vite/src/node/__tests__/plugins/json.spec.ts
index 644fd1a925084d..c1e27c16a57061 100644
--- a/packages/vite/src/node/__tests__/plugins/json.spec.ts
+++ b/packages/vite/src/node/__tests__/plugins/json.spec.ts
@@ -35,9 +35,10 @@ describe('transform', () => {
opts: Required,
isBuild: boolean,
) => {
- const plugin = jsonPlugin(opts, isBuild)
+ const plugin = jsonPlugin(opts, isBuild, false)
// @ts-expect-error transform.handler should exist
- return plugin.transform.handler(input, 'test.json').code
+ return plugin.transform.handler(input, 'test.json', { moduleType: 'json' })
+ .code
}
test("namedExports: true, stringify: 'auto' should not transformed an array input", () => {
diff --git a/packages/vite/src/node/__tests__/plugins/modulePreloadPolyfill/__snapshots__/modulePreloadPolyfill.spec.ts.snap b/packages/vite/src/node/__tests__/plugins/modulePreloadPolyfill/__snapshots__/modulePreloadPolyfill.spec.ts.snap
index d00d19e409978c..33a76ebf34f4ac 100644
--- a/packages/vite/src/node/__tests__/plugins/modulePreloadPolyfill/__snapshots__/modulePreloadPolyfill.spec.ts.snap
+++ b/packages/vite/src/node/__tests__/plugins/modulePreloadPolyfill/__snapshots__/modulePreloadPolyfill.spec.ts.snap
@@ -1,47 +1,36 @@
// Vitest Snapshot v1, https://vitest.dev/guide/snapshot.html
-exports[`load > doesn't load modulepreload polyfill when format is cjs 1`] = `
-""use strict";
-"
-`;
+exports[`load > doesn't load modulepreload polyfill when format is cjs 1`] = `""`;
exports[`load > loads modulepreload polyfill 1`] = `
"(function polyfill() {
- const relList = document.createElement("link").relList;
- if (relList && relList.supports && relList.supports("modulepreload")) {
- return;
- }
- for (const link of document.querySelectorAll('link[rel="modulepreload"]')) {
- processPreload(link);
- }
- new MutationObserver((mutations) => {
- for (const mutation of mutations) {
- if (mutation.type !== "childList") {
- continue;
- }
- for (const node of mutation.addedNodes) {
- if (node.tagName === "LINK" && node.rel === "modulepreload")
- processPreload(node);
- }
- }
- }).observe(document, { childList: true, subtree: true });
- function getFetchOpts(link) {
- const fetchOpts = {};
- if (link.integrity) fetchOpts.integrity = link.integrity;
- if (link.referrerPolicy) fetchOpts.referrerPolicy = link.referrerPolicy;
- if (link.crossOrigin === "use-credentials")
- fetchOpts.credentials = "include";
- else if (link.crossOrigin === "anonymous") fetchOpts.credentials = "omit";
- else fetchOpts.credentials = "same-origin";
- return fetchOpts;
- }
- function processPreload(link) {
- if (link.ep)
- return;
- link.ep = true;
- const fetchOpts = getFetchOpts(link);
- fetch(link.href, fetchOpts);
- }
+ const relList = document.createElement("link").relList;
+ if (relList && relList.supports && relList.supports("modulepreload")) return;
+ for (const link of document.querySelectorAll("link[rel=\\"modulepreload\\"]")) processPreload(link);
+ new MutationObserver((mutations) => {
+ for (const mutation of mutations) {
+ if (mutation.type !== "childList") continue;
+ for (const node of mutation.addedNodes) if (node.tagName === "LINK" && node.rel === "modulepreload") processPreload(node);
+ }
+ }).observe(document, {
+ childList: true,
+ subtree: true
+ });
+ function getFetchOpts(link) {
+ const fetchOpts = {};
+ if (link.integrity) fetchOpts.integrity = link.integrity;
+ if (link.referrerPolicy) fetchOpts.referrerPolicy = link.referrerPolicy;
+ if (link.crossOrigin === "use-credentials") fetchOpts.credentials = "include";
+ else if (link.crossOrigin === "anonymous") fetchOpts.credentials = "omit";
+ else fetchOpts.credentials = "same-origin";
+ return fetchOpts;
+ }
+ function processPreload(link) {
+ if (link.ep) return;
+ link.ep = true;
+ const fetchOpts = getFetchOpts(link);
+ fetch(link.href, fetchOpts);
+ }
})();
"
`;
diff --git a/packages/vite/src/node/__tests__/plugins/modulePreloadPolyfill/modulePreloadPolyfill.spec.ts b/packages/vite/src/node/__tests__/plugins/modulePreloadPolyfill/modulePreloadPolyfill.spec.ts
index 3b24fbd5203baa..702380716b016e 100644
--- a/packages/vite/src/node/__tests__/plugins/modulePreloadPolyfill/modulePreloadPolyfill.spec.ts
+++ b/packages/vite/src/node/__tests__/plugins/modulePreloadPolyfill/modulePreloadPolyfill.spec.ts
@@ -1,5 +1,5 @@
import { describe, it } from 'vitest'
-import type { ModuleFormat, RollupOutput } from 'rollup'
+import type { ModuleFormat, RolldownOutput } from 'rolldown'
import { build } from '../../../build'
import { modulePreloadPolyfillId } from '../../../plugins/modulePreloadPolyfill'
@@ -34,20 +34,26 @@ const buildProject = ({ format = 'es' as ModuleFormat } = {}) =>
},
},
],
- }) as Promise
+ }) as Promise
describe('load', () => {
- it('loads modulepreload polyfill', async ({ expect }) => {
- const { output } = await buildProject()
- expect(output).toHaveLength(1)
- expect(output[0].code).toMatchSnapshot()
- })
+ // FIXME: https://github.com/oxc-project/oxc/issues/13176
+ it.skipIf(process.env._VITE_TEST_JS_PLUGIN)(
+ 'loads modulepreload polyfill',
+ async ({ expect }) => {
+ const { output } = await buildProject()
+ expect(output).toHaveLength(1)
+ expect(output[0].code).toMatchSnapshot()
+ },
+ )
- it("doesn't load modulepreload polyfill when format is cjs", async ({
- expect,
- }) => {
- const { output } = await buildProject({ format: 'cjs' })
- expect(output).toHaveLength(1)
- expect(output[0].code).toMatchSnapshot()
- })
+ // FIXME: https://github.com/oxc-project/oxc/issues/13176
+ it.skipIf(process.env._VITE_TEST_JS_PLUGIN)(
+ "doesn't load modulepreload polyfill when format is cjs",
+ async ({ expect }) => {
+ const { output } = await buildProject({ format: 'cjs' })
+ expect(output).toHaveLength(1)
+ expect(output[0].code).toMatchSnapshot()
+ },
+ )
})
diff --git a/packages/vite/src/node/__tests__/plugins/oxc.spec.ts b/packages/vite/src/node/__tests__/plugins/oxc.spec.ts
new file mode 100644
index 00000000000000..24b9735a141bd7
--- /dev/null
+++ b/packages/vite/src/node/__tests__/plugins/oxc.spec.ts
@@ -0,0 +1,426 @@
+import path from 'node:path'
+import { describe, expect, test } from 'vitest'
+import type { InternalModuleFormat } from 'rolldown'
+import { resolveConfig } from '../../config'
+import { buildOxcPlugin, transformWithOxc } from '../../plugins/oxc'
+import { PartialEnvironment } from '../../baseEnvironment'
+
+async function createBuildOxcPluginRenderChunk(target: string) {
+ const config = await resolveConfig(
+ { build: { target }, configFile: false },
+ 'build',
+ )
+ const instance = buildOxcPlugin()
+ const environment = new PartialEnvironment('client', config)
+
+ return async (code: string, format: InternalModuleFormat) => {
+ // @ts-expect-error renderChunk should exist
+ const result = await instance.renderChunk.call(
+ { environment },
+ code,
+ {
+ fileName: 'foo.ts',
+ },
+ { format },
+ )
+ return result?.code || result
+ }
+}
+
+describe('transformWithOxc', () => {
+ test('correctly overrides TS configuration and applies automatic transform', async () => {
+ const jsxImportSource = 'bar'
+ const result = await transformWithOxc(
+ 'const foo = () => <>>',
+ path.resolve(
+ import.meta.dirname,
+ './fixtures/oxc-tsconfigs/jsx-preserve/baz.jsx',
+ ),
+ {
+ jsx: {
+ runtime: 'automatic',
+ importSource: jsxImportSource,
+ },
+ },
+ )
+ expect(result?.code).toContain(`${jsxImportSource}/jsx-runtime`)
+ expect(result?.code).toContain('/* @__PURE__ */')
+ })
+
+ test('correctly overrides TS configuration and preserves code', async () => {
+ const foo = 'const foo = () => <>>'
+ const result = await transformWithOxc(
+ foo,
+ path.resolve(
+ import.meta.dirname,
+ './fixtures/oxc-tsconfigs/jsx-react-jsx/baz.jsx',
+ ),
+ {
+ jsx: 'preserve',
+ },
+ )
+ expect(result?.code).toContain(foo)
+ })
+
+ test('correctly overrides TS configuration and transforms code', async () => {
+ const jsxFactory = 'h',
+ jsxFragment = 'bar'
+ const result = await transformWithOxc(
+ 'const foo = () => <>>',
+ path.resolve(
+ import.meta.dirname,
+ './fixtures/oxc-tsconfigs/jsx-complex-options/baz.jsx',
+ ),
+ {
+ jsx: {
+ runtime: 'classic',
+ pragma: jsxFactory,
+ pragmaFrag: jsxFragment,
+ },
+ },
+ )
+ expect(result?.code).toContain(
+ `/* @__PURE__ */ ${jsxFactory}(${jsxFragment}, null)`,
+ )
+ })
+
+ describe('useDefineForClassFields', async () => {
+ const transformClassCode = async (target: string, tsconfigDir: string) => {
+ const result = await transformWithOxc(
+ `
+ class foo {
+ bar = 'bar'
+ }
+ `,
+ path.resolve(import.meta.dirname, tsconfigDir, './bar.ts'),
+ { target },
+ )
+ return result?.code
+ }
+
+ const [
+ defineForClassFieldsTrueTransformedCode,
+ defineForClassFieldsTrueLowerTransformedCode,
+ defineForClassFieldsFalseTransformedCode,
+ ] = await Promise.all([
+ transformClassCode('esnext', './fixtures/oxc-tsconfigs/use-define-true'),
+ transformClassCode('es2021', './fixtures/oxc-tsconfigs/use-define-true'),
+ transformClassCode('esnext', './fixtures/oxc-tsconfigs/use-define-false'),
+ ])
+
+ test('target: esnext and tsconfig.target: esnext => true', async () => {
+ const actual = await transformClassCode(
+ 'esnext',
+ './fixtures/oxc-tsconfigs/target-esnext',
+ )
+ expect(actual).toBe(defineForClassFieldsTrueTransformedCode)
+ })
+
+ test('target: es2021 and tsconfig.target: esnext => true', async () => {
+ const actual = await transformClassCode(
+ 'es2021',
+ './fixtures/oxc-tsconfigs/target-esnext',
+ )
+ expect(actual).toBe(defineForClassFieldsTrueLowerTransformedCode)
+ })
+
+ test('target: es2021 and tsconfig.target: es2021 => false', async () => {
+ const actual = await transformClassCode(
+ 'es2021',
+ './fixtures/oxc-tsconfigs/target-es2021',
+ )
+ expect(actual).toBe(defineForClassFieldsFalseTransformedCode)
+ })
+
+ test('target: esnext and tsconfig.target: es2021 => false', async () => {
+ const actual = await transformClassCode(
+ 'esnext',
+ './fixtures/oxc-tsconfigs/target-es2021',
+ )
+ expect(actual).toBe(defineForClassFieldsFalseTransformedCode)
+ })
+
+ test('target: es2022 and tsconfig.target: es2022 => true', async () => {
+ const actual = await transformClassCode(
+ 'es2022',
+ './fixtures/oxc-tsconfigs/target-es2022',
+ )
+ expect(actual).toBe(defineForClassFieldsTrueTransformedCode)
+ })
+
+ test('target: es2022 and tsconfig.target: undefined => false', async () => {
+ const actual = await transformClassCode(
+ 'es2022',
+ './fixtures/oxc-tsconfigs/empty',
+ )
+ expect(actual).toBe(defineForClassFieldsFalseTransformedCode)
+ })
+ })
+
+ test('supports emitDecoratorMetadata: true', async () => {
+ const result = await transformWithOxc(
+ `
+ function LogMethod(target: any, propertyKey: string | symbol, descriptor: PropertyDescriptor) {
+ console.log(target, propertyKey, descriptor);
+ }
+
+ class Demo {
+ @LogMethod
+ public foo(bar: number) {}
+ }
+
+ const demo = new Demo();
+ `,
+ path.resolve(
+ import.meta.dirname,
+ './fixtures/oxc-tsconfigs/decorator-metadata/bar.ts',
+ ),
+ )
+ expect(result?.code).toContain('_decorateMetadata("design:type"')
+ })
+})
+
+describe('renderChunk', () => {
+ test('should inject helper for iife without exports from esm', async () => {
+ const renderChunk = await createBuildOxcPluginRenderChunk('es2015')
+ const result = await renderChunk(
+ `(function() {
+
+"use strict";
+
+//#region src/index.js
+(async () => {
+ await new Promise((resolve) => setTimeout(resolve, 1e3));
+ console.log("foo");
+})();
+
+//#endregion
+})();`,
+ 'iife',
+ )
+ expect(result).toMatchInlineSnapshot(`
+ "(function() {
+ "use strict";var babelHelpers_asyncToGenerator;!(() => {function e(e,t,n,r,i,a,o){try{var s=e[a](o),c=s.value}catch(e){n(e);return}s.done?t(c):Promise.resolve(c).then(r,i)}function t(t){return function(){var n=this,r=arguments;return new Promise(function(i,a){var o=t.apply(n,r);function s(t){e(o,i,a,s,c,\`next\`,t)}function c(t){e(o,i,a,s,c,\`throw\`,t)}s(void 0)})}}babelHelpers_asyncToGenerator=t;})();
+
+ //#region src/index.js
+ babelHelpers_asyncToGenerator(function* () {
+ yield new Promise((resolve) => setTimeout(resolve, 1e3));
+ console.log("foo");
+ })();
+ //#endregion
+ })();
+ "
+ `)
+ })
+
+ test('should inject helper for iife without exports from cjs', async () => {
+ const renderChunk = await createBuildOxcPluginRenderChunk('es2015')
+ const result = await renderChunk(
+ `(function() {
+
+
+//#region src/index.js
+(async () => {
+ await new Promise((resolve) => setTimeout(resolve, 1e3));
+ console.log("foo");
+})();
+
+//#endregion
+})();`,
+ 'iife',
+ )
+ expect(result).toMatchInlineSnapshot(`
+ "(function() {var babelHelpers_asyncToGenerator;!(() => {function e(e,t,n,r,i,a,o){try{var s=e[a](o),c=s.value}catch(e){n(e);return}s.done?t(c):Promise.resolve(c).then(r,i)}function t(t){return function(){var n=this,r=arguments;return new Promise(function(i,a){var o=t.apply(n,r);function s(t){e(o,i,a,s,c,\`next\`,t)}function c(t){e(o,i,a,s,c,\`throw\`,t)}s(void 0)})}}babelHelpers_asyncToGenerator=t;})();
+
+ //#region src/index.js
+ babelHelpers_asyncToGenerator(function* () {
+ yield new Promise((resolve) => setTimeout(resolve, 1e3));
+ console.log("foo");
+ })();
+ //#endregion
+ })();
+ "
+ `)
+ })
+
+ test('should inject helper for iife with exports', async () => {
+ const renderChunk = await createBuildOxcPluginRenderChunk('es2015')
+ const result = await renderChunk(
+ `var lib = (function(exports) {
+
+
+//#region entry.js
+(async () => {
+ await new Promise((resolve) => setTimeout(resolve, 1e3));
+ console.log("foo");
+})();
+const foo = "foo";
+
+//#endregion
+exports.foo = foo;
+return exports;
+})({});`,
+ 'iife',
+ )
+ expect(result).toMatchInlineSnapshot(`
+ "var lib = (function(exports) {var babelHelpers_asyncToGenerator;!(() => {function e(e,t,n,r,i,a,o){try{var s=e[a](o),c=s.value}catch(e){n(e);return}s.done?t(c):Promise.resolve(c).then(r,i)}function t(t){return function(){var n=this,r=arguments;return new Promise(function(i,a){var o=t.apply(n,r);function s(t){e(o,i,a,s,c,\`next\`,t)}function c(t){e(o,i,a,s,c,\`throw\`,t)}s(void 0)})}}babelHelpers_asyncToGenerator=t;})();
+
+ //#region entry.js
+ babelHelpers_asyncToGenerator(function* () {
+ yield new Promise((resolve) => setTimeout(resolve, 1e3));
+ console.log("foo");
+ })();
+ const foo = "foo";
+ //#endregion
+ exports.foo = foo;
+ return exports;
+ })({});
+ "
+ `)
+ })
+
+ test('should inject helper for umd without exports', async () => {
+ const renderChunk = await createBuildOxcPluginRenderChunk('es2015')
+ const result = await renderChunk(
+ `(function(factory) {
+
+ typeof define === 'function' && define.amd ? define([], factory) :
+ factory();
+})(function() {
+
+//#region entry.js
+(async () => {
+ await new Promise((resolve) => setTimeout(resolve, 1e3));
+ console.log("foo");
+})();
+
+//#endregion
+});`,
+ 'umd',
+ )
+ expect(result).toMatchInlineSnapshot(`
+ "(function(factory) {
+ typeof define === "function" && define.amd ? define([], factory) : factory();
+ })(function() {var babelHelpers_asyncToGenerator;!(() => {function e(e,t,n,r,i,a,o){try{var s=e[a](o),c=s.value}catch(e){n(e);return}s.done?t(c):Promise.resolve(c).then(r,i)}function t(t){return function(){var n=this,r=arguments;return new Promise(function(i,a){var o=t.apply(n,r);function s(t){e(o,i,a,s,c,\`next\`,t)}function c(t){e(o,i,a,s,c,\`throw\`,t)}s(void 0)})}}babelHelpers_asyncToGenerator=t;})();
+
+ //#region entry.js
+ babelHelpers_asyncToGenerator(function* () {
+ yield new Promise((resolve) => setTimeout(resolve, 1e3));
+ console.log("foo");
+ })();
+ //#endregion
+ });
+ "
+ `)
+ })
+
+ test('should inject helper for umd with exports', async () => {
+ const renderChunk = await createBuildOxcPluginRenderChunk('es2015')
+ const result = await renderChunk(
+ `(function(global, factory) {
+ typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports) :
+ typeof define === 'function' && define.amd ? define(['exports'], factory) :
+ (global = typeof globalThis !== 'undefined' ? globalThis : global || self, factory((global.lib = {})));
+})(this, function(exports) {
+
+//#region entry.js
+(async () => {
+ await new Promise((resolve) => setTimeout(resolve, 1e3));
+ console.log("foo");
+})();
+const foo = "foo";
+
+//#endregion
+exports.foo = foo;
+});`,
+ 'umd',
+ )
+ expect(result).toMatchInlineSnapshot(`
+ "(function(global, factory) {
+ typeof exports === "object" && typeof module !== "undefined" ? factory(exports) : typeof define === "function" && define.amd ? define(["exports"], factory) : (global = typeof globalThis !== "undefined" ? globalThis : global || self, factory(global.lib = {}));
+ })(this, function(exports) {var babelHelpers_asyncToGenerator;!(() => {function e(e,t,n,r,i,a,o){try{var s=e[a](o),c=s.value}catch(e){n(e);return}s.done?t(c):Promise.resolve(c).then(r,i)}function t(t){return function(){var n=this,r=arguments;return new Promise(function(i,a){var o=t.apply(n,r);function s(t){e(o,i,a,s,c,\`next\`,t)}function c(t){e(o,i,a,s,c,\`throw\`,t)}s(void 0)})}}babelHelpers_asyncToGenerator=t;})();
+
+ //#region entry.js
+ babelHelpers_asyncToGenerator(function* () {
+ yield new Promise((resolve) => setTimeout(resolve, 1e3));
+ console.log("foo");
+ })();
+ const foo = "foo";
+ //#endregion
+ exports.foo = foo;
+ });
+ "
+ `)
+ })
+
+ test('should inject helper for umd with only default export', async () => {
+ const renderChunk = await createBuildOxcPluginRenderChunk('es2015')
+ const result = await renderChunk(
+ `(function(global, factory) {
+ typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() :
+ typeof define === 'function' && define.amd ? define([], factory) :
+ (global = typeof globalThis !== 'undefined' ? globalThis : global || self, (global.lib = factory()));
+})(this, function() {
+
+//#region entry.js
+(async () => {
+ await new Promise((resolve) => setTimeout(resolve, 1e3));
+ console.log("foo");
+})();
+var index_default = "foo";
+
+//#endregion
+return index_default;
+});`,
+ 'umd',
+ )
+ expect(result).toMatchInlineSnapshot(`
+ "(function(global, factory) {
+ typeof exports === "object" && typeof module !== "undefined" ? module.exports = factory() : typeof define === "function" && define.amd ? define([], factory) : (global = typeof globalThis !== "undefined" ? globalThis : global || self, global.lib = factory());
+ })(this, function() {var babelHelpers_asyncToGenerator;!(() => {function e(e,t,n,r,i,a,o){try{var s=e[a](o),c=s.value}catch(e){n(e);return}s.done?t(c):Promise.resolve(c).then(r,i)}function t(t){return function(){var n=this,r=arguments;return new Promise(function(i,a){var o=t.apply(n,r);function s(t){e(o,i,a,s,c,\`next\`,t)}function c(t){e(o,i,a,s,c,\`throw\`,t)}s(void 0)})}}babelHelpers_asyncToGenerator=t;})();
+
+ //#region entry.js
+ babelHelpers_asyncToGenerator(function* () {
+ yield new Promise((resolve) => setTimeout(resolve, 1e3));
+ console.log("foo");
+ })();
+ var index_default = "foo";
+ //#endregion
+ return index_default;
+ });
+ "
+ `)
+ })
+
+ test('should inject multiple helpers', async () => {
+ const renderChunk = await createBuildOxcPluginRenderChunk('es2015')
+ const result = await renderChunk(
+ `(function() {
+
+"use strict";
+
+//#region src/index.js
+(async () => {
+ await new Promise((resolve) => setTimeout(resolve, 1e3));
+ console.log("foo", { ..."foo" });
+})();
+
+//#endregion
+})();`,
+ 'iife',
+ )
+ expect(result).toMatchInlineSnapshot(`
+ "(function() {
+ "use strict";var babelHelpers_asyncToGenerator, babelHelpers_objectSpread2;!(() => {function e(e,t,n,r,i,a,o){try{var s=e[a](o),c=s.value}catch(e){n(e);return}s.done?t(c):Promise.resolve(c).then(r,i)}function t(t){return function(){var n=this,r=arguments;return new Promise(function(i,a){var o=t.apply(n,r);function s(t){e(o,i,a,s,c,\`next\`,t)}function c(t){e(o,i,a,s,c,\`throw\`,t)}s(void 0)})}}function n(e){"@babel/helpers - typeof";return n=typeof Symbol==\`function\`&&typeof Symbol.iterator==\`symbol\`?function(e){return typeof e}:function(e){return e&&typeof Symbol==\`function\`&&e.constructor===Symbol&&e!==Symbol.prototype?\`symbol\`:typeof e},n(e)}function r(e,t){if(n(e)!=\`object\`||!e)return e;var r=e[Symbol.toPrimitive];if(r!==void 0){var i=r.call(e,t||\`default\`);if(n(i)!=\`object\`)return i;throw TypeError(\`@@toPrimitive must return a primitive value.\`)}return(t===\`string\`?String:Number)(e)}function i(e){var t=r(e,\`string\`);return n(t)==\`symbol\`?t:t+\`\`}function a(e,t,n){return(t=i(t))in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function o(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter(function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable})),n.push.apply(n,r)}return n}function s(e){for(var t=1;t setTimeout(resolve, 1e3));
+ console.log("foo", babelHelpers_objectSpread2({}, "foo"));
+ })();
+ //#endregion
+ })();
+ "
+ `)
+ })
+})
diff --git a/packages/vite/src/node/__tests__/plugins/pluginFilter.spec.ts b/packages/vite/src/node/__tests__/plugins/pluginFilter.spec.ts
index 934ff5781eaecf..4cb30a1f3d4ddc 100644
--- a/packages/vite/src/node/__tests__/plugins/pluginFilter.spec.ts
+++ b/packages/vite/src/node/__tests__/plugins/pluginFilter.spec.ts
@@ -1,7 +1,9 @@
import util from 'node:util'
import path from 'node:path'
import { describe, expect, test } from 'vitest'
+import type { ModuleTypeFilter } from 'rolldown'
import {
+ type StringFilter,
createCodeFilter,
createFilterForTransform,
createIdFilter,
@@ -226,7 +228,22 @@ describe('createCodeFilter', () => {
})
describe('createFilterForTransform', () => {
- const filters = [
+ type Filters = {
+ inputFilter: [
+ idFilter: StringFilter | undefined,
+ codeFilter: StringFilter | undefined,
+ moduleTypeFilter?: ModuleTypeFilter | undefined,
+ ]
+ cases:
+ | {
+ id: string
+ code: string
+ moduleType?: string
+ expected: boolean
+ }[]
+ | undefined
+ }[]
+ const filters: Filters = [
{ inputFilter: [undefined, undefined], cases: undefined },
{
inputFilter: ['*.js', undefined],
@@ -283,14 +300,29 @@ describe('createFilterForTransform', () => {
{ id: 'a', code: 'a', expected: true },
],
},
+ {
+ inputFilter: [undefined, undefined, ['js']],
+ cases: [
+ { id: 'foo.js', code: 'foo', moduleType: 'js', expected: true },
+ { id: 'foo.ts', code: 'foo', moduleType: 'ts', expected: false },
+ ],
+ },
+ {
+ inputFilter: [undefined, undefined, { include: ['js'] }],
+ cases: [
+ { id: 'foo.js', code: 'foo', moduleType: 'js', expected: true },
+ { id: 'foo.ts', code: 'foo', moduleType: 'ts', expected: false },
+ ],
+ },
]
for (const filter of filters) {
test(`${util.inspect(filter.inputFilter)}`, () => {
- const [idFilter, codeFilter] = filter.inputFilter
+ const [idFilter, codeFilter, moduleTypeFilter] = filter.inputFilter
const filterForTransform = createFilterForTransform(
idFilter,
codeFilter,
+ moduleTypeFilter,
'',
)
if (!filter.cases) {
@@ -300,10 +332,11 @@ describe('createFilterForTransform', () => {
expect(filterForTransform).not.toBeUndefined()
for (const testCase of filter.cases) {
- const { id, code, expected } = testCase
- expect(filterForTransform!(id, code), util.inspect({ id, code })).toBe(
- expected,
- )
+ const { id, code, moduleType, expected } = testCase
+ expect(
+ filterForTransform!(id, code, moduleType ?? 'js'),
+ util.inspect({ id, code, moduleType }),
+ ).toBe(expected)
}
})
}
diff --git a/packages/vite/src/node/__tests__/plugins/workerImportMetaUrl.spec.ts b/packages/vite/src/node/__tests__/plugins/workerImportMetaUrl.spec.ts
index 1c35a178ed2ade..a6d60a84b345f3 100644
--- a/packages/vite/src/node/__tests__/plugins/workerImportMetaUrl.spec.ts
+++ b/packages/vite/src/node/__tests__/plugins/workerImportMetaUrl.spec.ts
@@ -27,7 +27,7 @@ describe('workerImportMetaUrlPlugin', async () => {
expect(
await transform('new Worker(new URL("./worker.js", import.meta.url))'),
).toMatchInlineSnapshot(
- `"new Worker(new URL(/* @vite-ignore */ "/worker.js?worker_file&type=classic", import.meta.url))"`,
+ `"new Worker(new URL(/* @vite-ignore */ "/worker.js?worker_file&type=classic", '' + import.meta.url))"`,
)
})
@@ -37,7 +37,7 @@ describe('workerImportMetaUrlPlugin', async () => {
'new SharedWorker(new URL("./worker.js", import.meta.url))',
),
).toMatchInlineSnapshot(
- `"new SharedWorker(new URL(/* @vite-ignore */ "/worker.js?worker_file&type=classic", import.meta.url))"`,
+ `"new SharedWorker(new URL(/* @vite-ignore */ "/worker.js?worker_file&type=classic", '' + import.meta.url))"`,
)
})
@@ -47,7 +47,7 @@ describe('workerImportMetaUrlPlugin', async () => {
'new Worker(new URL("./worker.js", import.meta.url), { type: "module", name: "worker1" })',
),
).toMatchInlineSnapshot(
- `"new Worker(new URL(/* @vite-ignore */ "/worker.js?worker_file&type=module", import.meta.url), { type: "module", name: "worker1" })"`,
+ `"new Worker(new URL(/* @vite-ignore */ "/worker.js?worker_file&type=module", '' + import.meta.url), { type: "module", name: "worker1" })"`,
)
})
@@ -57,7 +57,7 @@ describe('workerImportMetaUrlPlugin', async () => {
'new Worker(new URL("./worker.js", import.meta.url), { "type": "module", "name": "worker1" })',
),
).toMatchInlineSnapshot(
- `"new Worker(new URL(/* @vite-ignore */ "/worker.js?worker_file&type=module", import.meta.url), { "type": "module", "name": "worker1" })"`,
+ `"new Worker(new URL(/* @vite-ignore */ "/worker.js?worker_file&type=module", '' + import.meta.url), { "type": "module", "name": "worker1" })"`,
)
})
@@ -67,7 +67,7 @@ describe('workerImportMetaUrlPlugin', async () => {
'const id = 1; new Worker(new URL("./worker.js", import.meta.url), { name: "worker" + id })',
),
).toMatchInlineSnapshot(
- `"const id = 1; new Worker(new URL(/* @vite-ignore */ "/worker.js?worker_file&type=classic", import.meta.url), { name: "worker" + id })"`,
+ `"const id = 1; new Worker(new URL(/* @vite-ignore */ "/worker.js?worker_file&type=classic", '' + import.meta.url), { name: "worker" + id })"`,
)
})
@@ -77,7 +77,7 @@ describe('workerImportMetaUrlPlugin', async () => {
'const id = 1; new Worker(new URL("./worker.js", import.meta.url), { name: `worker-${id}` })',
),
).toMatchInlineSnapshot(
- `"const id = 1; new Worker(new URL(/* @vite-ignore */ "/worker.js?worker_file&type=classic", import.meta.url), { name: \`worker-\${id}\` })"`,
+ `"const id = 1; new Worker(new URL(/* @vite-ignore */ "/worker.js?worker_file&type=classic", '' + import.meta.url), { name: \`worker-\${id}\` })"`,
)
})
@@ -87,7 +87,7 @@ describe('workerImportMetaUrlPlugin', async () => {
'const id = 1; new Worker(new URL("./worker.js", import.meta.url), { name: "worker" + id, type: "module" })',
),
).toMatchInlineSnapshot(
- `"const id = 1; new Worker(new URL(/* @vite-ignore */ "/worker.js?worker_file&type=module", import.meta.url), { name: "worker" + id, type: "module" })"`,
+ `"const id = 1; new Worker(new URL(/* @vite-ignore */ "/worker.js?worker_file&type=module", '' + import.meta.url), { name: "worker" + id, type: "module" })"`,
)
})
@@ -97,7 +97,7 @@ describe('workerImportMetaUrlPlugin', async () => {
'const id = 1; new Worker(new URL("./worker.js", import.meta.url), { name: `worker-${id}`, type: "module" })',
),
).toMatchInlineSnapshot(
- `"const id = 1; new Worker(new URL(/* @vite-ignore */ "/worker.js?worker_file&type=module", import.meta.url), { name: \`worker-\${id}\`, type: "module" })"`,
+ `"const id = 1; new Worker(new URL(/* @vite-ignore */ "/worker.js?worker_file&type=module", '' + import.meta.url), { name: \`worker-\${id}\`, type: "module" })"`,
)
})
@@ -107,7 +107,7 @@ describe('workerImportMetaUrlPlugin', async () => {
'const worker = new Worker(new URL("./worker.js", import.meta.url), { name: genName(), type: "module"})',
),
).toMatchInlineSnapshot(
- `"const worker = new Worker(new URL(/* @vite-ignore */ "/worker.js?worker_file&type=module", import.meta.url), { name: genName(), type: "module"})"`,
+ `"const worker = new Worker(new URL(/* @vite-ignore */ "/worker.js?worker_file&type=module", '' + import.meta.url), { name: genName(), type: "module"})"`,
)
})
@@ -122,15 +122,17 @@ const worker = new Worker(new URL("./worker.js", import.meta.url), {
worker.addEventListener('message', (ev) => text('.simple-worker-url', JSON.stringify(ev.data)))
`),
- ).toMatchInlineSnapshot(`"
-const worker = new Worker(new URL(/* @vite-ignore */ "/worker.js?worker_file&type=module", import.meta.url), {
- name: genName(),
- type: "module",
- },
-)
+ ).toMatchInlineSnapshot(`
+ "
+ const worker = new Worker(new URL(/* @vite-ignore */ "/worker.js?worker_file&type=module", '' + import.meta.url), {
+ name: genName(),
+ type: "module",
+ },
+ )
-worker.addEventListener('message', (ev) => text('.simple-worker-url', JSON.stringify(ev.data)))
-"`)
+ worker.addEventListener('message', (ev) => text('.simple-worker-url', JSON.stringify(ev.data)))
+ "
+ `)
})
test('trailing comma', async () => {
@@ -143,14 +145,16 @@ new Worker(
}, // },
)
`),
- ).toMatchInlineSnapshot(`"
-new Worker(
- new URL(/* @vite-ignore */ "/worker.js?worker_file&type=module", import.meta.url),
- {
- type: 'module'
- }, // },
-)
-"`)
+ ).toMatchInlineSnapshot(`
+ "
+ new Worker(
+ new URL(/* @vite-ignore */ "/worker.js?worker_file&type=module", '' + import.meta.url),
+ {
+ type: 'module'
+ }, // },
+ )
+ "
+ `)
})
test('throws an error when non-static worker options are provided', async () => {
@@ -207,14 +211,14 @@ new Worker(
`(() => { new Worker(new URL('./worker', import.meta.url)); repro({ test: "foo", }); })();`,
),
).toMatchInlineSnapshot(
- `"(() => { new Worker(new URL(/* @vite-ignore */ "/worker?worker_file&type=classic", import.meta.url)); repro({ test: "foo", }); })();"`,
+ `"(() => { new Worker(new URL(/* @vite-ignore */ "/worker?worker_file&type=classic", '' + import.meta.url)); repro({ test: "foo", }); })();"`,
)
expect(
await transform(
`repro(new Worker(new URL('./worker', import.meta.url)), { type: "module" })`,
),
).toMatchInlineSnapshot(
- `"repro(new Worker(new URL(/* @vite-ignore */ "/worker?worker_file&type=classic", import.meta.url)), { type: "module" })"`,
+ `"repro(new Worker(new URL(/* @vite-ignore */ "/worker?worker_file&type=classic", '' + import.meta.url)), { type: "module" })"`,
)
})
})
diff --git a/packages/vite/src/node/__tests_dts__/plugin.ts b/packages/vite/src/node/__tests_dts__/plugin.ts
index 5b4ebeb82895c8..39b151772eb6b3 100644
--- a/packages/vite/src/node/__tests_dts__/plugin.ts
+++ b/packages/vite/src/node/__tests_dts__/plugin.ts
@@ -1,9 +1,10 @@
/**
* This is a development only file for testing types.
*/
-import type { Plugin as RollupPlugin } from 'rollup'
+import type { Plugin as RolldownPlugin } from 'rolldown'
import type { Equal, ExpectExtends, ExpectTrue } from '@type-challenges/utils'
-import type { Plugin, PluginContextExtension } from '../plugin'
+import type { Plugin as RollupPlugin } from 'rollup'
+import type { Plugin, PluginContextExtension, PluginOption } from '../plugin'
import type { ROLLUP_HOOKS } from '../constants'
import type {
GetHookContextMap,
@@ -26,13 +27,18 @@ type HooksMissingInConstants = Exclude<
export type cases = [
// Ensure environment plugin hooks are superset of rollup plugin hooks
- ExpectTrue>,
+ ExpectTrue>,
// Ensure all Rollup hooks have Vite's plugin context extension
ExpectTrue>,
// Ensure the `ROLLUP_HOOKS` constant is up-to-date
ExpectTrue>,
+
+ // Ensure all Vite plugins, Rolldown plugins, and Rollup plugins can be assigned to `plugins` option
+ ExpectTrue>,
+ ExpectTrue>,
+ ExpectTrue>,
]
export {}
diff --git a/packages/vite/src/node/build.ts b/packages/vite/src/node/build.ts
index 91e817cda83c00..138d5747b0e60c 100644
--- a/packages/vite/src/node/build.ts
+++ b/packages/vite/src/node/build.ts
@@ -8,21 +8,25 @@ import type {
LogOrStringHandler,
MinimalPluginContext,
ModuleFormat,
+ OutputBundle,
+ OutputChunk,
OutputOptions,
PluginContext,
- RollupBuild,
+ RenderedChunk,
+ RolldownBuild,
+ RolldownOptions,
+ RolldownOutput,
+ RolldownWatcher,
RollupError,
RollupLog,
- RollupOptions,
- RollupOutput,
- RollupWatcher,
WarningHandlerWithDefault,
WatcherOptions,
-} from 'rollup'
-import commonjsPlugin from '@rollup/plugin-commonjs'
+} from 'rolldown'
+import { loadFallbackPlugin as nativeLoadFallbackPlugin } from 'rolldown/experimental'
import type { RollupCommonJSOptions } from 'dep-types/commonjs'
import type { RollupDynamicImportVarsOptions } from 'dep-types/dynamicImportVars'
-import type { TransformOptions } from 'esbuild'
+import type { EsbuildTarget } from 'types/internal/esbuildOptions'
+import type { ChunkMetadata } from 'types/metadata.mjs'
import {
DEFAULT_ASSETS_INLINE_LIMIT,
ESBUILD_BASELINE_WIDELY_AVAILABLE_TARGET,
@@ -50,17 +54,18 @@ import {
mergeConfig,
mergeWithDefaults,
partialEncodeURIPath,
+ setupRollupOptionCompat,
+ unique,
} from './utils'
import { perEnvironmentPlugin } from './plugin'
import { manifestPlugin } from './plugins/manifest'
-import type { Logger } from './logger'
-import { dataURIPlugin } from './plugins/dataUri'
+import { type Logger } from './logger'
import { buildImportAnalysisPlugin } from './plugins/importAnalysisBuild'
import { ssrManifestPlugin } from './ssr/ssrManifestPlugin'
-import { buildLoadFallbackPlugin } from './plugins/loadFallback'
import { findNearestMainPackageData, findNearestPackageData } from './packages'
import type { PackageCache } from './packages'
import {
+ convertToNotifyOptions,
getResolvedOutDirs,
resolveChokidarOptions,
resolveEmptyOutDir,
@@ -71,6 +76,7 @@ import { getHookHandler } from './plugins'
import { BaseEnvironment } from './baseEnvironment'
import type { MinimalPluginContextWithoutEnvironment, Plugin } from './plugin'
import type { RollupPluginHooks } from './typeUtils'
+import { buildOxcPlugin } from './plugins/oxc'
import {
BasicMinimalPluginContext,
basePluginContextMeta,
@@ -99,7 +105,7 @@ export interface BuildEnvironmentOptions {
* https://esbuild.github.io/content-types/#javascript for more details.
* @default 'baseline-widely-available'
*/
- target?: 'baseline-widely-available' | TransformOptions['target'] | false
+ target?: 'baseline-widely-available' | EsbuildTarget | false
/**
* whether to inject module preload polyfill.
* Note: does not apply to library mode.
@@ -152,13 +158,13 @@ export interface BuildEnvironmentOptions {
* doesn't support the #RGBA syntax.
* @default target
*/
- cssTarget?: TransformOptions['target'] | false
+ cssTarget?: EsbuildTarget | false
/**
* Override CSS minification specifically instead of defaulting to `build.minify`,
* so you can configure minification for JS and CSS separately.
- * @default 'esbuild'
+ * @default 'lightningcss'
*/
- cssMinify?: boolean | 'esbuild' | 'lightningcss'
+ cssMinify?: boolean | 'lightningcss' | 'esbuild'
/**
* If `true`, a separate sourcemap file will be created. If 'inline', the
* sourcemap will be appended to the resulting output file as data URI.
@@ -169,10 +175,10 @@ export interface BuildEnvironmentOptions {
sourcemap?: boolean | 'inline' | 'hidden'
/**
* Set to `false` to disable minification, or specify the minifier to use.
- * Available options are 'terser' or 'esbuild'.
- * @default 'esbuild'
+ * Available options are 'oxc' or 'terser' or 'esbuild'.
+ * @default 'oxc'
*/
- minify?: boolean | 'terser' | 'esbuild'
+ minify?: boolean | 'oxc' | 'terser' | 'esbuild'
/**
* Options for terser
* https://terser.org/docs/api-reference#minify-options
@@ -182,10 +188,15 @@ export interface BuildEnvironmentOptions {
*/
terserOptions?: TerserOptions
/**
- * Will be merged with internal rollup options.
- * https://rollupjs.org/configuration-options/
+ * Alias to `rolldownOptions`
+ * @deprecated Use `rolldownOptions` instead.
*/
- rollupOptions?: RollupOptions
+ rollupOptions?: RolldownOptions
+ /**
+ * Will be merged with internal rolldown options.
+ * https://rolldown.rs/reference/config-options
+ */
+ rolldownOptions?: RolldownOptions
/**
* Options to pass on to `@rollup/plugin-commonjs`
*/
@@ -315,7 +326,7 @@ export interface LibraryOptions {
cssFileName?: string
}
-export type LibraryFormats = 'es' | 'cjs' | 'umd' | 'iife' | 'system'
+export type LibraryFormats = 'es' | 'cjs' | 'umd' | 'iife' // | 'system'
export interface ModulePreloadOptions {
/**
@@ -368,7 +379,7 @@ export const buildEnvironmentOptionsDefaults = Object.freeze({
sourcemap: false,
// minify
terserOptions: {},
- rollupOptions: {},
+ rolldownOptions: {},
commonjsOptions: {
include: [/node_modules/],
extensions: ['.js', '.cjs'],
@@ -416,24 +427,36 @@ export function resolveBuildEnvironmentOptions(
{
...buildEnvironmentOptionsDefaults,
cssCodeSplit: !raw.lib,
- minify: consumer === 'server' ? false : 'esbuild',
+ minify: consumer === 'server' ? false : 'oxc',
+ rollupOptions: {},
+ rolldownOptions: undefined,
ssr: consumer === 'server',
emitAssets: consumer === 'client',
createEnvironment: (name, config) => new BuildEnvironment(name, config),
} satisfies BuildEnvironmentOptions,
raw,
)
+ setupRollupOptionCompat(merged)
+ merged.rolldownOptions = {
+ platform: consumer === 'server' ? 'node' : 'browser',
+ ...merged.rolldownOptions,
+ }
// handle special build targets
if (merged.target === 'baseline-widely-available') {
merged.target = ESBUILD_BASELINE_WIDELY_AVAILABLE_TARGET
}
+ // dedupe target
+ if (Array.isArray(merged.target)) {
+ // esbuild allowed duplicate targets but oxc does not
+ merged.target = unique(merged.target)
+ }
// normalize false string into actual false
if ((merged.minify as string) === 'false') {
merged.minify = false
} else if (merged.minify === true) {
- merged.minify = 'esbuild'
+ merged.minify = 'oxc'
}
const defaultModulePreload = {
@@ -444,7 +467,8 @@ export function resolveBuildEnvironmentOptions(
...merged,
cssTarget: merged.cssTarget ?? merged.target,
cssMinify:
- merged.cssMinify ?? (consumer === 'server' ? 'esbuild' : !!merged.minify),
+ merged.cssMinify ??
+ (consumer === 'server' ? 'lightningcss' : !!merged.minify),
// Resolve to false | object
modulePreload:
merged.modulePreload === false
@@ -468,14 +492,6 @@ export async function resolveBuildPlugins(config: ResolvedConfig): Promise<{
pre: [
completeSystemWrapPlugin(),
...(!config.isWorker ? [prepareOutDirPlugin()] : []),
- perEnvironmentPlugin('commonjs', (environment) => {
- const { commonjsOptions } = environment.config.build
- const usePluginCommonjs =
- !Array.isArray(commonjsOptions.include) ||
- commonjsOptions.include.length !== 0
- return usePluginCommonjs ? commonjsPlugin(commonjsOptions) : false
- }),
- dataURIPlugin(),
perEnvironmentPlugin(
'vite:rollup-options-plugins',
async (environment) =>
@@ -485,16 +501,21 @@ export async function resolveBuildPlugins(config: ResolvedConfig): Promise<{
)
).filter(Boolean) as Plugin[],
),
- ...(config.isWorker ? [webWorkerPostPlugin()] : []),
+ ...(config.isWorker ? [webWorkerPostPlugin(config)] : []),
],
post: [
- buildImportAnalysisPlugin(config),
- buildEsbuildPlugin(),
+ ...buildImportAnalysisPlugin(config),
+ ...(config.nativePluginEnabledLevel >= 1 ? [] : [buildOxcPlugin()]),
+ ...(config.build.minify === 'esbuild' ? [buildEsbuildPlugin()] : []),
terserPlugin(config),
...(!config.isWorker
- ? [manifestPlugin(), ssrManifestPlugin(), buildReporterPlugin(config)]
+ ? [
+ manifestPlugin(config),
+ ssrManifestPlugin(),
+ buildReporterPlugin(config),
+ ]
: []),
- buildLoadFallbackPlugin(),
+ nativeLoadFallbackPlugin(),
],
}
}
@@ -505,7 +526,7 @@ export async function resolveBuildPlugins(config: ResolvedConfig): Promise<{
*/
export async function build(
inlineConfig: InlineConfig = {},
-): Promise {
+): Promise {
const builder = await createBuilder(inlineConfig, true)
const environment = Object.values(builder.environments)[0]
if (!environment) throw new Error('No environment found')
@@ -528,7 +549,10 @@ function resolveConfigToBuild(
)
}
-function resolveRollupOptions(environment: Environment) {
+function resolveRolldownOptions(
+ environment: Environment,
+ chunkMetadataMap: ChunkMetadataMap,
+) {
const { root, packageCache, build: options } = environment.config
const libOptions = options.lib
const { logger } = environment
@@ -575,16 +599,16 @@ function resolveRollupOptions(environment: Environment) {
// inject environment and ssr arg to plugin load/transform hooks
const plugins = environment.plugins.map((p) =>
- injectEnvironmentToHooks(environment, p),
+ injectEnvironmentToHooks(environment, chunkMetadataMap, p),
)
- const rollupOptions: RollupOptions = {
+ const rollupOptions: RolldownOptions = {
preserveEntrySignatures: ssr
? 'allow-extension'
: libOptions
? 'strict'
: false,
- cache: options.watch ? undefined : false,
+ // cache: options.watch ? undefined : false,
...options.rollupOptions,
output: options.rollupOptions.output,
input,
@@ -593,6 +617,43 @@ function resolveRollupOptions(environment: Environment) {
onLog(level, log) {
onRollupLog(level, log, environment)
},
+ define: {
+ ...options.rollupOptions.define,
+ // disable builtin process.env.NODE_ENV replacement as it is handled by the define plugin
+ 'process.env.NODE_ENV': 'process.env.NODE_ENV',
+ },
+ transform: {
+ target: options.target === false ? undefined : options.target,
+ ...options.rollupOptions.transform,
+ },
+ // TODO: remove this and enable rolldown's CSS support later
+ moduleTypes: {
+ ...options.rollupOptions.moduleTypes,
+ '.css': 'js',
+ },
+ experimental: {
+ ...options.rollupOptions.experimental,
+ viteMode: true,
+ },
+ treeshake:
+ options.rollupOptions.treeshake === false
+ ? false
+ : {
+ commonjs: true,
+ ...(options.rollupOptions.treeshake === true
+ ? {}
+ : options.rollupOptions.treeshake),
+ },
+ optimization: {
+ inlineConst:
+ typeof options.rollupOptions.optimization?.inlineConst === 'boolean'
+ ? options.rollupOptions.optimization.inlineConst
+ : {
+ mode: 'smart',
+ ...options.rollupOptions.optimization?.inlineConst,
+ },
+ ...options.rollupOptions.optimization,
+ },
}
const isSsrTargetWebworkerEnvironment =
@@ -638,11 +699,13 @@ function resolveRollupOptions(environment: Environment) {
exports: 'auto',
sourcemap: options.sourcemap,
name: libOptions ? libOptions.name : undefined,
- hoistTransitiveImports: libOptions ? false : undefined,
+ // hoistTransitiveImports: libOptions ? false : undefined,
// es2015 enables `generatedCode.symbols`
// - #764 add `Symbol.toStringTag` when build es module into cjs chunk
// - #1048 add `Symbol.toStringTag` for module default export
- generatedCode: 'es2015',
+ generatedCode: {
+ preset: 'es2015',
+ },
entryFileNames: ssr
? `[name].${jsExt}`
: libOptions
@@ -667,6 +730,22 @@ function resolveRollupOptions(environment: Environment) {
output.format === 'iife' ||
(isSsrTargetWebworkerEnvironment &&
(typeof input === 'string' || Object.keys(input).length === 1)),
+ minify:
+ options.minify === 'oxc'
+ ? libOptions && (format === 'es' || format === 'esm')
+ ? {
+ compress: true,
+ mangle: true,
+ // Do not minify whitespace for ES lib output since that would remove
+ // pure annotations and break tree-shaking
+ codegen: false,
+ }
+ : true
+ : options.minify === false
+ ? 'dce-only'
+ : false,
+ minifyInternalExports: format === 'es' || format === 'esm',
+ topLevelVar: true,
...output,
}
}
@@ -692,23 +771,24 @@ function resolveRollupOptions(environment: Environment) {
**/
async function buildEnvironment(
environment: BuildEnvironment,
-): Promise {
+): Promise {
const { logger, config } = environment
const { root, build: options } = config
const ssr = config.consumer === 'server'
logger.info(
colors.cyan(
- `vite v${VERSION} ${colors.green(
+ `rolldown-vite v${VERSION} ${colors.green(
`building ${ssr ? `SSR bundle ` : ``}for ${environment.config.mode}...`,
)}`,
),
)
- let bundle: RollupBuild | undefined
+ let bundle: RolldownBuild | undefined
let startTime: number | undefined
try {
- const rollupOptions = resolveRollupOptions(environment)
+ const chunkMetadataMap = new ChunkMetadataMap()
+ const rollupOptions = resolveRolldownOptions(environment, chunkMetadataMap)
// watch file changes with rollup
if (options.watch) {
@@ -727,7 +807,9 @@ async function buildEnvironment(
)
const resolvedChokidarOptions = resolveChokidarOptions(
{
+ // @ts-expect-error chokidar option does not exist in rolldown but used for backward compat
...(rollupOptions.watch || {}).chokidar,
+ // @ts-expect-error chokidar option does not exist in rolldown but used for backward compat
...options.watch.chokidar,
},
resolvedOutDirs,
@@ -735,19 +817,20 @@ async function buildEnvironment(
environment.config.cacheDir,
)
- const { watch } = await import('rollup')
+ const { watch } = await import('rolldown')
const watcher = watch({
...rollupOptions,
watch: {
...rollupOptions.watch,
...options.watch,
- chokidar: resolvedChokidarOptions,
+ notify: convertToNotifyOptions(resolvedChokidarOptions),
},
})
watcher.on('event', (event) => {
if (event.code === 'BUNDLE_START') {
logger.info(colors.cyan(`\nbuild started...`))
+ chunkMetadataMap.clearResetChunks()
} else if (event.code === 'BUNDLE_END') {
event.result.close()
logger.info(colors.cyan(`built in ${event.duration}ms.`))
@@ -762,15 +845,22 @@ async function buildEnvironment(
return watcher
}
- // write or generate files with rollup
- const { rollup } = await import('rollup')
+ // write or generate files with rolldown
+ const { rolldown } = await import('rolldown')
startTime = Date.now()
- bundle = await rollup(rollupOptions)
+ bundle = await rolldown(rollupOptions)
- const res: RollupOutput[] = []
+ const res: RolldownOutput[] = []
for (const output of arraify(rollupOptions.output!)) {
res.push(await bundle[options.write ? 'write' : 'generate'](output))
}
+ for (const output of res) {
+ for (const chunk of output.output) {
+ if (chunk.type === 'chunk') {
+ injectChunkMetadata(chunkMetadataMap, chunk)
+ }
+ }
+ }
logger.info(
`${colors.green(`✓ built in ${displayTime(Date.now() - startTime)}`)}`,
)
@@ -980,7 +1070,7 @@ export function onRollupLog(
// throw unless it's commonjs external...
if (!id || !id.endsWith('?commonjs-external')) {
throw new Error(
- `[vite]: Rollup failed to resolve import "${exporter}" from "${id}".\n` +
+ `[vite]: Rolldown failed to resolve import "${exporter}" from "${id}".\n` +
`This is most likely unintended because it can break your application at runtime.\n` +
`If you do want to externalize this module explicitly add it to\n` +
`\`build.rollupOptions.external\``,
@@ -1003,23 +1093,29 @@ export function onRollupLog(
}
}
+ // append plugin name to align with Rollup's behavior
+ let message = logging.message
+ if (logging.plugin) {
+ message = `[plugin ${logging.plugin}] ${message}`
+ }
+
switch (logLeveling) {
case 'info':
- environment.logger.info(logging.message)
+ environment.logger.info(message)
return
case 'warn':
- environment.logger.warn(colors.yellow(logging.message))
+ environment.logger.warn(colors.yellow(message))
return
case 'error':
- environment.logger.error(colors.red(logging.message))
+ environment.logger.error(colors.red(message))
return
case 'debug':
- debugLogger?.(logging.message)
+ debugLogger?.(message)
return
default:
logLeveling satisfies never
// fallback to info if a unknown log level is passed
- environment.logger.info(logging.message)
+ environment.logger.info(message)
return
}
}
@@ -1083,13 +1179,60 @@ function isExternal(id: string, test: string | RegExp) {
}
}
+export class ChunkMetadataMap {
+ private _inner = new Map()
+ private _resetChunks = new Set()
+
+ private _getKey(chunk: RenderedChunk | OutputChunk): string {
+ return 'preliminaryFileName' in chunk
+ ? chunk.preliminaryFileName
+ : chunk.fileName
+ }
+
+ private _getDefaultValue(chunk: RenderedChunk | OutputChunk): ChunkMetadata {
+ return {
+ importedAssets: new Set(),
+ importedCss: new Set(),
+ // NOTE: adding this as a workaround for now ideally we'd want to remove this workaround
+ // use shared `chunk.modules` object to allow mutation on js side plugins
+ __modules: chunk.modules,
+ }
+ }
+
+ get(chunk: RenderedChunk | OutputChunk): ChunkMetadata {
+ const key = this._getKey(chunk)
+ if (!this._inner.has(key)) {
+ this._inner.set(key, this._getDefaultValue(chunk))
+ }
+ return this._inner.get(key)!
+ }
+
+ // reset chunk metadata on the first RenderChunk call for watch mode
+ reset(chunk: RenderedChunk | OutputChunk): void {
+ const key = this._getKey(chunk)
+ if (this._resetChunks.has(key)) return
+
+ this._resetChunks.add(key)
+ this._inner.set(key, this._getDefaultValue(chunk))
+ }
+
+ clearResetChunks(): void {
+ this._resetChunks.clear()
+ }
+}
+
export function injectEnvironmentToHooks(
environment: Environment,
+ chunkMetadataMap: ChunkMetadataMap,
plugin: Plugin,
): Plugin {
const { resolveId, load, transform } = plugin
- const clone = { ...plugin }
+ // the plugin can be a class instance (e.g. native plugins)
+ const clone: Plugin = Object.assign(
+ Object.create(Object.getPrototypeOf(plugin)),
+ plugin,
+ )
for (const hook of Object.keys(clone) as RollupPluginHooks[]) {
switch (hook) {
@@ -1112,7 +1255,12 @@ export function injectEnvironmentToHooks(
break
default:
if (ROLLUP_HOOKS.includes(hook)) {
- ;(clone as any)[hook] = wrapEnvironmentHook(environment, clone[hook])
+ ;(clone as any)[hook] = wrapEnvironmentHook(
+ environment,
+ chunkMetadataMap,
+ plugin,
+ hook,
+ )
}
break
}
@@ -1203,8 +1351,11 @@ function wrapEnvironmentTransform(
function wrapEnvironmentHook(
environment: Environment,
- hook?: Plugin[HookName],
+ chunkMetadataMap: ChunkMetadataMap,
+ plugin: Plugin,
+ hookName: HookName,
): Plugin[HookName] {
+ const hook = plugin[hookName]
if (!hook) return
const fn = getHookHandler(hook)
@@ -1214,6 +1365,20 @@ function wrapEnvironmentHook(
this: PluginContext,
...args: any[]
) {
+ if (hookName === 'renderChunk') {
+ injectChunkMetadata(chunkMetadataMap, args[1], true)
+ }
+ if (hookName === 'augmentChunkHash') {
+ injectChunkMetadata(chunkMetadataMap, args[0])
+ }
+ if (hookName === 'generateBundle' || hookName === 'writeBundle') {
+ const bundle = args[1] as OutputBundle
+ for (const chunk of Object.values(bundle)) {
+ if (chunk.type === 'chunk') {
+ injectChunkMetadata(chunkMetadataMap, chunk)
+ }
+ }
+ }
return fn.call(injectEnvironmentInContext(this, environment), ...args)
}
@@ -1227,6 +1392,28 @@ function wrapEnvironmentHook(
}
}
+function injectChunkMetadata(
+ chunkMetadataMap: ChunkMetadataMap,
+ chunk: RenderedChunk | OutputChunk,
+ resetChunkMetadata = false,
+) {
+ if (resetChunkMetadata) {
+ chunkMetadataMap.reset(chunk)
+ }
+ // define instead of assign to avoid detected as a change
+ // https://github.com/rolldown/rolldown/blob/f4c5ff27799f2b0152c689c398e61bc7d30429ff/packages/rolldown/src/utils/transform-to-rollup-output.ts#L87
+ Object.defineProperty(chunk, 'viteMetadata', {
+ value: chunkMetadataMap.get(chunk),
+ enumerable: true,
+ })
+ Object.defineProperty(chunk, 'modules', {
+ get() {
+ return chunk.viteMetadata!.__modules
+ },
+ enumerable: true,
+ })
+}
+
function injectEnvironmentInContext(
context: Context,
environment: Environment,
@@ -1309,12 +1496,12 @@ const relativeUrlMechanisms: Record<
InternalModuleFormat,
(relativePath: string) => string
> = {
- amd: (relativePath) => {
- if (relativePath[0] !== '.') relativePath = './' + relativePath
- return getResolveUrl(
- `require.toUrl('${escapeId(relativePath)}'), document.baseURI`,
- )
- },
+ // amd: (relativePath) => {
+ // if (relativePath[0] !== '.') relativePath = './' + relativePath
+ // return getResolveUrl(
+ // `require.toUrl('${escapeId(relativePath)}'), document.baseURI`,
+ // )
+ // },
cjs: (relativePath) =>
`(typeof document === 'undefined' ? ${getFileUrlFromRelativePath(
relativePath,
@@ -1325,10 +1512,10 @@ const relativeUrlMechanisms: Record<
),
iife: (relativePath) => getRelativeUrlFromDocument(relativePath),
// NOTE: make sure rollup generate `module` params
- system: (relativePath) =>
- getResolveUrl(
- `'${escapeId(partialEncodeURIPath(relativePath))}', module.meta.url`,
- ),
+ // system: (relativePath) =>
+ // getResolveUrl(
+ // `'${escapeId(partialEncodeURIPath(relativePath))}', module.meta.url`,
+ // ),
umd: (relativePath) =>
`(typeof document === 'undefined' && typeof location === 'undefined' ? ${getFileUrlFromRelativePath(
relativePath,
@@ -1484,7 +1671,7 @@ export interface ViteBuilder {
buildApp(): Promise
build(
environment: BuildEnvironment,
- ): Promise
+ ): Promise
}
export interface BuilderOptions {
@@ -1589,7 +1776,7 @@ export async function createBuilder(
},
async build(
environment: BuildEnvironment,
- ): Promise {
+ ): Promise {
const output = await buildEnvironment(environment)
environment.isBuilt = true
return output
diff --git a/packages/vite/src/node/cli.ts b/packages/vite/src/node/cli.ts
index 6ed62cc5f833b2..b2f95d4f3809d6 100644
--- a/packages/vite/src/node/cli.ts
+++ b/packages/vite/src/node/cli.ts
@@ -238,7 +238,7 @@ cli
info(
`\n ${colors.green(
- `${colors.bold('VITE')} v${VERSION}`,
+ `${colors.bold('ROLLDOWN-VITE')} v${VERSION}`,
)}${modeString} ${startupDurationString}\n`,
{
clear: !hasExistingLogs,
diff --git a/packages/vite/src/node/config.ts b/packages/vite/src/node/config.ts
index 42e07c67ee9235..9f76b4ca1c2eb6 100644
--- a/packages/vite/src/node/config.ts
+++ b/packages/vite/src/node/config.ts
@@ -8,9 +8,14 @@ import { createRequire } from 'node:module'
import crypto from 'node:crypto'
import colors from 'picocolors'
import type { Alias, AliasOptions } from 'dep-types/alias'
-import type { PluginContextMeta, RollupOptions } from 'rollup'
import picomatch from 'picomatch'
-import { build } from 'esbuild'
+import {
+ type NormalizedOutputOptions,
+ type OutputChunk,
+ type PluginContextMeta,
+ type RolldownOptions,
+ rolldown,
+} from 'rolldown'
import type { AnymatchFn } from '../types/anymatch'
import { withTrailingSlash } from '../shared/utils'
import {
@@ -62,9 +67,11 @@ import {
resolveCSSOptions,
} from './plugins/css'
import {
+ arraify,
asyncFlatten,
createDebugger,
createFilter,
+ hasBothRollupOptionsAndRolldownOptions,
isExternalUrl,
isFilePathESM,
isInNodeModules,
@@ -78,6 +85,7 @@ import {
nodeLikeBuiltins,
normalizeAlias,
normalizePath,
+ setupRollupOptionCompat,
} from './utils'
import {
createPluginHookUtils,
@@ -105,6 +113,8 @@ import { PartialEnvironment } from './baseEnvironment'
import { createIdResolver } from './idResolver'
import { runnerImport } from './ssr/runnerImport'
import { getAdditionalAllowedHosts } from './server/middlewares/hostCheck'
+import { convertEsbuildPluginToRolldownPlugin } from './optimizer/pluginConverter'
+import { type OxcOptions, convertEsbuildConfigToOxcConfig } from './plugins/oxc'
import type { RequiredExceptFor } from './typeUtils'
import {
BasicMinimalPluginContext,
@@ -297,6 +307,8 @@ export type ResolvedEnvironmentOptions = {
dev: ResolvedDevEnvironmentOptions
build: ResolvedBuildEnvironmentOptions
plugins: readonly Plugin[]
+ /** @internal */
+ optimizeDepsPluginNames: string[]
}
export type DefaultEnvironmentOptions = Omit<
@@ -361,8 +373,15 @@ export interface UserConfig extends DefaultEnvironmentOptions {
/**
* Transform options to pass to esbuild.
* Or set to `false` to disable esbuild.
+ *
+ * @deprecated Use `oxc` option instead.
*/
esbuild?: ESBuildOptions | false
+ /**
+ * Transform options to pass to Oxc.
+ * Or set to `false` to disable Oxc.
+ */
+ oxc?: OxcOptions | false
/**
* Specify additional picomatch patterns to be treated as static assets.
*/
@@ -435,14 +454,22 @@ export interface UserConfig extends DefaultEnvironmentOptions {
/**
* Vite plugins that apply to worker bundle. The plugins returned by this function
* should be new instances every time it is called, because they are used for each
- * rollup worker bundling process.
+ * rolldown worker bundling process.
*/
plugins?: () => PluginOption[]
/**
- * Rollup options to build worker bundle
+ * Alias to `rolldownOptions`.
+ * @deprecated Use `rolldownOptions` instead.
*/
rollupOptions?: Omit<
- RollupOptions,
+ RolldownOptions,
+ 'plugins' | 'input' | 'onwarn' | 'preserveEntrySignatures'
+ >
+ /**
+ * Rolldown options to build worker bundle
+ */
+ rolldownOptions?: Omit<
+ RolldownOptions,
'plugins' | 'input' | 'onwarn' | 'preserveEntrySignatures'
>
}
@@ -513,6 +540,17 @@ export interface ExperimentalOptions {
* @default false
*/
hmrPartialAccept?: boolean
+ /**
+ * Enable builtin plugin that written by rust, which is faster than js plugin.
+ *
+ * - 'resolver': Enable only the native resolver plugin.
+ * - 'v1': Enable the first stable set of native plugins (including resolver).
+ * - true: Enable all native plugins (currently an alias of 'v1', it will map to a newer one in the future versions).
+ *
+ * @experimental
+ * @default 'v1'
+ */
+ enableNativePlugin?: boolean | 'resolver' | 'v1'
}
export interface LegacyOptions {
@@ -533,7 +571,11 @@ export interface LegacyOptions {
export interface ResolvedWorkerOptions {
format: 'es' | 'iife'
plugins: (bundleChain: string[]) => Promise
- rollupOptions: RollupOptions
+ /**
+ * @deprecated Use `rolldownOptions` instead.
+ */
+ rollupOptions: RolldownOptions
+ rolldownOptions: RolldownOptions
}
export interface InlineConfig extends UserConfig {
@@ -591,7 +633,9 @@ export interface ResolvedConfig
plugins: readonly Plugin[]
css: ResolvedCSSOptions
json: Required
+ /** @deprecated Use `oxc` option instead. */
esbuild: ESBuildOptions | false
+ oxc: OxcOptions | false
server: ResolvedServerOptions
dev: ResolvedDevEnvironmentOptions
/** @experimental */
@@ -600,6 +644,7 @@ export interface ResolvedConfig
preview: ResolvedPreviewOptions
ssr: ResolvedSSROptions
assetsInclude: (file: string) => boolean
+ rawAssetsInclude: (string | RegExp)[]
logger: Logger
/**
* Create an internal resolver to be used in special scenarios, e.g.
@@ -620,6 +665,10 @@ export interface ResolvedConfig
experimental: RequiredExceptFor
future: FutureOptions | undefined
environments: Record
+ /** @internal injected by legacy plugin */
+ isOutputOptionsForLegacyChunks?(
+ outputOptions: NormalizedOutputOptions,
+ ): boolean
/**
* The token to connect to the WebSocket server from browsers.
*
@@ -636,6 +685,8 @@ export interface ResolvedConfig
/** @internal */
safeModulePaths: Set
/** @internal */
+ nativePluginEnabledLevel: number
+ /** @internal */
[SYMBOL_RESOLVED_CONFIG]: true
} & PluginHookUtils
> {}
@@ -664,6 +715,7 @@ export const configDefaults = Object.freeze({
noExternal: [],
external: [],
preserveSymlinks: false,
+ tsconfigPaths: false,
alias: [],
},
@@ -701,6 +753,7 @@ export const configDefaults = Object.freeze({
importGlobRestoreExtension: false,
renderBuiltUrl: undefined,
hmrPartialAccept: false,
+ enableNativePlugin: process.env._VITE_TEST_JS_PLUGIN ? false : 'v1',
},
future: {
removePluginHookHandleHotUpdate: undefined,
@@ -729,6 +782,7 @@ export const configDefaults = Object.freeze({
exclude: [],
needsInterop: [],
// esbuildOptions
+ rollupOptions: {},
/** @experimental */
extensions: [],
/** @deprecated @experimental */
@@ -832,6 +886,7 @@ function resolveEnvironmentOptions(
resolve.preserveSymlinks,
forceOptimizeDeps,
consumer,
+ logger,
),
dev: resolveDevEnvironmentOptions(
options.dev,
@@ -845,6 +900,8 @@ function resolveEnvironmentOptions(
consumer,
),
plugins: undefined!, // to be resolved later
+ // will be set by `setOptimizeDepsPluginNames` later
+ optimizeDepsPluginNames: undefined!,
}
}
@@ -1019,7 +1076,140 @@ function resolveDepOptimizationOptions(
preserveSymlinks: boolean,
forceOptimizeDeps: boolean | undefined,
consumer: 'client' | 'server' | undefined,
+ logger: Logger,
): DepOptimizationOptions {
+ if (
+ optimizeDeps?.esbuildOptions &&
+ Object.keys(optimizeDeps.esbuildOptions).length > 0
+ ) {
+ logger.warn(
+ colors.yellow(
+ `You or a plugin you are using have set \`optimizeDeps.esbuildOptions\` ` +
+ `but this option is now deprecated. ` +
+ `Vite now uses Rolldown to optimize the dependencies. ` +
+ `Please use \`optimizeDeps.rollupOptions\` instead.`,
+ ),
+ )
+
+ optimizeDeps.rollupOptions ??= {}
+ optimizeDeps.rollupOptions.resolve ??= {}
+ optimizeDeps.rollupOptions.output ??= {}
+
+ const setResolveOptions = <
+ T extends keyof Exclude,
+ >(
+ key: T,
+ value: Exclude[T],
+ ) => {
+ if (
+ value !== undefined &&
+ optimizeDeps.rollupOptions!.resolve![key] === undefined
+ ) {
+ optimizeDeps.rollupOptions!.resolve![key] = value
+ }
+ }
+
+ if (
+ optimizeDeps.esbuildOptions.minify !== undefined &&
+ optimizeDeps.rollupOptions.output.minify === undefined
+ ) {
+ optimizeDeps.rollupOptions.output.minify =
+ optimizeDeps.esbuildOptions.minify
+ }
+ if (
+ optimizeDeps.esbuildOptions.treeShaking !== undefined &&
+ optimizeDeps.rollupOptions.treeshake === undefined
+ ) {
+ optimizeDeps.rollupOptions.treeshake =
+ optimizeDeps.esbuildOptions.treeShaking
+ }
+ if (
+ optimizeDeps.esbuildOptions.define !== undefined &&
+ optimizeDeps.rollupOptions.define === undefined
+ ) {
+ optimizeDeps.rollupOptions.define = optimizeDeps.esbuildOptions.define
+ }
+ if (optimizeDeps.esbuildOptions.loader !== undefined) {
+ const loader = optimizeDeps.esbuildOptions.loader
+ optimizeDeps.rollupOptions.moduleTypes ??= {}
+ for (const [key, value] of Object.entries(loader)) {
+ if (
+ optimizeDeps.rollupOptions.moduleTypes[key] === undefined &&
+ value !== 'copy' &&
+ value !== 'css' &&
+ value !== 'default' &&
+ value !== 'file' &&
+ value !== 'local-css'
+ ) {
+ optimizeDeps.rollupOptions.moduleTypes[key] = value
+ }
+ }
+ }
+ if (
+ optimizeDeps.esbuildOptions.preserveSymlinks !== undefined &&
+ optimizeDeps.rollupOptions.resolve.symlinks === undefined
+ ) {
+ optimizeDeps.rollupOptions.resolve.symlinks =
+ !optimizeDeps.esbuildOptions.preserveSymlinks
+ }
+ setResolveOptions(
+ 'extensions',
+ optimizeDeps.esbuildOptions.resolveExtensions,
+ )
+ setResolveOptions('mainFields', optimizeDeps.esbuildOptions.mainFields)
+ setResolveOptions('conditionNames', optimizeDeps.esbuildOptions.conditions)
+ if (
+ optimizeDeps.esbuildOptions.keepNames !== undefined &&
+ optimizeDeps.rollupOptions.keepNames === undefined
+ ) {
+ optimizeDeps.rollupOptions.keepNames =
+ optimizeDeps.esbuildOptions.keepNames
+ }
+
+ if (
+ optimizeDeps.esbuildOptions.platform !== undefined &&
+ optimizeDeps.rollupOptions.platform === undefined
+ ) {
+ optimizeDeps.rollupOptions.platform = optimizeDeps.esbuildOptions.platform
+ }
+
+ // NOTE: the following options cannot be converted
+ // - legalComments
+ // - target, supported (Vite used to transpile down to `ESBUILD_MODULES_TARGET`)
+ // - ignoreAnnotations
+ // - jsx, jsxFactory, jsxFragment, jsxImportSource, jsxDev, jsxSideEffects
+ // - tsconfigRaw, tsconfig
+
+ // NOTE: the following options can be converted but probably not worth it
+ // - sourceRoot
+ // - sourcesContent (`output.sourcemapExcludeSources` is not supported by rolldown)
+ // - drop
+ // - dropLabels
+ // - mangleProps, reserveProps, mangleQuoted, mangleCache
+ // - minifyWhitespace, minifyIdentifiers, minifySyntax
+ // - lineLimit
+ // - charset
+ // - pure (`treeshake.manualPureFunctions` is not supported by rolldown)
+ // - alias (it probably does not work the same with `resolve.alias`)
+ // - inject
+ // - banner, footer
+ // - nodePaths
+
+ // NOTE: the following options does not make sense to set / convert it
+ // - globalName (we only use ESM format)
+ // - color
+ // - logLimit
+ // - logOverride
+ // - splitting
+ // - outbase
+ // - packages (this should not be set)
+ // - allowOverwrite
+ // - publicPath (`file` loader is not supported by rolldown)
+ // - entryNames, chunkNames, assetNames (Vite does not support changing these options)
+ // - stdin
+ // - absWorkingDir
+ }
+
return mergeWithDefaults(
{
...configDefaults.optimizeDeps,
@@ -1028,12 +1218,54 @@ function resolveDepOptimizationOptions(
esbuildOptions: {
preserveSymlinks,
},
+ rollupOptions: {
+ resolve: {
+ symlinks: !preserveSymlinks,
+ },
+ output: {
+ topLevelVar: true,
+ },
+ },
force: forceOptimizeDeps ?? configDefaults.optimizeDeps.force,
},
optimizeDeps ?? {},
)
}
+async function setOptimizeDepsPluginNames(resolvedConfig: ResolvedConfig) {
+ await Promise.all(
+ Object.values(resolvedConfig.environments).map(async (environment) => {
+ const plugins = environment.optimizeDeps.rollupOptions?.plugins ?? []
+ const outputPlugins =
+ environment.optimizeDeps.rollupOptions?.output?.plugins ?? []
+ const flattenedPlugins = await asyncFlatten([plugins, outputPlugins])
+
+ const pluginNames = []
+ for (const plugin of flattenedPlugins) {
+ if (plugin && 'name' in plugin) {
+ pluginNames.push(plugin.name)
+ }
+ }
+ environment.optimizeDepsPluginNames = pluginNames
+ }),
+ )
+}
+
+function applyDepOptimizationOptionCompat(resolvedConfig: ResolvedConfig) {
+ if (
+ resolvedConfig.optimizeDeps.esbuildOptions?.plugins &&
+ resolvedConfig.optimizeDeps.esbuildOptions.plugins.length > 0
+ ) {
+ resolvedConfig.optimizeDeps.rollupOptions ??= {}
+ resolvedConfig.optimizeDeps.rollupOptions.plugins ||= []
+ ;(resolvedConfig.optimizeDeps.rollupOptions.plugins as any[]).push(
+ ...resolvedConfig.optimizeDeps.esbuildOptions.plugins.map((plugin) =>
+ convertEsbuildPluginToRolldownPlugin(plugin),
+ ),
+ )
+ }
+}
+
export function isResolvedConfig(
inlineConfig: InlineConfig | ResolvedConfig,
): inlineConfig is ResolvedConfig {
@@ -1055,6 +1287,16 @@ export async function resolveConfig(
patchPlugins: ((resolvedPlugins: Plugin[]) => void) | undefined = undefined,
): Promise {
let config = inlineConfig
+ config.build ??= {}
+ setupRollupOptionCompat(config.build)
+ config.worker ??= {}
+ setupRollupOptionCompat(config.worker)
+ config.optimizeDeps ??= {}
+ setupRollupOptionCompat(config.optimizeDeps)
+ config.ssr ??= {}
+ config.ssr.optimizeDeps ??= {}
+ setupRollupOptionCompat(config.ssr.optimizeDeps)
+
let configFileDependencies: string[] = []
let mode = inlineConfig.mode || defaultMode
const isNodeEnvSet = !!process.env.NODE_ENV
@@ -1473,11 +1715,18 @@ export async function resolveConfig(
return workerResolved
}
- const resolvedWorkerOptions: ResolvedWorkerOptions = {
+ const resolvedWorkerOptions: Omit<
+ ResolvedWorkerOptions,
+ 'rolldownOptions'
+ > & {
+ rolldownOptions: ResolvedWorkerOptions['rolldownOptions'] | undefined
+ } = {
format: config.worker?.format || 'iife',
plugins: createWorkerPlugins,
rollupOptions: config.worker?.rollupOptions || {},
+ rolldownOptions: config.worker?.rolldownOptions, // will be set by setupRollupOptionCompat if undefined
}
+ setupRollupOptionCompat(resolvedWorkerOptions)
const base = withTrailingSlash(resolvedBase)
@@ -1491,6 +1740,32 @@ export async function resolveConfig(
preview.allowedHosts.push(...additionalAllowedHosts)
}
+ let oxc: OxcOptions | false | undefined = config.oxc
+ if (config.esbuild) {
+ if (config.oxc) {
+ logger.warn(
+ colors.yellow(
+ `Both esbuild and oxc options were set. oxc options will be used and esbuild options will be ignored.`,
+ ),
+ )
+ } else {
+ oxc = convertEsbuildConfigToOxcConfig(config.esbuild, logger)
+ }
+ } else if (config.esbuild === false && config.oxc !== false) {
+ logger.warn(
+ colors.yellow(
+ `\`esbuild\` option is set to false, but \`oxc\` option was not set to false. ` +
+ `\`esbuild: false\` does not have effect any more. ` +
+ `If you want to disable the default transformation, which is now handled by Oxc, please set \`oxc: false\` instead.`,
+ ),
+ )
+ }
+
+ const experimental = mergeWithDefaults(
+ configDefaults.experimental,
+ config.experimental ?? {},
+ )
+
resolved = {
configFile: configFile ? normalizePath(configFile) : undefined,
configFileDependencies: configFileDependencies.map((name) =>
@@ -1512,6 +1787,7 @@ export async function resolveConfig(
plugins: userPlugins, // placeholder to be replaced
css: resolveCSSOptions(config.css),
json: mergeWithDefaults(configDefaults.json, config.json ?? {}),
+ // preserve esbuild for buildEsbuildPlugin
esbuild:
config.esbuild === false
? false
@@ -1519,6 +1795,19 @@ export async function resolveConfig(
jsxDev: !isProduction,
...config.esbuild,
},
+ oxc:
+ oxc === false
+ ? false
+ : {
+ ...oxc,
+ jsx:
+ typeof oxc?.jsx === 'string'
+ ? oxc.jsx
+ : {
+ development: oxc?.jsx?.development ?? !isProduction,
+ ...oxc?.jsx,
+ },
+ },
server,
builder,
preview,
@@ -1533,14 +1822,12 @@ export async function resolveConfig(
assetsInclude(file: string) {
return DEFAULT_ASSETS_RE.test(file) || assetsFilter(file)
},
+ rawAssetsInclude: config.assetsInclude ? arraify(config.assetsInclude) : [],
logger,
packageCache,
worker: resolvedWorkerOptions,
appType: config.appType ?? 'spa',
- experimental: mergeWithDefaults(
- configDefaults.experimental,
- config.experimental ?? {},
- ),
+ experimental,
future:
config.future === 'warn'
? ({
@@ -1605,6 +1892,9 @@ export async function resolveConfig(
},
),
safeModulePaths: new Set(),
+ nativePluginEnabledLevel: resolveNativePluginEnabledLevel(
+ experimental.enableNativePlugin,
+ ),
[SYMBOL_RESOLVED_CONFIG]: true,
}
resolved = {
@@ -1663,6 +1953,9 @@ export async function resolveConfig(
resolved.build.ssrEmitAssets || resolved.build.emitAssets
}
+ applyDepOptimizationOptionCompat(resolved)
+ await setOptimizeDepsPluginNames(resolved)
+
debug?.(`using resolved config: %O`, {
...resolved,
plugins: resolved.plugins.map((p) => p.name),
@@ -1726,9 +2019,40 @@ assetFileNames isn't equal for every build.rollupOptions.output. A single patter
)
}
+ if (
+ resolved.resolve.tsconfigPaths &&
+ resolved.experimental.enableNativePlugin === false
+ ) {
+ resolved.logger.warn(
+ colors.yellow(`
+(!) resolve.tsconfigPaths is set to true, but native plugins are disabled. To use resolve.tsconfigPaths, please enable native plugins via experimental.enableNativePlugin.
+`),
+ )
+ }
+
return resolved
}
+function resolveNativePluginEnabledLevel(
+ enableNativePlugin: Exclude<
+ ExperimentalOptions['enableNativePlugin'],
+ undefined
+ >,
+) {
+ switch (enableNativePlugin) {
+ case 'resolver':
+ return 0
+ case 'v1':
+ case true:
+ return 1
+ case false:
+ return -1
+ default:
+ enableNativePlugin satisfies never
+ return -1
+ }
+}
+
/**
* Resolve base url. Note that some users use Vite to build for non-web targets like
* electron or expects to deploy
@@ -1927,19 +2251,14 @@ async function bundleConfigFile(
const dirnameVarName = '__vite_injected_original_dirname'
const filenameVarName = '__vite_injected_original_filename'
const importMetaUrlVarName = '__vite_injected_original_import_meta_url'
- const result = await build({
- absWorkingDir: process.cwd(),
- entryPoints: [fileName],
- write: false,
- target: [`node${process.versions.node}`],
+
+ const bundle = await rolldown({
+ input: fileName,
+ // target: [`node${process.versions.node}`],
platform: 'node',
- bundle: true,
- format: isESM ? 'esm' : 'cjs',
- mainFields: ['main'],
- sourcemap: 'inline',
- // the last slash is needed to make the path correct
- sourceRoot: pathToFileURL(path.dirname(fileName)).href + '/',
- metafile: true,
+ resolve: {
+ mainFields: ['main'],
+ },
define: {
__dirname: dirnameVarName,
__filename: filenameVarName,
@@ -1948,48 +2267,46 @@ async function bundleConfigFile(
'import.meta.filename': filenameVarName,
'import.meta.main': 'false',
},
+ // disable treeshake to include files that is not sideeffectful to `moduleIds`
+ treeshake: false,
plugins: [
- {
- name: 'externalize-deps',
- setup(build) {
- const packageCache = new Map()
- const resolveByViteResolver = (
- id: string,
- importer: string,
- isRequire: boolean,
- ) => {
- return tryNodeResolve(id, importer, {
- root: path.dirname(fileName),
- isBuild: true,
- isProduction: true,
- preferRelative: false,
- tryIndex: true,
- mainFields: [],
- conditions: [
- 'node',
- ...(isModuleSyncConditionEnabled ? ['module-sync'] : []),
- ],
- externalConditions: [],
- external: [],
- noExternal: [],
- dedupe: [],
- extensions: configDefaults.resolve.extensions,
- preserveSymlinks: false,
- packageCache,
- isRequire,
- builtins: nodeLikeBuiltins,
- })?.id
- }
-
- // externalize bare imports
- build.onResolve(
- { filter: /^[^.#].*/ },
- async ({ path: id, importer, kind }) => {
- if (
- kind === 'entry-point' ||
- path.isAbsolute(id) ||
- isNodeBuiltin(id)
- ) {
+ (() => {
+ const packageCache = new Map()
+ const resolveByViteResolver = (
+ id: string,
+ importer: string,
+ isRequire: boolean,
+ ) => {
+ return tryNodeResolve(id, importer, {
+ root: path.dirname(fileName),
+ isBuild: true,
+ isProduction: true,
+ preferRelative: false,
+ tryIndex: true,
+ mainFields: [],
+ conditions: [
+ 'node',
+ ...(isModuleSyncConditionEnabled ? ['module-sync'] : []),
+ ],
+ externalConditions: [],
+ external: [],
+ noExternal: [],
+ dedupe: [],
+ extensions: configDefaults.resolve.extensions,
+ preserveSymlinks: false,
+ tsconfigPaths: false,
+ packageCache,
+ isRequire,
+ builtins: nodeLikeBuiltins,
+ })?.id
+ }
+
+ return {
+ name: 'externalize-deps',
+ resolveId: {
+ filter: { id: /^[^.#].*/ },
+ async handler(id, importer, { kind }) {
+ if (!importer || path.isAbsolute(id) || isNodeBuiltin(id)) {
return
}
@@ -1997,7 +2314,7 @@ async function bundleConfigFile(
// non-node built-in, which esbuild doesn't know how to handle. In that case, we
// externalize it so the non-node runtime handles it instead.
if (isNodeLikeBuiltin(id) || id.startsWith('npm:')) {
- return { external: true }
+ return { id, external: true }
}
const isImport = isESM || kind === 'dynamic-import'
@@ -2024,44 +2341,84 @@ async function bundleConfigFile(
}
throw e
}
+ if (!idFsPath) return
+ // always no-externalize json files as rolldown does not support import attributes
+ if (idFsPath.endsWith('.json')) {
+ return idFsPath
+ }
+
if (idFsPath && isImport) {
idFsPath = pathToFileURL(idFsPath).href
}
- return {
- path: idFsPath,
- external: true,
- }
+ return { id: idFsPath, external: true }
},
- )
- },
- },
+ },
+ }
+ })(),
{
name: 'inject-file-scope-variables',
- setup(build) {
- build.onLoad({ filter: /\.[cm]?[jt]s$/ }, async (args) => {
- const contents = await fsp.readFile(args.path, 'utf-8')
+ transform: {
+ filter: { id: /\.[cm]?[jt]s$/ },
+ async handler(code, id) {
const injectValues =
- `const ${dirnameVarName} = ${JSON.stringify(
- path.dirname(args.path),
- )};` +
- `const ${filenameVarName} = ${JSON.stringify(args.path)};` +
+ `const ${dirnameVarName} = ${JSON.stringify(path.dirname(id))};` +
+ `const ${filenameVarName} = ${JSON.stringify(id)};` +
`const ${importMetaUrlVarName} = ${JSON.stringify(
- pathToFileURL(args.path).href,
+ pathToFileURL(id).href,
)};`
-
- return {
- loader: args.path.endsWith('ts') ? 'ts' : 'js',
- contents: injectValues + contents,
- }
- })
+ return { code: injectValues + code, map: null }
+ },
},
},
],
})
- const { text } = result.outputFiles[0]
+ const result = await bundle.generate({
+ format: isESM ? 'esm' : 'cjs',
+ sourcemap: 'inline',
+ sourcemapPathTransform(relative) {
+ return path.resolve(fileName, relative)
+ },
+ // we want to generate a single chunk like esbuild does with `splitting: false`
+ inlineDynamicImports: true,
+ })
+ await bundle.close()
+
+ const entryChunk = result.output.find(
+ (chunk): chunk is OutputChunk => chunk.type === 'chunk' && chunk.isEntry,
+ )!
+ const bundleChunks = Object.fromEntries(
+ result.output.flatMap((c) => (c.type === 'chunk' ? [[c.fileName, c]] : [])),
+ )
+
+ const allModules = new Set()
+ collectAllModules(bundleChunks, entryChunk.fileName, allModules)
+
return {
- code: text,
- dependencies: Object.keys(result.metafile.inputs),
+ code: entryChunk.code,
+ dependencies: [...allModules],
+ }
+}
+
+function collectAllModules(
+ bundle: Record,
+ fileName: string,
+ allModules: Set,
+ analyzedModules = new Set(),
+) {
+ if (analyzedModules.has(fileName)) return
+ analyzedModules.add(fileName)
+
+ const chunk = bundle[fileName]!
+ for (const mod of chunk.moduleIds) {
+ allModules.add(mod)
+ }
+ for (const i of chunk.imports) {
+ analyzedModules.add(i)
+ collectAllModules(bundle, i, allModules, analyzedModules)
+ }
+ for (const i of chunk.dynamicImports) {
+ analyzedModules.add(i)
+ collectAllModules(bundle, i, allModules, analyzedModules)
}
}
@@ -2159,6 +2516,12 @@ async function runConfigHook(
const handler = getHookHandler(hook)
const res = await handler.call(context, conf, configEnv)
if (res && res !== conf) {
+ if (hasBothRollupOptionsAndRolldownOptions(res)) {
+ context.warn(
+ `Both \`rollupOptions\` and \`rolldownOptions\` were specified by ${JSON.stringify(p.name)} plugin. ` +
+ `\`rollupOptions\` specified by that plugin will be ignored.`,
+ )
+ }
conf = mergeConfig(conf, res)
}
}
diff --git a/packages/vite/src/node/constants.ts b/packages/vite/src/node/constants.ts
index f55d3675fddd10..79cf582e3c408c 100644
--- a/packages/vite/src/node/constants.ts
+++ b/packages/vite/src/node/constants.ts
@@ -20,9 +20,9 @@ export const ROLLUP_HOOKS = [
'footer',
'augmentChunkHash',
'outputOptions',
- 'renderDynamicImport',
- 'resolveFileUrl',
- 'resolveImportMeta',
+ // 'renderDynamicImport',
+ // 'resolveFileUrl',
+ // 'resolveImportMeta',
'intro',
'outro',
'closeBundle',
@@ -32,7 +32,7 @@ export const ROLLUP_HOOKS = [
'watchChange',
'resolveDynamicImport',
'resolveId',
- 'shouldTransformCachedModule',
+ // 'shouldTransformCachedModule',
'transform',
'onLog',
] satisfies RollupPluginHooks[]
diff --git a/packages/vite/src/node/environment.ts b/packages/vite/src/node/environment.ts
index b1cac275beae13..3a7dc18fec5d33 100644
--- a/packages/vite/src/node/environment.ts
+++ b/packages/vite/src/node/environment.ts
@@ -1,4 +1,4 @@
-import type { PluginContext } from 'rollup'
+import type { PluginContext } from 'rolldown'
import type { DevEnvironment } from './server/environment'
import type { BuildEnvironment } from './build'
import type { ScanEnvironment } from './optimizer/scan'
diff --git a/packages/vite/src/node/idResolver.ts b/packages/vite/src/node/idResolver.ts
index 7860d568fbf419..6f43238ded87e2 100644
--- a/packages/vite/src/node/idResolver.ts
+++ b/packages/vite/src/node/idResolver.ts
@@ -1,9 +1,9 @@
-import type { PartialResolvedId } from 'rollup'
+import type { PartialResolvedId } from 'rolldown'
import aliasPlugin from '@rollup/plugin-alias'
import type { ResolvedConfig } from './config'
import type { EnvironmentPluginContainer } from './server/pluginContainer'
import { createEnvironmentPluginContainer } from './server/pluginContainer'
-import { resolvePlugin } from './plugins/resolve'
+import { oxcResolvePlugin, resolvePlugin } from './plugins/resolve'
import type { InternalResolveOptions } from './plugins/resolve'
import type { Environment } from './environment'
import type { PartialEnvironment } from './baseEnvironment'
@@ -59,18 +59,36 @@ export function createIdResolver(
pluginContainer = await createEnvironmentPluginContainer(
environment as Environment,
[
+ // @ts-expect-error the aliasPlugin uses rollup types
aliasPlugin({ entries: environment.config.resolve.alias }),
- resolvePlugin({
- root: config.root,
- isProduction: config.isProduction,
- isBuild: config.command === 'build',
- asSrc: true,
- preferRelative: false,
- tryIndex: true,
- ...options,
- // Ignore sideEffects and other computations as we only need the id
- idOnly: true,
- }),
+ ...(config.experimental.enableNativePlugin
+ ? oxcResolvePlugin(
+ {
+ root: config.root,
+ isProduction: config.isProduction,
+ isBuild: config.command === 'build',
+ asSrc: true,
+ preferRelative: false,
+ tryIndex: true,
+ ...options,
+ // Ignore sideEffects and other computations as we only need the id
+ idOnly: true,
+ },
+ environment.config,
+ )
+ : [
+ resolvePlugin({
+ root: config.root,
+ isProduction: config.isProduction,
+ isBuild: config.command === 'build',
+ asSrc: true,
+ preferRelative: false,
+ tryIndex: true,
+ ...options,
+ // Ignore sideEffects and other computations as we only need the id
+ idOnly: true,
+ }),
+ ]),
],
undefined,
false,
@@ -93,6 +111,7 @@ export function createIdResolver(
if (!pluginContainer) {
pluginContainer = await createEnvironmentPluginContainer(
environment as Environment,
+ // @ts-expect-error the aliasPlugin uses rollup types
[aliasPlugin({ entries: environment.config.resolve.alias })],
undefined,
false,
diff --git a/packages/vite/src/node/index.ts b/packages/vite/src/node/index.ts
index de73b7814f663e..c8a70fd4f4d587 100644
--- a/packages/vite/src/node/index.ts
+++ b/packages/vite/src/node/index.ts
@@ -1,7 +1,9 @@
-import type * as Rollup from 'rollup'
+import type * as Rolldown from 'rolldown'
+import type * as Rollup from 'types/internal/rollupTypeCompat.mjs'
-export type { Rollup }
-export { parseAst, parseAstAsync } from 'rollup/parseAst'
+export type { Rollup, Rolldown }
+export { parseAst, parseAstAsync } from 'rolldown/parseAst'
+export { esmExternalRequirePlugin } from 'rolldown/experimental'
export {
defineConfig,
loadConfigFromFile,
@@ -19,6 +21,7 @@ export { createIdResolver } from './idResolver'
export { formatPostcssSourceMap, preprocessCSS } from './plugins/css'
export { transformWithEsbuild } from './plugins/esbuild'
+export { transformWithOxc } from './plugins/oxc'
export { buildErrorMessage } from './server/middlewares/error'
export {
@@ -58,14 +61,17 @@ export {
DEFAULT_SERVER_MAIN_FIELDS as defaultServerMainFields,
defaultAllowedOrigins,
} from './constants'
-export { version as esbuildVersion } from 'esbuild'
+// NOTE: export for backward compat
+export const esbuildVersion = '0.25.0'
export {
normalizePath,
mergeConfig,
mergeAlias,
createFilter,
+ withFilter,
isCSSRequest,
rollupVersion,
+ rolldownVersion,
} from './utils'
export { send } from './server/send'
export { createLogger } from './logger'
@@ -176,8 +182,9 @@ export type {
StylusPreprocessorOptions,
} from './plugins/css'
export type { JsonOptions } from './plugins/json'
-export type { TransformOptions as EsbuildTransformOptions } from 'esbuild'
-export type { ESBuildOptions, ESBuildTransformResult } from './plugins/esbuild'
+export type { ESBuildOptions } from './plugins/esbuild'
+export type { EsbuildTransformOptions } from 'types/internal/esbuildOptions'
+export type { OxcOptions } from './plugins/oxc'
export type { Manifest, ManifestChunk } from './plugins/manifest'
export type { ResolveOptions, InternalResolveOptions } from './plugins/resolve'
export type { TerserOptions } from './plugins/terser'
@@ -239,7 +246,7 @@ export type {
GeneralImportGlobOptions,
KnownAsTypeMap,
} from 'types/importGlob'
-export type { ChunkMetadata, CustomPluginOptionsVite } from 'types/metadata'
+export type { ChunkMetadata, CustomPluginOptionsVite } from 'types/metadata.mjs'
// dep types
export type {
diff --git a/packages/vite/src/node/internalIndex.ts b/packages/vite/src/node/internalIndex.ts
new file mode 100644
index 00000000000000..7acc4367d375de
--- /dev/null
+++ b/packages/vite/src/node/internalIndex.ts
@@ -0,0 +1 @@
+export { reactRefreshWrapperPlugin } from 'rolldown/experimental'
diff --git a/packages/vite/src/node/logger.ts b/packages/vite/src/node/logger.ts
index 8bfa027c61fcd2..b55d9351f1df6b 100644
--- a/packages/vite/src/node/logger.ts
+++ b/packages/vite/src/node/logger.ts
@@ -2,7 +2,7 @@
import readline from 'node:readline'
import colors from 'picocolors'
-import type { RollupError } from 'rollup'
+import type { RollupError } from 'rolldown'
import type { ResolvedServerUrls } from './server'
export type LogType = 'error' | 'warn' | 'info'
diff --git a/packages/vite/src/node/optimizer/esbuildDepPlugin.ts b/packages/vite/src/node/optimizer/esbuildDepPlugin.ts
deleted file mode 100644
index 09e9d84a23dfe0..00000000000000
--- a/packages/vite/src/node/optimizer/esbuildDepPlugin.ts
+++ /dev/null
@@ -1,345 +0,0 @@
-import path from 'node:path'
-import type { ImportKind, Plugin } from 'esbuild'
-import { JS_TYPES_RE, KNOWN_ASSET_TYPES } from '../constants'
-import type { PackageCache } from '../packages'
-import {
- escapeRegex,
- flattenId,
- isBuiltin,
- isCSSRequest,
- isExternalUrl,
- isNodeBuiltin,
- moduleListContains,
- normalizePath,
-} from '../utils'
-import { browserExternalId, optionalPeerDepId } from '../plugins/resolve'
-import { isModuleCSSRequest } from '../plugins/css'
-import type { Environment } from '../environment'
-import { createBackCompatIdResolver } from '../idResolver'
-
-const externalWithConversionNamespace =
- 'vite:dep-pre-bundle:external-conversion'
-const convertedExternalPrefix = 'vite-dep-pre-bundle-external:'
-
-const cjsExternalFacadeNamespace = 'vite:cjs-external-facade'
-const nonFacadePrefix = 'vite-cjs-external-facade:'
-
-const externalTypes = [
- 'css',
- // supported pre-processor types
- 'less',
- 'sass',
- 'scss',
- 'styl',
- 'stylus',
- 'pcss',
- 'postcss',
- // wasm
- 'wasm',
- // known SFC types
- 'vue',
- 'svelte',
- 'marko',
- 'astro',
- 'imba',
- // JSX/TSX may be configured to be compiled differently from how esbuild
- // handles it by default, so exclude them as well
- 'jsx',
- 'tsx',
- ...KNOWN_ASSET_TYPES,
-]
-
-export function esbuildDepPlugin(
- environment: Environment,
- qualified: Record,
- external: string[],
-): Plugin {
- const { isProduction } = environment.config
- const { extensions } = environment.config.optimizeDeps
-
- // remove optimizable extensions from `externalTypes` list
- const allExternalTypes = extensions
- ? externalTypes.filter((type) => !extensions.includes('.' + type))
- : externalTypes
-
- // use separate package cache for optimizer as it caches paths around node_modules
- // and it's unlikely for the core Vite process to traverse into node_modules again
- const esmPackageCache: PackageCache = new Map()
- const cjsPackageCache: PackageCache = new Map()
-
- // default resolver which prefers ESM
- const _resolve = createBackCompatIdResolver(environment.getTopLevelConfig(), {
- asSrc: false,
- scan: true,
- packageCache: esmPackageCache,
- })
-
- // cjs resolver that prefers Node
- const _resolveRequire = createBackCompatIdResolver(
- environment.getTopLevelConfig(),
- {
- asSrc: false,
- isRequire: true,
- scan: true,
- packageCache: cjsPackageCache,
- },
- )
-
- const resolve = (
- id: string,
- importer: string,
- kind: ImportKind,
- resolveDir?: string,
- ): Promise => {
- let _importer: string
- // explicit resolveDir - this is passed only during yarn pnp resolve for
- // entries
- if (resolveDir) {
- _importer = normalizePath(path.join(resolveDir, '*'))
- } else {
- // map importer ids to file paths for correct resolution
- _importer = importer in qualified ? qualified[importer] : importer
- }
- const resolver = kind.startsWith('require') ? _resolveRequire : _resolve
- return resolver(environment, id, _importer)
- }
-
- const resolveResult = (id: string, resolved: string) => {
- if (resolved.startsWith(browserExternalId)) {
- return {
- path: id,
- namespace: 'browser-external',
- }
- }
- if (resolved.startsWith(optionalPeerDepId)) {
- return {
- path: resolved,
- namespace: 'optional-peer-dep',
- }
- }
- if (isBuiltin(environment.config.resolve.builtins, resolved)) {
- return
- }
- if (isExternalUrl(resolved)) {
- return {
- path: resolved,
- external: true,
- }
- }
- return {
- path: path.resolve(resolved),
- }
- }
-
- return {
- name: 'vite:dep-pre-bundle',
- setup(build) {
- // clear package cache when esbuild is finished
- build.onEnd(() => {
- esmPackageCache.clear()
- cjsPackageCache.clear()
- })
-
- // externalize assets and commonly known non-js file types
- // See #8459 for more details about this require-import conversion
- build.onResolve(
- {
- filter: new RegExp(
- `\\.(` + allExternalTypes.join('|') + `)(\\?.*)?$`,
- ),
- },
- async ({ path: id, importer, kind }) => {
- // if the prefix exist, it is already converted to `import`, so set `external: true`
- if (id.startsWith(convertedExternalPrefix)) {
- return {
- path: id.slice(convertedExternalPrefix.length),
- external: true,
- }
- }
-
- const resolved = await resolve(id, importer, kind)
- if (resolved) {
- // `resolved` can be javascript even when `id` matches `allExternalTypes`
- // due to cjs resolution (e.g. require("./test.pdf") for "./test.pdf.js")
- // or package name (e.g. import "some-package.pdf")
- if (JS_TYPES_RE.test(resolved)) {
- return {
- path: resolved,
- external: false,
- }
- }
-
- if (kind === 'require-call') {
- // here it is not set to `external: true` to convert `require` to `import`
- return {
- path: resolved,
- namespace: externalWithConversionNamespace,
- }
- }
- return {
- path: resolved,
- external: true,
- }
- }
- },
- )
- build.onLoad(
- { filter: /./, namespace: externalWithConversionNamespace },
- (args) => {
- // import itself with prefix (this is the actual part of require-import conversion)
- const modulePath = `"${convertedExternalPrefix}${args.path}"`
- return {
- contents:
- isCSSRequest(args.path) && !isModuleCSSRequest(args.path)
- ? `import ${modulePath};`
- : `export { default } from ${modulePath};` +
- `export * from ${modulePath};`,
- loader: 'js',
- }
- },
- )
-
- function resolveEntry(id: string) {
- const flatId = flattenId(id)
- if (flatId in qualified) {
- return {
- path: qualified[flatId],
- }
- }
- }
-
- build.onResolve(
- { filter: /^[\w@][^:]/ },
- async ({ path: id, importer, kind }) => {
- if (moduleListContains(external, id)) {
- return {
- path: id,
- external: true,
- }
- }
-
- // ensure esbuild uses our resolved entries
- let entry: { path: string } | undefined
- // if this is an entry, return entry namespace resolve result
- if (!importer) {
- if ((entry = resolveEntry(id))) return entry
- // check if this is aliased to an entry - also return entry namespace
- const aliased = await _resolve(environment, id, undefined, true)
- if (aliased && (entry = resolveEntry(aliased))) {
- return entry
- }
- }
-
- // use vite's own resolver
- const resolved = await resolve(id, importer, kind)
- if (resolved) {
- return resolveResult(id, resolved)
- }
- },
- )
-
- build.onLoad(
- { filter: /.*/, namespace: 'browser-external' },
- ({ path }) => {
- if (isProduction) {
- return {
- contents: 'module.exports = {}',
- }
- } else {
- return {
- // Return in CJS to intercept named imports. Use `Object.create` to
- // create the Proxy in the prototype to workaround esbuild issue. Why?
- //
- // In short, esbuild cjs->esm flow:
- // 1. Create empty object using `Object.create(Object.getPrototypeOf(module.exports))`.
- // 2. Assign props of `module.exports` to the object.
- // 3. Return object for ESM use.
- //
- // If we do `module.exports = new Proxy({}, {})`, step 1 returns empty object,
- // step 2 does nothing as there's no props for `module.exports`. The final object
- // is just an empty object.
- //
- // Creating the Proxy in the prototype satisfies step 1 immediately, which means
- // the returned object is a Proxy that we can intercept.
- //
- // Note: Skip keys that are accessed by esbuild and browser devtools.
- contents: `\
-module.exports = Object.create(new Proxy({}, {
- get(_, key) {
- if (
- key !== '__esModule' &&
- key !== '__proto__' &&
- key !== 'constructor' &&
- key !== 'splice'
- ) {
- console.warn(\`Module "${path}" has been externalized for browser compatibility. Cannot access "${path}.\${key}" in client code. See https://vite.dev/guide/troubleshooting.html#module-externalized-for-browser-compatibility for more details.\`)
- }
- }
-}))`,
- }
- }
- },
- )
-
- build.onLoad(
- { filter: /.*/, namespace: 'optional-peer-dep' },
- ({ path }) => {
- const [, peerDep, parentDep] = path.split(':')
- return {
- contents:
- 'module.exports = {};' +
- `throw new Error(\`Could not resolve "${peerDep}" imported by "${parentDep}".${isProduction ? '' : ' Is it installed?'}\`)`,
- }
- },
- )
- },
- }
-}
-
-const matchesEntireLine = (text: string) => `^${escapeRegex(text)}$`
-
-// esbuild doesn't transpile `require('foo')` into `import` statements if 'foo' is externalized
-// https://github.com/evanw/esbuild/issues/566#issuecomment-735551834
-export function esbuildCjsExternalPlugin(
- externals: string[],
- platform: 'node' | 'browser' | 'neutral',
-): Plugin {
- return {
- name: 'cjs-external',
- setup(build) {
- const filter = new RegExp(externals.map(matchesEntireLine).join('|'))
-
- build.onResolve({ filter: new RegExp(`^${nonFacadePrefix}`) }, (args) => {
- return {
- path: args.path.slice(nonFacadePrefix.length),
- external: true,
- }
- })
-
- build.onResolve({ filter }, (args) => {
- // preserve `require` for node because it's more accurate than converting it to import
- if (args.kind === 'require-call' && platform !== 'node') {
- return {
- path: args.path,
- namespace: cjsExternalFacadeNamespace,
- }
- }
-
- return {
- path: args.path,
- external: true,
- }
- })
-
- build.onLoad(
- { filter: /.*/, namespace: cjsExternalFacadeNamespace },
- (args) => ({
- contents: `\
-import * as m from ${JSON.stringify(nonFacadePrefix + args.path)};
-module.exports = ${isNodeBuiltin(args.path) ? 'm.default' : '{ ...m }'};
-`,
- }),
- )
- },
- }
-}
diff --git a/packages/vite/src/node/optimizer/index.ts b/packages/vite/src/node/optimizer/index.ts
index db698b8c3b722c..34c34ad54815ab 100644
--- a/packages/vite/src/node/optimizer/index.ts
+++ b/packages/vite/src/node/optimizer/index.ts
@@ -4,12 +4,19 @@ import path from 'node:path'
import { promisify } from 'node:util'
import { performance } from 'node:perf_hooks'
import colors from 'picocolors'
-import type { BuildContext, BuildOptions as EsbuildBuildOptions } from 'esbuild'
-import esbuild, { build, formatMessages } from 'esbuild'
+import type { DepsOptimizerEsbuildOptions } from 'types/internal/esbuildOptions'
import { init, parse } from 'es-module-lexer'
import { isDynamicPattern } from 'tinyglobby'
+import {
+ type RolldownOptions,
+ type RolldownOutput,
+ type OutputOptions as RolldownOutputOptions,
+ rolldown,
+} from 'rolldown'
import type { ResolvedConfig } from '../config'
import {
+ arraify,
+ asyncFlatten,
createDebugger,
flattenId,
getHash,
@@ -21,24 +28,20 @@ import {
tryStatSync,
unique,
} from '../utils'
-import {
- defaultEsbuildSupported,
- transformWithEsbuild,
-} from '../plugins/esbuild'
-import {
- ESBUILD_BASELINE_WIDELY_AVAILABLE_TARGET,
- METADATA_FILENAME,
-} from '../constants'
+import { METADATA_FILENAME } from '../constants'
import { isWindows } from '../../shared/utils'
import type { Environment } from '../environment'
-import { esbuildCjsExternalPlugin, esbuildDepPlugin } from './esbuildDepPlugin'
+import { transformWithOxc } from '../plugins/oxc'
import { ScanEnvironment, scanImports } from './scan'
import { createOptimizeDepsIncludeResolver, expandGlobIds } from './resolve'
+import {
+ rolldownCjsExternalPlugin,
+ rolldownDepPlugin,
+} from './rolldownDepPlugin'
const debug = createDebugger('vite:deps')
const jsExtensionRE = /\.js$/i
-const jsMapExtensionRE = /\.js\.map$/i
export type ExportsData = {
hasModuleSyntax: boolean
@@ -92,20 +95,33 @@ export interface DepOptimizationConfig {
* - `plugins` are merged with Vite's dep plugin
*
* https://esbuild.github.io/api
+ *
+ * @deprecated Use `rolldownOptions` instead.
+ */
+ esbuildOptions?: DepsOptimizerEsbuildOptions
+ /**
+ * @deprecated Use `rolldownOptions` instead.
+ */
+ rollupOptions?: Omit & {
+ output?: Omit<
+ RolldownOutputOptions,
+ 'format' | 'sourcemap' | 'dir' | 'banner'
+ >
+ }
+ /**
+ * Options to pass to rolldown during the dep scanning and optimization
+ *
+ * Certain options are omitted since changing them would not be compatible
+ * with Vite's dep optimization.
+ *
+ * - `plugins` are merged with Vite's dep plugin
*/
- esbuildOptions?: Omit<
- EsbuildBuildOptions,
- | 'bundle'
- | 'entryPoints'
- | 'external'
- | 'write'
- | 'watch'
- | 'outdir'
- | 'outfile'
- | 'outbase'
- | 'outExtension'
- | 'metafile'
- >
+ rolldownOptions?: Omit & {
+ output?: Omit<
+ RolldownOutputOptions,
+ 'format' | 'sourcemap' | 'dir' | 'banner'
+ >
+ }
/**
* List of file extensions that can be optimized. A corresponding esbuild
* plugin must exist to handle the specific extension.
@@ -203,6 +219,7 @@ export interface OptimizedDepInfo {
* data used both to define if interop is needed and when pre-bundling
*/
exportsData?: Promise
+ isDynamicEntry?: boolean
}
export interface DepOptimizationMetadata {
@@ -616,7 +633,7 @@ export function runOptimizeDeps(
const start = performance.now()
- const preparedRun = prepareEsbuildOptimizerRun(
+ const preparedRun = prepareRolldownOptimizerRun(
environment,
depsInfo,
processingCacheDir,
@@ -624,64 +641,49 @@ export function runOptimizeDeps(
)
const runResult = preparedRun.then(({ context, idToExports }) => {
- function disposeContext() {
- return context?.dispose().catch((e) => {
- environment.logger.error('Failed to dispose esbuild context', {
- error: e,
- })
- })
- }
if (!context || optimizerContext.cancelled) {
- disposeContext()
return cancelledResult
}
return context
- .rebuild()
+ .build()
.then((result) => {
- const meta = result.metafile!
+ const depForEntryFileName: Record = {}
+ for (const dep of Object.values(depsInfo)) {
+ const entryFileName = flattenId(dep.id) + '.js'
+ depForEntryFileName[entryFileName] = dep
+ }
- // the paths in `meta.outputs` are relative to `process.cwd()`
- const processingCacheDirOutputPath = path.relative(
- process.cwd(),
- processingCacheDir,
- )
+ for (const chunk of result.output) {
+ if (chunk.type !== 'chunk') continue
- for (const id in depsInfo) {
- const output = esbuildOutputFromId(
- meta.outputs,
- id,
- processingCacheDir,
- )
-
- const { exportsData, ...info } = depsInfo[id]
- addOptimizedDepInfo(metadata, 'optimized', {
- ...info,
- // We only need to hash the output.imports in to check for stability, but adding the hash
- // and file path gives us a unique hash that may be useful for other things in the future
- fileHash: getHash(
- metadata.hash +
- depsInfo[id].file +
- JSON.stringify(output.imports),
- ),
- browserHash: metadata.browserHash,
- // After bundling we have more information and can warn the user about legacy packages
- // that require manual configuration
- needsInterop: needsInterop(
- environment,
+ if (chunk.isEntry) {
+ const { exportsData, file, id, ...info } =
+ depForEntryFileName[chunk.fileName]
+ addOptimizedDepInfo(metadata, 'optimized', {
id,
- idToExports[id],
- output,
- ),
- })
- }
-
- for (const o of Object.keys(meta.outputs)) {
- if (!jsMapExtensionRE.test(o)) {
- const id = path
- .relative(processingCacheDirOutputPath, o)
- .replace(jsExtensionRE, '')
- const file = getOptimizedDepPath(environment, id)
+ file,
+ ...info,
+ // We only need to hash the chunk.imports in to check for stability, but adding the hash
+ // and file path gives us a unique hash that may be useful for other things in the future
+ fileHash: getHash(
+ metadata.hash + file + JSON.stringify(chunk.imports),
+ ),
+ browserHash: metadata.browserHash,
+ // After bundling we have more information and can warn the user about legacy packages
+ // that require manual configuration
+ needsInterop: needsInterop(
+ environment,
+ id,
+ idToExports[id],
+ chunk,
+ ),
+ })
+ } else {
+ const id = chunk.fileName.replace(jsExtensionRE, '')
+ const file = normalizePath(
+ path.resolve(getDepsCacheDir(environment), chunk.fileName),
+ )
if (
!findOptimizedDepInfoInRecord(
metadata.optimized,
@@ -693,27 +695,9 @@ export function runOptimizeDeps(
file,
needsInterop: false,
browserHash: metadata.browserHash,
+ isDynamicEntry: chunk.isDynamicEntry,
})
}
- } else {
- // workaround Firefox warning by removing blank source map reference
- // https://github.com/evanw/esbuild/issues/3945
- const output = meta.outputs[o]
- // filter by exact bytes of an empty source map
- if (output.bytes === 93) {
- const jsMapPath = path.resolve(o)
- const jsPath = jsMapPath.slice(0, -4)
- if (fs.existsSync(jsPath) && fs.existsSync(jsMapPath)) {
- const map = JSON.parse(fs.readFileSync(jsMapPath, 'utf-8'))
- if (map.sources.length === 0) {
- const js = fs.readFileSync(jsPath, 'utf-8')
- fs.writeFileSync(
- jsPath,
- js.slice(0, js.lastIndexOf('//# sourceMappingURL=')),
- )
- }
- }
- }
}
}
@@ -724,29 +708,18 @@ export function runOptimizeDeps(
return successfulResult
})
- .catch(async (e) => {
+ .catch((e) => {
if (e.errors && e.message.includes('The build was canceled')) {
- // esbuild logs an error when cancelling, but this is expected so
+ // an error happens when cancelling, but this is expected so
// return an empty result instead
return cancelledResult
}
const prependMessage = colors.red(
'Error during dependency optimization:\n\n',
)
- if (e.errors) {
- const msgs = await formatMessages(e.errors, {
- kind: 'error',
- color: true,
- })
- e.message = prependMessage + msgs.join('\n')
- } else {
- e.message = prependMessage + e.message
- }
+ e.message = prependMessage + e.message
throw e
})
- .finally(() => {
- return disposeContext()
- })
})
runResult.catch(() => {
@@ -757,20 +730,20 @@ export function runOptimizeDeps(
async cancel() {
optimizerContext.cancelled = true
const { context } = await preparedRun
- await context?.cancel()
+ context?.cancel()
cleanUp()
},
result: runResult,
}
}
-async function prepareEsbuildOptimizerRun(
+async function prepareRolldownOptimizerRun(
environment: Environment,
depsInfo: Record,
processingCacheDir: string,
optimizerContext: { cancelled: boolean },
): Promise<{
- context?: BuildContext
+ context?: { build: () => Promise; cancel: () => void }
idToExports: Record
}> {
// esbuild generates nested directory output with lowest common ancestor base
@@ -784,21 +757,19 @@ async function prepareEsbuildOptimizerRun(
const { optimizeDeps } = environment.config
- const { plugins: pluginsFromConfig = [], ...esbuildOptions } =
- optimizeDeps.esbuildOptions ?? {}
+ const { plugins: pluginsFromConfig = [], ...rollupOptions } =
+ optimizeDeps.rollupOptions ?? {}
+ let jsxLoader = false
await Promise.all(
Object.keys(depsInfo).map(async (id) => {
const src = depsInfo[id].src!
const exportsData = await (depsInfo[id].exportsData ??
extractExportsData(environment, src))
- if (exportsData.jsxLoader && !esbuildOptions.loader?.['.js']) {
+ if (exportsData.jsxLoader) {
// Ensure that optimization won't fail by defaulting '.js' to the JSX parser.
// This is useful for packages such as Gatsby.
- esbuildOptions.loader = {
- '.js': 'jsx',
- ...esbuildOptions.loader,
- }
+ jsxLoader = true
}
const flatId = flattenId(id)
flatIdDeps[flatId] = src
@@ -814,10 +785,11 @@ async function prepareEsbuildOptimizerRun(
// as esbuild will replace it automatically when `platform` is `'browser'`
'process.env.NODE_ENV'
: JSON.stringify(process.env.NODE_ENV || environment.config.mode),
+ ...rollupOptions.define,
}
const platform =
- optimizeDeps.esbuildOptions?.platform ??
+ optimizeDeps.rollupOptions?.platform ??
// We generally don't want to use platform 'neutral', as esbuild has custom handling
// when the platform is 'node' or 'browser' that can't be emulated by using mainFields
// and conditions
@@ -828,43 +800,53 @@ async function prepareEsbuildOptimizerRun(
const external = [...(optimizeDeps.exclude ?? [])]
- const plugins = [...pluginsFromConfig]
+ const plugins = await asyncFlatten(arraify(pluginsFromConfig))
if (external.length) {
- plugins.push(esbuildCjsExternalPlugin(external, platform))
+ plugins.push(rolldownCjsExternalPlugin(external, platform))
}
- plugins.push(esbuildDepPlugin(environment, flatIdDeps, external))
-
- const context = await esbuild.context({
- absWorkingDir: process.cwd(),
- entryPoints: Object.keys(flatIdDeps),
- bundle: true,
- platform,
- define,
- format: 'esm',
- // See https://github.com/evanw/esbuild/issues/1921#issuecomment-1152991694
- banner:
- platform === 'node'
- ? {
- js: `import { createRequire } from 'module';const require = createRequire(import.meta.url);`,
- }
- : undefined,
- target: ESBUILD_BASELINE_WIDELY_AVAILABLE_TARGET,
- external,
- logLevel: 'error',
- splitting: true,
- sourcemap: true,
- outdir: processingCacheDir,
- ignoreAnnotations: true,
- metafile: true,
- plugins,
- charset: 'utf8',
- ...esbuildOptions,
- supported: {
- ...defaultEsbuildSupported,
- ...esbuildOptions.supported,
- },
- })
- return { context, idToExports }
+ plugins.push(...rolldownDepPlugin(environment, flatIdDeps, external))
+
+ let canceled = false
+ async function build() {
+ const bundle = await rolldown({
+ ...rollupOptions,
+ // TODO: pass target
+ input: flatIdDeps,
+ logLevel: 'silent',
+ plugins,
+ define,
+ platform,
+ resolve: {
+ extensions: ['.tsx', '.ts', '.jsx', '.js', '.css', '.json'],
+ ...rollupOptions.resolve,
+ },
+ // TODO: remove this and enable rolldown's CSS support later
+ moduleTypes: {
+ '.css': 'js',
+ ...rollupOptions.moduleTypes,
+ ...(jsxLoader ? { '.js': 'jsx' } : {}),
+ },
+ })
+ if (canceled) {
+ await bundle.close()
+ throw new Error('The build was canceled')
+ }
+ const result = await bundle.write({
+ ...rollupOptions.output,
+ format: 'esm',
+ sourcemap: true,
+ dir: processingCacheDir,
+ entryFileNames: '[name].js',
+ })
+ await bundle.close()
+ return result
+ }
+
+ function cancel() {
+ canceled = true
+ }
+
+ return { context: { build, cancel }, idToExports }
}
export async function addManuallyIncludedOptimizeDeps(
@@ -1061,19 +1043,23 @@ function stringifyDepsOptimizerMetadata(
browserHash,
optimized: Object.fromEntries(
Object.values(optimized).map(
- ({ id, src, file, fileHash, needsInterop }) => [
+ ({ id, src, file, fileHash, needsInterop, isDynamicEntry }) => [
id,
{
src,
file,
fileHash,
needsInterop,
+ isDynamicEntry,
},
],
),
),
chunks: Object.fromEntries(
- Object.values(chunks).map(({ id, file }) => [id, { file }]),
+ Object.values(chunks).map(({ id, file, isDynamicEntry }) => [
+ id,
+ { file, isDynamicEntry },
+ ]),
),
},
(key: string, value: string) => {
@@ -1088,29 +1074,6 @@ function stringifyDepsOptimizerMetadata(
)
}
-function esbuildOutputFromId(
- outputs: Record,
- id: string,
- cacheDirOutputPath: string,
-): any {
- const cwd = process.cwd()
- const flatId = flattenId(id) + '.js'
- const normalizedOutputPath = normalizePath(
- path.relative(cwd, path.join(cacheDirOutputPath, flatId)),
- )
- const output = outputs[normalizedOutputPath]
- if (output) {
- return output
- }
- // If the root dir was symlinked, esbuild could return output keys as `../cwd/`
- // Normalize keys to support this case too
- for (const [key, value] of Object.entries(outputs)) {
- if (normalizePath(path.relative(cwd, key)) === normalizedOutputPath) {
- return value
- }
- }
-}
-
export async function extractExportsData(
environment: Environment,
filePath: string,
@@ -1119,18 +1082,38 @@ export async function extractExportsData(
const { optimizeDeps } = environment.config
- const esbuildOptions = optimizeDeps.esbuildOptions ?? {}
+ const rollupOptions = optimizeDeps.rollupOptions ?? {}
if (optimizeDeps.extensions?.some((ext) => filePath.endsWith(ext))) {
// For custom supported extensions, build the entry file to transform it into JS,
// and then parse with es-module-lexer. Note that the `bundle` option is not `true`,
// so only the entry file is being transformed.
- const result = await build({
- ...esbuildOptions,
- entryPoints: [filePath],
- write: false,
+ const { plugins: pluginsFromConfig = [], ...remainingRollupOptions } =
+ rollupOptions
+ const plugins = await asyncFlatten(arraify(pluginsFromConfig))
+ plugins.unshift({
+ name: 'externalize',
+ resolveId(id, importer) {
+ if (importer !== undefined) {
+ return { id, external: true }
+ }
+ },
+ })
+ const build = await rolldown({
+ ...remainingRollupOptions,
+ plugins,
+ input: [filePath],
+ // TODO: remove this and enable rolldown's CSS support later
+ moduleTypes: {
+ '.css': 'js',
+ ...remainingRollupOptions.moduleTypes,
+ },
+ })
+ const result = await build.generate({
+ ...rollupOptions.output,
format: 'esm',
+ sourcemap: false,
})
- const [, exports, , hasModuleSyntax] = parse(result.outputFiles[0].text)
+ const [, exports, , hasModuleSyntax] = parse(result.output[0].code)
return {
hasModuleSyntax,
exports: exports.map((e) => e.n),
@@ -1140,18 +1123,21 @@ export async function extractExportsData(
let parseResult: ReturnType
let usedJsxLoader = false
- const entryContent = await fsp.readFile(filePath, 'utf-8')
+ const entryContent = fs.readFileSync(filePath, 'utf-8')
try {
parseResult = parse(entryContent)
} catch {
- const loader = esbuildOptions.loader?.[path.extname(filePath)] || 'jsx'
+ const lang = rollupOptions.moduleTypes?.[path.extname(filePath)] || 'jsx'
debug?.(
- `Unable to parse: ${filePath}.\n Trying again with a ${loader} transform.`,
+ `Unable to parse: ${filePath}.\n Trying again with a ${lang} transform.`,
)
- const transformed = await transformWithEsbuild(
+ if (lang !== 'jsx' && lang !== 'tsx' && lang !== 'ts') {
+ throw new Error(`Unable to parse : ${filePath}.`)
+ }
+ const transformed = await transformWithOxc(
entryContent,
filePath,
- { loader },
+ { lang },
undefined,
environment.config,
)
@@ -1275,11 +1261,19 @@ function getConfigHash(environment: Environment): string {
exclude: optimizeDeps.exclude
? unique(optimizeDeps.exclude).sort()
: undefined,
- esbuildOptions: {
- ...optimizeDeps.esbuildOptions,
- plugins: optimizeDeps.esbuildOptions?.plugins?.map((p) => p.name),
+ rollupOptions: {
+ ...optimizeDeps.rollupOptions,
+ plugins: undefined, // included in optimizeDepsPluginNames
+ onLog: undefined,
+ onwarn: undefined,
+ checks: undefined,
+ output: {
+ ...optimizeDeps.rollupOptions?.output,
+ plugins: undefined, // included in optimizeDepsPluginNames
+ },
},
},
+ optimizeDepsPluginNames: config.optimizeDepsPluginNames,
},
(_, value) => {
if (typeof value === 'function' || value instanceof RegExp) {
diff --git a/packages/vite/src/node/optimizer/pluginConverter.ts b/packages/vite/src/node/optimizer/pluginConverter.ts
new file mode 100644
index 00000000000000..92ba610f85f8eb
--- /dev/null
+++ b/packages/vite/src/node/optimizer/pluginConverter.ts
@@ -0,0 +1,307 @@
+import { dirname } from 'node:path'
+import type * as esbuild from 'esbuild'
+import type {
+ ImportKind,
+ LoadResult,
+ PartialResolvedId,
+ PluginContext,
+ ResolveIdResult,
+ Plugin as RolldownPlugin,
+ RolldownPluginOption,
+} from 'rolldown'
+
+type MaybePromise = T | Promise
+type EsbuildOnResolveCallback = (
+ args: esbuild.OnResolveArgs,
+) => MaybePromise
+type EsbuildOnLoadCallback = (
+ args: esbuild.OnLoadArgs,
+) => MaybePromise
+type ResolveIdHandler = (
+ this: PluginContext,
+ id: string,
+ importer: string | undefined,
+ opts: { kind: ImportKind },
+) => MaybePromise<
+ | (PartialResolvedId & { namespace?: string })
+ | Exclude
+>
+type LoadHandler = (this: PluginContext, id: string) => MaybePromise
+
+export function convertEsbuildPluginToRolldownPlugin(
+ esbuildPlugin: esbuild.Plugin,
+): RolldownPlugin {
+ const onStartCallbacks: Array<() => void> = []
+ const onEndCallbacks: Array<(buildResult: esbuild.BuildResult) => void> = []
+ const onDisposeCallbacks: Array<() => void> = []
+ let resolveIdHandlers: ResolveIdHandler[]
+ let loadHandlers: LoadHandler[]
+
+ let isSetupDone = false
+ const setup = async (
+ plugins: RolldownPluginOption[],
+ platform: 'browser' | 'node' | 'neutral',
+ ) => {
+ const onResolveCallbacks: Array<
+ [options: esbuild.OnResolveOptions, callback: EsbuildOnResolveCallback]
+ > = []
+ const onLoadCallbacks: Array<
+ [options: esbuild.OnLoadOptions, callback: EsbuildOnLoadCallback]
+ > = []
+
+ const pluginBuild: esbuild.PluginBuild = {
+ initialOptions: new Proxy(
+ {
+ platform,
+ plugins:
+ plugins?.flatMap((p) =>
+ p && 'name' in p
+ ? [
+ {
+ name: p.name,
+ // eslint-disable-next-line @typescript-eslint/no-empty-function
+ setup() {},
+ },
+ ]
+ : [],
+ ) ?? [],
+ },
+ {
+ get(target, p, _receiver) {
+ if (p in target) return (target as any)[p]
+ throw new Error('Not implemented')
+ },
+ },
+ ) as esbuild.BuildOptions,
+ resolve() {
+ throw new Error('Not implemented')
+ },
+ onStart(callback) {
+ onStartCallbacks.push(callback)
+ },
+ onEnd(callback) {
+ onEndCallbacks.push(callback)
+ },
+ onResolve(options, callback) {
+ onResolveCallbacks.push([options, callback])
+ },
+ onLoad(options, callback) {
+ onLoadCallbacks.push([options, callback])
+ },
+ onDispose(callback) {
+ onDisposeCallbacks.push(callback)
+ },
+ get esbuild(): esbuild.PluginBuild['esbuild'] {
+ throw new Error('Not implemented')
+ },
+ set esbuild(_: unknown) {
+ throw new Error('Not implemented')
+ },
+ }
+
+ await esbuildPlugin.setup(pluginBuild)
+
+ resolveIdHandlers = onResolveCallbacks.map(([options, callback]) =>
+ createResolveIdHandler(options, callback),
+ )
+ loadHandlers = onLoadCallbacks.map(([options, callback]) =>
+ createLoadHandler(options, callback),
+ )
+ isSetupDone = true
+ }
+
+ const usedNamespaces = new Set()
+ return {
+ name: esbuildPlugin.name,
+ async options(inputOptions) {
+ await setup(
+ inputOptions.plugins as RolldownPluginOption[],
+ inputOptions.platform ?? 'node',
+ )
+ },
+ async buildStart(inputOptions) {
+ // options hook is not called for scanner
+ if (!isSetupDone) {
+ // inputOptions.plugins is not available for buildStart hook
+ // put a dummy plugin to tell that this is a scan
+ await setup(
+ [{ name: 'vite:dep-scan' }],
+ inputOptions.platform ?? 'node',
+ )
+ }
+
+ for (const cb of onStartCallbacks) {
+ cb()
+ }
+ },
+ generateBundle() {
+ const buildResult = new Proxy(
+ {},
+ {
+ get(_target, _prop) {
+ throw new Error('Not implemented')
+ },
+ },
+ ) as esbuild.BuildResult
+ for (const cb of onEndCallbacks) {
+ cb(buildResult)
+ }
+ },
+ async resolveId(id, importer, opts) {
+ for (const handler of resolveIdHandlers) {
+ const result = await handler.call(this, id, importer, opts)
+ if (result) {
+ if (typeof result === 'object' && result.namespace) {
+ usedNamespaces.add(result.namespace)
+ }
+ return result
+ }
+ }
+ if (usedNamespaces.size) {
+ const [importerWithoutNamespace, namespaceFromImporter] =
+ idToPathAndNamespace(importer)
+ if (usedNamespaces.has(namespaceFromImporter)) {
+ return await this.resolve(id, importerWithoutNamespace, opts)
+ }
+ }
+ },
+ async load(id) {
+ for (const handler of loadHandlers) {
+ const result = await handler.call(this, id)
+ if (result) {
+ return result
+ }
+ }
+ },
+ closeBundle() {
+ if (!this.meta.watchMode) {
+ for (const cb of onDisposeCallbacks) {
+ cb()
+ }
+ }
+ },
+ closeWatcher() {
+ for (const cb of onDisposeCallbacks) {
+ cb()
+ }
+ },
+ }
+}
+
+function createResolveIdHandler(
+ options: esbuild.OnResolveOptions,
+ callback: EsbuildOnResolveCallback,
+): ResolveIdHandler {
+ return async function (id, importer, opts) {
+ const [importerWithoutNamespace, importerNamespace] =
+ idToPathAndNamespace(importer)
+ if (
+ options.namespace !== undefined &&
+ options.namespace !== importerNamespace
+ ) {
+ return
+ }
+ if (options.filter !== undefined && !options.filter.test(id)) {
+ return
+ }
+
+ const result = await callback({
+ path: id,
+ importer: importerWithoutNamespace ?? '',
+ namespace: importerNamespace,
+ resolveDir: dirname(importerWithoutNamespace ?? ''),
+ kind:
+ importerWithoutNamespace === undefined
+ ? 'entry-point'
+ : opts.kind === 'new-url' || opts.kind === 'hot-accept'
+ ? 'dynamic-import'
+ : opts.kind,
+ pluginData: {},
+ with: {},
+ })
+ if (!result) return
+ if (result.errors && result.errors.length > 0) {
+ throw new AggregateError(result.errors)
+ }
+ if (
+ (result.warnings && result.warnings.length > 0) ||
+ (result.watchDirs && result.watchDirs.length > 0) ||
+ !result.path
+ ) {
+ throw new Error('not implemented')
+ }
+ for (const file of result.watchFiles ?? []) {
+ this.addWatchFile(file)
+ }
+
+ return {
+ id: result.namespace ? `${result.namespace}:${result.path}` : result.path,
+ external: result.external,
+ moduleSideEffects: result.sideEffects,
+ namespace: result.namespace,
+ }
+ }
+}
+
+function createLoadHandler(
+ options: esbuild.OnLoadOptions,
+ callback: EsbuildOnLoadCallback,
+): LoadHandler {
+ const textDecoder = new TextDecoder()
+ return async function (id) {
+ const [idWithoutNamespace, idNamespace] = idToPathAndNamespace(id)
+ if (options.namespace !== undefined && options.namespace !== idNamespace) {
+ return
+ }
+ if (options.filter !== undefined && !options.filter.test(id)) {
+ return
+ }
+
+ const result = await callback.call(this, {
+ path: idWithoutNamespace,
+ namespace: idNamespace,
+ suffix: '',
+ pluginData: {},
+ with: {},
+ })
+ if (!result) return
+ if (result.errors && result.errors.length > 0) {
+ throw new AggregateError(result.errors)
+ }
+ if (
+ (result.warnings && result.warnings.length > 0) ||
+ (result.watchDirs && result.watchDirs.length > 0) ||
+ !result.contents
+ ) {
+ throw new Error('not implemented')
+ }
+ for (const file of result.watchFiles ?? []) {
+ this.addWatchFile(file)
+ }
+
+ return {
+ code:
+ typeof result.contents === 'string'
+ ? result.contents
+ : textDecoder.decode(result.contents),
+ moduleType: result.loader,
+ }
+ }
+}
+
+function idToPathAndNamespace(id: string): [path: string, namespace: string]
+function idToPathAndNamespace(
+ id: string | undefined,
+): [path: string | undefined, namespace: string]
+function idToPathAndNamespace(
+ id: string | undefined,
+): [path: string | undefined, namespace: string] {
+ if (id === undefined) return [undefined, 'file']
+
+ const namespaceIndex = id.indexOf(':')
+ if (namespaceIndex >= 0) {
+ return [id.slice(namespaceIndex + 1), id.slice(0, namespaceIndex)]
+ } else {
+ return [id, 'file']
+ }
+}
diff --git a/packages/vite/src/node/optimizer/rolldownDepPlugin.ts b/packages/vite/src/node/optimizer/rolldownDepPlugin.ts
new file mode 100644
index 00000000000000..12f76bed986c96
--- /dev/null
+++ b/packages/vite/src/node/optimizer/rolldownDepPlugin.ts
@@ -0,0 +1,366 @@
+import path from 'node:path'
+import type { ImportKind, Plugin, RolldownPlugin } from 'rolldown'
+import { prefixRegex } from '@rolldown/pluginutils'
+import { JS_TYPES_RE, KNOWN_ASSET_TYPES } from '../constants'
+import type { PackageCache } from '../packages'
+import {
+ escapeRegex,
+ flattenId,
+ isBuiltin,
+ isCSSRequest,
+ isExternalUrl,
+ isNodeBuiltin,
+ moduleListContains,
+ normalizePath,
+} from '../utils'
+import { browserExternalId, optionalPeerDepId } from '../plugins/resolve'
+import { isModuleCSSRequest } from '../plugins/css'
+import type { Environment } from '../environment'
+import { createBackCompatIdResolver } from '../idResolver'
+import { isWindows } from '../../shared/utils'
+
+const externalWithConversionNamespace =
+ 'vite:dep-pre-bundle:external-conversion'
+const convertedExternalPrefix = 'vite-dep-pre-bundle-external:'
+
+const cjsExternalFacadeNamespace = 'vite:cjs-external-facade'
+const nonFacadePrefix = 'vite-cjs-external-facade:'
+
+const externalTypes = [
+ 'css',
+ // supported pre-processor types
+ 'less',
+ 'sass',
+ 'scss',
+ 'styl',
+ 'stylus',
+ 'pcss',
+ 'postcss',
+ // wasm
+ 'wasm',
+ // known SFC types
+ 'vue',
+ 'svelte',
+ 'marko',
+ 'astro',
+ 'imba',
+ // JSX/TSX may be configured to be compiled differently from how esbuild
+ // handles it by default, so exclude them as well
+ 'jsx',
+ 'tsx',
+ ...KNOWN_ASSET_TYPES,
+]
+
+const optionalPeerDepNamespace = 'optional-peer-dep:'
+const browserExternalNamespace = 'browser-external:'
+
+export function rolldownDepPlugin(
+ environment: Environment,
+ qualified: Record,
+ external: string[],
+): RolldownPlugin[] {
+ const { isProduction } = environment.config
+ const { extensions } = environment.config.optimizeDeps
+
+ // remove optimizable extensions from `externalTypes` list
+ const allExternalTypes = extensions
+ ? externalTypes.filter((type) => !extensions.includes('.' + type))
+ : externalTypes
+
+ // use separate package cache for optimizer as it caches paths around node_modules
+ // and it's unlikely for the core Vite process to traverse into node_modules again
+ const esmPackageCache: PackageCache = new Map()
+ const cjsPackageCache: PackageCache = new Map()
+
+ // default resolver which prefers ESM
+ const _resolve = createBackCompatIdResolver(environment.getTopLevelConfig(), {
+ asSrc: false,
+ scan: true,
+ packageCache: esmPackageCache,
+ })
+
+ // cjs resolver that prefers Node
+ const _resolveRequire = createBackCompatIdResolver(
+ environment.getTopLevelConfig(),
+ {
+ asSrc: false,
+ isRequire: true,
+ scan: true,
+ packageCache: cjsPackageCache,
+ },
+ )
+
+ const resolve = (
+ id: string,
+ importer: string | undefined,
+ kind: ImportKind,
+ resolveDir?: string,
+ ): Promise => {
+ let _importer: string | undefined
+ // explicit resolveDir - this is passed only during yarn pnp resolve for
+ // entries
+ if (resolveDir) {
+ _importer = normalizePath(path.join(resolveDir, '*'))
+ } else if (importer) {
+ // map importer ids to file paths for correct resolution
+ _importer = importer in qualified ? qualified[importer] : importer
+ }
+ const resolver = kind.startsWith('require') ? _resolveRequire : _resolve
+ return resolver(environment, id, _importer)
+ }
+
+ const resolveResult = (id: string, resolved: string) => {
+ if (resolved.startsWith(browserExternalId)) {
+ return {
+ id: browserExternalNamespace + id,
+ }
+ }
+ if (resolved.startsWith(optionalPeerDepId)) {
+ return {
+ id: optionalPeerDepNamespace + resolved,
+ }
+ }
+ if (isBuiltin(environment.config.resolve.builtins, resolved)) {
+ return
+ }
+ if (isExternalUrl(resolved)) {
+ return {
+ id: resolved,
+ external: 'absolute',
+ }
+ }
+ return {
+ id: path.resolve(resolved),
+ }
+ }
+
+ const allExternalTypesReg = new RegExp(
+ `\\.(` + allExternalTypes.join('|') + `)(\\?.*)?$`,
+ )
+
+ function resolveEntry(id: string) {
+ const flatId = flattenId(id)
+ if (flatId in qualified) {
+ return {
+ id: qualified[flatId],
+ }
+ }
+ }
+
+ return [
+ {
+ name: 'vite:dep-pre-bundle-assets',
+ // externalize assets and commonly known non-js file types
+ // See #8459 for more details about this require-import conversion
+ resolveId: {
+ filter: { id: allExternalTypesReg },
+ async handler(id, importer, options) {
+ const kind = options.kind
+ // if the prefix exist, it is already converted to `import`, so set `external: true`
+ if (id.startsWith(convertedExternalPrefix)) {
+ return {
+ id: id.slice(convertedExternalPrefix.length),
+ external: 'absolute',
+ }
+ }
+
+ const resolved = await resolve(id, importer, kind)
+ if (resolved) {
+ // `resolved` can be javascript even when `id` matches `allExternalTypes`
+ // due to cjs resolution (e.g. require("./test.pdf") for "./test.pdf.js")
+ // or package name (e.g. import "some-package.pdf")
+ if (JS_TYPES_RE.test(resolved)) {
+ return {
+ // normalize to \\ on windows for esbuild/rolldown behavior difference: https://github.com/sapphi-red-repros/rolldown-esbuild-path-normalization
+ id: isWindows ? resolved.replaceAll('/', '\\') : resolved,
+ external: false,
+ }
+ }
+
+ if (kind === 'require-call') {
+ // here it is not set to `external: true` to convert `require` to `import`
+ return {
+ id: externalWithConversionNamespace + resolved,
+ }
+ }
+ return {
+ id: resolved,
+ external: 'absolute',
+ }
+ }
+ },
+ },
+ load: {
+ filter: {
+ id: prefixRegex(externalWithConversionNamespace),
+ },
+ handler(id) {
+ const path = id.slice(externalWithConversionNamespace.length)
+ // import itself with prefix (this is the actual part of require-import conversion)
+ const modulePath = `"${convertedExternalPrefix}${path}"`
+ return {
+ code:
+ isCSSRequest(path) && !isModuleCSSRequest(path)
+ ? `import ${modulePath};`
+ : `export { default } from ${modulePath};` +
+ `export * from ${modulePath};`,
+ }
+ },
+ },
+ },
+ {
+ name: 'vite:dep-pre-bundle',
+ // clear package cache when build is finished
+ buildEnd() {
+ esmPackageCache.clear()
+ cjsPackageCache.clear()
+ },
+ resolveId: {
+ filter: { id: /^[\w@][^:]/ },
+ async handler(id, importer, options) {
+ const kind = options.kind
+
+ if (moduleListContains(external, id)) {
+ return {
+ id: id,
+ external: 'absolute',
+ }
+ }
+
+ // ensure rolldown uses our resolved entries
+ let entry: { id: string } | undefined
+ // if this is an entry, return entry namespace resolve result
+ if (!importer) {
+ if ((entry = resolveEntry(id))) return entry
+ // check if this is aliased to an entry - also return entry namespace
+ const aliased = await _resolve(environment, id, undefined, true)
+ if (aliased && (entry = resolveEntry(aliased))) {
+ return entry
+ }
+ }
+
+ // use vite's own resolver
+ const resolved = await resolve(id, importer, kind)
+ if (resolved) {
+ return resolveResult(id, resolved)
+ }
+ },
+ },
+ load: {
+ filter: {
+ id: [
+ prefixRegex(browserExternalNamespace),
+ prefixRegex(optionalPeerDepNamespace),
+ ],
+ },
+ handler(id) {
+ if (id.startsWith(browserExternalNamespace)) {
+ const path = id.slice(browserExternalNamespace.length)
+ if (isProduction) {
+ return {
+ code: 'module.exports = {}',
+ }
+ } else {
+ return {
+ // Return in CJS to intercept named imports. Use `Object.create` to
+ // create the Proxy in the prototype to workaround esbuild issue. Why?
+ //
+ // In short, esbuild cjs->esm flow:
+ // 1. Create empty object using `Object.create(Object.getPrototypeOf(module.exports))`.
+ // 2. Assign props of `module.exports` to the object.
+ // 3. Return object for ESM use.
+ //
+ // If we do `module.exports = new Proxy({}, {})`, step 1 returns empty object,
+ // step 2 does nothing as there's no props for `module.exports`. The final object
+ // is just an empty object.
+ //
+ // Creating the Proxy in the prototype satisfies step 1 immediately, which means
+ // the returned object is a Proxy that we can intercept.
+ //
+ // Note: Skip keys that are accessed by esbuild and browser devtools.
+ code: `\
+ module.exports = Object.create(new Proxy({}, {
+ get(_, key) {
+ if (
+ key !== '__esModule' &&
+ key !== '__proto__' &&
+ key !== 'constructor' &&
+ key !== 'splice'
+ ) {
+ console.warn(\`Module "${path}" has been externalized for browser compatibility. Cannot access "${path}.\${key}" in client code. See http://vite.dev/guide/troubleshooting.html#module-externalized-for-browser-compatibility for more details.\`)
+ }
+ }
+ }))`,
+ }
+ }
+ }
+
+ if (id.startsWith(optionalPeerDepNamespace)) {
+ const path = id.slice(optionalPeerDepNamespace.length)
+ const [, peerDep, parentDep] = path.split(':')
+ return {
+ code:
+ 'module.exports = {};' +
+ `throw new Error(\`Could not resolve "${peerDep}" imported by "${parentDep}". Is it installed?\`)`,
+ }
+ }
+ },
+ },
+ },
+ ]
+}
+
+const matchesEntireLine = (text: string) => `^${escapeRegex(text)}$`
+
+// rolldown (and esbuild) doesn't transpile `require('foo')` into `import` statements if 'foo' is externalized
+// https://github.com/evanw/esbuild/issues/566#issuecomment-735551834
+export function rolldownCjsExternalPlugin(
+ externals: string[],
+ platform: 'node' | 'browser' | 'neutral',
+): Plugin {
+ const filter = new RegExp(externals.map(matchesEntireLine).join('|'))
+
+ return {
+ name: 'cjs-external',
+ resolveId: {
+ filter: { id: [prefixRegex(nonFacadePrefix), filter] },
+ handler(id, _importer, options) {
+ if (id.startsWith(nonFacadePrefix)) {
+ return {
+ id: id.slice(nonFacadePrefix.length),
+ external: 'absolute',
+ }
+ }
+
+ if (filter.test(id)) {
+ const kind = options.kind
+ // preserve `require` for node because it's more accurate than converting it to import
+ if (kind === 'require-call' && platform !== 'node') {
+ return {
+ id: cjsExternalFacadeNamespace + id,
+ }
+ }
+
+ return {
+ id,
+ external: 'absolute',
+ }
+ }
+ },
+ },
+ load: {
+ filter: { id: prefixRegex(cjsExternalFacadeNamespace) },
+ handler(id) {
+ if (id.startsWith(cjsExternalFacadeNamespace)) {
+ const idWithoutNamespace = id.slice(cjsExternalFacadeNamespace.length)
+ return {
+ code: `\
+import * as m from ${JSON.stringify(nonFacadePrefix + idWithoutNamespace)};
+module.exports = ${isNodeBuiltin(idWithoutNamespace) ? 'm.default' : '{ ...m }'};
+`,
+ }
+ }
+ },
+ },
+ }
+}
diff --git a/packages/vite/src/node/optimizer/scan.ts b/packages/vite/src/node/optimizer/scan.ts
index 569e7bf2b493e2..b877d406cc92f5 100644
--- a/packages/vite/src/node/optimizer/scan.ts
+++ b/packages/vite/src/node/optimizer/scan.ts
@@ -2,15 +2,8 @@ import fs from 'node:fs'
import fsp from 'node:fs/promises'
import path from 'node:path'
import { performance } from 'node:perf_hooks'
-import type {
- BuildContext,
- Loader,
- OnLoadArgs,
- OnLoadResult,
- Plugin,
-} from 'esbuild'
-import esbuild, { formatMessages, transform } from 'esbuild'
-import type { PartialResolvedId } from 'rollup'
+import { scan, transform } from 'rolldown/experimental'
+import type { PartialResolvedId, Plugin } from 'rolldown'
import colors from 'picocolors'
import { glob } from 'tinyglobby'
import {
@@ -21,8 +14,10 @@ import {
} from '../constants'
import {
arraify,
+ asyncFlatten,
createDebugger,
dataUrlRE,
+ deepClone,
externalRE,
isInNodeModules,
isObject,
@@ -41,6 +36,7 @@ import type { DevEnvironment } from '../server/environment'
import { transformGlobImport } from '../plugins/importMetaGlob'
import { cleanUrl } from '../../shared/utils'
import { loadTsconfigJsonForFile } from '../plugins/esbuild'
+import { setOxcTransformOptionsFromTsconfigOptions } from '../plugins/oxc'
export class ScanEnvironment extends BaseEnvironment {
mode = 'scan' as const
@@ -100,7 +96,7 @@ export function devToScanEnvironment(
const debug = createDebugger('vite:deps')
-const htmlTypesRE = /\.(html|vue|svelte|astro|imba)$/
+const htmlTypesRE = /\.(?:html|vue|svelte|astro|imba)$/
// A simple regex to detect import sources. This is only used on
//
diff --git a/playground/resolve-tsconfig-paths/package.json b/playground/resolve-tsconfig-paths/package.json
new file mode 100644
index 00000000000000..e4b0a23a3c65a3
--- /dev/null
+++ b/playground/resolve-tsconfig-paths/package.json
@@ -0,0 +1,12 @@
+{
+ "name": "@vitejs/test-resolve-tsconfig-paths",
+ "private": true,
+ "version": "0.0.0",
+ "type": "module",
+ "scripts": {
+ "dev": "vite",
+ "build": "vite build",
+ "debug": "node --inspect-brk ../../packages/vite/bin/vite",
+ "preview": "vite preview"
+ }
+}
diff --git a/playground/resolve-tsconfig-paths/src/imported.js b/playground/resolve-tsconfig-paths/src/imported.js
new file mode 100644
index 00000000000000..49d5a8f82b28e5
--- /dev/null
+++ b/playground/resolve-tsconfig-paths/src/imported.js
@@ -0,0 +1 @@
+export default '[success] imported'
diff --git a/playground/resolve-tsconfig-paths/src/js.js b/playground/resolve-tsconfig-paths/src/js.js
new file mode 100644
index 00000000000000..8d1fff745b93ac
--- /dev/null
+++ b/playground/resolve-tsconfig-paths/src/js.js
@@ -0,0 +1 @@
+export { default } from '@/imported'
diff --git a/playground/resolve-tsconfig-paths/src/ts.ts b/playground/resolve-tsconfig-paths/src/ts.ts
new file mode 100644
index 00000000000000..8d1fff745b93ac
--- /dev/null
+++ b/playground/resolve-tsconfig-paths/src/ts.ts
@@ -0,0 +1 @@
+export { default } from '@/imported'
diff --git a/playground/resolve-tsconfig-paths/tsconfig.json b/playground/resolve-tsconfig-paths/tsconfig.json
new file mode 100644
index 00000000000000..8d9202c7c1d633
--- /dev/null
+++ b/playground/resolve-tsconfig-paths/tsconfig.json
@@ -0,0 +1,11 @@
+{
+ "compilerOptions": {
+ "allowJs": true,
+ "noEmit": true,
+ "paths": {
+ "@/*": ["./src/*"],
+ "@fallback/*": ["./src/*", "./fallback/*"]
+ }
+ },
+ "exclude": ["./__tests__"]
+}
diff --git a/playground/resolve-tsconfig-paths/vite.config.js b/playground/resolve-tsconfig-paths/vite.config.js
new file mode 100644
index 00000000000000..25158f653fe3fa
--- /dev/null
+++ b/playground/resolve-tsconfig-paths/vite.config.js
@@ -0,0 +1,10 @@
+import { defineConfig } from 'vite'
+
+export default defineConfig({
+ resolve: {
+ tsconfigPaths: true,
+ },
+ experimental: {
+ enableNativePlugin: 'resolver',
+ },
+})
diff --git a/playground/resolve/__tests__/resolve.spec.ts b/playground/resolve/__tests__/resolve.spec.ts
index 4f2d4f8714eb50..4c250088dcf692 100644
--- a/playground/resolve/__tests__/resolve.spec.ts
+++ b/playground/resolve/__tests__/resolve.spec.ts
@@ -139,11 +139,13 @@ test('Resolve browser field even if module field exists', async () => {
expect(await page.textContent('.browser-module1')).toMatch('[success]')
})
-test('Resolve module field if browser field is likely UMD or CJS', async () => {
+// should not fallback
+test.skip('Resolve module field if browser field is likely UMD or CJS', async () => {
expect(await page.textContent('.browser-module2')).toMatch('[success]')
})
-test('Resolve module field if browser field is likely IIFE', async () => {
+// should not fallback
+test.skip('Resolve module field if browser field is likely IIFE', async () => {
expect(await page.textContent('.browser-module3')).toMatch('[success]')
})
diff --git a/playground/resolve/browser-field/relative.js b/playground/resolve/browser-field/relative.js
index 660d6be578a728..6b45c5758d37dd 100644
--- a/playground/resolve/browser-field/relative.js
+++ b/playground/resolve/browser-field/relative.js
@@ -4,7 +4,6 @@ import rb from './no-ext.js' // no substitution
import rc from './ext'
import rd from './ext.js'
import re from './ext-index/index.js'
-import rf from './ext-index'
-import rg from './no-ext-index/index.js' // no substitution
+import rf from './no-ext-index/index.js' // no substitution
-export { ra, rb, rc, rd, re, rf, rg }
+export { ra, rb, rc, rd, re, rf }
diff --git a/playground/resolve/index.html b/playground/resolve/index.html
index dcbc08d6bde165..0d6145c049a6d9 100644
--- a/playground/resolve/index.html
+++ b/playground/resolve/index.html
@@ -325,7 +325,8 @@ utf8-bom-package
import c from '@vitejs/test-resolve-browser-field/ext'
import d from '@vitejs/test-resolve-browser-field/ext.js'
import e from '@vitejs/test-resolve-browser-field/ext-index/index.js'
- import f from '@vitejs/test-resolve-browser-field/ext-index'
+ // webpack does not support this case, so should be fine
+ // import f from '@vitejs/test-resolve-browser-field/ext-index'
import g from '@vitejs/test-resolve-browser-field/no-ext-index/index.js' // no substitution
import h from '@vitejs/test-resolve-browser-field/no-ext?query'
import i from '@vitejs/test-resolve-browser-field/bare-import'
@@ -337,11 +338,10 @@ utf8-bom-package
rd,
re,
rf,
- rg,
} from '@vitejs/test-resolve-browser-field/relative'
- const success = [main, a, c, d, e, f, h, i, ra, rc, rd, re, rf]
- const noSuccess = [b, g, rb, rg]
+ const success = [main, a, c, d, e, h, i, ra, rc, rd, re]
+ const noSuccess = [b, g, rb, rf]
if (
[...success, ...noSuccess].filter((text) => text.includes('[success]'))
@@ -353,11 +353,13 @@ utf8-bom-package
import browserModule1 from '@vitejs/test-resolve-browser-module-field1'
text('.browser-module1', browserModule1)
- import browserModule2 from '@vitejs/test-resolve-browser-module-field2'
- text('.browser-module2', browserModule2)
+ // should not fallback
+ // import browserModule2 from '@vitejs/test-resolve-browser-module-field2'
+ // text('.browser-module2', browserModule2)
- import browserModule3 from '@vitejs/test-resolve-browser-module-field3'
- text('.browser-module3', browserModule3)
+ // should not fallback
+ // import browserModule3 from '@vitejs/test-resolve-browser-module-field3'
+ // text('.browser-module3', browserModule3)
import { msg as requireButWithModuleFieldMsg } from '@vitejs/test-require-pkg-with-module-field'
text('.require-pkg-with-module-field', requireButWithModuleFieldMsg)
diff --git a/playground/transform-plugin/__tests__/transform-plugin.spec.ts b/playground/transform-plugin/__tests__/transform-plugin.spec.ts
index 6ef86c1fd23b6a..472f71cd5238b5 100644
--- a/playground/transform-plugin/__tests__/transform-plugin.spec.ts
+++ b/playground/transform-plugin/__tests__/transform-plugin.spec.ts
@@ -1,3 +1,10 @@
+import { expect, test } from 'vitest'
import { tests } from './tests'
+import { page } from '~utils'
+
+test('module type should be supported', async () => {
+ expect(await page.textContent('#module-type-json-pre')).toBe('json')
+ expect(await page.textContent('#module-type-json-post')).toBe('js')
+})
tests()
diff --git a/playground/transform-plugin/foo.json b/playground/transform-plugin/foo.json
new file mode 100644
index 00000000000000..753f11a8226717
--- /dev/null
+++ b/playground/transform-plugin/foo.json
@@ -0,0 +1,4 @@
+{
+ "moduleTypePre": "MODULE_TYPE_PRE",
+ "moduleTypePost": "MODULE_TYPE_POST"
+}
diff --git a/playground/transform-plugin/index.html b/playground/transform-plugin/index.html
index 83450ae9ed2350..3efd3c72a082f4 100644
--- a/playground/transform-plugin/index.html
+++ b/playground/transform-plugin/index.html
@@ -1,3 +1,10 @@
+Transform Plugin
+
+addWatchFile
+Module Type
+
+
+
diff --git a/playground/transform-plugin/index.js b/playground/transform-plugin/index.js
index ac3da49609d222..ba6aa964365879 100644
--- a/playground/transform-plugin/index.js
+++ b/playground/transform-plugin/index.js
@@ -1,2 +1,9 @@
+import fooJson from './foo.json'
+
// 'TRANSFORM_COUNT' is injected by the transform plugin
document.getElementById('transform-count').innerHTML = TRANSFORM_COUNT
+
+document.getElementById('module-type-json-pre').innerHTML =
+ fooJson.moduleTypePre
+document.getElementById('module-type-json-post').innerHTML =
+ fooJson.moduleTypePost
diff --git a/playground/transform-plugin/package.json b/playground/transform-plugin/package.json
index 5ec3132d97cd29..bf9f74bb7551b1 100644
--- a/playground/transform-plugin/package.json
+++ b/playground/transform-plugin/package.json
@@ -7,6 +7,6 @@
"dev": "vite",
"build": "vite build",
"debug": "node --inspect-brk ../../vite/bin/vite",
- "serve": "vite preview"
+ "preview": "vite preview"
}
}
diff --git a/playground/transform-plugin/vite.config.js b/playground/transform-plugin/vite.config.js
index dae98317ad1de5..007520aefb46e6 100644
--- a/playground/transform-plugin/vite.config.js
+++ b/playground/transform-plugin/vite.config.js
@@ -27,6 +27,22 @@ const transformPlugin = {
},
}
+const moduleTypePlugins = /** @type {const} */ (['pre', 'post']).map(
+ (enforce) => ({
+ name: `module-type-${enforce}`,
+ enforce,
+ transform(code, id, opts) {
+ if (id.endsWith('/foo.json')) {
+ code = code.replace(
+ `MODULE_TYPE_${enforce.toUpperCase()}`,
+ opts.moduleType,
+ )
+ return code
+ }
+ },
+ }),
+)
+
export default defineConfig({
- plugins: [transformPlugin],
+ plugins: [transformPlugin, moduleTypePlugins],
})
diff --git a/playground/tsconfig-json-load-error/__tests__/tsconfig-json-load-error.spec.ts b/playground/tsconfig-json-load-error/__tests__/tsconfig-json-load-error.spec.ts
index 67e4d522b5f64f..64b5b96d17d6d2 100644
--- a/playground/tsconfig-json-load-error/__tests__/tsconfig-json-load-error.spec.ts
+++ b/playground/tsconfig-json-load-error/__tests__/tsconfig-json-load-error.spec.ts
@@ -3,7 +3,7 @@ import { clearServeError, serveError } from './serve'
import { browserLogs, editFile, isBuild, isServe, page, readFile } from '~utils'
const unexpectedTokenSyntaxErrorRE =
- /(\[vite:esbuild\] )*parsing .* failed: SyntaxError: Unexpected token.*\}.*/
+ /(\[vite:esbuild\] )*parsing .* failed: SyntaxError: Unexpected token.*\}.*|Build failed/
describe.runIf(isBuild)('build', () => {
test('should throw an error on build', () => {
diff --git a/playground/tsconfig.json b/playground/tsconfig.json
index 8e5a4523fa61cb..c64534f6602301 100644
--- a/playground/tsconfig.json
+++ b/playground/tsconfig.json
@@ -1,6 +1,6 @@
{
"include": ["**/vite*config*", "**/*.ts"],
- "exclude": ["**/dist/**"],
+ "exclude": ["**/dist/**", "./legacy/**", "./resolve-tsconfig-paths/**"],
"compilerOptions": {
"checkJs": true,
"target": "ES2023",
diff --git a/playground/vitestSetup.ts b/playground/vitestSetup.ts
index 3dccfce0c1d397..80026e4f87585b 100644
--- a/playground/vitestSetup.ts
+++ b/playground/vitestSetup.ts
@@ -20,7 +20,11 @@ import {
preview,
} from 'vite'
import type { Browser, Page } from 'playwright-chromium'
-import type { RollupError, RollupWatcher, RollupWatcherEvent } from 'rollup'
+import type {
+ RolldownWatcher,
+ RolldownWatcherEvent,
+ RollupError,
+} from 'rolldown'
import type { RunnerTestFile } from 'vitest'
import { beforeAll, expect, inject } from 'vitest'
@@ -102,7 +106,7 @@ export const browserErrors: Error[] = []
export let page: Page = undefined!
export let browser: Browser = undefined!
export let viteTestUrl: string = ''
-export let watcher: RollupWatcher | undefined = undefined
+export let watcher: RolldownWatcher | undefined = undefined
export function setViteUrl(url: string): void {
viteTestUrl = url
@@ -312,7 +316,7 @@ export async function startDefaultServe(): Promise {
const isWatch = !!resolvedConfig!.build.watch
// in build watch,call startStaticServer after the build is complete
if (isWatch) {
- watcher = rollupOutput as RollupWatcher
+ watcher = rollupOutput as RolldownWatcher
await notifyRebuildComplete(watcher)
}
if (buildConfig.__test__) {
@@ -341,10 +345,10 @@ export async function startDefaultServe(): Promise {
* Send the rebuild complete message in build watch
*/
export async function notifyRebuildComplete(
- watcher: RollupWatcher,
-): Promise {
+ watcher: RolldownWatcher,
+): Promise {
let resolveFn: undefined | (() => void)
- const callback = (event: RollupWatcherEvent): void => {
+ const callback = (event: RolldownWatcherEvent): void => {
if (event.code === 'END') {
resolveFn?.()
}
@@ -353,6 +357,7 @@ export async function notifyRebuildComplete(
await new Promise((resolve) => {
resolveFn = resolve
})
+
return watcher.off('event', callback)
}
diff --git a/playground/worker/__tests__/es/worker-es.spec.ts b/playground/worker/__tests__/es/worker-es.spec.ts
index 2545038d1b49ce..d5eaeb963649b6 100644
--- a/playground/worker/__tests__/es/worker-es.spec.ts
+++ b/playground/worker/__tests__/es/worker-es.spec.ts
@@ -96,7 +96,7 @@ describe.runIf(isBuild)('build', () => {
test('inlined code generation', async () => {
const assetsDir = path.resolve(testDir, 'dist/es/assets')
const files = fs.readdirSync(assetsDir)
- expect(files.length).toBe(36)
+ expect(files.length).toBe(42)
const index = files.find((f) => f.includes('main-module'))
const content = fs.readFileSync(path.resolve(assetsDir, index), 'utf-8')
const worker = files.find((f) => f.includes('my-worker'))
@@ -106,20 +106,20 @@ describe.runIf(isBuild)('build', () => {
)
// worker should have all imports resolved and no exports
- expect(workerContent).not.toMatch(/import[^.]/)
- expect(workerContent).not.toMatch(`export`)
+ expect(workerContent).not.toMatch(/import\s*["(]/)
+ expect(workerContent).not.toMatch(/\bexport\b/)
// chunk
- expect(content).toMatch(`new Worker("/es/assets`)
- expect(content).toMatch(`new SharedWorker("/es/assets`)
+ expect(content).toMatch('new Worker(`/es/assets')
+ expect(content).toMatch('new SharedWorker(`/es/assets')
// inlined worker
expect(content).toMatch(`(self.URL||self.webkitURL).createObjectURL`)
expect(content).toMatch(`self.Blob`)
expect(content).toMatch(
- /try\{if\(\w+=\w+&&\(self\.URL\|\|self\.webkitURL\)\.createObjectURL\(\w+\),!\w+\)throw""/,
+ /try\{if\(\w+=\w+&&\(self\.URL\|\|self\.webkitURL\)\.createObjectURL\(\w+\),!\w+\)throw``/,
)
// inlined shared worker
expect(content).toMatch(
- `return new SharedWorker("data:text/javascript;charset=utf-8,"+`,
+ 'return new SharedWorker(`data:text/javascript;charset=utf-8,',
)
})
diff --git a/playground/worker/__tests__/iife/worker-iife.spec.ts b/playground/worker/__tests__/iife/worker-iife.spec.ts
index a4c84800921f77..7d1bf2a291bc03 100644
--- a/playground/worker/__tests__/iife/worker-iife.spec.ts
+++ b/playground/worker/__tests__/iife/worker-iife.spec.ts
@@ -93,11 +93,11 @@ describe.runIf(isBuild)('build', () => {
)
// worker should have all imports resolved and no exports
- expect(workerContent).not.toMatch(`import`)
- expect(workerContent).not.toMatch(`export`)
+ expect(workerContent).not.toMatch(/import\s*["(]/)
+ expect(workerContent).not.toMatch(/\bexport\b/)
// chunk
- expect(content).toMatch(`new Worker("/iife/assets`)
- expect(content).toMatch(`new SharedWorker("/iife/assets`)
+ expect(content).toMatch('new Worker(`/iife/assets')
+ expect(content).toMatch('new SharedWorker(`/iife/assets')
// inlined
expect(content).toMatch(`(self.URL||self.webkitURL).createObjectURL`)
expect(content).toMatch(`self.Blob`)
@@ -191,13 +191,13 @@ test.runIf(isServe)('sourcemap is correct after env is injected', async () => {
SourceMap {
content: {
"ignoreList": [],
- "mappings": ";;AAAA,SAAS,OAAO,kBAAkB;AAClC,OAAO,YAAY;AACnB,SAAS,MAAM,WAAW;AAC1B,SAAS,wBAAwB;AACjC,OAAO,aAAa;AACpB,MAAM,UAAU,YAAY;AAE5B,KAAK,YAAY,CAAC,MAAM;AACtB,MAAI,EAAE,SAAS,QAAQ;AACrB,SAAK,YAAY;AAAA,MACf;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACF,CAAC;AAAA,EACH;AACA,MAAI,EAAE,SAAS,gBAAgB;AAC7B,SAAK,YAAY;AAAA,MACf,KAAK;AAAA,MACL;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACF,CAAC;AAAA,EACH;AACF;AACA,KAAK,YAAY;AAAA,EACf;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,CAAC;AAGD,QAAQ,IAAI,cAAc",
+ "mappings": ";;AAAA,SAAS,OAAO,kBAAkB;AAClC,OAAO,YAAY;AACnB,SAAS,MAAM,WAAW;AAC1B,SAAS,wBAAwB;AACjC,OAAO,aAAa;AACpB,MAAM,UAAU,OAAO,KAAK;AAE5B,KAAK,aAAa,MAAM;AACtB,KAAI,EAAE,SAAS,QAAQ;AACrB,OAAK,YAAY;GACf;GACA;GACA;GACA;GACA;GACA;GACA;GACD,CAAC;;AAEJ,KAAI,EAAE,SAAS,gBAAgB;AAC7B,OAAK,YAAY;GACf,KAAK;GACL;GACA;GACA;GACA;GACA;GACA;GACD,CAAC;;;AAGN,KAAK,YAAY;CACf;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACD,CAAC;;AAGF,QAAQ,IAAI,eAAe",
"sources": [
"my-worker.ts?worker_file&type=module",
],
"version": 3,
},
- visualization: "https://evanw.github.io/source-map-visualization/#MTE0NgAKOwppbXBvcnQgeyBtc2cgYXMgbXNnRnJvbURlcCB9IGZyb20gIi9paWZlL25vZGVfbW9kdWxlcy8udml0ZS1paWZlL2RlcHMvQHZpdGVqc190ZXN0LWRlcC10by1vcHRpbWl6ZS5qcz92PTAwMDAwMDAwIjsKaW1wb3J0IF9fdml0ZV9fY2pzSW1wb3J0Ml9fdml0ZWpzX3Rlc3RXb3JrZXJEZXBDanMgZnJvbSAiL2lpZmUvbm9kZV9tb2R1bGVzLy52aXRlLWlpZmUvZGVwcy9Adml0ZWpzX3Rlc3Qtd29ya2VyLWRlcC1janMuanM/dj0wMDAwMDAwMCI7IGNvbnN0IGRlcENqcyA9IF9fdml0ZV9fY2pzSW1wb3J0Ml9fdml0ZWpzX3Rlc3RXb3JrZXJEZXBDanMuX19lc01vZHVsZSA/IF9fdml0ZV9fY2pzSW1wb3J0Ml9fdml0ZWpzX3Rlc3RXb3JrZXJEZXBDanMuZGVmYXVsdCA6IF9fdml0ZV9fY2pzSW1wb3J0Ml9fdml0ZWpzX3Rlc3RXb3JrZXJEZXBDanM7CmltcG9ydCB7IG1vZGUsIG1zZyB9IGZyb20gIi9paWZlL21vZHVsZXMvd29ya2VySW1wb3J0LnRzIjsKaW1wb3J0IHsgYnVuZGxlV2l0aFBsdWdpbiB9IGZyb20gIi9paWZlL21vZHVsZXMvdGVzdC1wbHVnaW4uanMiOwppbXBvcnQgdml0ZVN2ZyBmcm9tICIvaWlmZS92aXRlLnN2Zz9pbXBvcnQiOwpjb25zdCBtZXRhVXJsID0gaW1wb3J0Lm1ldGEudXJsOwpzZWxmLm9ubWVzc2FnZSA9IChlKSA9PiB7CiAgaWYgKGUuZGF0YSA9PT0gInBpbmciKSB7CiAgICBzZWxmLnBvc3RNZXNzYWdlKHsKICAgICAgbXNnLAogICAgICBtb2RlLAogICAgICBidW5kbGVXaXRoUGx1Z2luLAogICAgICB2aXRlU3ZnLAogICAgICBtZXRhVXJsLAogICAgICBuYW1lLAogICAgICBkZXBDanMKICAgIH0pOwogIH0KICBpZiAoZS5kYXRhID09PSAicGluZy11bmljb2RlIikgewogICAgc2VsZi5wb3N0TWVzc2FnZSh7CiAgICAgIG1zZzogIuKAonBvbmfigKIiLAogICAgICBtb2RlLAogICAgICBidW5kbGVXaXRoUGx1Z2luLAogICAgICB2aXRlU3ZnLAogICAgICBtZXRhVXJsLAogICAgICBuYW1lLAogICAgICBkZXBDanMKICAgIH0pOwogIH0KfTsKc2VsZi5wb3N0TWVzc2FnZSh7CiAgbXNnLAogIG1vZGUsCiAgYnVuZGxlV2l0aFBsdWdpbiwKICBtc2dGcm9tRGVwLAogIHZpdGVTdmcsCiAgbWV0YVVybCwKICBuYW1lLAogIGRlcENqcwp9KTsKY29uc29sZS5sb2coIm15LXdvcmtlci5qcyIpOwoxNTM3AHsidmVyc2lvbiI6MywibWFwcGluZ3MiOiI7O0FBQUEsU0FBUyxPQUFPLGtCQUFrQjtBQUNsQyxPQUFPLFlBQVk7QUFDbkIsU0FBUyxNQUFNLFdBQVc7QUFDMUIsU0FBUyx3QkFBd0I7QUFDakMsT0FBTyxhQUFhO0FBQ3BCLE1BQU0sVUFBVSxZQUFZO0FBRTVCLEtBQUssWUFBWSxDQUFDLE1BQU07QUFDdEIsTUFBSSxFQUFFLFNBQVMsUUFBUTtBQUNyQixTQUFLLFlBQVk7QUFBQSxNQUNmO0FBQUEsTUFDQTtBQUFBLE1BQ0E7QUFBQSxNQUNBO0FBQUEsTUFDQTtBQUFBLE1BQ0E7QUFBQSxNQUNBO0FBQUEsSUFDRixDQUFDO0FBQUEsRUFDSDtBQUNBLE1BQUksRUFBRSxTQUFTLGdCQUFnQjtBQUM3QixTQUFLLFlBQVk7QUFBQSxNQUNmLEtBQUs7QUFBQSxNQUNMO0FBQUEsTUFDQTtBQUFBLE1BQ0E7QUFBQSxNQUNBO0FBQUEsTUFDQTtBQUFBLE1BQ0E7QUFBQSxJQUNGLENBQUM7QUFBQSxFQUNIO0FBQ0Y7QUFDQSxLQUFLLFlBQVk7QUFBQSxFQUNmO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUNGLENBQUM7QUFHRCxRQUFRLElBQUksY0FBYyIsImlnbm9yZUxpc3QiOltdLCJzb3VyY2VzIjpbIm15LXdvcmtlci50cz93b3JrZXJfZmlsZSZ0eXBlPW1vZHVsZSJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBtc2cgYXMgbXNnRnJvbURlcCB9IGZyb20gJ0B2aXRlanMvdGVzdC1kZXAtdG8tb3B0aW1pemUnXG5pbXBvcnQgZGVwQ2pzIGZyb20gJ0B2aXRlanMvdGVzdC13b3JrZXItZGVwLWNqcydcbmltcG9ydCB7IG1vZGUsIG1zZyB9IGZyb20gJy4vbW9kdWxlcy93b3JrZXJJbXBvcnQuanMnXG5pbXBvcnQgeyBidW5kbGVXaXRoUGx1Z2luIH0gZnJvbSAnLi9tb2R1bGVzL3Rlc3QtcGx1Z2luJ1xuaW1wb3J0IHZpdGVTdmcgZnJvbSAnLi92aXRlLnN2ZydcbmNvbnN0IG1ldGFVcmwgPSBpbXBvcnQubWV0YS51cmxcblxuc2VsZi5vbm1lc3NhZ2UgPSAoZSkgPT4ge1xuICBpZiAoZS5kYXRhID09PSAncGluZycpIHtcbiAgICBzZWxmLnBvc3RNZXNzYWdlKHtcbiAgICAgIG1zZyxcbiAgICAgIG1vZGUsXG4gICAgICBidW5kbGVXaXRoUGx1Z2luLFxuICAgICAgdml0ZVN2ZyxcbiAgICAgIG1ldGFVcmwsXG4gICAgICBuYW1lLFxuICAgICAgZGVwQ2pzLFxuICAgIH0pXG4gIH1cbiAgaWYgKGUuZGF0YSA9PT0gJ3BpbmctdW5pY29kZScpIHtcbiAgICBzZWxmLnBvc3RNZXNzYWdlKHtcbiAgICAgIG1zZzogJ+KAonBvbmfigKInLFxuICAgICAgbW9kZSxcbiAgICAgIGJ1bmRsZVdpdGhQbHVnaW4sXG4gICAgICB2aXRlU3ZnLFxuICAgICAgbWV0YVVybCxcbiAgICAgIG5hbWUsXG4gICAgICBkZXBDanMsXG4gICAgfSlcbiAgfVxufVxuc2VsZi5wb3N0TWVzc2FnZSh7XG4gIG1zZyxcbiAgbW9kZSxcbiAgYnVuZGxlV2l0aFBsdWdpbixcbiAgbXNnRnJvbURlcCxcbiAgdml0ZVN2ZyxcbiAgbWV0YVVybCxcbiAgbmFtZSxcbiAgZGVwQ2pzLFxufSlcblxuLy8gZm9yIHNvdXJjZW1hcFxuY29uc29sZS5sb2coJ215LXdvcmtlci5qcycpXG4iXX0="
+ visualization: "https://evanw.github.io/source-map-visualization/#MTEwMQAKOwppbXBvcnQgeyBtc2cgYXMgbXNnRnJvbURlcCB9IGZyb20gIi9paWZlL25vZGVfbW9kdWxlcy8udml0ZS1paWZlL2RlcHMvQHZpdGVqc190ZXN0LWRlcC10by1vcHRpbWl6ZS5qcz92PTAwMDAwMDAwIjsKaW1wb3J0IF9fdml0ZV9fY2pzSW1wb3J0Ml9fdml0ZWpzX3Rlc3RXb3JrZXJEZXBDanMgZnJvbSAiL2lpZmUvbm9kZV9tb2R1bGVzLy52aXRlLWlpZmUvZGVwcy9Adml0ZWpzX3Rlc3Qtd29ya2VyLWRlcC1janMuanM/dj0wMDAwMDAwMCI7IGNvbnN0IGRlcENqcyA9IF9fdml0ZV9fY2pzSW1wb3J0Ml9fdml0ZWpzX3Rlc3RXb3JrZXJEZXBDanMuX19lc01vZHVsZSA/IF9fdml0ZV9fY2pzSW1wb3J0Ml9fdml0ZWpzX3Rlc3RXb3JrZXJEZXBDanMuZGVmYXVsdCA6IF9fdml0ZV9fY2pzSW1wb3J0Ml9fdml0ZWpzX3Rlc3RXb3JrZXJEZXBDanM7CmltcG9ydCB7IG1vZGUsIG1zZyB9IGZyb20gIi9paWZlL21vZHVsZXMvd29ya2VySW1wb3J0LnRzIjsKaW1wb3J0IHsgYnVuZGxlV2l0aFBsdWdpbiB9IGZyb20gIi9paWZlL21vZHVsZXMvdGVzdC1wbHVnaW4uanMiOwppbXBvcnQgdml0ZVN2ZyBmcm9tICIvaWlmZS92aXRlLnN2Zz9pbXBvcnQiOwpjb25zdCBtZXRhVXJsID0gaW1wb3J0Lm1ldGEudXJsOwpzZWxmLm9ubWVzc2FnZSA9IChlKSA9PiB7CglpZiAoZS5kYXRhID09PSAicGluZyIpIHsKCQlzZWxmLnBvc3RNZXNzYWdlKHsKCQkJbXNnLAoJCQltb2RlLAoJCQlidW5kbGVXaXRoUGx1Z2luLAoJCQl2aXRlU3ZnLAoJCQltZXRhVXJsLAoJCQluYW1lLAoJCQlkZXBDanMKCQl9KTsKCX0KCWlmIChlLmRhdGEgPT09ICJwaW5nLXVuaWNvZGUiKSB7CgkJc2VsZi5wb3N0TWVzc2FnZSh7CgkJCW1zZzogIuKAonBvbmfigKIiLAoJCQltb2RlLAoJCQlidW5kbGVXaXRoUGx1Z2luLAoJCQl2aXRlU3ZnLAoJCQltZXRhVXJsLAoJCQluYW1lLAoJCQlkZXBDanMKCQl9KTsKCX0KfTsKc2VsZi5wb3N0TWVzc2FnZSh7Cgltc2csCgltb2RlLAoJYnVuZGxlV2l0aFBsdWdpbiwKCW1zZ0Zyb21EZXAsCgl2aXRlU3ZnLAoJbWV0YVVybCwKCW5hbWUsCglkZXBDanMKfSk7Ci8vIGZvciBzb3VyY2VtYXAKY29uc29sZS5sb2coIm15LXdvcmtlci5qcyIpOwoxMzk2AHsidmVyc2lvbiI6MywibWFwcGluZ3MiOiI7O0FBQUEsU0FBUyxPQUFPLGtCQUFrQjtBQUNsQyxPQUFPLFlBQVk7QUFDbkIsU0FBUyxNQUFNLFdBQVc7QUFDMUIsU0FBUyx3QkFBd0I7QUFDakMsT0FBTyxhQUFhO0FBQ3BCLE1BQU0sVUFBVSxPQUFPLEtBQUs7QUFFNUIsS0FBSyxhQUFhLE1BQU07QUFDdEIsS0FBSSxFQUFFLFNBQVMsUUFBUTtBQUNyQixPQUFLLFlBQVk7R0FDZjtHQUNBO0dBQ0E7R0FDQTtHQUNBO0dBQ0E7R0FDQTtHQUNELENBQUM7O0FBRUosS0FBSSxFQUFFLFNBQVMsZ0JBQWdCO0FBQzdCLE9BQUssWUFBWTtHQUNmLEtBQUs7R0FDTDtHQUNBO0dBQ0E7R0FDQTtHQUNBO0dBQ0E7R0FDRCxDQUFDOzs7QUFHTixLQUFLLFlBQVk7Q0FDZjtDQUNBO0NBQ0E7Q0FDQTtDQUNBO0NBQ0E7Q0FDQTtDQUNBO0NBQ0QsQ0FBQzs7QUFHRixRQUFRLElBQUksZUFBZSIsImlnbm9yZUxpc3QiOltdLCJzb3VyY2VzIjpbIm15LXdvcmtlci50cz93b3JrZXJfZmlsZSZ0eXBlPW1vZHVsZSJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBtc2cgYXMgbXNnRnJvbURlcCB9IGZyb20gJ0B2aXRlanMvdGVzdC1kZXAtdG8tb3B0aW1pemUnXG5pbXBvcnQgZGVwQ2pzIGZyb20gJ0B2aXRlanMvdGVzdC13b3JrZXItZGVwLWNqcydcbmltcG9ydCB7IG1vZGUsIG1zZyB9IGZyb20gJy4vbW9kdWxlcy93b3JrZXJJbXBvcnQuanMnXG5pbXBvcnQgeyBidW5kbGVXaXRoUGx1Z2luIH0gZnJvbSAnLi9tb2R1bGVzL3Rlc3QtcGx1Z2luJ1xuaW1wb3J0IHZpdGVTdmcgZnJvbSAnLi92aXRlLnN2ZydcbmNvbnN0IG1ldGFVcmwgPSBpbXBvcnQubWV0YS51cmxcblxuc2VsZi5vbm1lc3NhZ2UgPSAoZSkgPT4ge1xuICBpZiAoZS5kYXRhID09PSAncGluZycpIHtcbiAgICBzZWxmLnBvc3RNZXNzYWdlKHtcbiAgICAgIG1zZyxcbiAgICAgIG1vZGUsXG4gICAgICBidW5kbGVXaXRoUGx1Z2luLFxuICAgICAgdml0ZVN2ZyxcbiAgICAgIG1ldGFVcmwsXG4gICAgICBuYW1lLFxuICAgICAgZGVwQ2pzLFxuICAgIH0pXG4gIH1cbiAgaWYgKGUuZGF0YSA9PT0gJ3BpbmctdW5pY29kZScpIHtcbiAgICBzZWxmLnBvc3RNZXNzYWdlKHtcbiAgICAgIG1zZzogJ+KAonBvbmfigKInLFxuICAgICAgbW9kZSxcbiAgICAgIGJ1bmRsZVdpdGhQbHVnaW4sXG4gICAgICB2aXRlU3ZnLFxuICAgICAgbWV0YVVybCxcbiAgICAgIG5hbWUsXG4gICAgICBkZXBDanMsXG4gICAgfSlcbiAgfVxufVxuc2VsZi5wb3N0TWVzc2FnZSh7XG4gIG1zZyxcbiAgbW9kZSxcbiAgYnVuZGxlV2l0aFBsdWdpbixcbiAgbXNnRnJvbURlcCxcbiAgdml0ZVN2ZyxcbiAgbWV0YVVybCxcbiAgbmFtZSxcbiAgZGVwQ2pzLFxufSlcblxuLy8gZm9yIHNvdXJjZW1hcFxuY29uc29sZS5sb2coJ215LXdvcmtlci5qcycpXG4iXX0="
}
`)
})
diff --git a/playground/worker/__tests__/relative-base/worker-relative-base.spec.ts b/playground/worker/__tests__/relative-base/worker-relative-base.spec.ts
index 07bfc47be8428e..883b5e5a743e5f 100644
--- a/playground/worker/__tests__/relative-base/worker-relative-base.spec.ts
+++ b/playground/worker/__tests__/relative-base/worker-relative-base.spec.ts
@@ -76,11 +76,11 @@ describe.runIf(isBuild)('build', () => {
)
// worker should have all imports resolved and no exports
- expect(workerContent).not.toMatch(/import(?!\.)/) // accept import.meta.url
- expect(workerContent).not.toMatch(`export`)
+ expect(workerContent).not.toMatch(/import\s*["(]/)
+ expect(workerContent).not.toMatch(/\bexport\b/)
// chunk
- expect(content).toMatch(`new Worker(""+new URL("../worker-entries/`)
- expect(content).toMatch(`new SharedWorker(""+new URL("../worker-entries/`)
+ expect(content).toMatch('new Worker(``+new URL(`../worker-entries/')
+ expect(content).toMatch('new SharedWorker(``+new URL(`../worker-entries/')
// inlined
expect(content).toMatch(`(self.URL||self.webkitURL).createObjectURL`)
expect(content).toMatch(`self.Blob`)
diff --git a/playground/worker/__tests__/sourcemap-hidden/worker-sourcemap-hidden.spec.ts b/playground/worker/__tests__/sourcemap-hidden/worker-sourcemap-hidden.spec.ts
index 1f407ee24cd5a3..6a149cdb522f30 100644
--- a/playground/worker/__tests__/sourcemap-hidden/worker-sourcemap-hidden.spec.ts
+++ b/playground/worker/__tests__/sourcemap-hidden/worker-sourcemap-hidden.spec.ts
@@ -83,26 +83,26 @@ describe.runIf(isBuild)('build', () => {
expect(subWorkerSourcemap).toBe(null)
// worker should have all imports resolved and no exports
- expect(workerContent).not.toMatch(`import`)
- expect(workerContent).not.toMatch(`export`)
+ expect(workerContent).not.toMatch(/import\s*["(]/)
+ expect(workerContent).not.toMatch(/\bexport\b/)
// shared worker should have all imports resolved and no exports
- expect(sharedWorkerContent).not.toMatch(`import`)
- expect(sharedWorkerContent).not.toMatch(`export`)
+ expect(sharedWorkerContent).not.toMatch(/import\s*["(]/)
+ expect(sharedWorkerContent).not.toMatch(/\bexport\b/)
// chunk
expect(content).toMatch(
- `new Worker("/iife-sourcemap-hidden/assets/my-worker`,
+ 'new Worker(`/iife-sourcemap-hidden/assets/my-worker',
)
- expect(content).toMatch(`new Worker("data:text/javascript;charset=utf-8,"+`)
+ expect(content).toMatch('new Worker(`data:text/javascript;charset=utf-8,')
expect(content).toMatch(
- `new Worker("/iife-sourcemap-hidden/assets/possible-ts-output-worker`,
+ 'new Worker(`/iife-sourcemap-hidden/assets/possible-ts-output-worker',
)
expect(content).toMatch(
- `new Worker("/iife-sourcemap-hidden/assets/worker-nested-worker`,
+ 'new Worker(`/iife-sourcemap-hidden/assets/worker-nested-worker',
)
expect(content).toMatch(
- `new SharedWorker("/iife-sourcemap-hidden/assets/my-shared-worker`,
+ 'new SharedWorker(`/iife-sourcemap-hidden/assets/my-shared-worker',
)
// inlined
@@ -110,7 +110,7 @@ describe.runIf(isBuild)('build', () => {
expect(content).toMatch(`self.Blob`)
expect(workerNestedWorkerContent).toMatch(
- `new Worker("/iife-sourcemap-hidden/assets/sub-worker`,
+ 'new Worker(`/iife-sourcemap-hidden/assets/sub-worker',
)
})
})
diff --git a/playground/worker/__tests__/sourcemap-inline/worker-sourcemap-inline.spec.ts b/playground/worker/__tests__/sourcemap-inline/worker-sourcemap-inline.spec.ts
index 8e6e040cfded04..c32e3a6b8195b7 100644
--- a/playground/worker/__tests__/sourcemap-inline/worker-sourcemap-inline.spec.ts
+++ b/playground/worker/__tests__/sourcemap-inline/worker-sourcemap-inline.spec.ts
@@ -64,26 +64,26 @@ describe.runIf(isBuild)('build', () => {
expect(subWorkerSourcemap).toMatch(/^data:/)
// worker should have all imports resolved and no exports
- expect(workerContent).not.toMatch(`import`)
- expect(workerContent).not.toMatch(`export`)
+ expect(workerContent).not.toMatch(/import\s*["(]/)
+ expect(workerContent).not.toMatch(/\bexport\b/)
// shared worker should have all imports resolved and no exports
- expect(sharedWorkerContent).not.toMatch(`import`)
- expect(sharedWorkerContent).not.toMatch(`export`)
+ expect(sharedWorkerContent).not.toMatch(/import\s*["(]/)
+ expect(sharedWorkerContent).not.toMatch(/\bexport\b/)
// chunk
expect(content).toMatch(
- `new Worker("/iife-sourcemap-inline/assets/my-worker`,
+ 'new Worker(`/iife-sourcemap-inline/assets/my-worker',
)
- expect(content).toMatch(`new Worker("data:text/javascript;charset=utf-8,"+`)
+ expect(content).toMatch('new Worker(`data:text/javascript;charset=utf-8,')
expect(content).toMatch(
- `new Worker("/iife-sourcemap-inline/assets/possible-ts-output-worker`,
+ 'new Worker(`/iife-sourcemap-inline/assets/possible-ts-output-worker',
)
expect(content).toMatch(
- `new Worker("/iife-sourcemap-inline/assets/worker-nested-worker`,
+ 'new Worker(`/iife-sourcemap-inline/assets/worker-nested-worker',
)
expect(content).toMatch(
- `new SharedWorker("/iife-sourcemap-inline/assets/my-shared-worker`,
+ 'new SharedWorker(`/iife-sourcemap-inline/assets/my-shared-worker',
)
// inlined
@@ -91,7 +91,7 @@ describe.runIf(isBuild)('build', () => {
expect(content).toMatch(`self.Blob`)
expect(workerNestedWorkerContent).toMatch(
- `new Worker("/iife-sourcemap-inline/assets/sub-worker`,
+ 'new Worker(`/iife-sourcemap-inline/assets/sub-worker',
)
})
})
diff --git a/playground/worker/__tests__/sourcemap/worker-sourcemap.spec.ts b/playground/worker/__tests__/sourcemap/worker-sourcemap.spec.ts
index 3bff04a5c8d79a..1d00ecea2cd925 100644
--- a/playground/worker/__tests__/sourcemap/worker-sourcemap.spec.ts
+++ b/playground/worker/__tests__/sourcemap/worker-sourcemap.spec.ts
@@ -86,24 +86,24 @@ describe.runIf(isBuild)('build', () => {
expect(subWorkerSourcemap).toMatch(/^sub-worker-[-\w]+\.js\.map$/)
// worker should have all imports resolved and no exports
- expect(workerContent).not.toMatch(`import`)
- expect(workerContent).not.toMatch(`export`)
+ expect(workerContent).not.toMatch(/import\s*["(]/)
+ expect(workerContent).not.toMatch(/\bexport\b/)
// shared worker should have all imports resolved and no exports
- expect(sharedWorkerContent).not.toMatch(`import`)
- expect(sharedWorkerContent).not.toMatch(`export`)
+ expect(sharedWorkerContent).not.toMatch(/import\s*["(]/)
+ expect(sharedWorkerContent).not.toMatch(/\bexport\b/)
// chunk
- expect(content).toMatch(`new Worker("/iife-sourcemap/assets/my-worker`)
- expect(content).toMatch(`new Worker("data:text/javascript;charset=utf-8,"+`)
+ expect(content).toMatch('new Worker(`/iife-sourcemap/assets/my-worker')
+ expect(content).toMatch('new Worker(`data:text/javascript;charset=utf-8,')
expect(content).toMatch(
- `new Worker("/iife-sourcemap/assets/possible-ts-output-worker`,
+ 'new Worker(`/iife-sourcemap/assets/possible-ts-output-worker',
)
expect(content).toMatch(
- `new Worker("/iife-sourcemap/assets/worker-nested-worker`,
+ 'new Worker(`/iife-sourcemap/assets/worker-nested-worker',
)
expect(content).toMatch(
- `new SharedWorker("/iife-sourcemap/assets/my-shared-worker`,
+ 'new SharedWorker(`/iife-sourcemap/assets/my-shared-worker',
)
// inlined
@@ -111,7 +111,7 @@ describe.runIf(isBuild)('build', () => {
expect(content).toMatch(`self.Blob`)
expect(workerNestedWorkerContent).toMatch(
- `new Worker("/iife-sourcemap/assets/sub-worker`,
+ 'new Worker(`/iife-sourcemap/assets/sub-worker',
)
})
})
diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml
index ffe634a837cbc1..01ca9e12cf4be2 100644
--- a/pnpm-lock.yaml
+++ b/pnpm-lock.yaml
@@ -5,7 +5,7 @@ settings:
excludeLinksFromLockfile: false
overrides:
- vite: workspace:*
+ vite: workspace:rolldown-vite@*
packageExtensionsChecksum: sha256-BLDZCgUIohvBXMHo3XFOlGLzGXRyK3sDU0nMBRk9APY=
@@ -56,7 +56,7 @@ importers:
version: 3.0.8
'@types/node':
specifier: ^22.18.7
- version: 22.18.7
+ version: 22.18.8
'@types/picomatch':
specifier: ^4.0.2
version: 4.0.2
@@ -115,11 +115,11 @@ importers:
specifier: ^8.45.0
version: 8.45.0(eslint@9.36.0(jiti@2.5.1))(typescript@5.9.2)
vite:
- specifier: workspace:*
+ specifier: workspace:rolldown-vite@*
version: link:packages/vite
vitest:
specifier: ^3.2.4
- version: 3.2.4(@types/debug@4.1.12)(@types/node@22.18.7)
+ version: 3.2.4(@types/debug@4.1.12)(@types/node@22.18.8)
docs:
devDependencies:
@@ -138,9 +138,12 @@ importers:
markdown-it-image-size:
specifier: ^14.8.0
version: 14.8.0(markdown-it@14.1.0)
+ oxc-minify:
+ specifier: ^0.87.0
+ version: 0.87.0
vitepress:
specifier: ^2.0.0-alpha.12
- version: 2.0.0-alpha.12(axios@1.12.2)(postcss@8.5.6)(typescript@5.9.2)
+ version: 2.0.0-alpha.12(axios@1.12.2)(oxc-minify@0.87.0)(postcss@8.5.6)(typescript@5.9.2)
vitepress-plugin-group-icons:
specifier: ^1.6.3
version: 1.6.3(markdown-it@14.1.0)(vite@packages+vite)
@@ -170,7 +173,7 @@ importers:
version: 1.1.1
tsdown:
specifier: ^0.15.5
- version: 0.15.5(publint@0.3.12)(typescript@5.9.2)(vue-tsc@3.1.0(typescript@5.9.2))
+ version: 0.15.6(publint@0.3.12)(typescript@5.9.2)(vue-tsc@3.1.0(typescript@5.9.2))
packages/plugin-legacy:
dependencies:
@@ -225,28 +228,31 @@ importers:
version: 1.1.1
tsdown:
specifier: ^0.15.5
- version: 0.15.5(publint@0.3.12)(typescript@5.9.2)(vue-tsc@3.1.0(typescript@5.9.2))
+ version: 0.15.6(publint@0.3.12)(typescript@5.9.2)(vue-tsc@3.1.0(typescript@5.9.2))
vite:
- specifier: workspace:*
+ specifier: workspace:rolldown-vite@*
version: link:../vite
packages/vite:
dependencies:
- esbuild:
- specifier: ^0.25.0
- version: 0.25.0
+ '@oxc-project/runtime':
+ specifier: 0.92.0
+ version: 0.92.0
fdir:
specifier: ^6.5.0
version: 6.5.0(picomatch@4.0.3)
+ lightningcss:
+ specifier: ^1.30.2
+ version: 1.30.2
picomatch:
specifier: ^4.0.3
version: 4.0.3
postcss:
specifier: ^8.5.6
version: 8.5.6
- rollup:
- specifier: ^4.43.0
- version: 4.43.0
+ rolldown:
+ specifier: 1.0.0-beta.42
+ version: 1.0.0-beta.42
tinyglobby:
specifier: ^0.2.15
version: 0.2.15
@@ -261,14 +267,14 @@ importers:
specifier: ^0.3.31
version: 0.3.31
'@oxc-project/types':
- specifier: 0.90.0
- version: 0.90.0
+ specifier: 0.94.0
+ version: 0.94.0
'@polka/compression':
specifier: ^1.0.0-next.25
version: 1.0.0-next.25
'@rolldown/pluginutils':
- specifier: ^1.0.0-beta.41
- version: 1.0.0-beta.41
+ specifier: ^1.0.0-beta.42
+ version: 1.0.0-beta.42
'@rollup/plugin-alias':
specifier: ^5.1.1
version: 5.1.1(rollup@4.43.0)
@@ -292,7 +298,7 @@ importers:
version: 0.4.2
baseline-browser-mapping:
specifier: ^2.8.9
- version: 2.8.9
+ version: 2.8.10
cac:
specifier: ^6.7.14
version: 6.7.14
@@ -326,6 +332,9 @@ importers:
es-module-lexer:
specifier: ^1.7.0
version: 1.7.0
+ esbuild:
+ specifier: ^0.25.0
+ version: 0.25.0
escape-html:
specifier: ^1.0.3
version: 1.0.3
@@ -344,9 +353,6 @@ importers:
launch-editor-middleware:
specifier: ^2.11.1
version: 2.11.1
- lightningcss:
- specifier: ^1.30.2
- version: 1.30.2
magic-string:
specifier: ^0.30.19
version: 0.30.19
@@ -389,12 +395,12 @@ importers:
resolve.exports:
specifier: ^2.0.3
version: 2.0.3
- rolldown:
- specifier: ^1.0.0-beta.41
- version: 1.0.0-beta.41
rolldown-plugin-dts:
specifier: ^0.16.11
- version: 0.16.11(rolldown@1.0.0-beta.41)(typescript@5.9.2)(vue-tsc@3.1.0(typescript@5.9.2))
+ version: 0.16.11(rolldown@1.0.0-beta.42)(typescript@5.9.2)(vue-tsc@3.1.0(typescript@5.9.2))
+ rollup:
+ specifier: ^4.43.0
+ version: 4.43.0
rollup-plugin-license:
specifier: ^3.6.0
version: 3.6.0(picomatch@4.0.3)(rollup@4.43.0)
@@ -534,6 +540,9 @@ importers:
kill-port:
specifier: ^1.6.1
version: 1.6.1
+ rolldown:
+ specifier: 1.0.0-beta.42
+ version: 1.0.0-beta.42
playground/alias:
dependencies:
@@ -731,10 +740,10 @@ importers:
devDependencies:
'@types/react':
specifier: ^19.1.16
- version: 19.1.16
+ version: 19.2.0
'@types/react-dom':
specifier: ^19.1.9
- version: 19.1.9(@types/react@19.1.16)
+ version: 19.1.9(@types/react@19.2.0)
react:
specifier: ^19.1.1
version: 19.1.1
@@ -770,7 +779,7 @@ importers:
specifier: npm:slash@^5.1.0
version: slash@5.1.0
vite:
- specifier: workspace:*
+ specifier: workspace:rolldown-vite@*
version: link:../../packages/vite
vue:
specifier: ^3.5.22
@@ -872,7 +881,7 @@ importers:
specifier: ^5.44.0
version: 5.44.0
vite:
- specifier: workspace:*
+ specifier: workspace:rolldown-vite@*
version: link:../../packages/vite
playground/lib:
@@ -1328,6 +1337,8 @@ importers:
playground/resolve-linked: {}
+ playground/resolve-tsconfig-paths: {}
+
playground/resolve/browser-field:
dependencies:
'@vitejs/test-resolve-browser-field-bare-import-fail':
@@ -1667,7 +1678,7 @@ importers:
version: link:../resolve-linked
miniflare:
specifier: ^4.20250924.0
- version: 4.20250924.0
+ version: 4.20250927.0
playground/ssr-webworker/browser-exports: {}
@@ -1753,6 +1764,10 @@ packages:
resolution: {integrity: sha512-cjQ7ZlQ0Mv3b47hABuTevyTuYN4i+loJKGeV9flcCgIK37cCXRh+L1bd3iBHlynerhQ7BhCkn2BPbQUL+rGqFg==}
engines: {node: '>=6.9.0'}
+ '@babel/compat-data@7.27.7':
+ resolution: {integrity: sha512-xgu/ySj2mTiUFmdE9yCMfBxLp4DHd5DwmbbD05YAuICfodYT3VvRxbrh81LGQ/8UpSdtMdfKMn3KouYDX59DGQ==}
+ engines: {node: '>=6.9.0'}
+
'@babel/compat-data@7.28.0':
resolution: {integrity: sha512-60X7qkglvrap8mn1lh2ebxXdZYtUcpd7gsmy9kLaBJ4i/WdY8PqTSdxyA8qraikqKQK5C1KRBKXqznrVapyNaw==}
engines: {node: '>=6.9.0'}
@@ -1761,6 +1776,10 @@ packages:
resolution: {integrity: sha512-2BCOP7TN8M+gVDj7/ht3hsaO/B/n5oDbiAyyvnRlNOs+u1o+JWNYTQrmpuNp1/Wq2gcFrI01JAW+paEKDMx/CA==}
engines: {node: '>=6.9.0'}
+ '@babel/generator@7.27.5':
+ resolution: {integrity: sha512-ZGhA37l0e/g2s1Cnzdix0O3aLYm66eF8aufiVteOgnwxgnRP8GoyMj7VWsgWnQbVKXyge7hqrFh2K2TQM6t1Hw==}
+ engines: {node: '>=6.9.0'}
+
'@babel/generator@7.28.0':
resolution: {integrity: sha512-lJjzvrbEeWrhB4P3QBsH7tey117PjLZnDbLiQEKjQ/fNJTjuq4HSqgFA+UNSwZT8D7dxxbnuSBMsa1lrWzKlQg==}
engines: {node: '>=6.9.0'}
@@ -1868,8 +1887,8 @@ packages:
resolution: {integrity: sha512-HFN59MmQXGHVyYadKLVumYsA9dBFun/ldYxipEjzA4196jpLZd8UjEEBLkbEkvfYreDqJhZxYAWFPtrfhNpj4w==}
engines: {node: '>=6.9.0'}
- '@babel/parser@7.28.0':
- resolution: {integrity: sha512-jVZGvOxOuNSsuQuLRTh13nU0AogFlw32w/MT+LV6D3sP5WdbW61E77RnkbaO2dUvmPAYrBDJXGn5gGS6tH4j8g==}
+ '@babel/parser@7.27.5':
+ resolution: {integrity: sha512-OsQd175SxWkGlzbny8J3K8TnnDD0N3lrIUtB92xwyRpzaenGZhxDvxN/JgU00U3CDZNj9tPuDJ5H0WS4Nt3vKg==}
engines: {node: '>=6.0.0'}
hasBin: true
@@ -2257,6 +2276,10 @@ packages:
resolution: {integrity: sha512-LPDZ85aEJyYSd18/DkjNh4/y1ntkE5KwUHWTiqgRxruuZL2F1yuHligVHLvcHY2vMHXttKFpJn6LwfI7cw7ODw==}
engines: {node: '>=6.9.0'}
+ '@babel/traverse@7.27.7':
+ resolution: {integrity: sha512-X6ZlfR/O/s5EQ/SnUSLzr+6kGnkg8HXGMzpgsMsrJVcfDtH1vIp6ctCN4eZ1LS5c0+te5Cb6Y514fASjMRJ1nw==}
+ engines: {node: '>=6.9.0'}
+
'@babel/traverse@7.28.0':
resolution: {integrity: sha512-mGe7UK5wWyh0bKRfupsUchrQGqvDbZDbKJw+kcRGSmdHVYrv+ltd0pnpDTVpiTqnaBru9iEvA8pz8W46v0Amwg==}
engines: {node: '>=6.9.0'}
@@ -2269,6 +2292,14 @@ packages:
resolution: {integrity: sha512-YEzuboP2qvQavAcjgQNVgsvHIDv6ZpwXvcvjmyySP2DIMuByS/6ioU5G9pYrWHM6T2YDfc7xga9iNzYOs12CFQ==}
engines: {node: '>=6.9.0'}
+ '@babel/types@7.27.6':
+ resolution: {integrity: sha512-ETyHEk2VHHvl9b9jZP5IHPavHYk57EhanlRRuae9XCpb/j5bDCbPPMOBfCWhnl/7EDJz0jEMCi/RhccCE8r1+Q==}
+ engines: {node: '>=6.9.0'}
+
+ '@babel/types@7.27.7':
+ resolution: {integrity: sha512-8OLQgDScAOHXnAz2cV+RfzzNMipuLVBz2biuAJFMV9bfkNf393je3VM8CLkjQodW5+iWsSJdSgSWT6rsZoXHPw==}
+ engines: {node: '>=6.9.0'}
+
'@babel/types@7.28.2':
resolution: {integrity: sha512-ruv7Ae4J5dUYULmeXw1gmb7rYRz57OWCPM57pHojnLq/3Z1CK2lNSLTCVjxVk1F/TZHwOZZrOWi0ur95BbLxNQ==}
engines: {node: '>=6.9.0'}
@@ -2286,32 +2317,32 @@ packages:
'@clack/prompts@0.11.0':
resolution: {integrity: sha512-pMN5FcrEw9hUkZA4f+zLlzivQSeQf5dRGJjSUbvVYDLvpKCdQx5OaknvKzgbtXOizhP+SJJJjqEbOe55uKKfAw==}
- '@cloudflare/workerd-darwin-64@1.20250924.0':
- resolution: {integrity: sha512-/+nWoNDIzdQaQib7MrWYEfeDt1vA40Ah68nXlZGXHonkIqJvkjaTP8dzdKZLuwnQokiV/SpnAXNMH0WGH31XMw==}
+ '@cloudflare/workerd-darwin-64@1.20250927.0':
+ resolution: {integrity: sha512-rFtXu/qhZziGOltjhHUCdlqP9wLUhf/CmnjJS0hXffGRAVxsCXhJw+7Vlr+hyRSHjHRhEV+gBFc4pHzT10Stzw==}
engines: {node: '>=16'}
cpu: [x64]
os: [darwin]
- '@cloudflare/workerd-darwin-arm64@1.20250924.0':
- resolution: {integrity: sha512-UAjC5mra+WNWy6jMbIDe9orsFmYvvMlfvZdUyn5p3NlQhhU6cc4FkFuXJ/bV+6oVw5hIhlLlFCTnsGatki/uHg==}
+ '@cloudflare/workerd-darwin-arm64@1.20250927.0':
+ resolution: {integrity: sha512-BcNlLVfPyctLjFeIJENhK7OZFkfaysHVA6G6KT1lwum+BaVOutebweLo2zOrH7UQCMDYdpkQOeb5nLDctvs8YA==}
engines: {node: '>=16'}
cpu: [arm64]
os: [darwin]
- '@cloudflare/workerd-linux-64@1.20250924.0':
- resolution: {integrity: sha512-IcwaoZFXGHq+yOBEj91QZH4qU61ws5upE7T43wVcrUAk8VXgxL12IGUVkMCEqfFXTO40PjKZBmK16B2q1HoFow==}
+ '@cloudflare/workerd-linux-64@1.20250927.0':
+ resolution: {integrity: sha512-3c+RuyMj3CkaFS9mmVJyX6nNUdTn2kdWgPrpPoj7VbtU2BEGkrH1a4VAgIAiUh/tYRGUeY3owrUhqCv6L7HmJQ==}
engines: {node: '>=16'}
cpu: [x64]
os: [linux]
- '@cloudflare/workerd-linux-arm64@1.20250924.0':
- resolution: {integrity: sha512-NgKG/cJiRNoJFa8QqweG0/bpkrUYKpR9mA9/qLJcGiwfvJrfK9b+ucw0lCru1BVMlyuS3kWDjagjMWqfujdBkA==}
+ '@cloudflare/workerd-linux-arm64@1.20250927.0':
+ resolution: {integrity: sha512-/XtcZnIryAgLvums08r5xiSm5hYfRfUuj2iq/5Jl+Yysx1BmPjYLqjcIIXNATrzpKUrxf3AkvpSI75MBcePgpA==}
engines: {node: '>=16'}
cpu: [arm64]
os: [linux]
- '@cloudflare/workerd-windows-64@1.20250924.0':
- resolution: {integrity: sha512-PntewemtjgLO2+8Gjw3G/NowDjpWZNKpKk/n4KmOQaWS9jIRq3IG1LkTqxj/BbMXqa4Oyrywk2kdqspj6QllOw==}
+ '@cloudflare/workerd-windows-64@1.20250927.0':
+ resolution: {integrity: sha512-+m124IiM149QvvzAOrO766uTdILqXJZqzZjqTaMTaWXegjjsJwGSL6v9d71TSFntEwxeXnpJPBkVWyKZFjqrvg==}
engines: {node: '>=16'}
cpu: [x64]
os: [win32]
@@ -2332,11 +2363,14 @@ packages:
resolution: {integrity: sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw==}
engines: {node: '>=12'}
- '@docsearch/css@4.0.0-beta.7':
- resolution: {integrity: sha512-hBIwf14yLasrUcDNS7jrneM1ibFD/JFJVDjdxd1h/LUHx7eyLrS726pKHVr3cTdToNXP/7jrTbnC1MAuDHPoow==}
+ '@docsearch/css@4.0.0-beta.8':
+ resolution: {integrity: sha512-/ZlyvZCjIJM4aaOYoJpVNHPJckX7J5KIbt6IWjnZXvo0QAUI1aH976vKEJUC9olgUbE3LWafB8yuX4qoqahIQg==}
+
+ '@docsearch/js@4.0.0-beta.8':
+ resolution: {integrity: sha512-elgqPYpykRQr5MlfqoO8U2uC3BcPgjUQhzmHt/H4lSzP7khJ9Jpv/cCB4tiZreXb6GkdRgWr5csiItNq6jjnhg==}
- '@docsearch/js@4.0.0-beta.7':
- resolution: {integrity: sha512-0RJALbDpLMuFy3H/26rjms/qwi5KjsGMN8Lu4k/bs6kBfOWHUN6Dzg/ybj8qB2OLdT2UegsavRIDZKW3QrzQ4Q==}
+ '@emnapi/core@1.4.3':
+ resolution: {integrity: sha512-4m62DuCE07lw01soJwPiBGC0nAww0Q+RY70VZ+n49yDIO13yyinhbWCeNnaob0lakDtWQzSdtNWzJeOJt2ma+g==}
'@emnapi/core@1.4.5':
resolution: {integrity: sha512-XsLw1dEOpkSX/WucdqUhPWP7hDxSvZiY+fsUC14h+FtQ2Ifni4znbBt8punRX+Uj2JG/uDb8nEHVKvrVlvdZ5Q==}
@@ -2344,12 +2378,18 @@ packages:
'@emnapi/core@1.5.0':
resolution: {integrity: sha512-sbP8GzB1WDzacS8fgNPpHlp6C9VZe+SJP3F90W9rLemaQj2PzIuTEl1qDOYQf58YIpyjViI24y9aPWCjEzY2cg==}
+ '@emnapi/runtime@1.4.3':
+ resolution: {integrity: sha512-pBPWdu6MLKROBX05wSNKcNb++m5Er+KQ9QkB+WVM+pW2Kx9hoSrVTnu3BdkI5eBLZoKu/J6mW/B6i6bJB2ytXQ==}
+
'@emnapi/runtime@1.4.5':
resolution: {integrity: sha512-++LApOtY0pEEz1zrd9vy1/zXVaVJJ/EbAF3u0fXIzPJEDtnITsBGbbK0EkM72amhl/R5b+5xx0Y/QhcVOpuulg==}
'@emnapi/runtime@1.5.0':
resolution: {integrity: sha512-97/BJ3iXHww3djw6hYIfErCZFee7qCtrneuLa20UXFCOTCfBM2cvQHjWJ2EG0s0MtdNwInarqCTz35i4wWXHsQ==}
+ '@emnapi/wasi-threads@1.0.2':
+ resolution: {integrity: sha512-5n3nTJblwRi8LlXkJ9eBzu+kZR8Yxcc7ubakyQTFzPMtIhFpUBRbsnc2Dv88IZDIbCDlBiWrknhB4Lsz7mg6BA==}
+
'@emnapi/wasi-threads@1.0.4':
resolution: {integrity: sha512-PJR+bOmMOPH8AtcTGAyYNiuJ3/Fcoj2XN/gBEWzDIKh254XO+mM9XoXHk5GNEhodxeMznbg7BlRojVbKN+gC6g==}
@@ -2512,8 +2552,8 @@ packages:
peerDependencies:
eslint: ^6.0.0 || ^7.0.0 || >=8.0.0
- '@eslint-community/eslint-utils@4.8.0':
- resolution: {integrity: sha512-MJQFqrZgcW0UNYLGOuQpey/oTN59vyWwplvCGZztn1cKz9agZPPYpJB7h2OMmuu7VLqkvEjN8feFZJmxNF9D+Q==}
+ '@eslint-community/eslint-utils@4.9.0':
+ resolution: {integrity: sha512-ayVFHdtZ+hsq1t2Dy24wCmGXGe4q9Gu3smhLYALJrr473ZH27MsnSL+LKUlimp4BWJqMDMLmPpx/Q9R3OAlL4g==}
engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
peerDependencies:
eslint: ^6.0.0 || ^7.0.0 || >=8.0.0
@@ -2718,6 +2758,10 @@ packages:
'@jridgewell/gen-mapping@0.3.12':
resolution: {integrity: sha512-OuLGC46TjB5BbN1dH8JULVVZY4WTdkF7tV9Ys6wLL1rubZnCMstOhNHueU5bLCrnRuDhKPDM4g6sw4Bel5Gzqg==}
+ '@jridgewell/gen-mapping@0.3.8':
+ resolution: {integrity: sha512-imAbBGkb+ebQyxKgzv5Hu2nmROxoDOXHh80evxdoXNOrvAnVx7zimzc1Oo5h9RlfV4vPXaE2iM5pOFbvOCClWA==}
+ engines: {node: '>=6.0.0'}
+
'@jridgewell/remapping@2.3.5':
resolution: {integrity: sha512-LI9u/+laYG4Ds1TDKSJW2YPrIlcVYOwi2fUC6xB43lueCjgxV4lffOCZCtYFiH6TNOX+tQKXx97T4IKHbhyHEQ==}
@@ -2725,6 +2769,10 @@ packages:
resolution: {integrity: sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==}
engines: {node: '>=6.0.0'}
+ '@jridgewell/set-array@1.2.1':
+ resolution: {integrity: sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A==}
+ engines: {node: '>=6.0.0'}
+
'@jridgewell/source-map@0.3.6':
resolution: {integrity: sha512-1ZJTZebgqllO79ue2bm3rIGud/bOe0pP5BjSRCRxxYkEZS8STV7zN84UBbiYu7jy+eCKSnVIUgoWWE/tt+shMQ==}
@@ -2743,8 +2791,14 @@ packages:
'@napi-rs/wasm-runtime@0.2.11':
resolution: {integrity: sha512-9DPkXtvHydrcOsopiYpUgPHpmj0HWZKMUnL2dZqpvC42lsratuBG06V5ipyno0fUek5VlFsNQ+AcFATSrJXgMA==}
- '@napi-rs/wasm-runtime@1.0.5':
- resolution: {integrity: sha512-TBr9Cf9onSAS2LQ2+QHx6XcC6h9+RIzJgbqG3++9TUZSH204AwEy5jg3BTQ0VATsyoGj4ee49tN/y6rvaOOtcg==}
+ '@napi-rs/wasm-runtime@0.2.9':
+ resolution: {integrity: sha512-OKRBiajrrxB9ATokgEQoG87Z25c67pCpYcCwmXYX8PBftC9pBfN18gnm/fh1wurSLEKIAt+QRFLFCQISrb66Jg==}
+
+ '@napi-rs/wasm-runtime@1.0.3':
+ resolution: {integrity: sha512-rZxtMsLwjdXkMUGC3WwsPwLNVqVqnTJT6MNIB6e+5fhMcSCPP0AOsNWuMQ5mdCq6HNjs/ZeWAEchpqeprqBD2Q==}
+
+ '@napi-rs/wasm-runtime@1.0.6':
+ resolution: {integrity: sha512-DXj75ewm11LIWUk198QSKUTxjyRjsBwk09MuMk5DGK+GDUtyPhhEHOGP/Xwwj3DjQXXkivoBirmOnKrLfc0+9g==}
'@node-rs/bcrypt-android-arm-eabi@1.10.7':
resolution: {integrity: sha512-8dO6/PcbeMZXS3VXGEtct9pDYdShp2WBOWlDvSbcRwVqyB580aCBh0BEFmKYtXLzLvUK8Wf+CG3U6sCdILW1lA==}
@@ -2845,11 +2899,101 @@ packages:
resolution: {integrity: sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==}
engines: {node: '>= 8'}
- '@oxc-project/types@0.90.0':
- resolution: {integrity: sha512-fWvaufWUcLtm/OBKcNmxUkR0kQW5ZKAF0t03BXPqdzpxmnVCmSKzvUDRCOKnSagSfNzG/3ZdKpComH3GMy881g==}
+ '@oxc-minify/binding-android-arm64@0.87.0':
+ resolution: {integrity: sha512-ZbJmAfXvNAamOSnXId3BiM3DiuzlD1isqKjtmRFb/hpvChHHA23FSPrFcO16w+ugZKg33sZ93FinFkKtlC4hww==}
+ engines: {node: '>=14.0.0'}
+ cpu: [arm64]
+ os: [android]
+
+ '@oxc-minify/binding-darwin-arm64@0.87.0':
+ resolution: {integrity: sha512-ewmNsTY8YbjWOI8+EOWKTVATOYvG4Qq4zQHH5VFBeqhQPVusY1ORD6Ei+BijVKrnlbpjibLlkTl8IWqXCGK89A==}
+ engines: {node: '>=14.0.0'}
+ cpu: [arm64]
+ os: [darwin]
+
+ '@oxc-minify/binding-darwin-x64@0.87.0':
+ resolution: {integrity: sha512-qDH4w4EYttSC3Cs2VCh+CiMYKrcL2SNmnguBZXoUXe/RNk3csM+RhgcwdpX687xGvOhTFhH5PCIA84qh3ZpIbQ==}
+ engines: {node: '>=14.0.0'}
+ cpu: [x64]
+ os: [darwin]
+
+ '@oxc-minify/binding-freebsd-x64@0.87.0':
+ resolution: {integrity: sha512-5kxjHlSev2A09rDeITk+LMHxSrU3Iu8pUb0Zp4m+ul8FKlB9FrvFkAYwbctin6g47O98s3Win7Ewhy0w8JaiUA==}
+ engines: {node: '>=14.0.0'}
+ cpu: [x64]
+ os: [freebsd]
+
+ '@oxc-minify/binding-linux-arm-gnueabihf@0.87.0':
+ resolution: {integrity: sha512-NjbGXnNaAl5EgyonaDg2cPyH2pTf5a/+AP/5SRCJ0KetpXV22ZSUCvcy04Yt4QqjMcDs+WnJaGVxwx15Ofr6Gw==}
+ engines: {node: '>=14.0.0'}
+ cpu: [arm]
+ os: [linux]
- '@oxc-project/types@0.93.0':
- resolution: {integrity: sha512-yNtwmWZIBtJsMr5TEfoZFDxIWV6OdScOpza/f5YxbqUMJk+j6QX3Cf3jgZShGEFYWQJ5j9mJ6jM0tZHu2J9Yrg==}
+ '@oxc-minify/binding-linux-arm-musleabihf@0.87.0':
+ resolution: {integrity: sha512-llAjfCA0iV2LMMl+LTR3JhqAc2iQmj+DTKd0VWOrbNOuNczeE9D5kJFkqYplD73LrkuqxrX9oDeUjjeLdVBPXw==}
+ engines: {node: '>=14.0.0'}
+ cpu: [arm]
+ os: [linux]
+
+ '@oxc-minify/binding-linux-arm64-gnu@0.87.0':
+ resolution: {integrity: sha512-tf2Shom09AaSmu7U1hYYcEFF/cd+20HtmQ8eyGsRkqD5bqUj6lDu8TNSU9FWZ9tcZ83NzyFMwXZWHyeeIIbpxw==}
+ engines: {node: '>=14.0.0'}
+ cpu: [arm64]
+ os: [linux]
+
+ '@oxc-minify/binding-linux-arm64-musl@0.87.0':
+ resolution: {integrity: sha512-pgWeYfSprtpnJVea9Q5eI6Eo80lDGlMw2JdcSMXmShtBjEhBl6bvDNHlV+6kNfh7iT65y/uC6FR8utFrRghu8A==}
+ engines: {node: '>=14.0.0'}
+ cpu: [arm64]
+ os: [linux]
+
+ '@oxc-minify/binding-linux-riscv64-gnu@0.87.0':
+ resolution: {integrity: sha512-O1QPczlT+lqNZVeKOdFxxL+s1RIlnixaJYFLrcqDcRyn82MGKLz7sAenBTFRQoIfLnSxtMGL6dqHOefYkQx7Cg==}
+ engines: {node: '>=14.0.0'}
+ cpu: [riscv64]
+ os: [linux]
+
+ '@oxc-minify/binding-linux-s390x-gnu@0.87.0':
+ resolution: {integrity: sha512-tcwt3ZUWOKfNLXN2edxFVHMlIuPvbuyMaKmRopgljSCfFcNHWhfTNlxlvmECRNhuQ91EcGwte6F1dwoeMCNd7A==}
+ engines: {node: '>=14.0.0'}
+ cpu: [s390x]
+ os: [linux]
+
+ '@oxc-minify/binding-linux-x64-gnu@0.87.0':
+ resolution: {integrity: sha512-Xf4AXF14KXUzSnfgTcFLFSM0TykJhFw14+xwNvlAb6WdqXAKlMrz9joIAezc8dkW1NNscCVTsqBUPJ4RhvCM1Q==}
+ engines: {node: '>=14.0.0'}
+ cpu: [x64]
+ os: [linux]
+
+ '@oxc-minify/binding-linux-x64-musl@0.87.0':
+ resolution: {integrity: sha512-LIqvpx9UihEW4n9QbEljDnfUdAWqhr6dRqmzSFwVAeLZRUECluLCDdsdwemrC/aZkvnisA4w0LFcFr3HmeTLJg==}
+ engines: {node: '>=14.0.0'}
+ cpu: [x64]
+ os: [linux]
+
+ '@oxc-minify/binding-wasm32-wasi@0.87.0':
+ resolution: {integrity: sha512-h0xluvc+YryfH5G5dndjGHuA/D4Kp85EkPMxqoOjNudOKDCtdobEaC9horhCqnOOQ0lgn+PGFl3w8u4ToOuRrA==}
+ engines: {node: '>=14.0.0'}
+ cpu: [wasm32]
+
+ '@oxc-minify/binding-win32-arm64-msvc@0.87.0':
+ resolution: {integrity: sha512-fgxSx+TUc7e2rNtRAMnhHrjqh1e8p/JKmWxRZXtkILveMr/TOHGiDis7U3JJbwycmTZ+HSsJ/PNFQl+tKzmDxw==}
+ engines: {node: '>=14.0.0'}
+ cpu: [arm64]
+ os: [win32]
+
+ '@oxc-minify/binding-win32-x64-msvc@0.87.0':
+ resolution: {integrity: sha512-K6TTrlitEJgD0FGIW2r0t3CIJNqBkzHT97h49gZLS24ey2UG1zKt27iSHkpXMJYDiG97ZD2yv3pSph1ctMlFXw==}
+ engines: {node: '>=14.0.0'}
+ cpu: [x64]
+ os: [win32]
+
+ '@oxc-project/runtime@0.92.0':
+ resolution: {integrity: sha512-Z7x2dZOmznihvdvCvLKMl+nswtOSVxS2H2ocar+U9xx6iMfTp0VGIrX6a4xB1v80IwOPC7dT1LXIJrY70Xu3Jw==}
+ engines: {node: ^20.19.0 || >=22.12.0}
+
+ '@oxc-project/types@0.94.0':
+ resolution: {integrity: sha512-+UgQT/4o59cZfH6Cp7G0hwmqEQ0wE+AdIwhikdwnhWI9Dp8CgSY081+Q3O67/wq3VJu8mgUEB93J9EHHn70fOw==}
'@parcel/watcher-android-arm64@2.5.1':
resolution: {integrity: sha512-KF8+j9nNbUN8vzOFDpRMsaKBHZ/mcjEjMToVMJOhTozkDonQFFrRcfdLWn6yWKCmJKmdVxSgHiYvTCef4/qcBA==}
@@ -2960,85 +3104,85 @@ packages:
'@quansync/fs@0.1.5':
resolution: {integrity: sha512-lNS9hL2aS2NZgNW7BBj+6EBl4rOf8l+tQ0eRY6JWCI8jI2kc53gSoqbjojU0OnAWhzoXiOjFyGsHcDGePB3lhA==}
- '@rolldown/binding-android-arm64@1.0.0-beta.41':
- resolution: {integrity: sha512-Edflndd9lU7JVhVIvJlZhdCj5DkhYDJPIRn4Dx0RUdfc8asP9xHOI5gMd8MesDDx+BJpdIT/uAmVTearteU/mQ==}
+ '@rolldown/binding-android-arm64@1.0.0-beta.42':
+ resolution: {integrity: sha512-W5ZKF3TP3bOWuBfotAGp+UGjxOkGV7jRmIRbBA7NFjggx7Oi6vOmGDqpHEIX7kDCiry1cnIsWQaxNvWbMdkvzQ==}
engines: {node: ^20.19.0 || >=22.12.0}
cpu: [arm64]
os: [android]
- '@rolldown/binding-darwin-arm64@1.0.0-beta.41':
- resolution: {integrity: sha512-XGCzqfjdk7550PlyZRTBKbypXrB7ATtXhw/+bjtxnklLQs0mKP/XkQVOKyn9qGKSlvH8I56JLYryVxl0PCvSNw==}
+ '@rolldown/binding-darwin-arm64@1.0.0-beta.42':
+ resolution: {integrity: sha512-abw/wtgJA8OCgaTlL+xJxnN/Z01BwV1rfzIp5Hh9x+IIO6xOBfPsQ0nzi0+rWx3TyZ9FZXyC7bbC+5NpQ9EaXQ==}
engines: {node: ^20.19.0 || >=22.12.0}
cpu: [arm64]
os: [darwin]
- '@rolldown/binding-darwin-x64@1.0.0-beta.41':
- resolution: {integrity: sha512-Ho6lIwGJed98zub7n0xcRKuEtnZgbxevAmO4x3zn3C3N4GVXZD5xvCvTVxSMoeBJwTcIYzkVDRTIhylQNsTgLQ==}
+ '@rolldown/binding-darwin-x64@1.0.0-beta.42':
+ resolution: {integrity: sha512-Y/UrZIRVr8CvXVEB88t6PeC46r1K9/QdPEo2ASE/b/KBEyXIx+QbM6kv9QfQVWU2Atly2+SVsQzxQsIvuk3lZQ==}
engines: {node: ^20.19.0 || >=22.12.0}
cpu: [x64]
os: [darwin]
- '@rolldown/binding-freebsd-x64@1.0.0-beta.41':
- resolution: {integrity: sha512-ijAZETywvL+gACjbT4zBnCp5ez1JhTRs6OxRN4J+D6AzDRbU2zb01Esl51RP5/8ZOlvB37xxsRQ3X4YRVyYb3g==}
+ '@rolldown/binding-freebsd-x64@1.0.0-beta.42':
+ resolution: {integrity: sha512-zRM0oOk7BZiy6DoWBvdV4hyEg+j6+WcBZIMHVirMEZRu8hd18kZdJkg+bjVMfCEhwpWeFUfBfZ1qcaZ5UdYzlQ==}
engines: {node: ^20.19.0 || >=22.12.0}
cpu: [x64]
os: [freebsd]
- '@rolldown/binding-linux-arm-gnueabihf@1.0.0-beta.41':
- resolution: {integrity: sha512-EgIOZt7UildXKFEFvaiLNBXm+4ggQyGe3E5Z1QP9uRcJJs9omihOnm897FwOBQdCuMvI49iBgjFrkhH+wMJ2MA==}
+ '@rolldown/binding-linux-arm-gnueabihf@1.0.0-beta.42':
+ resolution: {integrity: sha512-6RjFaC52QNwo7ilU8C5H7swbGlgfTkG9pudXwzr3VYyT18s0C9gLg3mvc7OMPIGqNxnQ0M5lU8j6aQCk2DTRVg==}
engines: {node: ^20.19.0 || >=22.12.0}
cpu: [arm]
os: [linux]
- '@rolldown/binding-linux-arm64-gnu@1.0.0-beta.41':
- resolution: {integrity: sha512-F8bUwJq8v/JAU8HSwgF4dztoqJ+FjdyjuvX4//3+Fbe2we9UktFeZ27U4lRMXF1vxWtdV4ey6oCSqI7yUrSEeg==}
+ '@rolldown/binding-linux-arm64-gnu@1.0.0-beta.42':
+ resolution: {integrity: sha512-LMYHM5Sf6ROq+VUwHMDVX2IAuEsWTv4SnlFEedBnMGpvRuQ14lCmD4m5Q8sjyAQCgyha9oghdGoK8AEg1sXZKg==}
engines: {node: ^20.19.0 || >=22.12.0}
cpu: [arm64]
os: [linux]
- '@rolldown/binding-linux-arm64-musl@1.0.0-beta.41':
- resolution: {integrity: sha512-MioXcCIX/wB1pBnBoJx8q4OGucUAfC1+/X1ilKFsjDK05VwbLZGRgOVD5OJJpUQPK86DhQciNBrfOKDiatxNmg==}
+ '@rolldown/binding-linux-arm64-musl@1.0.0-beta.42':
+ resolution: {integrity: sha512-/bNTYb9aKNhzdbPn3O4MK2aLv55AlrkUKPE4KNfBYjkoZUfDr4jWp7gsSlvTc5A/99V1RCm9axvt616ZzeXGyA==}
engines: {node: ^20.19.0 || >=22.12.0}
cpu: [arm64]
os: [linux]
- '@rolldown/binding-linux-x64-gnu@1.0.0-beta.41':
- resolution: {integrity: sha512-m66M61fizvRCwt5pOEiZQMiwBL9/y0bwU/+Kc4Ce/Pef6YfoEkR28y+DzN9rMdjo8Z28NXjsDPq9nH4mXnAP0g==}
+ '@rolldown/binding-linux-x64-gnu@1.0.0-beta.42':
+ resolution: {integrity: sha512-n/SLa4h342oyeGykZdch7Y3GNCNliRPL4k5wkeZ/5eQZs+c6/ZG1SHCJQoy7bZcmxiMyaXs9HoFmv1PEKrZgWg==}
engines: {node: ^20.19.0 || >=22.12.0}
cpu: [x64]
os: [linux]
- '@rolldown/binding-linux-x64-musl@1.0.0-beta.41':
- resolution: {integrity: sha512-yRxlSfBvWnnfrdtJfvi9lg8xfG5mPuyoSHm0X01oiE8ArmLRvoJGHUTJydCYz+wbK2esbq5J4B4Tq9WAsOlP1Q==}
+ '@rolldown/binding-linux-x64-musl@1.0.0-beta.42':
+ resolution: {integrity: sha512-4PSd46sFzqpLHSGdaSViAb1mk55sCUMpJg+X8ittXaVocQsV3QLG/uydSH8RyL0ngHX5fy3D70LcCzlB15AgHw==}
engines: {node: ^20.19.0 || >=22.12.0}
cpu: [x64]
os: [linux]
- '@rolldown/binding-openharmony-arm64@1.0.0-beta.41':
- resolution: {integrity: sha512-PHVxYhBpi8UViS3/hcvQQb9RFqCtvFmFU1PvUoTRiUdBtgHA6fONNHU4x796lgzNlVSD3DO/MZNk1s5/ozSMQg==}
+ '@rolldown/binding-openharmony-arm64@1.0.0-beta.42':
+ resolution: {integrity: sha512-BmWoeJJyeZXmZBcfoxG6J9+rl2G7eO47qdTkAzEegj4n3aC6CBIHOuDcbE8BvhZaEjQR0nh0nJrtEDlt65Q7Sw==}
engines: {node: ^20.19.0 || >=22.12.0}
cpu: [arm64]
os: [openharmony]
- '@rolldown/binding-wasm32-wasi@1.0.0-beta.41':
- resolution: {integrity: sha512-OAfcO37ME6GGWmj9qTaDT7jY4rM0T2z0/8ujdQIJQ2x2nl+ztO32EIwURfmXOK0U1tzkyuaKYvE34Pug/ucXlQ==}
+ '@rolldown/binding-wasm32-wasi@1.0.0-beta.42':
+ resolution: {integrity: sha512-2Ft32F7uiDTrGZUKws6CLNTlvTWHC33l4vpXrzUucf9rYtUThAdPCOt89Pmn13tNX6AulxjGEP2R0nZjTSW3eQ==}
engines: {node: '>=14.0.0'}
cpu: [wasm32]
- '@rolldown/binding-win32-arm64-msvc@1.0.0-beta.41':
- resolution: {integrity: sha512-NIYGuCcuXaq5BC4Q3upbiMBvmZsTsEPG9k/8QKQdmrch+ocSy5Jv9tdpdmXJyighKqm182nh/zBt+tSJkYoNlg==}
+ '@rolldown/binding-win32-arm64-msvc@1.0.0-beta.42':
+ resolution: {integrity: sha512-hC1kShXW/z221eG+WzQMN06KepvPbMBknF0iGR3VMYJLOe9gwnSTfGxFT5hf8XrPv7CEZqTWRd0GQpkSHRbGsw==}
engines: {node: ^20.19.0 || >=22.12.0}
cpu: [arm64]
os: [win32]
- '@rolldown/binding-win32-ia32-msvc@1.0.0-beta.41':
- resolution: {integrity: sha512-kANdsDbE5FkEOb5NrCGBJBCaZ2Sabp3D7d4PRqMYJqyLljwh9mDyYyYSv5+QNvdAmifj+f3lviNEUUuUZPEFPw==}
+ '@rolldown/binding-win32-ia32-msvc@1.0.0-beta.42':
+ resolution: {integrity: sha512-AICBYromawouGjj+GS33369E8Vwhy6UwhQEhQ5evfS8jPCsyVvoICJatbDGDGH01dwtVGLD5eDFzPicUOVpe4g==}
engines: {node: ^20.19.0 || >=22.12.0}
cpu: [ia32]
os: [win32]
- '@rolldown/binding-win32-x64-msvc@1.0.0-beta.41':
- resolution: {integrity: sha512-UlpxKmFdik0Y2VjZrgUCgoYArZJiZllXgIipdBRV1hw6uK45UbQabSTW6Kp6enuOu7vouYWftwhuxfpE8J2JAg==}
+ '@rolldown/binding-win32-x64-msvc@1.0.0-beta.42':
+ resolution: {integrity: sha512-XpZ0M+tjoEiSc9c+uZR7FCnOI0uxDRNs1elGOMjeB0pUP1QmvVbZGYNsyLbLoP4u7e3VQN8rie1OQ8/mB6rcJg==}
engines: {node: ^20.19.0 || >=22.12.0}
cpu: [x64]
os: [win32]
@@ -3046,8 +3190,8 @@ packages:
'@rolldown/pluginutils@1.0.0-beta.29':
resolution: {integrity: sha512-NIJgOsMjbxAXvoGq/X0gD7VPMQ8j9g0BiDaNjVNVjvl+iKXxL3Jre0v31RmBYeLEmkbj2s02v8vFTbUXi5XS2Q==}
- '@rolldown/pluginutils@1.0.0-beta.41':
- resolution: {integrity: sha512-ycMEPrS3StOIeb87BT3/+bu+blEtyvwQ4zmo2IcJQy0Rd1DAAhKksA0iUZ3MYSpJtjlPhg0Eo6mvVS6ggPhRbw==}
+ '@rolldown/pluginutils@1.0.0-beta.42':
+ resolution: {integrity: sha512-N7pQzk9CyE7q0bBN/q0J8s6Db279r5kUZc6d7/wWRe9/zXqC52HQovVyu6iXPIDY4BEzzgbVLhVFXrOuGJ22ZQ==}
'@rollup/plugin-alias@5.1.1':
resolution: {integrity: sha512-PR9zDb+rOzkRb2VD+EuKB7UC41vU5DIwZ5qqCpk0KJudcWAyi8rvYOhS7+L5aZCspw1stTViLgN5v6FF1p5cgQ==}
@@ -3348,7 +3492,10 @@ packages:
'@tailwindcss/vite@4.1.13':
resolution: {integrity: sha512-0PmqLQ010N58SbMTJ7BVJ4I2xopiQn/5i6nlb4JmxzQf8zcS5+m2Cv6tqh+sfDwtIdjoEnOvwsGQ1hkUi8QEHQ==}
peerDependencies:
- vite: workspace:*
+ vite: workspace:rolldown-vite@*
+
+ '@tybys/wasm-util@0.10.0':
+ resolution: {integrity: sha512-VyyPYFlOMNylG45GoAe0xDoLwWuowvf92F9kySqzYh8vmYm7D2u4iUJKa1tOUpS70Ku13ASrOkS4ScXFsTaCNQ==}
'@tybys/wasm-util@0.10.1':
resolution: {integrity: sha512-9tTaPJLSiejZKx+Bmog4uSubteqTvFrVrURwkmHixBo0G4seD0zUxp98E1DzUBJxLQ3NPwXrGKDiVjwx/DpPsg==}
@@ -3398,6 +3545,9 @@ packages:
'@types/escape-html@1.0.4':
resolution: {integrity: sha512-qZ72SFTgUAZ5a7Tj6kf2SHLetiH5S6f8G5frB2SPQ3EyF02kxdyBFf4Tz4banE3xCgGnKgWLt//a6VuYHKYJTg==}
+ '@types/estree@1.0.6':
+ resolution: {integrity: sha512-AYnb1nQyY49te+VRAVgmzfcgjYS91mY5P0TKUDCLEM+gNnA+3T6rWITXRLYCpahpqSQbN5cE+gHpnPyXjHWxcw==}
+
'@types/estree@1.0.7':
resolution: {integrity: sha512-w28IoSUCJpidD/TGviZwwMJckNESJZXFu7NBZ5YJ4mEUnNraUn9Pm8HSZm/jDF1pDWYKspWE7oVphigUPRakIQ==}
@@ -3446,8 +3596,8 @@ packages:
'@types/ms@2.1.0':
resolution: {integrity: sha512-GsCCIZDE/p3i96vtEqx+7dBUGXrc7zeSK3wwPHIaRThS+9OhWIXRqzs4d6k1SVU8g91DrNRWxWUGhp5KXQb2VA==}
- '@types/node@22.18.7':
- resolution: {integrity: sha512-3E97nlWEVp2V6J7aMkR8eOnw/w0pArPwf/5/W0865f+xzBoGL/ZuHkTAKAGN7cOWNwd+sG+hZOqj+fjzeHS75g==}
+ '@types/node@22.18.8':
+ resolution: {integrity: sha512-pAZSHMiagDR7cARo/cch1f3rXy0AEXwsVsVH09FcyeJVAzCnGgmYis7P3JidtTUjyadhTeSo8TgRPswstghDaw==}
'@types/normalize-package-data@2.4.4':
resolution: {integrity: sha512-37i+OaWTh9qeK4LSHPsyRC7NahnGotNuZvjLSgcPzblpHB3rrCJxAOgI5gCdKm7coonsaX1Of0ILiTcnZjbfxA==}
@@ -3469,8 +3619,8 @@ packages:
peerDependencies:
'@types/react': ^19.0.0
- '@types/react@19.1.16':
- resolution: {integrity: sha512-WBM/nDbEZmDUORKnh5i1bTnAz6vTohUf9b8esSMu+b24+srbaxa04UbJgWx78CVfNXA20sNu0odEIluZDFdCog==}
+ '@types/react@19.2.0':
+ resolution: {integrity: sha512-1LOH8xovvsKsCBq1wnT4ntDUdCJKmnEakhsuoUSy6ExlHCkGP2hqnatagYTgFk6oeL0VU31u7SNjunPN+GchtA==}
'@types/send@0.17.4':
resolution: {integrity: sha512-x2EM6TJOybec7c52BX0ZspPodMsQUd5L6PRwOunVyVUhXiBSKf3AezDL8Dgvgt5o0UfKNfuA0eMLr2wLT4AiBA==}
@@ -3528,8 +3678,8 @@ packages:
eslint: ^8.57.0 || ^9.0.0
typescript: '>=4.8.4 <6.0.0'
- '@typescript-eslint/types@8.39.1':
- resolution: {integrity: sha512-7sPDKQQp+S11laqTrhHqeAbsCfMkwJMrV7oTDvtDds4mEofJYir414bYKUEb8YPUm9QL3U+8f6L6YExSoAGdQw==}
+ '@typescript-eslint/types@8.35.1':
+ resolution: {integrity: sha512-q/O04vVnKHfrrhNAscndAn1tuQhIkwqnaW+eu5waD5IPts2eX1dgJxgqcPx5BX109/qAz7IG6VrEPTOYKCNfRQ==}
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
'@typescript-eslint/types@8.45.0':
@@ -3665,13 +3815,13 @@ packages:
engines: {node: ^20.19.0 || >=22.12.0}
peerDependencies:
terser: ^5.16.0
- vite: workspace:*
+ vite: workspace:rolldown-vite@*
'@vitejs/plugin-vue@6.0.1':
resolution: {integrity: sha512-+MaE752hU0wfPFJEUAIxqw18+20euHHdxVtMvbFcOEpjEyfqXH/5DCoTHiVJ0J29EhTJdoTkjEv5YBKU9dnoTw==}
engines: {node: ^20.19.0 || >=22.12.0}
peerDependencies:
- vite: workspace:*
+ vite: workspace:rolldown-vite@*
vue: ^3.2.25
'@vitejs/release-scripts@1.6.0':
@@ -3966,7 +4116,7 @@ packages:
resolution: {integrity: sha512-46ryTE9RZO/rfDd7pEqFl7etuyzekzEhUbTW3BvmeO/BcCMEgq59BKhek3dXDWgAj4oMK6OZi+vRr1wPW6qjEQ==}
peerDependencies:
msw: ^2.4.9
- vite: workspace:*
+ vite: workspace:rolldown-vite@*
peerDependenciesMeta:
msw:
optional: true
@@ -4118,9 +4268,6 @@ packages:
'@vue/shared@3.5.18':
resolution: {integrity: sha512-cZy8Dq+uuIXbxCZpuLd2GJdeSO/lIzIspC2WtkqIpje5QyFbvLaI5wZtdUjLHjGZrlVX6GilejatWwVYYRc8tA==}
- '@vue/shared@3.5.19':
- resolution: {integrity: sha512-IhXCOn08wgKrLQxRFKKlSacWg4Goi1BolrdEeLYn6tgHjJNXVrWJ5nzoxZqNwl5p88aLlQ8LOaoMa3AYvaKJ/Q==}
-
'@vue/shared@3.5.21':
resolution: {integrity: sha512-+2k1EQpnYuVuu3N7atWyG3/xoFWIVJZq4Mz8XNOdScFI0etES75fbny/oU4lKWk/577P1zmg0ioYvpGEDZ3DLw==}
@@ -4239,10 +4386,6 @@ packages:
resolution: {integrity: sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==}
engines: {node: '>=12'}
- ansis@4.1.0:
- resolution: {integrity: sha512-BGcItUBWSMRgOCe+SVZJ+S7yTRG0eGt9cXAHev72yuGcY23hnLA7Bky5L/xLyPINoSN95geovfBkqoTlNZYa7w==}
- engines: {node: '>=14'}
-
ansis@4.2.0:
resolution: {integrity: sha512-HqZ5rWlFjGiV0tDm3UxxgNRqsOTniqoKZu0pIAfh7TZQMGuZK+hH0drySty0si0QXj1ieop4+SkSfPZBPPkHig==}
engines: {node: '>=14'}
@@ -4330,12 +4473,12 @@ packages:
balanced-match@1.0.2:
resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==}
- baseline-browser-mapping@2.8.6:
- resolution: {integrity: sha512-wrH5NNqren/QMtKUEEJf7z86YjfqW/2uw3IL3/xpqZUC95SSVIFXYQeeGjL6FT/X68IROu6RMehZQS5foy2BXw==}
+ baseline-browser-mapping@2.8.10:
+ resolution: {integrity: sha512-uLfgBi+7IBNay8ECBO2mVMGZAc1VgZWEChxm4lv+TobGdG82LnXMjuNGo/BSSZZL4UmkWhxEHP2f5ziLNwGWMA==}
hasBin: true
- baseline-browser-mapping@2.8.9:
- resolution: {integrity: sha512-hY/u2lxLrbecMEWSB0IpGzGyDyeoMFQhCvZd2jGFSE5I17Fh01sYUBPCJtkWERw7zrac9+cIghxm/ytJa2X8iA==}
+ baseline-browser-mapping@2.8.6:
+ resolution: {integrity: sha512-wrH5NNqren/QMtKUEEJf7z86YjfqW/2uw3IL3/xpqZUC95SSVIFXYQeeGjL6FT/X68IROu6RMehZQS5foy2BXw==}
hasBin: true
bignumber.js@9.3.1:
@@ -4414,8 +4557,8 @@ packages:
resolution: {integrity: sha512-QOSvevhslijgYwRx6Rv7zKdMF8lbRmx+uQGx2+vDc+KI/eBnsy9kit5aj23AgGu3pa4t9AgwbnXWqS+iOY+2aA==}
engines: {node: '>= 6'}
- caniuse-lite@1.0.30001734:
- resolution: {integrity: sha512-uhE1Ye5vgqju6OI71HTQqcBCZrvHugk0MjLak7Q+HfoBgoq5Bi+5YnwjP4fjDgrtYr/l8MVRBvzz9dPD4KyK0A==}
+ caniuse-lite@1.0.30001703:
+ resolution: {integrity: sha512-kRlAGTRWgPsOj7oARC9m1okJEXdL/8fekFVcxA8Hl7GH4r/sN4OJn/i6Flde373T50KS7Y37oFbMwlE8+F42kQ==}
caniuse-lite@1.0.30001741:
resolution: {integrity: sha512-QGUGitqsc8ARjLdgAfxETDhRbJ0REsP6O3I96TAth/mVjh2cYzN2u+3AzPP3aVSm2FehEItaJw1xd+IGBXWeSw==}
@@ -4598,8 +4741,8 @@ packages:
resolution: {integrity: sha512-yCEafptTtb4bk7GLEQoM8KVJpxAfdBJYaXyzQEgQQQgYrZiDp8SJmGKlYza6CYjEDNstAdNdKA3UuoULlEbS6w==}
engines: {node: '>=12.13'}
- core-js-compat@3.44.0:
- resolution: {integrity: sha512-JepmAj2zfl6ogy34qfWtcE7nHKAJnKsQFRn++scjVS2bZFllwptzw61BZcZFYBPpUznLfAvh0LGhxKppk04ClA==}
+ core-js-compat@3.43.0:
+ resolution: {integrity: sha512-2GML2ZsCc5LR7hZYz4AXmjQw8zuy2T//2QntwdnpuYI7jteT6GVYJL7F6C2C57R7gSYrcqVW3lAALefdbhBLDA==}
core-js@3.45.1:
resolution: {integrity: sha512-L4NPsJlCfZsPeXukyzHFlg/i7IIVwHSItR0wg0FLNqYClJ4MQYTYLbC7EkjKYRLZF2iof2MUgN0EGy7MdQFChg==}
@@ -4696,6 +4839,10 @@ packages:
resolution: {integrity: sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA==}
engines: {node: '>=6'}
+ destroy@1.2.0:
+ resolution: {integrity: sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==}
+ engines: {node: '>= 0.8', npm: 1.2.8000 || >= 1.4.16}
+
detect-libc@1.0.3:
resolution: {integrity: sha512-pGjwhsmsp4kL2RTz08wcOlGN83otlqHeD/Z5T8GXZB+/YcpQ/dgo+lbU8ZsGxV0HIvqqxo9l7mqYwyYMD9bKDg==}
engines: {node: '>=0.10'}
@@ -4756,8 +4903,8 @@ packages:
ee-first@1.1.1:
resolution: {integrity: sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==}
- electron-to-chromium@1.5.218:
- resolution: {integrity: sha512-uwwdN0TUHs8u6iRgN8vKeWZMRll4gBkz+QMqdS7DDe49uiK68/UX92lFb61oiFPrpYZNeZIqa4bA7O6Aiasnzg==}
+ electron-to-chromium@1.5.221:
+ resolution: {integrity: sha512-/1hFJ39wkW01ogqSyYoA4goOXOtMRy6B+yvA1u42nnsEGtHzIzmk93aPISumVQeblj47JUHLC9coCjUxb1EvtQ==}
emoji-regex@10.4.0:
resolution: {integrity: sha512-EC+0oUMY1Rqm4O6LLrgjtYDvcVYTy7chDnM4Q7030tP4Kwj3u/pR6gP9ygnp2CJMK5Gq+9Q2oqmrFJAz01DXjw==}
@@ -5081,8 +5228,8 @@ packages:
focus-trap@7.6.5:
resolution: {integrity: sha512-7Ke1jyybbbPZyZXFxEftUtxFGLMpE2n6A+z//m4CRDlj0hW+o3iYSmh8nFlYMurOiJVDmJRilUQtJr08KfIxlg==}
- follow-redirects@1.15.11:
- resolution: {integrity: sha512-deG2P0JfjrTxl50XGCDyfI97ZGVCxIpfKYmfyrQ54n5FO/0gfIES8C/Psl6kWVDolizcaaxZJnTS0QSMxvnsBQ==}
+ follow-redirects@1.15.9:
+ resolution: {integrity: sha512-gew4GsXizNgdoRyqmyfMHyAmXsZDk6mHkSxZFCzW9gwlbtOW44CDtYavM+y+72qD/Vq2l550kMF52DT8fOLJqQ==}
engines: {node: '>=4.0'}
peerDependencies:
debug: '*'
@@ -5109,6 +5256,10 @@ packages:
fraction.js@4.3.7:
resolution: {integrity: sha512-ZsDfxO51wGAXREY55a7la9LScWpwv9RxIrYABrlvOFBlH/ShPnrtsXeuUIfXKKOVicNxQ+o8JTbJvjS4M89yew==}
+ fresh@0.5.2:
+ resolution: {integrity: sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==}
+ engines: {node: '>= 0.6'}
+
fresh@2.0.0:
resolution: {integrity: sha512-Rx/WycZ60HOaqLKAi6cHRKKI7zxWbJ31MhntmtwMoaTeF7XFH9hhBp8vITaMidfljRQ6eYWCKkaTK+ykVJHP2A==}
engines: {node: '>= 0.8'}
@@ -5136,8 +5287,8 @@ packages:
resolution: {integrity: sha512-vpeMIQKxczTD/0s2CdEWHcb0eeJe6TFjxb+J5xgX7hScxqrGuyjmv4c1D4A/gelKfyox0gJJwIHF+fLjeaM8kQ==}
engines: {node: '>=18'}
- get-intrinsic@1.3.0:
- resolution: {integrity: sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ==}
+ get-intrinsic@1.2.7:
+ resolution: {integrity: sha512-VW6Pxhsrk0KAOqs3WEd0klDiF/+V7gQOpAvY1jVU/LHmaD/kQO4523aiJuikX/QAKYiW6x8Jh+RJej1almdtCA==}
engines: {node: '>= 0.4'}
get-proto@1.0.1:
@@ -5173,6 +5324,10 @@ packages:
resolution: {integrity: sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg==}
hasBin: true
+ globals@11.12.0:
+ resolution: {integrity: sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==}
+ engines: {node: '>=4'}
+
globals@14.0.0:
resolution: {integrity: sha512-oahGvuMGQlPw/ivIYBjVSrWAfWLBeku5tpPE2fOPLi+WHffIWbuh2tCjhyQhTBPMf5E9jDEH4FOmTYgYwbKwtQ==}
engines: {node: '>=18'}
@@ -5699,6 +5854,9 @@ packages:
longest-streak@3.1.0:
resolution: {integrity: sha512-9Ri+o0JYgehTaVBBDoMqIl8GXtbWg711O3srftcHhZ0dqnETqLaoIK0x17fUw9rFSlK/0NlsKe0Ahhyl5pXE2g==}
+ loupe@3.1.3:
+ resolution: {integrity: sha512-kkIp7XSkP78ZxJEsSxW3712C6teJVoeHHwgo9zJ380de7IYyJ2ISlxojcH2pC5OFLewESmnRi/+XCDIEEVyoug==}
+
loupe@3.1.4:
resolution: {integrity: sha512-wJzkKwJrheKtknCOKNEtDK4iqg/MxmZheEMtSTYvnzRdEYaZzmgH976nenp8WdJRdx5Vc1X/9MO0Oszl6ezeXg==}
@@ -5888,6 +6046,10 @@ packages:
resolution: {integrity: sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==}
engines: {node: '>= 0.6'}
+ mime-db@1.53.0:
+ resolution: {integrity: sha512-oHlN/w+3MQ3rba9rqFr6V/ypF10LSkdwUysQL7GkXoTgIWeV+tcXGA852TBxH+gsh8UWoyhR1hKcoMJTuWflpg==}
+ engines: {node: '>= 0.6'}
+
mime-db@1.54.0:
resolution: {integrity: sha512-aU5EJuIN2WDemCcAp2vFBfp/m4EAhWJnUNSSw0ixs7/kXbd6Pg64EmwJkNdFhB8aWt1sH2CTXrLxo/iAGV3oPQ==}
engines: {node: '>= 0.6'}
@@ -5896,6 +6058,10 @@ packages:
resolution: {integrity: sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==}
engines: {node: '>= 0.6'}
+ mime-types@3.0.0:
+ resolution: {integrity: sha512-XqoSHeCGjVClAmoGFG3lVFqQFRIrTVw2OH3axRqAcfaw+gHWIfnASS92AV+Rl/mk0MupgZTRHQOjxY6YVnzK5w==}
+ engines: {node: '>= 0.6'}
+
mime-types@3.0.1:
resolution: {integrity: sha512-xRc4oEhT6eaBpU1XF7AjpOFD+xQmXNB5OVKwp4tqCuBpHLS/ZbBDrc07mYTDqVMg6PfxUjjNp85O6Cd2Z/5HWA==}
engines: {node: '>= 0.6'}
@@ -5913,11 +6079,15 @@ packages:
resolution: {integrity: sha512-VP79XUPxV2CigYP3jWwAUFSku2aKqBH7uTAapFWCBqutsbmDo96KY5o8uh6U+/YSIn5OxJnXp73beVkpqMIGhA==}
engines: {node: '>=18'}
- miniflare@4.20250924.0:
- resolution: {integrity: sha512-eQuWHklTeYYOil7sPPWo7Wrw86I4oac1kGAYfYcjg5dqMgMAiPUHvUWXMlTvW8ON6q33Ew23AsGDirm+Bea9ig==}
+ miniflare@4.20250927.0:
+ resolution: {integrity: sha512-CP0Q9Ytipid/Q6fJ2gAsVJ3yIMdx1+GoivA+EON68/ZLt66QwUFtpFeqdOUOKDmMbf/NFzjsKsce6h/8KjjYXg==}
engines: {node: '>=18.0.0'}
hasBin: true
+ minimatch@10.0.1:
+ resolution: {integrity: sha512-ethXTt3SGGR+95gudmqJ1eNhRO7eGEGIgYA9vnPatK4/etz2MEVDno5GMCibdMTuBMyElzIlgxMna3K94XDIDQ==}
+ engines: {node: 20 || >=22}
+
minimatch@10.0.3:
resolution: {integrity: sha512-IPZ167aShDZZUMdRk66cyQAW3qr0WzbHkPdMYa8bzZhlHhO3jALbKdxcaak7W9FfT2rZNpQuUu4Od7ILEpXSaw==}
engines: {node: 20 || >=22}
@@ -5991,8 +6161,8 @@ packages:
engines: {node: ^18 || >=20}
hasBin: true
- napi-postinstall@0.2.5:
- resolution: {integrity: sha512-kmsgUvCRIJohHjbZ3V8avP0I1Pekw329MVAMDzVxsrkjgdnqiwvMX5XwR+hWV66vsAtZ+iM+fVnq8RTQawUmCQ==}
+ napi-postinstall@0.2.4:
+ resolution: {integrity: sha512-ZEzHJwBhZ8qQSbknHqYcdtQVr8zUgGyM/q6h6qAyhtyVMNrSgDhrC4disf03dYW0e+czXyLnZINnCTEkWy0eJg==}
engines: {node: ^12.20.0 || ^14.18.0 || >=16.0.0}
hasBin: true
@@ -6100,6 +6270,10 @@ packages:
resolution: {integrity: sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==}
engines: {node: '>= 0.8.0'}
+ oxc-minify@0.87.0:
+ resolution: {integrity: sha512-+UHWp6+0mdq0S2rEsZx9mqgL6JnG9ogO+CU17XccVrPUFtISFcZzk/biTn1JdBYFQ3kztof19pv8blMtgStQ2g==}
+ engines: {node: '>=14.0.0'}
+
p-limit@3.1.0:
resolution: {integrity: sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==}
engines: {node: '>=10'}
@@ -6186,6 +6360,10 @@ packages:
resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==}
engines: {node: '>=8.6'}
+ picomatch@4.0.2:
+ resolution: {integrity: sha512-M7BAV6Rlcy5u+m6oPhAPFgJTzAioX/6B0DxyvDlo9l8+T3nLKbrczg2WLUyzd45L8RqfUMyGPzekbMvX2Ldkwg==}
+ engines: {node: '>=12'}
+
picomatch@4.0.3:
resolution: {integrity: sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q==}
engines: {node: '>=12'}
@@ -6425,6 +6603,9 @@ packages:
resolution: {integrity: sha512-YWWTjgABSKcvs/nWBi9PycY/JiPJqOD4JA6o9Sej2AtvSGarXxKC3OQSk4pAarbdQlKAh5D4FCQkJNkW+GAn3w==}
engines: {node: '>=0.6'}
+ quansync@0.2.10:
+ resolution: {integrity: sha512-t41VRkMYbkHyCYmOvx/6URnN80H7k4X0lLdBMGsz+maAwrJQYB1djpV6vHrQIBE0WBSGqhtEHrK9U3DWWH8v7A==}
+
quansync@0.2.11:
resolution: {integrity: sha512-AifT7QEbW9Nri4tAwR5M/uzpBuqfZf+zwaEM/QkzEjj7NBuFD2rBuy0K3dE+8wltbezDV7JMA0WfnCPYRSYbXA==}
@@ -6559,8 +6740,8 @@ packages:
vue-tsc:
optional: true
- rolldown@1.0.0-beta.41:
- resolution: {integrity: sha512-U+NPR0Bkg3wm61dteD2L4nAM1U9dtaqVrpDXwC36IKRHpEO/Ubpid4Nijpa2imPchcVNHfxVFwSSMJdwdGFUbg==}
+ rolldown@1.0.0-beta.42:
+ resolution: {integrity: sha512-xaPcckj+BbJhYLsv8gOqezc8EdMcKKe/gk8v47B0KPvgABDrQ0qmNPAiT/gh9n9Foe0bUkEv2qzj42uU5q1WRg==}
engines: {node: ^20.19.0 || >=22.12.0}
hasBin: true
@@ -6748,6 +6929,10 @@ packages:
engines: {node: '>=10'}
hasBin: true
+ send@1.1.0:
+ resolution: {integrity: sha512-v67WcEouB5GxbTWL/4NeToqcZiAWEq90N888fczVArY8A79J0L4FD7vj5hm3eUMua5EpoQ59wa/oovY6TLvRUA==}
+ engines: {node: '>= 18'}
+
send@1.2.0:
resolution: {integrity: sha512-uaW0WwXKpL9blXE2o0bRhoL2EGXIrZxQ2ZQ4mgcfoBxdFmQold+qWsD2jLrfZ0trjKL6vOw0j//eAwcALFjKSw==}
engines: {node: '>= 18'}
@@ -7130,8 +7315,8 @@ packages:
typescript:
optional: true
- tsdown@0.15.5:
- resolution: {integrity: sha512-2UP5hDBVYGHnnQSIYtDxMDjePmut7EDpvW5E2kVnjpZ17JgiPvRJPHwk5Dm045bC75+q8yxAlw/CMIELymTWaw==}
+ tsdown@0.15.6:
+ resolution: {integrity: sha512-W6++O3JeV9gm3JY6P/vLiC7zzTcJbZhQxXb+p3AvRMpDOPBIg82yXULyZCcwjsihY/bFG+Qw37HkezZbP7fzUg==}
engines: {node: '>=20.19.0'}
hasBin: true
peerDependencies:
@@ -7310,7 +7495,7 @@ packages:
resolution: {integrity: sha512-bvPD4lhraLJw3rPtLhUIVsOvNfnHnF+F1LH7BKHekEzeZ4uqdTdqnwEyaT580AoKjjT6/F8En6hVJj7takPKDA==}
peerDependencies:
markdown-it: '>=14'
- vite: workspace:*
+ vite: workspace:rolldown-vite@*
vitepress-plugin-llms@1.7.5:
resolution: {integrity: sha512-GTkuxwIUt2QkK2GhNdn1iBtl0Zv7U6nw5hqIBhsiclS7elwjvu4TIyzDPO/oYD2E1ZKDhz3PGmTzvNj9LEgLaA==}
@@ -7435,8 +7620,8 @@ packages:
wordwrap@1.0.0:
resolution: {integrity: sha512-gvVzJFlPycKc5dZN4yPkP8w7Dc37BtP1yczEneOb4uq34pXZcvrtRTmWV8W+Ume+XCxKgbjM+nevkyFPMybd4Q==}
- workerd@1.20250924.0:
- resolution: {integrity: sha512-ovO2vwRCcMOlOm3bNwQQrVb8KDcewE/3rjfbZAYSF535BQQDUZ9dE1kyGBYlGx4W5udH3kqmOr+0YqTBLlycyA==}
+ workerd@1.20250927.0:
+ resolution: {integrity: sha512-6kyAGPGYNvn5mbpCJJ48VebN7QGSrvU/WJXgd4EQz20PyqjJAxHcEGGAJ+0Da0u/ewrN1+6fuMKQ1ALLBPiTWg==}
engines: {node: '>=16'}
hasBin: true
@@ -7498,6 +7683,11 @@ packages:
resolution: {integrity: sha512-YgvUTfwqyc7UXVMrB+SImsVYSmTS8X/tSrtdNZMImM+n7+QTriRXyXim0mBrTXNeqzVF0KWGgHPeiyViFFrNDw==}
engines: {node: '>=18'}
+ yaml@2.7.0:
+ resolution: {integrity: sha512-+hSoy/QHluxmC9kCIJyL/uyFmLmc+e5CFR5Wa+bpIhIj85LVb9ZH2nVnqrHoSvKogwODv0ClqZkmiSSaIH5LTA==}
+ engines: {node: '>= 14'}
+ hasBin: true
+
yaml@2.8.1:
resolution: {integrity: sha512-lcYcMxX2PO9XMGvAJkJ3OsNMw+/7FKes7/hgerGUYWIoWu5j/+YQqcZr5JnPZWzOsEBgMbSbiSTn/dv/69Mkpw==}
engines: {node: '>= 14.6'}
@@ -7553,6 +7743,8 @@ snapshots:
js-tokens: 4.0.0
picocolors: 1.1.1
+ '@babel/compat-data@7.27.7': {}
+
'@babel/compat-data@7.28.0': {}
'@babel/core@7.28.4':
@@ -7575,10 +7767,18 @@ snapshots:
transitivePeerDependencies:
- supports-color
+ '@babel/generator@7.27.5':
+ dependencies:
+ '@babel/parser': 7.28.4
+ '@babel/types': 7.28.2
+ '@jridgewell/gen-mapping': 0.3.12
+ '@jridgewell/trace-mapping': 0.3.31
+ jsesc: 3.1.0
+
'@babel/generator@7.28.0':
dependencies:
'@babel/parser': 7.28.4
- '@babel/types': 7.28.4
+ '@babel/types': 7.28.2
'@jridgewell/gen-mapping': 0.3.12
'@jridgewell/trace-mapping': 0.3.31
jsesc: 3.1.0
@@ -7593,11 +7793,11 @@ snapshots:
'@babel/helper-annotate-as-pure@7.27.3':
dependencies:
- '@babel/types': 7.28.4
+ '@babel/types': 7.28.2
'@babel/helper-compilation-targets@7.27.2':
dependencies:
- '@babel/compat-data': 7.28.0
+ '@babel/compat-data': 7.27.7
'@babel/helper-validator-option': 7.27.1
browserslist: 4.26.2
lru-cache: 5.1.1
@@ -7652,14 +7852,14 @@ snapshots:
'@babel/helper-member-expression-to-functions@7.27.1':
dependencies:
'@babel/traverse': 7.28.3
- '@babel/types': 7.28.4
+ '@babel/types': 7.28.2
transitivePeerDependencies:
- supports-color
'@babel/helper-module-imports@7.27.1':
dependencies:
- '@babel/traverse': 7.28.0
- '@babel/types': 7.28.4
+ '@babel/traverse': 7.27.7
+ '@babel/types': 7.27.7
transitivePeerDependencies:
- supports-color
@@ -7668,7 +7868,7 @@ snapshots:
'@babel/core': 7.28.4
'@babel/helper-module-imports': 7.27.1
'@babel/helper-validator-identifier': 7.27.1
- '@babel/traverse': 7.28.0
+ '@babel/traverse': 7.27.7
transitivePeerDependencies:
- supports-color
@@ -7683,7 +7883,7 @@ snapshots:
'@babel/helper-optimise-call-expression@7.27.1':
dependencies:
- '@babel/types': 7.28.4
+ '@babel/types': 7.28.2
'@babel/helper-plugin-utils@7.27.1': {}
@@ -7708,7 +7908,7 @@ snapshots:
'@babel/helper-skip-transparent-expression-wrappers@7.27.1':
dependencies:
'@babel/traverse': 7.28.0
- '@babel/types': 7.28.4
+ '@babel/types': 7.28.2
transitivePeerDependencies:
- supports-color
@@ -7722,7 +7922,7 @@ snapshots:
dependencies:
'@babel/template': 7.27.2
'@babel/traverse': 7.28.0
- '@babel/types': 7.28.4
+ '@babel/types': 7.28.2
transitivePeerDependencies:
- supports-color
@@ -7731,9 +7931,9 @@ snapshots:
'@babel/template': 7.27.2
'@babel/types': 7.28.4
- '@babel/parser@7.28.0':
+ '@babel/parser@7.27.5':
dependencies:
- '@babel/types': 7.28.2
+ '@babel/types': 7.27.7
'@babel/parser@7.28.4':
dependencies:
@@ -7968,7 +8168,7 @@ snapshots:
'@babel/helper-module-transforms': 7.27.3(@babel/core@7.28.4)
'@babel/helper-plugin-utils': 7.27.1
'@babel/helper-validator-identifier': 7.27.1
- '@babel/traverse': 7.28.0
+ '@babel/traverse': 7.27.7
transitivePeerDependencies:
- supports-color
@@ -8198,7 +8398,7 @@ snapshots:
babel-plugin-polyfill-corejs2: 0.4.14(@babel/core@7.28.4)
babel-plugin-polyfill-corejs3: 0.13.0(@babel/core@7.28.4)
babel-plugin-polyfill-regenerator: 0.6.5(@babel/core@7.28.4)
- core-js-compat: 3.44.0
+ core-js-compat: 3.43.0
semver: 6.3.1
transitivePeerDependencies:
- supports-color
@@ -8218,6 +8418,18 @@ snapshots:
'@babel/parser': 7.28.4
'@babel/types': 7.28.2
+ '@babel/traverse@7.27.7':
+ dependencies:
+ '@babel/code-frame': 7.27.1
+ '@babel/generator': 7.27.5
+ '@babel/parser': 7.28.4
+ '@babel/template': 7.27.2
+ '@babel/types': 7.27.7
+ debug: 4.4.3
+ globals: 11.12.0
+ transitivePeerDependencies:
+ - supports-color
+
'@babel/traverse@7.28.0':
dependencies:
'@babel/code-frame': 7.27.1
@@ -8237,7 +8449,7 @@ snapshots:
'@babel/helper-globals': 7.28.0
'@babel/parser': 7.28.4
'@babel/template': 7.27.2
- '@babel/types': 7.28.4
+ '@babel/types': 7.28.2
debug: 4.4.3
transitivePeerDependencies:
- supports-color
@@ -8254,6 +8466,16 @@ snapshots:
transitivePeerDependencies:
- supports-color
+ '@babel/types@7.27.6':
+ dependencies:
+ '@babel/helper-string-parser': 7.27.1
+ '@babel/helper-validator-identifier': 7.27.1
+
+ '@babel/types@7.27.7':
+ dependencies:
+ '@babel/helper-string-parser': 7.27.1
+ '@babel/helper-validator-identifier': 7.27.1
+
'@babel/types@7.28.2':
dependencies:
'@babel/helper-string-parser': 7.27.1
@@ -8277,19 +8499,19 @@ snapshots:
picocolors: 1.1.1
sisteransi: 1.0.5
- '@cloudflare/workerd-darwin-64@1.20250924.0':
+ '@cloudflare/workerd-darwin-64@1.20250927.0':
optional: true
- '@cloudflare/workerd-darwin-arm64@1.20250924.0':
+ '@cloudflare/workerd-darwin-arm64@1.20250927.0':
optional: true
- '@cloudflare/workerd-linux-64@1.20250924.0':
+ '@cloudflare/workerd-linux-64@1.20250927.0':
optional: true
- '@cloudflare/workerd-linux-arm64@1.20250924.0':
+ '@cloudflare/workerd-linux-arm64@1.20250927.0':
optional: true
- '@cloudflare/workerd-windows-64@1.20250924.0':
+ '@cloudflare/workerd-windows-64@1.20250927.0':
optional: true
'@conventional-changelog/git-client@2.5.1(conventional-commits-filter@5.0.0)(conventional-commits-parser@6.1.0)':
@@ -8305,9 +8527,15 @@ snapshots:
dependencies:
'@jridgewell/trace-mapping': 0.3.9
- '@docsearch/css@4.0.0-beta.7': {}
+ '@docsearch/css@4.0.0-beta.8': {}
+
+ '@docsearch/js@4.0.0-beta.8': {}
- '@docsearch/js@4.0.0-beta.7': {}
+ '@emnapi/core@1.4.3':
+ dependencies:
+ '@emnapi/wasi-threads': 1.0.2
+ tslib: 2.8.1
+ optional: true
'@emnapi/core@1.4.5':
dependencies:
@@ -8321,6 +8549,11 @@ snapshots:
tslib: 2.8.1
optional: true
+ '@emnapi/runtime@1.4.3':
+ dependencies:
+ tslib: 2.8.1
+ optional: true
+
'@emnapi/runtime@1.4.5':
dependencies:
tslib: 2.8.1
@@ -8331,6 +8564,11 @@ snapshots:
tslib: 2.8.1
optional: true
+ '@emnapi/wasi-threads@1.0.2':
+ dependencies:
+ tslib: 2.8.1
+ optional: true
+
'@emnapi/wasi-threads@1.0.4':
dependencies:
tslib: 2.8.1
@@ -8421,7 +8659,7 @@ snapshots:
eslint: 9.36.0(jiti@2.5.1)
eslint-visitor-keys: 3.4.3
- '@eslint-community/eslint-utils@4.8.0(eslint@9.36.0(jiti@2.5.1))':
+ '@eslint-community/eslint-utils@4.9.0(eslint@9.36.0(jiti@2.5.1))':
dependencies:
eslint: 9.36.0(jiti@2.5.1)
eslint-visitor-keys: 3.4.3
@@ -8611,7 +8849,13 @@ snapshots:
'@jridgewell/gen-mapping@0.3.12':
dependencies:
- '@jridgewell/sourcemap-codec': 1.5.5
+ '@jridgewell/sourcemap-codec': 1.5.0
+ '@jridgewell/trace-mapping': 0.3.31
+
+ '@jridgewell/gen-mapping@0.3.8':
+ dependencies:
+ '@jridgewell/set-array': 1.2.1
+ '@jridgewell/sourcemap-codec': 1.5.0
'@jridgewell/trace-mapping': 0.3.31
'@jridgewell/remapping@2.3.5':
@@ -8621,6 +8865,8 @@ snapshots:
'@jridgewell/resolve-uri@3.1.2': {}
+ '@jridgewell/set-array@1.2.1': {}
+
'@jridgewell/source-map@0.3.6':
dependencies:
'@jridgewell/gen-mapping': 0.3.12
@@ -8641,13 +8887,27 @@ snapshots:
'@jridgewell/sourcemap-codec': 1.5.5
'@napi-rs/wasm-runtime@0.2.11':
+ dependencies:
+ '@emnapi/core': 1.4.3
+ '@emnapi/runtime': 1.4.3
+ '@tybys/wasm-util': 0.9.0
+ optional: true
+
+ '@napi-rs/wasm-runtime@0.2.9':
+ dependencies:
+ '@emnapi/core': 1.4.3
+ '@emnapi/runtime': 1.4.3
+ '@tybys/wasm-util': 0.9.0
+ optional: true
+
+ '@napi-rs/wasm-runtime@1.0.3':
dependencies:
'@emnapi/core': 1.4.5
'@emnapi/runtime': 1.4.5
- '@tybys/wasm-util': 0.9.0
+ '@tybys/wasm-util': 0.10.0
optional: true
- '@napi-rs/wasm-runtime@1.0.5':
+ '@napi-rs/wasm-runtime@1.0.6':
dependencies:
'@emnapi/core': 1.5.0
'@emnapi/runtime': 1.5.0
@@ -8686,7 +8946,7 @@ snapshots:
'@node-rs/bcrypt-wasm32-wasi@1.10.7':
dependencies:
- '@napi-rs/wasm-runtime': 0.2.11
+ '@napi-rs/wasm-runtime': 0.2.9
optional: true
'@node-rs/bcrypt-win32-arm64-msvc@1.10.7':
@@ -8727,9 +8987,56 @@ snapshots:
'@nodelib/fs.scandir': 2.1.5
fastq: 1.19.0
- '@oxc-project/types@0.90.0': {}
+ '@oxc-minify/binding-android-arm64@0.87.0':
+ optional: true
+
+ '@oxc-minify/binding-darwin-arm64@0.87.0':
+ optional: true
+
+ '@oxc-minify/binding-darwin-x64@0.87.0':
+ optional: true
+
+ '@oxc-minify/binding-freebsd-x64@0.87.0':
+ optional: true
+
+ '@oxc-minify/binding-linux-arm-gnueabihf@0.87.0':
+ optional: true
+
+ '@oxc-minify/binding-linux-arm-musleabihf@0.87.0':
+ optional: true
+
+ '@oxc-minify/binding-linux-arm64-gnu@0.87.0':
+ optional: true
+
+ '@oxc-minify/binding-linux-arm64-musl@0.87.0':
+ optional: true
+
+ '@oxc-minify/binding-linux-riscv64-gnu@0.87.0':
+ optional: true
+
+ '@oxc-minify/binding-linux-s390x-gnu@0.87.0':
+ optional: true
+
+ '@oxc-minify/binding-linux-x64-gnu@0.87.0':
+ optional: true
- '@oxc-project/types@0.93.0': {}
+ '@oxc-minify/binding-linux-x64-musl@0.87.0':
+ optional: true
+
+ '@oxc-minify/binding-wasm32-wasi@0.87.0':
+ dependencies:
+ '@napi-rs/wasm-runtime': 1.0.3
+ optional: true
+
+ '@oxc-minify/binding-win32-arm64-msvc@0.87.0':
+ optional: true
+
+ '@oxc-minify/binding-win32-x64-msvc@0.87.0':
+ optional: true
+
+ '@oxc-project/runtime@0.92.0': {}
+
+ '@oxc-project/types@0.94.0': {}
'@parcel/watcher-android-arm64@2.5.1':
optional: true
@@ -8817,53 +9124,53 @@ snapshots:
dependencies:
quansync: 0.2.11
- '@rolldown/binding-android-arm64@1.0.0-beta.41':
+ '@rolldown/binding-android-arm64@1.0.0-beta.42':
optional: true
- '@rolldown/binding-darwin-arm64@1.0.0-beta.41':
+ '@rolldown/binding-darwin-arm64@1.0.0-beta.42':
optional: true
- '@rolldown/binding-darwin-x64@1.0.0-beta.41':
+ '@rolldown/binding-darwin-x64@1.0.0-beta.42':
optional: true
- '@rolldown/binding-freebsd-x64@1.0.0-beta.41':
+ '@rolldown/binding-freebsd-x64@1.0.0-beta.42':
optional: true
- '@rolldown/binding-linux-arm-gnueabihf@1.0.0-beta.41':
+ '@rolldown/binding-linux-arm-gnueabihf@1.0.0-beta.42':
optional: true
- '@rolldown/binding-linux-arm64-gnu@1.0.0-beta.41':
+ '@rolldown/binding-linux-arm64-gnu@1.0.0-beta.42':
optional: true
- '@rolldown/binding-linux-arm64-musl@1.0.0-beta.41':
+ '@rolldown/binding-linux-arm64-musl@1.0.0-beta.42':
optional: true
- '@rolldown/binding-linux-x64-gnu@1.0.0-beta.41':
+ '@rolldown/binding-linux-x64-gnu@1.0.0-beta.42':
optional: true
- '@rolldown/binding-linux-x64-musl@1.0.0-beta.41':
+ '@rolldown/binding-linux-x64-musl@1.0.0-beta.42':
optional: true
- '@rolldown/binding-openharmony-arm64@1.0.0-beta.41':
+ '@rolldown/binding-openharmony-arm64@1.0.0-beta.42':
optional: true
- '@rolldown/binding-wasm32-wasi@1.0.0-beta.41':
+ '@rolldown/binding-wasm32-wasi@1.0.0-beta.42':
dependencies:
- '@napi-rs/wasm-runtime': 1.0.5
+ '@napi-rs/wasm-runtime': 1.0.6
optional: true
- '@rolldown/binding-win32-arm64-msvc@1.0.0-beta.41':
+ '@rolldown/binding-win32-arm64-msvc@1.0.0-beta.42':
optional: true
- '@rolldown/binding-win32-ia32-msvc@1.0.0-beta.41':
+ '@rolldown/binding-win32-ia32-msvc@1.0.0-beta.42':
optional: true
- '@rolldown/binding-win32-x64-msvc@1.0.0-beta.41':
+ '@rolldown/binding-win32-x64-msvc@1.0.0-beta.42':
optional: true
'@rolldown/pluginutils@1.0.0-beta.29': {}
- '@rolldown/pluginutils@1.0.0-beta.41': {}
+ '@rolldown/pluginutils@1.0.0-beta.42': {}
'@rollup/plugin-alias@5.1.1(rollup@4.43.0)':
optionalDependencies:
@@ -9062,11 +9369,11 @@ snapshots:
'@simple-libs/child-process-utils@1.0.1':
dependencies:
'@simple-libs/stream-utils': 1.1.0
- '@types/node': 22.18.7
+ '@types/node': 22.18.8
'@simple-libs/stream-utils@1.1.0':
dependencies:
- '@types/node': 22.18.7
+ '@types/node': 22.18.8
'@sindresorhus/is@7.0.2': {}
@@ -9153,6 +9460,11 @@ snapshots:
tailwindcss: 4.1.13
vite: link:packages/vite
+ '@tybys/wasm-util@0.10.0':
+ dependencies:
+ tslib: 2.8.1
+ optional: true
+
'@tybys/wasm-util@0.10.1':
dependencies:
tslib: 2.8.1
@@ -9167,31 +9479,31 @@ snapshots:
'@types/babel__core@7.20.5':
dependencies:
- '@babel/parser': 7.28.0
- '@babel/types': 7.28.2
+ '@babel/parser': 7.27.5
+ '@babel/types': 7.27.7
'@types/babel__generator': 7.6.8
'@types/babel__template': 7.4.4
'@types/babel__traverse': 7.20.6
'@types/babel__generator@7.6.8':
dependencies:
- '@babel/types': 7.28.2
+ '@babel/types': 7.27.7
'@types/babel__preset-env@7.10.0': {}
'@types/babel__template@7.4.4':
dependencies:
'@babel/parser': 7.28.4
- '@babel/types': 7.28.2
+ '@babel/types': 7.27.7
'@types/babel__traverse@7.20.6':
dependencies:
- '@babel/types': 7.28.2
+ '@babel/types': 7.27.7
'@types/body-parser@1.19.5':
dependencies:
'@types/connect': 3.4.38
- '@types/node': 22.18.7
+ '@types/node': 22.18.8
'@types/chai@5.2.2':
dependencies:
@@ -9199,13 +9511,13 @@ snapshots:
'@types/connect@3.4.38':
dependencies:
- '@types/node': 22.18.7
+ '@types/node': 22.18.8
'@types/convert-source-map@2.0.3': {}
'@types/cross-spawn@6.0.6':
dependencies:
- '@types/node': 22.18.7
+ '@types/node': 22.18.8
'@types/debug@4.1.12':
dependencies:
@@ -9215,17 +9527,19 @@ snapshots:
'@types/escape-html@1.0.4': {}
+ '@types/estree@1.0.6': {}
+
'@types/estree@1.0.7': {}
'@types/estree@1.0.8': {}
'@types/etag@1.8.4':
dependencies:
- '@types/node': 22.18.7
+ '@types/node': 22.18.8
'@types/express-serve-static-core@5.0.6':
dependencies:
- '@types/node': 22.18.7
+ '@types/node': 22.18.8
'@types/qs': 6.9.18
'@types/range-parser': 1.2.7
'@types/send': 0.17.4
@@ -9265,7 +9579,7 @@ snapshots:
'@types/ms@2.1.0': {}
- '@types/node@22.18.7':
+ '@types/node@22.18.8':
dependencies:
undici-types: 6.21.0
@@ -9279,28 +9593,28 @@ snapshots:
'@types/range-parser@1.2.7': {}
- '@types/react-dom@19.1.9(@types/react@19.1.16)':
+ '@types/react-dom@19.1.9(@types/react@19.2.0)':
dependencies:
- '@types/react': 19.1.16
+ '@types/react': 19.2.0
- '@types/react@19.1.16':
+ '@types/react@19.2.0':
dependencies:
csstype: 3.1.3
'@types/send@0.17.4':
dependencies:
'@types/mime': 1.3.5
- '@types/node': 22.18.7
+ '@types/node': 22.18.8
'@types/serve-static@1.15.7':
dependencies:
'@types/http-errors': 2.0.4
- '@types/node': 22.18.7
+ '@types/node': 22.18.8
'@types/send': 0.17.4
'@types/stylus@0.48.43':
dependencies:
- '@types/node': 22.18.7
+ '@types/node': 22.18.8
'@types/unist@3.0.3': {}
@@ -9308,7 +9622,7 @@ snapshots:
'@types/ws@8.18.1':
dependencies:
- '@types/node': 22.18.7
+ '@types/node': 22.18.8
'@typescript-eslint/eslint-plugin@8.45.0(@typescript-eslint/parser@8.45.0(eslint@9.36.0(jiti@2.5.1))(typescript@5.9.2))(eslint@9.36.0(jiti@2.5.1))(typescript@5.9.2)':
dependencies:
@@ -9369,7 +9683,7 @@ snapshots:
transitivePeerDependencies:
- supports-color
- '@typescript-eslint/types@8.39.1': {}
+ '@typescript-eslint/types@8.35.1': {}
'@typescript-eslint/types@8.45.0': {}
@@ -9391,7 +9705,7 @@ snapshots:
'@typescript-eslint/utils@8.45.0(eslint@9.36.0(jiti@2.5.1))(typescript@5.9.2)':
dependencies:
- '@eslint-community/eslint-utils': 4.8.0(eslint@9.36.0(jiti@2.5.1))
+ '@eslint-community/eslint-utils': 4.9.0(eslint@9.36.0(jiti@2.5.1))
'@typescript-eslint/scope-manager': 8.45.0
'@typescript-eslint/types': 8.45.0
'@typescript-eslint/typescript-estree': 8.45.0(typescript@5.9.2)
@@ -10007,8 +10321,6 @@ snapshots:
'@vue/shared@3.5.18': {}
- '@vue/shared@3.5.19': {}
-
'@vue/shared@3.5.21': {}
'@vue/shared@3.5.22': {}
@@ -10037,7 +10349,7 @@ snapshots:
accepts@2.0.0:
dependencies:
- mime-types: 3.0.1
+ mime-types: 3.0.0
negotiator: 1.0.0
acorn-jsx@5.3.2(acorn@8.15.0):
@@ -10077,8 +10389,6 @@ snapshots:
ansi-styles@6.2.1: {}
- ansis@4.1.0: {}
-
ansis@4.2.0: {}
any-promise@1.3.0: {}
@@ -10120,7 +10430,7 @@ snapshots:
autoprefixer@10.4.21(postcss@8.5.6):
dependencies:
browserslist: 4.26.2
- caniuse-lite: 1.0.30001734
+ caniuse-lite: 1.0.30001703
fraction.js: 4.3.7
normalize-range: 0.1.2
picocolors: 1.1.1
@@ -10129,7 +10439,7 @@ snapshots:
axios@1.12.2:
dependencies:
- follow-redirects: 1.15.11(debug@4.4.3)
+ follow-redirects: 1.15.9(debug@4.4.3)
form-data: 4.0.4
proxy-from-env: 1.1.0
transitivePeerDependencies:
@@ -10148,7 +10458,7 @@ snapshots:
dependencies:
'@babel/core': 7.28.4
'@babel/helper-define-polyfill-provider': 0.6.5(@babel/core@7.28.4)
- core-js-compat: 3.44.0
+ core-js-compat: 3.43.0
transitivePeerDependencies:
- supports-color
@@ -10161,15 +10471,15 @@ snapshots:
babel-walk@3.0.0-canary-5:
dependencies:
- '@babel/types': 7.28.4
+ '@babel/types': 7.28.2
bail@2.0.2: {}
balanced-match@1.0.2: {}
- baseline-browser-mapping@2.8.6: {}
+ baseline-browser-mapping@2.8.10: {}
- baseline-browser-mapping@2.8.9: {}
+ baseline-browser-mapping@2.8.6: {}
bignumber.js@9.3.1: {}
@@ -10217,7 +10527,7 @@ snapshots:
dependencies:
baseline-browser-mapping: 2.8.6
caniuse-lite: 1.0.30001741
- electron-to-chromium: 1.5.218
+ electron-to-chromium: 1.5.221
node-releases: 2.0.21
update-browserslist-db: 1.1.3(browserslist@4.26.2)
@@ -10241,13 +10551,13 @@ snapshots:
call-bound@1.0.3:
dependencies:
call-bind-apply-helpers: 1.0.2
- get-intrinsic: 1.3.0
+ get-intrinsic: 1.2.7
callsites@3.1.0: {}
camelcase-css@2.0.1: {}
- caniuse-lite@1.0.30001734: {}
+ caniuse-lite@1.0.30001703: {}
caniuse-lite@1.0.30001741: {}
@@ -10258,7 +10568,7 @@ snapshots:
assertion-error: 2.0.1
check-error: 2.1.1
deep-eql: 5.0.2
- loupe: 3.1.4
+ loupe: 3.1.3
pathval: 2.0.0
chalk@4.1.2:
@@ -10378,7 +10688,7 @@ snapshots:
constantinople@4.0.1:
dependencies:
'@babel/parser': 7.28.4
- '@babel/types': 7.28.4
+ '@babel/types': 7.27.6
content-disposition@1.0.0:
dependencies:
@@ -10434,7 +10744,7 @@ snapshots:
dependencies:
is-what: 4.1.16
- core-js-compat@3.44.0:
+ core-js-compat@3.43.0:
dependencies:
browserslist: 4.26.2
@@ -10503,6 +10813,8 @@ snapshots:
dequal@2.0.3: {}
+ destroy@1.2.0: {}
+
detect-libc@1.0.3:
optional: true
@@ -10544,7 +10856,7 @@ snapshots:
ee-first@1.1.1: {}
- electron-to-chromium@1.5.218: {}
+ electron-to-chromium@1.5.221: {}
emoji-regex@10.4.0: {}
@@ -10589,7 +10901,7 @@ snapshots:
es-set-tostringtag@2.1.0:
dependencies:
es-errors: 1.3.0
- get-intrinsic: 1.3.0
+ get-intrinsic: 1.2.7
has-tostringtag: 1.0.2
hasown: 2.0.2
@@ -10661,20 +10973,20 @@ snapshots:
eslint-plugin-es-x@7.8.0(eslint@9.36.0(jiti@2.5.1)):
dependencies:
- '@eslint-community/eslint-utils': 4.8.0(eslint@9.36.0(jiti@2.5.1))
+ '@eslint-community/eslint-utils': 4.9.0(eslint@9.36.0(jiti@2.5.1))
'@eslint-community/regexpp': 4.12.1
eslint: 9.36.0(jiti@2.5.1)
eslint-compat-utils: 0.5.1(eslint@9.36.0(jiti@2.5.1))
eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.45.0(eslint@9.36.0(jiti@2.5.1))(typescript@5.9.2))(eslint@9.36.0(jiti@2.5.1)):
dependencies:
- '@typescript-eslint/types': 8.39.1
+ '@typescript-eslint/types': 8.35.1
comment-parser: 1.4.1
debug: 4.4.1
eslint: 9.36.0(jiti@2.5.1)
eslint-import-context: 0.1.9(unrs-resolver@1.9.2)
is-glob: 4.0.3
- minimatch: 10.0.3
+ minimatch: 10.0.1
semver: 7.7.2
stable-hash-x: 0.2.0
unrs-resolver: 1.9.2
@@ -10685,7 +10997,7 @@ snapshots:
eslint-plugin-n@17.23.1(eslint@9.36.0(jiti@2.5.1))(typescript@5.9.2):
dependencies:
- '@eslint-community/eslint-utils': 4.8.0(eslint@9.36.0(jiti@2.5.1))
+ '@eslint-community/eslint-utils': 4.9.0(eslint@9.36.0(jiti@2.5.1))
enhanced-resolve: 5.18.3
eslint: 9.36.0(jiti@2.5.1)
eslint-plugin-es-x: 7.8.0(eslint@9.36.0(jiti@2.5.1))
@@ -10720,7 +11032,7 @@ snapshots:
eslint@9.36.0(jiti@2.5.1):
dependencies:
- '@eslint-community/eslint-utils': 4.8.0(eslint@9.36.0(jiti@2.5.1))
+ '@eslint-community/eslint-utils': 4.9.0(eslint@9.36.0(jiti@2.5.1))
'@eslint-community/regexpp': 4.12.1
'@eslint/config-array': 0.21.0
'@eslint/config-helpers': 0.3.1
@@ -10789,7 +11101,7 @@ snapshots:
estree-walker@3.0.3:
dependencies:
- '@types/estree': 1.0.8
+ '@types/estree': 1.0.6
esutils@2.0.3: {}
@@ -10849,7 +11161,7 @@ snapshots:
fresh: 2.0.0
http-errors: 2.0.0
merge-descriptors: 2.0.0
- mime-types: 3.0.1
+ mime-types: 3.0.0
on-finished: 2.4.1
once: 1.4.0
parseurl: 1.3.3
@@ -10857,7 +11169,7 @@ snapshots:
qs: 6.14.0
range-parser: 1.2.1
router: 2.2.0
- send: 1.2.0
+ send: 1.1.0
serve-static: 2.2.0
statuses: 2.0.1
type-is: 2.0.1
@@ -10973,7 +11285,7 @@ snapshots:
dependencies:
tabbable: 6.2.0
- follow-redirects@1.15.11(debug@4.4.3):
+ follow-redirects@1.15.9(debug@4.4.3):
optionalDependencies:
debug: 4.4.3
@@ -10996,6 +11308,8 @@ snapshots:
fraction.js@4.3.7: {}
+ fresh@0.5.2: {}
+
fresh@2.0.0: {}
fsevents@2.3.3:
@@ -11013,7 +11327,7 @@ snapshots:
get-east-asian-width@1.3.0: {}
- get-intrinsic@1.3.0:
+ get-intrinsic@1.2.7:
dependencies:
call-bind-apply-helpers: 1.0.2
es-define-property: 1.0.1
@@ -11063,6 +11377,8 @@ snapshots:
package-json-from-dist: 1.0.1
path-scurry: 1.11.1
+ globals@11.12.0: {}
+
globals@14.0.0: {}
globals@15.15.0: {}
@@ -11152,7 +11468,7 @@ snapshots:
http-proxy-3@1.21.1:
dependencies:
debug: 4.4.3
- follow-redirects: 1.15.11(debug@4.4.3)
+ follow-redirects: 1.15.9(debug@4.4.3)
transitivePeerDependencies:
- supports-color
@@ -11482,7 +11798,7 @@ snapshots:
dependencies:
mlly: 1.8.0
pkg-types: 2.2.0
- quansync: 0.2.11
+ quansync: 0.2.10
locate-path@6.0.0:
dependencies:
@@ -11510,6 +11826,8 @@ snapshots:
longest-streak@3.1.0: {}
+ loupe@3.1.3: {}
+
loupe@3.1.4: {}
lru-cache@10.4.3: {}
@@ -11850,12 +12168,18 @@ snapshots:
mime-db@1.52.0: {}
+ mime-db@1.53.0: {}
+
mime-db@1.54.0: {}
mime-types@2.1.35:
dependencies:
mime-db: 1.52.0
+ mime-types@3.0.0:
+ dependencies:
+ mime-db: 1.53.0
+
mime-types@3.0.1:
dependencies:
mime-db: 1.54.0
@@ -11867,7 +12191,7 @@ snapshots:
mimic-function@5.0.1: {}
- miniflare@4.20250924.0:
+ miniflare@4.20250927.0:
dependencies:
'@cspotcode/source-map-support': 0.8.1
acorn: 8.14.0
@@ -11877,7 +12201,7 @@ snapshots:
sharp: 0.33.5
stoppable: 1.1.0
undici: 7.14.0
- workerd: 1.20250924.0
+ workerd: 1.20250927.0
ws: 8.18.0
youch: 4.1.0-beta.10
zod: 3.22.3
@@ -11885,6 +12209,10 @@ snapshots:
- bufferutil
- utf-8-validate
+ minimatch@10.0.1:
+ dependencies:
+ brace-expansion: 2.0.2
+
minimatch@10.0.3:
dependencies:
'@isaacs/brace-expansion': 5.0.0
@@ -11942,7 +12270,7 @@ snapshots:
nanoid@5.1.6: {}
- napi-postinstall@0.2.5: {}
+ napi-postinstall@0.2.4: {}
natural-compare@1.4.0: {}
@@ -12040,6 +12368,24 @@ snapshots:
type-check: 0.4.0
word-wrap: 1.2.5
+ oxc-minify@0.87.0:
+ optionalDependencies:
+ '@oxc-minify/binding-android-arm64': 0.87.0
+ '@oxc-minify/binding-darwin-arm64': 0.87.0
+ '@oxc-minify/binding-darwin-x64': 0.87.0
+ '@oxc-minify/binding-freebsd-x64': 0.87.0
+ '@oxc-minify/binding-linux-arm-gnueabihf': 0.87.0
+ '@oxc-minify/binding-linux-arm-musleabihf': 0.87.0
+ '@oxc-minify/binding-linux-arm64-gnu': 0.87.0
+ '@oxc-minify/binding-linux-arm64-musl': 0.87.0
+ '@oxc-minify/binding-linux-riscv64-gnu': 0.87.0
+ '@oxc-minify/binding-linux-s390x-gnu': 0.87.0
+ '@oxc-minify/binding-linux-x64-gnu': 0.87.0
+ '@oxc-minify/binding-linux-x64-musl': 0.87.0
+ '@oxc-minify/binding-wasm32-wasi': 0.87.0
+ '@oxc-minify/binding-win32-arm64-msvc': 0.87.0
+ '@oxc-minify/binding-win32-x64-msvc': 0.87.0
+
p-limit@3.1.0:
dependencies:
yocto-queue: 0.1.0
@@ -12093,7 +12439,7 @@ snapshots:
periscopic@4.0.2:
dependencies:
- '@types/estree': 1.0.8
+ '@types/estree': 1.0.6
is-reference: 3.0.3
zimmerframe: 1.1.2
@@ -12103,6 +12449,8 @@ snapshots:
picomatch@2.3.1: {}
+ picomatch@4.0.2: {}
+
picomatch@4.0.3: {}
pidtree@0.6.0: {}
@@ -12154,7 +12502,7 @@ snapshots:
postcss-load-config@4.0.2(postcss@8.5.6):
dependencies:
lilconfig: 3.1.3
- yaml: 2.8.1
+ yaml: 2.7.0
optionalDependencies:
postcss: 8.5.6
@@ -12345,6 +12693,8 @@ snapshots:
dependencies:
side-channel: 1.1.0
+ quansync@0.2.10: {}
+
quansync@0.2.11: {}
queue-microtask@1.2.3: {}
@@ -12473,7 +12823,7 @@ snapshots:
rfdc@1.4.1: {}
- rolldown-plugin-dts@0.16.11(rolldown@1.0.0-beta.41)(typescript@5.9.2)(vue-tsc@3.1.0(typescript@5.9.2)):
+ rolldown-plugin-dts@0.16.11(rolldown@1.0.0-beta.42)(typescript@5.9.2)(vue-tsc@3.1.0(typescript@5.9.2)):
dependencies:
'@babel/generator': 7.28.3
'@babel/parser': 7.28.4
@@ -12484,7 +12834,7 @@ snapshots:
dts-resolver: 2.1.2
get-tsconfig: 4.10.1
magic-string: 0.30.19
- rolldown: 1.0.0-beta.41
+ rolldown: 1.0.0-beta.42
optionalDependencies:
typescript: 5.9.2
vue-tsc: 3.1.0(typescript@5.9.2)
@@ -12492,26 +12842,26 @@ snapshots:
- oxc-resolver
- supports-color
- rolldown@1.0.0-beta.41:
+ rolldown@1.0.0-beta.42:
dependencies:
- '@oxc-project/types': 0.93.0
- '@rolldown/pluginutils': 1.0.0-beta.41
+ '@oxc-project/types': 0.94.0
+ '@rolldown/pluginutils': 1.0.0-beta.42
ansis: 4.2.0
optionalDependencies:
- '@rolldown/binding-android-arm64': 1.0.0-beta.41
- '@rolldown/binding-darwin-arm64': 1.0.0-beta.41
- '@rolldown/binding-darwin-x64': 1.0.0-beta.41
- '@rolldown/binding-freebsd-x64': 1.0.0-beta.41
- '@rolldown/binding-linux-arm-gnueabihf': 1.0.0-beta.41
- '@rolldown/binding-linux-arm64-gnu': 1.0.0-beta.41
- '@rolldown/binding-linux-arm64-musl': 1.0.0-beta.41
- '@rolldown/binding-linux-x64-gnu': 1.0.0-beta.41
- '@rolldown/binding-linux-x64-musl': 1.0.0-beta.41
- '@rolldown/binding-openharmony-arm64': 1.0.0-beta.41
- '@rolldown/binding-wasm32-wasi': 1.0.0-beta.41
- '@rolldown/binding-win32-arm64-msvc': 1.0.0-beta.41
- '@rolldown/binding-win32-ia32-msvc': 1.0.0-beta.41
- '@rolldown/binding-win32-x64-msvc': 1.0.0-beta.41
+ '@rolldown/binding-android-arm64': 1.0.0-beta.42
+ '@rolldown/binding-darwin-arm64': 1.0.0-beta.42
+ '@rolldown/binding-darwin-x64': 1.0.0-beta.42
+ '@rolldown/binding-freebsd-x64': 1.0.0-beta.42
+ '@rolldown/binding-linux-arm-gnueabihf': 1.0.0-beta.42
+ '@rolldown/binding-linux-arm64-gnu': 1.0.0-beta.42
+ '@rolldown/binding-linux-arm64-musl': 1.0.0-beta.42
+ '@rolldown/binding-linux-x64-gnu': 1.0.0-beta.42
+ '@rolldown/binding-linux-x64-musl': 1.0.0-beta.42
+ '@rolldown/binding-openharmony-arm64': 1.0.0-beta.42
+ '@rolldown/binding-wasm32-wasi': 1.0.0-beta.42
+ '@rolldown/binding-win32-arm64-msvc': 1.0.0-beta.42
+ '@rolldown/binding-win32-ia32-msvc': 1.0.0-beta.42
+ '@rolldown/binding-win32-x64-msvc': 1.0.0-beta.42
rollup-plugin-license@3.6.0(picomatch@4.0.3)(rollup@4.43.0):
dependencies:
@@ -12702,6 +13052,23 @@ snapshots:
semver@7.7.2: {}
+ send@1.1.0:
+ dependencies:
+ debug: 4.4.3
+ destroy: 1.2.0
+ encodeurl: 2.0.0
+ escape-html: 1.0.3
+ etag: 1.8.1
+ fresh: 0.5.2
+ http-errors: 2.0.0
+ mime-types: 2.1.35
+ ms: 2.1.3
+ on-finished: 2.4.1
+ range-parser: 1.2.1
+ statuses: 2.0.1
+ transitivePeerDependencies:
+ - supports-color
+
send@1.2.0:
dependencies:
debug: 4.4.3
@@ -12796,14 +13163,14 @@ snapshots:
dependencies:
call-bound: 1.0.3
es-errors: 1.3.0
- get-intrinsic: 1.3.0
+ get-intrinsic: 1.2.7
object-inspect: 1.13.4
side-channel-weakmap@1.0.2:
dependencies:
call-bound: 1.0.3
es-errors: 1.3.0
- get-intrinsic: 1.3.0
+ get-intrinsic: 1.2.7
object-inspect: 1.13.4
side-channel-map: 1.0.1
@@ -12967,7 +13334,7 @@ snapshots:
sucrase@3.35.0:
dependencies:
- '@jridgewell/gen-mapping': 0.3.12
+ '@jridgewell/gen-mapping': 0.3.8
commander: 4.1.1
glob: 10.4.5
lines-and-columns: 1.2.4
@@ -13127,17 +13494,17 @@ snapshots:
optionalDependencies:
typescript: 5.9.2
- tsdown@0.15.5(publint@0.3.12)(typescript@5.9.2)(vue-tsc@3.1.0(typescript@5.9.2)):
+ tsdown@0.15.6(publint@0.3.12)(typescript@5.9.2)(vue-tsc@3.1.0(typescript@5.9.2)):
dependencies:
- ansis: 4.1.0
+ ansis: 4.2.0
cac: 6.7.14
chokidar: 4.0.3
debug: 4.4.3
diff: 8.0.2
empathic: 2.0.0
hookable: 5.5.3
- rolldown: 1.0.0-beta.41
- rolldown-plugin-dts: 0.16.11(rolldown@1.0.0-beta.41)(typescript@5.9.2)(vue-tsc@3.1.0(typescript@5.9.2))
+ rolldown: 1.0.0-beta.42
+ rolldown-plugin-dts: 0.16.11(rolldown@1.0.0-beta.42)(typescript@5.9.2)(vue-tsc@3.1.0(typescript@5.9.2))
semver: 7.7.2
tinyexec: 1.0.1
tinyglobby: 0.2.15
@@ -13189,7 +13556,7 @@ snapshots:
dependencies:
content-type: 1.0.5
media-typer: 1.1.0
- mime-types: 3.0.1
+ mime-types: 3.0.0
type@2.7.3: {}
@@ -13280,7 +13647,7 @@ snapshots:
unrs-resolver@1.9.2:
dependencies:
- napi-postinstall: 0.2.5
+ napi-postinstall: 0.2.4
optionalDependencies:
'@unrs/resolver-binding-android-arm-eabi': 1.9.2
'@unrs/resolver-binding-android-arm64': 1.9.2
@@ -13378,10 +13745,10 @@ snapshots:
transitivePeerDependencies:
- supports-color
- vitepress@2.0.0-alpha.12(axios@1.12.2)(postcss@8.5.6)(typescript@5.9.2):
+ vitepress@2.0.0-alpha.12(axios@1.12.2)(oxc-minify@0.87.0)(postcss@8.5.6)(typescript@5.9.2):
dependencies:
- '@docsearch/css': 4.0.0-beta.7
- '@docsearch/js': 4.0.0-beta.7
+ '@docsearch/css': 4.0.0-beta.8
+ '@docsearch/js': 4.0.0-beta.8
'@iconify-json/simple-icons': 1.2.47
'@shikijs/core': 3.9.2
'@shikijs/transformers': 3.9.2
@@ -13389,7 +13756,7 @@ snapshots:
'@types/markdown-it': 14.1.2
'@vitejs/plugin-vue': 6.0.1(vite@packages+vite)(vue@3.5.22(typescript@5.9.2))
'@vue/devtools-api': 8.0.0
- '@vue/shared': 3.5.19
+ '@vue/shared': 3.5.21
'@vueuse/core': 13.6.0(vue@3.5.22(typescript@5.9.2))
'@vueuse/integrations': 13.6.0(axios@1.12.2)(focus-trap@7.6.5)(vue@3.5.22(typescript@5.9.2))
focus-trap: 7.6.5
@@ -13399,6 +13766,7 @@ snapshots:
vite: link:packages/vite
vue: 3.5.22(typescript@5.9.2)
optionalDependencies:
+ oxc-minify: 0.87.0
postcss: 8.5.6
transitivePeerDependencies:
- async-validator
@@ -13414,7 +13782,7 @@ snapshots:
- typescript
- universal-cookie
- vitest@3.2.4(@types/debug@4.1.12)(@types/node@22.18.7):
+ vitest@3.2.4(@types/debug@4.1.12)(@types/node@22.18.8):
dependencies:
'@types/chai': 5.2.2
'@vitest/expect': 3.2.4
@@ -13429,7 +13797,7 @@ snapshots:
expect-type: 1.2.1
magic-string: 0.30.17
pathe: 2.0.3
- picomatch: 4.0.3
+ picomatch: 4.0.2
std-env: 3.9.0
tinybench: 2.9.0
tinyexec: 0.3.2
@@ -13441,7 +13809,7 @@ snapshots:
why-is-node-running: 2.3.0
optionalDependencies:
'@types/debug': 4.1.12
- '@types/node': 22.18.7
+ '@types/node': 22.18.8
transitivePeerDependencies:
- msw
- supports-color
@@ -13516,7 +13884,7 @@ snapshots:
with@7.0.2:
dependencies:
'@babel/parser': 7.28.4
- '@babel/types': 7.28.4
+ '@babel/types': 7.27.6
assert-never: 1.4.0
babel-walk: 3.0.0-canary-5
@@ -13524,13 +13892,13 @@ snapshots:
wordwrap@1.0.0: {}
- workerd@1.20250924.0:
+ workerd@1.20250927.0:
optionalDependencies:
- '@cloudflare/workerd-darwin-64': 1.20250924.0
- '@cloudflare/workerd-darwin-arm64': 1.20250924.0
- '@cloudflare/workerd-linux-64': 1.20250924.0
- '@cloudflare/workerd-linux-arm64': 1.20250924.0
- '@cloudflare/workerd-windows-64': 1.20250924.0
+ '@cloudflare/workerd-darwin-64': 1.20250927.0
+ '@cloudflare/workerd-darwin-arm64': 1.20250927.0
+ '@cloudflare/workerd-linux-64': 1.20250927.0
+ '@cloudflare/workerd-linux-arm64': 1.20250927.0
+ '@cloudflare/workerd-windows-64': 1.20250927.0
wrap-ansi@7.0.0:
dependencies:
@@ -13570,6 +13938,8 @@ snapshots:
yallist@5.0.0: {}
+ yaml@2.7.0: {}
+
yaml@2.8.1: {}
yargs-parser@21.1.1: {}
diff --git a/pnpm-workspace.yaml b/pnpm-workspace.yaml
index e68f9e5e3f3f3b..df113bf5654520 100644
--- a/pnpm-workspace.yaml
+++ b/pnpm-workspace.yaml
@@ -12,7 +12,7 @@ shellEmulator: true
autoInstallPeers: false
dedupeInjectedDeps: false
overrides:
- vite: 'workspace:*'
+ vite: 'workspace:rolldown-vite@*'
patchedDependencies:
"sirv@3.0.2": "patches/sirv@3.0.2.patch"
"chokidar@3.6.0": "patches/chokidar@3.6.0.patch"
diff --git a/scripts/release.ts b/scripts/release.ts
index bdfc32bf224e79..6d3c2dba3bc4e9 100644
--- a/scripts/release.ts
+++ b/scripts/release.ts
@@ -9,7 +9,8 @@ release({
pkg === 'vite' ? `v${version}` : `${pkg}@${version}`,
logChangelog: (pkg) => logRecentCommits(pkg),
generateChangelog: async (pkgName) => {
- if (pkgName === 'create-vite') await updateTemplateVersions()
+ if (pkgName === 'create-vite' || pkgName === 'vite')
+ await updateTemplateVersions()
console.log(colors.cyan('\nGenerating changelog...'))
diff --git a/scripts/releaseUtils.ts b/scripts/releaseUtils.ts
index 6a7654960a753a..0b76d646989eb5 100644
--- a/scripts/releaseUtils.ts
+++ b/scripts/releaseUtils.ts
@@ -64,7 +64,7 @@ export async function updateTemplateVersions(): Promise {
for (const template of templates) {
const pkgPath = path.join(dir, template, `package.json`)
const pkg = JSON.parse(await fs.readFile(pkgPath, 'utf-8'))
- pkg.devDependencies.vite = `^` + viteVersion
+ pkg.devDependencies.vite = `npm:rolldown-vite@^` + viteVersion
await fs.writeFile(pkgPath, JSON.stringify(pkg, null, 2) + '\n')
}
}
diff --git a/vitest.config.e2e.ts b/vitest.config.e2e.ts
index a27e20eebd7bf2..336eee1d57ca44 100644
--- a/vitest.config.e2e.ts
+++ b/vitest.config.e2e.ts
@@ -1,5 +1,7 @@
import { resolve } from 'node:path'
-import { defineConfig } from 'vitest/config'
+import { defaultExclude, defineConfig } from 'vitest/config'
+
+const isBuild = !!process.env.VITE_TEST_BUILD
const timeout = process.env.PWDEBUG ? Infinity : process.env.CI ? 50000 : 30000
@@ -11,6 +13,14 @@ export default defineConfig({
},
test: {
include: ['./playground/**/*.spec.[tj]s'],
+ exclude: [
+ ...(isBuild
+ ? [
+ './playground/object-hooks/**/*.spec.[tj]s', // object hook sequential
+ ]
+ : []),
+ ...defaultExclude,
+ ],
setupFiles: ['./playground/vitestSetup.ts'],
globalSetup: ['./playground/vitestGlobalSetup.ts'],
testTimeout: timeout,