From e53210baa08cc082d59d55e5ca69e6f537bf55ff Mon Sep 17 00:00:00 2001 From: underfin Date: Fri, 9 May 2025 18:06:02 +0800 Subject: [PATCH 01/25] wip: full bundle mode compat --- package.json | 4 + packages/common/refresh-runtime.js | 5 +- packages/common/refresh-utils.ts | 2 +- packages/plugin-react/src/index.ts | 28 +-- pnpm-lock.yaml | 280 ++++++++++++++--------------- 5 files changed, 165 insertions(+), 154 deletions(-) diff --git a/package.json b/package.json index 4e5a1da38..05401e1c8 100644 --- a/package.json +++ b/package.json @@ -71,6 +71,10 @@ ] }, "pnpm": { + "overrides": { + "vitest>vite": "npm:vite@^6.2.6", + "vite": "https://pkg.pr.new/vitejs/rolldown-vite@107" + }, "packageExtensions": { "generouted": { "peerDependencies": { diff --git a/packages/common/refresh-runtime.js b/packages/common/refresh-runtime.js index 08d1df630..e28436354 100644 --- a/packages/common/refresh-runtime.js +++ b/packages/common/refresh-runtime.js @@ -632,8 +632,9 @@ function predicateOnExport(ignoredExports, moduleExports, predicate) { for (const key in moduleExports) { if (key === '__esModule') continue if (ignoredExports.includes(key)) continue - const desc = Object.getOwnPropertyDescriptor(moduleExports, key) - if (desc && desc.get) return key + // TODO: Not sure why need this. The esm module live binding always is getter, look like the browser is not. + // const desc = Object.getOwnPropertyDescriptor(moduleExports, key) + // if (desc && desc.get) return key if (!predicate(key, moduleExports[key])) return key } return true diff --git a/packages/common/refresh-utils.ts b/packages/common/refresh-utils.ts index 559cbaa04..5c7aeed4c 100644 --- a/packages/common/refresh-utils.ts +++ b/packages/common/refresh-utils.ts @@ -81,7 +81,7 @@ const inWebWorker = typeof WorkerGlobalScope !== 'undefined' && self instanceof newCode = `${sharedHead}${newCode} if (import.meta.hot && !inWebWorker) { - RefreshRuntime.__hmr_import(import.meta.url).then((currentExports) => { + import.meta.hot.getExports().then((currentExports) => { RefreshRuntime.registerExportsForReactRefresh(${JSON.stringify( id, )}, currentExports); diff --git a/packages/plugin-react/src/index.ts b/packages/plugin-react/src/index.ts index 250c4477e..2cfa6afb2 100644 --- a/packages/plugin-react/src/index.ts +++ b/packages/plugin-react/src/index.ts @@ -120,7 +120,7 @@ export default function viteReact(opts: Options = {}): PluginOption[] { | ((options: ReactBabelOptions, context: ReactBabelHookContext) => void) | undefined let staticBabelOptions: ReactBabelOptions | undefined - + let base: string | undefined // Support patterns like: // - import * as React from 'react'; // - import React from 'react'; @@ -162,6 +162,7 @@ export default function viteReact(opts: Options = {}): PluginOption[] { } }, configResolved(config) { + base = config.base projectRoot = config.root isProduction = config.isProduction skipFastRefresh = @@ -361,15 +362,22 @@ export default function viteReact(opts: Options = {}): PluginOption[] { } }, }, - transformIndexHtml(_, config) { - if (!skipFastRefresh) - return [ - { - tag: 'script', - attrs: { type: 'module' }, - children: getPreambleCode(config.server!.config.base), - }, - ] + transformIndexHtml: { + handler() { + if (!skipFastRefresh) + return [ + { + tag: 'script', + attrs: { type: 'module' }, + // !!! Rolldown vite full bunlde module break changes, config.server is invalid + // children: getPreambleCode(config.server!.config.base), + children: getPreambleCode(base!), + }, + ] + }, + // Rolldown vite full bunlde module break changes. + // Changed it to make sure the inject module could be bundled + order: 'pre', }, } diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index bb0724961..6cbb94423 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -4,11 +4,9 @@ settings: autoInstallPeers: false excludeLinksFromLockfile: false -catalogs: - rolldown-vite: - vite: - specifier: npm:rolldown-vite@^6.3.5 - version: 6.3.5 +overrides: + vitest>vite: npm:vite@^6.2.6 + vite: https://pkg.pr.new/vitejs/rolldown-vite@107 packageExtensionsChecksum: sha256-S82yCctxnlOTNFuHWCyTFRo/B6Y3jque/4DnsDO4WZA= @@ -71,17 +69,17 @@ importers: specifier: ^8.31.0 version: 8.31.0(eslint@9.25.1(jiti@2.4.2))(typescript@5.8.3) vite: - specifier: ^6.3.3 - version: 6.3.3(@types/node@22.15.2)(jiti@2.4.2)(lightningcss@1.29.3)(tsx@4.19.3)(yaml@2.7.1) + specifier: https://pkg.pr.new/vitejs/rolldown-vite@107 + version: rolldown-vite@https://pkg.pr.new/vitejs/rolldown-vite@107(@types/node@22.15.2)(esbuild@0.25.3)(jiti@2.4.2)(tsx@4.19.3)(yaml@2.7.1) vitest: specifier: ^3.1.2 - version: 3.1.2(@types/debug@4.1.12)(@types/node@22.15.2)(jiti@2.4.2)(lightningcss@1.29.3)(tsx@4.19.3)(yaml@2.7.1) + version: 3.1.2(@types/debug@4.1.12)(@types/node@22.15.2)(esbuild@0.25.3)(jiti@2.4.2)(lightningcss@1.29.3)(tsx@4.19.3)(yaml@2.7.1) packages/common: - devDependencies: + dependencies: vite: - specifier: ^6.3.3 - version: 6.3.3(@types/node@22.15.2)(jiti@2.4.2)(lightningcss@1.29.3)(tsx@4.19.3)(yaml@2.7.1) + specifier: https://pkg.pr.new/vitejs/rolldown-vite@107 + version: rolldown-vite@https://pkg.pr.new/vitejs/rolldown-vite@107(@types/node@22.15.2)(esbuild@0.25.3)(jiti@2.4.2)(tsx@4.19.3)(yaml@2.7.1) packages/plugin-react: dependencies: @@ -103,6 +101,9 @@ importers: react-refresh: specifier: ^0.17.0 version: 0.17.0 + vite: + specifier: https://pkg.pr.new/vitejs/rolldown-vite@107 + version: rolldown-vite@https://pkg.pr.new/vitejs/rolldown-vite@107(@types/node@22.15.2)(esbuild@0.25.3)(jiti@2.4.2)(tsx@4.19.3)(yaml@2.7.1) devDependencies: '@vitejs/react-common': specifier: workspace:* @@ -116,6 +117,9 @@ importers: '@rolldown/pluginutils': specifier: 1.0.0-beta.9 version: 1.0.0-beta.9 + vite: + specifier: https://pkg.pr.new/vitejs/rolldown-vite@107 + version: rolldown-vite@https://pkg.pr.new/vitejs/rolldown-vite@107(@types/node@22.15.2)(esbuild@0.25.3)(jiti@2.4.2)(tsx@4.19.3)(yaml@2.7.1) devDependencies: '@vitejs/react-common': specifier: workspace:* @@ -123,9 +127,6 @@ importers: unbuild: specifier: ^3.5.0 version: 3.5.0(typescript@5.8.3) - vite: - specifier: catalog:rolldown-vite - version: rolldown-vite@6.3.5(@types/node@22.15.2)(esbuild@0.25.3)(jiti@2.4.2)(tsx@4.19.3)(typescript@5.8.3)(yaml@2.7.1) packages/plugin-react-swc: dependencies: @@ -135,6 +136,9 @@ importers: '@swc/core': specifier: ^1.11.22 version: 1.11.22 + vite: + specifier: https://pkg.pr.new/vitejs/rolldown-vite@107 + version: rolldown-vite@https://pkg.pr.new/vitejs/rolldown-vite@107(@types/node@22.15.2)(esbuild@0.25.3)(jiti@2.4.2)(tsx@4.19.3)(yaml@2.7.1) devDependencies: '@playwright/test': specifier: ^1.52.0 @@ -163,9 +167,6 @@ importers: typescript: specifier: ^5.8.3 version: 5.8.3 - vite: - specifier: ^6.3.3 - version: 6.3.3(@types/node@22.15.2)(jiti@2.4.2)(lightningcss@1.29.3)(tsx@4.19.3)(yaml@2.7.1) packages/plugin-react-swc/playground/base-path: dependencies: @@ -391,10 +392,10 @@ importers: dependencies: '@generouted/react-router': specifier: ^1.20.0 - version: 1.20.0(react-router-dom@7.5.2(react-dom@19.1.0(react@19.1.0))(react@19.1.0))(react-router@7.5.2(react-dom@19.1.0(react@19.1.0))(react@19.1.0))(react@19.1.0)(vite@6.3.3(@types/node@22.15.2)(jiti@2.4.2)(lightningcss@1.29.3)(tsx@4.19.3)(yaml@2.7.1)) + version: 1.20.0(@types/node@22.15.2)(esbuild@0.25.3)(jiti@2.4.2)(react-router-dom@7.5.2(react-dom@19.1.0(react@19.1.0))(react@19.1.0))(react-router@7.5.2(react-dom@19.1.0(react@19.1.0))(react@19.1.0))(react@19.1.0)(tsx@4.19.3)(yaml@2.7.1) generouted: specifier: 1.11.7 - version: 1.11.7(react-router-dom@7.5.2(react-dom@19.1.0(react@19.1.0))(react@19.1.0))(react@19.1.0)(vite@6.3.3(@types/node@22.15.2)(jiti@2.4.2)(lightningcss@1.29.3)(tsx@4.19.3)(yaml@2.7.1)) + version: 1.11.7(@types/node@22.15.2)(esbuild@0.25.3)(jiti@2.4.2)(react-router-dom@7.5.2(react-dom@19.1.0(react@19.1.0))(react@19.1.0))(react@19.1.0)(tsx@4.19.3)(yaml@2.7.1) react: specifier: ^19.1.0 version: 19.1.0 @@ -1358,7 +1359,6 @@ packages: peerDependencies: react: '>=18' react-router: '>=7' - vite: '>=5' '@humanfs/core@0.19.1': resolution: {integrity: sha512-5DyQ4+1JEUzejeK1JGICcideyfUbGixgS9jNgex5nqkW+cY7WZhxBigmieN5Qnw9ZosSNVC9KQKyb+GUaGyKUA==} @@ -1406,9 +1406,6 @@ packages: peerDependencies: rollup: '>=2' - '@napi-rs/wasm-runtime@0.2.8': - resolution: {integrity: sha512-OBlgKdX7gin7OIq4fadsjpg+cp2ZphvAIKucHsNfTdJiqdOmOEwQd/bHi0VwNrcw5xpBJyUw6cK/QilCqy1BSg==} - '@napi-rs/wasm-runtime@0.2.9': resolution: {integrity: sha512-OKRBiajrrxB9ATokgEQoG87Z25c67pCpYcCwmXYX8PBftC9pBfN18gnm/fh1wurSLEKIAt+QRFLFCQISrb66Jg==} @@ -1424,12 +1421,12 @@ packages: resolution: {integrity: sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==} engines: {node: '>= 8'} - '@oxc-project/runtime@0.66.0': - resolution: {integrity: sha512-B0+lqyEYPKP6E9lLVegluJoHDr2+hcs3J5D5kogdHCPwzp/JfzYqZlurOU82uoaiw0A9Ct9QPp+5RhY9TOuakg==} + '@oxc-project/runtime@0.68.1': + resolution: {integrity: sha512-MMPhKwVPyykU7F6id79Bb9DAM8BqT3HbJNRxJnuh68uARDDAEn252dq/AjSa3i8JWmtnKZIdm+ORAyjFZD7bzQ==} engines: {node: '>=6.9.0'} - '@oxc-project/types@0.66.0': - resolution: {integrity: sha512-KF5Wlo2KzQ+jmuCtrGISZoUfdHom7qHavNfPLW2KkeYJfYMGwtiia8KjwtsvNJ49qRiXImOCkPeVPd4bMlbR7w==} + '@oxc-project/types@0.68.1': + resolution: {integrity: sha512-Q/H52+HXPPxuIHwQnVkEM8GebLnNcokkI4zQQdbxLIZdfxMGhAm9+gEqsMku3t95trN/1titHUmCM9NxbKaE2g==} '@playwright/test@1.52.0': resolution: {integrity: sha512-uh6W7sb55hl7D6vsAeA+V2p5JnlAqzhqFyF0VcJkKZXkgnFcVG9PziERRHQfPLfNGx1C292a4JqbWzhR8L4R1g==} @@ -1440,63 +1437,63 @@ packages: resolution: {integrity: sha512-S+9ANAvUmjutrshV4jZjaiG8XQyuJIZ8a4utWmN/vW1sgQ9IfBnPndwkmQYw53QmouOIytT874u65HEmu6H5jw==} engines: {node: '>=18'} - '@rolldown/binding-darwin-arm64@1.0.0-beta.8-commit.2686eb1': - resolution: {integrity: sha512-2GCVymE4qe30/ox/w+3aOOTCsvphbXCW41BxATiYJQzNPXQ7NY3RMTfvuDKUQW5KJSr3rKSj0zxPbjFJYCfGWw==} + '@rolldown/binding-darwin-arm64@1.0.0-beta.8-commit.c76291c': + resolution: {integrity: sha512-z0bulabL226ciSH6Xz2AuoAEohLRwPTv9qc3qBBHvdnYnBDQaK7HDFa2L84H2DKWI1r5si4JEDgv7H/TUdS9lA==} cpu: [arm64] os: [darwin] - '@rolldown/binding-darwin-x64@1.0.0-beta.8-commit.2686eb1': - resolution: {integrity: sha512-iiCq6rUyx+BjwAp5keIJnJiaGC8W+rfp6YgtsEjJUTqv+s9+UQxhXyw7qwnp1YkahTKiuyUUSM+CVcecbcrXlw==} + '@rolldown/binding-darwin-x64@1.0.0-beta.8-commit.c76291c': + resolution: {integrity: sha512-vXjDtZxjZdx8LccYBnNNp2Yd0mU7ZS7tK9nOPq5M1kH5XgB5kE7rFwrZicmJWWRkVYFubh2SVRBuL/yNCZBbxw==} cpu: [x64] os: [darwin] - '@rolldown/binding-freebsd-x64@1.0.0-beta.8-commit.2686eb1': - resolution: {integrity: sha512-8qkE8ANkELvEiE26Jpdlh7QRw7uOaqLOnbAPAJ9NySo6+VwAWILefQgo+pamXTEsHpAZqSo7DapFWjUtZdkUDg==} + '@rolldown/binding-freebsd-x64@1.0.0-beta.8-commit.c76291c': + resolution: {integrity: sha512-t2pmx9CyeLEfd7uUzVHY7+dmWQZROdv4HOdhj/v4930yCJ9Nlm5SUwnQr274VqFnpW6yksQYbqLWnXCWWBV6vA==} cpu: [x64] os: [freebsd] - '@rolldown/binding-linux-arm-gnueabihf@1.0.0-beta.8-commit.2686eb1': - resolution: {integrity: sha512-QCBw+96ZABHtJU3MBbl5DnD18/I+Lg06/MegyCHPI1j0VnqdmK8lDIPuaBzrj52USLYBoABC9HhuXMbIN0OfPA==} + '@rolldown/binding-linux-arm-gnueabihf@1.0.0-beta.8-commit.c76291c': + resolution: {integrity: sha512-7R62A7FKnY+pqArhju9g3czhXNg1LhmcqwMFO0ek2zaOO8ofEECSVQGqQAPctjKOMB312bWqfpziYY4dAQLNlQ==} cpu: [arm] os: [linux] - '@rolldown/binding-linux-arm64-gnu@1.0.0-beta.8-commit.2686eb1': - resolution: {integrity: sha512-bjGStzNXe1hD6vP6g2/T134RU85Mev+o+XEIB8kJT3Z9tq09SqDhN3ONqzUaeF7QQawv2M8XXDUOIdPhsrgmvg==} + '@rolldown/binding-linux-arm64-gnu@1.0.0-beta.8-commit.c76291c': + resolution: {integrity: sha512-Tk3cRfyrt55ewiB2BgEcdh2EKU6axvgNpEKaQ5EMaKWX8yof2QPmSPSlCTpmIgCT5w/KEVCa3tf2ZhSeM6WmLQ==} cpu: [arm64] os: [linux] - '@rolldown/binding-linux-arm64-musl@1.0.0-beta.8-commit.2686eb1': - resolution: {integrity: sha512-ZpN8ub+PiDBYjTMcXt3ihoPKpXikAYPfpJXdx1x0IjJmFqlLsSWxU6aqbkHBxALER7SxwQ4e9r5LPZKJnwBr7Q==} + '@rolldown/binding-linux-arm64-musl@1.0.0-beta.8-commit.c76291c': + resolution: {integrity: sha512-KtnGCqz8v5wdm/PYURRFMsF1aF7rAHHopP3dXzFqKHyBdm0vje+r8cVy/97WwKYFxxDmi7f0DZJ0TxxuP5gRnA==} cpu: [arm64] os: [linux] - '@rolldown/binding-linux-x64-gnu@1.0.0-beta.8-commit.2686eb1': - resolution: {integrity: sha512-ysVj17eqf0amHpF9pKOv5JWsW2F89oVql88PD4ldamhBUZq8unZdPqr8fogx+08TmURDtu9ygZlBvSB55VdzJQ==} + '@rolldown/binding-linux-x64-gnu@1.0.0-beta.8-commit.c76291c': + resolution: {integrity: sha512-UoROGcEBmKCPlRyQy9rfDy6IxmWaMQOenHkcWyMhFqJh4JVsWfS6inNd4TF5rKiRy5SzbJwr8qM0j/GjTCGcmw==} cpu: [x64] os: [linux] - '@rolldown/binding-linux-x64-musl@1.0.0-beta.8-commit.2686eb1': - resolution: {integrity: sha512-Yob3aIWUdXaCW1aKA0Ypo2ie8p+3uvOSobR9WTabx+aS7NPJuQbjAJP6n3CZHRPoKnJBCeftt3Bh8bFk1SKCMQ==} + '@rolldown/binding-linux-x64-musl@1.0.0-beta.8-commit.c76291c': + resolution: {integrity: sha512-VJzh1UCukRGUuJIWkVgnXRLLr7G6yrkWo9PrS43swuGyBUb3a54MT4LYJkcEvteJmOg7ejCpENXtsUwnOESJkA==} cpu: [x64] os: [linux] - '@rolldown/binding-wasm32-wasi@1.0.0-beta.8-commit.2686eb1': - resolution: {integrity: sha512-/tGqIUvsjTMe5h8DAR5XM++IsAMNmxgD2vFN+OzwE3bNAS3qk3w7rq6JyD+hBWwz+6QLgYVCTD7fNDXAYZKgWw==} + '@rolldown/binding-wasm32-wasi@1.0.0-beta.8-commit.c76291c': + resolution: {integrity: sha512-IZThgZ9X6q74lYM6JdW2vTy2IAYNzXrhVvRShQqy4DrC+RLhMYZ4C8M4J/sStn2wCTxCWmXVHIi7bZRH5//T6A==} engines: {node: '>=14.21.3'} cpu: [wasm32] - '@rolldown/binding-win32-arm64-msvc@1.0.0-beta.8-commit.2686eb1': - resolution: {integrity: sha512-uIuzY9dNeSLhAL4YW7YDYQ0wlSIDU7fzkhGYsfcH37ItSpOdxisxJLu4tLbl8i0AarLJvfH1+MgMSSGC2ioAtQ==} + '@rolldown/binding-win32-arm64-msvc@1.0.0-beta.8-commit.c76291c': + resolution: {integrity: sha512-BZ8yIlj/XbFS3B0+oJ9kSv1l8vZxWSts3Uxr/SwEQb3QmvHiX04m8Nd6+crzY6Lv7Kj4esWSpB/QpW8a89kqZA==} cpu: [arm64] os: [win32] - '@rolldown/binding-win32-ia32-msvc@1.0.0-beta.8-commit.2686eb1': - resolution: {integrity: sha512-tadc/hpAWQ6TPaF7U1AX6h/BYDm0Ukxg6o4647IfDREvncyf4RaNo99ByBSfoOYxqwlA2nu4llXkXx0rhWCfsQ==} + '@rolldown/binding-win32-ia32-msvc@1.0.0-beta.8-commit.c76291c': + resolution: {integrity: sha512-czB8wXEz7NfLGlr9O6f9tTZGFsNaeWv8cF/0Dau95GMlfy5pZ1PzlwcoHKCclT3vROoQOLA1YbGT4HXhgwgzQA==} cpu: [ia32] os: [win32] - '@rolldown/binding-win32-x64-msvc@1.0.0-beta.8-commit.2686eb1': - resolution: {integrity: sha512-8nMcDSZpCR2KuKCkgeA9/Em967VhB1jZys8W0j95tcKMyNva/Bnq9wxNH5CAMtL3AzV/QIT92RrHTWbIt0m1MA==} + '@rolldown/binding-win32-x64-msvc@1.0.0-beta.8-commit.c76291c': + resolution: {integrity: sha512-5ndBU5nWh1lC0IB8k7jqqTN9T4JSvZjsGyAojcS8chmzIWG3q8XiuzYS8ohk7OYy4Suy9n8VTtBGLcz8K00Q9g==} cpu: [x64] os: [win32] @@ -1981,11 +1978,6 @@ packages: cpu: [x64] os: [win32] - '@valibot/to-json-schema@1.0.0': - resolution: {integrity: sha512-/9crJgPptVsGCL6X+JPDQyaJwkalSZ/52WuF8DiRUxJgcmpNdzYRfZ+gqMEP8W3CTVfuMWPqqvIgfwJ97f9Etw==} - peerDependencies: - valibot: ^1.0.0 - '@vitejs/release-scripts@1.5.0': resolution: {integrity: sha512-rZQdM5AneNJHzDOTUaQOOifauH6MkGTSI+GH8bKKrimBaa5BtvpnE1iz43fJ4QDO7RdGxAlxWnPQAVlFhGM1cQ==} @@ -2324,8 +2316,8 @@ packages: resolution: {integrity: sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA==} engines: {node: '>=6'} - detect-libc@2.0.3: - resolution: {integrity: sha512-bwy0MGW55bG41VqxxypOsdSdGqLwXPI/focwgTYCFMbdUiBAxLg9CFzG08sz2aqzknwiX7Hkl0bQENjg8iLByw==} + detect-libc@2.0.4: + resolution: {integrity: sha512-3UDv+G9CsCKO1WKMGw9fwq/SWJYbI0c5Y7LU1AXYoDdbhE2AHQ6N6Nb34sG8Fj7T5APy8qXDCKuuIHd1BR0tVA==} engines: {node: '>=8'} devlop@1.1.0: @@ -2594,14 +2586,12 @@ packages: peerDependencies: react: '*' react-router-dom: '*' - vite: '>=3' generouted@1.20.0: resolution: {integrity: sha512-VXU5dFsWdm/faFo2fTGW5obYxy8hhM6B1WXYhCLAV+5pODhrsu8RBc/1IsOQKqtHFYqsuSE5C5KpzmBaLllUqg==} peerDependencies: react: '*' react-router-dom: '*' - vite: '>=5' gensync@1.0.0-beta.2: resolution: {integrity: sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==} @@ -3579,8 +3569,9 @@ packages: rfdc@1.4.1: resolution: {integrity: sha512-q1b3N5QkRUWUl7iyylaaj3kOpIT0N2i9MqIEQXP73GVsN9cw3fdx8X63cEmWhJGi2PPCF23Ijp7ktmd39rawIA==} - rolldown-vite@6.3.5: - resolution: {integrity: sha512-lTKMNb6Vl2fNblU8ve4SM+3p0gwYzKy2fjae7KTLuKKN8bdI+TwgFeB97ICEKq/t6KNNAg8f66FaK/q0cylrNg==} + rolldown-vite@https://pkg.pr.new/vitejs/rolldown-vite@107: + resolution: {tarball: https://pkg.pr.new/vitejs/rolldown-vite@107} + version: 6.3.8 engines: {node: ^18.0.0 || ^20.0.0 || >=22.0.0} hasBin: true peerDependencies: @@ -3619,11 +3610,11 @@ packages: yaml: optional: true - rolldown@1.0.0-beta.8-commit.2686eb1: - resolution: {integrity: sha512-NIo+n0m7ZVC6VXQ4l2zNYJOQ84lEthihbByZBBHzmyyhH/605jL43n2qFTPNy6W3stDnTCyp8/YYDlw39+fXlA==} + rolldown@1.0.0-beta.8-commit.c76291c: + resolution: {integrity: sha512-zjspfhO4u5+v9fiS+Om9DnpCrmq7jdTusu5x+un2oxqpHY2Ds6IllZFmgvAx48X4H9EYmJJ0YJHD6ruW5SX5EQ==} hasBin: true peerDependencies: - '@oxc-project/runtime': 0.66.0 + '@oxc-project/runtime': 0.68.1 peerDependenciesMeta: '@oxc-project/runtime': optional: true @@ -3931,14 +3922,6 @@ packages: util-deprecate@1.0.2: resolution: {integrity: sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==} - valibot@1.0.0: - resolution: {integrity: sha512-1Hc0ihzWxBar6NGeZv7fPLY0QuxFMyxwYR2sF1Blu7Wq7EnremwY2W02tit2ij2VJT8HcSkHAQqmFfl77f73Yw==} - peerDependencies: - typescript: '>=5' - peerDependenciesMeta: - typescript: - optional: true - vfile-message@4.0.2: resolution: {integrity: sha512-jRDZ1IMLttGj41KcZvlrYAaI3CfqpLpfpf+Mfig13viT6NKvRzWZ+lXz0Y5D60w6uJIBAOGq9mSHf0gktF0duw==} @@ -4629,15 +4612,26 @@ snapshots: '@eslint/core': 0.13.0 levn: 0.4.1 - '@generouted/react-router@1.20.0(react-router-dom@7.5.2(react-dom@19.1.0(react@19.1.0))(react@19.1.0))(react-router@7.5.2(react-dom@19.1.0(react@19.1.0))(react@19.1.0))(react@19.1.0)(vite@6.3.3(@types/node@22.15.2)(jiti@2.4.2)(lightningcss@1.29.3)(tsx@4.19.3)(yaml@2.7.1))': + '@generouted/react-router@1.20.0(@types/node@22.15.2)(esbuild@0.25.3)(jiti@2.4.2)(react-router-dom@7.5.2(react-dom@19.1.0(react@19.1.0))(react@19.1.0))(react-router@7.5.2(react-dom@19.1.0(react@19.1.0))(react@19.1.0))(react@19.1.0)(tsx@4.19.3)(yaml@2.7.1)': dependencies: fast-glob: 3.3.3 - generouted: 1.20.0(react-router-dom@7.5.2(react-dom@19.1.0(react@19.1.0))(react@19.1.0))(react@19.1.0)(vite@6.3.3(@types/node@22.15.2)(jiti@2.4.2)(lightningcss@1.29.3)(tsx@4.19.3)(yaml@2.7.1)) + generouted: 1.20.0(@types/node@22.15.2)(esbuild@0.25.3)(jiti@2.4.2)(react-router-dom@7.5.2(react-dom@19.1.0(react@19.1.0))(react@19.1.0))(react@19.1.0)(tsx@4.19.3)(yaml@2.7.1) react: 19.1.0 react-router: 7.5.2(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - vite: 6.3.3(@types/node@22.15.2)(jiti@2.4.2)(lightningcss@1.29.3)(tsx@4.19.3)(yaml@2.7.1) + vite: rolldown-vite@https://pkg.pr.new/vitejs/rolldown-vite@107(@types/node@22.15.2)(esbuild@0.25.3)(jiti@2.4.2)(tsx@4.19.3)(yaml@2.7.1) transitivePeerDependencies: + - '@types/node' + - esbuild + - jiti + - less - react-router-dom + - sass + - sass-embedded + - stylus + - sugarss + - terser + - tsx + - yaml '@humanfs/core@0.19.1': {} @@ -4707,13 +4701,6 @@ snapshots: transitivePeerDependencies: - supports-color - '@napi-rs/wasm-runtime@0.2.8': - dependencies: - '@emnapi/core': 1.4.0 - '@emnapi/runtime': 1.4.0 - '@tybys/wasm-util': 0.9.0 - optional: true - '@napi-rs/wasm-runtime@0.2.9': dependencies: '@emnapi/core': 1.4.0 @@ -4733,9 +4720,9 @@ snapshots: '@nodelib/fs.scandir': 2.1.5 fastq: 1.15.0 - '@oxc-project/runtime@0.66.0': {} + '@oxc-project/runtime@0.68.1': {} - '@oxc-project/types@0.66.0': {} + '@oxc-project/types@0.68.1': {} '@playwright/test@1.52.0': dependencies: @@ -4743,42 +4730,42 @@ snapshots: '@publint/pack@0.1.2': {} - '@rolldown/binding-darwin-arm64@1.0.0-beta.8-commit.2686eb1': + '@rolldown/binding-darwin-arm64@1.0.0-beta.8-commit.c76291c': optional: true - '@rolldown/binding-darwin-x64@1.0.0-beta.8-commit.2686eb1': + '@rolldown/binding-darwin-x64@1.0.0-beta.8-commit.c76291c': optional: true - '@rolldown/binding-freebsd-x64@1.0.0-beta.8-commit.2686eb1': + '@rolldown/binding-freebsd-x64@1.0.0-beta.8-commit.c76291c': optional: true - '@rolldown/binding-linux-arm-gnueabihf@1.0.0-beta.8-commit.2686eb1': + '@rolldown/binding-linux-arm-gnueabihf@1.0.0-beta.8-commit.c76291c': optional: true - '@rolldown/binding-linux-arm64-gnu@1.0.0-beta.8-commit.2686eb1': + '@rolldown/binding-linux-arm64-gnu@1.0.0-beta.8-commit.c76291c': optional: true - '@rolldown/binding-linux-arm64-musl@1.0.0-beta.8-commit.2686eb1': + '@rolldown/binding-linux-arm64-musl@1.0.0-beta.8-commit.c76291c': optional: true - '@rolldown/binding-linux-x64-gnu@1.0.0-beta.8-commit.2686eb1': + '@rolldown/binding-linux-x64-gnu@1.0.0-beta.8-commit.c76291c': optional: true - '@rolldown/binding-linux-x64-musl@1.0.0-beta.8-commit.2686eb1': + '@rolldown/binding-linux-x64-musl@1.0.0-beta.8-commit.c76291c': optional: true - '@rolldown/binding-wasm32-wasi@1.0.0-beta.8-commit.2686eb1': + '@rolldown/binding-wasm32-wasi@1.0.0-beta.8-commit.c76291c': dependencies: - '@napi-rs/wasm-runtime': 0.2.8 + '@napi-rs/wasm-runtime': 0.2.9 optional: true - '@rolldown/binding-win32-arm64-msvc@1.0.0-beta.8-commit.2686eb1': + '@rolldown/binding-win32-arm64-msvc@1.0.0-beta.8-commit.c76291c': optional: true - '@rolldown/binding-win32-ia32-msvc@1.0.0-beta.8-commit.2686eb1': + '@rolldown/binding-win32-ia32-msvc@1.0.0-beta.8-commit.c76291c': optional: true - '@rolldown/binding-win32-x64-msvc@1.0.0-beta.8-commit.2686eb1': + '@rolldown/binding-win32-x64-msvc@1.0.0-beta.8-commit.c76291c': optional: true '@rolldown/pluginutils@1.0.0-beta.9': {} @@ -5201,10 +5188,6 @@ snapshots: '@unrs/resolver-binding-win32-x64-msvc@1.7.0': optional: true - '@valibot/to-json-schema@1.0.0(valibot@1.0.0(typescript@5.8.3))': - dependencies: - valibot: 1.0.0(typescript@5.8.3) - '@vitejs/release-scripts@1.5.0': dependencies: execa: 8.0.1 @@ -5546,7 +5529,7 @@ snapshots: dequal@2.0.3: {} - detect-libc@2.0.3: {} + detect-libc@2.0.4: {} devlop@1.1.0: dependencies: @@ -5936,17 +5919,41 @@ snapshots: function-bind@1.1.2: {} - generouted@1.11.7(react-router-dom@7.5.2(react-dom@19.1.0(react@19.1.0))(react@19.1.0))(react@19.1.0)(vite@6.3.3(@types/node@22.15.2)(jiti@2.4.2)(lightningcss@1.29.3)(tsx@4.19.3)(yaml@2.7.1)): + generouted@1.11.7(@types/node@22.15.2)(esbuild@0.25.3)(jiti@2.4.2)(react-router-dom@7.5.2(react-dom@19.1.0(react@19.1.0))(react@19.1.0))(react@19.1.0)(tsx@4.19.3)(yaml@2.7.1): dependencies: react: 19.1.0 react-router-dom: 7.5.2(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - vite: 6.3.3(@types/node@22.15.2)(jiti@2.4.2)(lightningcss@1.29.3)(tsx@4.19.3)(yaml@2.7.1) + vite: rolldown-vite@https://pkg.pr.new/vitejs/rolldown-vite@107(@types/node@22.15.2)(esbuild@0.25.3)(jiti@2.4.2)(tsx@4.19.3)(yaml@2.7.1) + transitivePeerDependencies: + - '@types/node' + - esbuild + - jiti + - less + - sass + - sass-embedded + - stylus + - sugarss + - terser + - tsx + - yaml - generouted@1.20.0(react-router-dom@7.5.2(react-dom@19.1.0(react@19.1.0))(react@19.1.0))(react@19.1.0)(vite@6.3.3(@types/node@22.15.2)(jiti@2.4.2)(lightningcss@1.29.3)(tsx@4.19.3)(yaml@2.7.1)): + generouted@1.20.0(@types/node@22.15.2)(esbuild@0.25.3)(jiti@2.4.2)(react-router-dom@7.5.2(react-dom@19.1.0(react@19.1.0))(react@19.1.0))(react@19.1.0)(tsx@4.19.3)(yaml@2.7.1): dependencies: react: 19.1.0 react-router-dom: 7.5.2(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - vite: 6.3.3(@types/node@22.15.2)(jiti@2.4.2)(lightningcss@1.29.3)(tsx@4.19.3)(yaml@2.7.1) + vite: rolldown-vite@https://pkg.pr.new/vitejs/rolldown-vite@107(@types/node@22.15.2)(esbuild@0.25.3)(jiti@2.4.2)(tsx@4.19.3)(yaml@2.7.1) + transitivePeerDependencies: + - '@types/node' + - esbuild + - jiti + - less + - sass + - sass-embedded + - stylus + - sugarss + - terser + - tsx + - yaml gensync@1.0.0-beta.2: {} @@ -6179,7 +6186,7 @@ snapshots: lightningcss@1.29.3: dependencies: - detect-libc: 2.0.3 + detect-libc: 2.0.4 optionalDependencies: lightningcss-darwin-arm64: 1.29.3 lightningcss-darwin-x64: 1.29.3 @@ -7065,14 +7072,14 @@ snapshots: rfdc@1.4.1: {} - rolldown-vite@6.3.5(@types/node@22.15.2)(esbuild@0.25.3)(jiti@2.4.2)(tsx@4.19.3)(typescript@5.8.3)(yaml@2.7.1): + rolldown-vite@https://pkg.pr.new/vitejs/rolldown-vite@107(@types/node@22.15.2)(esbuild@0.25.3)(jiti@2.4.2)(tsx@4.19.3)(yaml@2.7.1): dependencies: - '@oxc-project/runtime': 0.66.0 + '@oxc-project/runtime': 0.68.1 fdir: 6.4.4(picomatch@4.0.2) lightningcss: 1.29.3 picomatch: 4.0.2 postcss: 8.5.3 - rolldown: 1.0.0-beta.8-commit.2686eb1(@oxc-project/runtime@0.66.0)(typescript@5.8.3) + rolldown: 1.0.0-beta.8-commit.c76291c(@oxc-project/runtime@0.68.1) tinyglobby: 0.2.13 optionalDependencies: '@types/node': 22.15.2 @@ -7081,31 +7088,25 @@ snapshots: jiti: 2.4.2 tsx: 4.19.3 yaml: 2.7.1 - transitivePeerDependencies: - - typescript - rolldown@1.0.0-beta.8-commit.2686eb1(@oxc-project/runtime@0.66.0)(typescript@5.8.3): + rolldown@1.0.0-beta.8-commit.c76291c(@oxc-project/runtime@0.68.1): dependencies: - '@oxc-project/types': 0.66.0 - '@valibot/to-json-schema': 1.0.0(valibot@1.0.0(typescript@5.8.3)) + '@oxc-project/types': 0.68.1 ansis: 3.17.0 - valibot: 1.0.0(typescript@5.8.3) optionalDependencies: - '@oxc-project/runtime': 0.66.0 - '@rolldown/binding-darwin-arm64': 1.0.0-beta.8-commit.2686eb1 - '@rolldown/binding-darwin-x64': 1.0.0-beta.8-commit.2686eb1 - '@rolldown/binding-freebsd-x64': 1.0.0-beta.8-commit.2686eb1 - '@rolldown/binding-linux-arm-gnueabihf': 1.0.0-beta.8-commit.2686eb1 - '@rolldown/binding-linux-arm64-gnu': 1.0.0-beta.8-commit.2686eb1 - '@rolldown/binding-linux-arm64-musl': 1.0.0-beta.8-commit.2686eb1 - '@rolldown/binding-linux-x64-gnu': 1.0.0-beta.8-commit.2686eb1 - '@rolldown/binding-linux-x64-musl': 1.0.0-beta.8-commit.2686eb1 - '@rolldown/binding-wasm32-wasi': 1.0.0-beta.8-commit.2686eb1 - '@rolldown/binding-win32-arm64-msvc': 1.0.0-beta.8-commit.2686eb1 - '@rolldown/binding-win32-ia32-msvc': 1.0.0-beta.8-commit.2686eb1 - '@rolldown/binding-win32-x64-msvc': 1.0.0-beta.8-commit.2686eb1 - transitivePeerDependencies: - - typescript + '@oxc-project/runtime': 0.68.1 + '@rolldown/binding-darwin-arm64': 1.0.0-beta.8-commit.c76291c + '@rolldown/binding-darwin-x64': 1.0.0-beta.8-commit.c76291c + '@rolldown/binding-freebsd-x64': 1.0.0-beta.8-commit.c76291c + '@rolldown/binding-linux-arm-gnueabihf': 1.0.0-beta.8-commit.c76291c + '@rolldown/binding-linux-arm64-gnu': 1.0.0-beta.8-commit.c76291c + '@rolldown/binding-linux-arm64-musl': 1.0.0-beta.8-commit.c76291c + '@rolldown/binding-linux-x64-gnu': 1.0.0-beta.8-commit.c76291c + '@rolldown/binding-linux-x64-musl': 1.0.0-beta.8-commit.c76291c + '@rolldown/binding-wasm32-wasi': 1.0.0-beta.8-commit.c76291c + '@rolldown/binding-win32-arm64-msvc': 1.0.0-beta.8-commit.c76291c + '@rolldown/binding-win32-ia32-msvc': 1.0.0-beta.8-commit.c76291c + '@rolldown/binding-win32-x64-msvc': 1.0.0-beta.8-commit.c76291c rollup-plugin-dts@6.2.1(rollup@4.37.0)(typescript@5.8.3): dependencies: @@ -7466,10 +7467,6 @@ snapshots: util-deprecate@1.0.2: {} - valibot@1.0.0(typescript@5.8.3): - optionalDependencies: - typescript: 5.8.3 - vfile-message@4.0.2: dependencies: '@types/unist': 3.0.2 @@ -7481,18 +7478,18 @@ snapshots: unist-util-stringify-position: 4.0.0 vfile-message: 4.0.2 - vite-node@3.1.2(@types/node@22.15.2)(jiti@2.4.2)(lightningcss@1.29.3)(tsx@4.19.3)(yaml@2.7.1): + vite-node@3.1.2(@types/node@22.15.2)(esbuild@0.25.3)(jiti@2.4.2)(tsx@4.19.3)(yaml@2.7.1): dependencies: cac: 6.7.14 debug: 4.4.0 es-module-lexer: 1.6.0 pathe: 2.0.3 - vite: 6.3.3(@types/node@22.15.2)(jiti@2.4.2)(lightningcss@1.29.3)(tsx@4.19.3)(yaml@2.7.1) + vite: rolldown-vite@https://pkg.pr.new/vitejs/rolldown-vite@107(@types/node@22.15.2)(esbuild@0.25.3)(jiti@2.4.2)(tsx@4.19.3)(yaml@2.7.1) transitivePeerDependencies: - '@types/node' + - esbuild - jiti - less - - lightningcss - sass - sass-embedded - stylus @@ -7518,7 +7515,7 @@ snapshots: tsx: 4.19.3 yaml: 2.7.1 - vitest@3.1.2(@types/debug@4.1.12)(@types/node@22.15.2)(jiti@2.4.2)(lightningcss@1.29.3)(tsx@4.19.3)(yaml@2.7.1): + vitest@3.1.2(@types/debug@4.1.12)(@types/node@22.15.2)(esbuild@0.25.3)(jiti@2.4.2)(lightningcss@1.29.3)(tsx@4.19.3)(yaml@2.7.1): dependencies: '@vitest/expect': 3.1.2 '@vitest/mocker': 3.1.2(vite@6.3.3(@types/node@22.15.2)(jiti@2.4.2)(lightningcss@1.29.3)(tsx@4.19.3)(yaml@2.7.1)) @@ -7539,12 +7536,13 @@ snapshots: tinypool: 1.0.2 tinyrainbow: 2.0.0 vite: 6.3.3(@types/node@22.15.2)(jiti@2.4.2)(lightningcss@1.29.3)(tsx@4.19.3)(yaml@2.7.1) - vite-node: 3.1.2(@types/node@22.15.2)(jiti@2.4.2)(lightningcss@1.29.3)(tsx@4.19.3)(yaml@2.7.1) + vite-node: 3.1.2(@types/node@22.15.2)(esbuild@0.25.3)(jiti@2.4.2)(tsx@4.19.3)(yaml@2.7.1) why-is-node-running: 2.3.0 optionalDependencies: '@types/debug': 4.1.12 '@types/node': 22.15.2 transitivePeerDependencies: + - esbuild - jiti - less - lightningcss From 8315ebfe84061dab6aec56e68db105f5b117b36a Mon Sep 17 00:00:00 2001 From: underfin Date: Tue, 13 May 2025 16:14:46 +0800 Subject: [PATCH 02/25] fix: get module exports --- packages/common/refresh-utils.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/common/refresh-utils.ts b/packages/common/refresh-utils.ts index 5c7aeed4c..4b009abf1 100644 --- a/packages/common/refresh-utils.ts +++ b/packages/common/refresh-utils.ts @@ -81,7 +81,7 @@ const inWebWorker = typeof WorkerGlobalScope !== 'undefined' && self instanceof newCode = `${sharedHead}${newCode} if (import.meta.hot && !inWebWorker) { - import.meta.hot.getExports().then((currentExports) => { + import.meta.hot.getExports(import.meta.url).then((currentExports) => { RefreshRuntime.registerExportsForReactRefresh(${JSON.stringify( id, )}, currentExports); From 0040e189f35bd9c4a12f05605418ef0c1a712814 Mon Sep 17 00:00:00 2001 From: underfin Date: Tue, 13 May 2025 16:52:24 +0800 Subject: [PATCH 03/25] fix: setup tests i --- package.json | 1 + packages/plugin-react-oxc/src/index.ts | 28 ++++++++++++++++--------- packages/plugin-react-swc/src/index.ts | 29 +++++++++++++++++--------- playground/vitest.config.e2e.ts | 15 ++++++++++++- playground/vitestSetup.ts | 24 ++++++++++++++++++--- 5 files changed, 73 insertions(+), 24 deletions(-) diff --git a/package.json b/package.json index 05401e1c8..b30945933 100644 --- a/package.json +++ b/package.json @@ -23,6 +23,7 @@ "typecheck": "tsc -p scripts && tsc -p playground && tsc -p packages/plugin-react", "test": "pnpm run test-serve && pnpm run test-build && pnpm --filter ./packages/plugin-react-swc run test", "test-serve": "vitest run -c playground/vitest.config.e2e.ts", + "test-full-bundle-mode-serve": "VITE_TEST_FULL_BUNDLE_MODE=1 vitest run -c playground/vitest.config.e2e.ts", "test-build": "VITE_TEST_BUILD=1 vitest run -c playground/vitest.config.e2e.ts", "debug-serve": "VITE_DEBUG_SERVE=1 vitest run -c playground/vitest.config.e2e.ts", "debug-build": "VITE_TEST_BUILD=1 VITE_PRESERVE_BUILD_ARTIFACTS=1 vitest run -c playground/vitest.config.e2e.ts", diff --git a/packages/plugin-react-oxc/src/index.ts b/packages/plugin-react-oxc/src/index.ts index f234ad80d..54e18b23c 100644 --- a/packages/plugin-react-oxc/src/index.ts +++ b/packages/plugin-react-oxc/src/index.ts @@ -103,11 +103,12 @@ export default function viteReact(opts: Options = {}): PluginOption[] { } let skipFastRefresh = false - + let base: string | undefined const viteRefreshWrapper: Plugin = { name: 'vite:react-oxc:refresh-wrapper', apply: 'serve', configResolved(config) { + base = config.base skipFastRefresh = config.isProduction || config.server.hmr === false }, transform: { @@ -136,15 +137,22 @@ export default function viteReact(opts: Options = {}): PluginOption[] { return { code: newCode, map: null } }, }, - transformIndexHtml(_, config) { - if (!skipFastRefresh) - return [ - { - tag: 'script', - attrs: { type: 'module' }, - children: getPreambleCode(config.server!.config.base), - }, - ] + transformIndexHtml: { + handler() { + if (!skipFastRefresh) + return [ + { + tag: 'script', + attrs: { type: 'module' }, + // !!! Rolldown vite full bunlde module break changes, config.server is invalid + // children: getPreambleCode(config.server!.config.base), + children: getPreambleCode(base!), + }, + ] + }, + // Rolldown vite full bunlde module break changes. + // Changed it to make sure the inject module could be bundled + order: 'pre', }, } diff --git a/packages/plugin-react-swc/src/index.ts b/packages/plugin-react-swc/src/index.ts index 6f20a05df..81566aef6 100644 --- a/packages/plugin-react-swc/src/index.ts +++ b/packages/plugin-react-swc/src/index.ts @@ -92,6 +92,7 @@ const react = (_options?: Options): PluginOption[] => { _options?.useAtYourOwnRisk_mutateSwcOptions, } + let base: string | undefined return [ { name: 'vite:react-swc:resolve-runtime', @@ -128,6 +129,7 @@ const react = (_options?: Options): PluginOption[] => { }, }), configResolved(config) { + base = config.base if (config.server.hmr === false) hmrDisabled = true const mdxIndex = config.plugins.findIndex( (p) => p.name === '@mdx-js/rollup', @@ -142,16 +144,23 @@ const react = (_options?: Options): PluginOption[] => { ) } }, - transformIndexHtml: (_, config) => { - if (!hmrDisabled) { - return [ - { - tag: 'script', - attrs: { type: 'module' }, - children: getPreambleCode(config.server!.config.base), - }, - ] - } + transformIndexHtml: { + handler() { + if (!hmrDisabled) { + return [ + { + tag: 'script', + attrs: { type: 'module' }, + // !!! Rolldown vite full bunlde module break changes, config.server is invalid + // children: getPreambleCode(config.server!.config.base), + children: getPreambleCode(base!), + }, + ] + } + }, + // Rolldown vite full bunlde module break changes. + // Changed it to make sure the inject module could be bundled + order: 'pre', }, async transform(code, _id, transformOptions) { const id = _id.split('?')[0] diff --git a/playground/vitest.config.e2e.ts b/playground/vitest.config.e2e.ts index 945e0db28..50b2a4c06 100644 --- a/playground/vitest.config.e2e.ts +++ b/playground/vitest.config.e2e.ts @@ -11,7 +11,20 @@ export default defineConfig({ }, test: { pool: 'forks', - include: ['./playground/**/*.spec.[tj]s'], + include: process.env.VITE_TEST_FULL_BUNDLE_MODE + ? [ + './playground/class-components/**/*.spec.[tj]s', + './playground/compiler/**/*.spec.[tj]s', + './playground/compiler-react-18/**/*.spec.[tj]s', + './playground/mdx/**/*.spec.[tj]s', + // './playground/react/**/*.spec.[tj]s', + // './playground/react-classic/**/*.spec.[tj]s', + './playground/react-emotion/**/*.spec.[tj]s', + './playground/react-env/**/*.spec.[tj]s', + './playground/react-sourcemap/**/*.spec.[tj]s', + // './playground/ssr-react/**/*.spec.[tj]s', + ] + : ['./playground/**/*.spec.[tj]s'], setupFiles: ['./playground/vitestSetup.ts'], globalSetup: ['./playground/vitestGlobalSetup.ts'], testTimeout: timeout, diff --git a/playground/vitestSetup.ts b/playground/vitestSetup.ts index dda7a4ffb..76d8912b4 100644 --- a/playground/vitestSetup.ts +++ b/playground/vitestSetup.ts @@ -214,21 +214,39 @@ async function loadConfig(configEnv: ConfigEnv) { // tests are flaky when `emptyOutDir` is `true` emptyOutDir: false, }, + experimental: { + fullBundleMode: !!process.env.VITE_TEST_FULL_BUNDLE_MODE, + }, customLogger: createInMemoryLogger(serverLogs), } return mergeConfig(options, config || {}) } export async function startDefaultServe(): Promise { - const { build, createBuilder, createServer, mergeConfig, preview } = - await importVite() + const { + build, + createBuilder, + createServer, + mergeConfig, + preview, + createServerWithResolvedConfig, + } = await importVite() setupConsoleWarnCollector(serverLogs) if (!isBuild) { process.env.VITE_INLINE = 'inline-serve' const config = await loadConfig({ command: 'serve', mode: 'development' }) - viteServer = server = await (await createServer(config)).listen() + + if (process.env.VITE_TEST_FULL_BUNDLE_MODE) { + const builder = await createBuilder(config, null, 'serve') + viteServer = server = await createServerWithResolvedConfig(builder.config) + await server.listen() + await builder.buildApp(server) + } else { + viteServer = server = await (await createServer(config)).listen() + } + viteTestUrl = stripTrailingSlashIfNeeded( server.resolvedUrls.local[0], server.config.base, From 8f553e21deeba96c64dd7fd3864fbf9669a3e16c Mon Sep 17 00:00:00 2001 From: underfin Date: Tue, 13 May 2025 16:54:31 +0800 Subject: [PATCH 04/25] fix: add missing file --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index b30945933..d301bd606 100644 --- a/package.json +++ b/package.json @@ -21,7 +21,7 @@ "format": "prettier --write --cache .", "lint": "eslint --cache .", "typecheck": "tsc -p scripts && tsc -p playground && tsc -p packages/plugin-react", - "test": "pnpm run test-serve && pnpm run test-build && pnpm --filter ./packages/plugin-react-swc run test", + "test": "pnpm run test-serve && pnpm run test-build && pnpm --filter ./packages/plugin-react-swc run test && npm run test-full-bundle-mode-serve", "test-serve": "vitest run -c playground/vitest.config.e2e.ts", "test-full-bundle-mode-serve": "VITE_TEST_FULL_BUNDLE_MODE=1 vitest run -c playground/vitest.config.e2e.ts", "test-build": "VITE_TEST_BUILD=1 vitest run -c playground/vitest.config.e2e.ts", From 3378410ad648a46be0c0f1893c872105e979c5c5 Mon Sep 17 00:00:00 2001 From: underfin Date: Tue, 13 May 2025 17:00:54 +0800 Subject: [PATCH 05/25] chore: ignore the visit module file at full bundle mode --- .../react-classic/__tests__/react.spec.ts | 20 ++++--- playground/react/__tests__/react.spec.ts | 57 ++++++++++--------- playground/vitest.config.e2e.ts | 4 +- 3 files changed, 43 insertions(+), 38 deletions(-) diff --git a/playground/react-classic/__tests__/react.spec.ts b/playground/react-classic/__tests__/react.spec.ts index c0cd2b73e..cd3eb1854 100644 --- a/playground/react-classic/__tests__/react.spec.ts +++ b/playground/react-classic/__tests__/react.spec.ts @@ -18,12 +18,14 @@ test.runIf(isServe)('should hmr', async () => { expect(await page.textContent('button')).toMatch('count is: 1') }) -test.runIf(isServe)( - 'should have annotated jsx with file location metadata', - async () => { - const res = await page.request.get(viteTestUrl + '/App.jsx') - const code = await res.text() - expect(code).toMatch(/lineNumber:\s*\d+/) - expect(code).toMatch(/columnNumber:\s*\d+/) - }, -) +if (!process.env.VITE_TEST_FULL_BUNDLE_MODE){ + test.runIf(isServe)( + 'should have annotated jsx with file location metadata', + async () => { + const res = await page.request.get(viteTestUrl + '/App.jsx') + const code = await res.text() + expect(code).toMatch(/lineNumber:\s*\d+/) + expect(code).toMatch(/columnNumber:\s*\d+/) + }, + ) +} diff --git a/playground/react/__tests__/react.spec.ts b/playground/react/__tests__/react.spec.ts index 48128f2d9..e5dcebba0 100644 --- a/playground/react/__tests__/react.spec.ts +++ b/playground/react/__tests__/react.spec.ts @@ -34,36 +34,39 @@ test.runIf(isServe)('should hmr', async () => { await untilUpdated(() => page.textContent('h1'), 'Hello Vite + React') }) -test.runIf(isServe)('should not invalidate when code is invalid', async () => { - editFile('App.jsx', (code) => - code.replace('
', '
'), - ) +// test.runIf(isServe)('should not invalidate when code is invalid', async () => { +// editFile('App.jsx', (code) => +// code.replace('
', '
'), +// ) - await untilUpdated( - () => page.textContent('vite-error-overlay .message-body'), - 'Unexpected token', - ) - // if import.meta.invalidate happened, the old page won't be shown because the page is reloaded - expect(await page.textContent('h1')).toMatch('Hello Vite + React') +// await untilUpdated( +// () => page.textContent('vite-error-overlay .message-body'), +// 'Unexpected token', +// ) +// // if import.meta.invalidate happened, the old page won't be shown because the page is reloaded +// expect(await page.textContent('h1')).toMatch('Hello Vite + React') - await untilBrowserLogAfter( - () => - editFile('App.jsx', (code) => - code.replace('
', '
'), - ), - '[vite] hot updated: /App.jsx', - ) -}) +// await untilBrowserLogAfter( +// () => +// editFile('App.jsx', (code) => +// code.replace('
', '
'), +// ), +// '[vite] hot updated: /App.jsx', +// ) +// }) -test.runIf(isServe)( - 'should have annotated jsx with file location metadata', - async () => { - const res = await page.request.get(viteTestUrl + '/App.jsx') - const code = await res.text() - expect(code).toMatch(/lineNumber:\s*\d+/) - expect(code).toMatch(/columnNumber:\s*\d+/) - }, -) +// The module file can't be visited at full bundle mode +if (!process.env.VITE_TEST_FULL_BUNDLE_MODE) { + test.runIf(isServe)( + 'should have annotated jsx with file location metadata', + async () => { + const res = await page.request.get(viteTestUrl + '/App.jsx') + const code = await res.text() + expect(code).toMatch(/lineNumber:\s*\d+/) + expect(code).toMatch(/columnNumber:\s*\d+/) + }, + ) +} test('import attributes', async () => { expect(await page.textContent('.import-attributes')).toBe('ok') diff --git a/playground/vitest.config.e2e.ts b/playground/vitest.config.e2e.ts index 50b2a4c06..a9cf6a89b 100644 --- a/playground/vitest.config.e2e.ts +++ b/playground/vitest.config.e2e.ts @@ -17,8 +17,8 @@ export default defineConfig({ './playground/compiler/**/*.spec.[tj]s', './playground/compiler-react-18/**/*.spec.[tj]s', './playground/mdx/**/*.spec.[tj]s', - // './playground/react/**/*.spec.[tj]s', - // './playground/react-classic/**/*.spec.[tj]s', + './playground/react/**/*.spec.[tj]s', + './playground/react-classic/**/*.spec.[tj]s', './playground/react-emotion/**/*.spec.[tj]s', './playground/react-env/**/*.spec.[tj]s', './playground/react-sourcemap/**/*.spec.[tj]s', From 3c79d57936fa7a746bec5146075419673438925d Mon Sep 17 00:00:00 2001 From: underfin Date: Mon, 19 May 2025 17:15:02 +0800 Subject: [PATCH 06/25] chore: bump rolldown-vite --- package.json | 4 +- pnpm-lock.yaml | 297 +++++++++++++++++++++++++------------------------ 2 files changed, 156 insertions(+), 145 deletions(-) diff --git a/package.json b/package.json index d301bd606..b1666aaa0 100644 --- a/package.json +++ b/package.json @@ -23,7 +23,7 @@ "typecheck": "tsc -p scripts && tsc -p playground && tsc -p packages/plugin-react", "test": "pnpm run test-serve && pnpm run test-build && pnpm --filter ./packages/plugin-react-swc run test && npm run test-full-bundle-mode-serve", "test-serve": "vitest run -c playground/vitest.config.e2e.ts", - "test-full-bundle-mode-serve": "VITE_TEST_FULL_BUNDLE_MODE=1 vitest run -c playground/vitest.config.e2e.ts", + "test-full-bundle-mode": "VITE_TEST_FULL_BUNDLE_MODE=1 vitest run -c playground/vitest.config.e2e.ts", "test-build": "VITE_TEST_BUILD=1 vitest run -c playground/vitest.config.e2e.ts", "debug-serve": "VITE_DEBUG_SERVE=1 vitest run -c playground/vitest.config.e2e.ts", "debug-build": "VITE_TEST_BUILD=1 VITE_PRESERVE_BUILD_ARTIFACTS=1 vitest run -c playground/vitest.config.e2e.ts", @@ -74,7 +74,7 @@ "pnpm": { "overrides": { "vitest>vite": "npm:vite@^6.2.6", - "vite": "https://pkg.pr.new/vitejs/rolldown-vite@107" + "vite": "https://pkg.pr.new/vitejs/rolldown-vite@bdb70a9" }, "packageExtensions": { "generouted": { diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 6cbb94423..9d3d87b48 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -6,7 +6,7 @@ settings: overrides: vitest>vite: npm:vite@^6.2.6 - vite: https://pkg.pr.new/vitejs/rolldown-vite@107 + vite: https://pkg.pr.new/vitejs/rolldown-vite@bdb70a9 packageExtensionsChecksum: sha256-S82yCctxnlOTNFuHWCyTFRo/B6Y3jque/4DnsDO4WZA= @@ -69,17 +69,17 @@ importers: specifier: ^8.31.0 version: 8.31.0(eslint@9.25.1(jiti@2.4.2))(typescript@5.8.3) vite: - specifier: https://pkg.pr.new/vitejs/rolldown-vite@107 - version: rolldown-vite@https://pkg.pr.new/vitejs/rolldown-vite@107(@types/node@22.15.2)(esbuild@0.25.3)(jiti@2.4.2)(tsx@4.19.3)(yaml@2.7.1) + specifier: https://pkg.pr.new/vitejs/rolldown-vite@bdb70a9 + version: rolldown-vite@https://pkg.pr.new/vitejs/rolldown-vite@bdb70a9(@types/node@22.15.2)(esbuild@0.25.3)(jiti@2.4.2)(tsx@4.19.3)(yaml@2.7.1) vitest: specifier: ^3.1.2 - version: 3.1.2(@types/debug@4.1.12)(@types/node@22.15.2)(esbuild@0.25.3)(jiti@2.4.2)(lightningcss@1.29.3)(tsx@4.19.3)(yaml@2.7.1) + version: 3.1.2(@types/debug@4.1.12)(@types/node@22.15.2)(esbuild@0.25.3)(jiti@2.4.2)(lightningcss@1.30.1)(tsx@4.19.3)(yaml@2.7.1) packages/common: dependencies: vite: - specifier: https://pkg.pr.new/vitejs/rolldown-vite@107 - version: rolldown-vite@https://pkg.pr.new/vitejs/rolldown-vite@107(@types/node@22.15.2)(esbuild@0.25.3)(jiti@2.4.2)(tsx@4.19.3)(yaml@2.7.1) + specifier: https://pkg.pr.new/vitejs/rolldown-vite@bdb70a9 + version: rolldown-vite@https://pkg.pr.new/vitejs/rolldown-vite@bdb70a9(@types/node@22.15.2)(esbuild@0.25.3)(jiti@2.4.2)(tsx@4.19.3)(yaml@2.7.1) packages/plugin-react: dependencies: @@ -102,8 +102,8 @@ importers: specifier: ^0.17.0 version: 0.17.0 vite: - specifier: https://pkg.pr.new/vitejs/rolldown-vite@107 - version: rolldown-vite@https://pkg.pr.new/vitejs/rolldown-vite@107(@types/node@22.15.2)(esbuild@0.25.3)(jiti@2.4.2)(tsx@4.19.3)(yaml@2.7.1) + specifier: https://pkg.pr.new/vitejs/rolldown-vite@bdb70a9 + version: rolldown-vite@https://pkg.pr.new/vitejs/rolldown-vite@bdb70a9(@types/node@22.15.2)(esbuild@0.25.3)(jiti@2.4.2)(tsx@4.19.3)(yaml@2.7.1) devDependencies: '@vitejs/react-common': specifier: workspace:* @@ -114,12 +114,9 @@ importers: packages/plugin-react-oxc: dependencies: - '@rolldown/pluginutils': - specifier: 1.0.0-beta.9 - version: 1.0.0-beta.9 vite: - specifier: https://pkg.pr.new/vitejs/rolldown-vite@107 - version: rolldown-vite@https://pkg.pr.new/vitejs/rolldown-vite@107(@types/node@22.15.2)(esbuild@0.25.3)(jiti@2.4.2)(tsx@4.19.3)(yaml@2.7.1) + specifier: https://pkg.pr.new/vitejs/rolldown-vite@bdb70a9 + version: rolldown-vite@https://pkg.pr.new/vitejs/rolldown-vite@bdb70a9(@types/node@22.15.2)(esbuild@0.25.3)(jiti@2.4.2)(tsx@4.19.3)(yaml@2.7.1) devDependencies: '@vitejs/react-common': specifier: workspace:* @@ -137,8 +134,8 @@ importers: specifier: ^1.11.22 version: 1.11.22 vite: - specifier: https://pkg.pr.new/vitejs/rolldown-vite@107 - version: rolldown-vite@https://pkg.pr.new/vitejs/rolldown-vite@107(@types/node@22.15.2)(esbuild@0.25.3)(jiti@2.4.2)(tsx@4.19.3)(yaml@2.7.1) + specifier: https://pkg.pr.new/vitejs/rolldown-vite@bdb70a9 + version: rolldown-vite@https://pkg.pr.new/vitejs/rolldown-vite@bdb70a9(@types/node@22.15.2)(esbuild@0.25.3)(jiti@2.4.2)(tsx@4.19.3)(yaml@2.7.1) devDependencies: '@playwright/test': specifier: ^1.52.0 @@ -1421,12 +1418,12 @@ packages: resolution: {integrity: sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==} engines: {node: '>= 8'} - '@oxc-project/runtime@0.68.1': - resolution: {integrity: sha512-MMPhKwVPyykU7F6id79Bb9DAM8BqT3HbJNRxJnuh68uARDDAEn252dq/AjSa3i8JWmtnKZIdm+ORAyjFZD7bzQ==} + '@oxc-project/runtime@0.70.0': + resolution: {integrity: sha512-+OV+5OQ2/KFSamt9hecuQ682AB06QwMfEQHrko1v98zF3kWAOp1+CAc3P27mtEPQPMQvRR1d1BYE6BTijbcxzQ==} engines: {node: '>=6.9.0'} - '@oxc-project/types@0.68.1': - resolution: {integrity: sha512-Q/H52+HXPPxuIHwQnVkEM8GebLnNcokkI4zQQdbxLIZdfxMGhAm9+gEqsMku3t95trN/1titHUmCM9NxbKaE2g==} + '@oxc-project/types@0.70.0': + resolution: {integrity: sha512-ngyLUpUjO3dpqygSRQDx7nMx8+BmXbWOU4oIwTJFV2MVIDG7knIZwgdwXlQWLg3C3oxg1lS7ppMtPKqKFb7wzw==} '@playwright/test@1.52.0': resolution: {integrity: sha512-uh6W7sb55hl7D6vsAeA+V2p5JnlAqzhqFyF0VcJkKZXkgnFcVG9PziERRHQfPLfNGx1C292a4JqbWzhR8L4R1g==} @@ -1437,68 +1434,68 @@ packages: resolution: {integrity: sha512-S+9ANAvUmjutrshV4jZjaiG8XQyuJIZ8a4utWmN/vW1sgQ9IfBnPndwkmQYw53QmouOIytT874u65HEmu6H5jw==} engines: {node: '>=18'} - '@rolldown/binding-darwin-arm64@1.0.0-beta.8-commit.c76291c': - resolution: {integrity: sha512-z0bulabL226ciSH6Xz2AuoAEohLRwPTv9qc3qBBHvdnYnBDQaK7HDFa2L84H2DKWI1r5si4JEDgv7H/TUdS9lA==} + '@rolldown/binding-darwin-arm64@1.0.0-beta.8-commit.360c072': + resolution: {integrity: sha512-Q/QdLvE1FGEkp/Xtr8DsakNSk1F6EcThrPO1M30SghIqqF/EhExPDLA0UJ3RuX9VU7PhzyAF9rUCGP+OTzyWgg==} cpu: [arm64] os: [darwin] - '@rolldown/binding-darwin-x64@1.0.0-beta.8-commit.c76291c': - resolution: {integrity: sha512-vXjDtZxjZdx8LccYBnNNp2Yd0mU7ZS7tK9nOPq5M1kH5XgB5kE7rFwrZicmJWWRkVYFubh2SVRBuL/yNCZBbxw==} + '@rolldown/binding-darwin-x64@1.0.0-beta.8-commit.360c072': + resolution: {integrity: sha512-7sC2AiujG0+JLKl6D95k4k15dkRSZHyaDuFImGKJxlVyA1l+x08ywz38bSH3jGQ7/BcmKhtPAYKwnzsTOcNEBg==} cpu: [x64] os: [darwin] - '@rolldown/binding-freebsd-x64@1.0.0-beta.8-commit.c76291c': - resolution: {integrity: sha512-t2pmx9CyeLEfd7uUzVHY7+dmWQZROdv4HOdhj/v4930yCJ9Nlm5SUwnQr274VqFnpW6yksQYbqLWnXCWWBV6vA==} + '@rolldown/binding-freebsd-x64@1.0.0-beta.8-commit.360c072': + resolution: {integrity: sha512-Q/ppbFrnMQkjwg6hwVtZlc4HgK8WB3Zwj/cbZg493wfU2Uw5HsDLQSdVaT4wtTnYcr1P9tcdByQMlMO7v0viMw==} cpu: [x64] os: [freebsd] - '@rolldown/binding-linux-arm-gnueabihf@1.0.0-beta.8-commit.c76291c': - resolution: {integrity: sha512-7R62A7FKnY+pqArhju9g3czhXNg1LhmcqwMFO0ek2zaOO8ofEECSVQGqQAPctjKOMB312bWqfpziYY4dAQLNlQ==} + '@rolldown/binding-linux-arm-gnueabihf@1.0.0-beta.8-commit.360c072': + resolution: {integrity: sha512-Q4D8/W3sNevkPTyd5AMc0ZIihvySlX5w88B3L6S9dwSUe3dkX6R0yk+mp+Zq0m26QYI+oHjzBwfuUGBVWSMfdg==} cpu: [arm] os: [linux] - '@rolldown/binding-linux-arm64-gnu@1.0.0-beta.8-commit.c76291c': - resolution: {integrity: sha512-Tk3cRfyrt55ewiB2BgEcdh2EKU6axvgNpEKaQ5EMaKWX8yof2QPmSPSlCTpmIgCT5w/KEVCa3tf2ZhSeM6WmLQ==} + '@rolldown/binding-linux-arm64-gnu@1.0.0-beta.8-commit.360c072': + resolution: {integrity: sha512-o/42qUmu9xrMJKLPRbfofXECx/q4JegKbxbDiXnWbwNSfOn8meF6Whvah11vI7BVIZnut8kuycB8ERgfP2ULtw==} cpu: [arm64] os: [linux] - '@rolldown/binding-linux-arm64-musl@1.0.0-beta.8-commit.c76291c': - resolution: {integrity: sha512-KtnGCqz8v5wdm/PYURRFMsF1aF7rAHHopP3dXzFqKHyBdm0vje+r8cVy/97WwKYFxxDmi7f0DZJ0TxxuP5gRnA==} + '@rolldown/binding-linux-arm64-musl@1.0.0-beta.8-commit.360c072': + resolution: {integrity: sha512-Tzh74sU4NLoYBsUDwEH3D6BO9pjzZVqgbk3zaI965jgIovKtHoJoa4YcMcXImtQbYoDE04Bns2S75URahot6hg==} cpu: [arm64] os: [linux] - '@rolldown/binding-linux-x64-gnu@1.0.0-beta.8-commit.c76291c': - resolution: {integrity: sha512-UoROGcEBmKCPlRyQy9rfDy6IxmWaMQOenHkcWyMhFqJh4JVsWfS6inNd4TF5rKiRy5SzbJwr8qM0j/GjTCGcmw==} + '@rolldown/binding-linux-x64-gnu@1.0.0-beta.8-commit.360c072': + resolution: {integrity: sha512-6fnG5mK6tdToYM1lx0IOxYpmhuEvEYN73oVwsRsrNV2+96vCpUqHrlU+g5LawAtKN591FOR9qARXz3CvK3COZQ==} cpu: [x64] os: [linux] - '@rolldown/binding-linux-x64-musl@1.0.0-beta.8-commit.c76291c': - resolution: {integrity: sha512-VJzh1UCukRGUuJIWkVgnXRLLr7G6yrkWo9PrS43swuGyBUb3a54MT4LYJkcEvteJmOg7ejCpENXtsUwnOESJkA==} + '@rolldown/binding-linux-x64-musl@1.0.0-beta.8-commit.360c072': + resolution: {integrity: sha512-bkcT+E2xg1cKtNLlVB9YgGsnj3n09MqGT4neEeL+FNJVj6r3kS89Ji4+OIk0Rw88ee3PEkkVGFA2xoS1BUG2yw==} cpu: [x64] os: [linux] - '@rolldown/binding-wasm32-wasi@1.0.0-beta.8-commit.c76291c': - resolution: {integrity: sha512-IZThgZ9X6q74lYM6JdW2vTy2IAYNzXrhVvRShQqy4DrC+RLhMYZ4C8M4J/sStn2wCTxCWmXVHIi7bZRH5//T6A==} + '@rolldown/binding-wasm32-wasi@1.0.0-beta.8-commit.360c072': + resolution: {integrity: sha512-FuPAqHJVCaiV+VgDzyLyBYUPXT8cVmxaez5GG2OvlOFCykU0XX/Zq5bO0LNMwQCFzwhqDka/snAzSXPs8YwKZA==} engines: {node: '>=14.21.3'} cpu: [wasm32] - '@rolldown/binding-win32-arm64-msvc@1.0.0-beta.8-commit.c76291c': - resolution: {integrity: sha512-BZ8yIlj/XbFS3B0+oJ9kSv1l8vZxWSts3Uxr/SwEQb3QmvHiX04m8Nd6+crzY6Lv7Kj4esWSpB/QpW8a89kqZA==} + '@rolldown/binding-win32-arm64-msvc@1.0.0-beta.8-commit.360c072': + resolution: {integrity: sha512-EAAsOJhHtLwBs8XzC+1f0TA/+qvc0kFIUaqRQZKsurQBjjQan/9NxQEfw3c7IQc8VJyCCpMnvZ8h22dcLAJ7rg==} cpu: [arm64] os: [win32] - '@rolldown/binding-win32-ia32-msvc@1.0.0-beta.8-commit.c76291c': - resolution: {integrity: sha512-czB8wXEz7NfLGlr9O6f9tTZGFsNaeWv8cF/0Dau95GMlfy5pZ1PzlwcoHKCclT3vROoQOLA1YbGT4HXhgwgzQA==} + '@rolldown/binding-win32-ia32-msvc@1.0.0-beta.8-commit.360c072': + resolution: {integrity: sha512-OacUF9sgR9JgQoD4wV11f95YNgloCeKrH8inkjQ8y2n4fBDFjpt1Wa+8Ry5AyDzM9X3/tOrCjCDesQp+v8MAqQ==} cpu: [ia32] os: [win32] - '@rolldown/binding-win32-x64-msvc@1.0.0-beta.8-commit.c76291c': - resolution: {integrity: sha512-5ndBU5nWh1lC0IB8k7jqqTN9T4JSvZjsGyAojcS8chmzIWG3q8XiuzYS8ohk7OYy4Suy9n8VTtBGLcz8K00Q9g==} + '@rolldown/binding-win32-x64-msvc@1.0.0-beta.8-commit.360c072': + resolution: {integrity: sha512-zK6YMaXkTwrWcJnox/CzQWZdkPeEaLdyeLUB9UA0jU+1SrXd1UCtpiGCTuEbjuchjkBXoSwkYdYca+N6ELfUxA==} cpu: [x64] os: [win32] - '@rolldown/pluginutils@1.0.0-beta.9': - resolution: {integrity: sha512-e9MeMtVWo186sgvFFJOPGy7/d2j2mZhLJIdVW0C/xDluuOvymEATqz6zKsP0ZmXGzQtqlyjz5sC1sYQUoJG98w==} + '@rolldown/pluginutils@1.0.0-beta.8-commit.360c072': + resolution: {integrity: sha512-OI2A/nrQsAJKNdEbBqGUG2uWyFFdH4qmUfOKzrO8AZaRQqz0rvUVBL4r0gZRQenfMWxFslQoHgjT4Y94hYTd5A==} '@rollup/plugin-alias@5.1.1': resolution: {integrity: sha512-PR9zDb+rOzkRb2VD+EuKB7UC41vU5DIwZ5qqCpk0KJudcWAyi8rvYOhS7+L5aZCspw1stTViLgN5v6FF1p5cgQ==} @@ -2039,8 +2036,8 @@ packages: resolution: {integrity: sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==} engines: {node: '>=12'} - ansis@3.17.0: - resolution: {integrity: sha512-0qWUglt9JEqLFr3w1I1pbrChn1grhaiAR2ocX1PP/flRmxgtwTzPFFFnfIlD6aMOLQZgSuCRlidD70lvx8yhzg==} + ansis@4.0.0: + resolution: {integrity: sha512-P8nrHI1EyW9OfBt1X7hMSwGN2vwRuqHSKJAT1gbLWZRzDa24oHjYwGHvEgHeBepupzk878yS/HBZ0NMPYtbolw==} engines: {node: '>=14'} argparse@2.0.1: @@ -2807,68 +2804,68 @@ packages: resolution: {integrity: sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==} engines: {node: '>= 0.8.0'} - lightningcss-darwin-arm64@1.29.3: - resolution: {integrity: sha512-fb7raKO3pXtlNbQbiMeEu8RbBVHnpyqAoxTyTRMEWFQWmscGC2wZxoHzZ+YKAepUuKT9uIW5vL2QbFivTgprZg==} + lightningcss-darwin-arm64@1.30.1: + resolution: {integrity: sha512-c8JK7hyE65X1MHMN+Viq9n11RRC7hgin3HhYKhrMyaXflk5GVplZ60IxyoVtzILeKr+xAJwg6zK6sjTBJ0FKYQ==} engines: {node: '>= 12.0.0'} cpu: [arm64] os: [darwin] - lightningcss-darwin-x64@1.29.3: - resolution: {integrity: sha512-KF2XZ4ZdmDGGtEYmx5wpzn6u8vg7AdBHaEOvDKu8GOs7xDL/vcU2vMKtTeNe1d4dogkDdi3B9zC77jkatWBwEQ==} + lightningcss-darwin-x64@1.30.1: + resolution: {integrity: sha512-k1EvjakfumAQoTfcXUcHQZhSpLlkAuEkdMBsI/ivWw9hL+7FtilQc0Cy3hrx0AAQrVtQAbMI7YjCgYgvn37PzA==} engines: {node: '>= 12.0.0'} cpu: [x64] os: [darwin] - lightningcss-freebsd-x64@1.29.3: - resolution: {integrity: sha512-VUWeVf+V1UM54jv9M4wen9vMlIAyT69Krl9XjI8SsRxz4tdNV/7QEPlW6JASev/pYdiynUCW0pwaFquDRYdxMw==} + lightningcss-freebsd-x64@1.30.1: + resolution: {integrity: sha512-kmW6UGCGg2PcyUE59K5r0kWfKPAVy4SltVeut+umLCFoJ53RdCUWxcRDzO1eTaxf/7Q2H7LTquFHPL5R+Gjyig==} engines: {node: '>= 12.0.0'} cpu: [x64] os: [freebsd] - lightningcss-linux-arm-gnueabihf@1.29.3: - resolution: {integrity: sha512-UhgZ/XVNfXQVEJrMIWeK1Laj8KbhjbIz7F4znUk7G4zeGw7TRoJxhb66uWrEsonn1+O45w//0i0Fu0wIovYdYg==} + lightningcss-linux-arm-gnueabihf@1.30.1: + resolution: {integrity: sha512-MjxUShl1v8pit+6D/zSPq9S9dQ2NPFSQwGvxBCYaBYLPlCWuPh9/t1MRS8iUaR8i+a6w7aps+B4N0S1TYP/R+Q==} engines: {node: '>= 12.0.0'} cpu: [arm] os: [linux] - lightningcss-linux-arm64-gnu@1.29.3: - resolution: {integrity: sha512-Pqau7jtgJNmQ/esugfmAT1aCFy/Gxc92FOxI+3n+LbMHBheBnk41xHDhc0HeYlx9G0xP5tK4t0Koy3QGGNqypw==} + lightningcss-linux-arm64-gnu@1.30.1: + resolution: {integrity: sha512-gB72maP8rmrKsnKYy8XUuXi/4OctJiuQjcuqWNlJQ6jZiWqtPvqFziskH3hnajfvKB27ynbVCucKSm2rkQp4Bw==} engines: {node: '>= 12.0.0'} cpu: [arm64] os: [linux] - lightningcss-linux-arm64-musl@1.29.3: - resolution: {integrity: sha512-dxakOk66pf7KLS7VRYFO7B8WOJLecE5OPL2YOk52eriFd/yeyxt2Km5H0BjLfElokIaR+qWi33gB8MQLrdAY3A==} + lightningcss-linux-arm64-musl@1.30.1: + resolution: {integrity: sha512-jmUQVx4331m6LIX+0wUhBbmMX7TCfjF5FoOH6SD1CttzuYlGNVpA7QnrmLxrsub43ClTINfGSYyHe2HWeLl5CQ==} engines: {node: '>= 12.0.0'} cpu: [arm64] os: [linux] - lightningcss-linux-x64-gnu@1.29.3: - resolution: {integrity: sha512-ySZTNCpbfbK8rqpKJeJR2S0g/8UqqV3QnzcuWvpI60LWxnFN91nxpSSwCbzfOXkzKfar9j5eOuOplf+klKtINg==} + lightningcss-linux-x64-gnu@1.30.1: + resolution: {integrity: sha512-piWx3z4wN8J8z3+O5kO74+yr6ze/dKmPnI7vLqfSqI8bccaTGY5xiSGVIJBDd5K5BHlvVLpUB3S2YCfelyJ1bw==} engines: {node: '>= 12.0.0'} cpu: [x64] os: [linux] - lightningcss-linux-x64-musl@1.29.3: - resolution: {integrity: sha512-3pVZhIzW09nzi10usAXfIGTTSTYQ141dk88vGFNCgawIzayiIzZQxEcxVtIkdvlEq2YuFsL9Wcj/h61JHHzuFQ==} + lightningcss-linux-x64-musl@1.30.1: + resolution: {integrity: sha512-rRomAK7eIkL+tHY0YPxbc5Dra2gXlI63HL+v1Pdi1a3sC+tJTcFrHX+E86sulgAXeI7rSzDYhPSeHHjqFhqfeQ==} engines: {node: '>= 12.0.0'} cpu: [x64] os: [linux] - lightningcss-win32-arm64-msvc@1.29.3: - resolution: {integrity: sha512-VRnkAvtIkeWuoBJeGOTrZxsNp4HogXtcaaLm8agmbYtLDOhQdpgxW6NjZZjDXbvGF+eOehGulXZ3C1TiwHY4QQ==} + lightningcss-win32-arm64-msvc@1.30.1: + resolution: {integrity: sha512-mSL4rqPi4iXq5YVqzSsJgMVFENoa4nGTT/GjO2c0Yl9OuQfPsIfncvLrEW6RbbB24WtZ3xP/2CCmI3tNkNV4oA==} engines: {node: '>= 12.0.0'} cpu: [arm64] os: [win32] - lightningcss-win32-x64-msvc@1.29.3: - resolution: {integrity: sha512-IszwRPu2cPnDQsZpd7/EAr0x2W7jkaWqQ1SwCVIZ/tSbZVXPLt6k8s6FkcyBjViCzvB5CW0We0QbbP7zp2aBjQ==} + lightningcss-win32-x64-msvc@1.30.1: + resolution: {integrity: sha512-PVqXh48wh4T53F/1CCu8PIPCxLzWyCnn/9T5W1Jpmdy5h9Cwd+0YQS6/LwhHXSafuc61/xg9Lv5OrCby6a++jg==} engines: {node: '>= 12.0.0'} cpu: [x64] os: [win32] - lightningcss@1.29.3: - resolution: {integrity: sha512-GlOJwTIP6TMIlrTFsxTerwC0W6OpQpCGuX1ECRLBUVRh6fpJH3xTqjCjRgQHTb4ZXexH9rtHou1Lf03GKzmhhQ==} + lightningcss@1.30.1: + resolution: {integrity: sha512-xi6IyHML+c9+Q3W0S4fCQJOym42pyurFiJUHEcEyHS0CeKzia4yZDEsLlqOFykxOdHpNy0NmvVO31vcSqAxJCg==} engines: {node: '>= 12.0.0'} lilconfig@3.1.2: @@ -3569,9 +3566,9 @@ packages: rfdc@1.4.1: resolution: {integrity: sha512-q1b3N5QkRUWUl7iyylaaj3kOpIT0N2i9MqIEQXP73GVsN9cw3fdx8X63cEmWhJGi2PPCF23Ijp7ktmd39rawIA==} - rolldown-vite@https://pkg.pr.new/vitejs/rolldown-vite@107: - resolution: {tarball: https://pkg.pr.new/vitejs/rolldown-vite@107} - version: 6.3.8 + rolldown-vite@https://pkg.pr.new/vitejs/rolldown-vite@bdb70a9: + resolution: {tarball: https://pkg.pr.new/vitejs/rolldown-vite@bdb70a9} + version: 6.3.11 engines: {node: ^18.0.0 || ^20.0.0 || >=22.0.0} hasBin: true peerDependencies: @@ -3610,11 +3607,11 @@ packages: yaml: optional: true - rolldown@1.0.0-beta.8-commit.c76291c: - resolution: {integrity: sha512-zjspfhO4u5+v9fiS+Om9DnpCrmq7jdTusu5x+un2oxqpHY2Ds6IllZFmgvAx48X4H9EYmJJ0YJHD6ruW5SX5EQ==} + rolldown@1.0.0-beta.8-commit.360c072: + resolution: {integrity: sha512-ibe5NIXijWbf28iRrZ0CfquYJAW9lKP88926obVFv3PY8TvAqBxWDeFQEvxupUSIFKJhcqPBtVDxzx/e2GQIYw==} hasBin: true peerDependencies: - '@oxc-project/runtime': 0.68.1 + '@oxc-project/runtime': 0.70.0 peerDependenciesMeta: '@oxc-project/runtime': optional: true @@ -4618,8 +4615,12 @@ snapshots: generouted: 1.20.0(@types/node@22.15.2)(esbuild@0.25.3)(jiti@2.4.2)(react-router-dom@7.5.2(react-dom@19.1.0(react@19.1.0))(react@19.1.0))(react@19.1.0)(tsx@4.19.3)(yaml@2.7.1) react: 19.1.0 react-router: 7.5.2(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - vite: rolldown-vite@https://pkg.pr.new/vitejs/rolldown-vite@107(@types/node@22.15.2)(esbuild@0.25.3)(jiti@2.4.2)(tsx@4.19.3)(yaml@2.7.1) + vite: rolldown-vite@https://pkg.pr.new/vitejs/rolldown-vite@bdb70a9(@types/node@22.15.2)(esbuild@0.25.3)(jiti@2.4.2)(tsx@4.19.3)(yaml@2.7.1) transitivePeerDependencies: + - '@types/node' + - esbuild + - jiti + - less - '@types/node' - esbuild - jiti @@ -4632,6 +4633,13 @@ snapshots: - terser - tsx - yaml + - sass + - sass-embedded + - stylus + - sugarss + - terser + - tsx + - yaml '@humanfs/core@0.19.1': {} @@ -4720,9 +4728,9 @@ snapshots: '@nodelib/fs.scandir': 2.1.5 fastq: 1.15.0 - '@oxc-project/runtime@0.68.1': {} + '@oxc-project/runtime@0.70.0': {} - '@oxc-project/types@0.68.1': {} + '@oxc-project/types@0.70.0': {} '@playwright/test@1.52.0': dependencies: @@ -4730,45 +4738,46 @@ snapshots: '@publint/pack@0.1.2': {} - '@rolldown/binding-darwin-arm64@1.0.0-beta.8-commit.c76291c': + '@rolldown/binding-darwin-arm64@1.0.0-beta.8-commit.360c072': optional: true - '@rolldown/binding-darwin-x64@1.0.0-beta.8-commit.c76291c': + '@rolldown/binding-darwin-x64@1.0.0-beta.8-commit.360c072': optional: true - '@rolldown/binding-freebsd-x64@1.0.0-beta.8-commit.c76291c': + '@rolldown/binding-freebsd-x64@1.0.0-beta.8-commit.360c072': optional: true - '@rolldown/binding-linux-arm-gnueabihf@1.0.0-beta.8-commit.c76291c': + '@rolldown/binding-linux-arm-gnueabihf@1.0.0-beta.8-commit.360c072': optional: true - '@rolldown/binding-linux-arm64-gnu@1.0.0-beta.8-commit.c76291c': + '@rolldown/binding-linux-arm64-gnu@1.0.0-beta.8-commit.360c072': optional: true - '@rolldown/binding-linux-arm64-musl@1.0.0-beta.8-commit.c76291c': + '@rolldown/binding-linux-arm64-musl@1.0.0-beta.8-commit.360c072': optional: true - '@rolldown/binding-linux-x64-gnu@1.0.0-beta.8-commit.c76291c': + '@rolldown/binding-linux-x64-gnu@1.0.0-beta.8-commit.360c072': optional: true - '@rolldown/binding-linux-x64-musl@1.0.0-beta.8-commit.c76291c': + '@rolldown/binding-linux-x64-musl@1.0.0-beta.8-commit.360c072': optional: true - '@rolldown/binding-wasm32-wasi@1.0.0-beta.8-commit.c76291c': + '@rolldown/binding-wasm32-wasi@1.0.0-beta.8-commit.360c072': dependencies: '@napi-rs/wasm-runtime': 0.2.9 + '@napi-rs/wasm-runtime': 0.2.9 optional: true - '@rolldown/binding-win32-arm64-msvc@1.0.0-beta.8-commit.c76291c': + '@rolldown/binding-win32-arm64-msvc@1.0.0-beta.8-commit.360c072': optional: true - '@rolldown/binding-win32-ia32-msvc@1.0.0-beta.8-commit.c76291c': + '@rolldown/binding-win32-ia32-msvc@1.0.0-beta.8-commit.360c072': optional: true - '@rolldown/binding-win32-x64-msvc@1.0.0-beta.8-commit.c76291c': + '@rolldown/binding-win32-x64-msvc@1.0.0-beta.8-commit.360c072': optional: true - '@rolldown/pluginutils@1.0.0-beta.9': {} + '@rolldown/pluginutils@1.0.0-beta.8-commit.360c072': {} '@rollup/plugin-alias@5.1.1(rollup@4.37.0)': optionalDependencies: @@ -5204,13 +5213,13 @@ snapshots: chai: 5.2.0 tinyrainbow: 2.0.0 - '@vitest/mocker@3.1.2(vite@6.3.3(@types/node@22.15.2)(jiti@2.4.2)(lightningcss@1.29.3)(tsx@4.19.3)(yaml@2.7.1))': + '@vitest/mocker@3.1.2(vite@6.3.3(@types/node@22.15.2)(jiti@2.4.2)(lightningcss@1.30.1)(tsx@4.19.3)(yaml@2.7.1))': dependencies: '@vitest/spy': 3.1.2 estree-walker: 3.0.3 magic-string: 0.30.17 optionalDependencies: - vite: 6.3.3(@types/node@22.15.2)(jiti@2.4.2)(lightningcss@1.29.3)(tsx@4.19.3)(yaml@2.7.1) + vite: 6.3.3(@types/node@22.15.2)(jiti@2.4.2)(lightningcss@1.30.1)(tsx@4.19.3)(yaml@2.7.1) '@vitest/pretty-format@3.1.2': dependencies: @@ -5262,7 +5271,7 @@ snapshots: ansi-styles@6.2.1: {} - ansis@3.17.0: {} + ansis@4.0.0: {} argparse@2.0.1: {} @@ -5923,7 +5932,7 @@ snapshots: dependencies: react: 19.1.0 react-router-dom: 7.5.2(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - vite: rolldown-vite@https://pkg.pr.new/vitejs/rolldown-vite@107(@types/node@22.15.2)(esbuild@0.25.3)(jiti@2.4.2)(tsx@4.19.3)(yaml@2.7.1) + vite: rolldown-vite@https://pkg.pr.new/vitejs/rolldown-vite@bdb70a9(@types/node@22.15.2)(esbuild@0.25.3)(jiti@2.4.2)(tsx@4.19.3)(yaml@2.7.1) transitivePeerDependencies: - '@types/node' - esbuild @@ -5941,7 +5950,7 @@ snapshots: dependencies: react: 19.1.0 react-router-dom: 7.5.2(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - vite: rolldown-vite@https://pkg.pr.new/vitejs/rolldown-vite@107(@types/node@22.15.2)(esbuild@0.25.3)(jiti@2.4.2)(tsx@4.19.3)(yaml@2.7.1) + vite: rolldown-vite@https://pkg.pr.new/vitejs/rolldown-vite@bdb70a9(@types/node@22.15.2)(esbuild@0.25.3)(jiti@2.4.2)(tsx@4.19.3)(yaml@2.7.1) transitivePeerDependencies: - '@types/node' - esbuild @@ -6154,50 +6163,50 @@ snapshots: prelude-ls: 1.2.1 type-check: 0.4.0 - lightningcss-darwin-arm64@1.29.3: + lightningcss-darwin-arm64@1.30.1: optional: true - lightningcss-darwin-x64@1.29.3: + lightningcss-darwin-x64@1.30.1: optional: true - lightningcss-freebsd-x64@1.29.3: + lightningcss-freebsd-x64@1.30.1: optional: true - lightningcss-linux-arm-gnueabihf@1.29.3: + lightningcss-linux-arm-gnueabihf@1.30.1: optional: true - lightningcss-linux-arm64-gnu@1.29.3: + lightningcss-linux-arm64-gnu@1.30.1: optional: true - lightningcss-linux-arm64-musl@1.29.3: + lightningcss-linux-arm64-musl@1.30.1: optional: true - lightningcss-linux-x64-gnu@1.29.3: + lightningcss-linux-x64-gnu@1.30.1: optional: true - lightningcss-linux-x64-musl@1.29.3: + lightningcss-linux-x64-musl@1.30.1: optional: true - lightningcss-win32-arm64-msvc@1.29.3: + lightningcss-win32-arm64-msvc@1.30.1: optional: true - lightningcss-win32-x64-msvc@1.29.3: + lightningcss-win32-x64-msvc@1.30.1: optional: true - lightningcss@1.29.3: + lightningcss@1.30.1: dependencies: detect-libc: 2.0.4 optionalDependencies: - lightningcss-darwin-arm64: 1.29.3 - lightningcss-darwin-x64: 1.29.3 - lightningcss-freebsd-x64: 1.29.3 - lightningcss-linux-arm-gnueabihf: 1.29.3 - lightningcss-linux-arm64-gnu: 1.29.3 - lightningcss-linux-arm64-musl: 1.29.3 - lightningcss-linux-x64-gnu: 1.29.3 - lightningcss-linux-x64-musl: 1.29.3 - lightningcss-win32-arm64-msvc: 1.29.3 - lightningcss-win32-x64-msvc: 1.29.3 + lightningcss-darwin-arm64: 1.30.1 + lightningcss-darwin-x64: 1.30.1 + lightningcss-freebsd-x64: 1.30.1 + lightningcss-linux-arm-gnueabihf: 1.30.1 + lightningcss-linux-arm64-gnu: 1.30.1 + lightningcss-linux-arm64-musl: 1.30.1 + lightningcss-linux-x64-gnu: 1.30.1 + lightningcss-linux-x64-musl: 1.30.1 + lightningcss-win32-arm64-msvc: 1.30.1 + lightningcss-win32-x64-msvc: 1.30.1 lilconfig@3.1.2: {} @@ -7072,14 +7081,14 @@ snapshots: rfdc@1.4.1: {} - rolldown-vite@https://pkg.pr.new/vitejs/rolldown-vite@107(@types/node@22.15.2)(esbuild@0.25.3)(jiti@2.4.2)(tsx@4.19.3)(yaml@2.7.1): + rolldown-vite@https://pkg.pr.new/vitejs/rolldown-vite@bdb70a9(@types/node@22.15.2)(esbuild@0.25.3)(jiti@2.4.2)(tsx@4.19.3)(yaml@2.7.1): dependencies: - '@oxc-project/runtime': 0.68.1 + '@oxc-project/runtime': 0.70.0 fdir: 6.4.4(picomatch@4.0.2) - lightningcss: 1.29.3 + lightningcss: 1.30.1 picomatch: 4.0.2 postcss: 8.5.3 - rolldown: 1.0.0-beta.8-commit.c76291c(@oxc-project/runtime@0.68.1) + rolldown: 1.0.0-beta.8-commit.360c072(@oxc-project/runtime@0.70.0) tinyglobby: 0.2.13 optionalDependencies: '@types/node': 22.15.2 @@ -7089,24 +7098,25 @@ snapshots: tsx: 4.19.3 yaml: 2.7.1 - rolldown@1.0.0-beta.8-commit.c76291c(@oxc-project/runtime@0.68.1): + rolldown@1.0.0-beta.8-commit.360c072(@oxc-project/runtime@0.70.0): dependencies: - '@oxc-project/types': 0.68.1 - ansis: 3.17.0 + '@oxc-project/types': 0.70.0 + '@rolldown/pluginutils': 1.0.0-beta.8-commit.360c072 + ansis: 4.0.0 optionalDependencies: - '@oxc-project/runtime': 0.68.1 - '@rolldown/binding-darwin-arm64': 1.0.0-beta.8-commit.c76291c - '@rolldown/binding-darwin-x64': 1.0.0-beta.8-commit.c76291c - '@rolldown/binding-freebsd-x64': 1.0.0-beta.8-commit.c76291c - '@rolldown/binding-linux-arm-gnueabihf': 1.0.0-beta.8-commit.c76291c - '@rolldown/binding-linux-arm64-gnu': 1.0.0-beta.8-commit.c76291c - '@rolldown/binding-linux-arm64-musl': 1.0.0-beta.8-commit.c76291c - '@rolldown/binding-linux-x64-gnu': 1.0.0-beta.8-commit.c76291c - '@rolldown/binding-linux-x64-musl': 1.0.0-beta.8-commit.c76291c - '@rolldown/binding-wasm32-wasi': 1.0.0-beta.8-commit.c76291c - '@rolldown/binding-win32-arm64-msvc': 1.0.0-beta.8-commit.c76291c - '@rolldown/binding-win32-ia32-msvc': 1.0.0-beta.8-commit.c76291c - '@rolldown/binding-win32-x64-msvc': 1.0.0-beta.8-commit.c76291c + '@oxc-project/runtime': 0.70.0 + '@rolldown/binding-darwin-arm64': 1.0.0-beta.8-commit.360c072 + '@rolldown/binding-darwin-x64': 1.0.0-beta.8-commit.360c072 + '@rolldown/binding-freebsd-x64': 1.0.0-beta.8-commit.360c072 + '@rolldown/binding-linux-arm-gnueabihf': 1.0.0-beta.8-commit.360c072 + '@rolldown/binding-linux-arm64-gnu': 1.0.0-beta.8-commit.360c072 + '@rolldown/binding-linux-arm64-musl': 1.0.0-beta.8-commit.360c072 + '@rolldown/binding-linux-x64-gnu': 1.0.0-beta.8-commit.360c072 + '@rolldown/binding-linux-x64-musl': 1.0.0-beta.8-commit.360c072 + '@rolldown/binding-wasm32-wasi': 1.0.0-beta.8-commit.360c072 + '@rolldown/binding-win32-arm64-msvc': 1.0.0-beta.8-commit.360c072 + '@rolldown/binding-win32-ia32-msvc': 1.0.0-beta.8-commit.360c072 + '@rolldown/binding-win32-x64-msvc': 1.0.0-beta.8-commit.360c072 rollup-plugin-dts@6.2.1(rollup@4.37.0)(typescript@5.8.3): dependencies: @@ -7484,10 +7494,11 @@ snapshots: debug: 4.4.0 es-module-lexer: 1.6.0 pathe: 2.0.3 - vite: rolldown-vite@https://pkg.pr.new/vitejs/rolldown-vite@107(@types/node@22.15.2)(esbuild@0.25.3)(jiti@2.4.2)(tsx@4.19.3)(yaml@2.7.1) + vite: rolldown-vite@https://pkg.pr.new/vitejs/rolldown-vite@bdb70a9(@types/node@22.15.2)(esbuild@0.25.3)(jiti@2.4.2)(tsx@4.19.3)(yaml@2.7.1) transitivePeerDependencies: - '@types/node' - esbuild + - esbuild - jiti - less - sass @@ -7499,7 +7510,7 @@ snapshots: - tsx - yaml - vite@6.3.3(@types/node@22.15.2)(jiti@2.4.2)(lightningcss@1.29.3)(tsx@4.19.3)(yaml@2.7.1): + vite@6.3.3(@types/node@22.15.2)(jiti@2.4.2)(lightningcss@1.30.1)(tsx@4.19.3)(yaml@2.7.1): dependencies: esbuild: 0.25.3 fdir: 6.4.4(picomatch@4.0.2) @@ -7511,14 +7522,14 @@ snapshots: '@types/node': 22.15.2 fsevents: 2.3.3 jiti: 2.4.2 - lightningcss: 1.29.3 + lightningcss: 1.30.1 tsx: 4.19.3 yaml: 2.7.1 - vitest@3.1.2(@types/debug@4.1.12)(@types/node@22.15.2)(esbuild@0.25.3)(jiti@2.4.2)(lightningcss@1.29.3)(tsx@4.19.3)(yaml@2.7.1): + vitest@3.1.2(@types/debug@4.1.12)(@types/node@22.15.2)(esbuild@0.25.3)(jiti@2.4.2)(lightningcss@1.30.1)(tsx@4.19.3)(yaml@2.7.1): dependencies: '@vitest/expect': 3.1.2 - '@vitest/mocker': 3.1.2(vite@6.3.3(@types/node@22.15.2)(jiti@2.4.2)(lightningcss@1.29.3)(tsx@4.19.3)(yaml@2.7.1)) + '@vitest/mocker': 3.1.2(vite@6.3.3(@types/node@22.15.2)(jiti@2.4.2)(lightningcss@1.30.1)(tsx@4.19.3)(yaml@2.7.1)) '@vitest/pretty-format': 3.1.2 '@vitest/runner': 3.1.2 '@vitest/snapshot': 3.1.2 @@ -7535,7 +7546,7 @@ snapshots: tinyglobby: 0.2.13 tinypool: 1.0.2 tinyrainbow: 2.0.0 - vite: 6.3.3(@types/node@22.15.2)(jiti@2.4.2)(lightningcss@1.29.3)(tsx@4.19.3)(yaml@2.7.1) + vite: 6.3.3(@types/node@22.15.2)(jiti@2.4.2)(lightningcss@1.30.1)(tsx@4.19.3)(yaml@2.7.1) vite-node: 3.1.2(@types/node@22.15.2)(esbuild@0.25.3)(jiti@2.4.2)(tsx@4.19.3)(yaml@2.7.1) why-is-node-running: 2.3.0 optionalDependencies: From 83415aff5be8bb9cbf64b09ca1205fe916ba6270 Mon Sep 17 00:00:00 2001 From: underfin Date: Mon, 19 May 2025 17:34:46 +0800 Subject: [PATCH 07/25] chore: fix test command --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index b1666aaa0..c8a30de5b 100644 --- a/package.json +++ b/package.json @@ -21,7 +21,7 @@ "format": "prettier --write --cache .", "lint": "eslint --cache .", "typecheck": "tsc -p scripts && tsc -p playground && tsc -p packages/plugin-react", - "test": "pnpm run test-serve && pnpm run test-build && pnpm --filter ./packages/plugin-react-swc run test && npm run test-full-bundle-mode-serve", + "test": "pnpm run test-serve && pnpm run test-build && pnpm --filter ./packages/plugin-react-swc run test && npm run test-full-bundle-mode", "test-serve": "vitest run -c playground/vitest.config.e2e.ts", "test-full-bundle-mode": "VITE_TEST_FULL_BUNDLE_MODE=1 vitest run -c playground/vitest.config.e2e.ts", "test-build": "VITE_TEST_BUILD=1 vitest run -c playground/vitest.config.e2e.ts", From 6dedd47fd990bed09df2c8dc3f1df188f2d7e96e Mon Sep 17 00:00:00 2001 From: underfin Date: Thu, 22 May 2025 10:43:36 +0800 Subject: [PATCH 08/25] fix: update lock --- pnpm-lock.yaml | 22 ++++++++-------------- 1 file changed, 8 insertions(+), 14 deletions(-) diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 9d3d87b48..13a7e6348 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -114,6 +114,9 @@ importers: packages/plugin-react-oxc: dependencies: + '@rolldown/pluginutils': + specifier: 1.0.0-beta.9 + version: 1.0.0-beta.9 vite: specifier: https://pkg.pr.new/vitejs/rolldown-vite@bdb70a9 version: rolldown-vite@https://pkg.pr.new/vitejs/rolldown-vite@bdb70a9(@types/node@22.15.2)(esbuild@0.25.3)(jiti@2.4.2)(tsx@4.19.3)(yaml@2.7.1) @@ -1497,6 +1500,9 @@ packages: '@rolldown/pluginutils@1.0.0-beta.8-commit.360c072': resolution: {integrity: sha512-OI2A/nrQsAJKNdEbBqGUG2uWyFFdH4qmUfOKzrO8AZaRQqz0rvUVBL4r0gZRQenfMWxFslQoHgjT4Y94hYTd5A==} + '@rolldown/pluginutils@1.0.0-beta.9': + resolution: {integrity: sha512-e9MeMtVWo186sgvFFJOPGy7/d2j2mZhLJIdVW0C/xDluuOvymEATqz6zKsP0ZmXGzQtqlyjz5sC1sYQUoJG98w==} + '@rollup/plugin-alias@5.1.1': resolution: {integrity: sha512-PR9zDb+rOzkRb2VD+EuKB7UC41vU5DIwZ5qqCpk0KJudcWAyi8rvYOhS7+L5aZCspw1stTViLgN5v6FF1p5cgQ==} engines: {node: '>=14.0.0'} @@ -1723,7 +1729,6 @@ packages: '@swc/core@1.11.22': resolution: {integrity: sha512-mjPYbqq8XjwqSE0hEPT9CzaJDyxql97LgK4iyvYlwVSQhdN1uK0DBG4eP9PxYzCS2MUGAXB34WFLegdUj5HGpg==} engines: {node: '>=10'} - deprecated: It has a bug. See https://github.com/swc-project/swc/issues/10413 peerDependencies: '@swc/helpers': '>=0.5.17' peerDependenciesMeta: @@ -4617,10 +4622,6 @@ snapshots: react-router: 7.5.2(react-dom@19.1.0(react@19.1.0))(react@19.1.0) vite: rolldown-vite@https://pkg.pr.new/vitejs/rolldown-vite@bdb70a9(@types/node@22.15.2)(esbuild@0.25.3)(jiti@2.4.2)(tsx@4.19.3)(yaml@2.7.1) transitivePeerDependencies: - - '@types/node' - - esbuild - - jiti - - less - '@types/node' - esbuild - jiti @@ -4633,13 +4634,6 @@ snapshots: - terser - tsx - yaml - - sass - - sass-embedded - - stylus - - sugarss - - terser - - tsx - - yaml '@humanfs/core@0.19.1': {} @@ -4765,7 +4759,6 @@ snapshots: '@rolldown/binding-wasm32-wasi@1.0.0-beta.8-commit.360c072': dependencies: '@napi-rs/wasm-runtime': 0.2.9 - '@napi-rs/wasm-runtime': 0.2.9 optional: true '@rolldown/binding-win32-arm64-msvc@1.0.0-beta.8-commit.360c072': @@ -4779,6 +4772,8 @@ snapshots: '@rolldown/pluginutils@1.0.0-beta.8-commit.360c072': {} + '@rolldown/pluginutils@1.0.0-beta.9': {} + '@rollup/plugin-alias@5.1.1(rollup@4.37.0)': optionalDependencies: rollup: 4.37.0 @@ -7498,7 +7493,6 @@ snapshots: transitivePeerDependencies: - '@types/node' - esbuild - - esbuild - jiti - less - sass From 658572aea3371f607840f48f2a879ddec7b662cc Mon Sep 17 00:00:00 2001 From: underfin Date: Thu, 22 May 2025 10:48:43 +0800 Subject: [PATCH 09/25] fix: add test-full-bundle-mode in ci --- .github/workflows/ci.yml | 3 +++ 1 file changed, 3 insertions(+) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index cc6104cac..7734c4ff7 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -87,6 +87,9 @@ jobs: - name: Test serve run: pnpm run test-serve + - name: Test full bundle mode serve + run: pnpm run test-full-bundle-mode + - name: Test build run: pnpm run test-build From 7101416771d2d45d98572a62672b3b3c14c791a4 Mon Sep 17 00:00:00 2001 From: underfin Date: Thu, 22 May 2025 15:56:05 +0800 Subject: [PATCH 10/25] chore: add advancedChunks reproduction --- playground/class-components/vite.config.ts | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/playground/class-components/vite.config.ts b/playground/class-components/vite.config.ts index c9a13540c..159c6abc9 100644 --- a/playground/class-components/vite.config.ts +++ b/playground/class-components/vite.config.ts @@ -4,4 +4,16 @@ import react from '@vitejs/plugin-react' export default defineConfig({ server: { port: 8908 /* Should be unique */ }, plugins: [react()], + build: { + rollupOptions: { + output: { + advancedChunks: { + groups: [ + { name: 'node-modules', test: 'node_modules' }, + { name: 'react', test: 'react' }, + ], + }, + }, + }, + }, }) From e15582db5db4b692d4f6cc6818e9a510c70e4587 Mon Sep 17 00:00:00 2001 From: underfin Date: Thu, 22 May 2025 18:48:09 +0800 Subject: [PATCH 11/25] chore: remove advancedChunks reproduction --- playground/class-components/vite.config.ts | 12 ------------ 1 file changed, 12 deletions(-) diff --git a/playground/class-components/vite.config.ts b/playground/class-components/vite.config.ts index 159c6abc9..c9a13540c 100644 --- a/playground/class-components/vite.config.ts +++ b/playground/class-components/vite.config.ts @@ -4,16 +4,4 @@ import react from '@vitejs/plugin-react' export default defineConfig({ server: { port: 8908 /* Should be unique */ }, plugins: [react()], - build: { - rollupOptions: { - output: { - advancedChunks: { - groups: [ - { name: 'node-modules', test: 'node_modules' }, - { name: 'react', test: 'react' }, - ], - }, - }, - }, - }, }) From 35967c0e3417cd9aeac5b62fabc1543927e12a9e Mon Sep 17 00:00:00 2001 From: sapphi-red <49056869+sapphi-red@users.noreply.github.com> Date: Fri, 13 Jun 2025 14:19:22 +0900 Subject: [PATCH 12/25] chore: add comments --- packages/common/refresh-runtime.js | 6 +++++- packages/common/refresh-utils.ts | 3 ++- packages/plugin-react-oxc/src/index.ts | 13 +++++++------ packages/plugin-react-swc/src/index.ts | 16 ++++++++-------- packages/plugin-react/src/index.ts | 10 +++++----- 5 files changed, 27 insertions(+), 21 deletions(-) diff --git a/packages/common/refresh-runtime.js b/packages/common/refresh-runtime.js index e28436354..5072457af 100644 --- a/packages/common/refresh-runtime.js +++ b/packages/common/refresh-runtime.js @@ -632,7 +632,11 @@ function predicateOnExport(ignoredExports, moduleExports, predicate) { for (const key in moduleExports) { if (key === '__esModule') continue if (ignoredExports.includes(key)) continue - // TODO: Not sure why need this. The esm module live binding always is getter, look like the browser is not. + // NOTE: this condition was added in https://github.com/vitejs/vite/pull/10239 + // this is needed to avoid triggering side effects in getters + // but this is not needed when `moduleExports` is an ESM module namespace + // also this is problematic for full-bundle mode because rolldown converts + // exports to getters for live bindings // const desc = Object.getOwnPropertyDescriptor(moduleExports, key) // if (desc && desc.get) return key if (!predicate(key, moduleExports[key])) return key diff --git a/packages/common/refresh-utils.ts b/packages/common/refresh-utils.ts index d7a9a1aa2..cd38666ac 100644 --- a/packages/common/refresh-utils.ts +++ b/packages/common/refresh-utils.ts @@ -81,7 +81,8 @@ const inWebWorker = typeof WorkerGlobalScope !== 'undefined' && self instanceof newCode = `${sharedHead}${newCode} if (import.meta.hot && !inWebWorker) { - import.meta.hot.getExports(import.meta.url).then((currentExports) => { + // NOTE: import(import.meta.url) does not work in full-bundle mode + import.meta.hot.getExports().then((currentExports) => { RefreshRuntime.registerExportsForReactRefresh(${JSON.stringify( id, )}, currentExports); diff --git a/packages/plugin-react-oxc/src/index.ts b/packages/plugin-react-oxc/src/index.ts index 54e18b23c..ccc1dd89f 100644 --- a/packages/plugin-react-oxc/src/index.ts +++ b/packages/plugin-react-oxc/src/index.ts @@ -103,13 +103,15 @@ export default function viteReact(opts: Options = {}): PluginOption[] { } let skipFastRefresh = false - let base: string | undefined + let base: string + const viteRefreshWrapper: Plugin = { name: 'vite:react-oxc:refresh-wrapper', apply: 'serve', configResolved(config) { base = config.base skipFastRefresh = config.isProduction || config.server.hmr === false + base = config.base }, transform: { filter: { @@ -138,20 +140,19 @@ export default function viteReact(opts: Options = {}): PluginOption[] { }, }, transformIndexHtml: { + // TODO: maybe we can inject this to entrypoints instead of index.html? handler() { if (!skipFastRefresh) return [ { tag: 'script', attrs: { type: 'module' }, - // !!! Rolldown vite full bunlde module break changes, config.server is invalid - // children: getPreambleCode(config.server!.config.base), - children: getPreambleCode(base!), + children: getPreambleCode(base), }, ] }, - // Rolldown vite full bunlde module break changes. - // Changed it to make sure the inject module could be bundled + // In unbundled mode, Vite transforms any requests. + // But in full bundled mode, Vite only transforms / bundles the scripts injected in `order: 'pre'`. order: 'pre', }, } diff --git a/packages/plugin-react-swc/src/index.ts b/packages/plugin-react-swc/src/index.ts index 896e05ce4..3e98929c3 100644 --- a/packages/plugin-react-swc/src/index.ts +++ b/packages/plugin-react-swc/src/index.ts @@ -85,6 +85,7 @@ type Options = { const react = (_options?: Options): PluginOption[] => { let hmrDisabled = false + let base: string const options = { jsxImportSource: _options?.jsxImportSource ?? 'react', tsDecorators: _options?.tsDecorators, @@ -99,7 +100,6 @@ const react = (_options?: Options): PluginOption[] => { disableOxcRecommendation: _options?.disableOxcRecommendation, } - let base: string | undefined return [ { name: 'vite:react-swc:resolve-runtime', @@ -140,6 +140,8 @@ const react = (_options?: Options): PluginOption[] => { configResolved(config) { base = config.base if (config.server.hmr === false) hmrDisabled = true + base = config.base + const mdxIndex = config.plugins.findIndex( (p) => p.name === '@mdx-js/rollup', ) @@ -165,21 +167,19 @@ const react = (_options?: Options): PluginOption[] => { } }, transformIndexHtml: { + // TODO: maybe we can inject this to entrypoints instead of index.html? handler() { - if (!hmrDisabled) { + if (!hmrDisabled) return [ { tag: 'script', attrs: { type: 'module' }, - // !!! Rolldown vite full bunlde module break changes, config.server is invalid - // children: getPreambleCode(config.server!.config.base), - children: getPreambleCode(base!), + children: getPreambleCode(base), }, ] - } }, - // Rolldown vite full bunlde module break changes. - // Changed it to make sure the inject module could be bundled + // In unbundled mode, Vite transforms any requests. + // But in full bundled mode, Vite only transforms / bundles the scripts injected in `order: 'pre'`. order: 'pre', }, async transform(code, _id, transformOptions) { diff --git a/packages/plugin-react/src/index.ts b/packages/plugin-react/src/index.ts index c1e4c6e28..8d04c4806 100644 --- a/packages/plugin-react/src/index.ts +++ b/packages/plugin-react/src/index.ts @@ -121,6 +121,7 @@ export default function viteReact(opts: Options = {}): PluginOption[] { let isProduction = true let projectRoot = process.cwd() let skipFastRefresh = false + let base: string let runPluginOverrides: | ((options: ReactBabelOptions, context: ReactBabelHookContext) => void) | undefined @@ -382,20 +383,19 @@ export default function viteReact(opts: Options = {}): PluginOption[] { }, }, transformIndexHtml: { + // TODO: maybe we can inject this to entrypoints instead of index.html? handler() { if (!skipFastRefresh) return [ { tag: 'script', attrs: { type: 'module' }, - // !!! Rolldown vite full bunlde module break changes, config.server is invalid - // children: getPreambleCode(config.server!.config.base), - children: getPreambleCode(base!), + children: getPreambleCode(base), }, ] }, - // Rolldown vite full bunlde module break changes. - // Changed it to make sure the inject module could be bundled + // In unbundled mode, Vite transforms any requests. + // But in full bundled mode, Vite only transforms / bundles the scripts injected in `order: 'pre'`. order: 'pre', }, } From ccfcb28d8d49d2c4191cc7107d9d95723a470ef9 Mon Sep 17 00:00:00 2001 From: sapphi-red <49056869+sapphi-red@users.noreply.github.com> Date: Fri, 13 Jun 2025 14:21:40 +0900 Subject: [PATCH 13/25] chore: fix merge error --- packages/plugin-react/src/index.ts | 1 - 1 file changed, 1 deletion(-) diff --git a/packages/plugin-react/src/index.ts b/packages/plugin-react/src/index.ts index 8d04c4806..1a23736a1 100644 --- a/packages/plugin-react/src/index.ts +++ b/packages/plugin-react/src/index.ts @@ -126,7 +126,6 @@ export default function viteReact(opts: Options = {}): PluginOption[] { | ((options: ReactBabelOptions, context: ReactBabelHookContext) => void) | undefined let staticBabelOptions: ReactBabelOptions | undefined - let base: string | undefined // Support patterns like: // - import * as React from 'react'; // - import React from 'react'; From 706a033f881f74058dfe13f0d7d376b02f6d6d64 Mon Sep 17 00:00:00 2001 From: sapphi-red <49056869+sapphi-red@users.noreply.github.com> Date: Tue, 15 Jul 2025 12:00:35 +0900 Subject: [PATCH 14/25] chore: fix merge --- pnpm-workspace.yaml | 2 ++ 1 file changed, 2 insertions(+) diff --git a/pnpm-workspace.yaml b/pnpm-workspace.yaml index ee699e693..bd413513b 100644 --- a/pnpm-workspace.yaml +++ b/pnpm-workspace.yaml @@ -10,3 +10,5 @@ catalogs: overrides: '@types/estree': ^1.0.8 + 'vitest>vite': npm:vite@^6.2.6 + 'vite': https://pkg.pr.new/vitejs/rolldown-vite@bdb70a9 From a1b5b1962c4682783125d6f60cda8ec2db7c61c6 Mon Sep 17 00:00:00 2001 From: sapphi-red <49056869+sapphi-red@users.noreply.github.com> Date: Thu, 31 Jul 2025 10:55:09 +0900 Subject: [PATCH 15/25] chore: remove unneeded diff --- packages/plugin-react-oxc/src/index.ts | 1 - packages/plugin-react-swc/src/index.ts | 1 - 2 files changed, 2 deletions(-) diff --git a/packages/plugin-react-oxc/src/index.ts b/packages/plugin-react-oxc/src/index.ts index 0c080c4fe..2eec08d5a 100644 --- a/packages/plugin-react-oxc/src/index.ts +++ b/packages/plugin-react-oxc/src/index.ts @@ -124,7 +124,6 @@ export default function viteReact(opts: Options = {}): Plugin[] { configResolved(config) { base = config.base skipFastRefresh = config.isProduction || config.server.hmr === false - base = config.base }, transform: { filter: { diff --git a/packages/plugin-react-swc/src/index.ts b/packages/plugin-react-swc/src/index.ts index 6da46ec17..3533ad2ab 100644 --- a/packages/plugin-react-swc/src/index.ts +++ b/packages/plugin-react-swc/src/index.ts @@ -140,7 +140,6 @@ const react = (_options?: Options): Plugin[] => { configResolved(config) { base = config.base if (config.server.hmr === false) hmrDisabled = true - base = config.base const mdxIndex = config.plugins.findIndex( (p) => p.name === '@mdx-js/rollup', From ae697dd95739803ca3c107a7d28cbe07be4a5eef Mon Sep 17 00:00:00 2001 From: sapphi-red <49056869+sapphi-red@users.noreply.github.com> Date: Thu, 21 Aug 2025 11:20:21 +0900 Subject: [PATCH 16/25] refactor: use self import --- packages/common/refresh-utils.ts | 21 ++++++++++----------- 1 file changed, 10 insertions(+), 11 deletions(-) diff --git a/packages/common/refresh-utils.ts b/packages/common/refresh-utils.ts index cd38666ac..ed9a44c97 100644 --- a/packages/common/refresh-utils.ts +++ b/packages/common/refresh-utils.ts @@ -80,19 +80,18 @@ const inWebWorker = typeof WorkerGlobalScope !== 'undefined' && self instanceof newCode = `${sharedHead}${newCode} +import * as __vite_react_currentExports from ${JSON.stringify(id)}; if (import.meta.hot && !inWebWorker) { - // NOTE: import(import.meta.url) does not work in full-bundle mode - import.meta.hot.getExports().then((currentExports) => { - RefreshRuntime.registerExportsForReactRefresh(${JSON.stringify( + const currentExports = __vite_react_currentExports + RefreshRuntime.registerExportsForReactRefresh(${JSON.stringify( + id, + )}, currentExports); + import.meta.hot.accept((nextExports) => { + if (!nextExports) return; + const invalidateMessage = RefreshRuntime.validateRefreshBoundaryAndEnqueueUpdate(${JSON.stringify( id, - )}, currentExports); - import.meta.hot.accept((nextExports) => { - if (!nextExports) return; - const invalidateMessage = RefreshRuntime.validateRefreshBoundaryAndEnqueueUpdate(${JSON.stringify( - id, - )}, currentExports, nextExports); - if (invalidateMessage) import.meta.hot.invalidate(invalidateMessage); - }); + )}, currentExports, nextExports); + if (invalidateMessage) import.meta.hot.invalidate(invalidateMessage); }); } ` From 8184a2330f6b5b857eea7844c955e2cc2a407b4e Mon Sep 17 00:00:00 2001 From: sapphi-red <49056869+sapphi-red@users.noreply.github.com> Date: Thu, 28 Aug 2025 20:55:26 +0900 Subject: [PATCH 17/25] test: make tests pass --- package.json | 1 + .../__tests__/class-components.spec.ts | 16 +- .../hmr-false/__tests__/hmr-false.spec.ts | 11 +- .../__tests__/hook-with-jsx.spec.ts | 8 +- .../__tests__/node-modules-include.spec.ts | 4 +- playground/mdx/__tests__/mdx.spec.ts | 25 +-- .../react-classic/__tests__/react.spec.ts | 24 +-- .../react-emotion/__tests__/react.spec.ts | 6 +- playground/react-env/__tests__/react.spec.ts | 2 +- playground/react/__tests__/react.spec.ts | 178 ++++++++++-------- playground/vitest.config.e2e.ts | 23 +-- 11 files changed, 160 insertions(+), 138 deletions(-) diff --git a/package.json b/package.json index c03713b4d..e89a8f1e5 100644 --- a/package.json +++ b/package.json @@ -28,6 +28,7 @@ "test-build": "VITE_TEST_BUILD=1 vitest run -c playground/vitest.config.e2e.ts", "debug-serve": "VITE_DEBUG_SERVE=1 vitest run -c playground/vitest.config.e2e.ts", "debug-build": "VITE_TEST_BUILD=1 VITE_PRESERVE_BUILD_ARTIFACTS=1 vitest run -c playground/vitest.config.e2e.ts", + "debug-full-bundle-mode": "VITE_DEBUG_SERVE=1 VITE_PRESERVE_BUILD_ARTIFACTS=1 VITE_TEST_FULL_BUNDLE_MODE=1 vitest run -c playground/vitest.config.e2e.ts", "build": "pnpm -r --filter='./packages/*' run build", "dev": "pnpm -r --parallel --filter='./packages/*' run dev", "release": "node scripts/release.ts", diff --git a/playground/class-components/__tests__/class-components.spec.ts b/playground/class-components/__tests__/class-components.spec.ts index 8ebb42c84..27a3710e4 100644 --- a/playground/class-components/__tests__/class-components.spec.ts +++ b/playground/class-components/__tests__/class-components.spec.ts @@ -8,19 +8,19 @@ test('should render', async () => { if (isServe) { test('Class component HMR', async () => { editFile('src/App.tsx', (code) => code.replace('World', 'class components')) - await untilBrowserLogAfter( - () => page.textContent('span'), - '[vite] hot updated: /src/App.tsx', - ) + // await untilBrowserLogAfter( + // () => page.textContent('span'), + // '[vite] hot updated: /src/App.tsx', + // ) await expect .poll(() => page.textContent('span')) .toMatch('Hello class components') editFile('src/utils.tsx', (code) => code.replace('Hello', 'Hi')) - await untilBrowserLogAfter( - () => page.textContent('span'), - '[vite] hot updated: /src/App.tsx', - ) + // await untilBrowserLogAfter( + // () => page.textContent('span'), + // '[vite] hot updated: /src/App.tsx', + // ) await expect .poll(() => page.textContent('span')) .toMatch('Hi class components') diff --git a/playground/hmr-false/__tests__/hmr-false.spec.ts b/playground/hmr-false/__tests__/hmr-false.spec.ts index 0301085b2..f20d64c8c 100644 --- a/playground/hmr-false/__tests__/hmr-false.spec.ts +++ b/playground/hmr-false/__tests__/hmr-false.spec.ts @@ -1,8 +1,17 @@ import { expect, test } from 'vitest' import { page } from '~utils' -test('basic', async () => { +test.skipIf(process.env.VITE_TEST_FULL_BUNDLE_MODE)('basic', async () => { expect(await page.textContent('button')).toMatch('count is 0') expect(await page.click('button')) expect(await page.textContent('button')).toMatch('count is 1') }) + +/* + Need to fix the following scenario: + + 1. the loading page is opened + 2. the build finishes successfully and the reload event is sent + 3. WS connection is established on the loading page + 4. No reload happens because the reload event is already sent +*/ diff --git a/playground/hook-with-jsx/__tests__/hook-with-jsx.spec.ts b/playground/hook-with-jsx/__tests__/hook-with-jsx.spec.ts index a07c15092..196937b3c 100644 --- a/playground/hook-with-jsx/__tests__/hook-with-jsx.spec.ts +++ b/playground/hook-with-jsx/__tests__/hook-with-jsx.spec.ts @@ -12,10 +12,10 @@ if (isServe) { editFile('src/useButtonHook.tsx', (code) => code.replace('count is {count}', 'count is {count}!'), ) - await untilBrowserLogAfter( - () => page.textContent('button'), - '[vite] hot updated: /src/App.tsx', - ) + // await untilBrowserLogAfter( + // () => page.textContent('button'), + // '[vite] hot updated: /src/App.tsx', + // ) await expect.poll(() => page.textContent('button')).toMatch('count is 1!') }) } diff --git a/playground/include-node-modules/__tests__/node-modules-include.spec.ts b/playground/include-node-modules/__tests__/node-modules-include.spec.ts index 0debee0a4..de6284ee3 100644 --- a/playground/include-node-modules/__tests__/node-modules-include.spec.ts +++ b/playground/include-node-modules/__tests__/node-modules-include.spec.ts @@ -2,7 +2,9 @@ import { expect, test } from 'vitest' import { page } from '~utils' test('should render', async () => { - expect(await page.textContent('h1')).toMatch('Node Modules Include Test') + await expect + .poll(() => page.textContent('h1')) + .toMatch('Node Modules Include Test') }) test('babel should run on files in node_modules', async () => { diff --git a/playground/mdx/__tests__/mdx.spec.ts b/playground/mdx/__tests__/mdx.spec.ts index 12a510613..9e24c02f5 100644 --- a/playground/mdx/__tests__/mdx.spec.ts +++ b/playground/mdx/__tests__/mdx.spec.ts @@ -2,7 +2,7 @@ import { expect, test } from 'vitest' import { editFile, isServe, page, untilBrowserLogAfter } from '~utils' test('should render', async () => { - expect(await page.textContent('h1')).toMatch('Vite + MDX') + await expect.poll(() => page.textContent('h1')).toMatch('Vite + MDX') }) test('.md extension should work', async () => { @@ -14,21 +14,24 @@ test('.md extension should work', async () => { if (isServe) { test('should hmr', async () => { editFile('src/demo.mdx', (code) => code.replace('Vite + MDX', 'Updated')) - await untilBrowserLogAfter( - () => page.textContent('h1'), - '[vite] hot updated: /src/demo.mdx', - ) + // await untilBrowserLogAfter( + // () => page.textContent('h1'), + // '[vite] hot updated: /src/demo.mdx', + // ) await expect.poll(() => page.textContent('h1')).toMatch('Updated') }) test('should hmr with .md extension', async () => { - await untilBrowserLogAfter( - () => - editFile('src/demo2.md', (code) => - code.replace('`.md` extension works.', '`.md` extension hmr works.'), - ), - '[vite] hot updated: /src/demo2.md', + editFile('src/demo2.md', (code) => + code.replace('`.md` extension works.', '`.md` extension hmr works.'), ) + // await untilBrowserLogAfter( + // () => + // editFile('src/demo2.md', (code) => + // code.replace('`.md` extension works.', '`.md` extension hmr works.'), + // ), + // '[vite] hot updated: /src/demo2.md', + // ) await expect .poll(() => page.getByText('.md extension hmr works.').textContent()) .toMatch('.md extension hmr works. This is bold text.') diff --git a/playground/react-classic/__tests__/react.spec.ts b/playground/react-classic/__tests__/react.spec.ts index ec0ed79cf..03dbd17bc 100644 --- a/playground/react-classic/__tests__/react.spec.ts +++ b/playground/react-classic/__tests__/react.spec.ts @@ -2,7 +2,7 @@ import { expect, test } from 'vitest' import { editFile, isServe, page, viteTestUrl } from '~utils' test('should render', async () => { - expect(await page.textContent('h1')).toMatch('Hello Vite + React') + await expect.poll(() => page.textContent('h1')).toMatch('Hello Vite + React') }) test('should update', async () => { @@ -18,14 +18,14 @@ test.runIf(isServe)('should hmr', async () => { expect(await page.textContent('button')).toMatch('count is: 1') }) -if (!process.env.VITE_TEST_FULL_BUNDLE_MODE){ - test.runIf(isServe)( - 'should have annotated jsx with file location metadata', - async () => { - const res = await page.request.get(viteTestUrl + '/App.jsx') - const code = await res.text() - expect(code).toMatch(/lineNumber:\s*\d+/) - expect(code).toMatch(/columnNumber:\s*\d+/) - }, - ) -} +test.runIf(isServe)( + 'should have annotated jsx with file location metadata', + async () => { + const scriptSrc = await (await page.$('script')).getAttribute('src') + const scriptUrl = new URL(scriptSrc, viteTestUrl) + const res = await page.request.get(scriptUrl.href) + const code = await res.text() + expect(code).toMatch(/lineNumber:\s*\d+/) + expect(code).toMatch(/columnNumber:\s*\d+/) + }, +) diff --git a/playground/react-emotion/__tests__/react.spec.ts b/playground/react-emotion/__tests__/react.spec.ts index 943a1c89c..4c2e411cb 100644 --- a/playground/react-emotion/__tests__/react.spec.ts +++ b/playground/react-emotion/__tests__/react.spec.ts @@ -2,9 +2,9 @@ import { expect, test } from 'vitest' import { editFile, getColor, isServe, page } from '~utils' test('should render', async () => { - expect(await page.textContent('h1')).toMatch( - 'Hello Vite + React + @emotion/react', - ) + await expect + .poll(() => page.textContent('h1')) + .toMatch('Hello Vite + React + @emotion/react') }) test('should update', async () => { diff --git a/playground/react-env/__tests__/react.spec.ts b/playground/react-env/__tests__/react.spec.ts index 12686328d..03f451bb6 100644 --- a/playground/react-env/__tests__/react.spec.ts +++ b/playground/react-env/__tests__/react.spec.ts @@ -2,5 +2,5 @@ import { expect, test } from 'vitest' import { page } from '~utils' test('should work', async () => { - expect(await page.textContent('h1')).toMatch('Hello Vite + React') + await expect.poll(() => page.textContent('h1')).toMatch('Hello Vite + React') }) diff --git a/playground/react/__tests__/react.spec.ts b/playground/react/__tests__/react.spec.ts index f950dd037..bba0dfc80 100644 --- a/playground/react/__tests__/react.spec.ts +++ b/playground/react/__tests__/react.spec.ts @@ -10,7 +10,7 @@ import { } from '~utils' test('should render', async () => { - expect(await page.textContent('h1')).toMatch('Hello Vite + React') + await expect.poll(() => page.textContent('h1')).toMatch('Hello Vite + React') }) test('should update', async () => { @@ -35,38 +35,40 @@ test.runIf(isServe)('should hmr', async () => { await expect.poll(() => page.textContent('h1')).toMatch('Hello Vite + React') }) -// test.runIf(isServe)('should not invalidate when code is invalid', async () => { -// editFile('App.jsx', (code) => -// code.replace('
', '
'), -// ) - -// await expect -// .poll(() => page.textContent('vite-error-overlay .message-body')) -// .toMatch('Unexpected token') -// // if import.meta.invalidate happened, the old page won't be shown because the page is reloaded -// expect(await page.textContent('h1')).toMatch('Hello Vite + React') - -// await untilBrowserLogAfter( -// () => -// editFile('App.jsx', (code) => -// code.replace('
', '
'), -// ), -// '[vite] hot updated: /App.jsx', -// ) -// }) - -// The module file can't be visited at full bundle mode -if (!process.env.VITE_TEST_FULL_BUNDLE_MODE) { - test.runIf(isServe)( - 'should have annotated jsx with file location metadata', - async () => { - const res = await page.request.get(viteTestUrl + '/App.jsx') - const code = await res.text() - expect(code).toMatch(/lineNumber:\s*\d+/) - expect(code).toMatch(/columnNumber:\s*\d+/) - }, +test.runIf(isServe)('should not invalidate when code is invalid', async () => { + editFile('App.jsx', (code) => + code.replace('
', '
'), ) -} + + await expect + .poll(() => page.textContent('vite-error-overlay .message-body')) + .toMatch('Unexpected token') + // if import.meta.invalidate happened, the old page won't be shown because the page is reloaded + expect(await page.textContent('h1')).toMatch('Hello Vite + React') + + editFile('App.jsx', (code) => + code.replace('
', '
'), + ) + // await untilBrowserLogAfter( + // () => + // editFile('App.jsx', (code) => + // code.replace('
', '
'), + // ), + // '[vite] hot updated: /App.jsx', + // ) +}) + +test.runIf(isServe)( + 'should have annotated jsx with file location metadata', + async () => { + const scriptSrc = await (await page.$('script')).getAttribute('src') + const scriptUrl = new URL(scriptSrc, viteTestUrl) + const res = await page.request.get(scriptUrl.href) + const code = await res.text() + expect(code).toMatch(/lineNumber:\s*\d+/) + expect(code).toMatch(/columnNumber:\s*\d+/) + }, +) test('import attributes', async () => { expect(await page.textContent('.import-attributes')).toBe('ok') @@ -75,24 +77,27 @@ test('import attributes', async () => { if (!isBuild) { // #9869 test('should only hmr files with exported react components', async () => { - await untilBrowserLogAfter( - () => - editFile('hmr/no-exported-comp.jsx', (code) => - code.replace('An Object', 'Updated'), - ), - [ - new RegExp( - `^${escapeRegex( - '[vite] invalidate /hmr/no-exported-comp.jsx: Could not Fast Refresh ("Foo" export is incompatible). Learn more at https://github.com/vitejs/vite-plugin-react/tree/main/packages/', - )}plugin-react(?:-\\w+)?${escapeRegex( - '#consistent-components-exports', - )}`, - ), - '[vite] hot updated: /hmr/no-exported-comp.jsx', - '[vite] hot updated: /hmr/parent.jsx', - 'Parent rendered', - ], + editFile('hmr/no-exported-comp.jsx', (code) => + code.replace('An Object', 'Updated'), ) + // await untilBrowserLogAfter( + // () => + // editFile('hmr/no-exported-comp.jsx', (code) => + // code.replace('An Object', 'Updated'), + // ), + // [ + // new RegExp( + // `^${escapeRegex( + // '[vite] invalidate /hmr/no-exported-comp.jsx: Could not Fast Refresh ("Foo" export is incompatible). Learn more at https://github.com/vitejs/vite-plugin-react/tree/main/packages/', + // )}plugin-react(?:-\\w+)?${escapeRegex( + // '#consistent-components-exports', + // )}`, + // ), + // '[vite] hot updated: /hmr/no-exported-comp.jsx', + // '[vite] hot updated: /hmr/parent.jsx', + // 'Parent rendered', + // ], + // ) await expect.poll(() => page.textContent('#parent')).toMatch('Updated') }) @@ -106,25 +111,28 @@ if (!isBuild) { 'context-based count is: 1', ) - await untilBrowserLogAfter( - () => - editFile('context/CountProvider.jsx', (code) => - code.replace('context provider', 'context provider updated'), - ), - [ - new RegExp( - `^${escapeRegex( - '[vite] invalidate /context/CountProvider.jsx: Could not Fast Refresh ("CountContext" export is incompatible). Learn more at https://github.com/vitejs/vite-plugin-react/tree/main/packages/', - )}plugin-react(?:-\\w+)?${escapeRegex( - '#consistent-components-exports', - )}`, - ), - '[vite] hot updated: /context/CountProvider.jsx', - '[vite] hot updated: /App.jsx', - '[vite] hot updated: /context/ContextButton.jsx', - 'Parent rendered', - ], + editFile('context/CountProvider.jsx', (code) => + code.replace('context provider', 'context provider updated'), ) + // await untilBrowserLogAfter( + // () => + // editFile('context/CountProvider.jsx', (code) => + // code.replace('context provider', 'context provider updated'), + // ), + // [ + // new RegExp( + // `^${escapeRegex( + // '[vite] invalidate /context/CountProvider.jsx: Could not Fast Refresh ("CountContext" export is incompatible). Learn more at https://github.com/vitejs/vite-plugin-react/tree/main/packages/', + // )}plugin-react(?:-\\w+)?${escapeRegex( + // '#consistent-components-exports', + // )}`, + // ), + // '[vite] hot updated: /context/CountProvider.jsx', + // '[vite] hot updated: /App.jsx', + // '[vite] hot updated: /context/ContextButton.jsx', + // 'Parent rendered', + // ], + // ) await expect .poll(() => page.textContent('#context-provider')) .toMatch('context provider updated') @@ -135,16 +143,19 @@ if (!isBuild) { await page.click('#state-button') expect(await page.textContent('#state-button')).toMatch('count is: 1') - await untilBrowserLogAfter( - () => - editFile('hmr/jsx-import-runtime.js', (code) => - code.replace( - 'JSX import runtime works', - 'JSX import runtime updated', - ), - ), - ['[vite] hot updated: /hmr/jsx-import-runtime.js'], + editFile('hmr/jsx-import-runtime.js', (code) => + code.replace('JSX import runtime works', 'JSX import runtime updated'), ) + // await untilBrowserLogAfter( + // () => + // editFile('hmr/jsx-import-runtime.js', (code) => + // code.replace( + // 'JSX import runtime works', + // 'JSX import runtime updated', + // ), + // ), + // ['[vite] hot updated: /hmr/jsx-import-runtime.js'], + // ) await expect .poll(() => page.textContent('#jsx-import-runtime')) .toMatch('JSX import runtime updated') @@ -154,13 +165,16 @@ if (!isBuild) { // #493 test('should hmr compound components', async () => { - await untilBrowserLogAfter( - () => - editFile('components/Accordion.jsx', (code) => - code.replace('Accordion Root', 'Accordion Root Updated'), - ), - ['[vite] hot updated: /components/Accordion.jsx'], + editFile('components/Accordion.jsx', (code) => + code.replace('Accordion Root', 'Accordion Root Updated'), ) + // await untilBrowserLogAfter( + // () => + // editFile('components/Accordion.jsx', (code) => + // code.replace('Accordion Root', 'Accordion Root Updated'), + // ), + // ['[vite] hot updated: /components/Accordion.jsx'], + // ) await expect .poll(() => page.textContent('#accordion-root')) diff --git a/playground/vitest.config.e2e.ts b/playground/vitest.config.e2e.ts index 462b559a5..598858306 100644 --- a/playground/vitest.config.e2e.ts +++ b/playground/vitest.config.e2e.ts @@ -1,5 +1,5 @@ import { resolve } from 'node:path' -import { defineConfig } from 'vitest/config' +import { defaultExclude, defineConfig } from 'vitest/config' const timeout = process.env.PWDEBUG ? Infinity : process.env.CI ? 20_000 : 5_000 @@ -11,20 +11,13 @@ export default defineConfig({ }, test: { pool: 'forks', - include: process.env.VITE_TEST_FULL_BUNDLE_MODE - ? [ - './playground/class-components/**/*.spec.[tj]s', - './playground/compiler/**/*.spec.[tj]s', - './playground/compiler-react-18/**/*.spec.[tj]s', - './playground/mdx/**/*.spec.[tj]s', - './playground/react/**/*.spec.[tj]s', - './playground/react-classic/**/*.spec.[tj]s', - './playground/react-emotion/**/*.spec.[tj]s', - './playground/react-env/**/*.spec.[tj]s', - './playground/react-sourcemap/**/*.spec.[tj]s', - // './playground/ssr-react/**/*.spec.[tj]s', - ] - : ['./playground/**/*.spec.[tj]s'], + include: ['./playground/**/*.spec.[tj]s'], + exclude: [ + ...defaultExclude, + ...(process.env.VITE_TEST_FULL_BUNDLE_MODE + ? ['./playground/ssr-react/**/*'] + : []), + ], setupFiles: ['./playground/vitestSetup.ts'], globalSetup: ['./playground/vitestGlobalSetup.ts'], testTimeout: timeout, From 6de1af51df55383918b9c286f170184fc64e1540 Mon Sep 17 00:00:00 2001 From: sapphi-red <49056869+sapphi-red@users.noreply.github.com> Date: Thu, 28 Aug 2025 21:06:24 +0900 Subject: [PATCH 18/25] test: make tests pass --- playground/react-classic/__tests__/react.spec.ts | 8 +++++--- playground/react/__tests__/react.spec.ts | 9 ++++++--- 2 files changed, 11 insertions(+), 6 deletions(-) diff --git a/playground/react-classic/__tests__/react.spec.ts b/playground/react-classic/__tests__/react.spec.ts index 03dbd17bc..f940e8a65 100644 --- a/playground/react-classic/__tests__/react.spec.ts +++ b/playground/react-classic/__tests__/react.spec.ts @@ -21,9 +21,11 @@ test.runIf(isServe)('should hmr', async () => { test.runIf(isServe)( 'should have annotated jsx with file location metadata', async () => { - const scriptSrc = await (await page.$('script')).getAttribute('src') - const scriptUrl = new URL(scriptSrc, viteTestUrl) - const res = await page.request.get(scriptUrl.href) + let pathname = '/App.jsx' + if (process.env.VITE_TEST_FULL_BUNDLE_MODE) { + pathname = await (await page.$('script')).getAttribute('src') + } + const res = await page.request.get(new URL(pathname, viteTestUrl).href) const code = await res.text() expect(code).toMatch(/lineNumber:\s*\d+/) expect(code).toMatch(/columnNumber:\s*\d+/) diff --git a/playground/react/__tests__/react.spec.ts b/playground/react/__tests__/react.spec.ts index bba0dfc80..47b522293 100644 --- a/playground/react/__tests__/react.spec.ts +++ b/playground/react/__tests__/react.spec.ts @@ -61,9 +61,11 @@ test.runIf(isServe)('should not invalidate when code is invalid', async () => { test.runIf(isServe)( 'should have annotated jsx with file location metadata', async () => { - const scriptSrc = await (await page.$('script')).getAttribute('src') - const scriptUrl = new URL(scriptSrc, viteTestUrl) - const res = await page.request.get(scriptUrl.href) + let pathname = '/App.jsx' + if (process.env.VITE_TEST_FULL_BUNDLE_MODE) { + pathname = await (await page.$('script')).getAttribute('src') + } + const res = await page.request.get(new URL(pathname, viteTestUrl).href) const code = await res.text() expect(code).toMatch(/lineNumber:\s*\d+/) expect(code).toMatch(/columnNumber:\s*\d+/) @@ -181,6 +183,7 @@ if (!isBuild) { .toMatch('Accordion Root Updated') }) + // TODO test('no refresh transform for non-jsx files', async () => { const res = await page.request.get(viteTestUrl + '/non-jsx/test.ts') const code = await res.text() From fab3ccb2da527439d775737e0cb8c31ff65ae1a0 Mon Sep 17 00:00:00 2001 From: sapphi-red <49056869+sapphi-red@users.noreply.github.com> Date: Fri, 29 Aug 2025 11:51:19 +0900 Subject: [PATCH 19/25] chore: update vite and rolldown-vite --- pnpm-lock.yaml | 286 +++++++++----------------------------------- pnpm-workspace.yaml | 4 +- 2 files changed, 61 insertions(+), 229 deletions(-) diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 4b5657f62..49b768cbe 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -6,8 +6,8 @@ settings: overrides: '@types/estree': ^1.0.8 - vitest>vite: npm:vite@^7.0.6 - vite: npm:rolldown-vite@^7.0.11 + vitest>vite: npm:vite@^7.1.3 + vite: npm:rolldown-vite@^7.1.5 importers: @@ -65,11 +65,11 @@ importers: specifier: ^8.41.0 version: 8.41.0(eslint@9.34.0(jiti@2.5.1))(typescript@5.9.2) vite: - specifier: npm:rolldown-vite@^7.0.11 - version: rolldown-vite@7.1.0(@types/node@22.18.0)(esbuild@0.25.5)(jiti@2.5.1)(yaml@2.7.1) + specifier: npm:rolldown-vite@^7.1.5 + version: rolldown-vite@7.1.5(@types/node@22.18.0)(esbuild@0.25.5)(jiti@2.5.1)(yaml@2.7.1) vite-plugin-inspect: specifier: ^11.3.3 - version: 11.3.3(rolldown-vite@7.1.0(@types/node@22.18.0)(esbuild@0.25.5)(jiti@2.5.1)(yaml@2.7.1)) + version: 11.3.3(rolldown-vite@7.1.5(@types/node@22.18.0)(esbuild@0.25.5)(jiti@2.5.1)(yaml@2.7.1)) vitest: specifier: ^3.2.4 version: 3.2.4(@types/debug@4.1.12)(@types/node@22.18.0)(esbuild@0.25.5)(jiti@2.5.1)(lightningcss@1.30.1)(yaml@2.7.1) @@ -77,8 +77,8 @@ importers: packages/common: dependencies: vite: - specifier: npm:rolldown-vite@^7.0.11 - version: rolldown-vite@7.1.0(@types/node@22.18.0)(esbuild@0.25.5)(jiti@2.5.1)(yaml@2.7.1) + specifier: npm:rolldown-vite@^7.1.5 + version: rolldown-vite@7.1.5(@types/node@22.18.0)(esbuild@0.25.5)(jiti@2.5.1)(yaml@2.7.1) packages/plugin-react: dependencies: @@ -101,8 +101,8 @@ importers: specifier: ^0.17.0 version: 0.17.0 vite: - specifier: npm:rolldown-vite@^7.0.11 - version: rolldown-vite@7.1.0(@types/node@22.18.0)(esbuild@0.25.5)(jiti@2.5.1)(yaml@2.7.1) + specifier: npm:rolldown-vite@^7.1.5 + version: rolldown-vite@7.1.5(@types/node@22.18.0)(esbuild@0.25.5)(jiti@2.5.1)(yaml@2.7.1) devDependencies: '@vitejs/react-common': specifier: workspace:* @@ -132,8 +132,8 @@ importers: specifier: 1.0.0-beta.34 version: 1.0.0-beta.34 vite: - specifier: npm:rolldown-vite@^7.0.11 - version: rolldown-vite@7.1.0(@types/node@22.18.0)(esbuild@0.25.5)(jiti@2.5.1)(yaml@2.7.1) + specifier: npm:rolldown-vite@^7.1.5 + version: rolldown-vite@7.1.5(@types/node@22.18.0)(esbuild@0.25.5)(jiti@2.5.1)(yaml@2.7.1) devDependencies: '@vitejs/react-common': specifier: workspace:* @@ -151,8 +151,8 @@ importers: specifier: ^1.13.5 version: 1.13.5 vite: - specifier: npm:rolldown-vite@^7.0.11 - version: rolldown-vite@7.1.0(@types/node@22.18.0)(esbuild@0.25.5)(jiti@2.5.1)(yaml@2.7.1) + specifier: npm:rolldown-vite@^7.1.5 + version: rolldown-vite@7.1.5(@types/node@22.18.0)(esbuild@0.25.5)(jiti@2.5.1)(yaml@2.7.1) devDependencies: '@playwright/test': specifier: ^1.55.0 @@ -463,11 +463,11 @@ importers: specifier: ^3.1.0 version: 3.1.0 vite: - specifier: npm:rolldown-vite@^7.0.11 - version: rolldown-vite@7.1.0(@types/node@22.18.0)(esbuild@0.25.5)(jiti@2.5.1)(yaml@2.7.1) + specifier: npm:rolldown-vite@^7.1.5 + version: rolldown-vite@7.1.5(@types/node@22.18.0)(esbuild@0.25.5)(jiti@2.5.1)(yaml@2.7.1) vitefu: specifier: ^1.1.1 - version: 1.1.1(rolldown-vite@7.1.0(@types/node@22.18.0)(esbuild@0.25.5)(jiti@2.5.1)(yaml@2.7.1)) + version: 1.1.1(rolldown-vite@7.1.5(@types/node@22.18.0)(esbuild@0.25.5)(jiti@2.5.1)(yaml@2.7.1)) devDependencies: '@hiogawa/utils': specifier: ^1.7.0 @@ -523,7 +523,7 @@ importers: devDependencies: '@tailwindcss/vite': specifier: ^4.1.12 - version: 4.1.12(rolldown-vite@7.1.0(@types/node@22.18.0)(esbuild@0.25.5)(jiti@2.5.1)(yaml@2.7.1)) + version: 4.1.12(rolldown-vite@7.1.5(@types/node@22.18.0)(esbuild@0.25.5)(jiti@2.5.1)(yaml@2.7.1)) '@types/react': specifier: ^19.1.11 version: 19.1.11 @@ -564,8 +564,8 @@ importers: specifier: ^4.1.12 version: 4.1.12 vite: - specifier: npm:rolldown-vite@^7.0.11 - version: rolldown-vite@7.1.0(@types/node@22.18.0)(esbuild@0.25.5)(jiti@2.5.1)(yaml@2.7.1) + specifier: npm:rolldown-vite@^7.1.5 + version: rolldown-vite@7.1.5(@types/node@22.18.0)(esbuild@0.25.5)(jiti@2.5.1)(yaml@2.7.1) wrangler: specifier: ^4.32.0 version: 4.32.0 @@ -592,8 +592,8 @@ importers: specifier: latest version: link:../.. vite: - specifier: npm:rolldown-vite@^7.0.11 - version: rolldown-vite@7.1.0(@types/node@22.18.0)(esbuild@0.25.5)(jiti@2.5.1)(yaml@2.7.1) + specifier: npm:rolldown-vite@^7.1.5 + version: rolldown-vite@7.1.5(@types/node@22.18.0)(esbuild@0.25.5)(jiti@2.5.1)(yaml@2.7.1) packages/plugin-rsc/examples/e2e: devDependencies: @@ -629,8 +629,8 @@ importers: specifier: latest version: link:../.. vite: - specifier: npm:rolldown-vite@^7.0.11 - version: rolldown-vite@7.1.0(@types/node@22.18.0)(esbuild@0.25.5)(jiti@2.5.1)(yaml@2.7.1) + specifier: npm:rolldown-vite@^7.1.5 + version: rolldown-vite@7.1.5(@types/node@22.18.0)(esbuild@0.25.5)(jiti@2.5.1)(yaml@2.7.1) packages/plugin-rsc/examples/react-router: dependencies: @@ -646,13 +646,13 @@ importers: devDependencies: '@cloudflare/vite-plugin': specifier: ^1.11.7 - version: 1.11.7(rolldown-vite@7.1.0(@types/node@22.18.0)(esbuild@0.25.5)(jiti@2.5.1)(yaml@2.7.1))(rollup@4.46.2)(workerd@1.20250816.0)(wrangler@4.32.0) + version: 1.11.7(rolldown-vite@7.1.5(@types/node@22.18.0)(esbuild@0.25.5)(jiti@2.5.1)(yaml@2.7.1))(rollup@4.46.2)(workerd@1.20250816.0)(wrangler@4.32.0) '@tailwindcss/typography': specifier: ^0.5.16 version: 0.5.16(tailwindcss@4.1.12) '@tailwindcss/vite': specifier: ^4.1.12 - version: 4.1.12(rolldown-vite@7.1.0(@types/node@22.18.0)(esbuild@0.25.5)(jiti@2.5.1)(yaml@2.7.1)) + version: 4.1.12(rolldown-vite@7.1.5(@types/node@22.18.0)(esbuild@0.25.5)(jiti@2.5.1)(yaml@2.7.1)) '@types/react': specifier: ^19.1.11 version: 19.1.11 @@ -669,8 +669,8 @@ importers: specifier: ^4.1.12 version: 4.1.12 vite: - specifier: npm:rolldown-vite@^7.0.11 - version: rolldown-vite@7.1.0(@types/node@22.18.0)(esbuild@0.25.5)(jiti@2.5.1)(yaml@2.7.1) + specifier: npm:rolldown-vite@^7.1.5 + version: rolldown-vite@7.1.5(@types/node@22.18.0)(esbuild@0.25.5)(jiti@2.5.1)(yaml@2.7.1) wrangler: specifier: ^4.32.0 version: 4.32.0 @@ -725,8 +725,8 @@ importers: specifier: ^0.0.7 version: 0.0.7 vite: - specifier: npm:rolldown-vite@^7.0.11 - version: rolldown-vite@7.1.0(@types/node@22.18.0)(esbuild@0.25.5)(jiti@2.5.1)(yaml@2.7.1) + specifier: npm:rolldown-vite@^7.1.5 + version: rolldown-vite@7.1.5(@types/node@22.18.0)(esbuild@0.25.5)(jiti@2.5.1)(yaml@2.7.1) packages/plugin-rsc/examples/starter-cf-single: dependencies: @@ -739,7 +739,7 @@ importers: devDependencies: '@cloudflare/vite-plugin': specifier: ^1.11.7 - version: 1.11.7(rolldown-vite@7.1.0(@types/node@22.18.0)(esbuild@0.25.5)(jiti@2.5.1)(yaml@2.7.1))(rollup@4.46.2)(workerd@1.20250816.0)(wrangler@4.32.0) + version: 1.11.7(rolldown-vite@7.1.5(@types/node@22.18.0)(esbuild@0.25.5)(jiti@2.5.1)(yaml@2.7.1))(rollup@4.46.2)(workerd@1.20250816.0)(wrangler@4.32.0) '@types/react': specifier: ^19.1.11 version: 19.1.11 @@ -756,8 +756,8 @@ importers: specifier: ^0.0.7 version: 0.0.7 vite: - specifier: npm:rolldown-vite@^7.0.11 - version: rolldown-vite@7.1.0(@types/node@22.18.0)(esbuild@0.25.5)(jiti@2.5.1)(yaml@2.7.1) + specifier: npm:rolldown-vite@^7.1.5 + version: rolldown-vite@7.1.5(@types/node@22.18.0)(esbuild@0.25.5)(jiti@2.5.1)(yaml@2.7.1) playground: devDependencies: @@ -1853,17 +1853,10 @@ packages: resolution: {integrity: sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==} engines: {node: '>= 8'} - '@oxc-project/runtime@0.80.0': - resolution: {integrity: sha512-3rzy1bJAZ4s7zV9TKT60x119RwJDCDqEtCwK/Zc2qlm7wGhiIUxLLYUhE/mN91yB0u1kxm5sh4NjU12sPqQTpg==} - engines: {node: '>=6.9.0'} - '@oxc-project/runtime@0.82.3': resolution: {integrity: sha512-LNh5GlJvYHAnMurO+EyA8jJwN1rki7l3PSHuosDh2I7h00T6/u9rCkUjg/SvPmT1CZzvhuW0y+gf7jcqUy/Usg==} engines: {node: '>=6.9.0'} - '@oxc-project/types@0.80.0': - resolution: {integrity: sha512-xxHQm8wfCv2e8EmtaDwpMeAHOWqgQDAYg+BJouLXSQt5oTKu9TIXrgNMGSrM2fLvKmECsRd9uUFAAD+hPyootA==} - '@oxc-project/types@0.82.3': resolution: {integrity: sha512-6nCUxBnGX0c6qfZW5MaF6/fmu5dHJDMiMPaioKHKs5mi5+8/FHQ7WGjgQIz1zxpmceMYfdIXkOaLYE+ejbuOtA==} @@ -1894,96 +1887,46 @@ packages: '@remix-run/node-fetch-server@0.8.0': resolution: {integrity: sha512-8/sKegb4HrM6IdcQeU0KPhj9VOHm5SUqswJDHuMCS3mwbr/NRx078QDbySmn0xslahvvZoOENd7EnK40kWKxkg==} - '@rolldown/binding-android-arm64@1.0.0-beta.31': - resolution: {integrity: sha512-0mFtKwOG7smn0HkvQ6h8j0m/ohkR7Fp5eMTJ2Pns/HSbePHuDpxMaQ4TjZ6arlVXxpeWZlAHeT5BeNsOA3iWTg==} - cpu: [arm64] - os: [android] - '@rolldown/binding-android-arm64@1.0.0-beta.34': resolution: {integrity: sha512-jf5GNe5jP3Sr1Tih0WKvg2bzvh5T/1TA0fn1u32xSH7ca/p5t+/QRr4VRFCV/na5vjwKEhwWrChsL2AWlY+eoA==} cpu: [arm64] os: [android] - '@rolldown/binding-darwin-arm64@1.0.0-beta.31': - resolution: {integrity: sha512-BHfHJ8Nb5G7ZKJl6pimJacupONT4F7w6gmQHw41rouAnJF51ORDwGefWeb6OMLzGmJwzxlIVPERfnJf1EsMM7A==} - cpu: [arm64] - os: [darwin] - '@rolldown/binding-darwin-arm64@1.0.0-beta.34': resolution: {integrity: sha512-2F/TqH4QuJQ34tgWxqBjFL3XV1gMzeQgUO8YRtCPGBSP0GhxtoFzsp7KqmQEothsxztlv+KhhT9Dbg3HHwHViQ==} cpu: [arm64] os: [darwin] - '@rolldown/binding-darwin-x64@1.0.0-beta.31': - resolution: {integrity: sha512-4MiuRtExC08jHbSU/diIL+IuQP+3Ck1FbWAplK+ysQJ7fxT3DMxy5FmnIGfmhaqow8oTjb2GEwZJKgTRjZL1Vw==} - cpu: [x64] - os: [darwin] - '@rolldown/binding-darwin-x64@1.0.0-beta.34': resolution: {integrity: sha512-E1QuFslgLWbHQ8Qli/AqUKdfg0pockQPwRxVbhNQ74SciZEZpzLaujkdmOLSccMlSXDfFCF8RPnMoRAzQ9JV8Q==} cpu: [x64] os: [darwin] - '@rolldown/binding-freebsd-x64@1.0.0-beta.31': - resolution: {integrity: sha512-nffC1u7ccm12qlAea8ExY3AvqlaHy/o/3L4p5Es8JFJ3zJSs6e3DyuxGZZVdl9EVwsLxPPTvioIl4tEm2afwyw==} - cpu: [x64] - os: [freebsd] - '@rolldown/binding-freebsd-x64@1.0.0-beta.34': resolution: {integrity: sha512-VS8VInNCwnkpI9WeQaWu3kVBq9ty6g7KrHdLxYMzeqz24+w9hg712TcWdqzdY6sn+24lUoMD9jTZrZ/qfVpk0g==} cpu: [x64] os: [freebsd] - '@rolldown/binding-linux-arm-gnueabihf@1.0.0-beta.31': - resolution: {integrity: sha512-LHmAaB3rB1GOJuHscKcL2Ts/LKLcb3YWTh2uQ/876rg/J9WE9kQ0kZ+3lRSYbth/YL8ln54j4JZmHpqQY3xptQ==} - cpu: [arm] - os: [linux] - '@rolldown/binding-linux-arm-gnueabihf@1.0.0-beta.34': resolution: {integrity: sha512-4St4emjcnULnxJYb/5ZDrH/kK/j6PcUgc3eAqH5STmTrcF+I9m/X2xvSF2a2bWv1DOQhxBewThu0KkwGHdgu5w==} cpu: [arm] os: [linux] - '@rolldown/binding-linux-arm64-gnu@1.0.0-beta.31': - resolution: {integrity: sha512-oTDZVfqIAjLB2I1yTiLyyhfPPO6dky33sTblxTCpe+ZT55WizN3KDoBKJ4yXG8shI6I4bRShVu29Xg0yAjyQYw==} - cpu: [arm64] - os: [linux] - '@rolldown/binding-linux-arm64-gnu@1.0.0-beta.34': resolution: {integrity: sha512-a737FTqhFUoWfnebS2SnQ2BS50p0JdukdkUBwy2J06j4hZ6Eej0zEB8vTfAqoCjn8BQKkXBy+3Sx0IRkgwz1gA==} cpu: [arm64] os: [linux] - '@rolldown/binding-linux-arm64-musl@1.0.0-beta.31': - resolution: {integrity: sha512-duJ3IkEBj9Xe9NYW1n8Y3483VXHGi8zQ0ZsLbK8464EJUXLF7CXM8Ry+jkkUw+ZvA+Zu1E/+C6p2Y6T9el0C9g==} - cpu: [arm64] - os: [linux] - '@rolldown/binding-linux-arm64-musl@1.0.0-beta.34': resolution: {integrity: sha512-NH+FeQWKyuw0k+PbXqpFWNfvD8RPvfJk766B/njdaWz4TmiEcSB0Nb6guNw1rBpM1FmltQYb3fFnTumtC6pRfA==} cpu: [arm64] os: [linux] - '@rolldown/binding-linux-arm64-ohos@1.0.0-beta.31': - resolution: {integrity: sha512-qdbmU5QSZ0uoLZBYMxiHsMQmizqtzFGTVPU5oyU1n0jU0Mo+mkSzqZuL8VBnjHOHzhVxZsoAGH9JjiRzCnoGVA==} - cpu: [arm64] - os: [openharmony] - - '@rolldown/binding-linux-x64-gnu@1.0.0-beta.31': - resolution: {integrity: sha512-H7+r34TSV8udB2gAsebFM/YuEeNCkPGEAGJ1JE7SgI9XML6FflqcdKfrRSneQFsPaom/gCEc1g0WW5MZ0O3blw==} - cpu: [x64] - os: [linux] - '@rolldown/binding-linux-x64-gnu@1.0.0-beta.34': resolution: {integrity: sha512-Q3RSCivp8pNadYK8ke3hLnQk08BkpZX9BmMjgwae2FWzdxhxxUiUzd9By7kneUL0vRQ4uRnhD9VkFQ+Haeqdvw==} cpu: [x64] os: [linux] - '@rolldown/binding-linux-x64-musl@1.0.0-beta.31': - resolution: {integrity: sha512-zRm2YmzFVqbsmUsyyZnHfJrOlQUcWS/FJ5ZWL8Q1kZh5PnLBrTVZNpakIWwAxpN5gNEi9MmFd5YHocVJp8ps1Q==} - cpu: [x64] - os: [linux] - '@rolldown/binding-linux-x64-musl@1.0.0-beta.34': resolution: {integrity: sha512-wDd/HrNcVoBhWWBUW3evJHoo7GJE/RofssBy3Dsiip05YUBmokQVrYAyrboOY4dzs/lJ7HYeBtWQ9hj8wlyF0A==} cpu: [x64] @@ -1994,49 +1937,26 @@ packages: cpu: [arm64] os: [openharmony] - '@rolldown/binding-wasm32-wasi@1.0.0-beta.31': - resolution: {integrity: sha512-fM1eUIuHLsNJXRlWOuIIex1oBJ89I0skFWo5r/D3KSJ5gD9MBd3g4Hp+v1JGohvyFE+7ylnwRxSUyMEeYpA69A==} - engines: {node: '>=14.0.0'} - cpu: [wasm32] - '@rolldown/binding-wasm32-wasi@1.0.0-beta.34': resolution: {integrity: sha512-y5BUf+QtO0JsIDKA51FcGwvhJmv89BYjUl8AmN7jqD6k/eU55mH6RJYnxwCsODq5m7KSSTigVb6O7/GqB8wbPw==} engines: {node: '>=14.0.0'} cpu: [wasm32] - '@rolldown/binding-win32-arm64-msvc@1.0.0-beta.31': - resolution: {integrity: sha512-4nftR9V2KHH3zjBwf6leuZZJQZ7v0d70ogjHIqB3SDsbDLvVEZiGSsSn2X6blSZRZeJSFzK0pp4kZ67zdZXwSw==} - cpu: [arm64] - os: [win32] - '@rolldown/binding-win32-arm64-msvc@1.0.0-beta.34': resolution: {integrity: sha512-ga5hFhdTwpaNxEiuxZHWnD3ed0GBAzbgzS5tRHpe0ObptxM1a9Xrq6TVfNQirBLwb5Y7T/FJmJi3pmdLy95ljg==} cpu: [arm64] os: [win32] - '@rolldown/binding-win32-ia32-msvc@1.0.0-beta.31': - resolution: {integrity: sha512-0TQcKu9xZVHYALit+WJsSuADGlTFfOXhnZoIHWWQhTk3OgbwwbYcSoZUXjRdFmR6Wswn4csHtJGN1oYKeQ6/2g==} - cpu: [ia32] - os: [win32] - '@rolldown/binding-win32-ia32-msvc@1.0.0-beta.34': resolution: {integrity: sha512-4/MBp9T9eRnZskxWr8EXD/xHvLhdjWaeX/qY9LPRG1JdCGV3DphkLTy5AWwIQ5jhAy2ZNJR5z2fYRlpWU0sIyQ==} cpu: [ia32] os: [win32] - '@rolldown/binding-win32-x64-msvc@1.0.0-beta.31': - resolution: {integrity: sha512-3zMICWwpZh1jrkkKDYIUCx/2wY3PXLICAS0AnbeLlhzfWPhCcpNK9eKhiTlLAZyTp+3kyipoi/ZSVIh+WDnBpQ==} - cpu: [x64] - os: [win32] - '@rolldown/binding-win32-x64-msvc@1.0.0-beta.34': resolution: {integrity: sha512-7O5iUBX6HSBKlQU4WykpUoEmb0wQmonb6ziKFr3dJTHud2kzDnWMqk344T0qm3uGv9Ddq6Re/94pInxo1G2d4w==} cpu: [x64] os: [win32] - '@rolldown/pluginutils@1.0.0-beta.31': - resolution: {integrity: sha512-IaDZ9NhjOIOkYtm+hH0GX33h3iVZ2OeSUnFF0+7Z4+1GuKs4Kj5wK3+I2zNV9IPLfqV4XlwWif8SXrZNutxciQ==} - '@rolldown/pluginutils@1.0.0-beta.34': resolution: {integrity: sha512-LyAREkZHP5pMom7c24meKmJCdhf2hEyvam2q0unr3or9ydwDL+DJ8chTF6Av/RFPb3rH8UFBdMzO5MxTZW97oA==} @@ -3207,14 +3127,6 @@ packages: fd-package-json@1.2.0: resolution: {integrity: sha512-45LSPmWf+gC5tdCQMNH4s9Sr00bIkiD9aN7dc5hqkrEw1geRYyDQS1v1oMHAW3ysfxfndqGsrDREHHjNNbKUfA==} - fdir@6.4.6: - resolution: {integrity: sha512-hiFoqpyZcfNm1yc4u8oWCf9A2c4D3QjCrks3zmoVKVxpQRzmPNar1hUJcBG2RQHvEVGDN+Jm81ZheVLAQMK6+w==} - peerDependencies: - picomatch: ^3 || ^4 - peerDependenciesMeta: - picomatch: - optional: true - fdir@6.5.0: resolution: {integrity: sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg==} engines: {node: '>=12.0.0'} @@ -4142,8 +4054,8 @@ packages: vue-tsc: optional: true - rolldown-vite@7.1.0: - resolution: {integrity: sha512-DCfutVwSkuc3NA75SdFuetKwcpq97tO2JZdM6gYv7GwW6/9qyXnITYER+8zrJt+vQVGP2SadAkMOpWw7B4LVwg==} + rolldown-vite@7.1.5: + resolution: {integrity: sha512-NgHjKatQn1B5TjtNVS3+Uq3JBUPP8s70cMxLzGHpv/UyCGj0SQUtVYImNWbU2uqfOpNSnqhI+nbR7tmPPcb1qQ==} engines: {node: ^20.19.0 || >=22.12.0} hasBin: true peerDependencies: @@ -4182,10 +4094,6 @@ packages: yaml: optional: true - rolldown@1.0.0-beta.31: - resolution: {integrity: sha512-M2Q+RfG0FMJeSW3RSFTbvtjGVTcQpTQvN247D0EMSsPkpZFoinopR9oAnQiwgogQyzDuvKNnbyCbQQlmNAzSoQ==} - hasBin: true - rolldown@1.0.0-beta.34: resolution: {integrity: sha512-Wwh7EwalMzzX3Yy3VN58VEajeR2Si8+HDNMf706jPLIqU7CxneRW+dQVfznf5O0TWTnJyu4npelwg2bzTXB1Nw==} hasBin: true @@ -4602,8 +4510,8 @@ packages: '@nuxt/kit': optional: true - vite@7.1.2: - resolution: {integrity: sha512-J0SQBPlQiEXAF7tajiH+rUooJPo0l8KQgyg4/aMunNtrOa7bwuZJsJbDWzeljqQpgftxuq5yNJxQ91O9ts29UQ==} + vite@7.1.3: + resolution: {integrity: sha512-OOUi5zjkDxYrKhTV3V7iKsoS37VUM7v40+HuwEmcrsf11Cdx9y3DIr2Px6liIcZFwt3XSRpQvFpL3WVy7ApkGw==} engines: {node: ^20.19.0 || >=22.12.0} hasBin: true peerDependencies: @@ -4965,7 +4873,7 @@ snapshots: optionalDependencies: workerd: 1.20250816.0 - '@cloudflare/vite-plugin@1.11.7(rolldown-vite@7.1.0(@types/node@22.18.0)(esbuild@0.25.5)(jiti@2.5.1)(yaml@2.7.1))(rollup@4.46.2)(workerd@1.20250816.0)(wrangler@4.32.0)': + '@cloudflare/vite-plugin@1.11.7(rolldown-vite@7.1.5(@types/node@22.18.0)(esbuild@0.25.5)(jiti@2.5.1)(yaml@2.7.1))(rollup@4.46.2)(workerd@1.20250816.0)(wrangler@4.32.0)': dependencies: '@cloudflare/unenv-preset': 2.6.2(unenv@2.0.0-rc.19)(workerd@1.20250816.0) '@mjackson/node-fetch-server': 0.6.1 @@ -4975,7 +4883,7 @@ snapshots: picocolors: 1.1.1 tinyglobby: 0.2.14 unenv: 2.0.0-rc.19 - vite: rolldown-vite@7.1.0(@types/node@22.18.0)(esbuild@0.25.5)(jiti@2.5.1)(yaml@2.7.1) + vite: rolldown-vite@7.1.5(@types/node@22.18.0)(esbuild@0.25.5)(jiti@2.5.1)(yaml@2.7.1) wrangler: 4.32.0 ws: 8.18.0 transitivePeerDependencies: @@ -5499,12 +5407,8 @@ snapshots: '@nodelib/fs.scandir': 2.1.5 fastq: 1.15.0 - '@oxc-project/runtime@0.80.0': {} - '@oxc-project/runtime@0.82.3': {} - '@oxc-project/types@0.80.0': {} - '@oxc-project/types@0.82.3': {} '@playwright/test@1.55.0': @@ -5533,96 +5437,50 @@ snapshots: '@remix-run/node-fetch-server@0.8.0': {} - '@rolldown/binding-android-arm64@1.0.0-beta.31': - optional: true - '@rolldown/binding-android-arm64@1.0.0-beta.34': optional: true - '@rolldown/binding-darwin-arm64@1.0.0-beta.31': - optional: true - '@rolldown/binding-darwin-arm64@1.0.0-beta.34': optional: true - '@rolldown/binding-darwin-x64@1.0.0-beta.31': - optional: true - '@rolldown/binding-darwin-x64@1.0.0-beta.34': optional: true - '@rolldown/binding-freebsd-x64@1.0.0-beta.31': - optional: true - '@rolldown/binding-freebsd-x64@1.0.0-beta.34': optional: true - '@rolldown/binding-linux-arm-gnueabihf@1.0.0-beta.31': - optional: true - '@rolldown/binding-linux-arm-gnueabihf@1.0.0-beta.34': optional: true - '@rolldown/binding-linux-arm64-gnu@1.0.0-beta.31': - optional: true - '@rolldown/binding-linux-arm64-gnu@1.0.0-beta.34': optional: true - '@rolldown/binding-linux-arm64-musl@1.0.0-beta.31': - optional: true - '@rolldown/binding-linux-arm64-musl@1.0.0-beta.34': optional: true - '@rolldown/binding-linux-arm64-ohos@1.0.0-beta.31': - optional: true - - '@rolldown/binding-linux-x64-gnu@1.0.0-beta.31': - optional: true - '@rolldown/binding-linux-x64-gnu@1.0.0-beta.34': optional: true - '@rolldown/binding-linux-x64-musl@1.0.0-beta.31': - optional: true - '@rolldown/binding-linux-x64-musl@1.0.0-beta.34': optional: true '@rolldown/binding-openharmony-arm64@1.0.0-beta.34': optional: true - '@rolldown/binding-wasm32-wasi@1.0.0-beta.31': - dependencies: - '@napi-rs/wasm-runtime': 1.0.3 - optional: true - '@rolldown/binding-wasm32-wasi@1.0.0-beta.34': dependencies: '@napi-rs/wasm-runtime': 1.0.3 optional: true - '@rolldown/binding-win32-arm64-msvc@1.0.0-beta.31': - optional: true - '@rolldown/binding-win32-arm64-msvc@1.0.0-beta.34': optional: true - '@rolldown/binding-win32-ia32-msvc@1.0.0-beta.31': - optional: true - '@rolldown/binding-win32-ia32-msvc@1.0.0-beta.34': optional: true - '@rolldown/binding-win32-x64-msvc@1.0.0-beta.31': - optional: true - '@rolldown/binding-win32-x64-msvc@1.0.0-beta.34': optional: true - '@rolldown/pluginutils@1.0.0-beta.31': {} - '@rolldown/pluginutils@1.0.0-beta.34': {} '@rollup/plugin-replace@6.0.2(rollup@4.46.2)': @@ -5845,12 +5703,12 @@ snapshots: postcss-selector-parser: 6.0.10 tailwindcss: 4.1.12 - '@tailwindcss/vite@4.1.12(rolldown-vite@7.1.0(@types/node@22.18.0)(esbuild@0.25.5)(jiti@2.5.1)(yaml@2.7.1))': + '@tailwindcss/vite@4.1.12(rolldown-vite@7.1.5(@types/node@22.18.0)(esbuild@0.25.5)(jiti@2.5.1)(yaml@2.7.1))': dependencies: '@tailwindcss/node': 4.1.12 '@tailwindcss/oxide': 4.1.12 tailwindcss: 4.1.12 - vite: rolldown-vite@7.1.0(@types/node@22.18.0)(esbuild@0.25.5)(jiti@2.5.1)(yaml@2.7.1) + vite: rolldown-vite@7.1.5(@types/node@22.18.0)(esbuild@0.25.5)(jiti@2.5.1)(yaml@2.7.1) '@tsconfig/strictest@2.0.5': {} @@ -6182,13 +6040,13 @@ snapshots: chai: 5.2.0 tinyrainbow: 2.0.0 - '@vitest/mocker@3.2.4(vite@7.1.2(@types/node@22.18.0)(jiti@2.5.1)(lightningcss@1.30.1)(yaml@2.7.1))': + '@vitest/mocker@3.2.4(vite@7.1.3(@types/node@22.18.0)(jiti@2.5.1)(lightningcss@1.30.1)(yaml@2.7.1))': dependencies: '@vitest/spy': 3.2.4 estree-walker: 3.0.3 magic-string: 0.30.18 optionalDependencies: - vite: 7.1.2(@types/node@22.18.0)(jiti@2.5.1)(lightningcss@1.30.1)(yaml@2.7.1) + vite: 7.1.3(@types/node@22.18.0)(jiti@2.5.1)(lightningcss@1.30.1)(yaml@2.7.1) '@vitest/pretty-format@3.2.4': dependencies: @@ -6780,10 +6638,6 @@ snapshots: dependencies: walk-up-path: 3.0.1 - fdir@6.4.6(picomatch@4.0.3): - optionalDependencies: - picomatch: 4.0.3 - fdir@6.5.0(picomatch@4.0.3): optionalDependencies: picomatch: 4.0.3 @@ -7850,13 +7704,13 @@ snapshots: - oxc-resolver - supports-color - rolldown-vite@7.1.0(@types/node@22.18.0)(esbuild@0.25.5)(jiti@2.5.1)(yaml@2.7.1): + rolldown-vite@7.1.5(@types/node@22.18.0)(esbuild@0.25.5)(jiti@2.5.1)(yaml@2.7.1): dependencies: fdir: 6.5.0(picomatch@4.0.3) lightningcss: 1.30.1 picomatch: 4.0.3 postcss: 8.5.6 - rolldown: 1.0.0-beta.31 + rolldown: 1.0.0-beta.34 tinyglobby: 0.2.14 optionalDependencies: '@types/node': 22.18.0 @@ -7865,28 +7719,6 @@ snapshots: jiti: 2.5.1 yaml: 2.7.1 - rolldown@1.0.0-beta.31: - dependencies: - '@oxc-project/runtime': 0.80.0 - '@oxc-project/types': 0.80.0 - '@rolldown/pluginutils': 1.0.0-beta.31 - ansis: 4.1.0 - optionalDependencies: - '@rolldown/binding-android-arm64': 1.0.0-beta.31 - '@rolldown/binding-darwin-arm64': 1.0.0-beta.31 - '@rolldown/binding-darwin-x64': 1.0.0-beta.31 - '@rolldown/binding-freebsd-x64': 1.0.0-beta.31 - '@rolldown/binding-linux-arm-gnueabihf': 1.0.0-beta.31 - '@rolldown/binding-linux-arm64-gnu': 1.0.0-beta.31 - '@rolldown/binding-linux-arm64-musl': 1.0.0-beta.31 - '@rolldown/binding-linux-arm64-ohos': 1.0.0-beta.31 - '@rolldown/binding-linux-x64-gnu': 1.0.0-beta.31 - '@rolldown/binding-linux-x64-musl': 1.0.0-beta.31 - '@rolldown/binding-wasm32-wasi': 1.0.0-beta.31 - '@rolldown/binding-win32-arm64-msvc': 1.0.0-beta.31 - '@rolldown/binding-win32-ia32-msvc': 1.0.0-beta.31 - '@rolldown/binding-win32-x64-msvc': 1.0.0-beta.31 - rolldown@1.0.0-beta.34: dependencies: '@oxc-project/runtime': 0.82.3 @@ -8143,7 +7975,7 @@ snapshots: tinyglobby@0.2.14: dependencies: - fdir: 6.4.6(picomatch@4.0.3) + fdir: 6.5.0(picomatch@4.0.3) picomatch: 4.0.3 tinypool@1.1.1: {} @@ -8351,15 +8183,15 @@ snapshots: unist-util-stringify-position: 4.0.0 vfile-message: 4.0.2 - vite-dev-rpc@1.1.0(rolldown-vite@7.1.0(@types/node@22.18.0)(esbuild@0.25.5)(jiti@2.5.1)(yaml@2.7.1)): + vite-dev-rpc@1.1.0(rolldown-vite@7.1.5(@types/node@22.18.0)(esbuild@0.25.5)(jiti@2.5.1)(yaml@2.7.1)): dependencies: birpc: 2.5.0 - vite: rolldown-vite@7.1.0(@types/node@22.18.0)(esbuild@0.25.5)(jiti@2.5.1)(yaml@2.7.1) - vite-hot-client: 2.1.0(rolldown-vite@7.1.0(@types/node@22.18.0)(esbuild@0.25.5)(jiti@2.5.1)(yaml@2.7.1)) + vite: rolldown-vite@7.1.5(@types/node@22.18.0)(esbuild@0.25.5)(jiti@2.5.1)(yaml@2.7.1) + vite-hot-client: 2.1.0(rolldown-vite@7.1.5(@types/node@22.18.0)(esbuild@0.25.5)(jiti@2.5.1)(yaml@2.7.1)) - vite-hot-client@2.1.0(rolldown-vite@7.1.0(@types/node@22.18.0)(esbuild@0.25.5)(jiti@2.5.1)(yaml@2.7.1)): + vite-hot-client@2.1.0(rolldown-vite@7.1.5(@types/node@22.18.0)(esbuild@0.25.5)(jiti@2.5.1)(yaml@2.7.1)): dependencies: - vite: rolldown-vite@7.1.0(@types/node@22.18.0)(esbuild@0.25.5)(jiti@2.5.1)(yaml@2.7.1) + vite: rolldown-vite@7.1.5(@types/node@22.18.0)(esbuild@0.25.5)(jiti@2.5.1)(yaml@2.7.1) vite-node@3.2.4(@types/node@22.18.0)(esbuild@0.25.5)(jiti@2.5.1)(yaml@2.7.1): dependencies: @@ -8367,7 +8199,7 @@ snapshots: debug: 4.4.1 es-module-lexer: 1.7.0 pathe: 2.0.3 - vite: rolldown-vite@7.1.0(@types/node@22.18.0)(esbuild@0.25.5)(jiti@2.5.1)(yaml@2.7.1) + vite: rolldown-vite@7.1.5(@types/node@22.18.0)(esbuild@0.25.5)(jiti@2.5.1)(yaml@2.7.1) transitivePeerDependencies: - '@types/node' - esbuild @@ -8382,7 +8214,7 @@ snapshots: - tsx - yaml - vite-plugin-inspect@11.3.3(rolldown-vite@7.1.0(@types/node@22.18.0)(esbuild@0.25.5)(jiti@2.5.1)(yaml@2.7.1)): + vite-plugin-inspect@11.3.3(rolldown-vite@7.1.5(@types/node@22.18.0)(esbuild@0.25.5)(jiti@2.5.1)(yaml@2.7.1)): dependencies: ansis: 4.1.0 debug: 4.4.1 @@ -8392,12 +8224,12 @@ snapshots: perfect-debounce: 2.0.0 sirv: 3.0.1 unplugin-utils: 0.3.0 - vite: rolldown-vite@7.1.0(@types/node@22.18.0)(esbuild@0.25.5)(jiti@2.5.1)(yaml@2.7.1) - vite-dev-rpc: 1.1.0(rolldown-vite@7.1.0(@types/node@22.18.0)(esbuild@0.25.5)(jiti@2.5.1)(yaml@2.7.1)) + vite: rolldown-vite@7.1.5(@types/node@22.18.0)(esbuild@0.25.5)(jiti@2.5.1)(yaml@2.7.1) + vite-dev-rpc: 1.1.0(rolldown-vite@7.1.5(@types/node@22.18.0)(esbuild@0.25.5)(jiti@2.5.1)(yaml@2.7.1)) transitivePeerDependencies: - supports-color - vite@7.1.2(@types/node@22.18.0)(jiti@2.5.1)(lightningcss@1.30.1)(yaml@2.7.1): + vite@7.1.3(@types/node@22.18.0)(jiti@2.5.1)(lightningcss@1.30.1)(yaml@2.7.1): dependencies: esbuild: 0.25.5 fdir: 6.5.0(picomatch@4.0.3) @@ -8412,15 +8244,15 @@ snapshots: lightningcss: 1.30.1 yaml: 2.7.1 - vitefu@1.1.1(rolldown-vite@7.1.0(@types/node@22.18.0)(esbuild@0.25.5)(jiti@2.5.1)(yaml@2.7.1)): + vitefu@1.1.1(rolldown-vite@7.1.5(@types/node@22.18.0)(esbuild@0.25.5)(jiti@2.5.1)(yaml@2.7.1)): optionalDependencies: - vite: rolldown-vite@7.1.0(@types/node@22.18.0)(esbuild@0.25.5)(jiti@2.5.1)(yaml@2.7.1) + vite: rolldown-vite@7.1.5(@types/node@22.18.0)(esbuild@0.25.5)(jiti@2.5.1)(yaml@2.7.1) vitest@3.2.4(@types/debug@4.1.12)(@types/node@22.18.0)(esbuild@0.25.5)(jiti@2.5.1)(lightningcss@1.30.1)(yaml@2.7.1): dependencies: '@types/chai': 5.2.2 '@vitest/expect': 3.2.4 - '@vitest/mocker': 3.2.4(vite@7.1.2(@types/node@22.18.0)(jiti@2.5.1)(lightningcss@1.30.1)(yaml@2.7.1)) + '@vitest/mocker': 3.2.4(vite@7.1.3(@types/node@22.18.0)(jiti@2.5.1)(lightningcss@1.30.1)(yaml@2.7.1)) '@vitest/pretty-format': 3.2.4 '@vitest/runner': 3.2.4 '@vitest/snapshot': 3.2.4 @@ -8438,7 +8270,7 @@ snapshots: tinyglobby: 0.2.14 tinypool: 1.1.1 tinyrainbow: 2.0.0 - vite: 7.1.2(@types/node@22.18.0)(jiti@2.5.1)(lightningcss@1.30.1)(yaml@2.7.1) + vite: 7.1.3(@types/node@22.18.0)(jiti@2.5.1)(lightningcss@1.30.1)(yaml@2.7.1) vite-node: 3.2.4(@types/node@22.18.0)(esbuild@0.25.5)(jiti@2.5.1)(yaml@2.7.1) why-is-node-running: 2.3.0 optionalDependencies: diff --git a/pnpm-workspace.yaml b/pnpm-workspace.yaml index 313a0a0d9..4ba25d40c 100644 --- a/pnpm-workspace.yaml +++ b/pnpm-workspace.yaml @@ -10,8 +10,8 @@ catalogs: overrides: '@types/estree': ^1.0.8 - 'vitest>vite': npm:vite@^7.0.6 - 'vite': npm:rolldown-vite@^7.0.11 + 'vitest>vite': npm:vite@^7.1.3 + 'vite': npm:rolldown-vite@^7.1.5 dedupeInjectedDeps: false From 843efd90b3a088c7e6afbbd2b301d1325e82f180 Mon Sep 17 00:00:00 2001 From: sapphi-red <49056869+sapphi-red@users.noreply.github.com> Date: Thu, 11 Sep 2025 21:42:52 +0900 Subject: [PATCH 20/25] fix: merge conflict error --- packages/common/refresh-utils.ts | 2 +- pnpm-lock.yaml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/common/refresh-utils.ts b/packages/common/refresh-utils.ts index 602ee6ab9..cad2d554a 100644 --- a/packages/common/refresh-utils.ts +++ b/packages/common/refresh-utils.ts @@ -41,7 +41,7 @@ if (import.meta.hot && !inWebWorker) { const currentExports = __vite_react_currentExports; RefreshRuntime.registerExportsForReactRefresh(${JSON.stringify( id, - )}, currentExports, nextExports); + )}, currentExports); import.meta.hot.accept((nextExports) => { if (!nextExports) return; const invalidateMessage = RefreshRuntime.validateRefreshBoundaryAndEnqueueUpdate(${JSON.stringify( diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index f9d9d9f5a..1e2cab3ca 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -8795,7 +8795,7 @@ snapshots: picomatch: 4.0.3 postcss: 8.5.6 rollup: 4.50.1 - tinyglobby: 0.2.14 + tinyglobby: 0.2.15 optionalDependencies: '@types/node': 22.18.1 fsevents: 2.3.3 From 1caff55aad34a913ff9cfd1a7bbe4be54ad4d341 Mon Sep 17 00:00:00 2001 From: sapphi-red <49056869+sapphi-red@users.noreply.github.com> Date: Thu, 11 Sep 2025 21:47:41 +0900 Subject: [PATCH 21/25] wip: native react refresh wrapper plugin --- packages/plugin-react/src/index.ts | 29 ++++++++++++++++++++--------- 1 file changed, 20 insertions(+), 9 deletions(-) diff --git a/packages/plugin-react/src/index.ts b/packages/plugin-react/src/index.ts index b66a0b824..35ae655c8 100644 --- a/packages/plugin-react/src/index.ts +++ b/packages/plugin-react/src/index.ts @@ -352,8 +352,14 @@ export default function viteReact(opts: Options = {}): Plugin[] { }, } + const nativeRefreshWrapper: Plugin | undefined = + // TODO: apply: 'serve' + 'reactRefreshWrapperPlugin' in vite + ? vite.reactRefreshWrapperPlugin() + : undefined + // for rolldown-vite - const viteRefreshWrapper: Plugin = { + const viteRefreshWrapper: Plugin = nativeRefreshWrapper ?? { name: 'vite:react:refresh-wrapper', apply: 'serve', transform: { @@ -429,14 +435,19 @@ export default function viteReact(opts: Options = {}): Plugin[] { include: dependencies, }, }), - resolveId: { - filter: { id: exactRegex(runtimePublicPath) }, - handler(id) { - if (id === runtimePublicPath) { - return id - } - }, - }, + // native refresh wrapper plugin handles runtime resolution + ...(nativeRefreshWrapper + ? {} + : { + resolveId: { + filter: { id: exactRegex(runtimePublicPath) }, + handler(id) { + if (id === runtimePublicPath) { + return id + } + }, + }, + }), load: { filter: { id: exactRegex(runtimePublicPath) }, handler(id) { From fd65b75f17d1c967212e65e827e4c61d58a3f585 Mon Sep 17 00:00:00 2001 From: sapphi-red <49056869+sapphi-red@users.noreply.github.com> Date: Fri, 12 Sep 2025 19:41:24 +0900 Subject: [PATCH 22/25] wip: native react refresh wrapper plugin --- packages/plugin-react/src/index.ts | 18 ++++++++++++++++-- 1 file changed, 16 insertions(+), 2 deletions(-) diff --git a/packages/plugin-react/src/index.ts b/packages/plugin-react/src/index.ts index 35ae655c8..9bd442343 100644 --- a/packages/plugin-react/src/index.ts +++ b/packages/plugin-react/src/index.ts @@ -353,9 +353,23 @@ export default function viteReact(opts: Options = {}): Plugin[] { } const nativeRefreshWrapper: Plugin | undefined = - // TODO: apply: 'serve' 'reactRefreshWrapperPlugin' in vite - ? vite.reactRefreshWrapperPlugin() + ? { + name: 'vite:react:refresh-wrapper', + apply: 'serve', + applyToEnvironment(env) { + return env.config.consumer === 'client' && !skipFastRefresh + ? // eslint-disable-next-line @typescript-eslint/ban-ts-comment + // @ts-ignore only available in rolldown-vite + vite.reactRefreshWrapperPlugin({ + include, + exclude, + jsxImportSource, + reactRefreshHost: opts.reactRefreshHost ?? '', + }) + : undefined + }, + } : undefined // for rolldown-vite From 153cf0e21040474732f5e7bc2558fd6e313ee34f Mon Sep 17 00:00:00 2001 From: sapphi-red <49056869+sapphi-red@users.noreply.github.com> Date: Tue, 16 Sep 2025 14:36:10 +0900 Subject: [PATCH 23/25] wip: native react refresh wrapper plugin --- packages/plugin-react/src/index.ts | 13 ++++++++++--- 1 file changed, 10 insertions(+), 3 deletions(-) diff --git a/packages/plugin-react/src/index.ts b/packages/plugin-react/src/index.ts index 9bd442343..3dd962832 100644 --- a/packages/plugin-react/src/index.ts +++ b/packages/plugin-react/src/index.ts @@ -355,7 +355,7 @@ export default function viteReact(opts: Options = {}): Plugin[] { const nativeRefreshWrapper: Plugin | undefined = 'reactRefreshWrapperPlugin' in vite ? { - name: 'vite:react:refresh-wrapper', + name: 'vite:react:native-refresh-wrapper', apply: 'serve', applyToEnvironment(env) { return env.config.consumer === 'client' && !skipFastRefresh @@ -373,9 +373,14 @@ export default function viteReact(opts: Options = {}): Plugin[] { : undefined // for rolldown-vite - const viteRefreshWrapper: Plugin = nativeRefreshWrapper ?? { + const viteRefreshWrapper: Plugin = { name: 'vite:react:refresh-wrapper', apply: 'serve', + configResolved(config) { + if (nativeRefreshWrapper && config.experimental.fullBundleMode) { + delete viteRefreshWrapper.transform + } + }, transform: { filter: { id: { @@ -493,7 +498,9 @@ export default function viteReact(opts: Options = {}): Plugin[] { return [ viteBabel, - ...(isRolldownVite ? [viteRefreshWrapper, viteConfigPost] : []), + ...(isRolldownVite + ? [nativeRefreshWrapper, viteRefreshWrapper, viteConfigPost] + : []), viteReactRefresh, ] } From 0ee5e7cd84f59c20ae834a6e202587cf8d5c89b9 Mon Sep 17 00:00:00 2001 From: sapphi-red <49056869+sapphi-red@users.noreply.github.com> Date: Tue, 16 Sep 2025 14:50:43 +0900 Subject: [PATCH 24/25] wip: native react refresh wrapper plugin --- packages/plugin-react/src/index.ts | 71 ++++++++++++++---------------- 1 file changed, 32 insertions(+), 39 deletions(-) diff --git a/packages/plugin-react/src/index.ts b/packages/plugin-react/src/index.ts index 3dd962832..56c13713a 100644 --- a/packages/plugin-react/src/index.ts +++ b/packages/plugin-react/src/index.ts @@ -352,34 +352,34 @@ export default function viteReact(opts: Options = {}): Plugin[] { }, } - const nativeRefreshWrapper: Plugin | undefined = - 'reactRefreshWrapperPlugin' in vite - ? { - name: 'vite:react:native-refresh-wrapper', - apply: 'serve', - applyToEnvironment(env) { - return env.config.consumer === 'client' && !skipFastRefresh - ? // eslint-disable-next-line @typescript-eslint/ban-ts-comment - // @ts-ignore only available in rolldown-vite - vite.reactRefreshWrapperPlugin({ - include, - exclude, - jsxImportSource, - reactRefreshHost: opts.reactRefreshHost ?? '', - }) - : undefined - }, - } - : undefined - // for rolldown-vite const viteRefreshWrapper: Plugin = { name: 'vite:react:refresh-wrapper', apply: 'serve', - configResolved(config) { - if (nativeRefreshWrapper && config.experimental.fullBundleMode) { - delete viteRefreshWrapper.transform + async applyToEnvironment(env) { + if (env.config.consumer !== 'client' || skipFastRefresh) { + return false + } + if (!env.config.experimental.fullBundleMode) { + return true } + + let nativePlugin: ((options: any) => Plugin) | undefined + try { + nativePlugin = (await import('vite/internal')).reactRefreshWrapperPlugin + } catch {} + if (!nativePlugin) { + return true + } + + delete viteRefreshWrapper.transform + + return nativePlugin({ + include, + exclude, + jsxImportSource, + reactRefreshHost: opts.reactRefreshHost ?? '', + }) as unknown as boolean }, transform: { filter: { @@ -454,19 +454,14 @@ export default function viteReact(opts: Options = {}): Plugin[] { include: dependencies, }, }), - // native refresh wrapper plugin handles runtime resolution - ...(nativeRefreshWrapper - ? {} - : { - resolveId: { - filter: { id: exactRegex(runtimePublicPath) }, - handler(id) { - if (id === runtimePublicPath) { - return id - } - }, - }, - }), + resolveId: { + filter: { id: exactRegex(runtimePublicPath) }, + handler(id) { + if (id === runtimePublicPath) { + return id + } + }, + }, load: { filter: { id: exactRegex(runtimePublicPath) }, handler(id) { @@ -498,9 +493,7 @@ export default function viteReact(opts: Options = {}): Plugin[] { return [ viteBabel, - ...(isRolldownVite - ? [nativeRefreshWrapper, viteRefreshWrapper, viteConfigPost] - : []), + ...(isRolldownVite ? [viteRefreshWrapper, viteConfigPost] : []), viteReactRefresh, ] } From 934f295a620a94ccb8bc6c9e1ff926e36c68f7fc Mon Sep 17 00:00:00 2001 From: sapphi-red <49056869+sapphi-red@users.noreply.github.com> Date: Thu, 18 Sep 2025 17:38:38 +0900 Subject: [PATCH 25/25] wip: native react refresh wrapper plugin --- packages/plugin-react/src/index.ts | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/packages/plugin-react/src/index.ts b/packages/plugin-react/src/index.ts index 56c13713a..bed627738 100644 --- a/packages/plugin-react/src/index.ts +++ b/packages/plugin-react/src/index.ts @@ -360,15 +360,17 @@ export default function viteReact(opts: Options = {}): Plugin[] { if (env.config.consumer !== 'client' || skipFastRefresh) { return false } - if (!env.config.experimental.fullBundleMode) { - return true - } let nativePlugin: ((options: any) => Plugin) | undefined try { nativePlugin = (await import('vite/internal')).reactRefreshWrapperPlugin } catch {} - if (!nativePlugin) { + if ( + !nativePlugin || + vite.version === '7.1.10' || + vite.version === '7.1.11' + ) { + // the native plugin in 7.1.10 and 7.1.11 does not support dev return true } @@ -381,6 +383,7 @@ export default function viteReact(opts: Options = {}): Plugin[] { reactRefreshHost: opts.reactRefreshHost ?? '', }) as unknown as boolean }, + // we can remove this transform hook when we drop support for rolldown-vite 7.1.11 and below transform: { filter: { id: {